Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 12 Jun 2012 05:39:35 +0000
From:      jhagewood@FreeBSD.org
To:        svn-soc-all@FreeBSD.org
Subject:   socsvn commit: r237531 - in soc2012/jhagewood: diff diff/diff mdocml mdocml/mdocml-1.12.1
Message-ID:  <20120612053935.F3D36106567C@hub.freebsd.org>

next in thread | raw e-mail | index | archive | help
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@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@bsd.lv>
++ * Copyright (c) 2010, 2011 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
++ * 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 ***



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20120612053935.F3D36106567C>