head	1.11;
access;
symbols
	groff-1_20_1_real:1.11
	groff-1_20_1:1.11
	groff-1_20:1.11
	groff-1_19_2:1.8
	FDL:1.8
	groff-1_19_1:1.8
	groff-1_19:1.8
	groff-1_18_1:1.8
	groff-1_18:1.8
	groff-1_17_2:1.7
	groff-1_17_1:1.7
	groff-1_17a:1.7
	groff-1_17:1.7
	groff-1_16_1b:1.4
	groff-1_16_1a:1.4
	groff-1_16_1:1.4
	groff-1_16:1.4
	groff-20000311:1.4
	groff-20000310-1:1.4
	groff-20000310:1.4
	pre-1_16:1.1.1.1
	start:1.1.1.1
	wlemb:1.1.1;
locks; strict;
comment	@# @;


1.11
date	2009.01.04.07.50.54;	author wl;	state Exp;
branches;
next	1.10;
commitid	kHNX2lzPPffDC6xt;

1.10
date	2006.07.12.19.31.09;	author wl;	state Exp;
branches;
next	1.9;

1.9
date	2006.04.04.20.20.04;	author wl;	state Exp;
branches;
next	1.8;

1.8
date	2001.12.22.23.45.52;	author wlemb;	state Exp;
branches;
next	1.7;

1.7
date	2001.03.09.00.18.21;	author wlemb;	state Exp;
branches;
next	1.6;

1.6
date	2000.12.02.21.18.03;	author wlemb;	state Exp;
branches;
next	1.5;

1.5
date	2000.08.30.19.42.56;	author wlemb;	state Exp;
branches;
next	1.4;

1.4
date	2000.03.07.08.26.49;	author wlemb;	state Exp;
branches;
next	1.3;

1.3
date	2000.02.11.22.17.10;	author wlemb;	state Exp;
branches;
next	1.2;

1.2
date	2000.02.11.16.26.46;	author wlemb;	state Exp;
branches;
next	1.1;

1.1
date	2000.02.06.09.36.30;	author wlemb;	state Exp;
branches
	1.1.1.1;
next	;

1.1.1.1
date	2000.02.06.09.36.30;	author wlemb;	state Exp;
branches;
next	;


desc
@@


1.11
log
@

* src/roff/troff/TODO: Mention local variables.
@
text
@A line prefix request to make e.g. French quotation possible:

  He said: >> blablablabla
  >> blablabla blabla  bla
  >> blabla blabla bla bla
  >> bla bla bla blablabla
  >> blabla. <<

Give a more helpful error message when the indent is set to a value
greater than the line-length.

Tracing. This is a pain to implement because requests are responsible
for reading their own arguments.

Possibly implement -s option (stop every N pages). This functionality
would be more appropriate in a postprocessor.

Line breaking should be smarter.  In particular, it should be possible
to shrink spaces.  Also avoid having a line that's been shrunk a lot
next to a line that's been stretched a lot.  The difficulty is to
design a mechanism that allows the user complete control over the
decision of where to break the line.

Provide a mechanism to control the shape of the rag in non-justified
text.

Add a discretionary break escape sequence. \='...'...'...' like TeX.

Think about kerning between characters and spaces. (Need to implement
get_breakpoints and split methods for kern_pair_node class.)

In troff, if .L > 1 when a diversion is reread in no-fill mode, then
extra line-spacing is added on. Groff at the moment treats line-spacing
like vertical spacing and doesn't do this. 

