Typesetting/Attributed Text
Attributed Text script is an extension to gl2 graphics commands to allow to drawing of text in mixed assortment of fonts and colors, with corresponding adjustments of glyphs ascent and horizontal stride.
Attributed text can be used in composit controls, such as tree view, to represent items with different types of information. For example, tree views in IDE.
attrtext script
attrtext.ijs defines attributed text commands as gl2 extension. [{{#file: ""}} Download script: ]
require 'gl2 strings' cocurrent 'jgl2' «glattr» «glattrxy» «glattrtext» hexcol=: ({&'0123456789abcdef')@:((6#16)&#:) glrgbx=: glrgb@(256 256 256&#:)
glattr defines a list of semicolon-separated text attributes,
each a fontspec with optional hex color #rrggbb.
For example,
glattr '"Arial" 10;"Arial" 14 italic #ff0000'
[{{#file: ""}} Download script: ]
glattr=: 3 : 0 'ATTRFONT_jgl2_ ATTRCOL_jgl2_'=: |:2{."1 '#' cut every ';' cut y a=. '' for_i. ATTRFONT do. glfont >i a=. a, 1 { glqtextmetrics '' end. ATTRASC_jgl2_=: (>./ - ]) a )
glattrxy is replacement for gltextxy
except that it remembers the value set, necessary to maintain
ascent offsets and horizontal stride.
For example,
glattrxy 36 10
[{{#file: ""}} Download script: ]
glattrxy=: 3 : 0 gltextxy ATTRXY_jgl2_=: y )
glattrtext writes prefix-separated text fragments,
each prepended with glattr index and space, starting at glattrxy;
all spaces except one after index are part of the text;
replacement for gltext.
For example,
glattrtext '\0 Normal \1 Italic'
[{{#file: ""}} Download script: ]
glattrtext=: 3 : 0 'dx dy'=. ATTRXY for_t. <;._1 y do. a=. 0". ' ' taketo >t t=. ' ' takeafter >t glfont a {:: ATTRFONT gltextcolor'' [ glrgbx hexcol^:_1 a {:: ATTRCOL gltextxy dx,dy + a {:: ATTRASC gltext t dx=. dx + {.glqextent t end. )
Example
The following example generates a few sample attributed text fragments, as shown in the screenshot above. [{{#file: ""}} Download script: ]
require '~user/attrtext.ijs' coinsert 'jgl2' F=: 0 : 0 pc f; pn "Attributed Text"; xywh 6 6 100 60;cc g isigraph; pas 6 6;pcenter; rem form end; ) f_run=: 3 : 0 wd F wd 'pshow;' ) f_close=: 3 : 0 wd'pclose' ) f_g_paint=: 3 : 0 glclear'' glattr '"Arial" 10;"Arial" 14 italic #ff0000;"Arial" 12 bold #0000ff' glattrxy 10 10 glattrtext '\0 Normal \1 Italic \2 Bold' glattr '"Arial" 10;"Arial" 10 bold;"Arial" 10 #808080' glattrxy 10 36 glattrtext '|1 Message |0 sayHello |2 text="Hello"' f=. ';"Book Antiqua" 36 bold ' glattr f,'#3364c3',f,'#f31903',f,'#f7d727',f,'#44c406' glattrxy 10 50 glattrtext '\0 G\1 o\2 o\0 g\3 l\1 e' glpaint'' ) f_run''
See Also
- sRGB color values, HTML 4.01 Specification
Contributed by Oleg Kobchenko