socsvn commit: r237531 - in soc2012/jhagewood: diff diff/diff
mdocml mdocml/mdocml-1.12.1
jhagewood at FreeBSD.org
jhagewood at FreeBSD.org
Tue Jun 12 05:39:38 UTC 2012
Author: jhagewood
Date: Tue Jun 12 05:39:35 2012
New Revision: 237531
URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=237531
Log:
Modified:
soc2012/jhagewood/diff/diff/diff.c
soc2012/jhagewood/diff/diff/diff.h
soc2012/jhagewood/diff/diff/diffreg.c
soc2012/jhagewood/diff/hagewood-diff.patch
soc2012/jhagewood/mdocml/hagewood-mdocml-ns.patch
soc2012/jhagewood/mdocml/mdocml-1.12.1/man.h
soc2012/jhagewood/mdocml/mdocml-1.12.1/man_term.c
soc2012/jhagewood/mdocml/mdocml-1.12.1/mdoc.c
soc2012/jhagewood/mdocml/mdocml-1.12.1/mdoc.h
soc2012/jhagewood/mdocml/mdocml-1.12.1/mdoc_argv.c
soc2012/jhagewood/mdocml/mdocml-1.12.1/mdoc_macro.c
soc2012/jhagewood/mdocml/mdocml-1.12.1/mdoc_term.c
Modified: soc2012/jhagewood/diff/diff/diff.c
==============================================================================
--- soc2012/jhagewood/diff/diff/diff.c Tue Jun 12 04:58:52 2012 (r237530)
+++ soc2012/jhagewood/diff/diff/diff.c Tue Jun 12 05:39:35 2012 (r237531)
@@ -45,7 +45,7 @@
#include "diff.h"
#include "pathnames.h"
-int aflag, bflag, dflag, iflag, lflag, Nflag, Pflag, pflag, rflag;
+int aflag, bflag, cflag, dflag, iflag, lflag, Nflag, Pflag, pflag, rflag;
int sflag, tflag, Tflag, wflag;
int Bflag, yflag;
int strip_cr, tabsize=8;
@@ -196,6 +196,7 @@
break;
case 'C':
case 'c':
+ cflag = 1;
format = D_CONTEXT;
if (optarg != NULL) {
l = strtol(optarg, &ep, 10);
Modified: soc2012/jhagewood/diff/diff/diff.h
==============================================================================
--- soc2012/jhagewood/diff/diff/diff.h Tue Jun 12 04:58:52 2012 (r237530)
+++ soc2012/jhagewood/diff/diff/diff.h Tue Jun 12 05:39:35 2012 (r237531)
@@ -75,7 +75,7 @@
struct excludes *next;
};
-extern int aflag, bflag, dflag, iflag, lflag, Nflag, Pflag, pflag, rflag,
+extern int aflag, bflag, cflag, dflag, iflag, lflag, Nflag, Pflag, pflag, rflag,
sflag, tflag, Tflag, wflag;
extern int Bflag, strip_cr, tabsize;
extern int format, context, status;
Modified: soc2012/jhagewood/diff/diff/diffreg.c
==============================================================================
--- soc2012/jhagewood/diff/diff/diffreg.c Tue Jun 12 04:58:52 2012 (r237530)
+++ soc2012/jhagewood/diff/diff/diffreg.c Tue Jun 12 05:39:35 2012 (r237531)
@@ -1551,29 +1551,33 @@
static void
print_header(const char *file1, const char *file2)
{
- const char *time_format;
-#ifdef ST_MTIM_NSEC
- time_format = "%Y-%m-%d %H:%M:%S.%N %z";
-#else
- time_format = "%Y-%m-%d %H:%M:%S %z";
-#endif
+ const char *time_format;
struct tm *tm_ptr1, *tm_ptr2;
char buf1[256];
char buf2[256];
+#ifdef ST_MTIM_NSEC
+ time_format = "%Y-%m-%d %H:%M:%S.%N %z";
+#else
+ time_format = "%Y-%m-%d %H:%M:%S %z";
+#endif
+
+ if (cflag)
+ time_format = "%c";
tm_ptr1 = localtime(&stb1.st_mtime);
tm_ptr2 = localtime(&stb2.st_mtime);
strftime(buf1, 256, time_format, tm_ptr1);
strftime(buf2, 256, time_format, tm_ptr2);
+
if (label[0] != NULL)
printf("%s %s\n", format == D_CONTEXT ? "***" : "---",
- label[0]);
+ label[0]);
else
printf("%s %s\t%s\n", format == D_CONTEXT ? "***" : "---",
- file1, buf1);
+ file1, buf1);
if (label[1] != NULL)
printf("%s %s\n", format == D_CONTEXT ? "---" : "+++",
- label[1]);
+ label[1]);
else
printf("%s %s\t%s\n", format == D_CONTEXT ? "---" : "+++",
- file2, buf2);
+ file2, buf2);
}
Modified: soc2012/jhagewood/diff/hagewood-diff.patch
==============================================================================
--- soc2012/jhagewood/diff/hagewood-diff.patch Tue Jun 12 04:58:52 2012 (r237530)
+++ soc2012/jhagewood/diff/hagewood-diff.patch Tue Jun 12 05:39:35 2012 (r237531)
@@ -1,6 +1,15 @@
diff -rupN jhagewood/diff/diff-orig/diff.c jhagewood/diff/diff/diff.c
--- jhagewood/diff/diff-orig/diff.c 2012-06-10 03:31:05.000000000 -0400
-+++ jhagewood/diff/diff/diff.c 2012-06-11 02:32:48.000000000 -0400
++++ jhagewood/diff/diff/diff.c 2012-06-12 05:35:45.000000000 -0400
+@@ -45,7 +45,7 @@ __FBSDID("$FreeBSD$");
+ #include "diff.h"
+ #include "pathnames.h"
+
+-int aflag, bflag, dflag, iflag, lflag, Nflag, Pflag, pflag, rflag;
++int aflag, bflag, cflag, dflag, iflag, lflag, Nflag, Pflag, pflag, rflag;
+ int sflag, tflag, Tflag, wflag;
+ int Bflag, yflag;
+ int strip_cr, tabsize=8;
@@ -129,7 +129,6 @@ static struct option longopts[] = {
{ "report-identical-files", no_argument, NULL, 's' },
{ "initial-tab", no_argument, NULL, 'T' },
@@ -9,7 +18,15 @@
{ "unified", optional_argument, NULL, 'U' },
{ "version", no_argument, NULL, 'v' },
/* XXX: UNIMPLEMENTED
-@@ -548,7 +547,7 @@ print_status(int val, char *path1, char
+@@ -197,6 +196,7 @@ main(int argc, char **argv)
+ break;
+ case 'C':
+ case 'c':
++ cflag = 1;
+ format = D_CONTEXT;
+ if (optarg != NULL) {
+ l = strtol(optarg, &ep, 10);
+@@ -548,7 +548,7 @@ print_status(int val, char *path1, char
path1, entry ? entry : "", path2, entry ? entry : "");
break;
case D_BINARY:
@@ -18,40 +35,58 @@
path1, entry ? entry : "", path2, entry ? entry : "");
break;
case D_DIFFER:
+diff -rupN jhagewood/diff/diff-orig/diff.h jhagewood/diff/diff/diff.h
+--- jhagewood/diff/diff-orig/diff.h 2012-06-10 03:31:05.000000000 -0400
++++ jhagewood/diff/diff/diff.h 2012-06-12 05:34:04.000000000 -0400
+@@ -75,7 +75,7 @@ struct excludes {
+ struct excludes *next;
+ };
+
+-extern int aflag, bflag, dflag, iflag, lflag, Nflag, Pflag, pflag, rflag,
++extern int aflag, bflag, cflag, dflag, iflag, lflag, Nflag, Pflag, pflag, rflag,
+ sflag, tflag, Tflag, wflag;
+ extern int Bflag, strip_cr, tabsize;
+ extern int format, context, status;
diff -rupN jhagewood/diff/diff-orig/diffreg.c jhagewood/diff/diff/diffreg.c
--- jhagewood/diff/diff-orig/diffreg.c 2012-06-10 03:31:05.000000000 -0400
-+++ jhagewood/diff/diff/diffreg.c 2012-06-11 00:49:41.000000000 -0400
-@@ -1551,16 +1551,29 @@ dump_unified_vec(FILE *f1, FILE *f2)
++++ jhagewood/diff/diff/diffreg.c 2012-06-12 05:38:29.000000000 -0400
+@@ -1551,16 +1551,33 @@ dump_unified_vec(FILE *f1, FILE *f2)
static void
print_header(const char *file1, const char *file2)
{
-+ const char *time_format;
-+#ifdef ST_MTIM_NSEC
-+ time_format = "%Y-%m-%d %H:%M:%S.%N %z";
-+#else
-+ time_format = "%Y-%m-%d %H:%M:%S %z";
-+#endif
++ const char *time_format;
+ struct tm *tm_ptr1, *tm_ptr2;
+ char buf1[256];
+ char buf2[256];
++#ifdef ST_MTIM_NSEC
++ time_format = "%Y-%m-%d %H:%M:%S.%N %z";
++#else
++ time_format = "%Y-%m-%d %H:%M:%S %z";
++#endif
++
++ if (cflag)
++ time_format = "%c";
+ tm_ptr1 = localtime(&stb1.st_mtime);
+ tm_ptr2 = localtime(&stb2.st_mtime);
+ strftime(buf1, 256, time_format, tm_ptr1);
+ strftime(buf2, 256, time_format, tm_ptr2);
++
if (label[0] != NULL)
printf("%s %s\n", format == D_CONTEXT ? "***" : "---",
- label[0]);
+- label[0]);
++ label[0]);
else
- printf("%s %s\t%s", format == D_CONTEXT ? "***" : "---",
- file1, ctime(&stb1.st_mtime));
+ printf("%s %s\t%s\n", format == D_CONTEXT ? "***" : "---",
-+ file1, buf1);
++ file1, buf1);
if (label[1] != NULL)
printf("%s %s\n", format == D_CONTEXT ? "---" : "+++",
- label[1]);
+- label[1]);
++ label[1]);
else
- printf("%s %s\t%s", format == D_CONTEXT ? "---" : "+++",
- file2, ctime(&stb2.st_mtime));
+ printf("%s %s\t%s\n", format == D_CONTEXT ? "---" : "+++",
-+ file2, buf2);
++ file2, buf2);
}
Modified: soc2012/jhagewood/mdocml/hagewood-mdocml-ns.patch
==============================================================================
--- soc2012/jhagewood/mdocml/hagewood-mdocml-ns.patch Tue Jun 12 04:58:52 2012 (r237530)
+++ soc2012/jhagewood/mdocml/hagewood-mdocml-ns.patch Tue Jun 12 05:39:35 2012 (r237531)
@@ -1,6 +1,6 @@
diff -rupN jhagewood/mdocml/mdocml-1.12.1-orig/man.h jhagewood/mdocml/mdocml-1.12.1/man.h
---- jhagewood/mdocml/mdocml-1.12.1-orig/man.h 2012-06-04 23:30:13.000000000 -0400
-+++ jhagewood/mdocml/mdocml-1.12.1/man.h 2012-06-04 23:30:15.000000000 -0400
+--- jhagewood/mdocml/mdocml-1.12.1-orig/man.h 2012-06-10 03:31:06.000000000 -0400
++++ jhagewood/mdocml/mdocml-1.12.1/man.h 2012-06-12 04:34:37.000000000 -0400
@@ -43,6 +43,8 @@ enum mant {
MAN_sp,
MAN_nf,
@@ -10,9 +10,126 @@
MAN_RE,
MAN_RS,
MAN_DT,
+diff -rupN jhagewood/mdocml/mdocml-1.12.1-orig/man.h.orig jhagewood/mdocml/mdocml-1.12.1/man.h.orig
+--- jhagewood/mdocml/mdocml-1.12.1-orig/man.h.orig 1969-12-31 19:00:00.000000000 -0500
++++ jhagewood/mdocml/mdocml-1.12.1/man.h.orig 2012-06-10 03:31:06.000000000 -0400
+@@ -0,0 +1,113 @@
++/* $Id: man.h,v 1.60 2012/01/03 15:16:24 kristaps Exp $ */
++/*
++ * Copyright (c) 2009, 2010, 2011 Kristaps Dzonsons <kristaps at bsd.lv>
++ *
++ * Permission to use, copy, modify, and distribute this software for any
++ * purpose with or without fee is hereby granted, provided that the above
++ * copyright notice and this permission notice appear in all copies.
++ *
++ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
++ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
++ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
++ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
++ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
++ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
++ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
++ */
++#ifndef MAN_H
++#define MAN_H
++
++enum mant {
++ MAN_br = 0,
++ MAN_TH,
++ MAN_SH,
++ MAN_SS,
++ MAN_TP,
++ MAN_LP,
++ MAN_PP,
++ MAN_P,
++ MAN_IP,
++ MAN_HP,
++ MAN_SM,
++ MAN_SB,
++ MAN_BI,
++ MAN_IB,
++ MAN_BR,
++ MAN_RB,
++ MAN_R,
++ MAN_B,
++ MAN_I,
++ MAN_IR,
++ MAN_RI,
++ MAN_na,
++ MAN_sp,
++ MAN_nf,
++ MAN_fi,
++ MAN_RE,
++ MAN_RS,
++ MAN_DT,
++ MAN_UC,
++ MAN_PD,
++ MAN_AT,
++ MAN_in,
++ MAN_ft,
++ MAN_OP,
++ MAN_MAX
++};
++
++enum man_type {
++ MAN_TEXT,
++ MAN_ELEM,
++ MAN_ROOT,
++ MAN_BLOCK,
++ MAN_HEAD,
++ MAN_BODY,
++ MAN_TAIL,
++ MAN_TBL,
++ MAN_EQN
++};
++
++struct man_meta {
++ char *msec; /* `TH' section (1, 3p, etc.) */
++ char *date; /* `TH' normalised date */
++ char *vol; /* `TH' volume */
++ char *title; /* `TH' title (e.g., FOO) */
++ char *source; /* `TH' source (e.g., GNU) */
++};
++
++struct man_node {
++ struct man_node *parent; /* parent AST node */
++ struct man_node *child; /* first child AST node */
++ struct man_node *next; /* sibling AST node */
++ struct man_node *prev; /* prior sibling AST node */
++ int nchild; /* number children */
++ int line;
++ int pos;
++ enum mant tok; /* tok or MAN__MAX if none */
++ int flags;
++#define MAN_VALID (1 << 0) /* has been validated */
++#define MAN_EOS (1 << 2) /* at sentence boundary */
++#define MAN_LINE (1 << 3) /* first macro/text on line */
++ enum man_type type; /* AST node type */
++ char *string; /* TEXT node argument */
++ struct man_node *head; /* BLOCK node HEAD ptr */
++ struct man_node *tail; /* BLOCK node TAIL ptr */
++ struct man_node *body; /* BLOCK node BODY ptr */
++ const struct tbl_span *span; /* TBL */
++ const struct eqn *eqn; /* EQN */
++};
++
++/* Names of macros. Index is enum mant. */
++extern const char *const *man_macronames;
++
++__BEGIN_DECLS
++
++struct man;
++
++const struct man_node *man_node(const struct man *);
++const struct man_meta *man_meta(const struct man *);
++const struct mparse *man_mparse(const struct man *);
++
++__END_DECLS
++
++#endif /*!MAN_H*/
diff -rupN jhagewood/mdocml/mdocml-1.12.1-orig/man_term.c jhagewood/mdocml/mdocml-1.12.1/man_term.c
---- jhagewood/mdocml/mdocml-1.12.1-orig/man_term.c 2012-06-04 23:30:13.000000000 -0400
-+++ jhagewood/mdocml/mdocml-1.12.1/man_term.c 2012-06-04 23:30:15.000000000 -0400
+--- jhagewood/mdocml/mdocml-1.12.1-orig/man_term.c 2012-06-10 03:31:06.000000000 -0400
++++ jhagewood/mdocml/mdocml-1.12.1/man_term.c 2012-06-12 04:36:15.000000000 -0400
@@ -82,6 +82,8 @@ static int pre_alternate(DECL_ARGS);
static int pre_ft(DECL_ARGS);
static int pre_ign(DECL_ARGS);
@@ -31,7 +148,7 @@
{ pre_ft, NULL, MAN_NOTEXT }, /* ft */
{ pre_OP, NULL, 0 }, /* OP */
};
-@@ -433,6 +437,27 @@ pre_in(DECL_ARGS)
+@@ -433,6 +437,22 @@ pre_in(DECL_ARGS)
return(0);
}
@@ -40,8 +157,7 @@
+pre_ns(DECL_ARGS)
+{
+
-+ if ( ! (MAN_LINE & n->flags))
-+ p->flags |= TERMP_NOSPACE;
++ p->flags &= TERMP_NOSPACE;
+ return(1);
+}
+
@@ -49,13 +165,1130 @@
+static int
+pre_rs(DECL_ARGS)
+{
-+ /*
-+ if (SEC_SEE_ALSO != n->sec)
-+ return(1);
-+ if (MAN_BLOCK == n->type && n->prev)
-+ term_vspace(p); */
++ p->flags |= TERMP_NOSPACE;
+ return(1);
+}
/* ARGSUSED */
static int
+diff -rupN jhagewood/mdocml/mdocml-1.12.1-orig/man_term.c.orig jhagewood/mdocml/mdocml-1.12.1/man_term.c.orig
+--- jhagewood/mdocml/mdocml-1.12.1-orig/man_term.c.orig 1969-12-31 19:00:00.000000000 -0500
++++ jhagewood/mdocml/mdocml-1.12.1/man_term.c.orig 2012-06-10 03:31:06.000000000 -0400
+@@ -0,0 +1,1117 @@
++/* $Id: man_term.c,v 1.127 2012/01/03 15:16:24 kristaps Exp $ */
++/*
++ * Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons <kristaps at bsd.lv>
++ * Copyright (c) 2010, 2011 Ingo Schwarze <schwarze at 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
++ * copyright notice and this permission notice appear in all copies.
++ *
++ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
++ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
++ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
++ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
++ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
++ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
++ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
++ */
++#ifdef HAVE_CONFIG_H
++#include "config.h"
++#endif
++
++#include <sys/types.h>
++
++#include <assert.h>
++#include <ctype.h>
++#include <stdio.h>
++#include <stdlib.h>
++#include <string.h>
++
++#include "mandoc.h"
++#include "out.h"
++#include "man.h"
++#include "term.h"
++#include "main.h"
++
++#define MAXMARGINS 64 /* maximum number of indented scopes */
++
++/* FIXME: have PD set the default vspace width. */
++
++struct mtermp {
++ int fl;
++#define MANT_LITERAL (1 << 0)
++ size_t lmargin[MAXMARGINS]; /* margins (incl. visible page) */
++ int lmargincur; /* index of current margin */
++ int lmarginsz; /* actual number of nested margins */
++ size_t offset; /* default offset to visible page */
++};
++
++#define DECL_ARGS struct termp *p, \
++ struct mtermp *mt, \
++ const struct man_node *n, \
++ const struct man_meta *m
++
++struct termact {
++ int (*pre)(DECL_ARGS);
++ void (*post)(DECL_ARGS);
++ int flags;
++#define MAN_NOTEXT (1 << 0) /* Never has text children. */
++};
++
++static int a2width(const struct termp *, const char *);
++static size_t a2height(const struct termp *, const char *);
++
++static void print_man_nodelist(DECL_ARGS);
++static void print_man_node(DECL_ARGS);
++static void print_man_head(struct termp *, const void *);
++static void print_man_foot(struct termp *, const void *);
++static void print_bvspace(struct termp *,
++ const struct man_node *);
++
++static int pre_B(DECL_ARGS);
++static int pre_HP(DECL_ARGS);
++static int pre_I(DECL_ARGS);
++static int pre_IP(DECL_ARGS);
++static int pre_OP(DECL_ARGS);
++static int pre_PP(DECL_ARGS);
++static int pre_RS(DECL_ARGS);
++static int pre_SH(DECL_ARGS);
++static int pre_SS(DECL_ARGS);
++static int pre_TP(DECL_ARGS);
++static int pre_alternate(DECL_ARGS);
++static int pre_ft(DECL_ARGS);
++static int pre_ign(DECL_ARGS);
++static int pre_in(DECL_ARGS);
++static int pre_literal(DECL_ARGS);
++static int pre_sp(DECL_ARGS);
++
++static void post_IP(DECL_ARGS);
++static void post_HP(DECL_ARGS);
++static void post_RS(DECL_ARGS);
++static void post_SH(DECL_ARGS);
++static void post_SS(DECL_ARGS);
++static void post_TP(DECL_ARGS);
++
++static const struct termact termacts[MAN_MAX] = {
++ { pre_sp, NULL, MAN_NOTEXT }, /* br */
++ { NULL, NULL, 0 }, /* TH */
++ { pre_SH, post_SH, 0 }, /* SH */
++ { pre_SS, post_SS, 0 }, /* SS */
++ { pre_TP, post_TP, 0 }, /* TP */
++ { pre_PP, NULL, 0 }, /* LP */
++ { pre_PP, NULL, 0 }, /* PP */
++ { pre_PP, NULL, 0 }, /* P */
++ { pre_IP, post_IP, 0 }, /* IP */
++ { pre_HP, post_HP, 0 }, /* HP */
++ { NULL, NULL, 0 }, /* SM */
++ { pre_B, NULL, 0 }, /* SB */
++ { pre_alternate, NULL, 0 }, /* BI */
++ { pre_alternate, NULL, 0 }, /* IB */
++ { pre_alternate, NULL, 0 }, /* BR */
++ { pre_alternate, NULL, 0 }, /* RB */
++ { NULL, NULL, 0 }, /* R */
++ { pre_B, NULL, 0 }, /* B */
++ { pre_I, NULL, 0 }, /* I */
++ { pre_alternate, NULL, 0 }, /* IR */
++ { pre_alternate, NULL, 0 }, /* RI */
++ { pre_ign, NULL, MAN_NOTEXT }, /* na */
++ { pre_sp, NULL, MAN_NOTEXT }, /* sp */
++ { pre_literal, NULL, 0 }, /* nf */
++ { pre_literal, NULL, 0 }, /* fi */
++ { NULL, NULL, 0 }, /* RE */
++ { pre_RS, post_RS, 0 }, /* RS */
++ { pre_ign, NULL, 0 }, /* DT */
++ { pre_ign, NULL, 0 }, /* UC */
++ { pre_ign, NULL, 0 }, /* PD */
++ { pre_ign, NULL, 0 }, /* AT */
++ { pre_in, NULL, MAN_NOTEXT }, /* in */
++ { pre_ft, NULL, MAN_NOTEXT }, /* ft */
++ { pre_OP, NULL, 0 }, /* OP */
++};
++
++
++
++void
++terminal_man(void *arg, const struct man *man)
++{
++ struct termp *p;
++ const struct man_node *n;
++ const struct man_meta *m;
++ struct mtermp mt;
++
++ p = (struct termp *)arg;
++
++ if (0 == p->defindent)
++ p->defindent = 7;
++
++ p->overstep = 0;
++ p->maxrmargin = p->defrmargin;
++ p->tabwidth = term_len(p, 5);
++
++ if (NULL == p->symtab)
++ p->symtab = mchars_alloc();
++
++ n = man_node(man);
++ m = man_meta(man);
++
++ term_begin(p, print_man_head, print_man_foot, m);
++ p->flags |= TERMP_NOSPACE;
++
++ memset(&mt, 0, sizeof(struct mtermp));
++
++ mt.lmargin[mt.lmargincur] = term_len(p, p->defindent);
++ mt.offset = term_len(p, p->defindent);
++
++ if (n->child)
++ print_man_nodelist(p, &mt, n->child, m);
++
++ term_end(p);
++}
++
++
++static size_t
++a2height(const struct termp *p, const char *cp)
++{
++ struct roffsu su;
++
++ if ( ! a2roffsu(cp, &su, SCALE_VS))
++ SCALE_VS_INIT(&su, atoi(cp));
++
++ return(term_vspan(p, &su));
++}
++
++
++static int
++a2width(const struct termp *p, const char *cp)
++{
++ struct roffsu su;
++
++ if ( ! a2roffsu(cp, &su, SCALE_BU))
++ return(-1);
++
++ return((int)term_hspan(p, &su));
++}
++
++/*
++ * Printing leading vertical space before a block.
++ * This is used for the paragraph macros.
++ * The rules are pretty simple, since there's very little nesting going
++ * on here. Basically, if we're the first within another block (SS/SH),
++ * then don't emit vertical space. If we are (RS), then do. If not the
++ * first, print it.
++ */
++static void
++print_bvspace(struct termp *p, const struct man_node *n)
++{
++
++ term_newln(p);
++
++ if (n->body && n->body->child)
++ if (MAN_TBL == n->body->child->type)
++ return;
++
++ if (MAN_ROOT == n->parent->type || MAN_RS != n->parent->tok)
++ if (NULL == n->prev)
++ return;
++
++ term_vspace(p);
++}
++
++/* ARGSUSED */
++static int
++pre_ign(DECL_ARGS)
++{
++
++ return(0);
++}
++
++
++/* ARGSUSED */
++static int
++pre_I(DECL_ARGS)
++{
++
++ term_fontrepl(p, TERMFONT_UNDER);
++ return(1);
++}
++
++
++/* ARGSUSED */
++static int
++pre_literal(DECL_ARGS)
++{
++
++ term_newln(p);
++
++ if (MAN_nf == n->tok)
++ mt->fl |= MANT_LITERAL;
++ else
++ mt->fl &= ~MANT_LITERAL;
++
++ /*
++ * Unlike .IP and .TP, .HP does not have a HEAD.
++ * So in case a second call to term_flushln() is needed,
++ * indentation has to be set up explicitly.
++ */
++ if (MAN_HP == n->parent->tok && p->rmargin < p->maxrmargin) {
++ p->offset = p->rmargin;
++ p->rmargin = p->maxrmargin;
++ p->flags &= ~(TERMP_NOBREAK | TERMP_TWOSPACE);
++ p->flags |= TERMP_NOSPACE;
++ }
++
++ return(0);
++}
++
++/* ARGSUSED */
++static int
++pre_alternate(DECL_ARGS)
++{
++ enum termfont font[2];
++ const struct man_node *nn;
++ int savelit, i;
++
++ switch (n->tok) {
++ case (MAN_RB):
++ font[0] = TERMFONT_NONE;
++ font[1] = TERMFONT_BOLD;
++ break;
++ case (MAN_RI):
++ font[0] = TERMFONT_NONE;
++ font[1] = TERMFONT_UNDER;
++ break;
++ case (MAN_BR):
++ font[0] = TERMFONT_BOLD;
++ font[1] = TERMFONT_NONE;
++ break;
++ case (MAN_BI):
++ font[0] = TERMFONT_BOLD;
++ font[1] = TERMFONT_UNDER;
++ break;
++ case (MAN_IR):
++ font[0] = TERMFONT_UNDER;
++ font[1] = TERMFONT_NONE;
++ break;
++ case (MAN_IB):
++ font[0] = TERMFONT_UNDER;
++ font[1] = TERMFONT_BOLD;
++ break;
++ default:
++ abort();
++ }
++
++ savelit = MANT_LITERAL & mt->fl;
++ mt->fl &= ~MANT_LITERAL;
++
++ for (i = 0, nn = n->child; nn; nn = nn->next, i = 1 - i) {
++ term_fontrepl(p, font[i]);
++ if (savelit && NULL == nn->next)
++ mt->fl |= MANT_LITERAL;
++ print_man_node(p, mt, nn, m);
++ if (nn->next)
++ p->flags |= TERMP_NOSPACE;
++ }
++
++ return(0);
++}
++
++/* ARGSUSED */
++static int
++pre_B(DECL_ARGS)
++{
++
++ term_fontrepl(p, TERMFONT_BOLD);
++ return(1);
++}
++
++/* ARGSUSED */
++static int
++pre_OP(DECL_ARGS)
++{
++
++ term_word(p, "[");
++ p->flags |= TERMP_NOSPACE;
++
++ if (NULL != (n = n->child)) {
++ term_fontrepl(p, TERMFONT_BOLD);
++ term_word(p, n->string);
++ }
++ if (NULL != n && NULL != n->next) {
++ term_fontrepl(p, TERMFONT_UNDER);
++ term_word(p, n->next->string);
++ }
++
++ term_fontrepl(p, TERMFONT_NONE);
++ p->flags |= TERMP_NOSPACE;
++ term_word(p, "]");
++ return(0);
++}
++
++/* ARGSUSED */
++static int
++pre_ft(DECL_ARGS)
++{
++ const char *cp;
++
++ if (NULL == n->child) {
++ term_fontlast(p);
++ return(0);
++ }
++
++ cp = n->child->string;
++ switch (*cp) {
++ case ('4'):
++ /* FALLTHROUGH */
++ case ('3'):
++ /* FALLTHROUGH */
++ case ('B'):
++ term_fontrepl(p, TERMFONT_BOLD);
++ break;
++ case ('2'):
++ /* FALLTHROUGH */
++ case ('I'):
++ term_fontrepl(p, TERMFONT_UNDER);
++ break;
++ case ('P'):
++ term_fontlast(p);
++ break;
++ case ('1'):
++ /* FALLTHROUGH */
++ case ('C'):
++ /* FALLTHROUGH */
++ case ('R'):
++ term_fontrepl(p, TERMFONT_NONE);
++ break;
++ default:
++ break;
++ }
++ return(0);
++}
++
++/* ARGSUSED */
++static int
++pre_in(DECL_ARGS)
++{
++ int len, less;
++ size_t v;
++ const char *cp;
++
++ term_newln(p);
++
++ if (NULL == n->child) {
++ p->offset = mt->offset;
++ return(0);
++ }
++
++ cp = n->child->string;
++ less = 0;
++
++ if ('-' == *cp)
++ less = -1;
++ else if ('+' == *cp)
++ less = 1;
++ else
++ cp--;
++
++ if ((len = a2width(p, ++cp)) < 0)
++ return(0);
++
++ v = (size_t)len;
++
++ if (less < 0)
++ p->offset -= p->offset > v ? v : p->offset;
++ else if (less > 0)
++ p->offset += v;
++ else
++ p->offset = v;
++
++ /* Don't let this creep beyond the right margin. */
++
++ if (p->offset > p->rmargin)
++ p->offset = p->rmargin;
++
++ return(0);
++}
++
++
++/* ARGSUSED */
++static int
++pre_sp(DECL_ARGS)
++{
++ size_t i, len;
++
++ if ((NULL == n->prev && n->parent)) {
++ if (MAN_SS == n->parent->tok)
++ return(0);
++ if (MAN_SH == n->parent->tok)
++ return(0);
++ }
++
++ switch (n->tok) {
++ case (MAN_br):
++ len = 0;
++ break;
++ default:
++ len = n->child ? a2height(p, n->child->string) : 1;
++ break;
++ }
++
++ if (0 == len)
++ term_newln(p);
++ for (i = 0; i < len; i++)
++ term_vspace(p);
++
++ return(0);
++}
++
++
++/* ARGSUSED */
++static int
++pre_HP(DECL_ARGS)
++{
++ size_t len, one;
++ int ival;
++ const struct man_node *nn;
++
++ switch (n->type) {
++ case (MAN_BLOCK):
++ print_bvspace(p, n);
++ return(1);
++ case (MAN_BODY):
++ p->flags |= TERMP_NOBREAK;
++ p->flags |= TERMP_TWOSPACE;
++ break;
++ default:
++ return(0);
++ }
++
++ len = mt->lmargin[mt->lmargincur];
++ ival = -1;
++
++ /* Calculate offset. */
++
++ if (NULL != (nn = n->parent->head->child))
++ if ((ival = a2width(p, nn->string)) >= 0)
++ len = (size_t)ival;
++
++ one = term_len(p, 1);
++ if (len < one)
++ len = one;
++
++ p->offset = mt->offset;
++ p->rmargin = mt->offset + len;
++
++ if (ival >= 0)
++ mt->lmargin[mt->lmargincur] = (size_t)ival;
++
++ return(1);
++}
++
++
++/* ARGSUSED */
++static void
++post_HP(DECL_ARGS)
++{
++
++ switch (n->type) {
++ case (MAN_BLOCK):
++ term_flushln(p);
++ break;
++ case (MAN_BODY):
++ term_flushln(p);
++ p->flags &= ~TERMP_NOBREAK;
++ p->flags &= ~TERMP_TWOSPACE;
++ p->offset = mt->offset;
++ p->rmargin = p->maxrmargin;
++ break;
++ default:
++ break;
++ }
++}
++
++
++/* ARGSUSED */
++static int
++pre_PP(DECL_ARGS)
++{
++
++ switch (n->type) {
++ case (MAN_BLOCK):
++ mt->lmargin[mt->lmargincur] = term_len(p, p->defindent);
++ print_bvspace(p, n);
++ break;
++ default:
++ p->offset = mt->offset;
++ break;
++ }
++
++ return(MAN_HEAD != n->type);
++}
++
++
++/* ARGSUSED */
++static int
++pre_IP(DECL_ARGS)
++{
++ const struct man_node *nn;
++ size_t len;
++ int savelit, ival;
++
++ switch (n->type) {
++ case (MAN_BODY):
++ p->flags |= TERMP_NOSPACE;
++ break;
++ case (MAN_HEAD):
++ p->flags |= TERMP_NOBREAK;
++ break;
++ case (MAN_BLOCK):
++ print_bvspace(p, n);
++ /* FALLTHROUGH */
++ default:
++ return(1);
++ }
++
++ len = mt->lmargin[mt->lmargincur];
++ ival = -1;
++
++ /* Calculate the offset from the optional second argument. */
++ if (NULL != (nn = n->parent->head->child))
++ if (NULL != (nn = nn->next))
++ if ((ival = a2width(p, nn->string)) >= 0)
++ len = (size_t)ival;
++
++ switch (n->type) {
++ case (MAN_HEAD):
++ /* Handle zero-width lengths. */
++ if (0 == len)
++ len = term_len(p, 1);
++
++ p->offset = mt->offset;
++ p->rmargin = mt->offset + len;
++ if (ival < 0)
++ break;
++
++ /* Set the saved left-margin. */
++ mt->lmargin[mt->lmargincur] = (size_t)ival;
++
++ savelit = MANT_LITERAL & mt->fl;
++ mt->fl &= ~MANT_LITERAL;
++
++ if (n->child)
++ print_man_node(p, mt, n->child, m);
++
++ if (savelit)
++ mt->fl |= MANT_LITERAL;
++
++ return(0);
++ case (MAN_BODY):
++ p->offset = mt->offset + len;
++ p->rmargin = p->maxrmargin;
++ break;
++ default:
++ break;
++ }
++
++ return(1);
++}
++
++
++/* ARGSUSED */
++static void
++post_IP(DECL_ARGS)
++{
++
++ switch (n->type) {
++ case (MAN_HEAD):
++ term_flushln(p);
++ p->flags &= ~TERMP_NOBREAK;
++ p->rmargin = p->maxrmargin;
++ break;
++ case (MAN_BODY):
++ term_newln(p);
++ break;
++ default:
++ break;
++ }
++}
++
++
++/* ARGSUSED */
*** DIFF OUTPUT TRUNCATED AT 1000 LINES ***
More information about the svn-soc-all
mailing list