Previous: symtxb Up: ../plot79_s.html Next: symup
SUBROUTINE SYMTXT (TEXT,ISTART,LENTXT) C$ (Symbol Text -- Extended) C$ Plot a text string. The current orientation and size C$ attributes for text are assumed. The current point C$ determines the location where the text is drawn, and is C$ unchanged on return. The arguments are: C$ C$ TEXT(*).....Packed Hollerith string defining characters to C$ be plotted. The character string may contain C$ format specifiers as described below to modify C$ the form of the output. C$ C$ For convenience, leading and trailing blanks C$ are ***IGNORED*** when justifying the text C$ left, right, or centered. In the rare cases C$ where such blanks are required, a substitution C$ character should be defined to be equivalent to C$ one of the Hershey blank characters, or else C$ the string can be protected with braces (see C$ below). C$ C$ ISTART......Index of starting character in TEXT(*), C$ counting from 1 from the left. C$ C$ LENTXT......Number of characters in TEXT(*) to plot. C$ C$ In some applications, there is a need for a more powerful C$ text drawing capability than was provided by the original C$ SYMTX(). Examples include subscripts and superscripts, C$ graph annotation and legends, and multi-colored text. C$ These are implemented here in SYMTXT() by supporting the C$ embedding of special format strings in the text to modify C$ plotting attributes without themselves generating output C$ text. The TEXT(*) string then becomes a small program in a C$ simple language that describes how to plot itself. C$ C$ Inspiration from the Scribe, TeX, and troff typesetting C$ systems is hereby acknowledged. C$ C$ In addition to format strings, braces may be used for C$ grouping, as in TeX; changes to graphics attributes made in C$ a group are lost when the group is ended. This is C$ convenient to avoid the need to reset attributes after a C$ temporary change. The current point, and CORE viewing C$ parameters, are not saved and restored around groups. C$ Format item arguments are groups in this sense, whatever C$ delimiters are used, and the entire TEXT(*) string is C$ implicitly in a group as well. C$ C$ The current point, 3-D mode, color index, pen, line style, C$ line width, and all font parameters are preserved across C$ calls to SYMTXT(). C$ C$ Format strings conform to the following grammar: C$ C$ <format-string> :== <escape-char><format-letter><optional-arg> C$ C$ <optional-arg> :== <open-delim><string><close-delim> | C$ <nothing> C$ C$ <escape-char> :== <backslash> \ | C$ <dollar> $ | C$ <at-sign> @ C$ C$ <open-delim> :== <apostrophe> | C$ <grave accent> | C$ <left angle> | C$ <left brace> | C$ <left bracket> | C$ <left parenthesis> | C$ <quotation mark> C$ C$ <close-delim> :== <apostrophe> | C$ <grave accent> | C$ <right angle> | C$ <right brace> | C$ <right bracket> | C$ <right parenthesis> | C$ <quotation mark> C$ C$ <string> :== argument text. For subscripts and C$ superscripts, this may possibly include C$ nested format strings, provided that C$ the surrounding delimiters match and C$ are balanced (i.e. a left parenthesis C$ is matched only by a right parenthesis, C$ not a right brace, right bracket, or C$ any kind of quote mark). C$ C$ A variety of escape and delimiter characters is provided to C$ reduce the need for escape quoting, and to cope with C$ limited character sets in some environments. C$ C$ Nesting of groups, subscripts, and superscripts is C$ supported to a depth of MAXSV, set below to at least 6. It C$ can be adjusted arbitrarily, along with the array C$ dimensions that depend on it. Large values of MAXSV are C$ not encouraged, because considerable attribute context C$ space is required (stored in the arrays named SVxxxx()). C$ C$ Omitted optional arguments default to zero, or the empty C$ string, as required by the format letter. Format item C$ argument lengths, except for subscripts, superscripts, and C$ groups, are limited to MAXSTR characters, set below to a C$ minimum of 100, which should be more than ample for any C$ real application. C$ C$ Letter case is not significant in format letters. The set C$ of currently recognized ones is: C$ C$ . save the current point in register <arg> (0 .. 9 are C$ supported) C$ = restore the current point from register <arg> C$ + print <arg> as superscript C$ - print <arg> as subscript C$ A draw an absolute line from current point to <x,y> or C$ <x,y,z> (omitted coordinate values default to the C$ corresponding ones from the current point) C$ C character number <arg> C$ F font name <text> C$ I (invisible) move absolute from current point to <x,y> or C$ <x,y,z> (omitted coordinate values default to the C$ corresponding ones from the current point) C$ J (invisible) move relative from current point by <dx,dy> or C$ <dx,dy,dz> (omitted coordinate values default to the C$ corresponding ones from the current point) C$ K set color number to <arg> C$ L set line style number to <arg> C$ M plot marker number <arg> C$ N newline; with no argument, assume <1> newline C$ P set pen number to <arg> C$ R draw a relative line from current point by <dx,dy> or C$ <dx,dy,dz> (omitted coordinate values default to zero) C$ S scale current font size by <arg> C$ U relative move by <arg> in character path direction, with C$ units of width of last character plotted (width is C$ zero if there is no previous character) C$ V relative move by <arg> in character up direction, with C$ units of height of last character plotted (height is font C$ height if there is no previous character) C$ W set line width to <arg> C$ X relative move by <arg> world units in character path C$ direction C$ Y relative move by <arg> world units in character up C$ direction C$ C$ For the A and R format items, which normally take 2 or 3 C$ numbers in the argument, use spaces, commas, or semicolons C$ to separate the numbers. C$ C$ Any other character prints as itself, thereby allowing the C$ escape character and open and close delimiters to be C$ represented as themselves; thus, $$ is a literal dollar C$ sign, and @( is a literal left parenthesis. C$ C$ Font heights are automatically reduced in subscripts and C$ superscripts. C$ C$ The A, I, J, and R formats, together with L and M, make it C$ possible to create legend text that includes the marker C$ symbol or a line drawn in a specified dashing style. C$ C$ The S format allows character size adjustments when the C$ default sizes are not adequate. C$ C$ The U, V, X and Y formats provide for detailed control over C$ the position of characters, usually for accents, analogous C$ to the \kern, \lower, and \raise control sequences in the C$ TeX typesetting system. U and V work in units of the C$ current font, which will usually be more convenient than X C$ and Y. Note that J is only representable by an X Y pair if C$ the character path is along the x direction, and character C$ up is along the y direction. C$ C$ Because of the widespread use of TeX, TeX-style subscripts C$ and superscripts are also supported. These take the form C$ _{xxx} or _x for subscripts, and ^{xxx} or ^x for C$ superscripts. If the group brace delimiters are omitted, C$ the following single character is the subscript or C$ superscript. C$ C$ Here are some examples: C$ C$ @+[p] display 'p' as a superscript C$ @-"k,l" display 'k,l' as a subscript C$ @C[2230] display Hershey character number 2230 (musical C$ G clef) C$ $A<1.2,2.7> draw a line to (1.2,2.7), making it the new C$ current point C$ @f[UCSR3] replace current font number by font UCSR3 C$ (Upper Case Simplex Roman, Variant 3) C$ $n newline C$ $N<2> two newlines C$ @P[3] change to pen number 3 C$ \W(0.1) set line width to 0.1 (double stroke; see SETLW) C$ @S(0.75) reduce font height to 75% of current value C$ \X(-2.5) move left by -2.5 world units C$ @.O@=+ overstrike + on O C$ C$ X@+[pq]@-[nm] C$ pq C$ Display X C$ nm C$ C$ Note that the subscripts and superscripts are C$ not vertically aligned. This can be achieved C$ as shown in the next example: C$ C$ X@.@+[pq]@=@-[nm] C$ pq C$ Display X C$ nm C$ C$ Note the use of the @. and @= to save and C$ restore the current point in default register C$ 0, so as to vertically align the subscript with C$ the superscript. C$ C$ X@+[@f[ucci1]pq]@-[@f[ucci2]nm] C$ C$ pq C$ Display X C$ nm C$ C$ using different fonts for the subscript and C$ superscript. C$ C$ @C[1402]@.@u[-0.7]@v[-0.6]@-[n]@=x@+[n] C$ C$ n C$ Display SIGMA x C$ n C$ C$ The extra vertical kern, @v[-0.6], is C$ necessary because the Greek capital Sigma C$ extends below the baseline. C$ C$ (25-Jul-1990)