summaryrefslogtreecommitdiff
path: root/input.c
diff options
context:
space:
mode:
authorSimon Tatham <anakin@pobox.com>2004-03-25 19:27:12 +0000
committerSimon Tatham <anakin@pobox.com>2004-03-25 19:27:12 +0000
commit6b06f96f6c5e70a952e923a3d154f82402ec5cce (patch)
treed95e5b6635b71b8523bb8961cd7f28e8abf9fb02 /input.c
parent10f4d6055c80f45b538cfc6657994b31e4abf525 (diff)
downloadhalibut-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.c9
1 files changed, 8 insertions, 1 deletions
diff --git a/input.c b/input.c
index 9d165fa..95a7709 100644
--- a/input.c
+++ b/input.c
@@ -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! */