1 | PXRMTEXT ; SLC/PKR - Text formatting utility routines. ;07/19/2007
|
---|
2 | ;;2.0;CLINICAL REMINDERS;**6**;Feb 04, 2005;Build 123
|
---|
3 | ;
|
---|
4 | ;============================================
|
---|
5 | NEWLINE ;Put TEXT on a new line to the output, make sure it does not end
|
---|
6 | ;with a " ".
|
---|
7 | N TLEN
|
---|
8 | ;If there is no text in TEXT don't do anything.
|
---|
9 | I TEXT=INDSTR Q
|
---|
10 | S TLEN=$L(TEXT)
|
---|
11 | I $E(TEXT,TLEN)=" " S TEXT=$E(TEXT,1,TLEN-1)
|
---|
12 | S NOUT=NOUT+1,TEXTOUT(NOUT)=TEXT
|
---|
13 | S TEXT=INDSTR,CLEN=0
|
---|
14 | Q
|
---|
15 | ;
|
---|
16 | ;============================================
|
---|
17 | BLANK ;Add a blank line (line containing just " ") to the output.
|
---|
18 | S NOUT=NOUT+1,TEXTOUT(NOUT)=" "
|
---|
19 | S TEXT=INDSTR,CLEN=0
|
---|
20 | Q
|
---|
21 | ;
|
---|
22 | ;============================================
|
---|
23 | CHECKLEN(WORD) ;Check to see if adding the next word makes the line too long.
|
---|
24 | ;If it does add it to the output and start a new line.
|
---|
25 | N LENWORD
|
---|
26 | S LENWORD=$L(WORD)
|
---|
27 | I (CLEN+LENWORD)>WIDTH D
|
---|
28 | . D NEWLINE
|
---|
29 | . I WORD'[" " S WORD=WORD_" ",LENWORD=LENWORD+1
|
---|
30 | . S TEXT=INDSTR_WORD,CLEN=LENWORD
|
---|
31 | E D
|
---|
32 | . I WORD'[" " S WORD=WORD_" ",LENWORD=LENWORD+1
|
---|
33 | . S TEXT=TEXT_WORD,CLEN=CLEN+LENWORD
|
---|
34 | Q
|
---|
35 | ;
|
---|
36 | ;============================================
|
---|
37 | COLFMT(FMTSTR,TEXTSTR,PC,NL,OUTPUT) ;Columnar text formatter.
|
---|
38 | ;FMTSTR - format string; ^ separated string for each column in the
|
---|
39 | ;output. 35R2 defines a right justified column 35 characters wide
|
---|
40 | ;with 2 blank spaces following. Columns can be centered (C) left
|
---|
41 | ;justified (L) or right justified (R).
|
---|
42 | ;TEXTSTR - string to be formated
|
---|
43 | ;PC - the pad character
|
---|
44 | ;NL - number of lines of output
|
---|
45 | ;OUTPUT - array containing output lines.
|
---|
46 | N COLOUT,ENTRY,FMT,JND,JUS,IND,LEN,NCOL,NLO,NROW,SP,TEMP,TEXT,WIDTH,WPSP
|
---|
47 | S NCOL=$L(FMTSTR,U),NROW=1
|
---|
48 | F IND=1:1:NCOL D
|
---|
49 | . S FMT=$P(FMTSTR,U,IND)
|
---|
50 | . S JUS(IND)=$S(FMT["C":"C",FMT["L":"L",FMT["R":"R",1:"C")
|
---|
51 | . S WIDTH(IND)=$P(FMT,JUS(IND),1)
|
---|
52 | . S SP(IND)=$P(FMT,JUS(IND),2)
|
---|
53 | . S WPSP(IND)=WIDTH(IND)+SP(IND)
|
---|
54 | F IND=1:1:NCOL D
|
---|
55 | . S ENTRY=$S(JUS(IND)="C":"CJ",JUS(IND)="L":"LJ",JUS(IND)="R":"RJ")
|
---|
56 | . S TEMP=$P(TEXTSTR,U,IND)
|
---|
57 | . S LEN=$L(TEMP)
|
---|
58 | . I LEN'>WIDTH(IND) D
|
---|
59 | .. S TEMP=$$@ENTRY^XLFSTR(TEMP,WIDTH(IND),PC)
|
---|
60 | .. S COLOUT(1,IND)=TEMP_$$LJ^XLFSTR("",SP(IND)," ")
|
---|
61 | . I LEN>WIDTH(IND) D
|
---|
62 | .. D FORMATS(1,WIDTH(IND),TEMP,.NLO,.TEXTOUT)
|
---|
63 | .. F JND=1:1:NLO D
|
---|
64 | ... S TEMP=$$@ENTRY^XLFSTR(TEXTOUT(JND),WIDTH(IND),PC)
|
---|
65 | ... S COLOUT(JND,IND)=TEMP_$$LJ^XLFSTR("",SP(IND)," ")
|
---|
66 | .. I NLO>NROW S NROW=NLO
|
---|
67 | F IND=1:1:NROW D
|
---|
68 | . S TEXT=""
|
---|
69 | . F JND=1:1:NCOL D
|
---|
70 | .. I $D(COLOUT(IND,JND)) S TEXT=TEXT_COLOUT(IND,JND)
|
---|
71 | .. E S TEXT=TEXT_$$LJ^XLFSTR("",(WPSP(JND))," ")
|
---|
72 | . S OUTPUT(IND)=TEXT
|
---|
73 | S NL=NROW
|
---|
74 | Q
|
---|
75 | ;
|
---|
76 | ;============================================
|
---|
77 | COLFMTA(FMTSTR,INPUT,PC,NL,OUTPUT) ;Columnar text formatter.
|
---|
78 | ;Array version of COLFMT. Input array is ^TMP($J,INPUT,M) and
|
---|
79 | ;output is ^TMP(OUTPUT,$J,N,0).
|
---|
80 | N COLOUT,ENTRY,FMT,JND,JUS,IND,LEN,NCOL,NLO,NROW,NUM
|
---|
81 | N SP,TEMP,TEXT,WIDTH,WPSP
|
---|
82 | S NCOL=$L(FMTSTR,U)
|
---|
83 | F IND=1:1:NCOL D
|
---|
84 | . S FMT=$P(FMTSTR,U,IND)
|
---|
85 | . S JUS(IND)=$S(FMT["C":"C",FMT["L":"L",FMT["R":"R",1:"C")
|
---|
86 | . S WIDTH(IND)=$P(FMT,JUS(IND),1)
|
---|
87 | . S SP(IND)=$P(FMT,JUS(IND),2)
|
---|
88 | . S WPSP(IND)=WIDTH(IND)+SP(IND)
|
---|
89 | S NL=0,NUM=""
|
---|
90 | F S NUM=$O(^TMP($J,INPUT,NUM)) Q:NUM="" D
|
---|
91 | . K COLOUT
|
---|
92 | . S NROW=1
|
---|
93 | . F IND=1:1:NCOL D
|
---|
94 | .. S ENTRY=$S(JUS(IND)="C":"CJ",JUS(IND)="L":"LJ",JUS(IND)="R":"RJ")
|
---|
95 | .. S TEMP=$P(^TMP($J,INPUT,NUM),U,IND)
|
---|
96 | .. S LEN=$L(TEMP)
|
---|
97 | .. I LEN'>WIDTH(IND) D
|
---|
98 | ... S TEMP=$$@ENTRY^XLFSTR(TEMP,WIDTH(IND),PC)
|
---|
99 | ... S COLOUT(1,IND)=TEMP_$$LJ^XLFSTR("",SP(IND)," ")
|
---|
100 | .. I LEN>WIDTH(IND) D
|
---|
101 | ... D FORMATS(1,WIDTH(IND),TEMP,.NLO,.TEXTOUT)
|
---|
102 | ... F JND=1:1:NLO D
|
---|
103 | .... S TEMP=$$@ENTRY^XLFSTR(TEXTOUT(JND),WIDTH(IND),PC)
|
---|
104 | .... S COLOUT(JND,IND)=TEMP_$$LJ^XLFSTR("",SP(IND)," ")
|
---|
105 | ... I NLO>NROW S NROW=NLO
|
---|
106 | . F IND=1:1:NROW D
|
---|
107 | .. S TEXT=""
|
---|
108 | .. F JND=1:1:NCOL D
|
---|
109 | ... I $D(COLOUT(IND,JND)) S TEXT=TEXT_COLOUT(IND,JND)
|
---|
110 | ... E S TEXT=TEXT_$$LJ^XLFSTR("",(WPSP(JND))," ")
|
---|
111 | .. S NL=NL+1,^TMP(OUTPUT,$J,NL,0)=TEXT
|
---|
112 | Q
|
---|
113 | ;
|
---|
114 | ;============================================
|
---|
115 | FORMAT(LM,RM,NIN,TEXTIN,NOUT,TEXTOUT) ;Format the text in TEXTIN so it has
|
---|
116 | ;a left margin of LM and a right margin of RM. The formatted text
|
---|
117 | ;is in TEXTOUT. "\\" is the end of line marker. Lines ending with
|
---|
118 | ;"\\" will not have anything appended to them. A blank line can
|
---|
119 | ;be created by creating a line containing just "\\". Lines containing
|
---|
120 | ;nothing but whitespace will also act like a "\\".
|
---|
121 | I NIN=0 S NOUT=0 Q
|
---|
122 | N ACHAR,ALLWSP,CHAR,CLEN,END,IND,INDENT,INDSTR,JND
|
---|
123 | N LWSP,NWSP,START,TEMP,TEXT,TLEN,WIDTH,W1,W2,WORD
|
---|
124 | ;Catalog the whitespace so we have places to break and look for
|
---|
125 | ;end of line markers.
|
---|
126 | F IND=1:1:NIN D
|
---|
127 | . S TEMP=TEXTIN(IND)
|
---|
128 | . S TLEN=$L(TEMP)
|
---|
129 | . S ALLWSP=1,NWSP=0
|
---|
130 | . F JND=1:1:TLEN D
|
---|
131 | .. S CHAR=$E(TEMP,JND)
|
---|
132 | .. S ACHAR=$A(CHAR)
|
---|
133 | .. I ACHAR>32 S ALLWSP=0
|
---|
134 | .. E S NWSP=NWSP+1,LWSP(IND,NWSP)=JND
|
---|
135 | .;Mark the end of the line.
|
---|
136 | . S NWSP=NWSP+1,LWSP(IND,NWSP)=TLEN,LWSP(IND)=NWSP
|
---|
137 | . I ALLWSP S LWSP(IND,"ALLWSP")=""
|
---|
138 | I LM<1 S LM=1
|
---|
139 | S WIDTH=RM-LM+1
|
---|
140 | S INDENT=LM-1
|
---|
141 | S INDSTR=""
|
---|
142 | F IND=1:1:INDENT S INDSTR=INDSTR_" "
|
---|
143 | S NOUT=0
|
---|
144 | S TEXT=INDSTR,CLEN=0
|
---|
145 | F IND=1:1:NIN D
|
---|
146 | .;If there is a blank line force whatever is in TEXT to be output by
|
---|
147 | .;calling NEWLINE and then add the blank.
|
---|
148 | . I $D(LWSP(IND,"ALLWSP")) D NEWLINE,BLANK Q
|
---|
149 | . S TEMP=TEXTIN(IND)
|
---|
150 | . S (END,NWSP)=0
|
---|
151 | . F NWSP=1:1:LWSP(IND) D
|
---|
152 | .. S START=END+1,END=LWSP(IND,NWSP)
|
---|
153 | .. S WORD=$E(TEMP,START,END)
|
---|
154 | .. I WORD["\\" D Q
|
---|
155 | ... S W1=$P(WORD,"\\",1)
|
---|
156 | ... D CHECKLEN(W1)
|
---|
157 | ... D NEWLINE
|
---|
158 | ... S W2=$P(WORD,"\\",2)
|
---|
159 | ... I W2'="" D CHECKLEN(W2)
|
---|
160 | .. D CHECKLEN(WORD)
|
---|
161 | ;Output the last line.
|
---|
162 | D NEWLINE
|
---|
163 | Q
|
---|
164 | ;
|
---|
165 | ;============================================
|
---|
166 | FORMATS(LM,RM,TEXTLINE,NOUT,TEXTOUT) ;Take a single line of input text
|
---|
167 | ;and format it.
|
---|
168 | N TEXTIN
|
---|
169 | S TEXTIN(1)=TEXTLINE
|
---|
170 | D FORMAT(LM,RM,1,.TEXTIN,.NOUT,.TEXTOUT)
|
---|
171 | Q
|
---|
172 | ;
|
---|
173 | ;============================================
|
---|
174 | LMFMTSTR(VALMDDF,JSTR) ;The List Manager variable VALMDDF contains the
|
---|
175 | ;list template caption column formatting information. It contains
|
---|
176 | ;the starting column and the width if the form
|
---|
177 | ;VALMDDF(COLUMN NAME)=COLUMN NAME^COLUMN^WIDTH^CAPTION^VIDEO^SCROLL
|
---|
178 | ;LOCK. JUSSTR, which is optional,is the justification for each column;
|
---|
179 | ;(L=left, C=center, R=right) the default is center. Use this information
|
---|
180 | ;to build the format string for the column formatter COLFMT.
|
---|
181 | N CN,COL,FMTSTR,IND,JC,JUSSTR,PLCOL,SCOL,SP,TEMP,WIDTH
|
---|
182 | ;Sort by columns
|
---|
183 | S IND=""
|
---|
184 | F S IND=$O(VALMDDF(IND)) Q:IND="" D
|
---|
185 | . S TEMP=VALMDDF(IND)
|
---|
186 | . S COL($P(TEMP,U,2))=$P(TEMP,U,3)
|
---|
187 | S JUSSTR=$G(JSTR)
|
---|
188 | S (CN,PLCOL,SCOL,SP)=0
|
---|
189 | S FMTSTR=""
|
---|
190 | S SCOL=0
|
---|
191 | F S SCOL=$O(COL(SCOL)) Q:SCOL="" D
|
---|
192 | . S CN=CN+1
|
---|
193 | . S WIDTH=COL(SCOL)
|
---|
194 | . I CN=1 S PLCOL=WIDTH
|
---|
195 | . E S SP=SCOL-PLCOL-1,FMTSTR=FMTSTR_SP_U,PLCOL=SCOL+WIDTH-1
|
---|
196 | . S JC=$E(JUSSTR,CN)
|
---|
197 | . I JC="" S JC="C"
|
---|
198 | . S TEMP=WIDTH_JC
|
---|
199 | . S FMTSTR=FMTSTR_TEMP
|
---|
200 | Q FMTSTR
|
---|
201 | ;
|
---|