bugGNU roff - Bugs: bug #67244, [devdvi,devpdf,devps,libgroff]...

 
 

bug #67244: [devdvi,devpdf,devps,libgroff] stop treating technical Greek as linguistic Greek

Submitter:  G. Branden Robinson <gbranden>
Submitted:  Wed 25 Jun 2025 09:22:36 PM UTC
   
 
Category:  General Severity:  3 - Normal
Item Group:  Incorrect behaviour Status:  Need Info
Privacy:  Public Assigned to:  deri
Open/Closed:  Open Planned Release:  None
* Mandatory Fields

Post a Comment

Add a New Comment Rich Markup
   

Discussion

Jump to the original submission

Mon 04 Aug 2025 12:53:53 AM UTC, comment #18: 


comment #17:

> Our "dvi" output driver has this problem too:


However, note James Cloos's observation on the groff list.

G. Branden Robinson <gbranden>
Group administrator
Sun 03 Aug 2025 11:38:58 PM UTC, comment #17: 

Our "dvi" output driver has this problem too:


$ git grep 'u03' ./font/devdvi/[A-Z]*
font/devdvi/CWITC:u03A9 550368,640640,0,182000  2       0127
font/devdvi/CWTC:u03A9  550368,640640   2       0127
font/devdvi/HBITC:u03A9 832832,728000,0,84022,0,42011   2       0127
font/devdvi/HBTC:u03A9  832832,728000   2       0127
font/devdvi/HITC:u03A9  757120,728000,0,86934,0,43467   2       0127
font/devdvi/HRTC:u03A9  757120,728000   2       0127
font/devdvi/TBITC:u03A9 866611,723632,0,103995,0,51998  2       0127
font/devdvi/TBTC:u03A9  870688,723632   2       0127
font/devdvi/TITC:u03A9  750131,716352,0,107526,0,53763  2       0127
font/devdvi/TRTC:u03A9  757120,722176   2       0127


This "u03A9" (GREEK CAPITAL LETTER OMEGA) should be "u2126" (OHM SIGN).  Observe how no other characters in the Unicode Greek/Coptic block have any coverage.

G. Branden Robinson <gbranden>
Group administrator
Tue 08 Jul 2025 08:06:22 PM UTC, comment #16: 

The following commit is a baby step toward ungeneralizing the maps.  It kills off the "symbolchars" file.


