Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F157748494
D35245.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
2 KB
Referenced Files
None
Subscribers
None
D35245.diff
View Options
diff --git a/contrib/mandoc/TODO b/contrib/mandoc/TODO
--- a/contrib/mandoc/TODO
+++ b/contrib/mandoc/TODO
@@ -563,9 +563,7 @@
reported again by Franco Fichtner Fri, 27 Sep 2013 21:02:28 +0200
reported again by Bruce Evans Fri, 17 Feb 2017 21:22:44 +0100 via bapt@
loc *** exist *** algo *** size ** imp ***
- An easy partial fix would be to just skip the first word if it starts
- with a dot, including any following white space, when measuring.
- loc * exist * algo * size * imp ***
+ An easy partial fix has been implemented as skip_leading_dot_word().
- The \& zero-width character counts as output.
That is, when it is alone on a line between two .Pp,
diff --git a/contrib/mandoc/mdoc_validate.c b/contrib/mandoc/mdoc_validate.c
--- a/contrib/mandoc/mdoc_validate.c
+++ b/contrib/mandoc/mdoc_validate.c
@@ -1818,6 +1818,45 @@
}
}
+/*
+ * If "in" begins with a dot, a word, and whitespace, return a dynamically
+ * allocated copy of "in" that skips all of those. Otherwise, return NULL.
+ *
+ * This is a partial workaround for the TODO list item beginning with:
+ * - When the -width string contains macros, the macros must be rendered
+ */
+static char *
+skip_leading_dot_word(const char *in)
+{
+ const char *iter = in;
+ const char *space;
+
+ if (*iter != '.')
+ return NULL;
+ iter++;
+
+ while (*iter != '\0' && !isspace(*iter))
+ iter++;
+ /*
+ * If the dot was followed by space or NUL,
+ * do not skip anything.
+ */
+ if (iter == in + 1)
+ return NULL;
+
+ space = iter;
+ while (isspace(*iter))
+ iter++;
+ /*
+ * If the word was not followed by space,
+ * do not skip anything.
+ */
+ if (iter == space)
+ return NULL;
+
+ return strdup(iter);
+}
+
/*
* If the argument of -offset or -width is a macro,
* replace it with the associated default width.
@@ -1827,18 +1866,23 @@
{
size_t width;
enum roff_tok tok;
+ char *newarg;
+ newarg = NULL;
if (*arg == NULL)
return;
else if ( ! strcmp(*arg, "Ds"))
width = 6;
- else if ((tok = roffhash_find(mdoc->mdocmac, *arg, 0)) == TOKEN_NONE)
- return;
- else
+ else if ((tok = roffhash_find(mdoc->mdocmac, *arg, 0)) != TOKEN_NONE)
width = macro2len(tok);
+ else if ((newarg = skip_leading_dot_word(*arg)) == NULL)
+ return;
free(*arg);
- mandoc_asprintf(arg, "%zun", width);
+ if (newarg != NULL)
+ *arg = newarg;
+ else
+ mandoc_asprintf(arg, "%zun", width);
}
static void
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Mon, May 25, 7:42 PM (9 h, 40 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
33514700
Default Alt Text
D35245.diff (2 KB)
Attached To
Mode
D35245: mandoc: workaround lack of macro parsing in list -width
Attached
Detach File
Event Timeline
Log In to Comment