]> git.cameronkatri.com Git - mandoc.git/blobdiff - mandoc.c
Keep words after .Ic together in a single argument.
[mandoc.git] / mandoc.c
index df510226c42d32dd6c16377727e45956eb82f26c..b3928ae46c46a555995b4fd4d60ae54046753a66 100644 (file)
--- a/mandoc.c
+++ b/mandoc.c
@@ -1,4 +1,4 @@
-/*     $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>
@@ -93,11 +93,22 @@ mandoc_escape(const char **end, const char **start, int *sz)
        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.  
@@ -154,12 +165,16 @@ mandoc_escape(const char **end, const char **start, int *sz)
                /* FALLTHROUGH */
        case ('b'):
                /* FALLTHROUGH */
+       case ('B'):
+               /* FALLTHROUGH */
        case ('D'):
                /* FALLTHROUGH */
        case ('o'):
                /* FALLTHROUGH */
        case ('R'):
                /* FALLTHROUGH */
+       case ('w'):
+               /* FALLTHROUGH */
        case ('X'):
                /* FALLTHROUGH */
        case ('Z'):
@@ -174,8 +189,6 @@ mandoc_escape(const char **end, const char **start, int *sz)
         * 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'):
@@ -183,19 +196,15 @@ mandoc_escape(const char **end, const char **start, int *sz)
        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;
@@ -416,10 +425,10 @@ mandoc_strdup(const char *ptr)
  * 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)
@@ -490,7 +499,7 @@ 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) {
@@ -585,10 +594,10 @@ mandoc_normdate(struct mparse *parse, char *in, int ln, int pos)
 }
 
 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);
@@ -599,7 +608,7 @@ mandoc_eos(const char *p, size_t sz, int enclosed)
         * propagate outward.
         */
 
-       found = 0;
+       enclosed = found = 0;
        for (q = p + (int)sz - 1; q >= p; q--) {
                switch (*q) {
                case ('\"'):