aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/mandoc.c
diff options
context:
space:
mode:
authorKristaps Dzonsons <kristaps@bsd.lv>2011-03-28 23:52:13 +0000
committerKristaps Dzonsons <kristaps@bsd.lv>2011-03-28 23:52:13 +0000
commit916061ed728b162eb71037e2bfb56d6497d21361 (patch)
treebcacd728a2ca2b4b8c76c42c4b516e0052933c27 /mandoc.c
parent38f00ffdcbcf2be5ad01776afecc32d1c141f46c (diff)
downloadmandoc-916061ed728b162eb71037e2bfb56d6497d21361.tar.gz
mandoc-916061ed728b162eb71037e2bfb56d6497d21361.tar.zst
mandoc-916061ed728b162eb71037e2bfb56d6497d21361.zip
Have libman and libmdoc use mandoc_getcontrol() to determine whether a
macro has been invoked. libroff is next.
Diffstat (limited to 'mandoc.c')
-rw-r--r--mandoc.c27
1 files changed, 26 insertions, 1 deletions
diff --git a/mandoc.c b/mandoc.c
index 17e94d37..da4a1606 100644
--- a/mandoc.c
+++ b/mandoc.c
@@ -1,4 +1,4 @@
-/* $Id: mandoc.c,v 1.43 2011/03/22 14:05:45 kristaps Exp $ */
+/* $Id: mandoc.c,v 1.44 2011/03/28 23:52:13 kristaps Exp $ */
/*
* Copyright (c) 2008, 2009, 2010 Kristaps Dzonsons <kristaps@bsd.lv>
* Copyright (c) 2011 Ingo Schwarze <schwarze@openbsd.org>
@@ -506,3 +506,28 @@ mandoc_hyph(const char *start, const char *c)
return(1);
}
+/*
+ * Find out whether a line is a macro line or not. If it is, adjust the
+ * current position and return one; if it isn't, return zero and don't
+ * change the current position.
+ */
+int
+mandoc_getcontrol(const char *cp, int *ppos)
+{
+ int pos;
+
+ pos = *ppos;
+
+ if ('\\' == cp[pos] && '.' == cp[pos + 1])
+ pos += 2;
+ else if ('.' == cp[pos] || '\'' == cp[pos])
+ pos++;
+ else
+ return(0);
+
+ while (' ' == cp[pos] || '\t' == cp[pos])
+ pos++;
+
+ *ppos = pos;
+ return(1);
+}