VistA-internationalization/p/RRCI18N.m

159 lines
4.5 KiB
Mathematica
Raw Permalink Normal View History

2009-11-15 23:33:32 -05:00
RRCI18N ; Internationalization Converter
;RRCI18N V0.0001;;MTZ/RCR/27MAY2004
;Donated by Chris Richardson
;Initial database design by Marcus Werner
;Copyright 2008 WorldVistA. Licensed under the terms of the GNU
;General Public License See attached copy of the License.
;
;This program is free software; you can redistribute it and/or modify
;it under the terms of the GNU General Public License as published by
;the Free Software Foundation; either version 2 of the License, or
;(at your option) any later version.
;
;This program is distributed in the hope that it will be useful,
;but WITHOUT ANY WARRANTY; without even the implied warranty of
;MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
;GNU General Public License for more details.
;
;You should have received a copy of the GNU General Public License along
;with this program; if not, write to the Free Software Foundation, Inc.,
;51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
V ; Note: Snapshot file .84 before this run so that
; it might be restored completely, if needed.
N CODE,EX,I,J,K,LL,RRCODE,RRCFILE,RRCIEN,RRCNODE,MSK
S (CODE,RRCODE(1,0))="$$EZBLD^DIALOG("
S MSK=$$NAMEMSK(),RRCIEN=2150000000
Q:MSK=""
;
S EX=0
S J=RRCIEN-1
F S J=$O(^DI(.84,J)) Q:('J)!(J>2159999999) D
. S I=$G(^DI(.84,J,0)),S42=$P(I,"^",3)
. K ^DI(.84,J),^DI(.84,"B",J)
. ; Dump all generated xrefs
. K:$L(S42) ^DI(.84,"D",S42,J)
.QUIT
D CLEAN
S TRGDIR="/tmp/I18N/r/"
; Clear the decks
ZSY "mkdir -p "_TRGDIR
ZSY "rm -f "_TRGDIR_"[A-G]*.m"
ZSY "rm -f "_TRGDIR_"[G-K]*.m"
ZSY "rm -f "_TRGDIR_"[K-M]*.m"
ZSY "rm -f "_TRGDIR_"[M-P]*.m"
ZSY "rm -f "_TRGDIR_"[P-W]*.m"
ZSY "rm -f "_TRGDIR_"[W-Z]*.m"
ZSY "rm -f "_TRGDIR_"*.m"
; D REINDX
F D Q:EX
. S RRCFILE=$ZSEARCH(MSK)
. I RRCFILE="" S EX=1 Q
. ;
. N CC,LC,X
. S (CC,LC)=0
. S RTN=$P(RRCFILE,"/",$L(RRCFILE,"/"))
. O RRCFILE:READ
. S RRCNUFL=TRGDIR_RTN
. S RTN=$P(RTN,".")
. O RRCNUFL:NEW
. U RRCFILE
. F LL=1:1 R X Q:'$L(X) D
. . N NL
. . S NL=""
. . S CC=CC+$L(X),LC=LC+1
. . S X=$$PULLSTR(X)
. . U RRCNUFL
. . W X,!
. . U RRCFILE
. .QUIT
. C RRCNUFL
. C RRCFILE
. U 0
. W RTN_":"_LC_":"_CC_" "
. W:$X>65 !
.QUIT
QUIT
; ============
NAMEMSK() ; Request the File Search Seed, ie. r/*.m
N M
R !,"Enter the file mask to include: ",M,!
QUIT M
; ============
; Note:
; I L?3.A <== Picked up a lot of the DIC(0)=Setups
;
PULLSTR(LN) ; Look for strings
N J,K,L,LX,L42,RL,NL
S NL=""
F J=2:2:$L(LN,"""") D
. S NL=NL_$P(LN,"""",J-1)_""""
. S (L,LX)=$P(LN,"""",J)
. S L42=$E(L,1,42)
. D:$L(L42)
. . I '$D(^VWDI(250.84,"B",L42)) D Q ; Check the Exclusions
. . . I L'?1"["1U.(1" ",1.UNP).1"]",L?.E2.A1." "2.A.E D MOD Q
. . . ; I L?3.A D MOD Q
. . . I L?3.(1" "1AP) D MOD Q
. . . I L?2.(1.2AN1":"1.AP1";") D MOD Q
. . . I L?1U1.A.1(1" ",1":",1";").E D MOD Q
. . .QUIT
. . ;
. . ; Now if no condition found, add string into NL
. . S NL=NL_L_""""
. .QUIT
.QUIT
S K=$P(LN,"""",J+1)
S:K'="" NL=NL_K
S:NL="" NL=LN
QUIT NL
; ============
MOD ; Modify the Line of Code
; D
; . I $L(L)>60 S L=$E(L,1,60),^RRCSTR(L,RRCFILE,LL,J,"STR")=LX Q
; . ;
; . S ^RRCSTR(L,RRCFILE,LL,J)=""
; .QUIT
; Get or build a new IEN for this string and return in RL
S RL=$$RESOLVE(LX)
S:$E(NL,$L(NL))="""" NL=$E(NL,1,$L(NL)-1)
S NL=NL_CODE_RL_")"
QUIT
; ============
RESOLVE(ST) ; Resolve the String as being in DIALOG or add it.
N J,K,L,S42,S60
S S60=ST
S:$L(ST)>59 S60=$E(ST,1,60)
S S42=$E(S60,1,42)
S J=$O(^DI(.84,"D",S42,""))
D:J=""
. S (RRCIEN,J)=RRCIEN+1
. S ^DI(.84,J,0)=J_"^1^"_S42
. S ^DI(.84,J,2,0)="^.844^1^1"
. S ^DI(.84,J,2,1,0)=ST
. S ^DI(.84,"B",J,J)=""
. S ^DI(.84,"D",S42,J)=RTN
.QUIT
S D1=$O(^DI(.84,J,5,"B",RTN,""))
D:'D1
. S D1=$P($G(^DI(.84,J,5,0)),"^",3)+1
. S ^DI(.84,J,5,0)="^.841^"_D1_"^"_D1
.QUIT
S ^DI(.84,J,5,D1,0)=RTN_"^"_LL
S ^DI(.84,J,5,"B",RTN,D1)=""
QUIT J
; ============
CLEAN ; Check the "D" Cross Reference and Clear Inconsistancies
N I,J,K,L,M
S I=""
F S I=$O(^DI(.84,"D",I)) Q:I="" D
. S J=""
. F S J=$O(^DI(.84,"D",I,J)) Q:J="" D
. . S K=$P($G(^DI(.84,J,0)),"^",3)
. . I I'=K K ^DI(.84,"D",I,J)
. .QUIT
.QUIT
QUIT
; ===========