summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--html.c30
-rw-r--r--mandoc.115
-rw-r--r--mandoc.c83
3 files changed, 107 insertions, 21 deletions
diff --git a/html.c b/html.c
index 5f921ad7..ee90cda1 100644
--- a/html.c
+++ b/html.c
@@ -1,4 +1,4 @@
-/* $Id: html.c,v 1.80 2009/11/02 06:22:44 kristaps Exp $ */
+/* $Id: html.c,v 1.81 2009/11/05 10:16:01 kristaps Exp $ */
/*
* Copyright (c) 2008, 2009 Kristaps Dzonsons <kristaps@kth.se>
*
@@ -270,21 +270,19 @@ print_escape(struct html *h, const char **p)
return;
}
- switch (*wp) {
- case ('B'):
- /* TODO */
- break;
- case ('I'):
- /* TODO */
- break;
- case ('P'):
- /* FALLTHROUGH */
- case ('R'):
- /* TODO */
- break;
- default:
- break;
- }
+ /*
+ * These aren't supported, as they're symmetry-breaking
+ * constructs that don't play well with hierarchical
+ * mark-up. Consider:
+ *
+ * \fBHello.
+ * .PP
+ * World.
+ *
+ * The style started before "Hello" wouldn't be able to
+ * propogate into the next `PP' because we'd exit the
+ * current paragraph's scope.
+ */
*p = wp;
return;
diff --git a/mandoc.1 b/mandoc.1
index f02219b3..df935e35 100644
--- a/mandoc.1
+++ b/mandoc.1
@@ -1,4 +1,4 @@
-.\" $Id: mandoc.1,v 1.45 2009/10/26 15:44:51 kristaps Exp $
+.\" $Id: mandoc.1,v 1.46 2009/11/05 10:16:01 kristaps Exp $
.\"
.\" Copyright (c) 2009 Kristaps Dzonsons <kristaps@kth.se>
.\"
@@ -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: October 26 2009 $
+.Dd $Mdocdate: November 5 2009 $
.Dt MANDOC 1
.Os
.
@@ -419,3 +419,14 @@ the maximum size of an element attribute is determined by
which is usually 1024 bytes. Be aware of this when setting long link
formats with
.Fl O Ns Ar man=fmt .
+.Pp
+The
+.Fl T Ns Ar html
+utility doesn't support the
+.Sq \ef
+and
+.Sq \es
+text decorations documented in
+.Xr mdoc 7
+and
+.Xr man 7 .
diff --git a/mandoc.c b/mandoc.c
index 8260a69c..5eefbbf4 100644
--- a/mandoc.c
+++ b/mandoc.c
@@ -1,4 +1,4 @@
-/* $Id: mandoc.c,v 1.7 2009/11/02 06:22:45 kristaps Exp $ */
+/* $Id: mandoc.c,v 1.8 2009/11/05 10:16:01 kristaps Exp $ */
/*
* Copyright (c) 2008, 2009 Kristaps Dzonsons <kristaps@kth.se>
*
@@ -35,7 +35,9 @@ static int a2time(time_t *, const char *, const char *);
int
mandoc_special(const char *p)
{
- int c;
+ int terminator; /* Terminator for \s. */
+ int lim; /* Limit for N in \s. */
+ int c, i;
if ('\\' != *p++)
return(0);
@@ -74,9 +76,84 @@ mandoc_special(const char *p)
case ('e'):
return(2);
case ('f'):
- if (0 == *++p || ! isgraph((u_char)*p))
+ if ('\0' == *++p || ! isgraph((u_char)*p))
return(0);
return(3);
+ case ('s'):
+ if ('\0' == *++p)
+ return(2);
+
+ c = 2;
+ terminator = 0;
+ lim = 1;
+
+ if (*p == '\'') {
+ lim = 0;
+ terminator = 1;
+ ++p;
+ ++c;
+ } else if (*p == '[') {
+ lim = 0;
+ terminator = 2;
+ ++p;
+ ++c;
+ } else if (*p == '(') {
+ lim = 2;
+ terminator = 3;
+ ++p;
+ ++c;
+ }
+
+ if (*p == '+' || *p == '-') {
+ ++p;
+ ++c;
+ }
+
+ if (*p == '\'') {
+ if (terminator)
+ return(0);
+ lim = 0;
+ terminator = 1;
+ ++p;
+ ++c;
+ } else if (*p == '[') {
+ if (terminator)
+ return(0);
+ lim = 0;
+ terminator = 2;
+ ++p;
+ ++c;
+ } else if (*p == '(') {
+ if (terminator)
+ return(0);
+ lim = 2;
+ terminator = 3;
+ ++p;
+ ++c;
+ }
+
+ /* TODO: needs to handle floating point. */
+
+ if ( ! isdigit((u_char)*p))
+ return(0);
+
+ for (i = 0; isdigit((u_char)*p); i++) {
+ if (lim && i >= lim)
+ break;
+ ++p;
+ ++c;
+ }
+
+ if (terminator && terminator < 3) {
+ if (1 == terminator && *p != '\'')
+ return(0);
+ if (2 == terminator && *p != ']')
+ return(0);
+ ++p;
+ ++c;
+ }
+
+ return(c);
case ('*'):
if (0 == *++p || ! isgraph((u_char)*p))
return(0);