summaryrefslogtreecommitdiffstats
Commit message (Collapse)AuthorAgeFilesLines
...
* If a block body gets broken, that's no good reason to extend theIngo Schwarze2015-04-291-1/+3
| | | | | | | scope of the end macro. Instead, only keep the tail scope open if the end macro macro calls an explicit macro and actually breaks that. This corrects syntax tree structure and fixes an assertion found by jsg@ with afl (test case 098/Apr27).
* Replace the kludge for the \z escape sequence by an actualIngo Schwarze2015-04-293-53/+35
| | | | | | | | implementation. As a side effect, minus ten lines of code. As another side effect, this also fixes the assertion failure that used to be triggered by "\z\o'ab'c" at the beginning of an output line, found by jsg@ with afl (test case 022/Apr27).
* Do not mark a block with the MDOC_BROKEN flag if it merely containsIngo Schwarze2015-04-291-0/+2
| | | | | | a mismatching explicit end macro without actually being broken. Avoids a subsequent upward search for the non-existent breaker ending up in a NULL pointer access; afl test case 005/Apr27 from jsg@.
* When the last line of a table layout turns out to be empty, it is deleted.Ingo Schwarze2015-04-291-0/+1
| | | | | Do not just free the struct tbl_row but also make sure that no pointer to it remains. Fixing a use after free found by jsg@ with afl.
* Improve the error message in case somebody has configured an invalid PAGER.Ingo Schwarze2015-04-291-2/+2
| | | | Suggested by Lorenzo Beretta <lory dot fulgi at infinito dot it>.
* Fix the HAVE_MANPATH case, got broken in rev. 1.23.Ingo Schwarze2015-04-281-1/+1
| | | | Patch from Steffen Nurpmeso <sdaoden at yandex dot com>, thanks.
* Unify mdoc_deroff() and man_deroff() into a common function deroff().Ingo Schwarze2015-04-238-100/+58
| | | | | | | | No functional change except that for mdoc(7), it now skips leading escape sequences just like it already did for man(7). Escape sequences rarely occur in mdoc(7) code and if they do, skipping them is an improvement in this context. Minus 30 lines of code.
* Get rid of two empty wrapper functions. No functional change.Ingo Schwarze2015-04-236-19/+2
|
* Avoid a use after free when the target node is deleted during validation.Ingo Schwarze2015-04-211-12/+15
| | | | Bug reported by jsg@.
* Fix previous: Don't let man(1) warn twice about non-existant names.Ingo Schwarze2015-04-201-5/+9
| | | | Again noticed by deraadt@.
* Avoid out-of-bounds read access before the beginning of theIngo Schwarze2015-04-201-1/+2
| | | | | mdoc_macros[] array. This sometimes prevented proper warnings about text nodes preceding the first section header.
* More than one data field may follow T} on the same input line.Ingo Schwarze2015-04-191-1/+2
| | | | | | | | Issue found by Christian Neukirchen <chneukirchen at gmail dot com> in the socket(2) manual on Linux. Also fixes major rendering bugs (including partial loss of content) in XkbChangeControls(3), XkbFreeClientMap(3), XkbGetMap(3), XkbKeyNumGroups(3), and XkbSetMap(3).
* If an explicit line break request (.br or .sp) occurs within an .HP block,Ingo Schwarze2015-04-191-0/+11
| | | | | | | the next line doesn't hang, but is simply indented. Issue found by Christian Neukirchen <chneukirchen at gmail dot com> in the dmsetup(8) manual on Linux. This patch also improves the indentation of XDGA(3) and XrmGetResource(3).
* If apropos(1) finds no match, print "nothing appropriate" to stderrIngo Schwarze2015-04-191-0/+2
| | | | | similar to what the old apropos did. Requested by and OK deraadt@.
* Unify trickier node handling functions.Ingo Schwarze2015-04-197-31/+31
| | | | | | | * man_elem_alloc() -> roff_elem_alloc() * man_block_alloc() -> roff_block_alloc() The functions mdoc_elem_alloc() and mdoc_block_alloc() remain for now because they need to do mdoc(7)-specific argument processing.
* Unify some node handling functions that use TOKEN_NONE.Ingo Schwarze2015-04-1911-148/+100
| | | | | | | | * mdoc_word_alloc(), man_word_alloc() -> roff_word_alloc() * mdoc_word_append(), man_word_append() -> roff_word_append() * mdoc_addspan(), man_addspan() -> roff_addtbl() * mdoc_addeqn(), man_addeqn() -> roff_addeqn() Minus 50 lines of code, no functional change.
* Decouple the token code for "no request or macro" from the individualIngo Schwarze2015-04-1911-57/+57
| | | | | | high-level parsers to allow further unification of functions that only need to recognize this code, but that don't care about different high-level macrosets beyond that.
* Unify node handling functions:Ingo Schwarze2015-04-1912-454/+323
| | | | | | | | | | | * node_alloc() for mdoc and man_node_alloc() -> roff_node_alloc() * node_append() for mdoc and man_node_append() -> roff_node_append() * mdoc_head_alloc() and man_head_alloc() -> roff_head_alloc() * mdoc_body_alloc() and man_body_alloc() -> roff_body_alloc() * mdoc_node_unlink() and man_node_unlink() -> roff_node_unlink() * mdoc_node_free() and man_node_free() -> roff_node_free() * mdoc_node_delete() and man_node_delete() -> roff_node_delete() Minus 130 lines of code, no functional change.
* Delete the wrapper functions mdoc_meta(), man_meta(), mdoc_node(),Ingo Schwarze2015-04-1812-102/+44
| | | | | | man_node() from the mandoc(3) semi-public interface and the internal wrapper functions print_mdoc() and print_man() from the HTML formatters. Minus 60 lines of code, no functional change.
* Unify {mdoc,man}_{alloc,reset,free}() into roff_man_{alloc,reset,free}().Ingo Schwarze2015-04-187-195/+100
| | | | | Minus 80 lines of code, no functional change. Written on the train from Koeln to Wolfsburg returning from p2k15.
* Move mdoc_hash_init() and man_hash_init() to libmandoc.hIngo Schwarze2015-04-188-15/+16
| | | | | and call them from mparse_alloc() and choose_parser(), preparing unified allocation of struct roff_man.
* Profit from the unified struct roff_man and reduce the number ofIngo Schwarze2015-04-189-80/+75
| | | | | arguments of mparse_result() by one. No functional change. Written on the ICE Bruxelles-Koeln on the way back from p2k15.
* Replace the structs mdoc and man by a unified struct roff_man.Ingo Schwarze2015-04-1826-300/+283
| | | | | Almost completely mechanical, no functional change. Written on the train from Exeter to London returning from p2k15.
* look at COHERENT troffIngo Schwarze2015-04-181-1/+4
|
* florian want <img> tags for https://tlakh.xyz/p2k15.7.htmlIngo Schwarze2015-04-161-0/+4
|
* Restore the page headers and page footers that accidentally got lostIngo Schwarze2015-04-161-6/+2
| | | | in rev. 1.225. Regression reported by florian@.
* shorten "outdated mandoc.db" warning message; requested by deraadt@Ingo Schwarze2015-04-161-4/+2
|
* Do not mistreat empty arguments to font alternating macrosIngo Schwarze2015-04-062-1/+9
| | | | as vertical spacing requests. Bug found with xmahjongg(6).
* On a new RS nesting level, the saved width starts from the defaultIngo Schwarze2015-04-061-1/+1
| | | | | width, not from the saved width of the previous level. Improves xterm(1) and XSetEventQueueOwner(3); found in transcode_filter(1).
* Use the default width for .RS without arguments.Ingo Schwarze2015-04-061-1/+3
| | | | | Reduces groff-mandoc differences in base and Xenocara by about 4%. Found while looking at wpa_supplicant(8).
* If a partial explicit block extending to the next input line followsIngo Schwarze2015-04-051-3/+15
| | | | | the end macro of a broken block, put all of it into the breaking block. Needed for example by mutella(1).
* Reduce code duplication, no functional change:Ingo Schwarze2015-04-051-50/+44
| | | | | Both partial and full implicit blocks can break explicit blocks. Put the code to handle both cases into a common function.
* Arguments to end macros of broken partial explicit blocksIngo Schwarze2015-04-051-9/+7
| | | | | | | | must go inside the breaking block. For example, in .It Ic cmd Oo .Ar optional_arg Oc Ar mandatory_arg the mandatory_arg is still inside the .It block. Used for example by mutella(1).
* allow using an alternate mandoc binaryIngo Schwarze2015-04-051-1/+2
|
* Give man(7) section and subsection headers hanging indentation.Ingo Schwarze2015-04-041-0/+12
| | | | | | Reduces groff-mandoc differences in base by about 2.5% due to various Perl manuals having long section titles. Quirk found in argtable2(3).
* Rounding rules for horizontal scaling widths are more complicated.Ingo Schwarze2015-04-046-44/+38
| | | | | | | | | | | | | There is a first rounding to basic units on the input side. After that, rounding rules differ between requests and macros. Requests round to the nearest possible character position. Macros round to the next character position to the left. Implement that by changing the return value of term_hspan() to basic units and leaving the second scaling and rounding stage to the formatters instead of doing it in the terminal handler. Improves for example argtable2(3).
* Don't allow breaking the output line after hyphens following escapeIngo Schwarze2015-04-041-0/+2
| | | | | sequences. Improves tic(1), sxpm(1), and a few Perl manuals. Quirk found by naddy@ in milter-greylist(8).
* Fix a quirk with respect to empty .HP.Ingo Schwarze2015-04-041-0/+11
| | | | | Found while writing a regression test for man_macro.c rev. 1.66. Incidentally, this brings rendering of XFreeEventData(3) closer to groff.
* Vastly simplify man(7) block unwinding, similar to mdoc_macro.c 1.171.Ingo Schwarze2015-04-031-118/+33
| | | | | Drop one enum type, two static functions, 70 lines of code. Also fixes the mpeg_encode(1) manual reported broken by naddy@.
* It turns out the man(7) parser suffers from unintelligible handlingIngo Schwarze2015-04-031-1/+1
| | | | | | | | of block rewinding, just like then mdoc(7) parser did. First step in getting rid of rew_scope(): Replace the only call where the target block is known. This commit is analogous to mdoc_macro.c rev. 1.167. One down, three to go.
* portability: word boundaries in regular expressionsIngo Schwarze2015-04-031-0/+8
|
* No need to hardcode /usr/bin/ as the path to more(1); helps portability.Ingo Schwarze2015-04-034-4/+7
| | | | | We don't hardcode the paths to gunzip(1) and cmp(1) either. Discussed with ajacoutot@.
* Third step towards parser unification:Ingo Schwarze2015-04-0217-117/+111
| | | | | Replace struct mdoc_meta and struct man_meta by a unified struct roff_meta. Written of the train from London to Exeter on the way to p2k15.
* Second step towards parser unification:Ingo Schwarze2015-04-0223-608/+577
| | | | | | | | | Replace struct mdoc_node and struct man_node by a unified struct roff_node. To be able to use the tok member for both mdoc(7) and man(7) without defining all the macros in roff.h, sacrifice a tiny bit of type safety and make tok an int rather than an enum. Almost mechanical, no functional change. Written on the Eurostar from Bruxelles to London on the way to p2k15.
* First step towards parser unification:Ingo Schwarze2015-04-0228-549/+597
| | | | | | Replace enum mdoc_type and enum man_type by a unified enum roff_type. Almost mechanical, no functional change. Written on the ICE train from Frankfurt to Bruxelles on the way to p2k15.
* Let man(1) and apropos(1) work even when the current directoryIngo Schwarze2015-04-011-35/+33
| | | | | | | is unusable: Only change back to the current directory when the directory was changed before and the next path is relative. This is now more similar to what makewhatis(8) does. Issue reported by espie@.
* Escape punctuation characters that have a different meaning in -Tpdf.Ingo Schwarze2015-03-304-50/+46
| | | | | | | | ~, `, and ' get translated to non-ASCII characters by most troff implementations when generating PostScript/PDF output. When the original ASCII character is meant, it needs to be manually escaped. Patch from bentley@.
* refering -> referring; patch from jmc@Ingo Schwarze2015-03-271-1/+1
|
* Actually use the new man.conf(5) "output" directive.Ingo Schwarze2015-03-277-121/+91
| | | | Additional functionality, yet minus 45 lines of code.
* Parse the new man.conf(5) "output" directive.Ingo Schwarze2015-03-2712-132/+212
| | | | The next step will be to actually use the parsed data.