]> git.cameronkatri.com Git - mandoc.git/commitdiff
Support groff's escape for Unicode input. See
authorKristaps Dzonsons <kristaps@bsd.lv>
Sun, 15 May 2011 15:30:33 +0000 (15:30 +0000)
committerKristaps Dzonsons <kristaps@bsd.lv>
Sun, 15 May 2011 15:30:33 +0000 (15:30 +0000)
  http://mdocml.bsd.lv/archives/tech/0368.html

For the time being, we just throw it away.

mandoc.c
mandoc.h
mandoc_char.7

index 671f059aa482971ae04b90e3a9cf148928908ee6..c9290214fa4508f36b2b3ea593b56d977625cc1e 100644 (file)
--- a/mandoc.c
+++ b/mandoc.c
@@ -1,4 +1,4 @@
-/*     $Id: mandoc.c,v 1.51 2011/05/14 17:54:42 kristaps Exp $ */
+/*     $Id: mandoc.c,v 1.52 2011/05/15 15:30:33 kristaps Exp $ */
 /*
  * Copyright (c) 2008, 2009, 2010 Kristaps Dzonsons <kristaps@bsd.lv>
  * Copyright (c) 2011 Ingo Schwarze <schwarze@openbsd.org>
@@ -125,6 +125,14 @@ mandoc_escape(const char **end, const char **start, int *sz)
                break;
        case ('['):
                gly = ESCAPE_SPECIAL;
+               /*
+                * Unicode escapes are defined in groff as \[uXXXX] to
+                * \[u10FFFF], where the contained value must be a valid
+                * Unicode codepoint.  Here, however, only check whether
+                * it's not a zero-width escape.
+                */
+               if ('u' == cp[i] && ']' != cp[i + 1])
+                       gly = ESCAPE_UNICODE;
                term = ']';
                break;
        case ('C'):
index 55878b62d3a11adecf95eb3f1766c88434095e10..db7b30bfb53449c3d953ab2376c23e02e8cd6d5d 100644 (file)
--- a/mandoc.h
+++ b/mandoc.h
@@ -1,4 +1,4 @@
-/*     $Id: mandoc.h,v 1.74 2011/04/30 22:24:31 kristaps Exp $ */
+/*     $Id: mandoc.h,v 1.75 2011/05/15 15:30:33 kristaps Exp $ */
 /*
  * Copyright (c) 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
  *
@@ -299,6 +299,7 @@ enum        mandoc_esc {
        ESCAPE_FONTROMAN, /* roman font mode */
        ESCAPE_FONTPREV, /* previous font mode */
        ESCAPE_NUMBERED, /* a numbered glyph */
+       ESCAPE_UNICODE, /* a unicode codepoint */
        ESCAPE_NOSPACE /* suppress space if the last on a line */
 };
 
index c52d1e782e21f94266606420898fe0ccd30b988c..d0c5dd7f801fd864bbb120580c6f8672b90bf87a 100644 (file)
@@ -1,4 +1,4 @@
-.\"    $Id: mandoc_char.7,v 1.44 2011/05/01 08:45:10 kristaps Exp $
+.\"    $Id: mandoc_char.7,v 1.45 2011/05/15 15:30:33 kristaps Exp $
 .\"
 .\" Copyright (c) 2009 Kristaps Dzonsons <kristaps@bsd.lv>
 .\"
@@ -14,7 +14,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: May 1 2011 $
+.Dd $Mdocdate: May 15 2011 $
 .Dt MANDOC_CHAR 7
 .Os
 .Sh NAME
@@ -520,6 +520,20 @@ portable.
 .It \e*(Px   Ta \*(Px       Ta POSIX standard name
 .It \e*(Ai   Ta \*(Ai       Ta ANSI standard name
 .El
+.Sh UNICODE CHARACTERS
+The escape sequence
+.Pp
+.Dl \e[uXXXX]
+.Pp
+is interpreted as a Unicode codepoint.
+The codepoint must be in the range above U+0080 and less than U+10FFFF.
+For compatibility, points must be zero-padded to four characters; if
+greater than four characters, no zero padding is allowed.
+Unicode surrogates are not allowed.
+.\" .Pp
+.\" Unicode glyphs attenuate to the
+.\" .Sq \&?
+.\" character if invalid or not rendered by current output media.
 .Sh NUMBERED CHARACTERS
 For backward compatibility with existing manuals,
 .Xr mandoc 1