Follow-up Comment #23, bug #67571 (group groff):

[comment #0 original submission:]

> I get the above results whether I use groff 1.22.4 or 1.23.0.  (The other
> historical groff I have at hand, 1.19.2, had not yet implemented the .class
> request.)

I can reproduce it with _groff_ 1.22.3.

The `define_class()` function seems to have come in in December 2010 and
soldified _almost_ instantly.  I see only 3 commits implicated, all within a
week.


$ git blame 1.22.3 -- src/roff/troff/input.cpp | sed -n '/void
define_class/,/) }/p'
1cb8dd7bde src/roff/troff/input.cpp (Werner LEMBERG 2010-12-13 15:30:20 +0000
7028) void define_class()
1cb8dd7bde src/roff/troff/input.cpp (Werner LEMBERG 2010-12-13 15:30:20 +0000
7029) {
1cb8dd7bde src/roff/troff/input.cpp (Werner LEMBERG 2010-12-13 15:30:20 +0000
7030)   tok.skip();
1cb8dd7bde src/roff/troff/input.cpp (Werner LEMBERG 2010-12-13 15:30:20 +0000
7031)   symbol nm = get_name(1);
1cb8dd7bde src/roff/troff/input.cpp (Werner LEMBERG 2010-12-13 15:30:20 +0000
7032)   if (nm.is_null()) {
1cb8dd7bde src/roff/troff/input.cpp (Werner LEMBERG 2010-12-13 15:30:20 +0000
7033)     skip_line();
1cb8dd7bde src/roff/troff/input.cpp (Werner LEMBERG 2010-12-13 15:30:20 +0000
7034)     return;
1cb8dd7bde src/roff/troff/input.cpp (Werner LEMBERG 2010-12-13 15:30:20 +0000
7035)   }
1cb8dd7bde src/roff/troff/input.cpp (Werner LEMBERG 2010-12-13 15:30:20 +0000
7036)   charinfo *ci = get_charinfo(nm);
1cb8dd7bde src/roff/troff/input.cpp (Werner LEMBERG 2010-12-13 15:30:20 +0000
7037)   charinfo *child1 = 0, *child2 = 0;
1cb8dd7bde src/roff/troff/input.cpp (Werner LEMBERG 2010-12-13 15:30:20 +0000
7038)   while (!tok.newline() && !tok.eof()) {
1cb8dd7bde src/roff/troff/input.cpp (Werner LEMBERG 2010-12-13 15:30:20 +0000
7039)     tok.skip();
1cb8dd7bde src/roff/troff/input.cpp (Werner LEMBERG 2010-12-13 15:30:20 +0000
7040)     if (child1 != 0 && tok.ch() == '-') {
1cb8dd7bde src/roff/troff/input.cpp (Werner LEMBERG 2010-12-13 15:30:20 +0000
7041)       tok.next();
1cb8dd7bde src/roff/troff/input.cpp (Werner LEMBERG 2010-12-13 15:30:20 +0000
7042)       child2 = tok.get_char(1);
1cb8dd7bde src/roff/troff/input.cpp (Werner LEMBERG 2010-12-13 15:30:20 +0000
7043)       if (!child2) {
1cb8dd7bde src/roff/troff/input.cpp (Werner LEMBERG 2010-12-13 15:30:20 +0000
7044)     warning(WARN_MISSING,
1cb8dd7bde src/roff/troff/input.cpp (Werner LEMBERG 2010-12-13 15:30:20 +0000
7045)             "missing end of character range in class `%1'",
1cb8dd7bde src/roff/troff/input.cpp (Werner LEMBERG 2010-12-13 15:30:20 +0000
7046)             nm.contents());
1cb8dd7bde src/roff/troff/input.cpp (Werner LEMBERG 2010-12-13 15:30:20 +0000
7047)     skip_line();
1cb8dd7bde src/roff/troff/input.cpp (Werner LEMBERG 2010-12-13 15:30:20 +0000
7048)     return;
1cb8dd7bde src/roff/troff/input.cpp (Werner LEMBERG 2010-12-13 15:30:20 +0000
7049)       }
1cb8dd7bde src/roff/troff/input.cpp (Werner LEMBERG 2010-12-13 15:30:20 +0000
7050)       if (child1->is_class() || child2->is_class()) {
1cb8dd7bde src/roff/troff/input.cpp (Werner LEMBERG 2010-12-13 15:30:20 +0000
7051)     warning(WARN_SYNTAX,
1cb8dd7bde src/roff/troff/input.cpp (Werner LEMBERG 2010-12-13 15:30:20 +0000
7052)             "nested character class is not allowed in range
definition");
1cb8dd7bde src/roff/troff/input.cpp (Werner LEMBERG 2010-12-13 15:30:20 +0000
7053)     skip_line();
1cb8dd7bde src/roff/troff/input.cpp (Werner LEMBERG 2010-12-13 15:30:20 +0000
7054)     return;
1cb8dd7bde src/roff/troff/input.cpp (Werner LEMBERG 2010-12-13 15:30:20 +0000
7055)       }
1cb8dd7bde src/roff/troff/input.cpp (Werner LEMBERG 2010-12-13 15:30:20 +0000
7056)       int u1 = child1->get_unicode_code();
1cb8dd7bde src/roff/troff/input.cpp (Werner LEMBERG 2010-12-13 15:30:20 +0000
7057)       int u2 = child2->get_unicode_code();
1cb8dd7bde src/roff/troff/input.cpp (Werner LEMBERG 2010-12-13 15:30:20 +0000
7058)       if (u1 < 0) {
1cb8dd7bde src/roff/troff/input.cpp (Werner LEMBERG 2010-12-13 15:30:20 +0000
7059)     warning(WARN_SYNTAX,
1cb8dd7bde src/roff/troff/input.cpp (Werner LEMBERG 2010-12-13 15:30:20 +0000
7060)             "invalid start value in character range");
1cb8dd7bde src/roff/troff/input.cpp (Werner LEMBERG 2010-12-13 15:30:20 +0000
7061)     skip_line();
1cb8dd7bde src/roff/troff/input.cpp (Werner LEMBERG 2010-12-13 15:30:20 +0000
7062)     return;
1cb8dd7bde src/roff/troff/input.cpp (Werner LEMBERG 2010-12-13 15:30:20 +0000
7063)       }
1cb8dd7bde src/roff/troff/input.cpp (Werner LEMBERG 2010-12-13 15:30:20 +0000
7064)       if (u2 < 0) {
1cb8dd7bde src/roff/troff/input.cpp (Werner LEMBERG 2010-12-13 15:30:20 +0000
7065)     warning(WARN_SYNTAX,
1cb8dd7bde src/roff/troff/input.cpp (Werner LEMBERG 2010-12-13 15:30:20 +0000
7066)             "invalid end value in character range");
1cb8dd7bde src/roff/troff/input.cpp (Werner LEMBERG 2010-12-13 15:30:20 +0000
7067)     skip_line();
1cb8dd7bde src/roff/troff/input.cpp (Werner LEMBERG 2010-12-13 15:30:20 +0000
7068)     return;
1cb8dd7bde src/roff/troff/input.cpp (Werner LEMBERG 2010-12-13 15:30:20 +0000
7069)       }
1cb8dd7bde src/roff/troff/input.cpp (Werner LEMBERG 2010-12-13 15:30:20 +0000
7070)       ci->add_to_class(u1, u2);
1cb8dd7bde src/roff/troff/input.cpp (Werner LEMBERG 2010-12-13 15:30:20 +0000
7071)       child1 = child2 = 0;
1cb8dd7bde src/roff/troff/input.cpp (Werner LEMBERG 2010-12-13 15:30:20 +0000
7072)     }
1cb8dd7bde src/roff/troff/input.cpp (Werner LEMBERG 2010-12-13 15:30:20 +0000
7073)     else if (child1 != 0) {
9a08b71d07 src/roff/troff/input.cpp (Werner LEMBERG 2010-12-19 20:47:38 +0000
7074)       if (child1->is_class()) {
9a08b71d07 src/roff/troff/input.cpp (Werner LEMBERG 2010-12-19 20:47:38 +0000
7075)     if (ci == child1) {
9a08b71d07 src/roff/troff/input.cpp (Werner LEMBERG 2010-12-19 20:47:38 +0000
7076)       warning(WARN_SYNTAX, "invalid cyclic class nesting");
9a08b71d07 src/roff/troff/input.cpp (Werner LEMBERG 2010-12-19 20:47:38 +0000
7077)       skip_line();
9a08b71d07 src/roff/troff/input.cpp (Werner LEMBERG 2010-12-19 20:47:38 +0000
7078)       return;
9a08b71d07 src/roff/troff/input.cpp (Werner LEMBERG 2010-12-19 20:47:38 +0000
7079)     }
1cb8dd7bde src/roff/troff/input.cpp (Werner LEMBERG 2010-12-13 15:30:20 +0000
7080)     ci->add_to_class(child1);
9a08b71d07 src/roff/troff/input.cpp (Werner LEMBERG 2010-12-19 20:47:38 +0000
7081)       }
1cb8dd7bde src/roff/troff/input.cpp (Werner LEMBERG 2010-12-13 15:30:20 +0000
7082)       else {
1cb8dd7bde src/roff/troff/input.cpp (Werner LEMBERG 2010-12-13 15:30:20 +0000
7083)     int u1 = child1->get_unicode_code();
1cb8dd7bde src/roff/troff/input.cpp (Werner LEMBERG 2010-12-13 15:30:20 +0000
7084)     if (u1 < 0) {
1cb8dd7bde src/roff/troff/input.cpp (Werner LEMBERG 2010-12-13 15:30:20 +0000
7085)       warning(WARN_SYNTAX,
1cb8dd7bde src/roff/troff/input.cpp (Werner LEMBERG 2010-12-13 15:30:20 +0000
7086)               "invalid character value in class `%1'",
1cb8dd7bde src/roff/troff/input.cpp (Werner LEMBERG 2010-12-13 15:30:20 +0000
7087)               nm.contents());
1cb8dd7bde src/roff/troff/input.cpp (Werner LEMBERG 2010-12-13 15:30:20 +0000
7088)       skip_line();
1cb8dd7bde src/roff/troff/input.cpp (Werner LEMBERG 2010-12-13 15:30:20 +0000
7089)       return;
1cb8dd7bde src/roff/troff/input.cpp (Werner LEMBERG 2010-12-13 15:30:20 +0000
7090)     }
1cb8dd7bde src/roff/troff/input.cpp (Werner LEMBERG 2010-12-13 15:30:20 +0000
7091)     ci->add_to_class(u1);
1cb8dd7bde src/roff/troff/input.cpp (Werner LEMBERG 2010-12-13 15:30:20 +0000
7092)       }
1cb8dd7bde src/roff/troff/input.cpp (Werner LEMBERG 2010-12-13 15:30:20 +0000
7093)       child1 = 0;
1cb8dd7bde src/roff/troff/input.cpp (Werner LEMBERG 2010-12-13 15:30:20 +0000
7094)     }
1cb8dd7bde src/roff/troff/input.cpp (Werner LEMBERG 2010-12-13 15:30:20 +0000
7095)     child1 = tok.get_char(1);
1cb8dd7bde src/roff/troff/input.cpp (Werner LEMBERG 2010-12-13 15:30:20 +0000
7096)     tok.next();
1cb8dd7bde src/roff/troff/input.cpp (Werner LEMBERG 2010-12-13 15:30:20 +0000
7097)     if (!child1) {
1cb8dd7bde src/roff/troff/input.cpp (Werner LEMBERG 2010-12-13 15:30:20 +0000
7098)       if (!tok.newline())
1cb8dd7bde src/roff/troff/input.cpp (Werner LEMBERG 2010-12-13 15:30:20 +0000
7099)     skip_line();
1cb8dd7bde src/roff/troff/input.cpp (Werner LEMBERG 2010-12-13 15:30:20 +0000
7100)       break;
1cb8dd7bde src/roff/troff/input.cpp (Werner LEMBERG 2010-12-13 15:30:20 +0000
7101)     }
1cb8dd7bde src/roff/troff/input.cpp (Werner LEMBERG 2010-12-13 15:30:20 +0000
7102)   }
1cb8dd7bde src/roff/troff/input.cpp (Werner LEMBERG 2010-12-13 15:30:20 +0000
7103)   if (child1 != 0) {
9a08b71d07 src/roff/troff/input.cpp (Werner LEMBERG 2010-12-19 20:47:38 +0000
7104)     if (child1->is_class()) {
9a08b71d07 src/roff/troff/input.cpp (Werner LEMBERG 2010-12-19 20:47:38 +0000
7105)       if (ci == child1) {
9a08b71d07 src/roff/troff/input.cpp (Werner LEMBERG 2010-12-19 20:47:38 +0000
7106)     warning(WARN_SYNTAX, "invalid cyclic class nesting");
9a08b71d07 src/roff/troff/input.cpp (Werner LEMBERG 2010-12-19 20:47:38 +0000
7107)     skip_line();
9a08b71d07 src/roff/troff/input.cpp (Werner LEMBERG 2010-12-19 20:47:38 +0000
7108)     return;
9a08b71d07 src/roff/troff/input.cpp (Werner LEMBERG 2010-12-19 20:47:38 +0000
7109)       }
1cb8dd7bde src/roff/troff/input.cpp (Werner LEMBERG 2010-12-13 15:30:20 +0000
7110)       ci->add_to_class(child1);
9a08b71d07 src/roff/troff/input.cpp (Werner LEMBERG 2010-12-19 20:47:38 +0000
7111)     }
1cb8dd7bde src/roff/troff/input.cpp (Werner LEMBERG 2010-12-13 15:30:20 +0000
7112)     else {
1cb8dd7bde src/roff/troff/input.cpp (Werner LEMBERG 2010-12-13 15:30:20 +0000
7113)       int u1 = child1->get_unicode_code();
1cb8dd7bde src/roff/troff/input.cpp (Werner LEMBERG 2010-12-13 15:30:20 +0000
7114)       if (u1 < 0) {
1cb8dd7bde src/roff/troff/input.cpp (Werner LEMBERG 2010-12-13 15:30:20 +0000
7115)     warning(WARN_SYNTAX,
1cb8dd7bde src/roff/troff/input.cpp (Werner LEMBERG 2010-12-13 15:30:20 +0000
7116)             "invalid character value in class `%1'",
1cb8dd7bde src/roff/troff/input.cpp (Werner LEMBERG 2010-12-13 15:30:20 +0000
7117)             nm.contents());
1cb8dd7bde src/roff/troff/input.cpp (Werner LEMBERG 2010-12-13 15:30:20 +0000
7118)     skip_line();
1cb8dd7bde src/roff/troff/input.cpp (Werner LEMBERG 2010-12-13 15:30:20 +0000
7119)     return;
1cb8dd7bde src/roff/troff/input.cpp (Werner LEMBERG 2010-12-13 15:30:20 +0000
7120)       }
1cb8dd7bde src/roff/troff/input.cpp (Werner LEMBERG 2010-12-13 15:30:20 +0000
7121)       ci->add_to_class(u1);
1cb8dd7bde src/roff/troff/input.cpp (Werner LEMBERG 2010-12-13 15:30:20 +0000
7122)     }
1cb8dd7bde src/roff/troff/input.cpp (Werner LEMBERG 2010-12-13 15:30:20 +0000
7123)     child1 = 0;
1cb8dd7bde src/roff/troff/input.cpp (Werner LEMBERG 2010-12-13 15:30:20 +0000
7124)   }
1cb8dd7bde src/roff/troff/input.cpp (Werner LEMBERG 2010-12-13 15:30:20 +0000
7125)   if (!ci->is_class()) {
1cb8dd7bde src/roff/troff/input.cpp (Werner LEMBERG 2010-12-13 15:30:20 +0000
7126)     warning(WARN_SYNTAX,
1cb8dd7bde src/roff/troff/input.cpp (Werner LEMBERG 2010-12-13 15:30:20 +0000
7127)         "empty class definition for `%1'",
1cb8dd7bde src/roff/troff/input.cpp (Werner LEMBERG 2010-12-13 15:30:20 +0000
7128)         nm.contents());
a1954c5a05 src/roff/troff/input.cpp (Werner LEMBERG 2010-12-13 17:36:55 +0000
7129)     skip_line();
1cb8dd7bde src/roff/troff/input.cpp (Werner LEMBERG 2010-12-13 15:30:20 +0000
7130)     return;
1cb8dd7bde src/roff/troff/input.cpp (Werner LEMBERG 2010-12-13 15:30:20 +0000
7131)   }
1cb8dd7bde src/roff/troff/input.cpp (Werner LEMBERG 2010-12-13 15:30:20 +0000
7132)   (void)char_class_dictionary.lookup(nm, ci);
a1954c5a05 src/roff/troff/input.cpp (Werner LEMBERG 2010-12-13 17:36:55 +0000
7133)   skip_line();
1cb8dd7bde src/roff/troff/input.cpp (Werner LEMBERG 2010-12-13 15:30:20 +0000
7134) }


I expect that to resolve our disagreement over character flag and character
class interactions, we're going to both need to look carefully at the
foregoing.


    _______________________________________________________

Reply to this item at:

  <https://savannah.gnu.org/bugs/?67571>

_______________________________________________
Message sent via Savannah
https://savannah.gnu.org/

Attachment: signature.asc
Description: PGP signature

Reply via email to