diff options
author | Kristaps Dzonsons <kristaps@bsd.lv> | 2011-03-28 23:52:13 +0000 |
---|---|---|
committer | Kristaps Dzonsons <kristaps@bsd.lv> | 2011-03-28 23:52:13 +0000 |
commit | 916061ed728b162eb71037e2bfb56d6497d21361 (patch) | |
tree | bcacd728a2ca2b4b8c76c42c4b516e0052933c27 /mandoc.c | |
parent | 38f00ffdcbcf2be5ad01776afecc32d1c141f46c (diff) | |
download | mandoc-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.c | 27 |
1 files changed, 26 insertions, 1 deletions
@@ -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); +} |