[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Groff-commit] groff ChangeLog NEWS doc/groff.texinfo man/grof...
From: |
Werner LEMBERG |
Subject: |
[Groff-commit] groff ChangeLog NEWS doc/groff.texinfo man/grof... |
Date: |
Thu, 26 Oct 2006 19:39:07 +0000 |
CVSROOT: /cvsroot/groff
Module name: groff
Changes by: Werner LEMBERG <wl> 06/10/26 19:39:07
Modified files:
. : ChangeLog NEWS
doc : groff.texinfo
man : groff.man groff_diff.man
src/roff/troff : input.cpp input.h
tmac : trace.tmac
Log message:
Add `\%^' escape to handle the parameters to a macro as a string
argument.
* src/roff/troff/input.h (DOUBLE_QUOTE): New special character.
* src/roff/troff/input.cpp (input_iterator, input_stack,
macro_iterator): Add `space_follows_arg' member function.
(macro_iterator::add_arg): Add parameter to set the `space_follows'
flag.
(arg_list): Add member `space_follows'.
Update constructor and all callers.
(decode_args): Store discarded double quotes.
(interpolate_args): Handle DOUBLE_QUOTE.
Add `\%^' escape.
(get_copy, token::next, composite_glyph_name): Handle DOUBLE_QUOTE.
* tmac/trace.tmac: Trace .nr, .ds, .ds1, .as, .as1.
* docs/groff.texinfo (Parameters), man/groff.man,
man/groff_diff.man, NEWS: Document it.
CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/groff/ChangeLog?cvsroot=groff&r1=1.996&r2=1.997
http://cvs.savannah.gnu.org/viewcvs/groff/NEWS?cvsroot=groff&r1=1.221&r2=1.222
http://cvs.savannah.gnu.org/viewcvs/groff/doc/groff.texinfo?cvsroot=groff&r1=1.250&r2=1.251
http://cvs.savannah.gnu.org/viewcvs/groff/man/groff.man?cvsroot=groff&r1=1.82&r2=1.83
http://cvs.savannah.gnu.org/viewcvs/groff/man/groff_diff.man?cvsroot=groff&r1=1.59&r2=1.60
http://cvs.savannah.gnu.org/viewcvs/groff/src/roff/troff/input.cpp?cvsroot=groff&r1=1.42&r2=1.43
http://cvs.savannah.gnu.org/viewcvs/groff/src/roff/troff/input.h?cvsroot=groff&r1=1.7&r2=1.8
http://cvs.savannah.gnu.org/viewcvs/groff/tmac/trace.tmac?cvsroot=groff&r1=1.9&r2=1.10
Patches:
Index: ChangeLog
===================================================================
RCS file: /cvsroot/groff/groff/ChangeLog,v
retrieving revision 1.996
retrieving revision 1.997
diff -u -b -r1.996 -r1.997
--- ChangeLog 24 Oct 2006 18:51:29 -0000 1.996
+++ ChangeLog 26 Oct 2006 19:39:07 -0000 1.997
@@ -1,3 +1,26 @@
+2006-10-26 Werner LEMBERG <address@hidden>
+
+ Add `\%^' escape to handle the parameters to a macro as a string
+ argument.
+
+ * src/roff/troff/input.h (DOUBLE_QUOTE): New special character.
+
+ * src/roff/troff/input.cpp (input_iterator, input_stack,
+ macro_iterator): Add `space_follows_arg' member function.
+ (macro_iterator::add_arg): Add parameter to set the `space_follows'
+ flag.
+ (arg_list): Add member `space_follows'.
+ Update constructor and all callers.
+ (decode_args): Store discarded double quotes.
+ (interpolate_args): Handle DOUBLE_QUOTE.
+ Add `\%^' escape.
+ (get_copy, token::next, composite_glyph_name): Handle DOUBLE_QUOTE.
+
+ * tmac/trace.tmac: Trace .nr, .ds, .ds1, .as, .as1.
+
+ * docs/groff.texinfo (Parameters), man/groff.man,
+ man/groff_diff.man, NEWS: Document it.
+
2006-10-24 Bernd Warken
* Makefile.in (NOMAKEDIRS): Add groffer subdirectories.
Index: NEWS
===================================================================
RCS file: /cvsroot/groff/groff/NEWS,v
retrieving revision 1.221
retrieving revision 1.222
diff -u -b -r1.221 -r1.222
--- NEWS 2 Sep 2006 21:39:33 -0000 1.221
+++ NEWS 26 Oct 2006 19:39:07 -0000 1.222
@@ -57,6 +57,10 @@
environment, then iterates through all of the known environments, printing
each except the one that is current.
+o A new escape `\$^' has been added. It represents the parameters of a
+ macro as if they were an argument to the `ds' request. This is used by
+ `trace.tmac'.
+
Pic
---
@@ -75,7 +79,6 @@
o New option `-c' to output more font information as comments.
-
Macro Packages
--------------
@@ -83,6 +86,7 @@
DragonFly OS.
o -mtrace now shows whether a macro has been called as .foo or as 'foo.
+ It also traces calls to the `nr', `ds', `ds1', `as', and `as1' requests.
o The PSPIC macro now works with all devices (producing a hollow
rectangle on devices which don't support inclusion of PS images) and
Index: doc/groff.texinfo
===================================================================
RCS file: /cvsroot/groff/groff/doc/groff.texinfo,v
retrieving revision 1.250
retrieving revision 1.251
diff -u -b -r1.250 -r1.251
--- doc/groff.texinfo 23 Oct 2006 09:29:44 -0000 1.250
+++ doc/groff.texinfo 26 Oct 2006 19:39:07 -0000 1.251
@@ -11248,6 +11248,30 @@
is preserved (see @ref{Request and Macro Arguments}).
@endDefesc
address@hidden {\\$^, , , }
+Handle the parameters of a macro as if they were an argument to the
address@hidden or similar requests.
+
address@hidden
+.de foo
+. tm $1=`\\$1'
+. tm $2=`\\$2'
+. tm $*=`\\$*'
+. tm $@@=`\\$@@'
+. tm $^=`\\$^'
+..
+.foo " This is a "test"
+ @result{} $1=` This is a '
+ @result{} $2=`test"'
+ @result{} $*=` This is a test"'
+ @result{} $@@=`" This is a " "test""'
+ @result{} $^=`" This is a "test"'
address@hidden
+
+This escape is useful mainly for macro packages like @file{trace.tmac} which
+redefines some requests and macros for debugging purposes.
address@hidden
+
@Defesc {\\$0, , , }
@cindex macro name register (@code{\$0})
@cindex @code{als} request, and @code{\$0}
Index: man/groff.man
===================================================================
RCS file: /cvsroot/groff/groff/man/groff.man,v
retrieving revision 1.82
retrieving revision 1.83
diff -u -b -r1.82 -r1.83
--- man/groff.man 2 Sep 2006 21:39:34 -0000 1.82
+++ man/groff.man 26 Oct 2006 19:39:07 -0000 1.83
@@ -2,7 +2,7 @@
.ig
groff.man
-Last update: 1 Sep 2006
+Last update: 26 Oct 2006
This file is part of groff, the GNU roff type-setting system.
@@ -2516,6 +2516,12 @@
In a macro or string, the concatenation of all the arguments with each
surrounded by double quotes, and separated by spaces.
.
+.ESC $^
+In a macro, the representation of all parameters as if they were an
+argument to the
+.request ds
+request.
+.
.\" --------- escaped characters ---------
.
.ESC \[rs]
Index: man/groff_diff.man
===================================================================
RCS file: /cvsroot/groff/groff/man/groff_diff.man,v
retrieving revision 1.59
retrieving revision 1.60
diff -u -b -r1.59 -r1.60
--- man/groff_diff.man 2 Sep 2006 21:39:34 -0000 1.59
+++ man/groff_diff.man 26 Oct 2006 19:39:07 -0000 1.60
@@ -3,7 +3,7 @@
.ig
groff_diff.man
-Last update : 1 Sep 2006
+Last update : 26 Oct 2006
This file is part of groff, the GNU roff type-setting system.
It is the source of the man-page groff_diff(7).
@@ -697,6 +697,13 @@
surrounded by double quotes, and separated by spaces.
.
.TP
+.B \[rs]$^
+In a macro, the representation of all parameters as if they were an
+argument to the
+.B ds
+request.
+.
+.TP
.BI \[rs]$( nn
.TQ
.BI \[rs]$[ nnn ]
Index: src/roff/troff/input.cpp
===================================================================
RCS file: /cvsroot/groff/groff/src/roff/troff/input.cpp,v
retrieving revision 1.42
retrieving revision 1.43
diff -u -b -r1.42 -r1.43
--- src/roff/troff/input.cpp 10 Sep 2006 08:34:37 -0000 1.42
+++ src/roff/troff/input.cpp 26 Oct 2006 19:39:07 -0000 1.43
@@ -217,6 +217,7 @@
virtual int has_args() { return 0; }
virtual int nargs() { return 0; }
virtual input_iterator *get_arg(int) { return 0; }
+ virtual int space_follows_arg(int) { return 0; }
virtual int get_break_flag() { return 0; }
virtual int get_location(int, const char **, int *) { return 0; }
virtual void backtrace() {}
@@ -417,6 +418,7 @@
static int peek();
static void push(input_iterator *);
static input_iterator *get_arg(int);
+ static int space_follows_arg(int);
static int get_break_flag();
static int nargs();
static int get_location(int, const char **, int *);
@@ -624,6 +626,15 @@
return 0;
}
+int input_stack::space_follows_arg(int i)
+{
+ input_iterator *p;
+ for (p = top; p != 0; p = p->next)
+ if (p->has_args())
+ return p->space_follows_arg(i);
+ return 0;
+}
+
int input_stack::get_break_flag()
{
return top->get_break_flag();
@@ -955,6 +966,8 @@
input_stack::decrease_level();
continue;
}
+ if (c == DOUBLE_QUOTE)
+ continue;
if (c == ESCAPE_NEWLINE) {
if (defining)
return c;
@@ -1707,6 +1720,8 @@
case END_QUOTE:
input_stack::decrease_level();
continue;
+ case DOUBLE_QUOTE:
+ continue;
case EOF:
type = TOKEN_EOF;
return;
@@ -3577,12 +3592,13 @@
struct arg_list {
macro mac;
+ int space_follows;
arg_list *next;
- arg_list(const macro &);
+ arg_list(const macro &, int);
~arg_list();
};
-arg_list::arg_list(const macro &m) : mac(m), next(0)
+arg_list::arg_list(const macro &m, int s) : mac(m), space_follows(s), next(0)
{
}
@@ -3599,11 +3615,12 @@
macro_iterator();
~macro_iterator();
int has_args() { return 1; }
- input_iterator *get_arg(int i);
+ input_iterator *get_arg(int);
+ int space_follows_arg(int);
int get_break_flag() { return with_break; }
int nargs() { return argc; }
- void add_arg(const macro &m);
- void shift(int n);
+ void add_arg(const macro &, int);
+ void shift(int);
int is_macro() { return 1; }
int is_diversion();
};
@@ -3624,12 +3641,26 @@
return 0;
}
-void macro_iterator::add_arg(const macro &m)
+int macro_iterator::space_follows_arg(int i)
+{
+ if (i > 0 && i <= argc) {
+ arg_list *p = args;
+ for (int j = 1; j < i; j++) {
+ assert(p != 0);
+ p = p->next;
+ }
+ return p->space_follows;
+ }
+ else
+ return 0;
+}
+
+void macro_iterator::add_arg(const macro &m, int s)
{
arg_list **p;
for (p = &args; *p; p = &((*p)->next))
;
- *p = new arg_list(m);
+ *p = new arg_list(m, s);
++argc;
}
@@ -3729,15 +3760,18 @@
macro arg;
int quote_input_level = 0;
int done_tab_warning = 0;
+ arg.append(compatible_flag ? PUSH_COMP_MODE : PUSH_GROFF_MODE);
+ // we store discarded double quotes for \$^
if (c == '"') {
+ arg.append(DOUBLE_QUOTE);
quote_input_level = input_stack::get_level();
c = get_copy(&n);
}
- arg.append(compatible_flag ? PUSH_COMP_MODE : PUSH_GROFF_MODE);
while (c != EOF && c != '\n' && !(c == ' ' && quote_input_level == 0)) {
if (quote_input_level > 0 && c == '"'
&& (compatible_flag
|| input_stack::get_level() == quote_input_level)) {
+ arg.append(DOUBLE_QUOTE);
c = get_copy(&n);
if (c == '"') {
arg.append(c);
@@ -3760,7 +3794,7 @@
}
}
arg.append(POP_GROFFCOMP_MODE);
- mi->add_arg(arg);
+ mi->add_arg(arg, (c == ' '));
}
}
}
@@ -3811,7 +3845,7 @@
c = get_copy(&n);
}
}
- mi->add_arg(arg);
+ mi->add_arg(arg, (c == ' '));
}
}
@@ -3917,6 +3951,7 @@
gl.clear();
int c;
while ((c = p->get(0)) != EOF)
+ if (c != DOUBLE_QUOTE)
gl += c;
gl += '\0';
const char *u = glyph_name_to_unicode(gl.contents());
@@ -4233,6 +4268,7 @@
input_iterator *p = input_stack::get_arg(i);
int c;
while ((c = p->get(0)) != EOF)
+ if (c != DOUBLE_QUOTE)
args += c;
if (i != limit)
args += ' ';
@@ -4251,6 +4287,7 @@
input_iterator *p = input_stack::get_arg(i);
int c;
while ((c = p->get(0)) != EOF)
+ if (c != DOUBLE_QUOTE)
args += c;
args += END_QUOTE;
args += '"';
@@ -4262,6 +4299,25 @@
input_stack::push(make_temp_iterator(args.contents()));
}
}
+ else if (s[0] == '^' && s[1] == '\0') {
+ int limit = input_stack::nargs();
+ string args;
+ int c = input_stack::peek();
+ for (int i = 1; i <= limit; i++) {
+ input_iterator *p = input_stack::get_arg(i);
+ while ((c = p->get(0)) != EOF) {
+ if (c == DOUBLE_QUOTE)
+ c = '"';
+ args += c;
+ }
+ if (input_stack::space_follows_arg(i))
+ args += ' ';
+ }
+ if (limit > 0) {
+ args += '\0';
+ input_stack::push(make_temp_iterator(args.contents()));
+ }
+ }
else {
const char *p;
for (p = s; *p && csdigit(*p); p++)
Index: src/roff/troff/input.h
===================================================================
RCS file: /cvsroot/groff/groff/src/roff/troff/input.h,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -b -r1.7 -r1.8
--- src/roff/troff/input.h 26 May 2005 21:02:01 -0000 1.7
+++ src/roff/troff/input.h 26 Oct 2006 19:39:07 -0000 1.8
@@ -1,5 +1,5 @@
// -*- C++ -*-
-/* Copyright (C) 2001, 2004 Free Software Foundation, Inc.
+/* Copyright (C) 2001, 2004, 2006 Free Software Foundation, Inc.
Written by James Clark (address@hidden)
This file is part of groff.
@@ -59,6 +59,7 @@
const int POP_GROFFCOMP_MODE = 0213;
const int BEGIN_QUOTE = 0214;
const int END_QUOTE = 0215;
+const int DOUBLE_QUOTE = 0216;
#else /* IS_EBCDIC_HOST */
@@ -98,6 +99,7 @@
const int POP_GROFFCOMP_MODE = 073;
const int BEGIN_QUOTE = 074;
const int END_QUOTE = 075;
+const int DOUBLE_QUOTE = 076;
#endif /* IS_EBCDIC_HOST */
Index: tmac/trace.tmac
===================================================================
RCS file: /cvsroot/groff/groff/tmac/trace.tmac,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -b -r1.9 -r1.10
--- tmac/trace.tmac 23 Oct 2006 07:59:54 -0000 1.9
+++ tmac/trace.tmac 26 Oct 2006 19:39:07 -0000 1.10
@@ -9,30 +9,61 @@
.
.eo
.
+.rn nr !!nr
+.
+.de nr
+. do tm1 "\*[!!!sp]*** .nr \$*
+. !!nr \$*
+..
+.
+.rn ds !!ds
+.rn ds1 !!ds1
+.rn as !!as
+.rn as1 !!as1
+.
+.de ds
+. do tm1 "\*[!!!sp]*** .ds \$^
+. do !!ds \$^\"
+..
+.
+.de ds1
+. do tm1 "\*[!!!sp]*** .ds1 \$^
+. do !!ds1 \$^\"
+..
+.
+.de as
+. do tm1 "\*[!!!sp]*** .as \$^
+. do !!as \$^\"
+..
+.
+.de as1
+. do tm1 "\*[!!!sp]*** .as1 \$^
+. do !!as1 \$^\"
+..
+.
.rn de !!de
.rn de1 !!de1
.
-.
.!!de de
. do ecs
. ec
. do !!de \$1
-. do ie \\n[.br] .ds !!!br .\"
-. el .do ds !!!br '\"
+. do ie \\n[.br] .!!ds !!!br .\"
+. el .do !!ds !!!br '\"
. ie "\$1"\\$0" .do tm1 "\\*[!!!sp]*** de trace enter: \\*[!!!br]\\$0 \\$@
. el .do tm1 "\\*[!!!sp]*** de trace enter \$1: \\*[!!!br]\\$0 \\$@
-. do as !!!sp " \"
+. do !!as !!!sp " \"
. do ie \\n[.br] .do !!\$1 \\$@
. el 'do !!\$1 \\$@
. do substring !!!sp 1
-. do ie \\n[.br] .ds !!!br .\"
-. el .do ds !!!br '\"
+. do ie \\n[.br] .!!ds !!!br .\"
+. el .do !!ds !!!br '\"
. ie "\$1"\\$0" .do tm1 "\\*[!!!sp]*** trace exit: \\*[!!!br]\\$0 \\$@
. el .do tm1 "\\*[!!!sp]*** trace exit \$1: \\*[!!!br]\\$0 \\$@
\..
.
-. do ds !!d1 !!\$1
-. do ds !!d2 \$2
+. do !!ds !!d1 !!\$1
+. do !!ds !!d2 \$2
.
. do ecr
. do dei !!d1 !!d2
@@ -42,22 +73,22 @@
. do ecs
. ec
. do !!de \$1
-. do ie \\n[.br] .ds !!!br .\"
-. el .do ds !!!br '\"
+. do ie \\n[.br] .!!ds !!!br .\"
+. el .do !!ds !!!br '\"
. ie "\$1"\\$0" .do tm1 "\\*[!!!sp]*** de1 trace enter: \\*[!!!br]\\$0 \\$@
. el .do tm1 "\\*[!!!sp]*** de1 trace enter \$1: \\*[!!!br]\\$0 \\$@
-. do as !!!sp " \"
+. do !!as !!!sp " \"
. do ie \\n[.br] .do !!\$1 \\$@
. el 'do !!\$1 \\$@
. do substring !!!sp 1
-. do ie \\n[.br] .ds !!!br .\"
-. el .do ds !!!br '\"
+. do ie \\n[.br] .!!ds !!!br .\"
+. el .do !!ds !!!br '\"
. ie "\$1"\\$0" .do tm1 "\\*[!!!sp]*** trace exit: \\*[!!!br]\\$0 \\$@
. el .do tm1 "\\*[!!!sp]*** trace exit \$1: \\*[!!!br]\\$0 \\$@
\..
.
-. do ds !!d1 !!\$1
-. do ds !!d2 \$2
+. do !!ds !!d1 !!\$1
+. do !!ds !!d2 \$2
.
. do ecr
. do dei1 !!d1 !!d2
@@ -70,22 +101,22 @@
. do ecs
. ec
. do !!de \$1
-. do ie \\n[.br] .ds !!!br .\"
-. el .do ds !!!br '\"
+. do ie \\n[.br] .!!ds !!!br .\"
+. el .do !!ds !!!br '\"
. ie "\$1"\\$0" .do tm1 "\\*[!!!sp]*** am trace enter: \\*[!!!br]\\$0 \\$@
. el .do tm1 "\\*[!!!sp]*** am trace enter \$1: \\*[!!!br]\\$0 \\$@
-. do as !!!sp " \"
+. do !!as !!!sp " \"
. do ie \\n[.br] .do !!\$1 \\$@
. el 'do !!\$1 \\$@
. do substring !!!sp 1
-. do ie \\n[.br] .ds !!!br .\"
-. el .do ds !!!br '\"
+. do ie \\n[.br] .!!ds !!!br .\"
+. el .do !!ds !!!br '\"
. ie "\$1"\\$0" .do tm1 "\\*[!!!sp]*** trace exit: \\*[!!!br]\\$0 \\$@
. el .do tm1 "\\*[!!!sp]*** trace exit \$1: \\*[!!!br]\\$0 \\$@
\..
.
-. do ds !!a1 !!\$1
-. do ds !!a2 \$2
+. do !!ds !!a1 !!\$1
+. do !!ds !!a2 \$2
.
. do ecr
. do ami !!a1 !!a2
@@ -95,22 +126,22 @@
. do ecs
. ec
. do !!de \$1
-. do ie \\n[.br] .ds !!!br .\"
-. el .do ds !!!br '\"
+. do ie \\n[.br] .!!ds !!!br .\"
+. el .do !!ds !!!br '\"
. ie "\$1"\\$0" .do tm1 "\\*[!!!sp]*** am1 trace enter: \\*[!!!br]\\$0 \\$@
. el .do tm1 "\\*[!!!sp]*** am1 trace enter \$1: \\*[!!!br]\\$0 \\$@
-. do as !!!sp " \"
+. do !!as !!!sp " \"
. do ie \\n[.br] .do !!\$1 \\$@
. el 'do !!\$1 \\$@
. do substring !!!sp 1
-. do ie \\n[.br] .ds !!!br .\"
-. el .do ds !!!br '\"
+. do ie \\n[.br] .!!ds !!!br .\"
+. el .do !!ds !!!br '\"
. ie "\$1"\\$0" .do tm1 "\\*[!!!sp]*** trace exit: \\*[!!!br]\\$0 \\$@
. el .do tm1 "\\*[!!!sp]*** trace exit \$1: \\*[!!!br]\\$0 \\$@
\..
.
-. do ds !!a1 !!\$1
-. do ds !!a2 \$2
+. do !!ds !!a1 !!\$1
+. do !!ds !!a2 \$2
.
. do ecr
. do ami1 !!a1 !!a2
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Groff-commit] groff ChangeLog NEWS doc/groff.texinfo man/grof...,
Werner LEMBERG <=