]> git.cameronkatri.com Git - mandoc.git/commitdiff
Since \. is not a character escape sequence, re-classify it from the
authorIngo Schwarze <schwarze@openbsd.org>
Thu, 2 Jun 2022 14:51:41 +0000 (14:51 +0000)
committerIngo Schwarze <schwarze@openbsd.org>
Thu, 2 Jun 2022 14:51:41 +0000 (14:51 +0000)
wrong parsing class ESCAPE_SPECIAL to the better-suited parsing class
ESCAPE_UNDEF, exactly like it is already done for the similar \\,
which isn't a character escape sequence either.

No formatting change is intended just yet, but this will matter for
upcoming improvements in the parser for roff(7) macro, string, and
register names.

See the node "5.23.2 Copy Mode" in "info groff" regarding
what \\ and \. really mean.

chars.c
mandoc_char.7
roff_escape.c

diff --git a/chars.c b/chars.c
index d54fc458aea2c05aab00491b805de18394c81dea..ea84c0c5eed47d08db189cccbb5526b856302ccd 100644 (file)
--- a/chars.c
+++ b/chars.c
@@ -1,4 +1,4 @@
-/*     $Id: chars.c,v 1.79 2020/02/13 16:18:29 schwarze Exp $ */
+/* $Id: chars.c,v 1.80 2022/06/02 14:51:41 schwarze Exp $ */
 /*
  * Copyright (c) 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
  * Copyright (c) 2011, 2014, 2015, 2017, 2018, 2020
@@ -92,7 +92,6 @@ static struct ln lines[] = {
        { "en",                 "-",            0x2013  },
        { "hy",                 "-",            0x2010  },
        { "e",                  "\\",           0x005c  },
-       { ".",                  ".",            0x002e  },
        { "r!",                 "!",            0x00a1  },
        { "r?",                 "?",            0x00bf  },
 
index eb9e65acfc860982c45c8f7f05abfe130aee2182..de546496e84bd4fac1d9bceb2e9eb4244d9cbb3a 100644 (file)
@@ -1,8 +1,9 @@
-.\"    $Id: mandoc_char.7,v 1.78 2020/10/31 11:45:16 schwarze Exp $
+.\" $Id: mandoc_char.7,v 1.79 2022/06/02 14:51:41 schwarze Exp $
 .\"
 .\" Copyright (c) 2003 Jason McIntyre <jmc@openbsd.org>
 .\" Copyright (c) 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
-.\" Copyright (c) 2011,2013,2015,2017-2020 Ingo Schwarze <schwarze@openbsd.org>
+.\" Copyright (c) 2011, 2013, 2015, 2017-2020, 2022
+.\"               Ingo Schwarze <schwarze@openbsd.org>
 .\"
 .\" Permission to use, copy, modify, and distribute this software for any
 .\" purpose with or without fee is hereby granted, provided that the above
@@ -16,7 +17,7 @@
 .\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
 .\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
 .\"
-.Dd $Mdocdate: October 31 2020 $
+.Dd $Mdocdate: June 2 2022 $
 .Dt MANDOC_CHAR 7
 .Os
 .Sh NAME
@@ -220,13 +221,18 @@ where it introduces a
 request or a macro, and when appearing alone as a macro argument in
 .Xr mdoc 7 .
 In such situations, prepend a zero-width space
-.Pq Sq \e&.
+.Pq Sq \e&.\&
 to make it behave like normal text.
 .Pp
-Do not use the
+Do not use the character pair
 .Sq \e.
-escape sequence.
-It does not prevent special handling of the period.
+to escape a period because
+.Sq \e.
+is not a character escape sequence, does not prevent special handling
+of the period under normal circumstances, and is only intended to
+be used in the very special situation of defining a user-defined
+macro that, when called, defines another user-defined macro, which
+no manual page is ever supposed to do.
 .Ss Backslashes
 To include a literal backslash
 .Pq Sq \e
@@ -326,7 +332,6 @@ Punctuation:
 .It \e(en    Ta \(en        Ta en-dash
 .It \e(hy    Ta \(hy        Ta hyphen
 .It \ee      Ta \e          Ta back-slash
-.It \e.      Ta \.          Ta period
 .It \e(r!    Ta \(r!        Ta upside-down exclamation
 .It \e(r?    Ta \(r?        Ta upside-down question
 .El
index 39011cdec87d878ff70e736a3967d749d9d3766a..9d02054da5dbc42b5d08652d62f5317d822b5c4b 100644 (file)
@@ -127,6 +127,7 @@ roff_escape(const char *buf, const int ln, const int aesc,
        case '\0':
                iendarg = --iend;
                /* FALLTHROUGH */
+       case '.':
        case '\\':
        default:
                iarg--;
@@ -136,7 +137,6 @@ roff_escape(const char *buf, const int ln, const int aesc,
        case ' ':
        case '\'':
        case '-':
-       case '.':
        case '0':
        case ':':
        case '_':
@@ -481,7 +481,7 @@ out:
                err = MANDOCERR_ESC_UNSUPP;
                break;
        case ESCAPE_UNDEF:
-               if (buf[inam] == '\\')
+               if (buf[inam] == '\\' || buf[inam] == '.')
                        return rval;
                err = MANDOCERR_ESC_UNDEF;
                break;