From nobody Tue May 31 15:08:49 2022 X-Original-To: dev-commits-src-main@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id A5BBE1B5ED40; Tue, 31 May 2022 15:08:49 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4LCFzP4GBvz4Z4V; Tue, 31 May 2022 15:08:49 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1654009729; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=dojE+CmBlxQfo3Mk/HOAqn4E+5nKpdgfSg7lKR6HsY0=; b=Qo0QGsDmowO2eJwSZqYYk2fx2gq2BZJwB54Qi/8jRwhYuXiriBNTHdRZnhUuL/IzrdT5b6 Bcrf3T1KFpoDGbUy5YWV9n4+4V6fqQ56tkbXpOQ+9WGUrMXKiSJTvGiv01l1gLySNnT1Ne syUZIZyXhaqYkOyD4Ilqxaz2LORADSmt2I8A5wVbOckBX9L1wtTZnH0DGJLQZjHQz++k7X uSTefyasHAnfoTz/3bdAYEwh2GKORaYg5dQq4dYsow/NtpZRusGtFcrgrxi6odsR+0PTVl LyGPnL01iuNlUVYmpikZvlPIx1opv+6KIpT8yQix759B6ABlg9dV5YHY/JlBQg== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 7222F6091; Tue, 31 May 2022 15:08:49 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 24VF8nVv049057; Tue, 31 May 2022 15:08:49 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 24VF8nAE049056; Tue, 31 May 2022 15:08:49 GMT (envelope-from git) Date: Tue, 31 May 2022 15:08:49 GMT Message-Id: <202205311508.24VF8nAE049056@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Eric van Gyzen Subject: git: 9f6a619a7d7a - main - mandoc: workaround lack of macro parsing in list -width List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-dev-commits-src-main@freebsd.org X-BeenThere: dev-commits-src-main@freebsd.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: vangyzen X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 9f6a619a7d7ae0764374ff9949c8bfad36f4096b Auto-Submitted: auto-generated ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1654009729; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=dojE+CmBlxQfo3Mk/HOAqn4E+5nKpdgfSg7lKR6HsY0=; b=q8/iOaMbQK4KjZJR7pbaqkg5dkRtVLWeymmJLNmNi9rIrhD+v2lcdb4/71GcGfhOqQXKLo 8KRAkqRmbw/IP3BJmPGJXBSR/noipF61w5rOhW2C3TrGiWXP2Ys8ph6PeDhfd73gz1Mlii yPA1XBkn2sAbRfX6nQLYP0Wn9HN31wLDQ/m3CzDPN/+ZZkIfabpTU1SWcV3HkOD0HCy2DJ tSANj3ru8zbF0DQALUPmHYJiPGBuZXujbUhnFPUKODCI7Awpy9mDYuBK0Ty+5LKgf7kuh9 Gb4ManIhKs72vCCNk2Dlxr5YoA6UAjBgtJ9/GEYhlzdTfwiC5DR7TBF18aRVmg== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1654009729; a=rsa-sha256; cv=none; b=HxjTk3wWD+zt7xzX/Fq0yTm0Ruteh9Q3J/sGjXG/p9xguRtgbdj8nUQpdEkQ0Qwomf0U0a fw3cKrcYjjpWK30Q5F8kd06H8ZcecWCHL6QA0jVtfjsXWzpa3JEp0RCRXj/VHcRywIGrti 5m+UJ7pqTZ7Mtw8bNQE46EsXkTtcxpAsrhktIZY0cjUw4zoq1R09a42PN2nvZhQ2DTwxjD kyfPIrDOxA8CZpApLtxcfqZwWyW2hWwb7L8249YepaaqGa65O2zpM1bwau5LHR2nhOYAAG a1JOgPfxhWJnVmQwcjeCAaPbwQVDyQkWVdflrs8VTqFu+ULti6B9UkT7WAOygA== ARC-Authentication-Results: i=1; mx1.freebsd.org; none X-ThisMailContainsUnwantedMimeParts: N The branch main has been updated by vangyzen: URL: https://cgit.FreeBSD.org/src/commit/?id=9f6a619a7d7ae0764374ff9949c8bfad36f4096b commit 9f6a619a7d7ae0764374ff9949c8bfad36f4096b Author: Eric van Gyzen AuthorDate: 2022-05-17 17:46:59 +0000 Commit: Eric van Gyzen CommitDate: 2022-05-31 15:06:46 +0000 mandoc: workaround lack of macro parsing in list -width GNU tools parse macros in the -width argument of lists. mandoc does not, so it calculates an excessive width. This often squeezes the text into a very narrow column, especially in nested lists. Implement the easy workaround suggested in the TODO list. When there is only one macro, at the beginning of the -width argument, this fixes the formatting as well as a complete solution. Reviewed by: bapt Relnotes: yes MFC after: 1 week Sponsored by: Dell EMC Isilon Differential Revision: https://reviews.freebsd.org/D35245 --- contrib/mandoc/TODO | 4 +--- contrib/mandoc/mdoc_validate.c | 52 ++++++++++++++++++++++++++++++++++++++---- 2 files changed, 49 insertions(+), 7 deletions(-) diff --git a/contrib/mandoc/TODO b/contrib/mandoc/TODO index fe2059c9e5d5..4135a3eca6c8 100644 --- a/contrib/mandoc/TODO +++ b/contrib/mandoc/TODO @@ -563,9 +563,7 @@ are mere guesses, and some may be wrong. 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 index e1cd3ae1edcb..5c40842b1ae1 100644 --- a/contrib/mandoc/mdoc_validate.c +++ b/contrib/mandoc/mdoc_validate.c @@ -1818,6 +1818,45 @@ post_bl_block(POST_ARGS) } } +/* + * 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 @@ rewrite_macro2len(struct roff_man *mdoc, char **arg) { 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