source@mandoc.bsd.lv
 help / color / mirror / Atom feed
* mdocml: Initial chunks for variable-width fonts.
@ 2010-06-25 18:53 kristaps
  0 siblings, 0 replies; only message in thread
From: kristaps @ 2010-06-25 18:53 UTC (permalink / raw)
  To: source

Log Message:
-----------
Initial chunks for variable-width fonts.  Pushes all width calculations
in mdoc_term.c and man_term.c down into term.c.  This is still not
implemented in term.c, although stubs for width calculations are in
place.  From now on, offset, rmargin, and other layout variables are
abstract screen widths.  They will resolve to the the familiar values
for -Tascii but -Tps will eventually use points instead of chars.

Modified Files:
--------------
    mdocml:
        man_term.c
        mdoc_term.c
        term.c
        term.h
        term_ascii.c
        term_ps.c

Revision Data
-------------
Index: term.c
===================================================================
RCS file: /usr/vhosts/mdocml.bsd.lv/cvs/mdocml/term.c,v
retrieving revision 1.148
retrieving revision 1.149
diff -Lterm.c -Lterm.c -u -p -r1.148 -r1.149
--- term.c
+++ term.c
@@ -87,9 +87,7 @@ term_alloc(enum termenc enc)
 		exit(EXIT_FAILURE);
 	}
 
-	p->tabwidth = 5;
 	p->enc = enc;
-	p->defrmargin = 78;
 	return(p);
 }
 