commit ec2327b6b705c2f8ae90e02b1040191bff856754
Author: G. Branden Robinson <g.branden.robinson@gmail.com>
Date:   Mon Jun 30 06:27:11 2025 -0500

    font/devps/generate/*: Stop generating symbol.map.

    We'll maintain it in the source tree henceforth.


G. Branden Robinson <gbranden>
Group administrator
Tue 01 Jul 2025 01:18:10 PM UTC, comment #15: 


> a base glyph can do double duty as a combining glyph?  If so, yikes!  That doesn't happen in the Latin script!


I'm wrong.  It does.  Sometimes.


   Ligatures and digraphs
       Output   Input   Unicode           Notes
       ──────────────────────────────────────────────────────────────────────────
       ff       \[ff]   u0066_0066        ff ligature +
       fi       \[fi]   u0066_0069        fi ligature +
       fl       \[fl]   u0066_006C        fl ligature +
       ffi      \[Fi]   u0066_0066_0069   ffi ligature +
       ffl      \[Fl]   u0066_0066_006C   ffl ligature +
       Æ        \[AE]   u00C6             AE ligature
       æ        \[ae]   u00E6             ae ligature
       Œ        \[OE]   u0152             OE ligature
       œ        \[oe]   u0153             oe ligature
       IJ        \[IJ]   u0132             IJ digraph
       ij        \[ij]   u0133             ij digraph


G. Branden Robinson <gbranden>
Group administrator
Tue 01 Jul 2025 01:15:23 PM UTC, comment #14: 

Hi Deri,

Unfortunately your reply didn't make it past Savannah's paranoid email filter.  But no worries, I'm replying here.

(Ah, I see you've since re-replied in a form Savannah accepted.)

On Tuesday, 1 July 2025 06:19:34 BST you wrote:

>> 2.  I feel like you've expanded the scope of the ticket considerably.
>
>> The objective of this ticket was only to fix the problems depicted
>> graphically in comment #1 and comment #2.


> I agree whole heartedly with the changes to symbol and text map files which you committed
> in this bug, so I thought my observations on a regression introduced by it, belonged here as
> well.


I'm not yet convinced I've done so.  I think groff's support for "third-party" fonts may be too underspecified to support such a claim.

For example, I've abandoned my idea of adding an `-M` option to afmtodit and no longer requiring specification of a map file (using groff's "text.map" as a default).  The wisdom of the existing approach is becoming clearer to me: Unicode is a big place and we can expect third-party fonts to frequently supply glyphs for which we don't already define special character identifiers.  Or, no such identifiers will be needed because the input documents using such fonts will go straight to `\[uXXXX]`-style escape sequences.

Like with Greek, for example.

If I'm right, we didn't properly support the Tinos fonts in the first place.  Even in old groff.  Our lack of support might have recently changed its shape a bit, but arguably that's not a regression.

That said, what matters more than whether something "technically" regressed or not is whether we have happy users.  Like you, I want groff users to be able to install the Tinos fonts and carry on with minimal effort beyond that.

But, in order to support them, we might have to start offering guidance about what sort of "map" file they're going to need to craft to feed to afmtodit.

(I have an inkling that if a font doesn't offer coverage of any of groff's predefined special character names--if everything maps from `uniXXXX` to `uXXXX`--then a map file is unnecessary.

So maybe `-M` is a good idea after all.  Hmmm.)

The main reason my reply to you wasn't as responsive as you wanted was not, in this case, because I missed the point (I think) but because my thoughts around these issues haven't settled down, and I have at least two pieces of homework to do before they can.

> Very happy.


Good news!  It was your idea as well, I think.  :)

> How you propose to mitigate the regression (in grops, I've put a sticking plaster on gropdf to
> try to avoid the problem) probably deserves to stay here.


Only if you don't buy my argument that it isn't a regression.  But even if it isn't, we need to have a credible story for Tinos font users and others similarly situated, so that they can get what they want.  Yet another documentation task.

> The longer term design problem
> which is the root of the issue can definitely be shunted to a new long term goal ticket, I'd
> appreciate your thoughts on the issue of grops now choosing the wrong glyph for iota (and
> others) since you have not addressed it in your reply.


I don't understand the problem yet.


echo "Στα Ελληνικά"|test-groff -Tps -ms -F /usr/share/groff/site-font/ -f TINO -k | okular -




I can see that this looks wrong.  There should be a lowercase iota where the isolated diacritical mark is hanging below the baseline beneath an empty glyph.

I'm afraid what you said about the key collisions arising from libgroff's use of a Unicode Normalization Form (NFD?) went a bit over my head.  I thought I understood the gross concept of it, but it seems like what's going on with this Greek font is something terribly bizarre.  In the Latin script, the analogy that comes to my mind is an input document that uses U+0101 LATIN SMALL LETTER A WITH MACRON and somehow, thanks to libgroff, this gets remapped to U+005E CIRCUMFLEX ACCENT.  Huh?!?!  Something weirder than decomposition appears to be going on.

So one item of homework for me is to brush up on Unicode normalization forms.  Another is to find out if combining accents in Greek radically change their shapes from isolated to combined forms.

And a third is to, uh, actually install the Tinos fonts and get them working with groff locally so I can experiment.

Does Greek have "iotated" letters, where a base glyph can do double duty as a combining glyph?  If so, yikes!  That doesn't happen in the Latin script!  Arrgh!

But maybe the problem is simply that the "text.map" file is inappropriate for the Tinos fonts, and those fonts need a map file that is correct.  I hope so.  But I fear not, given your point about how the problem arises due to the mappings of Unicode  characters without groff special character names.

I could be misstating some things.  My understanding is fragmentary.  That's why my previous reply was partially unresponsive.

G. Branden Robinson <gbranden>
Group administrator
Tue 01 Jul 2025 01:13:43 PM UTC, comment #13: 

ps.png DOA, try, try, try-ing.


Deri James <deri>
Group Member
Tue 01 Jul 2025 01:02:36 PM UTC, comment #12: 

On Tuesday, 1 July 2025 06:19:34 BST you wrote:

> Update of bug #67244 (group groff):
>
>                   Status:             In Progress => Need Info
>              Assigned to:                gbranden => deri
>
>     _____________________________________________________
>
> Follow-up Comment #10:
>
> comment #9:
>
> > Sorry to be a pain but this commit has revealed a problem.
>
> Only 2 things pain me here.  Well, 3, but the third pains you too.
>
> 1.  You should have set the ticket's "open/closed" datum to "open" when
> changing the status from "fixed" to "in progress".
> Not a deal, I eventually found it.  :)



Naughty, naughty me.


> 2.  I feel like you've expanded the scope of the ticket considerably.
>
> The objective of this ticket was only to fix the problems depicted
> graphically in comment #1 and comment #2.



I agree whole heartedly with the changes to symbol and text map files which
you committed in this bug, so I thought my observations on a regression
introduced by it, belonged here as well.


> > The problem is linked to the design decision to use decomposed unicode as
> > the primary key for looking up the font table, which is essentially what
> > the groff fonts are.
>
> A redesign of groff's character resolution processes, or mappings from
> special character identifiers to Unicode code points (where applicable),
> seem like a much bigger and longer-term project than contemplated in
> comment #0.
>
> That said, maybe this bug should remain "in progress" (and should become
>
> "open" again) until, as you said in comment #2:
> > all greek SYMBOLS should only appear in symbol.map and not in
> > text.map. Similarly preconv and afmtodit (with text.map) should
> > be using unicode uXXXX names.
>
> I've been giving some attention to bug #66876, and have grown increasingly
> uneasy with the blanket dumping of all text font character names into
> symbol.map, and the appearance of character names that historically are
> unstyled (and therefore "special" in that sense) also showing up in
> text.map.
>
> Except for the *m and mc confusion, it seems we've mostly gotten away from
> this because the Adobe/URW font's character coverage is fairly static and
> disjunctive.
>
> But I'm starting to think that our text.map and symbol.map files are
> actually specific to the Adobe/URW fonts.  Maybe I'm wrong, and glyph
> naming is much more consistent among third party fonts.  But that still
> wouldn't make it incorrect to get text.map and symbol.map out of each
> others business, making them disjunct lists of characters; any overlap
> should be specifically motivated and documented.
>
> First, what do you think of this text.map/symbol.map reform?



Very happy.


> Secondly, are you willing to migrate the design issue of libgroff's
> Unicode<->glyph mapping to another ticket?
>

How you propose to mitigate the regression (in grops, I've put a sticking
plaster on gropdf to try to avoid the problem) probably deserves to stay here.
The longer term design problem which is the root of the issue can definitely
be shunted to a new long term goal ticket, I'd appreciate your thoughts on the
issue of grops now choosing the wrong glyph for iota (and others) since you
have not addressed it in your reply.


Sometimes you don't quite get the point of my posts, so I'll try a one liner:-

echo "Στα Ελληνικά"|test-groff -Tps -ms -F /usr/share/groff/site-font/ -f TINO
-k | okular -

This needs the google Tinos fonts installed as TINO[R/I/B/BI] in site-font for
devps and devpdf, using the latest afmtodit and text.map (or the greek symbol
names sedded away). You should then see:-

Which does not look correct. The reason it is wrong is explained in the
previous post (along with a bunch of other, not so drastic,  examples.




Deri James <deri>
Group Member
Tue 01 Jul 2025 05:20:42 AM UTC, comment #11: 


> Except for the *m and mc confusion, it seems we've mostly gotten away from this because the Adobe/URW font's character coverage is fairly static and disjunctive.


I meant "gotten away with".

G. Branden Robinson <gbranden>
Group administrator
Tue 01 Jul 2025 05:19:31 AM UTC, comment #10: 

comment #9:

> Sorry to be a pain but this commit has revealed a problem.


Only 2 things pain me here.  Well, 3, but the third pains you too.

1.  You should have set the ticket's "open/closed" datum to "open" when changing the status from "fixed" to "in progress".
Not a deal, I eventually found it.  :)

2.  I feel like you've expanded the scope of the ticket considerably.

The objective of this ticket was only to fix the problems depicted graphically in comment #1 and comment #2.

> The problem is linked to the design decision to use decomposed unicode as the primary key for looking up the font table, which is essentially what the groff fonts are.


A redesign of groff's character resolution processes, or mappings from special character identifiers to Unicode code points (where applicable), seem like a much bigger and longer-term project than contemplated in comment #0.

That said, maybe this bug should remain "in progress" (and should become "open" again) until, as you said in comment #2:

> all greek SYMBOLS should only appear in symbol.map and not in
> text.map. Similarly preconv and afmtodit (with text.map) should
> be using unicode uXXXX names.


I've been giving some attention to bug #66876, and have grown increasingly uneasy with the blanket dumping of all text font character names into symbol.map, and the appearance of character names that historically are unstyled (and therefore "special" in that sense) also showing up in text.map.

Except for the *m and mc confusion, it seems we've mostly gotten away from this because the Adobe/URW font's character coverage is fairly static and disjunctive.

But I'm starting to think that our text.map and symbol.map files are actually specific to the Adobe/URW fonts.  Maybe I'm wrong, and glyph naming is much more consistent among third party fonts.  But that still wouldn't make it incorrect to get text.map and symbol.map out of each others business, making them disjunct lists of characters; any overlap should be specifically motivated and documented.

First, what do you think of this text.map/symbol.map reform?

Secondly, are you willing to migrate the design issue of libgroff's Unicode<->glyph mapping to another ticket?

G. Branden Robinson <gbranden>
Group administrator
Tue 01 Jul 2025 01:35:31 AM UTC, comment #9: 

Sorry to be a pain but this commit has revealed a problem. We should have heeded the warning "Beware of greek (fonts) bearing glyphs.".

The problem is linked to the design decision to use decomposed unicode as the primary key for looking up the font table, which is essentially what the groff fonts are. Most of the time this works fine, because the decomposed name is in itself unique, but this is not always true. If we look at 1FBE:-

[derij@pip build (master)]$ ./UCDtest.pl 0x1fbe
$VAR1 = {
          'combining' => 0,
          'script' => 'Greek',
          'upper' => '0399',
          'decomposition' => '03B9',
          'unicode10' => '',
          'bidi' => 'L',
          'mirrored' => 'N',
          'category' => 'Ll',
          'title' => '0399',
          'lower' => '',
          'block' => 'Greek Extended',
          'decimal' => '',
          'comment' => '',
          'numeric' => '',
          'digit' => '',
          'code' => '1FBE',
          'name' => 'GREEK PROSGEGRAMMENI'
        };
Decomp = ι
NFD    = $VAR1 = "\x{3b9}";

NFC    = $VAR1 = "\x{3b9}";

D      = $VAR1 = "\x{3b9}";

C      = $VAR1 = "\x{3b9}";

Its decomposed name is 03B9, so if a font also contains "iota" (03B9) then there are in fact two entries with the same key! Most of the time this is not noticed because the glyphs are very similar - 03A9/2126 - Omega/Ohm - Ω/Ω, but 03B9/1FBE looks like ι/ι - very different glyphs. The attached pdf documents all the duplicate keys in the Tinos font, because we are using decomposed rather than composed unicodes.

Grops overwrites the entry for iota when it finds PROSGEGRAMMENI, so when preconv outputs \[u03B9] the titchy glyph is output, probably not what the user wants!

I have just pushed a commit for gropdf, so it now protects the first entry (since the primary glyph is normally first. This is not a proper solution, the only proper solution is not to use decomposed names, preconv produces the correct (unique) code groff changes it to its decomposed form which may not be unique.

This was tested with the google Tinos fonts after using a script to change the greek symbol names to their uXXXX counterparts.

In the pdf an "*" indicates that field 2 (width height etc..) differs, so even if the glyph looks the same there may be subtle differences when typeset.



(file #57346)

Deri James <deri>
Group Member
Sun 29 Jun 2025 09:32:50 AM UTC, comment #8: 

I decided not to sweat the fallback issue for the time being.

We can wait for real Greek speakers to opine.


commit 8e69fdefcb85768ab5650d19cf377660b27ff46e
Author: G. Branden Robinson <g.branden.robinson@gmail.com>
Date:   Thu Jun 26 00:26:15 2025 -0500

    [devps]: Fix Savannah #67244 (1/3).

    * font/devps/AB:
    * font/devps/ABI:
    * font/devps/AI:
    * font/devps/AR:
    * font/devps/BMB:
    * font/devps/BMBI:
    * font/devps/BMI:
    * font/devps/BMR:
    * font/devps/CB:
    * font/devps/CBI:
    * font/devps/CI:
    * font/devps/CR:
    * font/devps/HB:
    * font/devps/HBI:
    * font/devps/HI:
    * font/devps/HNB:
    * font/devps/HNBI:
    * font/devps/HNI:
    * font/devps/HNR:
    * font/devps/HR:
    * font/devps/NB:
    * font/devps/NBI:
    * font/devps/NI:
    * font/devps/NR:
    * font/devps/PB:
    * font/devps/PBI:
    * font/devps/PI:
    * font/devps/PR:
    * font/devps/TB:
    * font/devps/TBI:
    * font/devps/TI:
    * font/devps/TR:
    * font/devps/ZCMI: Replace/rename entry for `*m` glyph to `mc`, removing
      `mc` as an alias thereof; annotate the corresponding code point as
      U+00B5, not U+03BC.  The micro sign (groff: \[mc]) is a styled glyph
      often found in text faces.  `*m` is an unstyled, but traditionally
      slanted, lowercase Greek mu used overwhelmingly in mathematical or
      scientific typesetting contexts.  It is not appropriate for setting
      the modern Greek language.

    * font/devps/generate/symbol.map:
    * font/devps/generate/text.map: Remove spurious mappings of groff's
      `\[mc]` to PostScript's `mu`.  This prevents afmtodit(1) from
      resurrecting the aforementioned problem, though for unrelated reasons
      we don't regenerate the font description files for grops(1) when
      building groff--we should, someday.  (Among other manual changes, we
      added kerning pairs; see Savannah #58897.)

commit 13abec8c47196a0f9341eaf564a6818fc1d08b47
Author: G. Branden Robinson <g.branden.robinson@gmail.com>
Date:   Thu Jun 26 00:35:14 2025 -0500

    [devps]: Fix Savannah #67244 (2/3).

    * font/devps/generate/text.map: Drop all mappings of symbolic/
      mathematical/unstyled Greek special characters `*[A-Za-z]` to
      PostScript glyph names.  As noted above, such mappings are not
      appropriate for text fonts, which (typically) have multiple styles
      available.

commit b3066866b0b5b98014e1ca8eb852ce114f6023cc
Author: G. Branden Robinson <g.branden.robinson@gmail.com>
Date:   Sat Jun 28 01:51:03 2025 -0500

    [libgroff]: Fix Savannah #67244 (3/3).

    * src/libs/libgroff/uniglyph.cpp (struct S): Delete mappings of code
      points from Unicode Greek and Coptic block (U+0370..U+03FF) to *roff's
      special character identifiers for "technical" use of classical Greek;
      see above.


G. Branden Robinson <gbranden>
Group administrator
Sat 28 Jun 2025 06:09:31 AM UTC, comment #7: 

After I made the changes in comment #6, I observe that the following document falls flat on its face when producing PostScript with my working copy.

This is a regression from released groff, though arguably a "correct" one.


$ cat ATTIC/greek-language-text.groff
.nf
\[u0391]\[u0392]\[u0393]\[u0394]\[u0395]\[u0396]\[u0397]
\[u0398]\[u0399]\[u039A]\[u039B]\[u039C]\[u039D]\[u039E]\[u039F]
\[u03A0]\[u03A1]\[u03A3]\[u03A4]\[u03A5]\[u03A6]\[u03A7]
\[u03A8]\[u03A9]
\[u03B1]\[u03B2]\[u03B3]\[u03B4]\[u03B5]\[u03B6]\[u03B7]
\[u03B8]\[u03B9]\[u03BA]\[u03BB]\[u03BC]\[u03BD]\[u03BE]\[u03BF]
\[u03C0]\[u03C1]\[u03C2]\[u03C3]\[u03C4]\[u03C5]\[u03C6]\[u03C7]
\[u03C8]\[u03C9]
\[u03D1]\[u03D5]\[u03D6]
\[u03F5]
$ ./build/test-groff -bww -Wchar -Z ATTIC/greek-language-text.groff
x T ps
x res 72000 1 1
x init
p1
V12000
H72000
n12000 0
V24000
H72000
n12000 0
V36000
H72000
n12000 0
V48000
H72000
n12000 0
V60000
H72000
n12000 0
V72000
H72000
n12000 0
V84000
H72000
n12000 0
V96000
H72000
n12000 0
V108000
H72000
n12000 0
V120000
H72000
n12000 0
x trailer
V792000
x stop


For those inexperienced at reading "grout", that's a longish way of producing a blank document.

Turning the "char" warning category back on reveals why.


troff:ATTIC/greek-language-text.groff:2: warning: special character 'u0391' not defined
troff:ATTIC/greek-language-text.groff:2: warning: special character 'u0392' not defined
troff:ATTIC/greek-language-text.groff:2: warning: special character 'u0393' not defined
troff:ATTIC/greek-language-text.groff:2: warning: special character 'u0394' not defined
troff:ATTIC/greek-language-text.groff:2: warning: special character 'u0395' not defined
troff:ATTIC/greek-language-text.groff:2: warning: special character 'u0396' not defined
troff:ATTIC/greek-language-text.groff:2: warning: special character 'u0397' not defined
troff:ATTIC/greek-language-text.groff:3: warning: special character 'u0398' not defined
troff:ATTIC/greek-language-text.groff:3: warning: special character 'u0399' not defined
troff:ATTIC/greek-language-text.groff:3: warning: special character 'u039A' not defined
troff:ATTIC/greek-language-text.groff:3: warning: special character 'u039B' not defined
troff:ATTIC/greek-language-text.groff:3: warning: special character 'u039C' not defined
troff:ATTIC/greek-language-text.groff:3: warning: special character 'u039D' not defined
troff:ATTIC/greek-language-text.groff:3: warning: special character 'u039E' not defined
troff:ATTIC/greek-language-text.groff:3: warning: special character 'u039F' not defined
troff:ATTIC/greek-language-text.groff:4: warning: special character 'u03A0' not defined
troff:ATTIC/greek-language-text.groff:4: warning: special character 'u03A1' not defined
troff:ATTIC/greek-language-text.groff:4: warning: special character 'u03A3' not defined
troff:ATTIC/greek-language-text.groff:4: warning: special character 'u03A4' not defined
troff:ATTIC/greek-language-text.groff:4: warning: special character 'u03A5' not defined
troff:ATTIC/greek-language-text.groff:4: warning: special character 'u03A6' not defined
troff:ATTIC/greek-language-text.groff:4: warning: special character 'u03A7' not defined
troff:ATTIC/greek-language-text.groff:5: warning: special character 'u03A8' not defined
troff:ATTIC/greek-language-text.groff:5: warning: special character 'u03A9' not defined
troff:ATTIC/greek-language-text.groff:6: warning: special character 'u03B1' not defined
troff:ATTIC/greek-language-text.groff:6: warning: special character 'u03B2' not defined
troff:ATTIC/greek-language-text.groff:6: warning: special character 'u03B3' not defined
troff:ATTIC/greek-language-text.groff:6: warning: special character 'u03B4' not defined
troff:ATTIC/greek-language-text.groff:6: warning: special character 'u03B5' not defined
troff:ATTIC/greek-language-text.groff:6: warning: special character 'u03B6' not defined
troff:ATTIC/greek-language-text.groff:6: warning: special character 'u03B7' not defined
troff:ATTIC/greek-language-text.groff:7: warning: special character 'u03B8' not defined
troff:ATTIC/greek-language-text.groff:7: warning: special character 'u03B9' not defined
troff:ATTIC/greek-language-text.groff:7: warning: special character 'u03BA' not defined
troff:ATTIC/greek-language-text.groff:7: warning: special character 'u03BB' not defined
troff:ATTIC/greek-language-text.groff:7: warning: special character 'u03BC' not defined
troff:ATTIC/greek-language-text.groff:7: warning: special character 'u03BD' not defined
troff:ATTIC/greek-language-text.groff:7: warning: special character 'u03BE' not defined
troff:ATTIC/greek-language-text.groff:7: warning: special character 'u03BF' not defined
troff:ATTIC/greek-language-text.groff:8: warning: special character 'u03C0' not defined
troff:ATTIC/greek-language-text.groff:8: warning: special character 'u03C1' not defined
troff:ATTIC/greek-language-text.groff:8: warning: special character 'u03C2' not defined
troff:ATTIC/greek-language-text.groff:8: warning: special character 'u03C3' not defined
troff:ATTIC/greek-language-text.groff:8: warning: special character 'u03C4' not defined
troff:ATTIC/greek-language-text.groff:8: warning: special character 'u03C5' not defined
troff:ATTIC/greek-language-text.groff:8: warning: special character 'u03C6' not defined
troff:ATTIC/greek-language-text.groff:8: warning: special character 'u03C7' not defined
troff:ATTIC/greek-language-text.groff:9: warning: special character 'u03C8' not defined
troff:ATTIC/greek-language-text.groff:9: warning: special character 'u03C9' not defined
troff:ATTIC/greek-language-text.groff:10: warning: special character 'u03D1' not defined
troff:ATTIC/greek-language-text.groff:10: warning: special character 'u03D5' not defined
troff:ATTIC/greek-language-text.groff:10: warning: special character 'u03D6' not defined
troff:ATTIC/greek-language-text.groff:11: warning: special character 'u03F5' not defined


Should we add `fchar` fallbacks to "fallbacks.tmac" to mop up the basic Greek alphabet?

Should we add further `char` fallbacks to sponge up even precomposed forms of Greek letters with diacritics, degrading them to their base characters?

Even the latter won't get us full coverage of the Unicode Greek block.  PostScript fonts did not standardize glyphs for digamma and other archaic letters.

G. Branden Robinson <gbranden>
Group administrator
Sat 28 Jun 2025 06:02:06 AM UTC, comment #6: 

Recategorizing to "General".  See below.

comment #5:

> If text.map is altered so that it no longer includes greek maths symbols,


I've done this in my working copy.


commit 7c1df4e3571a60d2921f477d8f17c952bf51336e
Author:     G. Branden Robinson <g.branden.robinson@gmail.com>
AuthorDate: Thu Jun 26 00:35:14 2025 -0500
Commit:     G. Branden Robinson <g.branden.robinson@gmail.com>
CommitDate: Fri Jun 27 21:51:05 2025 -0500

    [devps]: Fix Savannah #67244 (2/x).

    * font/devps/generate/text.map: Drop all mappings of symbolic/
      mathematical/unstyled Greek special characters `*[A-Za-z]` to
      PostScript glyph names.  As noted above, such mappings are not
      appropriate for text fonts, which (typically) have multiple styles
      available.

diff --git a/font/devps/generate/text.map b/font/devps/generate/text.map
index 31c45365f..ac8222953 100644
--- a/font/devps/generate/text.map
+++ b/font/devps/generate/text.map
@@ -20,8 +20,6 @@ AE AE
 agrave `a
 Agrave `A
 aleph Ah
-alpha *a
-Alpha *A
 ampersand &
 angle /_
 angleleft la
@@ -57,8 +55,6 @@ bar |
 bar ba
 b b
 B B
-beta *b
-Beta *B
 braceex barex
 braceex braceex
 braceex braceleftex
@@ -108,8 +104,6 @@ Ccedilla ,C
 cedilla ac
 cent ct
 checkmark OK
-chi *x
-Chi *X
 circle ci
 circlemultiply c*
 circleplus c+
@@ -126,8 +120,6 @@ dagger dg
 d d
 D D
 degree de
-delta *d
-Delta *D
 diamond DI
 dieresis ad
 divide tdi
@@ -152,12 +144,8 @@ element mo
 emdash em
 emptyset es
 endash en
-epsilon *e
-Epsilon *E
 equal =
 equivalence ==
-eta *y
-Eta *Y
 Eth -D
 eth Sd
 Euro Eu
@@ -176,8 +164,6 @@ fl fl
 florin Fn
 four 4
 fraction f/
-gamma *g
-Gamma *G
 germandbls ss
 g g
 G G
@@ -214,16 +200,10 @@ integralex u23AE
 integral integral
 integral is
 intersection ca
-iota *i
-Iota *I
 j j
 J J
-kappa *k
-Kappa *K
 k k
 K K
-lambda *l
-Lambda *L
 less <
 lessequal <=
 l l
@@ -241,8 +221,6 @@ m m
 M M
 mu1 mc
 multiply tmu
-mu *m
-Mu *M
 nine 9
 n n
 N N
@@ -253,8 +231,6 @@ ntilde ~n
 Ntilde ~N
 numbersign #
 numbersign sh
-nu *n
-Nu *N
 oacute 'o
 Oacute 'O
 ocircumflex ^o
@@ -267,10 +243,6 @@ ogonek ho
 ograve `o
 Ograve `O
 omega1 +p
-omega *w
-Omega *W
-omicron *o
-Omicron *O
 one 1
 oneeighth 18
 onehalf 12
@@ -301,10 +273,6 @@ periodcentered pc
 perpendicular pp
 perthousand %0
 phi1 +f
-phi *f
-Phi *F
-pi *p
-Pi *P
 plus +
 plusminus t+-
 p p
@@ -313,8 +281,6 @@ product product
 propersubset sb
 propersuperset sp
 proportional pt
-psi *q
-Psi *Q
 q q
 Q Q
 question ?
@@ -337,8 +303,6 @@ reflexsubset ib
 reflexsuperset ip
 registered rg
 Rfraktur Re
-rho *r
-Rho *R
 ring ao
 r r
 R R
@@ -351,8 +315,6 @@ seven 7
 seveneighths 78
 SF110000 br
 sigma1 ts
-sigma *s
-Sigma *S
 similar ap
 six 6
 slash /
@@ -363,13 +325,9 @@ S S
 sterling Po
 suchthat st
 summation sum
-tau *t
-Tau *T
 therefore 3d
 therefore tf
 theta1 +h
-theta *h
-Theta *H
 thorn Tp
 Thorn TP
 three 3
@@ -407,8 +365,6 @@ uni25A1 sq
 uni261C lh
 union cu
 universal fa
-upsilon *u
-Upsilon *U
 u u
 U U
 v v
@@ -416,8 +372,6 @@ V V
 weierstrass wp
 w w
 W W
-xi *c
-Xi *C
 x x
 X X
 yacute 'y
@@ -430,7 +384,5 @@ Y Y
 zcaron vz
 Zcaron vZ
 zero 0
-zeta *z
-Zeta *Z
 z z
 Z Z


...and used a sed(1) script to alter the styled font description files in font/devps.


commit 0281873cad60b7252b84ab7246e7bfdcd7920634
Author:     G. Branden Robinson <g.branden.robinson@gmail.com>
AuthorDate: Thu Jun 26 00:26:15 2025 -0500
Commit:     G. Branden Robinson <g.branden.robinson@gmail.com>
CommitDate: Fri Jun 27 21:51:02 2025 -0500

    [devps]: Fix Savannah #67244 (1/x).

    * font/devps/AB:
    * font/devps/ABI:
    * font/devps/AI:
    * font/devps/AR:
    * font/devps/BMB:
    * font/devps/BMBI:
    * font/devps/BMI:
    * font/devps/BMR:
    * font/devps/CB:
    * font/devps/CBI:
    * font/devps/CI:
    * font/devps/CR:
    * font/devps/HB:
    * font/devps/HBI:
    * font/devps/HI:
    * font/devps/HNB:
    * font/devps/HNBI:
    * font/devps/HNI:
    * font/devps/HNR:
    * font/devps/HR:
    * font/devps/NB:
    * font/devps/NBI:
    * font/devps/NI:
    * font/devps/NR:
    * font/devps/PB:
    * font/devps/PBI:
    * font/devps/PI:
    * font/devps/PR:
    * font/devps/TB:
    * font/devps/TBI:
    * font/devps/TI:
    * font/devps/TR:
    * font/devps/ZCMI: Replace/rename entry for `*m` glyph to `mc`, removing
      `mc` as an alias thereof; annotate the corresponding code point as
      U+00B5, not U+03BC.  The micro sign (groff: \[mc]) is a styled glyph
      often found in text faces.  `*m` is an unstyled, but traditionally
      slanted, lowercase Greek mu used overwhelmingly in mathematical or
      scientific typesetting contexts.  It is not appropriate for setting
      the modern Greek language.

    * font/devps/generate/symbol.map:
    * font/devps/generate/text.map: Remove spurious mappings of groff's
      `\[mc]` to PostScript's `mu`.  This prevents afmtodit(1) from
      resurrecting the aforementioned problem, though for unrelated reasons
      we don't regenerate the font description files for grops(1) when
      building groff--we should, someday.  (Among other manual changes, we
      added kerning pairs; see Savannah #58897.)
diff --git a/font/devps/AB b/font/devps/AB
index 8a40b7694..769d36535 100644
--- a/font/devps/AB
+++ b/font/devps/AB
@@ -621,8 +621,7 @@ t+- 600,556,62      0       177     plusminus       --      00B1
 S2     336,749 2       178     twosuperior     --      00B2
 S3     336,749 2       179     threesuperior   --      00B3
 aa     420,851 2       180     acute   --      00B4
-*m     600,555,192     1       181     mu      --      03BC
-mc     "
+mc     600,555,192     1       181     mu      --      00B5
 ps     600,740,103,7,7 2       182     paragraph       --      00B6
 pc     280,320 0       183     periodcentered  --      00B7
 ac     340,6,251       1       184     cedilla --      00B8
diff --git a/font/devps/ABI b/font/devps/ABI
index 5bf3b959c..c08b18e9d 100644
--- a/font/devps/ABI
+++ b/font/devps/ABI
@@ -622,8 +622,7 @@ t+- 600,556,62,77,14,77     0       177     plusminus       --      00B1
 S2     336,749,0,150,-22,82    2       178     twosuperior     --      00B2
 S3     336,749,0,128,-37,82    2       179     threesuperior   --      00B3
 aa     420,851,0,137,-171,82   2       180     acute   --      00B4
-*m     600,555,192,97,36,82    1       181     mu      --      03BC
-mc     "
+mc     600,555,192,97,36,82    1       181     mu      --      00B5
 ps     600,740,103,195,-39,82  2       182     paragraph       --      00B6
 pc     280,320,0,36,-57,36     0       183     periodcentered  --      00B7
 ac     340,6,251,0,-16 1       184     cedilla --      00B8
[et cetera]


That produces good results; see my attachment in bug #67234.

> the
> greek letters in TINOR would all have uXXXX names when afmtodit is run. But
> groff changes preconv's \[uXXXX] input to greek symbol names. All the "C*?"
> calls should be "Cu03XX" calls, groff should only output C*? if the input  was
> \[*?], i.e. either eqn wants the maths symbol or the user has specifically
> typed \[*?] because he wants it.


Yes.  This the fault of the "uniglyph.cpp" files in libgroff, hence the recategorization.

I've made the following change.


diff --git a/src/libs/libgroff/uniglyph.cpp b/src/libs/libgroff/uniglyph.cpp
index 25480cc1f..c6b54ed24 100644
--- a/src/libs/libgroff/uniglyph.cpp
+++ b/src/libs/libgroff/uniglyph.cpp
@@ -280,59 +280,6 @@ struct S {
   { "02DA", "ao" },
   { "02DB", "ho" },
   { "02DD", "a\"" },
-  { "0391", "*A" },
-  { "0392", "*B" },
-  { "0393", "*G" },
-  { "0394", "*D" },
-  { "0395", "*E" },
-  { "0396", "*Z" },
-  { "0397", "*Y" },
-  { "0398", "*H" },
-  { "0399", "*I" },
-  { "039A", "*K" },
-  { "039B", "*L" },
-  { "039C", "*M" },
-  { "039D", "*N" },
-  { "039E", "*C" },
-  { "039F", "*O" },
-  { "03A0", "*P" },
-  { "03A1", "*R" },
-  { "03A3", "*S" },
-  { "03A4", "*T" },
-  { "03A5", "*U" },
-  { "03A6", "*F" },
-  { "03A7", "*X" },
-  { "03A8", "*Q" },
-  { "03A9", "*W" },
-  { "03B1", "*a" },
-  { "03B2", "*b" },
-  { "03B3", "*g" },
-  { "03B4", "*d" },
-  { "03B5", "*e" },
-  { "03B6", "*z" },
-  { "03B7", "*y" },
-  { "03B8", "*h" },
-  { "03B9", "*i" },
-  { "03BA", "*k" },
-  { "03BB", "*l" },
-  { "03BC", "*m" },
-  { "03BD", "*n" },
-  { "03BE", "*c" },
-  { "03BF", "*o" },
-  { "03C0", "*p" },
-  { "03C1", "*r" },
-  { "03C2", "ts" },
-  { "03C3", "*s" },
-  { "03C4", "*t" },
-  { "03C5", "*u" },
-  { "03C6", "+f" },
-  { "03C7", "*x" },
-  { "03C8", "*q" },
-  { "03C9", "*w" },
-  { "03D1", "+h" },
-  { "03D5", "*f" },
-  { "03D6", "+p" },
-  { "03F5", "+e" },
 //{ "2010", "-" },
   { "2010", "hy" },
   { "2013", "en" },


> For the benefit of our greek users, who this change will affect, it would be
> nice to include a sed script (in NEWS?) which patches any font they have
> installed themselves,


Hmm, yeah, good idea.  I wonder if I still have my sed script in the shell history of a still-open terminal window...

[time passes]

Seems not. :-/

After my changes above, the only font descriptions that contain special character/glyph declarations matching `*[A-Za-z]` are `SS` and `S`.  The Unicode code point associations in the latter are arguably wrong.  Maybe?  Unicode has a different problem to solve here.  I don't recall them having a distinct code point for *every* Greek letter, in both cases, when employed for "technical" writing.

> or perhaps a recommendation they re-run afmtodit on any
> self installed fonts.


Since historically afmtodit did not record in the generated file how it was run (with what options, for example)[1], that sounds like an avenue to frustration.  Might be better to advise hand-editing.

[1] But it will in groff 1.24.0.

G. Branden Robinson <gbranden>
Group administrator
Thu 26 Jun 2025 11:28:16 AM UTC, comment #5: 

On Thursday, 26 June 2025 06:44:06 BST G. Branden Robinson wrote:

> Follow-up Comment #4, bug #67244 (group groff):
>
> comment #2:
>
> > When preconv finds greek UTF-8 characters it should output the unicode
> > representation \[uXXXX],
>
> This seems to work already in released groff.
>
>
> $ cat ATTIC/hi-deri-in-greek.groff
> Ηι Δερι
> $ od -c ATTIC/hi-deri-in-greek.groff
> 0000000 316 227 316 271     316 224 316 265 317 201 316 271  \n
> 0000016
> $ od -t x1 ATTIC/hi-deri-in-greek.groff
> 0000000 ce 97 ce b9 20 ce 94 ce b5 cf 81 ce b9 0a
> 0000016
> $ ~/groff-1.23.0/bin/preconv ATTIC/hi-deri-in-greek.groff
> .lf 1 ATTIC/hi-deri-in-greek.groff
> \[u0397]\[u03B9] \[u0394]\[u03B5]\[u03C1]\[u03B9]


My mistake its not preconv it is groff itself:-

[derij@pip build (master)]$ echo "Ηι Δερι"|test-groff -Tpdf -Z -k -F /usr/
share/groff/site-font/ -f TINO
x T pdf
x res 72000 1 1
x init
p1
x font 5 TINOR
f5
s10000
md
DFd
V12000
H72000
C*Y
h7220
C*i
wh5190
C*D
h6430
C*e
h4190
C*r
h4990
C*i
h2690
n12000 0
x trailer
V792000
x stop
-verbetim-
If text.map is altered so that it no longer includes greek maths symbols, the
greek letters in TINOR would all have uXXXX names when afmtodit is run. But
groff changes preconv's \[uXXXX] input to greek symbol names. All the "C*?"
calls should be "Cu03XX" calls, groff should only output C*? if the input  was
\[*?], i.e. either eqn wants the maths symbol or the user has specifically
typed \[*?] because he wants it.

For the benefit of our greek users, who this change will affect, it would be
nice to include a sed script (in NEWS?) which patches any font they have
installed themselves, or perhaps a recommendation they re-run afmtodit on any
self installed fonts.

Deri James <deri>
Group Member
Thu 26 Jun 2025 05:44:02 AM UTC, comment #4: 

comment #2:

> When preconv finds greek UTF-8 characters it should output the unicode representation \[uXXXX],


This seems to work already in released groff.


$ cat ATTIC/hi-deri-in-greek.groff
Ηι Δερι
$ od -c ATTIC/hi-deri-in-greek.groff
0000000 316 227 316 271     316 224 316 265 317 201 316 271  \n
0000016
$ od -t x1 ATTIC/hi-deri-in-greek.groff
0000000 ce 97 ce b9 20 ce 94 ce b5 cf 81 ce b9 0a
0000016
$ ~/groff-1.23.0/bin/preconv ATTIC/hi-deri-in-greek.groff
.lf 1 ATTIC/hi-deri-in-greek.groff
\[u0397]\[u03B9] \[u0394]\[u03B5]\[u03C1]\[u03B9]


G. Branden Robinson <gbranden>
Group administrator
Thu 26 Jun 2025 04:27:05 AM UTC, comment #3: 

First of all, I made a systematic error when filing this ticket;
everywhere I said `mu` (the special character identifier), I should have
said `mc`.

groff_char(7):

     µ  \[mc] micro sign
     ×  \[mu] multiplication sign


At 2025-06-25T20:06:38-0400, Deri James wrote:

> Follow-up Comment #2, bug #67244 (group groff):
>
> It is a bit more than that, all greek SYMBOLS should only appear in
> symbol.map and not in text.map.


Agreed.

> Similarly preconv and afmtodit (with text.map) should be using unicode
> uXXXX names.


I wasn't aware that they weren't!

> The reason is because, as you have found with mu, which is present in
> the default text font (TR), if you are using a font family such as
> Tinos, which includes the full greek character set, eqn's use of \[*a]
> will appear as a non-italicised character.  The groff names for greek
> symbols should be restricted to only symbol fonts.


Agreed.

> When preconv finds greek UTF-8 characters it should output the unicode
> representation \[uXXXX], since we "know" the intention it should be
> rendered in a text font,


Agreed.

> similarly if an equation uses the keyword "alpha" the intention is to
> use the glyph from a symbol font.


Yes, there's a whole 'nother translation layer happening here.  I
suspect bug #64231 ("[eqn] use italic face for lowercase Greek letters
in nroff mode") is implicated, or should be.

> The greek glyphs in S and SS are definitely not suitable for greek
> typesetting textual content.


Agreed.

> Preconv already uses unicode naming for cyrillic characters,


I didn't recollect that...

> it should do the same for the greek character set.


...but I agree.

> I have attached a run of your example but calling it with:-
>
> test-groff -Tpdf -F /usr/share/groff/site-font/ -f TINO grk-gbr.trf | okular
> -
>
> You will see that all the characters are not italicised, not just mu.


Sounds like a fix to afmtodit and/or the "text.map" file is in order.

G. Branden Robinson <gbranden>
Group administrator
Thu 26 Jun 2025 12:06:31 AM UTC, comment #2: 

It is a bit more than that, all greek SYMBOLS should only appear in symbol.map and not in text.map. Similarly preconv and afmtodit (with text.map) should be using unicode uXXXX names. The reason is because, as you have found with mu, which is present in the default text font (TR), if you are using a font family such as Tinos, which includes the full greek character set, eqn's use of \[*a] will appear as a non-italicised character. The groff names for greek symbols should be restricted to only symbol fonts.

When preconv finds greek UTF-8 characters it should output the unicode representation \[uXXXX], since we "know" the intention it should be rendered in a text font, similarly if an equation uses the keyword "alpha" the intention is to use the glyph from a symbol font. The greek glyphs in S and SS are definitely not suitable for greek typesetting textual content. Preconv already uses unicode naming for cyrillic characters, it should do the same for the greek character set.

I have attached a run of your example but calling it with:-

test-groff -Tpdf -F /usr/share/groff/site-font/ -f TINO grk-gbr.trf | okular -

You will see that all the characters are not italicised, not just mu.


Deri James <deri>
Group Member
Wed 25 Jun 2025 09:24:49 PM UTC, comment #1: 

Illustration:


G. Branden Robinson <gbranden>
Group administrator
Wed 25 Jun 2025 09:22:36 PM UTC, original submission:  

\[mu] and \[*m] should not be synonyms.  The former is the "micro sign" and should be upright.  I observe this misbehavior as far back as groff 1.22.3.

The latter is, in troff tradition, a lowercase Greek letter mu for mathematical applications, which means that it should be slanted.

Because the lowercase Greek letters supplied by PostScript's Symbol font are upright, historically that device developed a slanted-symbol font "SS" to provide these glyphs.  Conventionally, that font is mounted prior to "S" in the output device's "DESC" file.  I think the reason for that is to ensure that the character resolution process finds any special characters that are "Greek" in the slanted symbol face before the unslanted one.

It's worth observing that in both troff and PostScript, Symbol fonts are by definition unstyled; they don't have "strong" or "heavy" (bold) or "oblique" or "slanted" (italic) variants, or at least not in separate font files.  Where such variants exist, they have separate identities, encoded at different indices in fonts and tend to get different code points in Unicode.

It is a historical accident that troff made one choice about how "unstyled" lowercase Greek letters should appear, and PostScript made another.  Arguably, PostScript's is more principled, whereas troff's was more practical since people typesetting mathematics want slanted lowercase Greek letters much more commonly than upright ones.

The purpose of this ticket is only to fix the Greek lowercase mu; see attachments.

But to resolve it we should also fix auxiliary files used in font generation (like the map files afmtodit uses), and afmtodit itself, as necessary, to ensure that this bug doesn't resurrect accidentally.

However in the longer term I think we can also arrange for the aforementioned convention to be unnecessary.  No "S" font should provide lowercase Greek letters as groff defines them (see groff_char(7)), and any "SS" font that exists should provide *only* lowercase Greek letters.

Input:


$ cat ATTIC/greek-letters.groff
\Z'Greek\
\[*a]\[*b]\[*g]\[*d]\[*e]\[*z]\
\[*y]\[*h]\[*i]\[*k]\[*l]\[*m]\
\[*n]\[*c]\[*o]\[*p]\[*r]\[*s]\
\[*t]\[*u]\[*f]\[*x]\[*q]\[*o]\
\[+h]\[+p]\[+f]\[ts]'\
\l'16m\[ru]'
.\" Prior to groff 1.24, we need extra space or the output device name
.\" overprints the Greek letters.  This is because the glyphs in groff's
.\" 1.24 font are scaled down from their upright counterparts (by 0.89),
.\" making a better match with groff's historical PostScript face.
.if '\?\*[.T]\?'\?pdf\?' \h'4m'
\*[.T]


G. Branden Robinson <gbranden>
Group administrator

 

Attached Files

Attached Files
file #57350:  ps.png added by deri (2.7KiB - image/png)
file #57349:  ps.png added by deri (1.3KiB - image/png)
file #57346:  TinosDup.pdf added by deri (23KiB - application/pdf)
file #57330:  tinos.png added by deri (8.3KiB - image/png)
file #57328:  greek-letters-1.22.3.ps added by gbranden (6.9KiB - application/postscript)

(Note: upload size limit is set to 4.0MiB, after insertion of the required escape characters.)

Attach Files:
   
   
Comment:
   

 

Dependencies

This item does not depend on any other items.

No items depend on this one.

 

Mail Notification Carbon-Copy List

Carbon-Copy List
  • -email is unavailable- added by deri (Updated the item)
  • -email is unavailable- added by gbranden (Submitted the item)
  •  

    Votes

    There are 0 votes so far. Votes easily highlight which items people would like to see resolved in priority, independently of the priority of the item set by tracker managers.

    Only logged-in users can vote.

     

    History

    Follow 26 latest changes.

    Date Changed by Updated Field Previous Value => Replaced by
    2025-08-03 gbranden Summary[devpdf,devps,libgroff] stop treating technical Greek as linguistic Greek [devdvi,devpdf,devps,libgroff] stop treating technical Greek as linguistic Greek
    2025-07-01 gbranden Assigned togbranden deri
    2025-07-01 deri Attached File- Added ps.png, #57350
        Assigned toderi gbranden
    2025-07-01 deri Attached File- Added ps.png, #57349
    2025-07-01 gbranden Attached File- Added deri-67244-tinos-example.png, #57348
        Planned Release1.24.0 None
    2025-07-01 gbranden Open/ClosedClosed Open
    2025-07-01 gbranden StatusIn Progress Need Info
        Assigned togbranden deri
    2025-07-01 deri Attached File- Added TinosDup.pdf, #57346
        StatusFixed In Progress
    2025-06-29 gbranden Summary[devpdf,devps,libgroff] do not treat technical Greek as linguistic Greek [devpdf,devps,libgroff] stop treating technical Greek as linguistic Greek
    2025-06-29 gbranden StatusNeed Info Fixed
        Open/ClosedOpen Closed
        Planned ReleaseNone 1.24.0
    2025-06-28 gbranden StatusIn Progress Need Info
    2025-06-28 gbranden CategoryFont - others/general General
        Item GroupRendering/Cosmetics Incorrect behaviour
        Summary[devpdf,devps] special character `*m` should not alias `mc` (micro sign) [devpdf,devps,libgroff] do not treat technical Greek as linguistic Greek
    2025-06-26 gbranden StatusNone In Progress
        Assigned toNone gbranden
    2025-06-26 gbranden Summary[devpdf,devps] special character `*m` should not alias `mu` [devpdf,devps] special character `*m` should not alias `mc` (micro sign)
    2025-06-26 deri Attached File- Added tinos.png, #57330
    2025-06-25 gbranden Attached File- Added greek-letters-1.22.3.ps, #57328

    Back to the top

    Powered by Savane 3.16-ed84.
    Corresponding source code