summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorwlemb <wlemb>2002-05-27 12:41:04 +0000
committerwlemb <wlemb>2002-05-27 12:41:04 +0000
commit2abf9b7e189a3df377d7d9321a73af4d38846488 (patch)
tree1eb13d5816a3f397218e9f762fa2889dec24d5fb
parent1f2f444c93a6f3e242900a5da54c01cd0238bab9 (diff)
downloadgroff-2abf9b7e189a3df377d7d9321a73af4d38846488.tar.gz
Add .output request, similar to \! at top-level.
* src/roff/troff/input.cc (transparent): Remove unused declaration. (output_request): New function. (init_input_requests): Add it. Sorted. * NEWS, doc/groff.texinfo, man/groff_diff.man, man/groff.man: Document it. * Makefile.in (MDEFINES): Add INSTALL_INFO. * doc/groff.texinfo (@direntry): Fix it.
-rw-r--r--ChangeLog14
-rw-r--r--Makefile.in1
-rw-r--r--NEWS5
-rw-r--r--doc/groff.texinfo20
-rw-r--r--man/groff.man11
-rw-r--r--man/groff_diff.man15
-rw-r--r--src/roff/troff/div.cc2
-rw-r--r--src/roff/troff/input.cc175
8 files changed, 161 insertions, 82 deletions
diff --git a/ChangeLog b/ChangeLog
index c836c782..0eec4dd3 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,17 @@
+2002-05-26 Werner LEMBERG <wl@gnu.org>
+
+ Add .output request, similar to \! at top-level.
+
+ * src/roff/troff/input.cc (transparent): Remove unused declaration.
+ (output_request): New function.
+ (init_input_requests): Add it.
+ Sorted.
+ * NEWS, doc/groff.texinfo, man/groff_diff.man, man/groff.man:
+ Document it.
+
+ * Makefile.in (MDEFINES): Add INSTALL_INFO.
+ * doc/groff.texinfo (@direntry): Fix it.
+
2002-05-25 Werner LEMBERG <wl@gnu.org>
Including the doc subdir into groff's Makefile system.
diff --git a/Makefile.in b/Makefile.in
index 2677c77b..6830a36a 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -367,6 +367,7 @@ MDEFINES= \
"INSTALL_PROGRAM=$(INSTALL_PROGRAM)" \
"INSTALL_SCRIPT=$(INSTALL_SCRIPT)" \
"INSTALL_DATA=$(INSTALL_DATA)" \
+ "INSTALL_INFO=$(INSTALL_INFO)" \
"ETAGS=$(ETAGS)" \
"ETAGSFLAGS=$(ETAGSFLAGS)" \
"ETAGSCCFLAG=$(ETAGSCCFLAG)" \
diff --git a/NEWS b/NEWS
index 32741636..e037fb00 100644
--- a/NEWS
+++ b/NEWS
@@ -559,6 +559,11 @@ o Two new requests `tm1' and `tmc' have been added to improve writing
messages to the terminal. `tm1' is similar to `tm' but allows leading
whitespace. `tmc' is similar to `tm1' but doesn't emit a final newline.
+o For compatibility with sqtroff, the request `output' has been added.
+ The behaviour is similar to `\!' at the top-level, that is, it directly
+ inserts its argument into the intermediate output format. The syntax
+ is similar to .tm1, allowing leading whitespace.
+
o The new `spreadwarn' request will make troff warn if spaces in an output
line are widened by a given limit or more.
diff --git a/doc/groff.texinfo b/doc/groff.texinfo
index 1d9f3c1b..309f9965 100644
--- a/doc/groff.texinfo
+++ b/doc/groff.texinfo
@@ -373,7 +373,7 @@ Software Foundation raise funds for GNU development.''
@dircategory Miscellaneous
@direntry
-* Groff: (groff)The GNU troff document formatting system.
+* Groff: (groff). The GNU troff document formatting system.
@end direntry
@@ -10888,6 +10888,24 @@ The @code{\?} escape used in the top-level diversion produces no output
at all; its argument is simply ignored.
@endDefesc
+@cindex @code{\!}, and @code{output}
+@cindex @code{output} request, and @code{\!}
+@Defreq {output, string}
+Emit @var{string} directly to the @code{gtroff} intermediate output
+(subject to copy-mode interpretation); this is similar to @code{\!} used
+at the top level. An initial double quote in @var{string} is stripped off
+to allow initial blanks.
+
+This request can't be used before the first page has started -- if you get
+an error, simply insert @code{.br} before the @code{output} request.
+
+Without argument, @code{output} is ignored.
+
+Use with caution! It is normally only needed for mark-up used by a
+postprocessor which does something with the output before sending it to
+the output device, filtering out @code{string} again.
+@endDefreq
+
@Defreq {asciify, div}
@cindex unformatting diversions (@code{asciify})
@cindex diversion, unformatting (@code{asciify})
diff --git a/man/groff.man b/man/groff.man
index bfa0420e..95ed8bd8 100644
--- a/man/groff.man
+++ b/man/groff.man
@@ -2,7 +2,7 @@
.ig
groff.man
-Last update: 11 May 2002
+Last update: 27 May 2002
This file is part of groff, the GNU roff type-setting system.
@@ -1829,6 +1829,15 @@ Output vertical distance that was saved by the
.request sv
request.
.
+.REQ .output string
+Emit
+.I string
+directly to intermediate output, allowing leading whitespace if
+.I string
+starts with
+.character \[dq]
+(which will be stripped off).
+.
.REQ .pc
Reset page number character to\~\c
.squoted_char % .
diff --git a/man/groff_diff.man b/man/groff_diff.man
index 6cec4a5a..07a8d951 100644
--- a/man/groff_diff.man
+++ b/man/groff_diff.man
@@ -3,7 +3,7 @@
.ig
groff_diff.man
-Last update : 22 May 2002
+Last update : 27 May 2002
This file is part of groff, the GNU roff type-setting system.
It is the source of the man-page groff_diff(7).
@@ -1751,6 +1751,19 @@ but if
exists, append to it instead of truncating it.
.
.TP
+.BI .output\ string
+Emit
+.I string
+directly to the intermediate output (subject to copy-mode interpretation);
+this is similar to
+.B \[rs]!
+used at the top level.
+.
+An initial double quote in
+.I string
+is stripped off to allow initial blanks.
+.
+.TP
.B .pnr
Print the names and contents of all currently defined number registers
on stderr.
diff --git a/src/roff/troff/div.cc b/src/roff/troff/div.cc
index 3d886449..718fde32 100644
--- a/src/roff/troff/div.cc
+++ b/src/roff/troff/div.cc
@@ -410,7 +410,7 @@ void top_level_diversion::output(node *nd, int retain_size,
void top_level_diversion::transparent_output(unsigned char c)
{
if (before_first_page && begin_page())
- // This can only happen with the transparent() request.
+ // This can only happen with the .output request.
fatal("sorry, I didn't manage to begin the first page in time: use an explicit .br request");
const char *s = asciify(c);
while (*s)
diff --git a/src/roff/troff/input.cc b/src/roff/troff/input.cc
index 9f04e37c..4e32a3c1 100644
--- a/src/roff/troff/input.cc
+++ b/src/roff/troff/input.cc
@@ -86,7 +86,6 @@ void copy_file();
#ifdef COLUMN
void vjustify();
#endif /* COLUMN */
-void transparent();
void transparent_file();
void process_input_stack();
@@ -4652,6 +4651,25 @@ node *do_special()
return new special_node(mac);
}
+void output_request()
+{
+ if (!tok.newline() && !tok.eof()) {
+ int c;
+ for (;;) {
+ c = get_copy(0);
+ if (c == '"') {
+ c = get_copy(0);
+ break;
+ }
+ if (c != ' ' && c != '\t')
+ break;
+ }
+ for (; c != '\n' && c != EOF; c = get_copy(0))
+ topdiv->transparent_output(c);
+ topdiv->transparent_output('\n');
+ }
+}
+
extern int image_no; // from node.cc
static node *do_suppress(symbol nm)
@@ -6849,121 +6867,122 @@ void get_output_registers(int *minx, int *miny, int *maxx, int *maxy)
void init_input_requests()
{
- init_request("ds", define_string);
+ init_request("ab", abort_request);
+ init_request("als", alias_macro);
+ init_request("am", append_macro);
+ init_request("am1", append_nocomp_macro);
+ init_request("ami", append_indirect_macro);
init_request("as", append_string);
- init_request("ds1", define_nocomp_string);
init_request("as1", append_nocomp_string);
+ init_request("asciify", asciify_macro);
+ init_request("backtrace", backtrace_request);
+ init_request("blm", blank_line_macro);
+ init_request("break", while_break_request);
+ init_request("cf", copy_file);
+ init_request("cflags", char_flags);
+ init_request("char", define_character);
+ init_request("chop", chop_macro);
+ init_request("close", close_request);
+ init_request("continue", while_continue_request);
+ init_request("cp", compatible);
init_request("de", define_macro);
- init_request("dei", define_indirect_macro);
init_request("de1", define_nocomp_macro);
- init_request("am", append_macro);
- init_request("ami", append_indirect_macro);
- init_request("am1", append_nocomp_macro);
+ init_request("defcolor", define_color);
+ init_request("dei", define_indirect_macro);
+ init_request("do", do_request);
+ init_request("ds", define_string);
+ init_request("ds1", define_nocomp_string);
+ init_request("ec", set_escape_char);
+ init_request("ecr", restore_escape_char);
+ init_request("ecs", save_escape_char);
+ init_request("el", else_request);
+ init_request("em", end_macro);
+ init_request("eo", escape_off);
+ init_request("ex", exit_request);
+ init_request("fchar", define_fallback_character);
+#ifdef WIDOW_CONTROL
+ init_request("fpl", flush_pending_lines);
+#endif /* WIDOW_CONTROL */
+ init_request("hcode", hyphenation_code);
+ init_request("hpfcode", hyphenation_patterns_file_code);
+ init_request("ie", if_else_request);
+ init_request("if", if_request);
init_request("ig", ignore);
- init_request("rm", remove_macro);
- init_request("rn", rename_macro);
+ init_request("length", length_macro);
+ init_request("lf", line_file);
+ init_request("mso", macro_source);
init_request("nop", nop_request);
- init_request("if", if_request);
- init_request("ie", if_else_request);
- init_request("el", else_request);
- init_request("so", source);
init_request("nx", next_file);
- init_request("pm", print_macros);
- init_request("eo", escape_off);
- init_request("ec", set_escape_char);
- init_request("ecs", save_escape_char);
- init_request("ecr", restore_escape_char);
+ init_request("open", open_request);
+ init_request("opena", opena_request);
+ init_request("output", output_request);
init_request("pc", set_page_character);
+ init_request("pi", pipe_output);
+ init_request("pm", print_macros);
+ init_request("psbb", ps_bbox_request);
+#ifndef POPEN_MISSING
+ init_request("pso", pipe_source);
+#endif /* not POPEN_MISSING */
+ init_request("rchar", remove_character);
+ init_request("rd", read_request);
+ init_request("return", return_macro_request);
+ init_request("rm", remove_macro);
+ init_request("rn", rename_macro);
+ init_request("shift", shift);
+ init_request("so", source);
+ init_request("spreadwarn", spreadwarn_request);
+ init_request("substring", substring_macro);
+ init_request("sy", system_request);
init_request("tm", terminal);
init_request("tm1", terminal1);
init_request("tmc", terminal_continue);
- init_request("ex", exit_request);
- init_request("return", return_macro_request);
- init_request("em", end_macro);
- init_request("blm", blank_line_macro);
init_request("tr", translate);
- init_request("trnt", translate_no_transparent);
+ init_request("trf", transparent_file);
init_request("trin", translate_input);
- init_request("ab", abort_request);
- init_request("pi", pipe_output);
- init_request("cf", copy_file);
- init_request("sy", system_request);
- init_request("lf", line_file);
- init_request("cflags", char_flags);
- init_request("shift", shift);
- init_request("rd", read_request);
- init_request("cp", compatible);
- init_request("char", define_character);
- init_request("fchar", define_fallback_character);
- init_request("rchar", remove_character);
- init_request("hcode", hyphenation_code);
- init_request("hpfcode", hyphenation_patterns_file_code);
- init_request("while", while_request);
- init_request("break", while_break_request);
- init_request("continue", while_continue_request);
- init_request("als", alias_macro);
- init_request("backtrace", backtrace_request);
- init_request("chop", chop_macro);
- init_request("substring", substring_macro);
- init_request("length", length_macro);
- init_request("asciify", asciify_macro);
+ init_request("trnt", translate_no_transparent);
init_request("unformat", unformat_macro);
init_request("warn", warn_request);
- init_request("open", open_request);
- init_request("opena", opena_request);
- init_request("close", close_request);
+ init_request("while", while_request);
init_request("write", write_request);
init_request("writec", write_request_continue);
init_request("writem", write_macro_request);
- init_request("trf", transparent_file);
-#ifdef WIDOW_CONTROL
- init_request("fpl", flush_pending_lines);
-#endif /* WIDOW_CONTROL */
init_request("nroff", nroff_request);
init_request("troff", troff_request);
#ifdef COLUMN
init_request("vj", vjustify);
#endif /* COLUMN */
- init_request("mso", macro_source);
- init_request("do", do_request);
-#ifndef POPEN_MISSING
- init_request("pso", pipe_source);
-#endif /* not POPEN_MISSING */
- init_request("psbb", ps_bbox_request);
- init_request("defcolor", define_color);
init_request("warnscale", warnscale_request);
- init_request("spreadwarn", spreadwarn_request);
- number_reg_dictionary.define("systat", new variable_reg(&system_status));
- number_reg_dictionary.define("slimit",
- new variable_reg(&input_stack::limit));
number_reg_dictionary.define(".$", new nargs_reg);
- number_reg_dictionary.define(".c", new lineno_reg);
- number_reg_dictionary.define("c.", new writable_lineno_reg);
- number_reg_dictionary.define(".F", new filename_reg);
number_reg_dictionary.define(".C", new constant_int_reg(&compatible_flag));
+ number_reg_dictionary.define(".F", new filename_reg);
number_reg_dictionary.define(".H", new constant_int_reg(&hresolution));
- number_reg_dictionary.define(".V", new constant_int_reg(&vresolution));
number_reg_dictionary.define(".R", new constant_reg("10000"));
- extern const char *major_version;
- number_reg_dictionary.define(".x", new constant_reg(major_version));
- extern const char *minor_version;
- number_reg_dictionary.define(".y", new constant_reg(minor_version));
+ number_reg_dictionary.define(".V", new constant_int_reg(&vresolution));
extern const char *revision;
number_reg_dictionary.define(".Y", new constant_reg(revision));
+ number_reg_dictionary.define(".c", new lineno_reg);
number_reg_dictionary.define(".g", new constant_reg("1"));
number_reg_dictionary.define(".warn", new constant_int_reg(&warning_mask));
+ extern const char *major_version;
+ number_reg_dictionary.define(".x", new constant_reg(major_version));
+ extern const char *minor_version;
+ number_reg_dictionary.define(".y", new constant_reg(minor_version));
+ number_reg_dictionary.define("c.", new writable_lineno_reg);
number_reg_dictionary.define("llx", new variable_reg(&llx_reg_contents));
number_reg_dictionary.define("lly", new variable_reg(&lly_reg_contents));
- number_reg_dictionary.define("urx", new variable_reg(&urx_reg_contents));
- number_reg_dictionary.define("ury", new variable_reg(&ury_reg_contents));
- number_reg_dictionary.define("opminx",
- new variable_reg(&output_reg_minx_contents));
- number_reg_dictionary.define("opminy",
- new variable_reg(&output_reg_miny_contents));
number_reg_dictionary.define("opmaxx",
new variable_reg(&output_reg_maxx_contents));
number_reg_dictionary.define("opmaxy",
new variable_reg(&output_reg_maxy_contents));
+ number_reg_dictionary.define("opminx",
+ new variable_reg(&output_reg_minx_contents));
+ number_reg_dictionary.define("opminy",
+ new variable_reg(&output_reg_miny_contents));
+ number_reg_dictionary.define("slimit",
+ new variable_reg(&input_stack::limit));
+ number_reg_dictionary.define("systat", new variable_reg(&system_status));
+ number_reg_dictionary.define("urx", new variable_reg(&urx_reg_contents));
+ number_reg_dictionary.define("ury", new variable_reg(&ury_reg_contents));
}
object_dictionary request_dictionary(501);