-/* $Id: mandoc.c,v 1.68 2013/08/08 20:07:47 schwarze Exp $ */
+/* $Id: mandoc.c,v 1.75 2013/12/31 23:23:10 schwarze Exp $ */
/*
* Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
* Copyright (c) 2011, 2012, 2013 Ingo Schwarze <schwarze@openbsd.org>
case ('C'):
if ('\'' != **start)
return(ESCAPE_ERROR);
- gly = ESCAPE_SPECIAL;
*start = ++*end;
+ if ('u' == (*start)[0] && '\'' != (*start)[1])
+ gly = ESCAPE_UNICODE;
+ else
+ gly = ESCAPE_SPECIAL;
term = '\'';
break;
+ /*
+ * Escapes taking no arguments at all.
+ */
+ case ('d'):
+ /* FALLTHROUGH */
+ case ('u'):
+ return(ESCAPE_IGNORE);
+
/*
* The \z escape is supposed to output the following
* character without advancing the cursor position.
/* FALLTHROUGH */
case ('b'):
/* FALLTHROUGH */
+ case ('B'):
+ /* FALLTHROUGH */
case ('D'):
/* FALLTHROUGH */
case ('o'):
/* FALLTHROUGH */
case ('R'):
/* FALLTHROUGH */
+ case ('w'):
+ /* FALLTHROUGH */
case ('X'):
/* FALLTHROUGH */
case ('Z'):
* These escapes are of the form \X'N', where 'X' is the trigger
* and 'N' resolves to a numerical expression.
*/
- case ('B'):
- /* FALLTHROUGH */
case ('h'):
/* FALLTHROUGH */
case ('H'):
case ('L'):
/* FALLTHROUGH */
case ('l'):
- gly = ESCAPE_NUMBERED;
/* FALLTHROUGH */
case ('S'):
/* FALLTHROUGH */
case ('v'):
/* FALLTHROUGH */
- case ('w'):
- /* FALLTHROUGH */
case ('x'):
if ('\'' != **start)
return(ESCAPE_ERROR);
- if (ESCAPE_ERROR == gly)
- gly = ESCAPE_IGNORE;
+ gly = ESCAPE_IGNORE;
*start = ++*end;
term = '\'';
break;
* Parse a quoted or unquoted roff-style request or macro argument.
* Return a pointer to the parsed argument, which is either the original
* pointer or advanced by one byte in case the argument is quoted.
- * Null-terminate the argument in place.
+ * NUL-terminate the argument in place.
* Collapse pairs of quotes inside quoted arguments.
* Advance the argument pointer to the next argument,
- * or to the null byte terminating the argument line.
+ * or to the NUL byte terminating the argument line.
*/
char *
mandoc_getarg(struct mparse *parse, char **cpp, int ln, int *pos)
if (1 == quoted)
mandoc_msg(MANDOCERR_BADQUOTE, parse, ln, *pos, NULL);
- /* Null-terminate this argument and move to the next one. */
+ /* NUL-terminate this argument and move to the next one. */
if (pairs)
cp[-pairs] = '\0';
if ('\0' != *cp) {
}
int
-mandoc_eos(const char *p, size_t sz, int enclosed)
+mandoc_eos(const char *p, size_t sz)
{
- const char *q;
- int found;
+ const char *q;
+ int enclosed, found;
if (0 == sz)
return(0);
* propagate outward.
*/
- found = 0;
+ enclosed = found = 0;
for (q = p + (int)sz - 1; q >= p; q--) {
switch (*q) {
case ('\"'):