diff options
| author | Simon Tatham <anakin@pobox.com> | 2004-03-25 19:27:12 +0000 |
|---|---|---|
| committer | Simon Tatham <anakin@pobox.com> | 2004-03-25 19:27:12 +0000 |
| commit | 6b06f96f6c5e70a952e923a3d154f82402ec5cce (patch) | |
| tree | d95e5b6635b71b8523bb8961cd7f28e8abf9fb02 /input.c | |
| parent | 10f4d6055c80f45b538cfc6657994b31e4abf525 (diff) | |
| download | halibut-6b06f96f6c5e70a952e923a3d154f82402ec5cce.zip halibut-6b06f96f6c5e70a952e923a3d154f82402ec5cce.tar.gz halibut-6b06f96f6c5e70a952e923a3d154f82402ec5cce.tar.bz2 halibut-6b06f96f6c5e70a952e923a3d154f82402ec5cce.tar.xz | |
Introduce \. as a NOP command. The purpose of this is to act as a
zero-width delimiter between a macro invocation and text beyond it,
so that you can define (say) a macro which expands to a Euro sign
and then write `\eur\.2500' to avoid having space between the Euro
sign and the number.
[originally from svn r3982]
Diffstat (limited to 'input.c')
| -rw-r--r-- | input.c | 9 |
1 files changed, 8 insertions, 1 deletions
@@ -162,6 +162,7 @@ enum { c__invalid, /* invalid command */ c__comment, /* comment command (\#) */ c__escaped, /* escaped character */ + c__nop, /* no-op */ c__nbsp, /* nonbreaking space */ c_A, /* appendix heading */ c_B, /* bibliography entry */ @@ -231,6 +232,7 @@ static void match_kw(token *tok) { static const struct { char const *name; int id; } keywords[] = { {"#", c__comment}, /* comment command (\#) */ {"-", c__escaped}, /* nonbreaking hyphen */ + {".", c__nop}, /* no-op */ {"A", c_A}, /* appendix heading */ {"B", c_B}, /* bibliography entry */ {"BR", c_BR}, /* bibliography rewrite */ @@ -360,7 +362,7 @@ token get_token(input *in) { } else if (c == '\\') { /* tok_cmd */ c = get(in, &cpos); if (c == '-' || c == '\\' || c == '_' || - c == '#' || c == '{' || c == '}') { + c == '#' || c == '{' || c == '}' || c == '.') { /* single-char command */ rdadd(&rs, c); } else if (c == 'u') { @@ -905,6 +907,11 @@ static void read_file(paragraph ***ret, input *in, indexdata *idx) { break; } + if (t.type == tok_cmd && t.cmd == c__nop) { + dtor(t), t = get_token(in); + continue; /* do nothing! */ + } + if (t.type == tok_cmd && t.cmd == c__escaped) { t.type = tok_word; /* nice and simple */ t.aux = 0; /* even if `\-' - nonbreaking! */ |