summaryrefslogtreecommitdiff
path: root/src
Commit message (Collapse)AuthorAgeFilesLines
* Speed up troff.wl2010-12-261-2/+2
| | | | | | | | | | * src/include/ptable.h (PTABLE): Make hash tables much more sparse by changing `FULL_NUM' from 3 to 1. This increases the allocated memory by about 200kByte (which is nothing today) but assures that there aren't extremely long searches for a free hash slot in case that the hash function doesn't return a free one. Due to the nature of the entries in uniuni.cpp, the used hash function in ptable.cpp is not optimal, but using a sparse array compensates this.
* Replace patch from 2010-12-18 with a much faster implementation.wl2010-12-202-262/+54
| | | | | | | | | | | | | | | | | | | * src/roff/troff/node.h (node): Add virtual function `get_break_code'. * src/roff/troff/node.cpp (inter_char_space_node): Remove class completely. (glyph_node::merge_glyph_node): Restore previous version. (break_char_node): Add `prev_break_code' field and update constructors. (node::get_break_code, break_char_node::get_break_code): Implement. (node::add_char): Pass remaining cflags values. (break_char_node::add_self): Use the logic of the now deleted `inter_char_space_node::add_self' function to insert a space node if necessary.
* Speed up access to cflags values.wl2010-12-202-19/+58
| | | | | | | | | | | | | | | | | | | | | | | We now recompute the cflags values for all charinfo objects if `.class' has been called. * src/roff/troff/charinfo.h: Add external references to `class_flag' and `get_flags'. (charinfo): `get_flags' no longer has a return value. (charinfo::overlaps_horizontally, charinfo::overlaps_vertically, charinfo::can_break_before, charinfo::can_break_after, charinfo::can_break_after, charinfo::ends_sentence, charinfo::transparent,, charinfo:ignore_hcodes, charinfo::prohibit_break_before, charinfo::prohibit_break_after, charinfo::inter_char_space): Call global `get_flags' only if necessary. (charinfo::add_to_class): Set `class_flag'. * src/roff/troff/input.cpp (class_flag): New global flag. (charinfo::charinfo): Call `get_flags' member function. (get_flags): New global function which iterates over all entries in the charinfo dictionary. (charinfo::get_flags): Set `flags' directly.
* Protect `.class' against cyclic nesting.wl2010-12-192-10/+34
| | | | | | | * src/roff/troff/charinfo.h (charinfo::contains): Add optional boolean argument. * src/roff/troff/input.cpp (define_class, charinfo::contains): Check for cyclic nesting.
* Improve CJK support with new values for `.cflags'.wl2010-12-183-19/+286
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This patch introduces three new values to `.cflags': don't break before character: 128 don't break after character: 256 allow inter-character break: 512 They are handled differently if compared to other cflags values: (1) hcode values are completely ignored (2) similar to kern values, and contrary to the other cflags values, troff looks at pairs of characters to decide whether a break gets inserted A yet-to-be-written patch should add inter-character spacing if those flags are active; currently, only zero-width breakpoints are inserted. * src/roff/troff/charinfo.h (charinfo): Change type of `flags' to `int'. Update callers accordingly. New enum values `DONT_BREAK_BEFORE', `DONT_BREAK_AFTER', and `INTER_CHAR_SPACE'. New member functions `prohibit_break_before', `prohibit_break_after', and `inter_char_space'. * src/roff/troff/input.cpp: Updated. * src/roff/troff/node.cpp (inter_char_space_node): New class similar to kern_pair_node, collecting charinfo entities with the abovementioned cflags values. (break_char_type): Add new enum values. (glyph_node::merge_glyph_node): Handle abovementioned cflags values and emit an `inter_char_space_node' if necessary. * tmac/ja.tmac: Use new cflags values. * doc/groff.texinfo, NEWS, man/groff_diff.man: Document new values.
* Remove compiler warning.wl2010-12-181-1/+1
| | | | | * src/libs/libgroff/relocate.cpp (msw2posixpath): Remove redundant dereferencing.
* Fix compilation problem.wl2010-12-152-8/+8
| | | | | | | | This issue happens with gcc 4.2.4. * src/roff/troff/node.cpp (node::~node): Move to... * src/roff/troff/node.h: Here. This ensures that the inline member function is publicly visible.
* Remove unused code.wl2010-12-152-7/+1
| | | | | * src/roff/troff/node.cpp, src/roff/troff/node.h (space_node::space_node): Remove unused constructor.
* Use enum to increase readability.wl2010-12-151-7/+13
| | | | | * src/roff/troff/node.cpp (break_char_type): New enum. (break_char_node::add_self, node::add_char): Use it.
* Add wide character support to grotty.wl2010-12-1362-23/+24050
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This is a huge patch, mainly by adding the gnulib infrastructure in a separate directory tree (in `src/libs/gnulib/lib') for its `wcwidth' module. However, the actual changes to native groff source files are just a few lines. * Makefile.comm (INCLUDES): Updated. (LIBGNU): Define. * Makefile.in (NOMAKEDIRS): Updated. (GNULLIBDIRS): Define. (DISTDIRS): Add GNULLIBDIRS. ($LIBDIRS): Depend on GNULLIBDIRS. ($GNULLIBDIRS): New target. * src/libs/libgroff/font.cpp (font::get_width, font::load) [is_unicode]: Use `wcwidth'. * src/roff/troff/Makefile.sub (XLIBS): Add LIBGNU. * src/roff/troff/input.cpp (main): Set LC_CTYPE. * src/devices/grotty/Makefile.sub (XLIBS): Add LIBGNU. * src/devices/grotty/tty.cpp (main): Set LC_CTYPE. * src/libs/gnulib/*: New files. The import was done as follows: . Call gnulib-tool --create-testdir \ --dir=src/libs/gnulib \ wcwidth to get a testbed. . Manually move directories src/libs/gl{lib,m4} to src/libs/{lib,m4}, and do s/gllib/lib/ and s/glm4/m4/ everywhere to `convert' the gnulib testbed to a standard gnulib configuration as maintained by gnulib-tool. . Call gnulib-tool --add-import \ --dir=src/libs/gnulib \ wcwidth to update everything.
* `.class' must not emit empty lines.wl2010-12-131-0/+2
| | | | | * src/roff/troff/input.cpp (define_class): Add missing `skip_line' calls.
* Implement support for character classes.wl2010-12-134-84/+270
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This patch uses standard C++ headers, contrary to the rest of groff. Ideally, everything in groff should be updated to do the same. * src/include/font.h (glyph_to_unicode): New function. * src/libs/libgroff/font.cpp (glyph_to_unicode): Implement it. (font::contains, font::get_code): Use it. * src/roff/troff/charinfo.h: Include <vector> and <utility>. (charinfo): New members `ranges' and `nested_classes'. New member functions `get_unicode_code' and `get_flags'. New member functions `add_to_class', `is_class', and `contains'. (charinfo::overlaps_horizontally, charinfo::overlaps_vertically, charinfo::can_break_before, charinfo::can_break_after, charinfo::can_break_after, charinfo::ends_sentence, charinfo::transparent,, charinfo:ignore_hcodes): Use `get_flags', which handles character classes also. * src/roff/troff/input.cpp (char_class_dictionary): New global variable. (define_class): New function. (init_input_requests): Register `class'. (charinfo::get_unicode_code, charinfo::get_flags, charinfo::contains): Implement it. * NEWS, doc/groff.texinfo (Character Classes), man/groff_diff.man, man/groff.man: Document it.
* Fix crash in tbl with option `nospaces'.wl2010-11-111-1/+2
| | | | | | | | Reported by Louis Guillaume <louis@zabrico.com>. * src/libs/libgroff/string.cpp (string::remove_spaces): If input data consists of spaces only and thus reduces to nothing, set `sz' to 0.
* [grohtml] Improve man page.wl2010-11-021-1/+21
| | | | | * src/devices/grohtml/grohtml.man: Document two-pass handling of input data.
* [groff] Don't use prefix for preconv.wl2010-09-191-4/+4
| | | | | | Reported by Dorai Sitaram <ds26gte@yahoo.com> * src/roff/groff/groff.cpp (main): Fix it.
* Typo.wl2010-07-171-2/+2
| | | | Found by Krzysztof Zelechowski <giecrilj@stegny.2a.pl>
* * src/roff/troff/node.cpp (make_node): Adding missing `%'.wl2010-06-281-1/+1
| | | | | Reported in http://lists.gnu.org/archive/html/bug-groff/2010-06/msg00022.html
* afmtodit: Add option `-o' to specify an output file.wl2010-06-042-8/+21
| | | | | * src/utils/afmtodit.pl: Implement it. * src/utils/afmtodit.man: Document it.
* s/legalize/legalese/ where appropriate.wl2010-06-021-3/+3
| | | | Suggested by Krzysztof Zelechowski <giecrilj@stegny.2a.pl>.
* Don't use obsolete intermediate output command `F'.wl2010-05-281-2/+2
| | | | | | | Reported by Krzysztof Zelechowski <giecrilj@stegny.2a.pl> * src/roff/troff/nodes.cpp (troff_output_file::really_put_filename): Replace `F' command with `x F'.
* Use DESC's `unicode' keyword for grotty.wl2010-05-232-10/+22
| | | | | | | | | | | | | | | Consequently, no longer check directly for the `utf8' device name which prevented the creation of arbitrarily called output device directories like `devunicode'. Problem reported by Christopher Yeleighton <giecrilj@stegny.2a.pl> in Savannah bug #29895. * src/devices/grotty/tty.cpp (tty_printer): Remove `is_utf8' member. Replace all ocurrences with `font::is_unicode'. (tty_printer::tty_printer): Remove argument. * src/devices/grotty/grotty.man: Document `unicode' keyword.
* Handle ditroff command `Dt' without argument gracefully.wl2010-05-091-4/+5
| | | | | | | | | | | | | | | | | | | Without this patch, grotty goes into an infinite loop if it tries to process x T utf8 x res 240 24 40 x init p1 Dt * src/libs/libdriver/input.cpp (get_integer_arg): Emit a fatal error on a non-integer argument, bringing the code into line with the behaviour documented in the header comment. (get_possibly_integer_args): Terminate the loop on a non-integer argument. (next_arg_begin): Return newline or EOF after emitting the corresponding error, rather than continuing on to the next line.
* Fix angle brackets in grohtml.wl2010-02-251-1/+4
| | | | | | | Reported by Colin Watson <cjwatson@debian.org>. * src/devices/grohtml/post-html.cpp (get_html_entity): Add U+27E8 and U+27E9.
* tbl: Add `nowarn' option.wl2010-02-164-14/+28
| | | | | | | | | | * src/preproc/tbl/table.h (table): Add `NOWARN' enumeration value. * src/preproc/tbl/main.cpp (process_options), src/preprox/tbl/table.cpp (table::compute_expand_width, table::compute_separation_factor): Handle `NOWARN'. * src/preproc/tbl/tbl.man, NEWS: Document it.
* Improve `tbl' warnings.wl2010-02-041-4/+7
| | | | | | * src/preproc/tbl/table.cpp (table::compute_expand_width, table::compute_separation_factor): Add file name strings to warnings.
* Refer to groff(1) for the location of temporary files.wl2010-01-203-3/+21
|
* Don't hardcode `ps' device.wl2010-01-021-1/+1
| | | | | | This is needed for cooperation with gropdf. * src/preproc/pic/troff.cpp (troff_output::text): Use GROPS_REG.
* Make patterns with uppercase letters work.wl2009-12-311-1/+1
| | | | | | | | Problem reported by Bjarni Ingi Gislason <bjarniig@rhi.hi.is>. * src/roff/troff/input.cpp (init_hpf_code_table): Use `cmlower'. * doc/groff.texinfo, man/groff_diff.man: Update documentation of `hpfcode' request.
* Fix double frees and memory leaks.wl2009-11-243-8/+12
| | | | | | | | * src/roff/troff/env.cpp (environment::make_tag): Use local object. * src/roff/troff/input.cpp (input_stack::check_end_diversion): Free `diversion_state' here. (interpolate_arg): Fix memory leaks. * src/roff/troff/mtsm.cpp (mtsm::pop_state): Don't free `sp->state'.
* * */*.cpp: Replace `printf(string);' with `printf("%s", string);'.wl2009-11-203-4/+4
|
* Minor fixes suggested by Keith.wl2009-10-282-3/+3
|
* Document limitations with `#' characters, tbl, and eqn.wl2009-10-282-1/+22
| | | | | | Problem reported by Michael Kain <mcain6925@comcast.net>. * src/preproc/eqn/eqn.man, src/preproc/tbl/tbl.man: Do it.
* Improve formatting.wl2009-09-091-2/+6
|
* * src/roff/groff/groff.man: Point to troff(1) for `-w' and `-W'.wl2009-09-091-0/+2
|
* [troff]: Fix hyphenation problem with kerned letters.wl2009-09-081-1/+1
| | | | | | | | | Problem reported by Steve Izma <sizma@golden.net>. * src/roff/troff/node.cpp (kern_pair_node::add_discretionary_hyphen): Compute `tf' using the first node, `n1'. `n2' might be another kerning node, and the `get_tfont' member function isn't defined then.
* [pic] Fix a border case for arc computation.wl2009-09-011-2/+2
| | | | | | | | | | | | | * src/preproc/pic/object.cpp (object_spec::make_arc): It can happen that test `radius < d' in the loop is satisfied, but the difference in the two values is on the order of 1e-10. If `radius' is small, doubling the value can lead to a fairly gross error. The original code appears to have been intended to deal with the situation when radius is orders of magnitude less than `d'. The replacement code simply assigns `radius' the smallest value that avoids problems with the floating point code further on in the routine.
* Make groff compile on Interix.wl2009-06-251-0/+4
| | | | | | | | | | Reported by Jay Krell <jay.krell@cornell.edu>. * configure.ac: Call AC_USE_SYTEM_EXTENSIONS. * src/include/lib.h [__INTERIX]: Define _ALL_SOURCE. * configure: Regenerated.
* pic: Fix handling of nested positions.wl2009-06-161-5/+18
| | | | | | | | | | | | Reported by Doug McIlroy <doug@cs.dartmouth.edu>. * src/preproc/pic/pic.y: Split `expr' into `expr_lower_than' and `expr_not_lower_than' so that we can handle (1/3)<(1/2)<foo,bar>,baz> correctly. Without the patch, `(1/3)<(1/2)' is handled prematurely as a comparison.
* Accept \0 and friends within \o.wl2009-05-072-11/+35
| | | | | | | | | | | | | | Reported by Doug McIlroy <doug@cs.dartmouth.edu>. * src/roff/troff/token.h (token): Add TOKEN_HORIZONTAL_SPACE enumeration value together with `horizontal_space' member function. Add `do_overstrike' as a friend. * src/roff/troff/input.cpp: Use TOKEN_HORIZONTAL_SPACE for \0, \|, \^, and \h. Update all affected places. (do_overstrike): Remove `static' attribute. Accept all escapes which produce a fixed horizontal space.
* Fix a memory leak in troff for -Thtml.wl2009-04-102-5/+10
| | | | | | | Reported by Urs Eggli <Urs.Eggli@zuerich.ch>. * src/roff/troff/node.h (node::~node): Move to... * src/roff/troff/node.cpp: Here. Free `state' and `push_state'.
* Add a new `file' warning category.wl2009-02-213-4/+15
| | | | | | | | | | | * src/roff/troff/troff.h (warning_type): Add WARN_FILE. * src/roff/troff/input.cpp (DEFAULT_WARNING_MASK): Include WARN_FILE. (warning_table): Add `file' category. (macro_source): Convert error on missing macro file to a warning. * NEWS, doc/groff.texinfo (I/O, Warnings), man/groff_diff.man, src/roff/troff/troff.man: Document new warning category.
* Implement a leading spaces macro request, `lsm', in analogy towl2009-02-141-6/+26
| | | | | | | | | | | | | | | | | `blm'. Implement two new number registers, \n[lsn] and \n[lss], which hold the number of spaces and the horizontal space, respectively, which would be inserted if the macro registered by `lsm' wasn't called. * src/roff/troff/input.cpp (leading_spaces_macro_name, leading_spaces_number, leading_spaces_space): New global variables. (leading_spaces_macro): New function. (process_input_stack) <token::TOKEN_SPACE>: Handle `lsm'. (init_input_requests): Register `lsm', \n[lsn], and \n[lss]. * NEWS, man/groff_diff.man, man/groff.man, doc/groff.texinfo (Leading Spaces Traps): Document new requests and registers.
* Fix incorrect grops color state before \X'...'.wl2009-01-191-5/+3
| | | | | | | | Problem reported by Miklos Somogyi <msom@netspace.net.au>. * src/devices/grops/ps.cpp (ps_printer::special): Check color state before doing a PS special and flush buffer. Update called functions.
* * */Makefile.* (CLEANADD, CLEANNOTSRCDIRADD, CLEANDIRADD): Renamedgroff-1_20_1wl2009-01-084-4/+4
| | | | | to... (MOSTLYCLEANADD, MOSTLYCLEANNOTSRCDIRADD, MOSTLYCLEANDIRADD): This.
* Update FDL 1.1 to FDL 1.3.wl2009-01-052-6/+6
|
* Update copyright year.wl2009-01-05217-227/+307
|
* * */*: Update GPL2 to GPL3.wl2009-01-04200-1005/+792
|
* * src/roff/troff/TODO: Mention local variables.wl2009-01-041-0/+2
|
* Update .cvsignore files.wl2009-01-033-0/+7
|
* * src/preproc/tbl/table.cpp (table::compute_expand_width,wl2009-01-031-7/+12
| | | | | table::compute_separation_factor): In warning messages, don't refer to pages but to input line numbers.