From 47cdaf0fdadf72cb7aba9bfecf789e29e518c79b Mon Sep 17 00:00:00 2001 From: Kristaps Dzonsons Date: Tue, 1 Jun 2010 11:47:28 +0000 Subject: Fixed condition of `\}' closing a conditional at the start of the line. Fixed flushed-out condition of \} causing subsequent arguments to be truncated, when in fact the whole line should be passed through (if the conditional succeeds) to the front-end and the \} ignored there. Added regression test of this behaviour. --- chars.c | 4 +- chars.in | 3 +- mandoc.c | 4 +- regress/roff/if/close-rules.in | 95 ++++++++++++++++++++++++++++++++++++++++++ roff.c | 6 +-- 5 files changed, 104 insertions(+), 8 deletions(-) create mode 100644 regress/roff/if/close-rules.in diff --git a/chars.c b/chars.c index 3129aae3..bc688bce 100644 --- a/chars.c +++ b/chars.c @@ -1,4 +1,4 @@ -/* $Id: chars.c,v 1.18 2010/05/25 12:37:20 kristaps Exp $ */ +/* $Id: chars.c,v 1.19 2010/06/01 11:47:28 kristaps Exp $ */ /* * Copyright (c) 2009 Kristaps Dzonsons * @@ -43,7 +43,7 @@ struct ln { #define CHARS_BOTH (CHARS_CHAR | CHARS_STRING) }; -#define LINES_MAX 369 +#define LINES_MAX 370 #define CHAR(w, x, y, z, a, b) \ { NULL, (w), (y), (a), (x), (z), (b), CHARS_CHAR }, diff --git a/chars.in b/chars.in index 0a39697c..fc0834cb 100644 --- a/chars.in +++ b/chars.in @@ -1,4 +1,4 @@ -/* $Id: chars.in,v 1.23 2010/05/16 01:35:37 schwarze Exp $ */ +/* $Id: chars.in,v 1.24 2010/06/01 11:47:28 kristaps Exp $ */ /* * Copyright (c) 2009 Kristaps Dzonsons * @@ -44,6 +44,7 @@ CHAR("%", 1, "", 0, "", 0) CHAR("&", 1, "", 0, "", 0) CHAR("^", 1, "", 0, "", 0) CHAR("|", 1, "", 0, "", 0) +CHAR("}", 1, "", 0, "", 0) /* Accents. */ CHAR("a\"", 2, "\"", 1, "̋", 6) diff --git a/mandoc.c b/mandoc.c index f1ac7c9a..83743b31 100644 --- a/mandoc.c +++ b/mandoc.c @@ -1,4 +1,4 @@ -/* $Id: mandoc.c,v 1.16 2010/05/25 12:37:20 kristaps Exp $ */ +/* $Id: mandoc.c,v 1.17 2010/06/01 11:47:28 kristaps Exp $ */ /* * Copyright (c) 2008, 2009 Kristaps Dzonsons * @@ -61,6 +61,8 @@ mandoc_special(const char *p) /* FALLTHROUGH */ case (' '): /* FALLTHROUGH */ + case ('}'): + /* FALLTHROUGH */ case ('|'): /* FALLTHROUGH */ case ('&'): diff --git a/regress/roff/if/close-rules.in b/regress/roff/if/close-rules.in new file mode 100644 index 00000000..48e82378 --- /dev/null +++ b/regress/roff/if/close-rules.in @@ -0,0 +1,95 @@ +.\" Copyright (c) 1985, 1991 Regents of the University of California. +.\" All rights reserved. +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in the +.\" documentation and/or other materials provided with the distribution. +.\" 4. Neither the name of the University nor the names of its contributors +.\" may be used to endorse or promote products derived from this software +.\" without specific prior written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND +.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE +.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +.\" SUCH DAMAGE. +.\" +.\" from: @(#)erf.3 6.4 (Berkeley) 4/20/91 +.\" $FreeBSD$ +.\" +.Dd April 20, 1991 +.Dt ERF 3 +.Os +.Sh NAME +.Nm erf , +.Nm erff , +.Nm erfc , +.Nm erfcf +.Nd error function operators +.Sh LIBRARY +.Lb libm +.Sh SYNOPSIS +.In math.h +.Ft double +.Fn erf "double x" +.Ft float +.Fn erff "float x" +.Ft double +.Fn erfc "double x" +.Ft float +.Fn erfcf "float x" +.Sh DESCRIPTION +These functions calculate the error function of +.Fa x . +.Pp +The +.Fn erf +and the +.Fn erff +functions calculate the error function of x; where +.Bd -ragged -offset indent +.if n \{\ +erf(x) = 2/sqrt(pi)\(**\|integral from 0 to x of exp(\-t\(**t) dt. +1234 \} asdf +1234 \} asdf +.if t \{\ +erf\|(x) := +(2/\(sr\(*p)\|\(is\d\s8\z0\s10\u\u\s8x\s10\d\|exp(\-t\u\s82\s10\d)\|dt. +4321 \} fdsa +4321 \} fdsa +.Ed +.Pp +The +.Fn erfc +and the +.Fn erfcf +functions calculate the complementary error function of +.Fa x ; +that is +.Fn erfc +subtracts the result of the error function +.Fn erf x +from 1.0. +This is useful, since for large +.Fa x +places disappear. +.Sh SEE ALSO +.Xr math 3 +.Sh HISTORY +The +.Fn erf +and +.Fn erfc +functions appeared in +.Bx 4.3 . diff --git a/roff.c b/roff.c index 8ec71ad7..24aa46e6 100644 --- a/roff.c +++ b/roff.c @@ -1,4 +1,4 @@ -/* $Id: roff.c,v 1.85 2010/05/29 19:41:47 kristaps Exp $ */ +/* $Id: roff.c,v 1.86 2010/06/01 11:47:28 kristaps Exp $ */ /* * Copyright (c) 2010 Kristaps Dzonsons * @@ -666,10 +666,8 @@ roff_cond_text(ROFF_ARGS) return(ROFFRULE_DENY == rr ? ROFF_IGN : ROFF_CONT); } - if (ep > st && '\\' != *(ep - 1)) { - ep = '\0'; + if (ep == st || (ep > st && '\\' != *(ep - 1))) roffnode_pop(r); - } roffnode_cleanscope(r); return(ROFFRULE_DENY == rr ? ROFF_IGN : ROFF_CONT); -- cgit v1.2.3-56-ge451