summaryrefslogtreecommitdiff
path: root/usr.bin/mandoc
AgeCommit message (Collapse)Author
2014-03-23Skip leading escape sequences in man_deroff(). Helps indexing ofIngo Schwarze
some manuals containing overzealous escaping in their NAME section.
2014-03-23Retire the old concat() function.Ingo Schwarze
For .Sh, i wasn't even needed at all. For .Dd, .Nm, and .Os, use the new mdoc_deroff() instead. This gets rid of the last limited-size static buffers in this file, hence eliminates the last explicit MANDOCERR_MEM throwers here, and it shortens the code by 50 lines.
2014-03-23If an .Nd block contains macros, avoid fragmented entries in mandocdb(8),Ingo Schwarze
instead use the .Nd content recursively. Improves a couple of index entries in base.
2014-03-22If a man(7) NAME section contains macros, avoid truncated or emptyIngo Schwarze
entries for .Nd in mandocdb(8), instead use the macro content recursively. This improves indexing of more than 200 manuals in Xenocara, i.e. more than 15%, in particular GL and some Xkb.
2014-03-21avoid repetitive code for asprintf error handlingIngo Schwarze
2014-03-21The files mandoc.c and mandoc.h contained both specialised low-levelIngo Schwarze
functions used for multiple languages (mdoc, man, roff), for example mandoc_escape(), mandoc_getarg(), mandoc_eos(), and generic auxiliary functions. Split the auxiliaries out into their own file and header. While here, do some #include cleanup.
2014-03-20Remove currently unimplemented macros from the lists of used-definedIngo Schwarze
macros to be cleared during .Dd and .TH because clearing them at that point defeats the purpose of backup implementations provided in the manual page itself, some of which _do_ work with mandoc(1). While here, add the new .%C macro to the list to be cleared.
2014-03-19Register pure .so pages as mlinks, not as mpages.Ingo Schwarze
This doesn't affect /usr/share/man, but improves /usr/X11R6/man: * Eliminates multiple apropos(1) output for such pages. * Reduces X11R6 database size from 450 kB to 240 kB (-47%). * Reduces X11R6 database build time from 1.68s to 1.00s (-40%).
2014-03-19Without the MPARSE_SO option, if the file contains nothing but aIngo Schwarze
single .so request, do not read the file pointed to, but instead let mparse_result() provide the file name pointed to as a return value. To be used by makewhatis(8) in the future.
2014-03-19Generalize the mparse_alloc() and roff_alloc() functions by givingIngo Schwarze
them an "options" argument, replacing the existing "inttype" and "quick" arguments, preparing for a future MPARSE_SO option. Store this argument in struct mparse and struct roff, replacing the existing "inttype", "parsetype", and "quick" members. No functional change except one tiny cosmetic fix in roff_TH().
2014-03-18Allow checking that databases are up to date even when you have no writeIngo Schwarze
permission on the databases, as requested by espie@ quite some time ago. But make sure to not slow database generation down when you do have write permission, and to not delay error reporting in -Q mode.
2014-03-17in apropos(1) output, sort names and avoid multiple section numbersIngo Schwarze
2014-03-17describe new featuresIngo Schwarze
2014-03-17remove Berkeley DB partsIngo Schwarze
2014-03-17sync to bsd.lv: remove the Berkeley DB specific parts and document -nIngo Schwarze
2014-03-13In -Tutf8 mode, make sure that hyphens get counted against the output lineIngo Schwarze
length even when they are breakable. Before this, a line containing N breakable hyphens could get up to N characters wider than the right margin in -Tutf8 output mode. Issue reported by tedu@ on bugs@.
2014-03-08In .nf mode, use the MAN_LINE flag to detect input line breaksIngo Schwarze
instead of the man_node line member. This is required to preserve line breaks contained in user-defined macros called in .nf mode. Found in a code audit triggered by fixing a similar issue in .TP.
2014-03-08To find out whether .TP head arguments are same-line or next-line arguments,Ingo Schwarze
use the MAN_LINE flag instead of the man_node line member. This is required such that user-defined macros wrapping .TP work correctly. Issue found by Havard Eidnes in Tcl_NewStringObj(3), reported via the NetBSD bug tracking system and Thomas Klausner <wiz at NetBSD>.
2014-03-08Improve .if/.ie condition handling.Ingo Schwarze
* Support string comparisons. * Support negation not only for numerical, but for all conditions. * Switch the `o' condition from false to true. * Handle the `c', `d', and `r' conditions as false for now. * Use int for boolean data instead of rolling our own "enum roffrule"; needed such that we can use the standard ! and == operators. Havard Eidnes reported via the NetBSD bug tracking system that some Tcl*(3) manuals need this, and Thomas Klausner <wiz at NetBSD> forwarded the report to me. This doesn't make the crazy Tcl*(3) macrology maze happy yet, but brings us a bit closer.
2014-03-07In roff_cond_sub(), make sure that the incorrect input sequence `\\}',Ingo Schwarze
when found on a macro line, does not close a conditional block. The companion function roff_cond_text() already did this correctly, but make the code more readable without functional change. While here, report the correct column number in related error messages.
2014-03-07Even on macro lines, \} must not cause whitespace.Ingo Schwarze
2014-03-07Three bugfixes related to the closing of conditional blocks:Ingo Schwarze
1. Handle more than one `\}' on macro lines, as it was already done for text lines. 2. Do not treat `\}' as a macro invocation after a dot at the beginning of a line. That allows more than one `\}' to work on lines starting with `.\}'. It also simplifies the code. 3. Do not complain about characters following `\}'. Those are not lost, but handled normally both on text and macro lines.
2014-03-05In -Tutf8 mode, mandoc_char(7) named accent character escape sequencesIngo Schwarze
have to render as non-combining accents; if you want combining accents, you have to explicitly specify them using the Unicode character numbers for combining accents, or you can use character escape sequences for accented characters. This lets mandoc behave like groff. Additionally, both the Ossanna/Kernighan/Ritter troff manual and the GNU troff manual say that \' and \` are equivalent to \(aa and \(ga, respectively, so do the same for these. This mitigates issues with man(7) code autogenerated by texinfo2man(1), which mistranslates TeX ` and ' to \` and \' instead of \(oq and \(cq as reported by sthen@ and as analyzed by bentley@.
2014-02-16After Werner Lemberg accepted and committed some updates to the manualIngo Schwarze
page template contained in groff_mdoc(7), catch up with our own stuff. In particular, allow ERRORS in section 4 and DIAGNOSTICS in section 9. ok jmc@
2014-02-16when indenting, extend the right margin accordingly, when needed;Ingo Schwarze
fixes a crash reported by blambert@ and a few other, similar ones
2014-02-14Parse and ignore the roff(7) .ce request (center some lines).Ingo Schwarze
We even parse and ignore the .ad request (adjustment mode), and it doesn't make sense to more prominently warn about temporary than about permanent adjustment changes. Request found by naddy@ in xloadimage(1) and by juanfra@ in racket(1).
2014-02-14Implement the roff(7) .as request (append to user-defined string).Ingo Schwarze
Missing feature found by jca@ in ratpoison(1). The ratpoison(1) manual still doesn't work because it uses .shift and .while, too (apparently, ratpoison is so complex that it needs a Turing-complete language to even format its manual :-). Written at Christchurch International Airport.
2014-02-14Handle some predefined read-only number registers, e.g. .H and .V.Ingo Schwarze
In particular, this improves handling of the pod2man(1) preamble; for examples of the effect, see some author names in perlthrtut(1). Missing feature reported by Andreas Voegele <mail at andreasvoegele dot com> more than two years ago. Written at Christchurch International Airport.
2014-01-24Improve formatting of broken blocks in -Tman,Ingo Schwarze
somewhat similar to what mdoc_term.c already does for -Tascii.
2014-01-22Implement the \: (optional line break) escape sequence,Ingo Schwarze
documented in the Ossanna-Kernighan-Ritter troff manual and also supported by groff. Missing feature reported by Steffen Nurpmeso <sdaoden at gmail dot com>.
2014-01-21Treat the line after .Cd as a single argument.Ingo Schwarze
This doesn't hurt normal manual display and makes the mandocdb(8) database more useful.
2014-01-20Keep words after .Ic together in a single argument.Ingo Schwarze
This doesn't hurt normal manual display and makes the mandocdb(8) database more useful.
2014-01-19Always compare arch case-insensitively.Ingo Schwarze
2014-01-19Avoid the risk of trying to modify a literal string.Ingo Schwarze
2014-01-19Always store the arch in lower-case only.Ingo Schwarze
Reduces database size by ~0.5%, and by ~1.5% with -Q.
2014-01-19Get rid of the local keys table, use the new mansearch_const.c.Ingo Schwarze
No functional change.
2014-01-19Support a second -v on mandocdb(8) to show keys while they are being added;Ingo Schwarze
i need that for debugging, in particular to be used with -t. To be able to do so, provide a global table of key names, for reuse.
2014-01-18Cope with slightly broken NAME sections in man(7) pagesIngo Schwarze
having a trailing comma after the last name, like this: ASN1_OBJECT_new, ASN1_OBJECT_free, - object allocation functions Nit found somewhere above the Tasman Sea, committing from Dunedin, Otago.
2014-01-17Sort the macro keys by their real-world frequency to reduce the averageIngo Schwarze
mask size. No functional change. This shrinks the standard /usr/share/man database by 7%, now at 10.3x the size of whatis.db, and with -Q even by 11%, now at 3.0x of whatis.db. Now i'm out of ideas to easily shrink the size of the database. Optimization found somewhere above the West Australian desert. Committing from Melbourne, Victoria.
2014-01-17Drop the AUTOINCREMENT PRIMARY KEYs from the mlinks and keys tables.Ingo Schwarze
They are completely unused, and i cannot imagine what they *could* ever be used for; but apparently, they are expensive to generate. Standard DB build time goes down by 10%, now at 1.9x of makewhatis. Standard DB size goes down by 4%, now at 11x of makewhatis. DB build time with -Q goes down by 15%, now at 0.28x of makewhatis. DB size with -Q goes down by 3%, now at 3.35x of makewhatis. Optimization found somewhere above the Southern Balochistan desert, near the Iran-Pakistan border. Committing from Melbourne, Victoria.
2014-01-17Despite some experimenting, i'm unable to find any relevant effect ofIngo Schwarze
creating an index for the keys table on apropos(1) search times; apparently, adding that index was premature optimization in the first place; so, stop adding that index. Its root gone, the following evil is reduced (/usr/share/man on my notebook) - DB build time with -Q goes down by 15%, now at 1/3 of makewhatis - DB size with -Q goes down by 35%, now at 3.5x of makewhatis - full DB build time goes down by 12%, now at 2.1x of makewhatis - full DB size goes down by 42%, now at 11.5x of makewhatis Optimization found somewhere above the Dasht-e Kavir, the Great Salt Desert, between Tehran (Iran) and Herat (Afghanistan). Committing from Melbourne, Australia.
2014-01-11Remove useless use of strnlen(3).Ingo Schwarze
Yuckiness pointed out by deraadt@.
2014-01-07Cache the result of uname(3) such that we don't need to call itIngo Schwarze
over and over again for each manual; found with gprof(1). Speeds up mandocdb(8) -Q by 3%, now at 39.5% of makewhatis(8).
2014-01-06Gprof(1) is fun. You should use it more often.Ingo Schwarze
Another 10% speedup for mandocdb(8) -Q, and even 3% without -Q. With -Q, we are now at 41% of the time required by makewhatis(8). Do not copy predefined strings into the dynamic string table, just leave them in their own static table and use that one as a fallback at lookup time. This saves us copying and deleting them for each manual. No functional change.
2014-01-06Another 18% speedup for mandocdb(8) -Q, found by gprof(1).Ingo Schwarze
In -Q mode, refrain form validating and normalizing the format of the date given in .Dd or .TH, as it won't be used anyway. For /usr/share/man, mandocdb -Q now takes 45% of the time of makewhatis(8).
2014-01-06Another 25% speedup for mandocdb(8) -Q mode, found with gprof(1).Ingo Schwarze
For /usr/share/man, we only need 56% of the time of makewhatis(8) now. In groff, user-defined macros clashing with mdoc(7) or man(7) standard macros are cleared when parsing the .Dd or .TH macro, respectively. Of course, we continue doing that in standard mode to assure full groff bug compatibility. However, in -Q mode, full groff bug compatibility makes no sense when it's unreasonably expensive, so skip this step in -Q mode. Real-world manuals hardly ever redefine standard macros, that's terrible style, and if they do, it's pointless to do so before .Dd or .TH because it has no effect. Even if someone does, it's extremely unlikely to break mandocdb(8) -Q parsing because we abort the parse sequence after the NAME section, anyway. So if you manually redefine .Sh, .Nm, .Nd, or .SH in a way that doesn't work at all and rely on .Dd or .TH to fix it up for you, your broken manual will no longer get a perfect apropos(1) entry until you re-run mandocdb(8) without -Q. It think that consequence is acceptable in order to get a 25% speedup for everyone else.
2014-01-06Do not sync to disk after each individual manual page (duh!),Ingo Schwarze
only sync to disk one single time when all data is ready. Rebuild times for /usr/share/man/mandoc.db shrink on my notebook: In standard mode from 45 seconds to 11 seconds (75% reduction) In -Q mode from 25 seconds to 3.1 seconds (87% reduction) For comparison: makewhatis(8): 4.2 seconds That is, in -Q mode, we are now *faster* than the existing makewhatis(8), and careful profiling shows there is still a lot of room for improval.
2014-01-06Fix mandocdb(8) -d and -u.Ingo Schwarze
It was broken by recent optimizations.
2014-01-06Rename dbindex() to dbadd() to be less confusing.Ingo Schwarze
The concept of an index file is gone since the switch to SQLite. No functional change.
2014-01-06Remove the redundant "file" column from the "mlinks" table.Ingo Schwarze
The contents can easily be reconstructed from sec, arch, name, form. Shrinks the database by another 3% in standard mode and 9% in -Q mode.