Added support for "acronym plurals", the "glossaries" LaTeX package, and a configurable acronym label creation.#115
Added support for "acronym plurals", the "glossaries" LaTeX package, and a configurable acronym label creation.#115rmrnc wants to merge 1 commit intofletcher:masterfrom rmrnc:acronym-plurals
Conversation
>>> \newacro{RFC}[RFC]{Request for Comment}
can be use in a text as
>>> See RFC 1234 for more information. Multiple RFCs are covering security protocols.
resulting in
>>> See \ac{RFC} for more information. Multiple \acp{RFC} are covering security protocols
In order to achieve this, find_abbreviations() [in writer.c] had to "partially" match an abbreviation and pass a detected plural along the corresponding node->key. Thus, a new node key type ABBRPLURAL has been introduced [in libMultiMarkdown.h] and propagated in all print_*_node() functions.
As the partial abbreviation lookup necessitated frequent calls of strlen() performance optimization dictated to extend the node structure by adding length element instead. Visible repercussions are: a strdup() replacement strdup_ext(), modifications of the trim_*() functions, and alteration of all node creations and node copies.
================================================================================================================
Added support for the LaTeX glossaries package by Nicola Talbot (see http://www.ctan.org/pkg/glossaries).
For serious documents this package allows a better acronym and glossary management. Due to its preferred workflow which requires a separate makeidx call, it seems not possible to circumvent the introduced code changes by using TeX's "\renewcommand" for MMD's supported "\ac" and "\newacro" commands. By specifying the metadata key
>>> LaTeX Acronym Package: [acronym | glossaries ]
the preferred acronym package can be selected. Omitting the "LaTeX Acronym Package" key selects, of course, MMD's default behavior, i.e., "acronym package" support.
For this feature the METAKEY, ABBREVIATION, and ABBR switch-cases in print_latex_node() [in latex.c] and the scratch_pad struct [in parser.h] have been modified. An additional enum (latex_acronym_package) has been introduced. The additional scratch_pad element latex_acronym_config is stored in a compact way.
================================================================================================================
Added support for configuring an acronym's label creation
MMD current preference in creating labels is to avoid duplicate acronym keys by concatenating the key with the acronym's text. This makes manual referencing of acronym labels very difficult. Unfortunately, manual acronym referencing in unavoidable, when longer documents are written, e.g., intentionally selecting the full acronym text after its first mentioning, using acronyms in "HTML comment escaped" LaTeX blocks like abstracts, etc.
By specifying the metadata key
>>> LaTeX Acronym Label Style: [Abbreviation | Full]
the preferred acronym label creation style can be selected. Omitting the "LaTeX Acronym Label style" key selects, of course, MMD's default behavior, i.e., "full" label creation.
For this feature the METAKEY, ABBREVIATION, and ABBR switch-cases in print_latex_node() [in latex.c] and the scratch_pad struct [in parser.h] have been modified. An additional enum (latex_acronym_label_style) has been introduced. The additional scratch_pad element latex_acronym_config is stored in a compact way.
|
Hi, As it affects the MMD's grammar, I haven't tackled another major obstacle: how to extend the acronym definition to accept additional parameters. Ideally, something like the
creating an entry (for the glossaries package)
It would be also great to allow HTML-commented LaTeX commands in an acronym definition to be carried over, e.g.,
Any thoughts on that? Cheers |
|
Oops. I involuntarily closed the the pull request. |
Added support for "acronym plurals"
Now an acronym defined as
can be referenced in a text by
Producing
In order to achieve this,
find_abbreviations()[in writer.c] has to "partially" match an abbreviation and pass a detected plural along the correspondingnode->key. Thus, a new node key typeABBRPLURALhas been introduced [in libMultiMarkdown.h] and propagated in allprint_*_node()functions (though only an implementation for LaTeX has been provided).As the partial abbreviation lookup would've necessitated frequent calls of
strlen(), performance optimization dictated to extend the node structure by adding alenelement. To avoid an irresponsible memory increase, an intentional small data typeunsigned short inthas been proposed. The chosen data type is (build) configurable by introducing an abstractNODE_LENtype and severaltypedefmacros [in libMultiMarkdown.h] Repercussions are: an optimizedstrdup()replacementstrdup_ext()providing a string's length, optimizations of thetrim_*()functions, and alteration of all node creations and node copies.Added support for the LaTeX glossaries package
Glossaries package provided by Nicola Talbot (see http://www.ctan.org/pkg/glossaries).
For longer documents this package allows a better acronym and glossary management. Due to its preferred workflow, which requires a separate
makeidxcall, it seems impossible to avoid the introduced code changes by applying TeX's\renewcommandand substituting MMD's supported\acand\newacrocommands instead. By specifying the metadata keythe preferred acronym package can be selected. Omitting the "LaTeX Acronym Package" key selects, of course, MMD's default behavior, i.e., "acronym package" support.
For this feature the
METAKEY,ABBREVIATION, andABBRswitch-cases inprint_latex_node()[in latex.c] and thescratch_padstruct [in parser.h] have been modified. An additionalenum latex_acronym_packagehas been introduced. The additionalscratch_padelementlatex_acronym_configis stored in a compact way.Added support for configuring an acronym's label creation
MMD current preference for creating labels is to avoid duplicate acronym keys by concatenating an acronym key with the acronym's text. This makes manual referencing of acronym labels very difficult. Unfortunately, manual acronym referencing in unavoidable, when longer documents are written, e.g., intentionally selecting the full acronym text after its first mentioning, using acronyms in "HTML comment escaped" LaTeX blocks like abstracts, etc.
By specifying the metadata key
the preferred acronym label creation style can be selected. Omitting the "LaTeX Acronym Label style" key selects, of course, MMD's default behavior, i.e., "full" label creation.
For this feature the
METAKEY,ABBREVIATION, andABBRswitch-cases inprint_latex_node()[in latex.c] and thescratch_padstruct [in parser.h] have been modified. An additionalenum latex_acronym_label_stylehas been introduced. The additionalscratch_padelementlatex_acronym_configis stored in a compact way.