aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/mandoc.c
diff options
context:
space:
mode:
authorKristaps Dzonsons <kristaps@bsd.lv>2011-03-17 09:16:38 +0000
committerKristaps Dzonsons <kristaps@bsd.lv>2011-03-17 09:16:38 +0000
commit154c74a463b9f4d0c87a3161a60df5ce17c366c9 (patch)
tree71d24bb33de21624f0ddc202816da1a8e7025f9b /mandoc.c
parent92c367a844f2f26d325d4ee6ca032894e94f7a06 (diff)
downloadmandoc-154c74a463b9f4d0c87a3161a60df5ce17c366c9.tar.gz
mandoc-154c74a463b9f4d0c87a3161a60df5ce17c366c9.tar.zst
mandoc-154c74a463b9f4d0c87a3161a60df5ce17c366c9.zip
Move mdoc_isdelim() into mandoc.h as mandoc_isdelim(). This allows the
removal of manual delimiter checks in html.c and term.c. Finally, add the escaped period as a closing delimiter, removing a TODO to this effect.
Diffstat (limited to 'mandoc.c')
-rw-r--r--mandoc.c58
1 files changed, 52 insertions, 6 deletions
diff --git a/mandoc.c b/mandoc.c
index 6f4f656e..67dc1da8 100644
--- a/mandoc.c
+++ b/mandoc.c
@@ -1,4 +1,4 @@
-/* $Id: mandoc.c,v 1.39 2011/03/15 16:23:51 kristaps Exp $ */
+/* $Id: mandoc.c,v 1.40 2011/03/17 09:16:38 kristaps Exp $ */
/*
* Copyright (c) 2008, 2009, 2010 Kristaps Dzonsons <kristaps@bsd.lv>
* Copyright (c) 2011 Ingo Schwarze <schwarze@openbsd.org>
@@ -363,7 +363,6 @@ mandoc_getarg(char **cpp, mandocmsg msg, void *data, int ln, int *pos)
return(start);
}
-
static int
a2time(time_t *t, const char *fmt, const char *p)
{
@@ -381,7 +380,6 @@ a2time(time_t *t, const char *fmt, const char *p)
return(0);
}
-
static char *
time2a(time_t t)
{
@@ -417,7 +415,6 @@ fail:
return(NULL);
}
-
char *
mandoc_normdate(char *in, mandocmsg msg, void *data, int ln, int pos)
{
@@ -439,7 +436,6 @@ mandoc_normdate(char *in, mandocmsg msg, void *data, int ln, int pos)
return(out ? out : mandoc_strdup(in));
}
-
int
mandoc_eos(const char *p, size_t sz, int enclosed)
{
@@ -483,7 +479,6 @@ mandoc_eos(const char *p, size_t sz, int enclosed)
return(found && !enclosed);
}
-
int
mandoc_hyph(const char *start, const char *c)
{
@@ -510,3 +505,54 @@ mandoc_hyph(const char *start, const char *c)
return(1);
}
+
+/*
+ * Check if a string is a punctuation delimiter. This only applies to
+ * mdoc(7) documents, but as it's used in both front-ends and back-ends,
+ * it needs to go here (instead of, say, in libmdoc.h).
+ */
+enum mdelim
+mandoc_isdelim(const char *p)
+{
+
+ if ('\0' == p[0])
+ return(DELIM_NONE);
+
+ if ('\0' == p[1])
+ switch (p[0]) {
+ case('('):
+ /* FALLTHROUGH */
+ case('['):
+ return(DELIM_OPEN);
+ case('|'):
+ return(DELIM_MIDDLE);
+ case('.'):
+ /* FALLTHROUGH */
+ case(','):
+ /* FALLTHROUGH */
+ case(';'):
+ /* FALLTHROUGH */
+ case(':'):
+ /* FALLTHROUGH */
+ case('?'):
+ /* FALLTHROUGH */
+ case('!'):
+ /* FALLTHROUGH */
+ case(')'):
+ /* FALLTHROUGH */
+ case(']'):
+ return(DELIM_CLOSE);
+ default:
+ return(DELIM_NONE);
+ }
+
+ if ('\\' != p[0])
+ return(DELIM_NONE);
+
+ if (0 == strcmp(p, "\\."))
+ return(DELIM_CLOSE);
+ if (0 == strcmp(p, "\\*(Ba"))
+ return(DELIM_MIDDLE);
+
+ return(DELIM_NONE);
+}