Ignore:
Timestamp:
Dec 4, 2009, 12:11:15 AM (14 years ago)
Author:
George Lilly
Message:

revised back to 6/30/08 version

File:
1 edited

Legend:

Unmodified
Added
Removed
  • WorldVistAEHR/trunk/r/CLINICAL_REMINDERS-PXRM/PXRMTEXT.m

    r613 r623  
    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         ;
     1PXRMTEXT ; SLC/PKR - Text formatting utility routines. ;11/03/2004
     2 ;;2.0;CLINICAL REMINDERS;;Feb 04, 2005
     3 ;
     4 ;================================================================
     5NEWLINE ;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 ;================================================================
     17BLANK ;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 ;================================================================
     23CHECKLEN(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 ;================================================================
     37FORMAT(LM,RM,NIN,TEXTIN,NOUT,TEXTOUT) ;Format the text in TEXTIN so it has
     38 ;a left margin of LM and a right margin of RM. The formatted text
     39 ;is in TEXTOUT. "\\" is the end of line marker. Lines ending with
     40 ;"\\" will not have anything appended to them. A blank line can
     41 ;be created by creating a line containing just "\\". Lines containing
     42 ;nothing but whitespace will also act like a "\\".
     43 I NIN=0 S NOUT=0 Q
     44 N ACHAR,ALLWSP,CHAR,CLEN,END,IND,INDENT,INDSTR,JND
     45 N LWSP,NWSP,START,TEMP,TEXT,TLEN,WIDTH,W1,W2,WORD
     46 ;Catalog the whitespace so we have places to break and look for
     47 ;end of line markers.
     48 F IND=1:1:NIN D
     49 . S TEMP=TEXTIN(IND)
     50 . S TLEN=$L(TEMP)
     51 . S ALLWSP=1,NWSP=0
     52 . F JND=1:1:TLEN D
     53 .. S CHAR=$E(TEMP,JND)
     54 .. S ACHAR=$A(CHAR)
     55 .. I ACHAR>32 S ALLWSP=0
     56 .. E  S NWSP=NWSP+1,LWSP(IND,NWSP)=JND
     57 .;Mark the end of the line.
     58 . S NWSP=NWSP+1,LWSP(IND,NWSP)=TLEN,LWSP(IND)=NWSP
     59 . I ALLWSP S LWSP(IND,"ALLWSP")=""
     60 I LM<1 S LM=1
     61 S WIDTH=RM-LM+1
     62 S INDENT=LM-1
     63 S INDSTR=""
     64 F IND=1:1:INDENT S INDSTR=INDSTR_" "
     65 S NOUT=0
     66 S TEXT=INDSTR,CLEN=0
     67 F IND=1:1:NIN D
     68 .;If there is a blank line force whatever is in TEXT to be output by
     69 .;calling NEWLINE and then add the blank.
     70 . I $D(LWSP(IND,"ALLWSP")) D NEWLINE,BLANK Q
     71 . S TEMP=TEXTIN(IND)
     72 . S (END,NWSP)=0
     73 . F NWSP=1:1:LWSP(IND) D
     74 .. S START=END+1,END=LWSP(IND,NWSP)
     75 .. S WORD=$E(TEMP,START,END)
     76 .. I WORD["\\" D  Q
     77 ... S W1=$P(WORD,"\\",1)
     78 ... D CHECKLEN(W1)
     79 ... D NEWLINE
     80 ... S W2=$P(WORD,"\\",2)
     81 ... I W2'="" D CHECKLEN(W2)
     82 .. D CHECKLEN(WORD)
     83 ;Output the last line.
     84 D NEWLINE
     85 Q
     86 ;
     87 ;================================================================
     88FORMATS(LM,RM,TEXTLINE,NOUT,TEXTOUT) ;Take a single line of input text
     89 ;and format it.
     90 N TEXTIN
     91 S TEXTIN(1)=TEXTLINE
     92 D FORMAT(LM,RM,1,.TEXTIN,.NOUT,.TEXTOUT)
     93 Q
     94 ;
Note: See TracChangeset for help on using the changeset viewer.