-- \\ in high-level macro arguments
- Currently, \\ is expanded in two situations:
- 1) macro and string definition (roff.c setstrn())
- 2) macro argument parsing (mandoc.c mandoc_getarg())
- For user defined macros, the second happens in time because of ROFF_REPARSE.
- But for standard high-level macros, it only happens after entering the
- high level parsers, which is too late because the code doesn't get
- back to roff.c roff_res() from that point. Because this requires
- distinguishing requests, user-defined macros and standard macros
- on the roff_res() level, it is hard to solve without the parser reorg.
- Found by naddy@ in devel/cutils cobfusc(1) Mon, 16 Feb 2015 19:10:52 +0100
- loc *** exist *** algo *** size ** imp *
-
-- using undefined strings or macros defines them to be empty
- wl@ Mon, 14 Nov 2011 14:37:01 +0000
+- .als only works for macros in mandoc, not for user-defined strings.
+ Also, the "val" field in struct roffkv would have to be replaced
+ with a pointer to a reference-counted wrapper, and an alias
+ would have to point to the same wrapper as the original.
+ .als to undefined does nothing; the alias is not created.
+ .rm'ing the original leaves the alias to point to the old value.
+ .de .als .de changes both, but
+ .de .als .rm .de only changes the new value, not the alias.
+ Found in groffer(1) version 1.19
+ Jan Stary 20 Apr 2019 20:16:54 +0200
+ loc * exist ** algo ** size ** imp *
+
+- roff string condition comparisons fail when vars contain quotes:
+ .ds s '
+ .if '\*s'' \&...
+ hard to fix because of the basic architecture (string replacement
+ happens before roff(7) syntax parsing)
+ Found in groffer(1) version 1.19
+ Jan Stary 20 Apr 2019 20:16:54 +0200
+ loc * exist *** algo *** size ** imp *
+
+- mandoc replaces all ASCII control characters except tab and line feed
+ with '?' during input. It would be better to replace them with
+ Unicode escapes in preconv_encode() or somewhere in the vicinity,
+ such that the already existing better replacement strings show
+ up in the output. Emulating groff is not desirable: groff replaces
+ 0x00, 0x0b, and 0x0d to 0x1f with the empty string (bad because
+ that's easy to overlook for the document author), 0x01 with '.'
+ (very confusing), and passes through 0x02 to 0x08, 0x0c, and 0x7f
+ raw (bad because that is insecure output). Remember that 0x07 may
+ need special handling because it is sometimes used for certain
+ delimiters, so it may need handling *after* roff.c rather than before.
+ reminded by John Gardner 16 Jun 2020 14:26:28 +1000
+ Actually, more ASCII control characters than just 0x07 may need
+ later handling because they can for example be used in macro names.
+ So they may need handling after roff(7) processing.
+ pointed out by John Gardner 23 Jun 2020 18:28:08 +1000
+ more info from John Gardner 29 Jun 2020 19:54:04 +1000
+ loc ** exist ** algo ** size ** imp *
+
+- many missing features used in old groff_char(7),
+ some can possibly be supported
+ kamil at netbsd 12 Nov 2020 17:27:09 +0100 + reply
+
+- \s with arbitrary arg delimiters as already supported for other escapes
+ found following jmc@'s mail 28 Apr 2021 18:31:41 +0100