Suppose \(ch comes from a special font S, and that the current font is
R. Suppose that R contains a hyphen character and that S does not.
Suppose that the current font is R. Suppose that \(ch is in a word
and has a non-zero hyphen-type. Then we ought to be able to hyphenate,
but we won't be able to because we will look for the hyphen only in
font S and not in font R.

Perhaps the current input level should be accessible in a number register.

Should \w deal with a newline like \X?

Have another look at uses of token::delimiter.  Perhaps we need to
distinguish the case where we want to see if a token could start a
number, from the case where we want to see if it could occur somewhere
in a number expression.

Provide a facility like copy thru in pic.

Fancier implementation of font families which doesn't group fonts into
families purely on the basis of their names.

In the DESC file make the number of fonts optional if they are all on
one line.

Number register to give the diversion level.

Time various alternative implementations of scale (both in font.c and
number.c). On a sparc it's faster to always do it in floating point.

Devise a more compact representation for the hyphenation patterns trie.

Have a per-environment parameter to increase letter-spacing.

Request to set character height.

Request to set character slant.

Provide some way to upcase or downcase strings.

Support non-uniformly scalable fonts. Perhaps associate a suffix with
a particular range of sizes.  eg
  sizesuffix .display 14-512
Then is you ask for R at pointsize 16, groff will first look for
R.display and then R.  Probably necessary to be able to specify a
separate unitwidth for each sizesuffix (eg. for X).

Make it possible to suppress hyphenation on a word-by-word basis.
(Perhaps store hyphenation flags in tfont.)

Possibly allow multiple simultaneous input line traps.

Unpaddable, breakable space escape sequence.

Support hanging punctuation.

In justified text, if the last line of a paragraph is only a little
bit short it might be desirable to justify the line.  Allow the user
control over this.

The pm request could print where the macro was defined.  Also could
optionally print the contents of a macro.

Provide some way to round numbers to multiples of the current
horizontal or vertical resolution.

Better string-processing support (search).

Generalized ligatures.

Request to remove an environment. (Maintain a count of the references
to the environment from the environment table, environment dictionary
or environment stack.)

Perhaps in the nr request a leading `-' should only be recognized as a
decrement when it's at the same input level as the request.

Don't ever change a charinfo.  Create new variants instead and chain
them together.

Unix troff appears to read the first character of a request name in
copy mode.  Should we do the same?

Number register giving name of end macro.

More thorough range checking.

Provide syntax for octal and hexadecimal numeric constants.  Perhaps
o#100 and x#7f as per Scheme.  Or perhaps PostScript 16#7f.  Ambiguity
between whether `c' is treated as digit or scaling indicator.

Local variables.
@


1.10
log
@

Add a request `.fzoom' and a number register `.zoom' to magnify
fonts.

* src/include/font.h (font): Add member variable `zoom'.
Add member functions `set_zoom' and `get_zoom'.
Remove `static' attribute from `scale' member function.

* src/libs/libgroff/font.cpp (font::font): Updated.
(scale_round): New version with three parameters to handle zoom
factor.
(font::scale, font::get_width): Handle zoom factor.
(font::set_zoom, font::get_zoom): New functions.
(font::load): Handle `zoom' while computing `space_width'.

* src/roff/troff/env.h: Declare `env_get_zoom'.
(environment): Add member function `get_zoom'.

* src/roff/troff/env.cpp (environment::get_zoom): New function.
(init_env_requests): Initialize `.zoom' register.

* src/roff/troff/node.cpp (font_info): New member functions
`set_zoom' and `get_zoom'.
(tfont): New member function `get_zoom'.
(env_get_zoom): New function.
(troff_output_file::set_font): Handle zoom factor.
(font_zoom_request): New function.
(init_node_requests): Initialize `fzoom' request.

* docs/groff.texinfo (Changing Fonts), man/groff.man,
man/groff_diff.man, NEWS: Document `fzoom' request and `.zoom'
register.

* src/roff/troff/TODO: Updated.
@
text
@d125 2
@


1.9
log
@

Implement new number register `.br' which is set to 1 if a macro has
been called as .foo and to 0 if called as 'bar.  This is useful for
-mtrace so that requests can be reliably traced too.

* src/roff/troff/input.cpp (input_iterator): Add virtual function
`get_break_flag'.
(macro_iterator): Add `with_break' member and `get_break_flag'
function.
Update constructors.
(input_stack): Add function `get_break_flag'.
(break_flag_reg): New number register class.
(input_init_requests): Register `.br'.

* src/roff/troff/TODO: Updated.

* tmac/trace.tmac: s/!!sp/!!!sp/.
Modify definitions of `de', `de1', `am', and `am1' to use \n[.br].

* docs/groff.texinfo, man/groff.man, man/groff_diff.man, NEWS:
Document it.
@
text
@a68 4
Number register to return character height.

Number register to return character slant.

@


1.8
log
@
Adding an `itc' request (input line trap accepting \c).

* src/roff/troff/env.h (environment): New member
`continued_input_trap'.
Make `do_input_trap' a friend function instead of `input_trap'.
* src/roff/troff/env.cc (environment::environment,
environment::copy): Updated.
(environment::newline): Implement it.
(do_input_trap): New function.
(input_trap): Call `do_input_trap'.
(input_trap_continued): New function.
(init_env_requests): Updated.
* src/roff/troff/TODO: Updated.

* tmac/an-old.tmac (SH, SS, B, I, SM, SB, TP): Use `.itc' instead of
`.it'.

* src/preproc/grn/hdb.cc (DBRead): Really chop after 127 characters.
@
text
@a108 3
Provide some way for a macro to tell whether it was called with `'' or
`.'.  This would be useful for implementing a tracing macro package.

@


1.7
log
@Added the `return' request to end a macro immediately.  It simply
pops iterators from the input stack until a macro iterator is found.

* src/roff/troff/input.cc (input_iterator::is_macro,
macro_iterator::is_macro): New member.
(input_return_boundary): New class to signal an immediate return
to while_request().
(input_stack::add_return_boundary, input_stack::is_return_boundary):
New functions.
(input_stack::clear): Use it.
(input_stack::pop_macro): New function.
(while_request): Use `is_return_boundary()'.
(return_macro_request): New function.
(init_input_requests): Use it.

* src/roff/troff/TODO: Updated.
* NEWS, src/roff/troff/troff.man, man/groff.man: Document it.


* src/roff/troff/input.cc (input_iterator::is_boundary): Minor
cleanup.
@
text
@a85 3
Variant of `.it' for which a line interrupted with \c counts as one
input line.

@


1.6
log
@Fixing a bug which prevented hyphenation in words followed
immediately by a TOKEN_NODE (e.g. ` ', `~', etc.).

* src/roff/troff/input.cc (process_input_stack <token::TOKEN_NODE>):
Adding possibly_break_line().
* src/roff/troff/env.h (environment): Make possibly_break_line()
public.

Make `~' usable in .tr request.

* src/roff/troff/token.h (token_type): Add TOKEN_STRETCHABLE_SPACE.
(token): Add stretchable_space().
* src/roff/troff/input.cc (token::next, token::delimiter,
token::description, process_input_stack, do_translate,
add_to_node_list, token::process): Use it.
* src/roff/troff/node.h (node): Add fourth parameter to add_char()
for adjusting the space.
* src/roff/troff/node.cc (node::add_char): Implement it.  Add code
for stretchable space.
* src/roff/troff/input.cc (token::add_to_node_list): Use it.
(make_node): Add code for stretchable space.
* src/roff/troff/env.cc (environment::add_char): Use it.
* src/roff/troff/input.cc: Add ESCAPE_TILDE special character.
(get_copy, token::next, transparent_translate, asciify): Use it.

* NEWS, src/roff/troff/troff.man, src/roff/troff/TODO,
doc/groff.texinfo: Updated.
* man/groff.man: Small reorderings.
@
text
@a134 3

Request to return from a macro (ie ignore the rest of the current
input level).
@


1.5
log
@* src/roff/troff/TODO: Updated.
@
text
@d27 1
a27 1
Add a discretionary break escape sequence. \B'...'...'...' like TeX.
a42 2
Variant of tm which doesn't write a newline.

a123 2

Make it possible to tr characters onto \~.
@


1.4
log
@* doc/groff.texinfo: Spelling fixes.

* src/roff/troff/TODO: Updated.

* tmac/eqnrc: Small fixes.
@
text
@d1 8
a102 4

Have a blank line macro like the end macro.  When a blank line macro
has been set, then a blank line causes the blank line macro to be
called rather than doing the equivalent of .sp.
@


1.3
log
@A new request `length' is available which returns the length of a
string in a number register:

* src/roff/troff/input.cc (length_macro): Implement it.
* src/roff/troff/input.cc (init_input_requests): Register it.


* src/roff/troff/troff.man, doc/groff.texinfo: Document `length'
request.
@
text
@a79 2
Request to copy an environment into the current environment.

@


1.2
log
@* doc/groff.texinfo, src/roff/troff/troff.man: Add documentation
of the `substring' request.
* src/roff/troff/TODO, NEWS: Updated.
@
text
@d108 1
a108 1
Better string-processing support (length, search).
@


1.1
log
@Initial revision
@
text
@d108 1
a108 1
Better string-processing support (substring, length, search).
@


1.1.1.1
log
@groff pre-1.16 with new directory structure
@
text
@@
