PPTools/Ppgen/Release Notes
Overview
This page describes the various versions/releases of the ppgen post-processing tool, giving the date, version number of the production versions, and a summary of changes made and bugs fixed. For those experiencing problems a summary of the latest development version is also provided.
The current production version can be downloaded via the Download ZIP button [here] or directly [here].
Note: To receive notifications of new versions of ppgen please make sure you are logged in to this Wiki and then click on the "Watch" tab at the top of the page. Then, whenever this page is changed the system will send an email to the user ID listed in your DP Wiki preferences. (Please click the preferences link at the top of the page once you're logged in to verify or change your DP Wiki email address. This is not necessarily the same email address you use for the main DP site or for the DP forums.)
Current production version: 3.57c 13-Oct-2017
The current production version is available here.
Bug Fixes: (since prior production version)
- 3.57a:
- Bug: Properly handle "break" operand on .h4/5/6 directives.
- Bug: Change page number processing to allow for continued .hn or .il statements, as the rest of continuation processing happens after we handle page numbers.
- 3.57b:
- Bug: HTML: Inline tags within an all upper-case <sc> string cause the wrong CSS class to be generated.
- 3.57c:
- Bug: Fix Python trap during execution introduced by 3.57a while checking continued .h<n> and .il directives.
Enhancements: (since prior production version)
- 3.57a:
- Provide context for "Unclosed tags in .nf block" error
- Warn if user has extraneous info on a .h<n> directive.
- Warn if user apparently has a dot directive immediately following a .h<n> directive
- Adjust index-related CSS to better distinguish subentries from overflow/wrapped entries.
- Revise <pm ...> processing to use non-greedy matching to more reliably handle cases where the PPer has included multiple macro invocations on the same source line. (No known problems reported with the old code, though.)
- 3.57b:
- none
- 3.57c:
- none
Current development version: 3.57e 14-Aug-2023
The current development version is available here.
Bug Fixes: (since current production version)
- 3.57d:
- none
- 3.57e:
- Bug: Not detecting UTF-8 input files due to still using a deprecated (now removed in 3.11) option on open()
Enhancements: (since current production version)
- 3.57d:
- Updated HTML processing to HTML5.
- 3.57e:
- Remove include for imghdr. We don't really use it, and it's being deprecated and will cause problems in Python 3.13.
Experimental versions
No experimental versions are currently available. All experimental changes are available in production version 3.51.
Historical Production Version Info
3.56n 25-Mar-2017
Bug Fixes: (since prior production version)
- 3.56a:
- HTML: Revise handling of .dl style=p so HTML created by .nf directives (including .ce, .rj) within the block will valiate properly.
- Text: Fix problem of .bn creating an extra blank line between table rows for tables that have multi-line cells.
- Text: Fix handling of multi-line <sc> strings to remove Python exception. Also, try to detect missing </sc> by detecting dot commands within the <sc> string.
- HTML: Revise handling of .ix to fix a validation error if a .bn line occurs between a main entry and its first sub-entry.
- 3.56b:
- Text: Properly count ^, _ and {} in super- or subscripted strings when doing line wrapping. (Earlier fix was incomplete.)
- Text: Wrap heading lines (.h1/2/.../6) that are wider than the current width set by the .ll directive.
- 3.56c:
- Fixed spelling of [Lambda] and [lambda] (.cv processing).
- Text: Fixed wrapping of first line of the definition for a .dl entry.
- Text: Ensure at least 1 blank line after a list generated by .ol or .ul.
- 3.56d:
- HTML: adjust spacing between paragraphs within a .it entry.
- Removed warning for .nf l blocks when .in > 0 and .nr nfl value is specified; it's really an unnecessary warning as .nr nfl is intended to handle only the case where .in == 0.
- 3.56f:
- Text: if .dl definition lines contain <br> make sure we go through wrapping so the <br> is removed and lines are split.
- HTML: In table processing handle case of a right-aligned cell that appears not to be the last cell in the row, but really is because all following cells are <span>. In that case, it should not have padding-right specified.
- 3.56g:
- Text: If using alt= for the caption for an illustration, make sure to wrap the the caption if it's too long.
- 3.56h:
- HTML: When validating link targets, check more of the name to ensure all errors are flagged.
- 3.56l:
- Text: Make sure that .sr directives that specify b or B are processed only at the appropriate time, and not also in post-processing.
- 3.56m:
- Text: Fix problem generating horizontal rules for tables with short lines.
- 3.56n:
- Text: Fix alignment problem with vertical rule connectors in tables when cells contain super- or subscripted characters.
Enhancements: (since prior production version)
- 3.56b:
- Allow alternate form of <target> markup: <target=id_value> as alternative to the <target id=id_value> forms.
- 3.56c:
- Added -dm command-line option to provide additional debugging info during .pm/<pm> processing
- 3.56d:
- Improve error messages for .sr parse errors
- Allow > characters within <pm ...> arguments, as long as the argument is a quoted string (either ' or ")
- 3.56e:
- Allow text to contain the character ^ without it triggering superscript processing. For this situation the PPer should use ^^ and ppgen will replace that with a single ^ in the output.
- Allow text to contain the string _{ followed by some text followed by } without triggering subscript processing. For this situation the PPer should use __{ (two underscores, then the {) and ppgen will replace the __ with _ in the output.
- If a // is immediately preceded by either http: or https: then warn the PPer to escape the // if he wants a URL rather than a comment.
- Allow a <pm invocation to span lines if continued by a \ character so it's really considered to be on one line.
- 3.56f:
- Adjust .sr parsing to use a non-greedy match for more robust detection of errors in the user's regular expression.
- 3.56h:
- HTML: Validate links to music files (.mid) that a PPer may use. Also add -mus command line option, analogous to the -img option.
- Allow links to music files, via #text to display:music/filename.mid#
- 3.56i:
- Detect inline <pm with missing > (which might mean a missing continuation \ character or a missing >) and fail the run if one is found. This avoids a potential performance issue in regular expression processing, and avoids having an incorrect invocation written to the output as a text string.
- 3.56j:
- Use a better regular expression for finding <pm invocations, so it will recognize failing cases (invocation not present) in more linear time in all situations for users who use the re library module instead of regex. Also allows parsing some more complex <pm arguments successfully.
- 3.56k:
- Ensure macro name is present for .pm and <pm to avoid Python trap later. Also, provide better error detection for malformed <pm> requests.
- 3.56l:
- Provide better detection of incorrect arguments to .dc directive. Also allow more flexible spacing of .dc and .di arguments.
- When (in text) processing multiple lines while looking for a </sc>, consider it an error (rather than merely a warning) if we encounter an apparent dot directive. Also, stop the scan on a blank line, too.
- For text, make sure that .sr directives that specify b or B are processed only at the appropriate time, and not also in post-processing.
- 3.56m:
- When -dp command-line argument is present also print the Python version.
3.56 5-June-2016
Bug Fixes:
- 3.55a:
- Include the .di (drop image) directive in the image-checking process to avoid false warning messages and to perform the additional diagnostic checks on them.
- 3.55b:
- Text: When using alt= tag as an illo caption, don't turn single quotes into HTML entities.
- Text: Fix possible erroneous right-border character on table lines that end with <span>.
- 3.55d:
- HTML: Fix issue with vertical placement of sidenotes (.sn) in relation to the text that follows them when the sidenote is preceded by a .sp directive.
- 3.55e:
- HTML: Fix Python failure when using .dl with .fs in effect.
- 3.55f:
- Fix Python trap during macro processing (.pm) when macro argument contains regular-expression meta-characters. We may still terminate, but with a better error message.
- When combining long lines continued by a \ character, if the line ended with multiple \ characters ppgen was using a non-breaking space rather than a regular space in the HTML output. That has been fixed. Also, if a line ended with multiple trailing \ characters some could remain in the output. Now they are all deleted.
- 3.55g:
- Fix major Greek processing issue when keep=a or b is specified.
- 3.55j:
- HTML: Fix issue with .pn off (no page visible numbers) where ppgen creates page numbers anyway for illustrations. Also ensure that a page number link is generated on the illustration if a .pn directive occurs just before a .il directive.
- 3.55k:
- HTML: Fix Python trap that can occur due to a coding error handling a .dv directive has neither a class= nor an fs= operand.
- 3.55m:
- HTML: Revert table handling change introduced in 3.55l as it did not work correctly. This restores table handling to the version in 3.55k and earlier.
- 3.55n:
- Fix .bin files so the pngspath variable has the full path name in all cases, and so it ends in \\ rather than \ as seems to be necessary for Guiguts to work properly.
- 3.55o:
- Move the initial processing of .pn and .bn directives earlier in processing, before continuation (trailing \) processing occurs. This restores the ability of the PPer to continue a line of data that appears before the .pn or .bn directive, without the directive appearing as visible text in the output file. (Note: As .pn/.bn are now encoded earlier, some error/warning messages may contain encoded forms rather than plain text forms.)
- 3.55q (previous development version):
- Text: Properly calculate the length of text strings that have encoded super/subscripted text within them. This affects things like wrapping in paragraphs, centering, and right-alignment. It also (and especially) affects the calculation of widths for table cells in the text output, since the number of characters in the string changes after decoding the super/subscripts.
- Text tables: Fix bug in handling horizontal table rules. If the table did not have a top rule, then the first horizontal rule in the table was not connected properly to the vertical rules.
- Text tables: Fix bug in handline horizontal table rules immediately preceded or followed by a .bn directive.
- 3.55r (unreleased experimental version):
- HTML: Fix bug causing .sp to be ineffective if it occurs just before a footnote that is captured for processing by a remote landing zone. Also, properly handle .sp that occurs just before a footnote when .pi (indented paragraphs) are in effect.
Enhancements:
- 3.55b:
- Adjust some of the new warning messages for image checking to be informational rather than warning. Also, don't report the cover image being used multiple times as it is common for that to happen in the HTML.
- 3.55c:
- Revise handling of stdout and stderr. Previously, to avoid problems on Windows systems when running ppgen in a command window, ppgen translated any characters with values > x80 to *. With this enhancement ppgen encodes stdout and stderr as UTF-8 files, and sends all message characters directly. In a Windows console message this may show garbage for the UTF-8 characters (rather than *) but no errors will occur. If stdout/stderr are piped to files the files will be UTF-8 encoded and will show all characters properly. Also, Linux and Mac consoles should show all the characters properly in the error messages without piping.
- Text: Recognize long "centered" table lines (lines without a | to split them into cells) and wrap them to stay within the edges of the table. Also make sure that any such lines that specify <al=l> or <al=r> stay within the table edges.
- 3.55g:
- Allow macros to be invoked by <pm name parms> as long as they return only 1 line of output.
- Move uncomment, .ig, and .if processing before doGreek so Greek processing won't be performed on lines that will be ignored anyway. (Note: Uncommenting, etc. still happens only when ppgen is not operating in filter mode.)
- 3.55h:
- HTML: Eliminate .table### duplication in the CSS when the table classes have the same characteristics.
- 3.55i:
- Exempt <g> and </g> from Greek processing so they can be used for emphasis in Greek strings.
- Minor rewording of imagecheck warning messages.
- 3.55l:
- HTML: Reduce number of class= specifications for elements by keeping track of which style is most common for that table and refactoring the .cnnn definition into a .table td CSS specification. Note: This may increase the number of .table<nnn> classes that are generated, including some that will duplicate others, if they have a different "most popular" cell style.
- Allow bl=y (default) or n on .ta to allow or prevent addition of blank lines between rows when some cell wraps to multiple lines. (Affects text output only.)
- 3.55p:
- Add -de command line option to force all messages to stderr to simplify regression testing.
- Add a warning if a continued line is followed by an apparent dot directive (other than .pn, .bn).
- 3.56 (this new production version):
- Modify parsing of .sr to avoid potential issues with the regex module (if regex is installed on the user's system)
- Add code to detect some cases of improper Greek transliterations (no ending ] or mismatched []) and terminate. (Note: balanced [] within a Greek tag are allowed. If the author, for some reason, had a Greek string containing only a [ and no ] to balance it, use " \[" (with the space).
- Improve handling of .fs to tolerate spaces within the size options, though there shouldn't be any.
3.55 1-Mar-2016
Bug Fixes:
- 3.54a:
- Finish implementing .dl break option
- Text: Detect <br> in short table cells and wrap them anyway
- HTML: Force blank table cells to so the horizontal borders don't collapse if all cells are blank.
- 3.54b:
- Text: Fix indentation of items in .ol and .ul, ensuring at least a 1 space indent from the left margin and calculating the indentation correctly. This also addressed an issue with not honoring hang=y. This also fixed an issue with hang=y.
- HTML: Implement indent, space=y, and hang=y for .ol and .ul and properly handle left/right/top margins. Prevent improper reuse of CSS class names for .ol and .ul (and potentially .dl).
- Revise try/except in dodot() to cover only the lookup of the directive, not its processing, which will avoid surprises.
- Text: Added additional validation point for a table row having the correct number of columns to avoid a Python trap.
- Greek:
- Properly display the first few characters of the Greek table when doing -cvglist processing. Also, clarify meaning of columns and of those first few non-preferred characters.
- When keeping the original transliteration (keep=a or b) properly handle <something>\ just before the ending ] so the \ is not lost in the final output. E.g., [Greek: i\] with keep= specified must remain [Greek: i\] and not become [Greek: i] in the final output. Also, when protecting "\|" and "\ " within the [Greek: ] tags make sure to handle them in the complete tag (even if there is [] within the tag) and make sure they survive into the final output.
- When printing the error message about an unterminated Greek string, limit the amount of the file printed to 100 characters at most. Also, initialize newstart in findGreek to prevent error after last Greek tag is found.
- When moving page numbers (from .pn) down to a suitable line, recognize .h4/5/6 as suitable header lines (was only recognizing .h1/2/3).
- HTML: For .dl with style=d, if the "definition" is empty, insert to prevent it from collapsing vertically.
- 3.54c:
- Fix failure when using -sbin option but not using the -ppqt2 option.
- Properly handle .pn and .bn that happen within a .dl/.dl- block.
- Add some padding to <dd> when using .dt with style=d, align=r, float=y so the term and description text don't run together.
- 3.54f:
- Text: Fix bug in .nf r that resulted in the loss of leading blanks from the lines. HTML was OK.
- 3.54g:
- Text: Honor align=r in .dl that specifies combine=y
- 3.54h:
- HTML: Fix validation error if a .pn occurs just before a .ul, .ol, or .it. Also revise handling of .pn/.bn info within .dl block to avoid validation and other errors.
- HTML: Fix processing error with top/bottom margins for paragraphs within .ol/.ul items.
- Fix error that misinterpreted a .dt (define term) inside a .dl block as a .dt (define title) instead.
- 3.54i:
- Modify get_id routine so that it retrieves unquoted options (e.g., pre=xxx or suf=xxx, etc. rather than pre="xxx", etc.) without truncating a trailing > if it's present.
- 3.54k:
- Fix failure during Python macro handling (improper reference to a slice of savevar)
- 3.54m:
- Add a '\' to the end of the pngspath when creating .bin files to ensure that GG and the image viewer program can properly find the relevant image file.
Enhancements:
- 3.54b:
- Revise processing for pn= on .il directive:
- Allow the form pn=+<increment> in addition to the pn=<value> that was previously allowed
- When pn= is specified, ensure that self.pageno is set so future uses of .pn +<increment> or pn=+<increment) will work properly.
- Revise page number incrementing to fail with an appropriate error message if the current page number is neither numeric nor Roman.
- .dl: When using .dt and .dd, if the .dd immediately follows the .dt and the definition text does not start with a | character, then combine the term from the .dt and the definition from the .dd as though they were a line of format a. Otherwise, there would always be a blank "definition" associated with the .dt.
- Revise processing for pn= on .il directive:
- 3.54c:
- Revise .hr syntax to allow optional w= (e.g., ".hr w=nn%") in addition to the current ".hr nn%". Also, allow more than one space after the .hr tag. Also warn if there are any unrecognized options.
- 3.54d:
- Better handling of nested .dv blocks. Before this they sort of nested, but a missing .dv- could give an incorrect context marker in the error message. Also, detect .dv- that's not closing a .dv block.
- Detect .ig- directive that's not closing a .ig block
- Modify .sr processing: When the search string does not contain \n, but the replacement string does contain \n, insert individual lines broken at the \n characters rather than one long string containing the \n characters. This will prevent false "long line" warnings during the text output phase.
- 3.54e:
- Enhancements to .sr processing:
- Implement a new B tag, similar to the b tag but moved even earlier in processing.
- Allow the replacement string to be a defined macro (via .dm) written in Python
- Enhancements to Greek processing: detect accents that remain after the Greek conversion and issue warnings.
- Enhancements to .sr processing:
- 3.54f:
- Text: Squash multiple spaces from the interior of lines within a .ix block (but still preserve leading spaces)
- HTML: Adjust CSS generated for .ix blocks to give better indentation
- 3.54j: check for unused images during HTML pass:
- Warn PPer of unused images, or images used multiple times.
- Also warn of files in images directory that aren't .jpg or .png files.
- Implement -img command-line option. Without it only a summary report of the new errors is provided; with it a detailed report is provided.
- 3.54l:
- Implement .ini file support
- Added support for ppgen.ini or ppgen-<name>.ini where <name> is specified via the command-line argument -ini
- Support allows specification of CSS defaults for h1-h6 and the specification of .nr values
- Implement .ini file support
- 3.54m:
- HTML: Allow .fs to affect lists (.ul, .ol, .dl), and to affect their content in a predictable manner.
- HTML: Allow .fs to affect .fn directly, so consistent font size results will occur when footnotes contain a mixture of different elements, not just paragraphs. (This is another aspect of predictable font sizes.)
- 3.54n:
- Honor a prior .fs for the .dv directive, as was done for .fn and for .ul/.ol/.dl in 3.54m.
- Add fs= operand on .dv so a self-contained font-size change for a group of statements can be expressed as .dv fs=<size> / followed by the statements / .dv-
- Add push operand to .fs to allow stacking the current value, which can be popped by .fs with no arguments. A ".fs push" will save the current font-size on a stack. Subsequent ".fs <size>" will not affect the stack. Eventually a ".fs" without a size will either (a) restore the stacked value or (b) set the font-size to 100% if there is nothing on the stack. This may be handy for use in macros, which could generate a ".fs push" to save the current size (which the macro does not know), then a ".fs <size>", then additional statements, and finally a ".fs" to restore the original size.
- Note that font-size changes within .fn, .dv, .ul/ol/dl blocks are entirely self-contained, and have no effect on text that follows the block closing. After the block is closed the font-size and font-size stack are the same as before the block was opened.
- 3.54o:
- Text: Allow PPer to specify the characters to replace <b>, <i>, etc. via .nr directives. (See .nr tag-b, tag-i, etc.)
- Warn of any conflicts if the chosen characters are used elsewhere in the file, or if two tags have the same character and both are used in the file. Either of these may indicate that a TN should be included.
- Allow the PPer to "tag" small-capped text rather than UPPER-CASING it so it behaves more like bold, italic, etc.
- Added check to complain and terminate if the PPer happens to use any of the "internal" Unicode characters that ppgen uses for special purposes.
3.54 27-Jan-2016
Bug Fixes:
- 3.53a:
- Table issues:
- Fix problem of sometimes appearing in table headers
- Remove irrelevant error message about a column being too narrow to hold the word
- Performance enhancement by not wrapping cell text that is already narrow enough
- Preserve leading blanks when stripping multiple consecutive blanks from a string.
- Table issues:
- 3.53c5: Fix problem wrapping a paragraph that contains a .bn directive (text output only)
- 3.53c6: Fix .sr error resulting in no changes when processing successful search strings containing \n
- 3.53c8: Fix problem with recognizing the .ix directive.
- 3.53c9:
- (HTML) Allow .nf blocks to have only centered (.ce) and right-aligned (.rj) lines of text
- (txt) Fix problem of appearing in text tables with multi-line cells and valign = b or m
- 3.53ca: (txt) Fix error of long .it lines not being generated with proper hanging indent in .ol blocks.
- 3.53ca1: Fix several nesting issues for .ol, .ul
- 3.53ca2: Fix more nesting issues for .ol, .ul, especially when using .it blocks. Fix alignment problem when .ul style=none
- 3.53ca4:
- Fix for <target> inside <sc> string using wrong small-cap class name.
- Fix for incorrect HTML on generated <ul> and <ol> when a class name is specified on .ul or .ol directives
- Fix for <fs=..> within page link markup (#...:...#) in HTML. We now use the protected : instead of normal : to avoid confusing the link handling.
- Eliminate possible ".RS c" at end of text output file when using .ul, .ol
- Warn about (and then ignore) any specified table borders in Latin-1 output
- 3.53ca5
- Detect incorrect column specification (missing colon) for a table and fail with proper error message rather than trapping with a stack trace
- When an HTML table cell starts with protected blanks, use text-indent instead of padding-left so only the first row is indented if the cell content wraps
- 3.53ca7:
- Fix problem using \[ in .sr directives, and possibly some other characters such as \{
- 3.53ca8:
- Fix .ol/.ul coding problem introduced in 3.53ca7.
- 3.53ca9:
- Fix padding issue for table cells with borders in HTML and "h" alignment specification (double padding-left specification in CSS)
- 3.53cb:
- .dl: Fix Python error reporting missing .dl-
- .dl: Adjust line-height of <dt> element to allow collapse=y to work reliably
- 3.53cc:
- Fix error message for dot directives rejected within .ul, .ol, .dl to include ".dl" in the error text
- .dl: In text output, with combine=y, float=y, and a long term, ensure at least 1 blank separates the term from the definition.
- .dl: Change CSS definition of <dt> to use min-width rather than width, and when floating add a padding-right of .5em.
- .dl: Apply tindent in HTML when style=p
Enhancements:
- 3.53b: Implement .ul, .ol, and .it to support creation of unordered or ordered lists.
- 3.53c: Implement .dl/.dl- (and .dt/.dd) for definition lists and dialog (fixes in 3.53c1 through c5)
- 3.53c7:
- Change px specifications on borders to "thin" to better comply with DP PPV Guidelines.
- Change padding on .pageno to use "em" rather than "px" to better comply with DP PPV Guidelines.
- Implement new named register, pnstyle, with values of title or content, to control how the page numbers are generated and provide workaround for CSS validator bug.
- Default: content, which avoids the bug, and generates page numers more in the style of Guiguts
- 3.53ca3: Remove support for .it blocks (.it, .it-) within .ul/.ol blocks, leaving only the form ".it some text" as .it blocks aren't really needed.
- 3.53ca4
- move some escape processing before doGreek to allow \[ and \] within [Greek: ...] tagging
- use the regex package instead of re if available on the user's system, but set default as VERSION0 (compatible with standard re package)
- .dl improvements
- 3.53ca6:
- When centering text output (.ce, .nf c) if a line is too long then center each portion of it, rather than centering the first part and using a hanging indent for the remaining line(s) of wrapped text. This makes the text and HTML handling compatible.
- Allow any kind of input line to be continued with a \ at the end. The \ will be replaced by a blank, and the following line will be concatenated after the blank. (Note: .de is handled differently; the lines are not concatenated but remain separate in the HTML output file.)
- 3.53ca7:
- Merge experimental branch GreekBracketMatch to allow ] within [Greek: ...] tags without the need for the PPer to escape them using \]
- 3.53ca9:
- Implement align=r for .dl
- Adjust spacing between elements in .dl
- Rework .dl with style=p for HTML. Disallow hang=y for style=p.
- 3.53cb:
- .dl: Add break=y to tell ppgen to maintain line breaks when using combine=y
- .dl: Change handling of blank lines. A single blank line terminates a definition, but additional blank lines are ignored. To effect additional spacing between items use .sp instead.
- 3.54
- Update to make the HTML generated for .dl style=p a bit prettier.
- Renumber to 3.54 before rolling into production.
- Allow macros (.dm) to be written in Python for situations requiring more than simple text substitution
3.53 25-Aug-2015
Note: 3.53 is identical to development release 3.52l2 except for the reported version number.
Bug Fixes:
- 3.52a: ppgen allows you to leave tags (e.g., <i>, <b>, etc.) open across lines in .nf b/l/r blocks, by closing them for you and reopening them on the next line. It also has code to recognize those added tags when they end up before leading blanks on that next line, and to properly calculate the proper indentation as though the tags were not present. However, open <lang=xx> tags caused a problem, because they are encoded into a "safe" format before that processing can occur, losing the proper indentation. 3.52a fixes that by placing the added tags after any leading blanks on the next line.
- 3.52c: Fix problem with .nf l/b in HTML where the rewrapping of long lines that are already indented ends up with the overflow not indented far enough.
- 3.52d: Fix loop while wrapping text when PPer has an indent (.in + leading spaces in text) that exceeds the line length (.ll)
- 3.52e: Revert old change (3.47r?) that put the "page-break-before: auto" into the CSS for h2, rather than in a separate class. That doesn't work because without the separate class the definition that epubmaker provides (later in the CSS) overrides it.
- 3.52f: Fix HTML validation problem with index (.ix) subentries.
- 3.52g: Fix improper handling of "\ " that occurs somewhere after transliterated Greek and some improper handling of "\" within table cells.
- 3.52h: Safe-print some messages related to .sr processing to they don't cause Python failures if the message text contains UTF-8 characters.
- 3.52i: Remove erroneous warning messages about duplicate footnote references for any named footnotes (e.g., [A]). The generated code was OK; it was just an unexpected message.
- 3.52j: Fix failure in doIllo trying to issue error message about malformed .il
- 3.52k: Ignore <al=?> when determining whether table cells wrap in the text output file. It ignored that markup when determining the column widths, but had an error in another part of the code when figuring out whether to insert blank lines between rows of the table.
- 3.52l: For wrapping paragraphs when .nr break-wrap-at is in effect, need to wrap at width+1 (.ll + 1) for a blank break char but at width (.ll) for a non-blank break char, as it will be kept and wrapping at width+1 could leave the line one character over the limit.
- 3.52l2: Fix more problems with .nr break-wrap-at, related to "perturb" mode and adding erroneous blanks to the text when ppgen needs to steal words from a previous line to make the current line longer.
Enhancements:
- 3.52b: Make generated CSS more readable by consistent use of spaces before values, spaces after semicolons, and final semicolons in definitions.
- 3.52d:
- For performance and ease of maintenance of ppgen, replaced dodot() with a routine that does a dictionary lookup rather than a long if/elif to find the right processing routine.
- Add .ix/.ix- directives for handling indexes. In HTML they will use <ul><li>. In text the index will automatically be indented 1 space if ".in 0" is in effect.
- Allow w=none on .ta directives to suppress specification of table width, table margins, and cell widths in HTML/epub/mobi output. This leaves the table layout to the browser or ereader device/app, which may allow them to do a better layout job. Note, though, that the table appearance may differ from that in the text output file or in the printed book.
- 3.52j: Allow . in column 1 if followed by non-alpha
3.52.1 13-Jul-2015
Note: Incorporates an important bug fix to 3.52, affecting page breaks for <h2> elements in epub/mobi files. Anyone using ppgen 3.47r or later and ".h2 nobreak" should upgrade to 3.52.1 to avoid that problem.
Incorporates changes since the prior production version, 3.51a.
Bug Fixes:
- 3.51a: Fix Python failure handling .ce within .nf b/l blocks.
- 3.51c: Nigel noticed that, according to w3c documentation, the "page-break-before" attribute cannot be used with an empty <div> element. Unfortunately, that's what ppgen was doing for the .pb command. It generated an empty div with "page-break-before: always" followed by a horizontal rule. To comply with that statement in the w3c documentation I moved the horizontal rule inside the div, so the div is no longer empty.
- 3.51e:
- Fix problem if line with .fn # is immediately followed by a line that begins with a link (#...:...#). In text it generates a warning about an invalid footnote name/number and flags the footnote as invalid in the output file.
- Fix the context marker for illegal id= values on .h"n" statements
- 3.51g: Fix loop in text processing if PPer has a malformed .il directive, for example: .il- or a .il without any operands.
- 3.52.1: Revert an erroneous change from 3.47r, which moved the "page-break-before: auto" from the <h2> element (where it would become part of a class definition) into the CSS generated for h2. Unfortunately, this causes page break processing issues, as epubmaker's CSS for h2 overrides ours, resulting in <h2> always having a page break in the epub/mobi.
Enhancements:
- 3.51b:
- Add -sbin command-line option. The -sbin will cause ppgen to generate a GG- and PPQTv1-compatible .bin file for the source file itself, named, e.g., "project-src.txt.bin". Having this file can make it easier to work with your -src.txt file in GG or PPQTv1, as those editors will be able to more easily show you the .png associated with the source text. After processing the -sbin option and creating the .bin file (remember, this requires the presence of .bn directives) ppgen will terminate without doing any other processing.
- Added support to allow usage of the .rj directive within .nf c blocks. Previously only .nf b, l, and r blocks allowed .rj within them. The right-aligned lines will line up with the right edge of the block (that is, aligned under the right-end of the longest lines for .nf b, l, and c) in the text, but for .nf c in HTML the alignment will be only approximate, depending on the characters in the longest line and in the .rj line(s). You can fine-tune the alignment using a new named register ce-rj-fudge, which starts out defined as .nr ce-rj-fudge ".45" which pads the .rj lines on the left by .45 times the difference between the length of the line and the longest line in the block. E.g., for a difference of 10 characters in length it generates CSS for "padding-left: 4.5em". Increasing the value will move the right-aligned line further to the right. My hope is that the default value will be "close enough" and you won't really need to adjust it to try to get things exactly right.
- 3.51d: Remove 3.51b support for .rj within .nf c. It can cause issues with lost text in epub/mobi.
- 3.51f: Add -ppqt2 option ro create .ppqt files (ppqt v2 metadata) in addition to any GG .bin files created.
3.51a 9-Jun-2015
Incorporates changes since the prior production version, 3.50.
Bug Fixes:
- 3.50b: Fixes a rare problem with excess left padding in HTML table cells when the cell text begins with protected (non-breaking) spaces specified as "\ " or "\_".
- 3.50c: Fix problem with [#]...:...[#] being taken as a PPer-supplied link rather than two footnotes
- 3.50e: Fix a problem with .nf r text appearing too far right following .in +n, and also a problem with .ce and .rj text within .nf b appearing too far to the left following .in +n.
- 3.50h: Fix Python failure when generating text output file and a .ta directive uses the id= keyword. This bug was introduced in a recent development version, probably 3.50b.
- 3.51a: Fix Python failure handling .ce within .nf b/l blocks.
Enhancements:
- 3.50a: Allow a table cell to span multiple columns of the table. You must still specify the same number of cells on the row as you specified in the header. However, if a cell should span multiple columns you specify the spanned columns as <span>. Example: If you have a 3-column table, and in a particular row you want the first cell to span two columns, you would use something like: "Cell 1 text | <span> | Cell 3 text". If you wanted it to span all 3 columns you would use: "Cell 1 text | <span> | <span>".
- 3.50b: (Note: These changes were implemented as part of the experimental version allowing table borders. See here for full details.
- Allows specification of an HTML id value for tables, via id=value (or "value" or 'value') on the .ta directive.
- Fixes problem with getting double blank lines between table cells in text when cells are multi-line. ppgen will no longer add a blank line between cells if the PPer has already provided one.
- Allows specification of cell borders for HTML and text tables. Changes are made to the .ta directive to specify left/right (vertical) borders for the entire table, and top/bottom (horizontal) borders are specified by new row markers. In addition, new named registers (.nr) can be used to control left/right padding within table cells, as well as to provide finer control over the border widths and styles for HTML. Note that this support only applies when you have specified column widths on the .ta directive; it does not apply when you have ppgen calculate the column widths for you.
- 3.50c:
- Don't generate both id= and name= for <a> elements; only generate id=
- Allow <br> to break lines when wrapping text in text output formats. The <br> will be converted to <br /> in the HTML output. This allows the PPer to have intentionally shorter lines in tables, paragraphs, headings, image captions, etc. A table cell can have multiple paragraphs now by using <br><br> within the cell, which results in a short line, followed by a blank line, followed by the rest of the cell text.
- 3.50d: Allows the PPer to tell ppgen to consider additional characters as "line break" points when wrapping text. For example, while wrapping table cells the PPer might want ppgen to try breaking lines at hyphens as well as at its usual blanks. Or, when processing long chapter summaries the PPer might want to allow ppgen to break lines at em-dashes as well as blanks, or at blanks, em-dashes, or hyphens. This is controlled by a new named register, set by the .nr directive, break-wrap-at. The default value is "" (no added characters), keeping the default behavior of earlier versions: break only on blanks. Note that blanks are always allowed. This affects any place that text can be wrapped: tables (with column widths specified), headings, paragraphs, illustration captions, long lines in .nf blocks, etc.
- 3.50f: Changed the processing of ".fn number or #" and ".fn-" in the text version so they adjust the indent value by +2 and -2 directly, rather than using ".in +2" or ".in -2". This should avoid surprises for the PPer in some cases when a footnote is followed by a ".in" command with no value specified.
- 3.50g: Provides support to allow the PPer to declare that some rows of a table are headers. This specification is ignored for the text output, but in the HTML any cells on header rows will use the <th> tag rather than <td>, as required by the new PPV Guidelines and the DP Best Practices for tables. To indicate a header row put <th> at the beginning of the first cell on the row (before the <al=...> alignment tag, if any). Note that HTML table headers are bold by default in browsers and epub/mobi, but ppgen uses the alignment you specify via <al=...> or on the .ta directive to override the normal behavior of having centered headers.
- 3.50h:
- Rework horizontal table borders in HTML so that _ is thin solid, __ is medium solid, = is medium double, and == is thick double. This removes the use of px measurements and complies better with new PPV Guidelines and DP Best Practices.
- Consider .de statements before warning of unused targets, as id= may be used simply to allow the PPer to style something using ".de #id-value ...".
- 3.50i: When considering table rows and deciding whether to automatically add a blank line when cells have wrapped, recognize that a line with " | <span> | <span>" should count as a blank line
Examples for 3.50d:
To allow breaking table cells at either blanks or a hyphen, use .nr break-wrap-at "-" .ta whatever ... .ta- .nr break-wrap-at "" // optionally set it back to the default to prevent surprises
To allow breaking a chapter summary at blanks, em-dashes, or hyphens, use .nr break-wrap-at "— -" // Note the space between the characters; this is required. .in 2 .ti -2 Chapter summary text here... .nr break-wrap-at "" // optionally set it to defaults to prevent surprises
If you use -- for your em-dashes, and want to allow breaking something on them, you would use .nr break-wrap-at "--" // no space, the break is allowed after any -- "character".
Real-life example: In one recent book that used ppgen, the chapter summary in the text version appears this way without using this new support:
Technical terms—Sun-dried clay and unburnt bricks—Use of these in Greece—Methods of manufacture—Roof-tiles and architectural decorations in terracotta—Antefixal ornaments—Sicilian and Italian systems—Inscribed tiles—Sarcophagi—Braziers—Moulds—Greek lamps—Sculpture in terracotta—Origin of art—Large statues in terracotta—Statuettes—Processes of manufacture—Moulding—Colouring—Vases with plastic decoration—Reliefs—Toys—Types and uses of statuettes—Porcelain and enamelled wares—Hellenistic and Roman enamelled fabrics.
With the new support, specifying .nr break-wrap-at "—" it looks much more even, like this:
Technical terms—Sun-dried clay and unburnt bricks—Use of these in Greece—Methods of manufacture—Roof-tiles and architectural decorations in terracotta—Antefixal ornaments—Sicilian and Italian systems—Inscribed tiles—Sarcophagi—Braziers—Moulds—Greek lamps— Sculpture in terracotta—Origin of art—Large statues in terracotta— Statuettes—Processes of manufacture—Moulding—Colouring—Vases with plastic decoration—Reliefs—Toys—Types and uses of statuettes— Porcelain and enamelled wares—Hellenistic and Roman enamelled fabrics.
3.50 5-May-2015
Incorporates changes since the prior production version, 3.49.
Bug Fixes:
3.49f: Fix Python fault handling <target id="..."> (only with double quotes; without quotes or with single quotes it worked just fine)
Enhancements:
- 3.49b: Added a backtracking mechanism to the rewrapping mechanism to try to recover from short output lines in the .txt output, which occur often with chapter summaries. When ppgen finds a short line (< 55 characters) it will try to back up to a previous line which is longer than 55 to see if it can move one or more words down to make the short line long enough.
- 3.49c:
- When validating links & targets add a check for case mismatches and warn user
- Detect .ta- outside of table and crash with message
- Remove extra spaces within header lines
- Allow title= attribute on .h1 and .h2 to help with epub generation.
- 3.49d:
- Add "begin" and "end" operands to .ti to allow a hanging indent to persist across multiple paragraphs (e.g., .ti -4 begin, followed by several paragraphs, followed by .ti end)
- Add alignment of "h" for table cells to use a hanging indent (1em HTML, 2 characters text) (e.g., .ta h:20 r:5)
- In text output, for an illustration without a caption supplied, use the alt text if present.
- 3.49e: Allow individual table cells to have different alignment than what is specified on the .ta directive. If the first text in the cell begins with <al=x> where x is one of l (left-align), r (right-align), c (center), or h (hanging indentation) the value specified will override the .ta specification just for that individual cell. The tag will be removed.
- 3.49g: Minimizes the number of distinct image classes (icnnn, idnnn, ignnn) produced by ppgen.
- 3.49h: Implements ".nr nfl <number>" to establish default indentation for .nf l blocks in text output when ".in 0" is in effect (Default value is -1, and ppgen will merely warn the user if ".in 0" is in effect as it did before this enhancement.)
3.49 4-Apr-2015
Incorporates changes since the prior production version, 3.48a.
Bug fixes:
- 3.48f:
- When a .nf l/b/r block contains several blank lines in a row, only 1 was displayed in HTML. This fixes that.
- Sometimes the presence of .bn information in a .nf b block was not properly recognized, causing the block to be shifted right by one space. This fixes that.
- Detect lines longer than the line length within .nf c/b/r and wrap them as we do for .nf l blocks.
- 3.48k: Fix two bugs in Greek and filter (-f command line option) processing:
- Adjusted Greek processing to detect theta before stigma to allow sth to become sigma theta rather than stigma h
- Fix bug in -f processing that left \<space> and \| characters encoded Greek strings in the output file
- 3.48l: More Greek adjustments:
- Further adjustment of Greek stigma processing. Stigma is now either {st} or {St} or {ST} to allow proper processing of the much more common case where st means sigma tau not stigma.
- When keeping original Greek, remove extraneous space we were adding before or after the original.
Enhancements:
- 3.48c:
- Change default for generating output files: create -utf8.txt and .html output files by default. Create a -lat1.txt file only if specifically requested by using the -o command line parameter.
- Recognize non-spacing (combining) characters such as occur in Hebrew and calculate actual length of text string properly.
- Strip leading/trailing blanks from .hn text so it centers, left-aligns, or right-aligns properly in text output (like it does in HTML)
- Incorporate experimental Footnote handling (see Footnotes Tutorial)
- 3.48d: Incorporates the experimental version of ppgen that allows .dc inside .nf b/l/r (but not .nf c) blocks.
- 3.48e: Several enhancements:
- Better context display for problems with id= or name= values
- Improve handling for longer strings with non-spacing characters (Hebrew, for example)
- Complain and terminate if a .ig is found while already ignoring; probably means a .ig- is missing.
- 3.48g: Some internal code cleanup for ease of maintenance
- 3.48h: Sidenote enhancements
- Allow PPer to use | to signal original line breaks (both in .sn and <sn>) in HTML, but remove (change to blank) in <sn> form in text
- Wrap long .sn-style sidenotes in text if no | in them
- 3.48i: Misc. cleanup and enhancements:
- Better diagnostics and context for malformed tables
- Better context for long lines in .nf b blocks
- Added a few alternative diacritic markup forms
- Fixed error with processing of -l command-line option
- Revised logging for Greek conversions to reduce the number of generated messages. Also added a new debugging flag, -dl (el, for log) to show the more detailed Greek messages)
- Moved filtering code so it happens before any other changes are made to the file, so the output of filtering is a complete copy, including any comments, lines that would be excluded by .ig or .if, etc.
- 3.48j: Provide warnings to the PPer if proofers have used non-standard diacritic markup for supported characters, so the PPer can verify what they've provided and what ppgen will produce against the page images.
- 3.48l: When scanning for Greek allow [Greek:text] with no space after the colon. (This is a proofreading mistake, but one I think ppgen should accept to make it easier for the PPer.)
- 3.48m:
- Protect \| and \(space) in all [Greek: ...] strings whether we're doing Greek processing or not, so they will pass through into the output transparently instead of being lost
- Detect .li- outside of .li block and fail the run.
- When wrapping text in paragraphs, remove any consecutive space characters (e.g., ' ' becomes ' ')
3.48a 8-Mar-2015
Bug Fixes:
- 3.47a: Fix ppgen failure when a .nf b or .nf c block contains a blank line.
- 3.47b: Fix .ig problem that could cause an extra line to be ignored. Fix problem converting Latin-1 and UTF-8 text in error messages to ASCII, so error messages can come out more reliably and without causing additional Python errors.
- 3.47f: Handle all </g> and </c> that occur on a line, not just the first of each.
- 3.47g: Specify "em" unit in CSS for footnote bottom-margin (bug introduced in 3.46f)
- 3.47i: Fix validation error in <h2> elements when .pn off and .pn link are specified and a page number is needed.
- 3.47j: Fix late bug in .cv (diacritic) processing that prevented it from working (also fixed in 3.47.2). Also fix failure when .de is the last real line in the input file.
- 3.47k: Fix bug while "safe printing" an error message that can cause an additional failure. Also: change default pti value from 1.0em to 1em to aid regression testing. Also: put comment removal code back where it was, after .sr capture, so .sr strings can include // easily (this was an undocumented, and unintended feature, but it has proven useful and so should be kept)
- 3.47l: Fix problem with self-closing HTML tags in .nf blocks
- 3.47o: 3.47e cleaned up some error messages but ended up showing the wrong context for a couple of error situations involving .bn and .ce. This fixes the problem, so if one of those directives has a problem ppgen will display the correct context within the source file.
- 3.48a: Fix reinitialization of some variables. Biggest effect: ppgen will no longer create duplicate or incorrect information in .bin files.
Enhancements:
- 3.47b: Sidenote support. For documentation see Sidenote handling.
- 3.47c: New named register, pti (paragraph text indent) to specify the amount of indentation when using indented paragraphs. Previously this was fixed at 1.0em. (Suggested/implemented by Davem22.)
- 3.47d: Support for .bn to recognize .jpg/.jpeg proofing image types. (Suggested/implemented by Davem2.) Also, warn PPer if the project contains mixed proofing image types (suggested by db-req (srjfoo)).
- 3.47e: Standardize the "malformed directive" error messages, provide more information for some, and make the crash_w_context message(s) clearer
- 3.47h: Warn if user specifies a table width > 72 for text output files, including the leading space and spaces between columns.
- 3.47m: Support <abbr> tag in several simple formats for PPers who wish to follow some of the accessibility guidelines.
- 3.47n: Allow escaping of / characters via \/ so that text or dot directives can contain //. Usually ppgen treats anything following // as a comment, but if the PPer needs to use // as part of meaningful text or a directive that is now possible. Instead of "//" the PPer would use "/\/" or "\/\/".
- 3.47p: Detect ".pn +0" or a .h1-6 with pn=+0 and reject them, since they cause duplicate HTML id values which will fail validation.
- 3.47q: Enhancements to .sr via new options in the first parameter:
- f: applies this .sr during filtering
- b: applies this .sr before processing (allowing better paragraph or table cel wrapping) instead of during post-processing
- p: prompts the user before making a replacement (not usable with search operands that contain \n)
- 3.47r: Miscellaneous code cleanup; slight modification to generation of <h2> elements.
3.47.2 1-Mar-2015
Bug fixes:
- 3.46a: Prevent page numbers from sinking down into a .dv block, just as we do for a .li block. Instead, issue a warning message and place the page number into a stand-alone p before the div. (Note: if this causes a problem in some situation, the PPer can simply move the .pn or the .dv to get the page number within the div. But in general it's not safe for ppgen to place the page number within the div as we don't know how the CSS for the div would affect the appearance of the page number.)
- 3.46g: Prevent page link processing (#text:ID-value#) from interfering with .de statements and with code in .li blocks.
- 3.46h: Prevent ppgen crash while trying to report a long line (text output) if the line has no blanks within the first 60 characters.(Thanks, davem22.)
- 3.46i: Adjust CSS generated when we create a div before a .li to handle pending vertical space. This will allow DeStyle to create a proper dynamic class for that div.
- 3.47.1: Fix error introduced in 3.46f where bottom-margin in footnote CSS is missing the "em" unit.
- 3.47.2: Fix late error in .cv (diacritic) processing that prevented it from working.
Enhancements:
- 3.46b: Incorporate the experimental search/replace feature into the mainline Development branch. (Documentation.)
- 3.46c: Syntax check more cases of PPer-provided ID= and NAME= values. Illegal values will now be a warning rather than a fatal error, to allow more checking in a single ppgen run, though that may result in additional failures later in processing. Also, ppgen has always allowed the PPer to "escape" certain characters that have significance in HTML, by using a \ before them. This applied to {, }, [, ], and < but not to > which seems a bit surprising. It also requires the PPer to know that if escapes are needed, the source should contain \{text\} or \[text\] but not \<text\> (which would come out as <text\> in the output file). Now \> is allowed and will behave as expected and consistently with the other paired characters.
- 3.46d: Improved link checking and warning/error messages. (Note: ppgen checks all references to images, and checks all links internal to the file. It does not check links you may have created to external files using, for example, your own HTML embedded using the .li command.)
- 3.46e: More improvements to link checking and better messages. Also: warn user if a .if causes a .sr command to be skipped inappropriately. For example, if you have a ".if t" and within that block you have a ".sr h" you probably have something out of place, and ppgen will now warn you about that.
- 3.46f: Allow non-numeric footnote labels if the PPer wants to specify them manually. E.g., ".fn abcd", with a reference in the text having the form[abcd]. Labels may contain the characters A-Z, a-z, 0-9, "-", "_", ":", or ".".
- 3.46j: Promote the experimental Greek and diacritic handling into the development version to make it more widely available.
- 3.46k: Always create the -utf8.txt output file if the PPer specifies -ou, even if the input file is encoded in Latin-1 or ASCII. (Note: in this case, though, the output file will still be encoded in Latin-1 unless .cv or .gk commands are used.)
- 3.46l: Support to correct mis-formatted diacritic markup where the formatters have done, e.g., [<i>)A</i>] or [<b>)A</b>] instead of the correct way with the tags outside the []. PPer can request this with new options italic=y (default: n) and bold=y (default: n) on the .cv command. Also: removed superfluous "wide line" warning message.
3.46: 20-Jan-2015
Bugs fixed:
- 3.45a: Modify the HTML generated for <target id=...> from a self-closing <a ... /> tag to <a ...></a> which seems to fix an indentation problem in some odd cases where a <target ...> precedes a footnote with no other intervening text.
- 3.45b: Fix UTF-8 text output error when using a negative .ti value, and the next source line starts with a UTF-8 em-dash ("—").
- 3.45b2: Follow-on fix to 3.45b to handle the additional case where the line starts with more than one UTF-8 em-dash. (Note: this also fixed an unreported bug in line wrapping for UTF-8 text files that made lines containing em-dashes wrap shorter than the specified line length in some cases.)
- 3.45e2: Remove erroneous (but harmless) error message caused by 3.45e2 trying to validate a page number on a .il that didn't have one.
Enhancements:
- 3.45c: Added align= operand to .h1/2/3/4/5/6 commands. Values are c (centered, default), l (left-aligned), or r (right-aligned) and they will apply in both the HTML and text output. Previously alignment for headers could be controlled only in HTML output, via .de CSS specifications.
- 3.45d: Added warnings if ppgen encounters the same tag nested within itself within .nf blocks (example: you specify <i> while already within an italic string), or if you end the .nf block with tags that are not properly closed.
- 3.45e: Allow links to Roman page numbers; allow upper- or mixed-case Roman page numbers; warn if page numbers are neither Arabic nor Roman.
- 3.45f: Better error detection for missing .pm arguments; allow up to 99 arguments
- 3.46: Added "done." message at end of processing
3.45: 20-Dec-2014
Bugs fixed:
- 3.44a: Possible incorrect HTML generation if a source line contains more than one set of <sc> markup, with different characteristics. For example, a line containing both <sc>Act</sc> and <sc>A.M.</sc> would display the A.M. the wrong size. Also some warning messages may be erroneously skipped.
- 3.44d: Wrong class may be used for some <sc> strings depending on other text on the same line. The same error may also be triggered by having certain characters in the string that ppgen considers "special" and has converted into an alternative format to protect them during processing. The code now converts them back to their original format before examining the small-cap string.
- 3.44e: Restore the capability for PPers to put markup such as <i> within link text (e.g., #131<i>a</i>:il131a#) which was accidentally removed while trying to fix another bug a few releases ago.
Enhancements:
- 3.44b:
- Support for .h4, .h5, and .h6 commands to generate h4, h5, and h6 level headers. All have the same basic format as the older .h1/2/3: .h4 break-option pn=... id=... where "break-option" is optional and if specified should be either nobreak (the default) or break. Following that is one line of header text which may be broken into separate lines by using a | character if desired. Like h1, h2, and h3 the h4, h5, and h6 headers are all centered. In HTML they have normal weight and a font-size of 1em. Alignment, font-size, and weight can be overridden globally via .de or individually by specifying an id= operand on a header and using .de for that id value.
- Previously when processing a .il command for HTML, ppgen would warn the PPer if the .il specified link= and a file name that does not exist in the images folder. Now ppgen will also check whether the file specified in fn= exists, and warn if it doesn't.
- 3.44c: Enhancement to handling of multi-line captions in the text version. For details see Multi-Line Captions, specifically the section for ppgen version 3.44c and later
3.44: 05-Dec-2014
Bugs fixed:
- Restore behavior of multiple .sp commands in HTML. In text (and in HTML before 3.43) when multiple .sp commands occur before generating any output ppgen keeps the one with the largest value. Changes in ppgen 3.43 modified HTML processing to keep the most recent .sp rather than the one with the largest value, which is inconsistent. 3.43a restores the earlier handling. (3.43b fixes a typo in that change.)
- Fix problem of an incorrect <title> attribute in HTML if a .dt directive contains an ellipsis or certain other special characters.
- Fix a Python error introduced in 3.42 if ppgen tries to wrap a very short text string. It occurs when using, for example, .ti -9 / .in 10 and then having a text string shorter than 10 characters to wrap.
- 3.43d: Avoid erroneous warning message for "all lower case within <sc> </sc> tags" when within a .nf block.
- 3.43e: Fix error in .di processing introduced in 3.43 that generated incorrect HTML
3.43: 24-Nov-2014
Bugs fixed:
- Incorrect HTML generated if the first line of a footnote also contains an internal link in the form #something:something#
- CSS created for illustrations (.il commands) improperly overrode all <img> elements, even those used in drop-cap images (.di command), making the width specification on .di ineffective.
- Fixed a problem where .pn within a .nf b/l/r block could cause loss of leading spaces on a line.
- Fixed a page number problem introduced by the changes made to .h2 and .nf handling, which sometimes caused HTML validation errors by causing a page number span to be left outside of a div.
Enhancements:
- Better error detection for malformed .nf commands
- Better warning message if a PPer places a .pn command before an HTML .li block. Also, in that situation the page number will be placed into a stand-alone paragraph rather than being left with nothing (div, p, etc.) around it, so it will not affect HTML validation.
- Ensure that empty self-closing HTML elements generated by ppgen have a space before the />.
- In the text output files, ensure that [Illustration] tags (with or without captions) have at least one blank line before and after.
- Revise .h2 and .nf handling in HTML to provide better spacing when the PPer uses a sequence like .h2, .sp, .nf
- For the .di command (drop-cap image), allow PPer to specify the image height without specifying the image width. Arguments now are either the original (filename, width, height, adjustment-factor) or the new form: filename, width, adjustment-factor (updated 2014-11-23 at 0800 EST)
3.42: 09-Nov-2014
Enhancements:
- Provide support for ppgen to create Guiguts- and PPQT-compatible metadata (.bin) files to make PPVing simpler for PPVers who use those tools
- Better error messages in some cases where text lines cannot be wrapped to 72 characters or shorter
Bugs fixed:
- In HTML, apply pending vertical space (from .sp command) using a standalone <div> before processing a .li block, rather than applying it to the next item after the .li block.
3.41: 03-Nov-2014
Bugs fixed:
- Retain (and display, if requested) page numbers that occur in .nf b/l/r blocks
- Ensure that page numbers float down to the appropriate location in the HTML output, rather than (on rare occasions) floating up and making the page number appear to change at the wrong spot.
3.40: 29-Oct-2014
Enhancements:
- Detect .il command with width (w=) that does not specify the units (px, %) and issue warning message.
Bugs fixed:
- Modify generated code to avoid a Firefox bug when a page number occurs on a line that starts with a drop cap.
- Fix issue where .pn statements inside .nf blocks result in leading space miscalculation.
3.39: 23-Oct-2014
Enhancements:
- Allow adjustment of the size for a drop cap via the .nr dcs command
- Allow continuation of a .pm command to make handling of long arguments easier
3.38: 21-Oct-2014
Bugs fixed:
- Fix very minor bug in handling .ma commands
3.37: 19-Oct-2014
Enhancements:
- Implement new Footnote and Illustration named regisers (.nr) to allow PPer to translate those words in ppgen text output for LOTE projects
- Improve checking for unclosed .li blocks and for .de commands with missing continuation lines
Bugs fixed:
- Detect missing .dv- command and issue error message
- Fix problem related to use of .na with .nf c
- Properly skip over .li blocks while handling footnotes
3.36: 15-Oct-2014
Enhancements:
- Implement .dv command to allow PPer to create an explicit <div> with an ID in the HTML, allowing use of .de to control output appearance in some cases, without requiring an escape to literal HTML via .li
- Improve error handling for .dm command
- Improve parsing of .ma command
Note: Older versions omitted (at least for now)