summaryrefslogtreecommitdiffstats
path: root/mdoc.c
diff options
context:
space:
mode:
authorKristaps Dzonsons <kristaps@bsd.lv>2009-03-02 17:14:46 +0000
committerKristaps Dzonsons <kristaps@bsd.lv>2009-03-02 17:14:46 +0000
commitf57412d689f445d6786167aac98dfde81c90ea12 (patch)
tree412635fca540b14d5139e91a039f78f70a7cf3d8 /mdoc.c
parentaaee43f80d524f98453fc13d60a657085867666f (diff)
downloadmandoc-f57412d689f445d6786167aac98dfde81c90ea12.tar.gz
Added new old escape sequence \*[nn].
Initial correct .Bd support (still only text in literal displays). Symbols put into tables (character-encoding).
Diffstat (limited to 'mdoc.c')
-rw-r--r--mdoc.c21
1 files changed, 16 insertions, 5 deletions
diff --git a/mdoc.c b/mdoc.c
index dc89df7c..7110cdee 100644
--- a/mdoc.c
+++ b/mdoc.c
@@ -180,6 +180,12 @@ mdoc_endparse(struct mdoc *mdoc)
}
+/*
+ * Main line-parsing routine. If the line is a macro-line (started with
+ * a '.' control character), then pass along to the parser, which parses
+ * subsequent macros until the end of line. If normal text, simply
+ * append the entire line to the chain.
+ */
int
mdoc_parseln(struct mdoc *mdoc, int line, char *buf)
{
@@ -191,20 +197,24 @@ mdoc_parseln(struct mdoc *mdoc, int line, char *buf)
mdoc->linetok = 0;
- /*
- * FIXME: should puke on whitespace in non-literal displays.
- */
-
if ('.' != *buf) {
+ /*
+ * Free-form text. Not allowed in the prologue.
+ */
if (SEC_PROLOGUE == mdoc->lastnamed)
return(mdoc_perr(mdoc, line, 0,
- "no text in document prologue"));
+ "no text in prologue"));
+
if ( ! mdoc_word_alloc(mdoc, line, 0, buf))
return(0);
mdoc->next = MDOC_NEXT_SIBLING;
return(1);
}
+ /*
+ * Control-character detected. Begin the parsing sequence.
+ */
+
if (buf[1] && '\\' == buf[1])
if (buf[2] && '\"' == buf[2])
return(1);
@@ -238,6 +248,7 @@ mdoc_parseln(struct mdoc *mdoc, int line, char *buf)
mdoc->flags |= MDOC_HALT;
return(0);
}
+
return(1);
}