aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/mdoc_term.c
Commit message (Collapse)AuthorAgeFilesLines
* Fix how `Bd -unfilled' and `Bd -literal' break lines. This unbreaksKristaps Dzonsons2010-07-271-8/+4
| | | | | displays to work as old groff shows them; however, new groff still does some fancy shit.
* `Ad' is supposed to underline. Found whilst trolling through manuals.Kristaps Dzonsons2010-07-261-2/+2
|
* In the SYNOPSIS, .Nm at the beginning of an input line startsIngo Schwarze2010-07-211-2/+3
| | | | | | | | | | an .Nm block, and gets special handling (new line, indentation). But .Nm in the middle of a line is just a normal in-line element, so make sure it does NOT get the special handling. Partly fixes the test(1) SYNOPSIS; indentation after "[" is still excessive, which is an unrelated and more difficult issue. Reminded of the problem by jmc@; OK kristaps@.
* Remove some FIXMEs: `Ms' accepts arbitrary text, so it can't/shouldn'tKristaps Dzonsons2010-07-191-2/+2
| | | | | | be converted into a symbol. The `Pp' issue has also been fixed.
* Fix spurrious newline emitted by `Pp' when specified before or afterKristaps Dzonsons2010-07-191-1/+6
| | | | `Sh'/`Ss'. Reported by Jason McIntyre.
* After .Sm on, spacing ought to restart right away, before the next token,Ingo Schwarze2010-07-161-3/+5
| | | | | | | and not with a delay, after the next token. But be careful not to cause leading white space at the beginning of a line or column. In OpenBSD, improves chmod(1), ksh(1), tar(1), ps(1) and probably many more. ok kristaps@ and tested by jmc@ and sobrado@
* Re-constitution of `ds' symbol processing. First, push theKristaps Dzonsons2010-07-071-2/+1
| | | | | | | | | roff_getstr() family of functions into roff.c with the "first_string" directly in struct roff. Second, pre-process each line for reserved words in libroff, splicing and re-running a line if it has one (this allows defined symbols to be macros). Remove term.c's invocation of the roff_getstrn() function. Removed function documentation in roff.3 and added roff.7 `ds' documentation.
* Proper `Bk -words' support: only suppress breaks within a line, butKristaps Dzonsons2010-07-061-1/+18
| | | | | | | allow end-of-line to break. This fixes the bad behaviour found when macros within `Bk' never break. "Excellent" schwarze@
* Assert my copyright, making it explicit that i'm granting the same licenseIngo Schwarze2010-07-041-2/+3
| | | | | on those parts of the code and text that i have written as Kristaps is. "fine with me" kristaps@
* Cache column sizes and char pointer into mdoc_bl. Finally get rid ofKristaps Dzonsons2010-07-041-28/+6
| | | | the loops here and there to track down the MDOC_Column arguments.
* Allow empty `Fo' to get by without an assertion.Kristaps Dzonsons2010-07-031-2/+4
|
* Cached `An' arguments in struct mdoc_an. Note that this isn't aKristaps Dzonsons2010-07-021-16/+3
| | | | pointer like the other data members, as there's no need to copy it around.
* Stash `Bf' parameters into struct mdoc_bf.Kristaps Dzonsons2010-07-021-16/+5
|
* Lint fixes.Kristaps Dzonsons2010-07-021-3/+6
|
* Make struct_bl and struct_bd into pointers. This removes the need to doKristaps Dzonsons2010-07-011-23/+25
| | | | | | | | | | | copying on internals after modification. Even more importantly, if an ENDBODY token is provided, it would have been impossible for post-change copying of the data to take place in the BLOCK. This allows it to happen by dint of pointers. Also did some bikeshedding in mdoc_term.c: checking against enum type and explicitly casting to the "post" function to void. This is for my own readability.
* Improve .Nm indentation in the SYNOPSIS;Ingo Schwarze2010-07-011-3/+43
| | | | | | | kristaps@ will do the missing HTML part soon. "looks nicer" jmc@ "seems perfect to me" sobrado@ "slap it in" kristaps@
* More reality-checks for the p->end type.Kristaps Dzonsons2010-07-011-2/+2
|
* Support for badly nested blocks, written around the time ofIngo Schwarze2010-06-291-8/+25
| | | | | | | | | | | | | | | | | | | | | | | | | the Rostock mandoc hackathon and tested and polished since, supporting constructs like: .Ao Bo Ac Bc (exp breaking exp) .Aq Bo eol Bc (imp breaking exp) .Ao Bq Ac eol (exp breaking imp) .Ao Bo So Bc Ac Sc (double break, inner before outer) .Ao Bo So Ac Bc Sc (double break, outer before inner) .Ao Bo Ac So Bc Sc (broken breaker) .Ao Bo So Bc Do Ac Sc Dc (broken double breaker) There are still two known issues which are tricky: 1) Breaking two identical explicit blocks (Ao Bo Bo Ac or Aq Bo Bo eol) fails outright, triggering a bogus syntax error. 2) Breaking a block by two identical explicit blocks (Ao Ao Bo Ac Ac Bc or Ao Ao Bq Ac Ac eol) still has a minor rendering error left: "<ao1 <ao2 [bo ac2> ac1> bc]>" should not have the final ">". We can fix these later in the tree, let's not grow this diff too large. "get it in" kristaps@
* minor .Bk fixes:Ingo Schwarze2010-06-271-4/+14
| | | | | | | | * do not print invalid arguments verbatim (no groffs prints them, either) * do not trigger TERMP_PREKEEP twice * do not die from invlid arguments (groff won't die, either) * continue to ignore even valid arguments (just like groff) ok kristaps@ on the previous version, before removing my last bug ;)
* Following clue-stick applied by schwarze@, back out const-ness of regsetKristaps Dzonsons2010-06-271-7/+7
| | | | | | | | | passed in to libmdoc and libman. Fix mdoc.3 and man.3 EXAMPLE sections to include regset. Add MDOC_SYNPRETTY flag cueing front-end to nicely format certain values as if SEC_SYNOPSIS were the current section.
* Basic implementation of .Bk/.Ek; from OpenBSD.Ingo Schwarze2010-06-271-2/+22
| | | | OK and one stylistic tweak by kristaps@.
* Churn-ish check-in getting mdoc_parseln() and man_parseln() to accept aKristaps Dzonsons2010-06-261-1/+2
| | | | const struct regset pointer. No functionality.
* Initial chunks for variable-width fonts. Pushes all width calculationsKristaps Dzonsons2010-06-251-40/+42
| | | | | | | | in mdoc_term.c and man_term.c down into term.c. This is still not implemented in term.c, although stubs for width calculations are in place. From now on, offset, rmargin, and other layout variables are abstract screen widths. They will resolve to the the familiar values for -Tascii but -Tps will eventually use points instead of chars.
* Churn as I finish email address migration kth.se -> bsd.lv.Kristaps Dzonsons2010-06-191-2/+2
|
* Remove arg_getattrs(), as we only have arg_getattr()-like calls now thatKristaps Dzonsons2010-06-131-45/+15
| | | | -width is cached.
* Switch on cached -width usage in front-ends.Kristaps Dzonsons2010-06-131-10/+11
|
* Allow -width for lists to be cached in mdoc_bl. This requires someKristaps Dzonsons2010-06-131-1/+2
| | | | | | trickery because widths may be on-the-fly recalculated. I don't like how these are split between mdoc_action.c and mdoc_validate.c, but for the time being, it'll do.
* Cached `Bl -offset' into mdoc_bl. Removed erroneous "-offset defaultsKristaps Dzonsons2010-06-121-11/+11
| | | | | to 6n if no value is specified" and added regression tests for `Bl' testing against the empty -offset argument.
* Reverted to mdoc_term.c 1.149 (`It' does not inherit `Bl's cache,Kristaps Dzonsons2010-06-121-8/+11
| | | | | obviously, which was causing fallout) and again remove the loop code. Tested more thoroughly.
* Moved `Bl -compact' into cached data. This allowed the removal ofKristaps Dzonsons2010-06-121-11/+10
| | | | scanning the argv list in print_bvspace(), and thus the parent pointer.
* `Bl' is now using a struct instead of a single enum mdoc_list for itsKristaps Dzonsons2010-06-121-5/+6
| | | | cached values. You can probably guess where this is going.
* Cache all of `Bd's resolved arguments into mdoc_bd, which is stashed inKristaps Dzonsons2010-06-121-19/+16
| | | | | | the "data" union in mdoc_node. Allows me to remove some ugly loops in the front-end and duplicate tests in mdoc_action.c. Add a regression test to make sure we're not doing anything bad (more to come).
* Added enum mdoc_disp (similar to enum mdoc_list). Display types are nowKristaps Dzonsons2010-06-121-42/+7
| | | | | | | | | | | only calculated once in mdoc_validate.c. Noted that `Bd -file xxx' is not supported: it now raises a fatal warning. This is noted in mdoc.7. Empty `Bd' now defaults to LIST_ragged, which is not quite what groff does, but close enough (gross just throws away the `Bd' and gets upset when it encounters an `Ed').
* Fix a regression that crept in in man_term.c 1.73 and mdoc_term.c 1.144.Ingo Schwarze2010-06-101-4/+3
| | | | | | | | | | | | | | | | When the title line uses special characters, mandoc will segfault. Thus, first set up the character tables, then print the header, as we always did. Found in OpenBSD /usr/src/usr.sbin/bind/bin/check/named-checkconf.8. While here, set p->tabwidth in terminal_man() for symmetry with terminal_mdoc(), as suggested by millert@ (and already committed to OpenBSD earlier). Since 5 is the default, this is not strictly required, but it is certainly clearer and more robust. "looks fine" kristaps@
* Have the standard manpage header and footer print on every page of -TpsKristaps Dzonsons2010-06-091-7/+6
| | | | | | | | | | | | | | | output. This is more tricky than you may think: we can't just call the header function out-of-state (i.e., before a flushln has occured) because we'd clobber our current state. Thus, we call at the beginning and dump the output into an auxiliary buffer. For the record, I don't think there's any other clean way to do this. The only other Way That Works is to copy-aside *all* termp state, zero it, and do the necessary headf/footf. This is just as complex, as memory needs to be alloc'd and free'd per margin. Unfortunately, this prohibits page numbering (the margin is only printed once), so I'll probably end up re-writing this down the line.
* First check-in of PostScript output. This does not change any logicKristaps Dzonsons2010-06-071-7/+15
| | | | | | within term.c, but does add a small shim over putchar() that switches on the output engine. Prints, for this initial version, only monospace and without font decorations. It's a start.
* Normalise SYNOPSIS behaviour after I gave up on following groff'sKristaps Dzonsons2010-06-071-77/+91
| | | | | | | | | | | | | | | | | | | | | inconsistent behaviour. In short: Some macros are displayed differently in the SYNOPSIS section, particularly Nm, Cd, Fd, Fn, Fo, In, Vt, and Ft. All of these macros are output on their own line. If two such dissimilar macros are pair-wise invoked (except for Ft before Fo or Fn), they are separated by a vertical space, unless in the case of Fo, Fn, and Ft, which are always separated by vertical space. Behaviour ok Jason McIntyre, ingo@. Fallout will be treated case-by-case. I had to clear out some regressions that were testing against groff's stranger behaviours: these will now break, as we don't care about such invocations. Also removed the newline for `Cd' invocation in a non-SYNOPSIS context.
* Merge a fix to avoid a regression in OpenBSD:Ingo Schwarze2010-06-061-1/+4
| | | | | | | | | | | Restore the blank line before .In in SYNOPSIS except right after .Sh or right after another .In. Even though Kristaps says SYNOPSIS blank-line handling is still very much work in progress and more is probably needed, this one is useful to keep in sync with OpenBSD. "fine" kristaps@
* Fixed -Tascii and -Thtml rendering of `Ft' and `Fo'.Kristaps Dzonsons2010-06-061-33/+33
|
* Fix following the first: `Ft' is given special treatment if specified beforeKristaps Dzonsons2010-06-041-2/+4
| | | | `Fn'.
* Fixed `Fn' newline behaviour and added some regression tests to thisKristaps Dzonsons2010-06-041-3/+10
| | | | | | | extent. Documented `Fn'. Please note the COMPATIBILITY note regarding historic groff.
* Documented `In' in full.Kristaps Dzonsons2010-06-041-18/+15
| | | | | | Fixed `In' to behave properly: it wasn't properly breaking lines, formatting, or really anything else. Noted COMPATIBILITY with OpenBSD's groff, which pukes all over `In'.
* Fixed `Fd' to format in the right way. Found when confused by what theKristaps Dzonsons2010-06-041-6/+1
| | | | | hell `Fd' is supposed to do anyway (answer: it's a historical macro and we shouldn't be doing anything with it anyway).
* De Morgan's law not being applied properly. Noted by Ulrich Spoerlein.Kristaps Dzonsons2010-06-011-2/+2
|
* Remove enum mdocargerr from phrase() (unused).Kristaps Dzonsons2010-05-311-1/+2
| | | | | | | | | | | | | | Add `Ta' macro, which is basically a NULL case everywhere but in mdoc_macro.c, where it closes out an existing `It' body scope and opens a new one, then continues parsing as in phrase() (TODO: merge these two?). Fix where scope-breaking was silently just dying instead of printing an error. Fix where trailing `Ta' or tab weren't creating a new MDOC_BODY context. We now support arbitrarily complex `It' contents for `Bl -column'.
* Migrate `Bl -column' phrases to be MDOC_BODY instead of MDOC_HEAD. ThisKristaps Dzonsons2010-05-301-17/+25
| | | | | | | | | | will make it easy for re-entrant parsing of `Ta' macros to fit in with standard closure rules. Added some more regressions for `Bl -column'. Note that one should fail, as documented in the TODO file. Recorded change of AST BNF in mdoc.3.
* Moved printing of empty word [back] into mdoc_action.c so that it's notKristaps Dzonsons2010-05-291-3/+1
| | | | mirrored across front-ends.
* Commit of patch floated on discuss@ a few days ago: if an in_line scopeKristaps Dzonsons2010-05-291-1/+3
| | | | | | | | | | has not been opened and closing punctuation is encountered AND the macro is marked as accepting no-content (or `Li'), then open an empty scope. Added regression tests for `Fl' and `Li' testing this behaviour. Also, squeeze hyph0.in tests into the last characters of each line so that groff doesn't hyphenate and break the test.
* Documented `Ud'.Kristaps Dzonsons2010-05-261-1/+5
| | | | | | | | | | | Proper EOS handling for `Rv', `Ex', `Ud', and `Bt'. Both `Bt' and `Ud' now warn about and discard line arguments (reported by Ulrich Spoerlein). Collapsed posts_xr into posts_wtext (harmless: they're the same thing). Added regressions for `Ud' and `Bt'.
* sync to OpenBSD:Ingo Schwarze2010-05-241-9/+7
| | | | | | | save the visual cursor position in term_flushln() and use that to avoid multiple blank lines in nested lists while still putting subsequent empty list tags each on their own line; "go ahead" kristaps@