groff: Character Classes
5.19.5 Character Classes
------------------------
Classes are particularly useful for East Asian languages such as
Chinese, Japanese, and Korean, where the number of needed characters is
much larger than in European languages, and where large sets of
characters share the same properties.
-- Request: .class name c1 c2 ...
Define a character class (or simply "class") NAME comprising the
characters C1, C2, and so on.
A class thus defined can then be referred to in lieu of listing all
the characters within it. Currently, only the 'cflags' request can
handle references to character classes.
In the request's simplest form, each CN is a character (or special
character).
.class [quotes] ' \[aq] \[dq] \[oq] \[cq] \[lq] \[rq]
Since class and glyph names share the same name space, it is
recommended to start and end the class name with '[' and ']',
respectively, to avoid collisions with existing character names
defined by GNU 'troff' or the user (with 'char' and related
requests). This practice applies the presence of ']' in the class
name to prevent the use of the special character escape form
'\[...]', thus you must use the '\C' escape to access a class with
such a name.
You can also use a character range notation consisting of a start
character followed by '-' and then an end character. Internally,
GNU 'troff' converts these two symbol names to Unicode code points
(according to the 'groff' glyph list [GGL]), which then give the
start and end value of the range. If that fails, the class
definition is skipped.
Furthermore, classes can be nested.
.class [prepunct] , : ; > }
.class [prepunctx] \C'[prepunct]' \[u2013]-\[u2016]
The class '[prepunctx]' thus contains the contents of the class
'[prepunct]' as defined above (the set ', : ; > }'), and characters
in the range between 'U+2013' and 'U+2016'.
If you want to include '-' in a class, it must be the first
character value in the argument list, otherwise it gets
misinterpreted as part of the range syntax.
It is not possible to use class names as end points of range
definitions.
A typical use of the 'class' request is to control line-breaking
and hyphenation rules as defined by the 'cflags' request. For
example, to inhibit line breaks before the characters belonging to
the 'prepunctx' class defined in the previous example, you can
write the following.
.cflags 2 \C'[prepunctx]'
See the 'cflags' request in ⇒Using Symbols, for more
details.