| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
|
|
|
|
|
|
| |
* 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.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* 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.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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.
|
|
|
|
|
|
|
| |
* src/roff/troff/charinfo.h (charinfo::contains): Add optional
boolean argument.
* src/roff/troff/input.cpp (define_class, charinfo::contains): Check
for cyclic nesting.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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.
|
|
|
|
|
| |
* src/libs/libgroff/relocate.cpp (msw2posixpath): Remove redundant
dereferencing.
|
|
|
|
|
|
|
|
| |
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.
|
|
|
|
|
| |
* src/roff/troff/node.cpp, src/roff/troff/node.h
(space_node::space_node): Remove unused constructor.
|
|
|
|
|
| |
* src/roff/troff/node.cpp (break_char_type): New enum.
(break_char_node::add_self, node::add_char): Use it.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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.
|
|
|
|
|
| |
* src/roff/troff/input.cpp (define_class): Add missing `skip_line'
calls.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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.
|
|
|
|
|
|
|
|
| |
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.
|
|
|
|
|
| |
* src/devices/grohtml/grohtml.man: Document two-pass handling of
input data.
|
|
|
|
|
|
| |
Reported by Dorai Sitaram <ds26gte@yahoo.com>
* src/roff/groff/groff.cpp (main): Fix it.
|
|
|
|
| |
Found by Krzysztof Zelechowski <giecrilj@stegny.2a.pl>
|
|
|
|
|
| |
Reported in
http://lists.gnu.org/archive/html/bug-groff/2010-06/msg00022.html
|
|
|
|
|
| |
* src/utils/afmtodit.pl: Implement it.
* src/utils/afmtodit.man: Document it.
|
|
|
|
| |
Suggested by Krzysztof Zelechowski <giecrilj@stegny.2a.pl>.
|
|
|
|
|
|
|
| |
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'.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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.
|
|
|
|
|
|
|
| |
Reported by Colin Watson <cjwatson@debian.org>.
* src/devices/grohtml/post-html.cpp (get_html_entity): Add U+27E8
and U+27E9.
|
|
|
|
|
|
|
|
|
|
| |
* 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.
|
|
|
|
|
|
| |
* src/preproc/tbl/table.cpp (table::compute_expand_width,
table::compute_separation_factor): Add file name strings to
warnings.
|
| |
|
|
|
|
|
|
| |
This is needed for cooperation with gropdf.
* src/preproc/pic/troff.cpp (troff_output::text): Use GROPS_REG.
|
|
|
|
|
|
|
|
| |
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.
|
|
|
|
|
|
|
|
| |
* 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'.
|
| |
|
| |
|
|
|
|
|
|
| |
Problem reported by Michael Kain <mcain6925@comcast.net>.
* src/preproc/eqn/eqn.man, src/preproc/tbl/tbl.man: Do it.
|
| |
|
| |
|
|
|
|
|
|
|
|
|
| |
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.
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* 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.
|
|
|
|
|
|
|
|
|
|
| |
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.
|
|
|
|
|
|
|
|
|
|
|
|
| |
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.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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.
|
|
|
|
|
|
|
| |
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'.
|
|
|
|
|
|
|
|
|
|
|
| |
* 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.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
`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.
|
|
|
|
|
|
|
|
| |
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.
|
|
|
|
|
| |
to...
(MOSTLYCLEANADD, MOSTLYCLEANNOTSRCDIRADD, MOSTLYCLEANDIRADD): This.
|
| |
|
| |
|
| |
|
| |
|
| |
|
|
|
|
|
| |
table::compute_separation_factor): In warning messages, don't refer
to pages but to input line numbers.
|