diff options
author | wlemb <wlemb> | 2002-05-27 12:41:04 +0000 |
---|---|---|
committer | wlemb <wlemb> | 2002-05-27 12:41:04 +0000 |
commit | 2abf9b7e189a3df377d7d9321a73af4d38846488 (patch) | |
tree | 1eb13d5816a3f397218e9f762fa2889dec24d5fb | |
parent | 1f2f444c93a6f3e242900a5da54c01cd0238bab9 (diff) | |
download | groff-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-- | ChangeLog | 14 | ||||
-rw-r--r-- | Makefile.in | 1 | ||||
-rw-r--r-- | NEWS | 5 | ||||
-rw-r--r-- | doc/groff.texinfo | 20 | ||||
-rw-r--r-- | man/groff.man | 11 | ||||
-rw-r--r-- | man/groff_diff.man | 15 | ||||
-rw-r--r-- | src/roff/troff/div.cc | 2 | ||||
-rw-r--r-- | src/roff/troff/input.cc | 175 |
8 files changed, 161 insertions, 82 deletions
@@ -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)" \ @@ -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); |