gbranden pushed a commit to branch master
in repository groff.
commit 2514058c706fe6fed80029b939b9f8c8f643e89b
Author: Nguyễn Gia Phong <[email protected]>
AuthorDate: Wed Jul 8 11:14:03 2026 +0900
[eqn]: Emit better-formed XHTML/MathML. (3/3)
* src/preproc/eqn/text.cpp: Drop dead static data (`entity_table`), its
now unused data type declaration (`struct map`).
(special_to_entity): Drop now unused function.
Fixes <https://savannah.gnu.org/bugs/?68499>.
ANNOUNCE: Acknowledge Phong. (--GBR)
---
ANNOUNCE | 1 +
ChangeLog | 9 ++
src/preproc/eqn/text.cpp | 377 -----------------------------------------------
3 files changed, 10 insertions(+), 377 deletions(-)
diff --git a/ANNOUNCE b/ANNOUNCE
index c80b52fc6..428071a5a 100644
--- a/ANNOUNCE
+++ b/ANNOUNCE
@@ -223,6 +223,7 @@ Karl Berry
Luis Rivera
Martin Simmons
Morten Bo Johansen
+Nguyễn Gia Phong
Richard Purdie
Ross Burton
Russ Allbery
diff --git a/ChangeLog b/ChangeLog
index a52fe8b39..deb77b9a8 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+2026-07-08 Nguyễn Gia Phong <[email protected]>
+
+ * src/preproc/eqn/text.cpp: Drop dead static data
+ {`entity_table`} , its now unused data type declaration {`struct
+ map`}.
+ (special_to_entity): Drop now unused function.
+
+ Fixes <https://savannah.gnu.org/bugs/?68499>.
+
2026-07-08 Nguyễn Gia Phong <[email protected]>
* src/preproc/eqn/text.cpp: Stop mapping special characters to
diff --git a/src/preproc/eqn/text.cpp b/src/preproc/eqn/text.cpp
index dc0c33d9f..3a412e85d 100644
--- a/src/preproc/eqn/text.cpp
+++ b/src/preproc/eqn/text.cpp
@@ -30,383 +30,6 @@ along with this program. If not, see
<http://www.gnu.org/licenses/>. */
#include "ptable.h"
#include "unicode.h" // valid_unicode_code_sequence()
-struct map {
- const char *from;
- const char *to;
-};
-
-struct map entity_table[] = {
- // Classic troff special characters
- {"%", "­"}, // ISOnum
- {"'", "´"}, // ISOdia
- {"!=", "≠"}, // ISOtech
- {"**", "∗"}, // ISOtech
- {"*a", "α"}, // ISOgrk3
- {"*A", "A"},
- {"*b", "β"}, // ISOgrk3
- {"*B", "B"},
- {"*d", "δ"}, // ISOgrk3
- {"*D", "Δ"}, // ISOgrk3
- {"*e", "ε"}, // ISOgrk3
- {"*E", "E"},
- {"*f", "φ"}, // ISOgrk3
- {"*F", "Φ"}, // ISOgrk3
- {"*g", "γ"}, // ISOgrk3
- {"*G", "Γ"}, // ISOgrk3
- {"*h", "θ"}, // ISOgrk3
- {"*H", "Θ"}, // ISOgrk3
- {"*i", "ι"}, // ISOgrk3
- {"*I", "I"},
- {"*k", "κ"}, // ISOgrk3
- {"*K", "K;"},
- {"*l", "λ"}, // ISOgrk3
- {"*L", "Λ"}, // ISOgrk3
- {"*m", "μ"}, // ISOgrk3
- {"*M", "M"},
- {"*n", "ν"}, // ISOgrk3
- {"*N", "N"},
- {"*o", "o"},
- {"*O", "O"},
- {"*p", "π"}, // ISOgrk3
- {"*P", "Π"}, // ISOgrk3
- {"*q", "ψ"}, // ISOgrk3
- {"*Q", "&PSI;"}, // ISOgrk3
- {"*r", "ρ"}, // ISOgrk3
- {"*R", "R"},
- {"*s", "σ"}, // ISOgrk3
- {"*S", "Σ"}, // ISOgrk3
- {"*t", "τ"}, // ISOgrk3
- {"*T", "Τ"}, // ISOgrk3
- {"*u", "υ"}, // ISOgrk3
- {"*U", "Υ"}, // ISOgrk3
- {"*w", "ω"}, // ISOgrk3
- {"*W", "Ω"}, // ISOgrk3
- {"*x", "χ"}, // ISOgrk3
- {"*X", "Χ"}, // ISOgrk3
- {"*y", "η"}, // ISOgrk3
- {"*Y", "Η"}, // ISOgrk3
- {"*z", "ζ"}, // ISOgrk3
- {"*Z", "Ζ"}, // ISOgrk3
- {"+-", "±"}, // ISOnum
- {"->", "→"}, // ISOnum
- {"12", "½"}, // ISOnum
- {"14", "¼"}, // ISOnum
- {"34", "¾"}, // ISOnum
- {"<-", "←"}, // ISOnum
- {"==", "≡"}, // ISOtech
- {"Fi", "ffi"}, // ISOpub
- {"Fl", "ffl"}, // ISOpub
- {"aa", "´"}, // ISOdia
- {"ap", "∼"}, // ISOtech
- {"bl", "&phonexb;"}, // ISOpub
- {"br", "│"}, // ISObox
- {"bs", "☎"}, // ISOpub (for the Bell logo)
- {"bu", "•"}, // ISOpub
- {"bv", "|"}, // ISOnum
- {"ca", "∩"}, // ISOtech
- {"ci", "○"}, // ISOpub
- {"co", "©"}, // ISOnum
- {"ct", "¢"}, // ISOnum
- {"cu", "∪"}, // ISOtech
- {"da", "↓"}, // ISOnum
- {"de", "°"}, // ISOnum
- {"dg", "†"}, // ISOpub
- {"dd", "‡"}, // ISOpub
- {"di", "÷"}, // ISOnum
- {"em", "—"}, // ISOpub
- {"eq", "="}, // ISOnum
- {"es", "∅"}, // ISOamso
- {"ff", "ff"}, // ISOpub
- {"fi", "fi"}, // ISOpub
- {"fl", "fl"}, // ISOpub
- {"fm", "′"}, // ISOtech
- {"ge", "≥"}, // ISOtech
- {"gr", "∇"}, // ISOtech
- {"hy", "‐"}, // ISOnum
- {"ib", "⊆"}, // ISOtech
- {"if", "∞"}, // ISOtech
- {"ip", "⊇"}, // ISOtech
- {"is", "∫"}, // ISOtech
- {"le", "≤"}, // ISOtech
- // Some pile characters go here
- {"mi", "−"}, // ISOtech
- {"mo", "∈"}, // ISOtech
- {"mu", "×"}, // ISOnum
- {"no", "¬"}, // ISOnum
- {"or", "|"}, // ISOnum
- {"pl", "+"}, // ISOnum
- {"pt", "∝"}, // ISOtech
- {"rg", "™"}, // ISOnum
- // More pile characters go here
- {"rn", "¯"}, // ISOdia
- {"ru", "_"}, // ISOnum
- {"sb", "⊂"}, // ISOtech
- {"sc", "§"}, // ISOnum
- {"sl", "/"},
- {"sp", "⊃"}, // ISOtech
- {"sq", "▪"}, // ISOpub
- {"sr", "√"}, // ISOtech
- {"ts", "ς"}, // ISOgrk3
- {"ua", "↑"}, // ISOnum
- {"ul", "_"},
- {"~=", "≅"}, // ISOtech
- // Extended specials supported by groff; see groff_char(7).
- // These are listed in the order they occur on that man page.
- {"-D", "Ð"}, // ISOlat: Icelandic uppercase eth
- {"Sd", "ð"}, // ISOlat1: Icelandic lowercase eth
- {"TP", "Þ"}, // ISOlat1: Icelandic uppercase thorn
- {"Tp", "þ"}, // ISOlat1: Icelandic lowercase thorn
- {"ss", "ß"}, // ISOlat1
- // Ligatures
- // ff, fi, fl, ffi, ffl from old troff go here
- {"AE", "Æ"}, // ISOlat1
- {"ae", "æ"}, // ISOlat1
- {"OE", "Œ"}, // ISOlat2
- {"oe", "œ"}, // ISOlat2
- {"IJ", "ij"}, // ISOlat2: Dutch IJ ligature
- {"ij", "IJ"}, // ISOlat2: Dutch ij ligature
- {".i", "ı"}, // ISOlat2,ISOamso
- {".j", "&jnodot;"}, // ISOamso (undocumented but in 1.19)
- // Accented characters
- {"'A", "Á"}, // ISOlat1
- {"'C", "Ć"}, // ISOlat2
- {"'E", "É"}, // ISOlat1
- {"'I", "Í"}, // ISOlat1
- {"'O", "Ó"}, // ISOlat1
- {"'U", "Ú"}, // ISOlat1
- {"'Y", "Ý"}, // ISOlat1
- {"'a", "á"}, // ISOlat1
- {"'c", "ć"}, // ISOlat2
- {"'e", "é"}, // ISOlat1
- {"'i", "í"}, // ISOlat1
- {"'o", "ó"}, // ISOlat1
- {"'u", "ú"}, // ISOlat1
- {"'y", "ý"}, // ISOlat1
- {":A", "Ä"}, // ISOlat1
- {":E", "Ë"}, // ISOlat1
- {":I", "Ï"}, // ISOlat1
- {":O", "Ö"}, // ISOlat1
- {":U", "Ü"}, // ISOlat1
- {":Y", "Ÿ"}, // ISOlat2
- {":a", "ä"}, // ISOlat1
- {":e", "ë"}, // ISOlat1
- {":i", "ï"}, // ISOlat1
- {":o", "ö"}, // ISOlat1
- {":u", "ü"}, // ISOlat1
- {":y", "ÿ"}, // ISOlat1
- {"^A", "Â"}, // ISOlat1
- {"^E", "Ê"}, // ISOlat1
- {"^I", "Î"}, // ISOlat1
- {"^O", "Ô"}, // ISOlat1
- {"^U", "Û"}, // ISOlat1
- {"^a", "â"}, // ISOlat1
- {"^e", "ê"}, // ISOlat1
- {"^i", "î"}, // ISOlat1
- {"^o", "ô"}, // ISOlat1
- {"^u", "û"}, // ISOlat1
- {"`A", "À"}, // ISOlat1
- {"`E", "È"}, // ISOlat1
- {"`I", "Ì"}, // ISOlat1
- {"`O", "Ò"}, // ISOlat1
- {"`U", "Ù"}, // ISOlat1
- {"`a", "à"}, // ISOlat1
- {"`e", "è"}, // ISOlat1
- {"`i", "ì"}, // ISOlat1
- {"`o", "ò"}, // ISOlat1
- {"`u", "ù"}, // ISOlat1
- {"~A", "Ã"}, // ISOlat1
- {"~N", "Ñ"}, // ISOlat1
- {"~O", "Õ"}, // ISOlat1
- {"~a", "ã"}, // ISOlat1
- {"~n", "ñ"}, // ISOlat1
- {"~o", "õ"}, // ISOlat1
- {"vS", "Š"}, // ISOlat2
- {"vs", "š"}, // ISOlat2
- {"vZ", "Ž"}, // ISOlat2
- {"vz", "ž"}, // ISOlat2
- {",C", "Ç"}, // ISOlat1
- {",c", "ç"}, // ISOlat1
- {"/L", "Ł"}, // ISOlat2: Polish L with a slash
- {"/l", "ł"}, // ISOlat2: Polish l with a slash
- {"/O", "Ø"}, // ISOlat1
- {"/o", "ø"}, // ISOlat1
- {"oA", "Å"}, // ISOlat1
- {"oa", "å"}, // ISOlat1
- // Accents
- {"a\"","˝"}, // ISOdia: double acute accent (Hungarian umlaut)
- {"a-", "¯"}, // ISOdia: macron or bar accent
- {"a.", "˙"}, // ISOdia: dot above
- {"a^", "ˆ"}, // ISOdia: circumflex accent
- {"aa", "´"}, // ISOdia: acute accent
- {"ga", "`"}, // ISOdia: grave accent
- {"ab", "˘"}, // ISOdia: breve accent
- {"ac", "¸"}, // ISOdia: cedilla accent
- {"ad", "¨"}, // ISOdia: umlaut or dieresis
- {"ah", "ˇ"}, // ISOdia: caron (aka hacek accent)
- {"ao", "˚"}, // ISOdia: ring or circle accent
- {"a~", "˜"}, // ISOdia: tilde accent
- {"ho", "˛"}, // ISOdia: hook or ogonek accent
- {"ha", "^"}, // ASCII circumflex, hat, caret
- {"ti", "~"}, // ASCII tilde, large tilde
- // Quotes
- {"Bq", "‚"}, // ISOpub: low double comma quote
- {"bq", "„"}, // ISOpub: low single comma quote
- {"lq", "“"}, // ISOnum
- {"rq", "”"}, // ISOpub
- {"oq", "‘"}, // ISOnum: single open quote
- {"cq", "’"}, // ISOnum: single closing quote (ASCII 39)
- {"aq", "&zerosp;'"}, // apostrophe quote
- {"dq", "\""}, // double quote (ASCII 34)
- {"Fo", "«"}, // ISOnum
- {"Fc", "»"}, // ISOnum
- //{"fo", "&fo;"},
- //{"fc", "&fc;"},
- // Punctuation
- {"r!", "¡"}, // ISOnum
- {"r?", "¿"}, // ISOnum
- // Old troff \(em goes here
- {"en", "–"}, // ISOpub: en dash
- // Old troff \(hy goes here
- // Brackets
- {"lB", "["}, // ISOnum: left (square) bracket
- {"rB", "]"}, // ISOnum: right (square) bracket
- {"lC", "{"}, // ISOnum: left (curly) brace
- {"rC", "}"}, // ISOnum: right (curly) brace
- {"la", "⟨"}, // ISOtech: left angle bracket
- {"ra", "⟩"}, // ISOtech: right angle bracket
- // Old troff \(bv goes here
- // Bracket-pile characters could go here.
- // Arrows
- // Old troff \(<- and \(-> go here
- {"<>", "↔"}, // ISOamsa
- {"da", "↓"}, // ISOnum
- {"ua", "↑"}, // ISOnum
- {"lA", "⇐"}, // ISOtech
- {"rA", "⇒"}, // ISOtech
- {"hA", "⇔"}, // ISOtech: horizontal double-headed arrow
- {"dA", "⇓"}, // ISOamsa
- {"uA", "⇑"}, // ISOamsa
- {"vA", "⇕"}, // ISOamsa: vertical double-headed double arrow
- //{"an", "&an;"},
- // Lines
- {"-h", "ℏ"}, // ISOamso: h-bar (Planck's constant)
- // Old troff \(or goes here
- {"ba", "|"}, // ISOnum
- // Old troff \(br, \{u, \(ul, \(bv go here
- {"bb", "¦"}, // ISOnum
- {"sl", "/"},
- {"rs", "\"}, // ISOnum
- // Text markers
- // Old troff \(ci, \(bu, \(dd, \(dg go here
- {"lz", "◊"}, // ISOpub
- // Old troff sq goes here
- {"ps", "¶"}, // ISOnum: paragraph or pilcrow sign
- {"sc", "§"}, // ISOnum (in old troff)
- // Old troff \(lh, \{h go here
- {"at", "@"}, // ISOnum
- {"sh", "#"}, // ISOnum
- //{"CR", "&CR;"},
- {"OK", "✓"}, // ISOpub
- // Legalize
- // Old troff \(co, \{g go here
- {"tm", "™"}, // ISOnum
- // Currency symbols
- {"Do", "$"}, // ISOnum
- {"ct", "¢"}, // ISOnum
- {"eu", "€"},
- {"Eu", "€"},
- {"Ye", "¥"}, // ISOnum
- {"Po", "£"}, // ISOnum
- {"Cs", "¤"}, // ISOnum: currency sign
- {"Fn", "&fnof"}, // ISOtech
- // Units
- // Old troff de goes here
- {"%0", "‰"}, // ISOtech: per thousand, per mille sign
- // Old troff \(fm goes here
- {"sd", "″"}, // ISOtech
- {"mc", "µ"}, // ISOnum
- {"Of", "ª"}, // ISOnum
- {"Om", "º"}, // ISOnum
- // Logical symbols
- {"AN", "∧"}, // ISOtech
- {"OR", "∨"}, // ISOtech
- // Old troff \(no goes here
- {"te", "∃"}, // ISOtech: there exists, existential quantifier
- {"fa", "∀"}, // ISOtech: for all, universal quantifier
- {"st", "&bepsi"}, // ISOamsr: such that
- {"3d", "∴"}, // ISOtech
- {"tf", "∴"}, // ISOtech
- // Mathematical symbols
- // Old troff "12", "14", "34" goes here
- {"S1", "¹"}, // ISOnum
- {"S2", "²"}, // ISOnum
- {"S3", "³"}, // ISOnum
- // Old troff \(pl", \-, \(+- go here
- {"t+-", "±"}, // ISOnum
- {"-+", "∓"}, // ISOtech
- {"pc", "·"}, // ISOnum
- {"md", "·"}, // ISOnum
- // Old troff \(mu goes here
- {"tmu", "×"}, // ISOnum
- {"c*", "⊗"}, // ISOamsb: multiply sign in a circle
- {"c+", "⊕"}, // ISOamsb: plus sign in a circle
- // Old troff \(di goes here
- {"tdi", "÷"}, // ISOnum
- {"f/", "―"}, // ISOnum: horizontal bar for fractions
- // Old troff \(** goes here
- {"<=", "≤"}, // ISOtech
- {">=", "≥"}, // ISOtech
- {"<<", "≪"}, // ISOamsr
- {">>", "≫"}, // ISOamsr
- {"!=", "≠"}, // ISOtech
- // Old troff \(eq and \(== go here
- {"=~", "≅"}, // ISOamsr
- // Old troff \(ap goes here
- {"~~", "≈"}, // ISOtech
- // This appears to be an error in the groff table.
- // It clashes with the Bell Labs use of ~= for a congruence sign
- // {"~=", "≈"}, // ISOamsr
- // Old troff \(pt, \(es, \(mo go here
- {"nm", "∉"}, // ISOtech
- {"nb", "⊄"}, // ISOamsr
- {"nc", "⊅"}, // ISOamsn
- {"ne", "≢"}, // ISOamsn
- // Old troff \(sb, \(sp, \(ib, \(ip, \(ca, \(cu go here
- {"/_", "∠"}, // ISOamso
- {"pp", "⊥"}, // ISOtech
- // Old troff \(is goes here
- {"sum", "∑"}, // ISOamsb
- {"product", "∏"}, // ISOamsb
- {"gr", "∇"}, // ISOtech
- // Old troff \(sr. \{n, \(if go here
- {"Ah", "ℵ"}, // ISOtech
- {"Im", "ℑ"}, // ISOamso: Fraktur I, imaginary
- {"Re", "ℜ"}, // ISOamso: Fraktur R, real
- {"wp", "℘"}, // ISOamso
- {"pd", "∂"}, // ISOtech: partial differentiation sign
- // Their table duplicates the Greek letters here.
- // We list only the variant forms here, mapping them into
- // the ISO Greek 4 variants (which may or may not be correct :-()
- {"+f", "&b.phiv;"}, // ISOgrk4: variant phi
- {"+h", "&b.thetas;"}, // ISOgrk4: variant theta
- {"+p", "&b.omega;"}, // ISOgrk4: variant pi, looking like omega
- // Card symbols
- {"CL", "♣"}, // ISOpub: club suit
- {"SP", "♠"}, // ISOpub: spade suit
- {"HE", "♥"}, // ISOpub: heart suit
- {"DI", "♦"}, // ISOpub: diamond suit
-};
-
-static const char *special_to_entity(const char *sp)
-{
- struct map *mp;
- for (mp = entity_table; mp < entity_table + countof(entity_table); mp++) {
- if (strcmp(mp->from, sp) == 0)
- return mp->to;
- }
- return NULL;
-}
-
class char_box : public simple_box {
unsigned char c;
char next_is_italic;
_______________________________________________
groff-commit mailing list
[email protected]
https://lists.gnu.org/mailman/listinfo/groff-commit