[tex-k] bug in METAFONT syntax

胡亚捷 (Hu Yajie) 2500418497 at qq.com
Tue Jun 30 17:51:25 CEST 2020


The METAFONTbook gives the syntax for charlist and extensible commands as:

    <charlist command> ::= charlist <labeled code>
    <labeled code> ::= <code>
        | <label> <labeled code>
    <extensible command> ::= extensible <label> <four codes>
    <four codes> ::= <code> , <code> , <code> , <code>

And labels are defined as:

    <label> ::= <code> : | <code> :: | ||:

But mf.web only implements the first alternative of <label>:

    char_list_code: begin c:=get_code;
         {we will store a list of character successors}
      while cur_cmd=colon do
        begin cc:=get_code; set_tag(c,list_tag,cc); c:=cc;
        end;
      end;
    
    @<Define an extensible recipe@>=
    begin if ne=256 then overflow("extensible",256);
    @:METAFONT capacity exceeded extensible}{\quad extensible@>
    c:=get_code; set_tag(c,ext_tag,ne);
    if cur_cmd<>colon then missing_extensible_punctuation(":");
    ext_top(ne):=qi(get_code);
    if cur_cmd<>comma then missing_extensible_punctuation(",");
    ext_mid(ne):=qi(get_code);
    if cur_cmd<>comma then missing_extensible_punctuation(",");
    ext_bot(ne):=qi(get_code);
    if cur_cmd<>comma then missing_extensible_punctuation(",");
    ext_rep(ne):=qi(get_code);
    incr(ne);
    end

And the other two alternatives don't seem to make any sense...

----

Previous reports:
https://github.com/dine2014/texbook-mfbook-bugs/blob/master/bugs.md



More information about the tex-k mailing list.