diff options
author | Kristaps Dzonsons <kristaps@bsd.lv> | 2009-02-24 11:43:13 +0000 |
---|---|---|
committer | Kristaps Dzonsons <kristaps@bsd.lv> | 2009-02-24 11:43:13 +0000 |
commit | b3bbf7061a5906d3086a9fa08f36d77d77302e81 (patch) | |
tree | 4c61c7eb127831f667461ddffce6d9b0b1b81e98 /strings.c | |
parent | d77fc82b5d003f81e34efe052e70d2a129e9f872 (diff) | |
download | mandoc-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.c | 50 |
1 files changed, 47 insertions, 3 deletions
@@ -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) |