@@ -626,7 +624,27 @@ encode(struct termp *p, const char *word
 
 
 size_t
-term_vspan(const struct roffsu *su)
+term_len(const struct termp *p, size_t sz)
+{
+
+	return((*p->width)(p, ' ') * sz);
+}
+
+
+size_t
+term_strlen(const struct termp *p, const char *cp)
+{
+	size_t		 sz;
+
+	for (sz = 0; *cp; cp++)
+		sz += (*p->width)(p, *cp);
+
+	return(sz);
+}
+
+
+size_t
+term_vspan(const struct termp *p, const struct roffsu *su)
 {
 	double		 r;
 
@@ -662,7 +680,7 @@ term_vspan(const struct roffsu *su)
 
 
 size_t
-term_hspan(const struct roffsu *su)
+term_hspan(const struct termp *p, const struct roffsu *su)
 {
 	double		 r;
 
Index: term.h
===================================================================
RCS file: /usr/vhosts/mdocml.bsd.lv/cvs/mdocml/term.h,v
retrieving revision 1.64
retrieving revision 1.65
diff -Lterm.h -Lterm.h -u -p -r1.64 -r1.65
--- term.h
+++ term.h
@@ -91,6 +91,7 @@ struct	termp {
 	void		(*end)(struct termp *);
 	void		(*endline)(struct termp *);
 	void		(*advance)(struct termp *, size_t);
+	size_t		(*width)(const struct termp *, char);
 	const void	 *argf;		/* arg for headf/footf */
 	union {
 		struct termp_ps ps;
@@ -107,8 +108,12 @@ void		  term_begin(struct termp *, term_
 			term_margin, const void *);
 void		  term_end(struct termp *);
 
-size_t		  term_hspan(const struct roffsu *);
-size_t		  term_vspan(const struct roffsu *);
+size_t		  term_hspan(const struct termp *, 
+			const struct roffsu *);
+size_t		  term_vspan(const struct termp *,
+			const struct roffsu *);
+size_t		  term_strlen(const struct termp *, const char *);
+size_t		  term_len(const struct termp *, size_t);
 
 enum termfont	  term_fonttop(struct termp *);
 const void	 *term_fontq(struct termp *);
Index: man_term.c
===================================================================
RCS file: /usr/vhosts/mdocml.bsd.lv/cvs/mdocml/man_term.c,v
retrieving revision 1.76
retrieving revision 1.77
diff -Lman_term.c -Lman_term.c -u -p -r1.76 -r1.77
--- man_term.c
+++ man_term.c
@@ -70,8 +70,8 @@ struct	termact {
 #define	MAN_NOTEXT	 (1 << 0) /* Never has text children. */
 };
 
-static	int		  a2width(const struct man_node *);
-static	int		  a2height(const struct man_node *);
+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);
@@ -158,7 +158,7 @@ terminal_man(void *arg, const struct man
 
 	p->overstep = 0;
 	p->maxrmargin = p->defrmargin;
-	p->tabwidth = 5;
+	p->tabwidth = term_len(p, 5);
 
 	if (NULL == p->symtab)
 		switch (p->enc) {
@@ -177,8 +177,8 @@ terminal_man(void *arg, const struct man
 	p->flags |= TERMP_NOSPACE;
 
 	mt.fl = 0;
-	mt.lmargin = INDENT;
-	mt.offset = INDENT;
+	mt.lmargin = term_len(p, INDENT);
+	mt.offset = term_len(p, INDENT);
 
 	if (n->child)
 		print_man_nodelist(p, &mt, n->child, m);
@@ -187,31 +187,27 @@ terminal_man(void *arg, const struct man
 }
 
 
-static int
-a2height(const struct man_node *n)
+static size_t
+a2height(const struct termp *p, const char *cp)
 {
 	struct roffsu	 su;
 
-	assert(MAN_TEXT == n->type);
-	assert(n->string);
-	if ( ! a2roffsu(n->string, &su, SCALE_VS))
-		SCALE_VS_INIT(&su, strlen(n->string));
+	if ( ! a2roffsu(cp, &su, SCALE_VS))
+		SCALE_VS_INIT(&su, term_strlen(p, cp));
 
-	return((int)term_vspan(&su));
+	return(term_vspan(p, &su));
 }
 
 
 static int
-a2width(const struct man_node *n)
+a2width(const struct termp *p, const char *cp)
 {
 	struct roffsu	 su;
 
-	assert(MAN_TEXT == n->type);
-	assert(n->string);
-	if ( ! a2roffsu(n->string, &su, SCALE_BU))
+	if ( ! a2roffsu(cp, &su, SCALE_BU))
 		return(-1);
 
-	return((int)term_hspan(&su));
+	return((int)term_hspan(p, &su));
 }
 
 
@@ -359,9 +355,10 @@ pre_B(DECL_ARGS)
 static int
 pre_sp(DECL_ARGS)
 {
-	int		 i, len;
+	size_t		 i, len;
 
-	len = n->child ? a2height(n->child) : 1;
+	len = n->child ? 
+		a2height(p, n->child->string) : term_len(p, 1);
 
 	if (0 == len)
 		term_newln(p);
@@ -408,11 +405,11 @@ pre_HP(DECL_ARGS)
 	/* Calculate offset. */
 
 	if (NULL != (nn = n->parent->head->child))
-		if ((ival = a2width(nn)) >= 0)
+		if ((ival = a2width(p, nn->string)) >= 0)
 			len = (size_t)ival;
 
 	if (0 == len)
-		len = 1;
+		len = term_len(p, 1);
 
 	p->offset = mt->offset;
 	p->rmargin = mt->offset + len;
@@ -453,7 +450,7 @@ pre_PP(DECL_ARGS)
 
 	switch (n->type) {
 	case (MAN_BLOCK):
-		mt->lmargin = INDENT;
+		mt->lmargin = term_len(p, INDENT);
 		print_bvspace(p, n);
 		break;
 	default:
@@ -497,7 +494,7 @@ pre_IP(DECL_ARGS)
 		if (NULL != (nn = nn->next)) {
 			for ( ; nn->next; nn = nn->next)
 				/* Do nothing. */ ;
-			if ((ival = a2width(nn)) >= 0)
+			if ((ival = a2width(p, nn->string)) >= 0)
 				len = (size_t)ival;
 		}
 
@@ -505,7 +502,7 @@ pre_IP(DECL_ARGS)
 	case (MAN_HEAD):
 		/* Handle zero-width lengths. */
 		if (0 == len)
-			len = 1;
+			len = term_len(p, 1);
 
 		p->offset = mt->offset;
 		p->rmargin = mt->offset + len;
@@ -585,7 +582,7 @@ pre_TP(DECL_ARGS)
 		while (nn && MAN_TEXT != nn->type)
 			nn = nn->next;
 		if (nn && nn->next)
-			if ((ival = a2width(nn)) >= 0)
+			if ((ival = a2width(p, nn->string)) >= 0)
 				len = (size_t)ival;
 	}
 
@@ -593,7 +590,7 @@ pre_TP(DECL_ARGS)
 	case (MAN_HEAD):
 		/* Handle zero-length properly. */
 		if (0 == len)
-			len = 1;
+			len = term_len(p, 1);
 
 		p->offset = mt->offset;
 		p->rmargin = mt->offset + len;
@@ -648,8 +645,8 @@ pre_SS(DECL_ARGS)
 
 	switch (n->type) {
 	case (MAN_BLOCK):
-		mt->lmargin = INDENT;
-		mt->offset = INDENT;
+		mt->lmargin = term_len(p, INDENT);
+		mt->offset = term_len(p, INDENT);
 		/* If following a prior empty `SS', no vspace. */
 		if (n->prev && MAN_SS == n->prev->tok)
 			if (NULL == n->prev->body->child)
@@ -660,7 +657,7 @@ pre_SS(DECL_ARGS)
 		break;
 	case (MAN_HEAD):
 		term_fontrepl(p, TERMFONT_BOLD);
-		p->offset = HALFINDENT;
+		p->offset = term_len(p, HALFINDENT);
 		break;
 	case (MAN_BODY):
 		p->offset = mt->offset;
@@ -698,8 +695,8 @@ pre_SH(DECL_ARGS)
 
 	switch (n->type) {
 	case (MAN_BLOCK):
-		mt->lmargin = INDENT;
-		mt->offset = INDENT;
+		mt->lmargin = term_len(p, INDENT);
+		mt->offset = term_len(p, INDENT);
 		/* If following a prior empty `SH', no vspace. */
 		if (n->prev && MAN_SH == n->prev->tok)
 			if (NULL == n->prev->body->child)
@@ -760,15 +757,15 @@ pre_RS(DECL_ARGS)
 	}
 
 	if (NULL == (nn = n->parent->head->child)) {
-		mt->offset = mt->lmargin + INDENT;
+		mt->offset = mt->lmargin + term_len(p, INDENT);
 		p->offset = mt->offset;
 		return(1);
 	}
 
-	if ((ival = a2width(nn)) < 0)
+	if ((ival = a2width(p, nn->string)) < 0)
 		return(1);
 
-	mt->offset = INDENT + (size_t)ival;
+	mt->offset = term_len(p, INDENT) + (size_t)ival;
 	p->offset = mt->offset;
 
 	return(1);
@@ -782,13 +779,13 @@ post_RS(DECL_ARGS)
 
 	switch (n->type) {
 	case (MAN_BLOCK):
-		mt->offset = mt->lmargin = INDENT;
+		mt->offset = mt->lmargin = term_len(p, INDENT);
 		break;
 	case (MAN_HEAD):
 		break;
 	default:
 		term_newln(p);
-		p->offset = INDENT;
+		p->offset = term_len(p, INDENT);
 		break;
 	}
 }
@@ -877,7 +874,7 @@ print_man_foot(struct termp *p, const vo
 	term_vspace(p);
 
 	p->flags |= TERMP_NOSPACE | TERMP_NOBREAK;
-	p->rmargin = p->maxrmargin - strlen(buf);
+	p->rmargin = p->maxrmargin - term_strlen(p, buf);
 	p->offset = 0;
 
 	if (meta->source)
@@ -918,14 +915,15 @@ print_man_head(struct termp *p, const vo
 
 	if (m->vol)
 		strlcpy(buf, m->vol, BUFSIZ);
-	buflen = strlen(buf);
+	buflen = term_strlen(p, buf);
 
 	snprintf(title, BUFSIZ, "%s(%s)", m->title, m->msec);
-	titlen = strlen(title);
+	titlen = term_strlen(p, title);
 
 	p->offset = 0;
 	p->rmargin = 2 * (titlen+1) + buflen < p->maxrmargin ?
-	    (p->maxrmargin - strlen(buf) + 1) / 2 :
+	    (p->maxrmargin - 
+	     term_strlen(p, buf) + term_len(p, 1)) / 2 :
 	    p->maxrmargin - buflen;
 	p->flags |= TERMP_NOBREAK | TERMP_NOSPACE;
 
Index: term_ascii.c
===================================================================
RCS file: /usr/vhosts/mdocml.bsd.lv/cvs/mdocml/term_ascii.c,v
retrieving revision 1.4
retrieving revision 1.5
diff -Lterm_ascii.c -Lterm_ascii.c -u -p -r1.4 -r1.5
--- term_ascii.c
+++ term_ascii.c
@@ -35,6 +35,7 @@ static	void		  ascii_letter(struct termp
 static	void		  ascii_begin(struct termp *);
 static	void		  ascii_advance(struct termp *, size_t);
 static	void		  ascii_end(struct termp *);
+static	size_t		  ascii_width(const struct termp *, char);
 
 
 void *
@@ -47,12 +48,16 @@ ascii_alloc(char *outopts)
 	if (NULL == (p = term_alloc(TERMENC_ASCII)))
 		return(NULL);
 
+	p->tabwidth = 5;
+	p->defrmargin = 78;
+
 	p->type = TERMTYPE_CHAR;
 	p->letter = ascii_letter;
 	p->begin = ascii_begin;
 	p->end = ascii_end;
 	p->endline = ascii_endline;
 	p->advance = ascii_advance;
+	p->width = ascii_width;
 
 	toks[0] = "width";
 	toks[1] = NULL;
@@ -71,6 +76,14 @@ ascii_alloc(char *outopts)
 		p->defrmargin = 58;
 
 	return(p);
+}
+
+
+static size_t
+ascii_width(const struct termp *p, char c)
+{
+
+	return(1);
 }
 
 
Index: mdoc_term.c
===================================================================
RCS file: /usr/vhosts/mdocml.bsd.lv/cvs/mdocml/mdoc_term.c,v
retrieving revision 1.156
retrieving revision 1.157
diff -Lmdoc_term.c -Lmdoc_term.c -u -p -r1.156 -r1.157
--- mdoc_term.c
+++ mdoc_term.c
@@ -52,9 +52,9 @@ struct	termact {
 	void	(*post)(DECL_ARGS);
 };
 
-static	size_t	  a2width(const char *);
-static	size_t	  a2height(const struct mdoc_node *);
-static	size_t	  a2offs(const char *);
+static	size_t	  a2width(const struct termp *, const char *);
+static	size_t	  a2height(const struct termp *, const char *);
+static	size_t	  a2offs(const struct termp *, const char *);
 
 static	int	  arg_hasattr(int, const struct mdoc_node *);
 static	int	  arg_getattr(int, const struct mdoc_node *);
@@ -271,7 +271,7 @@ terminal_mdoc(void *arg, const struct md
 
 	p->overstep = 0;
 	p->maxrmargin = p->defrmargin;
-	p->tabwidth = 5;
+	p->tabwidth = term_len(p, 5);
 
 	if (NULL == p->symtab)
 		switch (p->enc) {
@@ -369,14 +369,15 @@ print_mdoc_foot(struct termp *p, const v
 	term_vspace(p);
 
 	p->offset = 0;
-	p->rmargin = (p->maxrmargin - strlen(buf) + 1) / 2;
+	p->rmargin = (p->maxrmargin - 
+			term_strlen(p, buf) + term_len(p, 1)) / 2;
 	p->flags |= TERMP_NOSPACE | TERMP_NOBREAK;
 
 	term_word(p, os);
 	term_flushln(p);
 
 	p->offset = p->rmargin;
-	p->rmargin = p->maxrmargin - strlen(os);
+	p->rmargin = p->maxrmargin - term_strlen(p, os);
 	p->flags |= TERMP_NOLPAD | TERMP_NOSPACE;
 
 	term_word(p, buf);
@@ -432,14 +433,15 @@ print_mdoc_head(struct termp *p, const v
 	snprintf(title, BUFSIZ, "%s(%s)", m->title, m->msec);
 
 	p->offset = 0;
-	p->rmargin = (p->maxrmargin - strlen(buf) + 1) / 2;
+	p->rmargin = (p->maxrmargin - 
+			term_strlen(p, buf) + term_len(p, 1)) / 2;
 	p->flags |= TERMP_NOBREAK | TERMP_NOSPACE;
 
 	term_word(p, title);
 	term_flushln(p);
 
 	p->offset = p->rmargin;
-	p->rmargin = p->maxrmargin - strlen(title);
+	p->rmargin = p->maxrmargin - term_strlen(p, title);
 	p->flags |= TERMP_NOLPAD | TERMP_NOSPACE;
 
 	term_word(p, buf);
@@ -460,34 +462,33 @@ print_mdoc_head(struct termp *p, const v
 
 
 static size_t
-a2height(const struct mdoc_node *n)
+a2height(const struct termp *p, const char *v)
 {
 	struct roffsu	 su;
 
-	assert(MDOC_TEXT == n->type);
-	assert(n->string);
-	if ( ! a2roffsu(n->string, &su, SCALE_VS))
-		SCALE_VS_INIT(&su, strlen(n->string));
+	assert(v);
+	if ( ! a2roffsu(v, &su, SCALE_VS))
+		SCALE_VS_INIT(&su, term_len(p, 1));
 
-	return(term_vspan(&su));
+	return(term_vspan(p, &su));
 }
 
 
 static size_t
-a2width(const char *v)
+a2width(const struct termp *p, const char *v)
 {
 	struct roffsu	 su;
 
 	assert(v);
 	if ( ! a2roffsu(v, &su, SCALE_MAX))
-		SCALE_HS_INIT(&su, strlen(v));
+		SCALE_HS_INIT(&su, term_strlen(p, v));
 
-	return(term_hspan(&su));
+	return(term_hspan(p, &su));
 }
 
 
 static size_t
-a2offs(const char *v)
+a2offs(const struct termp *p, const char *v)
 {
 	struct roffsu	 su;
 
@@ -496,13 +497,13 @@ a2offs(const char *v)
 	else if (0 == strcmp(v, "left"))
 		return(0);
 	else if (0 == strcmp(v, "indent"))
-		return(INDENT + 1);
+		return(term_len(p, INDENT + 1));
 	else if (0 == strcmp(v, "indent-two"))
-		return((INDENT + 1) * 2);
+		return(term_len(p, (INDENT + 1) * 2));
 	else if ( ! a2roffsu(v, &su, SCALE_MAX))
-		SCALE_HS_INIT(&su, strlen(v));
+		SCALE_HS_INIT(&su, term_strlen(p, v));
 
-	return(term_hspan(&su));
+	return(term_hspan(p, &su));
 }
 
 
@@ -644,7 +645,7 @@ termp_it_pre(DECL_ARGS)
 	width = offset = 0;
 
 	if (bl->data.Bl.offs)
-		offset = a2offs(bl->data.Bl.offs);
+		offset = a2offs(p, bl->data.Bl.offs);
 
 	switch (type) {
 	case (LIST_column):
@@ -664,7 +665,8 @@ termp_it_pre(DECL_ARGS)
 		 */
 		ncols = bl->args->argv[col].sz;
 		/* LINTED */
-		dcol = ncols < 5 ? 4 : ncols == 5 ? 3 : 1;
+		dcol = ncols < 5 ? term_len(p, 4) : 
+			ncols == 5 ? term_len(p, 3) : term_len(p, 1);
 
 		/*
 		 * Calculate the offset by applying all prior MDOC_BODY,
@@ -675,7 +677,7 @@ termp_it_pre(DECL_ARGS)
 				nn->prev && i < (int)ncols; 
 				nn = nn->prev, i++)
 			offset += dcol + a2width
-				(bl->args->argv[col].value[i]);
+				(p, bl->args->argv[col].value[i]);
 
 		/*
 		 * When exceeding the declared number of columns, leave
@@ -690,7 +692,7 @@ termp_it_pre(DECL_ARGS)
 		 * Use the declared column widths, extended as explained
 		 * in the preceding paragraph.
 		 */
-		width = a2width(bl->args->argv[col].value[i]) + dcol;
+		width = a2width(p, bl->args->argv[col].value[i]) + dcol;
 		break;
 	default:
 		if (NULL == bl->data.Bl.width)
@@ -702,7 +704,7 @@ termp_it_pre(DECL_ARGS)
 		 * handling for column for how this changes.
 		 */
 		assert(bl->data.Bl.width);
-		width = a2width(bl->data.Bl.width) + 2;
+		width = a2width(p, bl->data.Bl.width) + term_len(p, 2);
 		break;
 	}
 
@@ -718,22 +720,22 @@ termp_it_pre(DECL_ARGS)
 	case (LIST_dash):
 		/* FALLTHROUGH */
 	case (LIST_hyphen):
-		if (width < 4)
-			width = 4;
+		if (width < term_len(p, 4))
+			width = term_len(p, 4);
 		break;
 	case (LIST_enum):
-		if (width < 5)
-			width = 5;
+		if (width < term_len(p, 5))
+			width = term_len(p, 5);
 		break;
 	case (LIST_hang):
 		if (0 == width)
-			width = 8;
+			width = term_len(p, 8);
 		break;
 	case (LIST_column):
 		/* FALLTHROUGH */
 	case (LIST_tag):
 		if (0 == width)
-			width = 10;
+			width = term_len(p, 10);
 		break;
 	default:
 		break;
@@ -1374,7 +1376,7 @@ termp_sh_pre(DECL_ARGS)
 		term_fontpush(p, TERMFONT_BOLD);
 		break;
 	case (MDOC_BODY):
-		p->offset = INDENT;
+		p->offset = term_len(p, INDENT);
 		break;
 	default:
 		break;
@@ -1459,7 +1461,7 @@ termp_d1_pre(DECL_ARGS)
 	if (MDOC_BLOCK != n->type)
 		return(1);
 	term_newln(p);
-	p->offset += (INDENT + 1);
+	p->offset += term_len(p, (INDENT + 1));
 	return(1);
 }
 
@@ -1587,7 +1589,7 @@ termp_bd_pre(DECL_ARGS)
 		return(0);
 
 	if (n->data.Bd.offs)
-		p->offset += a2offs(n->data.Bd.offs);
+		p->offset += a2offs(p, n->data.Bd.offs);
 
 	/*
 	 * If -ragged or -filled are specified, the block does nothing
@@ -1602,7 +1604,7 @@ termp_bd_pre(DECL_ARGS)
 		return(1);
 
 	tabwidth = p->tabwidth;
-	p->tabwidth = 8;
+	p->tabwidth = term_len(p, 8);
 	rm = p->rmargin;
 	rmax = p->maxrmargin;
 	p->rmargin = p->maxrmargin = TERM_MAXMARGIN;
@@ -1777,7 +1779,7 @@ termp_ss_pre(DECL_ARGS)
 		break;
 	case (MDOC_HEAD):
 		term_fontpush(p, TERMFONT_BOLD);
-		p->offset = HALFINDENT;
+		p->offset = term_len(p, HALFINDENT);
 		break;
 	default:
 		break;
@@ -1853,7 +1855,7 @@ termp_sp_pre(DECL_ARGS)
 
 	switch (n->tok) {
 	case (MDOC_sp):
-		len = n->child ? a2height(n->child) : 1;
+		len = n->child ? a2height(p, n->child->string) : 1;
 		break;
 	case (MDOC_br):
 		len = 0;
Index: term_ps.c
===================================================================
RCS file: /usr/vhosts/mdocml.bsd.lv/cvs/mdocml/term_ps.c,v
retrieving revision 1.10
retrieving revision 1.11
diff -Lterm_ps.c -Lterm_ps.c -u -p -r1.10 -r1.11
--- term_ps.c
+++ term_ps.c
@@ -60,6 +60,7 @@ static	void		  ps_end(struct termp *);
 static	void		  ps_advance(struct termp *, size_t);
 static	void		  ps_endline(struct termp *);
 static	void		  ps_fclose(struct termp *);
+static	size_t		  ps_width(const struct termp *, char);
 static	void		  ps_pclose(struct termp *);
 static	void		  ps_pletter(struct termp *, char);
 static	void		  ps_printf(struct termp *, const char *, ...);
@@ -75,12 +76,16 @@ ps_alloc(void)
 	if (NULL == (p = term_alloc(TERMENC_ASCII)))
 		return(NULL);
 
+	p->defrmargin = 78;
+	p->tabwidth = 5;
+
 	p->type = TERMTYPE_PS;
 	p->letter = ps_letter;
 	p->begin = ps_begin;
 	p->end = ps_end;
 	p->advance = ps_advance;
 	p->endline = ps_endline;
+	p->width = ps_width;
 	return(p);
 }
 
@@ -425,3 +430,10 @@ ps_setfont(struct termp *p, enum termfon
 	p->engine.ps.lastf = f;
 }
 
+
+static size_t
+ps_width(const struct termp *p, char c)
+{
+
+	return(1);
+}
--
 To unsubscribe send an email to source+unsubscribe@mdocml.bsd.lv

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2010-06-25 18:53 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2010-06-25 18:53 mdocml: Initial chunks for variable-width fonts kristaps

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).