summaryrefslogtreecommitdiffstatshomepage
path: root/strings.c
diff options
context:
space:
mode:
authorKristaps Dzonsons <kristaps@bsd.lv>2009-02-24 11:43:13 +0000
committerKristaps Dzonsons <kristaps@bsd.lv>2009-02-24 11:43:13 +0000
commitb3bbf7061a5906d3086a9fa08f36d77d77302e81 (patch)
tree4c61c7eb127831f667461ddffce6d9b0b1b81e98 /strings.c
parentd77fc82b5d003f81e34efe052e70d2a129e9f872 (diff)
downloadmandoc-b3bbf7061a5906d3086a9fa08f36d77d77302e81.tar.gz
mandoc-b3bbf7061a5906d3086a9fa08f36d77d77302e81.tar.zst
mandoc-b3bbf7061a5906d3086a9fa08f36d77d77302e81.zip
Escape-sequence validation in place (for nodes).
Diffstat (limited to 'strings.c')
-rw-r--r--strings.c50
1 files changed, 47 insertions, 3 deletions
diff --git a/strings.c b/strings.c
index e7538cf5..c3b0403d 100644
--- a/strings.c
+++ b/strings.c
@@ -1,4 +1,4 @@
-/* $Id: strings.c,v 1.15 2009/02/23 15:34:53 kristaps Exp $ */
+/* $Id: strings.c,v 1.16 2009/02/24 11:43:13 kristaps Exp $ */
/*
* Copyright (c) 2008 Kristaps Dzonsons <kristaps@kth.se>
*
@@ -35,6 +35,50 @@
extern char *strptime(const char *, const char *, struct tm *);
#endif
+
+size_t
+mdoc_isescape(const char *p)
+{
+ size_t c;
+
+ if ('\\' != *p++)
+ return(0);
+
+ switch (*p) {
+ case ('\\'):
+ /* FALLTHROUGH */
+ case ('\''):
+ /* FALLTHROUGH */
+ case ('`'):
+ /* FALLTHROUGH */
+ case ('-'):
+ /* FALLTHROUGH */
+ case (' '):
+ /* FALLTHROUGH */
+ case ('.'):
+ /* FALLTHROUGH */
+ case ('e'):
+ return(2);
+ case ('('):
+ if (0 == *++p)
+ return(0);
+ if (0 == *++p)
+ return(0);
+ return(4);
+ case ('['):
+ break;
+ default:
+ return(0);
+ }
+
+ for (c = 3, p++; *p && ']' != *p; p++, c++)
+ if (isspace(*p))
+ break;
+
+ return(*p == ']' ? c : 0);
+}
+
+
int
mdoc_iscdelim(char p)
{
@@ -132,9 +176,9 @@ mdoc_atotime(const char *p)
(void)memset(&tm, 0, sizeof(struct tm));
- if (xstrcmp(p, "$Mdocdate: February 23 2009 $"))
+ if (xstrcmp(p, "$Mdocdate: February 24 2009 $"))
return(time(NULL));
- if ((pp = strptime(p, "$Mdocdate: February 23 2009 $", &tm)) && 0 == *pp)
+ if ((pp = strptime(p, "$Mdocdate: February 24 2009 $", &tm)) && 0 == *pp)
return(mktime(&tm));
/* XXX - this matches "June 1999", which is wrong. */
if ((pp = strptime(p, "%b %d %Y", &tm)) && 0 == *pp)