code into the ApplyRules() routine. This corrects a number of
subtle issues with the Crossbar module: especially, the Crossbar
module's erroneous handling of uploaded files. (Thanks, Ingo
Belka!)
* modules/crossbar.pl (CrossbarBeforeApplyRule): Corrected this
module's erroneous handling of uploaded files.
(RunMyRulesTocCrossbar): New function, offloading a Crossbar-
specific hack from "toc.pl" into this file. (This is still...
slightly hacky, but a bit better.)
* modules/toc.pl (TocRule): Allowed more than one table of contents
per page. Before, this module only recognized the first "<toc...>"
markup for a Wiki page: all subsequent "<toc...>" markup for that
page was studiously ignored. Correcting this improves integration
with the Crossbar module.
(RunMyRulesToc): Removed a Crossbar-specific hack.
(TocAfterApplyRule): Allowed more than one table of contents.
($TocIsApplyingAutomaticRules): New option, providing slightly
finer-grained control over Table of Contents handling.
the case of namespaces containing non-ASCII characters. This
should be legal, but lead to problems when generating links to
pages in such namespaces. The URL encoding of the non-ASCII
characters prevented the $InterSitePattern from matching. Instead
of using this regular expression, we now try and guess at the
string using URL constraints ([^/?&;=]+), URL decoding it, and
then checking the $InterSitePattern.
Wiki-provided correction, courtesy Bayle Shanks. Apparently, the
previous regular expression in this function failed to match the
Comment form's HTML. This patch corrects that! The reCAPTCHA widget
is now properly displayed by both the Comment and Edit forms.
Thanks, Bayle. (http://bayleshanks.com)
replacement for the Sidebar module, for all Sidebar users
requiring a cleaner integration of that module with other modules
such as "toc.pl" and "footnotes.pl". This new module also improves
Sidebar customizability by permitting users to place the "Crossbar"
at any position in any page.
* modules/forms.pl (FormsRules): Generalized so as to support both
the Sidebar and Crossbar modules.
* modules/toc.pl (RunMyRulesToc): Generalized so as to support both
the Sidebar and Crossbar modules.
* t/crossbar.t: New test suite, testing the Crossbar module.
significant, typo.
* modules/sidebar.pl: Reverted. I underestimated the scope of
changes needed to bring this module in line with recent, other
changes to the Table of Contents module. The good news is that the
reverted Sidebar module now works as expected for all modules except
the Table of Contents module; of course, the bad news is that the
reverted Sidebar module no longer works for the Table of Contents
module. (Unfortunately, we can't have both, here.) I will be
recommitting my changes to this module as a new module, therefore,
named "modules/crossbar.pl" -- sometime, soon. That new module
will (probably) break backwards compatibility with this module, but
will otherwise behave as expected... with all modules.
* t/sidebar.t: Prevented testing against the Table of Contents
module, as the Sidebar module is now known not to work with that
module.
Probably not a genuine issue... but one can never tell.
* modules/creole.pl (CloseHtmlEnvironmentsCreole): Removed.
* modules/creoleaddition.pl (CloseHtmlEnvironmentsCreoleAddition):
Removed.
* modules/poetry.pl (CloseHtmlEnvironmentsPoetry): Removed.
removing all previous module-specific hacks. However, as it is a
rewrite, it may still have issues. (Fortunately, time is the mother
of invention and bug fixes.)
* modules/toc.pl: Refactored. This is a complete rewrite
removing all previous module-specific hacks. As with "sidebar.pl",
it may still have issues. That said -- I'm relatively proud of it,
and confident that it (should) stand up under rigorous scrutinies,
utilization, and brutalization.
* modules/forms.pl (FormsRule): Slightly revised, so as to comply
with the "sidebar.pl" refactoring.
($PoetryIsHandlingCreoleStyleMarkup): New option.
(PoetryRule): Utilized new options, so as to permit several markup
styles, and simplified implementation, according to recent
refactoring in "wiki.pl".
(CloseHtmlEnvironmentsPoetry): New function, permitting block-level
elements (e.g., lists, tables) within poems.
integrated with improvements to CreoleHeaderRule().
(CreoleHeaderRule): Improved -- remarkably. Header markup may now
include all other (non-bol) markup, with exception of link markup
producing a dirty HTML block. ("Dirty" link markup in header
markup is stripped out, as appropriate.)
(CreoleListAndNewlineRule): Simplified implementation.
(CreoleRuleRecursive): Supported the global @HtmlAttrStack.
(GetCreoleLinkHtml): New function, reducing code-bloat.
* modules/creoleaddition.pl (CreoleAdditionRule): Simplified
implementation; and handled small caps markup properly, now.
the InElement() and [Add|Close]HtmlEnvironment() family of
functions to add, remove, and search against HTML tag attributes
for all recently stacked HTML tag environments. Previously, tag
attributes were not retained; they were simply returned as text
from the AddHtmlEnvironment() function. Markup modules producing
complex HTML -- particularly, complex HTML having deeply nested
span or div tags -- can leverage the newly rewritten functions,
below, to simplify, streamline, and "clean up" their markup code.
(InElement): Rewritten to use this new variable.
(AddHtmlEnvironment): Rewritten to use this new variable.
(CloseHtmlEnvironment): Rewritten to use this new variable.
(CloseHtmlEnvironments): Rewritten to use this new variable.
(CloseHtmlEnvironmentUntil): Rewritten to use this new variable.
(AddOrCloseHtmlEnvironment): New function. Added so as to avoid
duplicate redefinition in the Creole, Creole Addition, and Usemod
modules.
* modules/usemod.pl (UsemodRule): Corrected erroneous usage of the
InElement() function. (I don't think UsemodRule() was ever quite
right, really; it's a bit surprising it worked this long!)
(TocRule): Use the new option; principally, this permits Wiki
administrators to prevent this module from converting
"<h1>...</h1>" tags "<h2>...</h2>" tags.
reusable outside the class.
(process): Use it.
(NewSearchFreeTextTitleAndBody): No longer strip quotes from tags.
(SearchFreeTextGet): Rewrote phrase handling so that tags can be
made mandatory by enclosing them with quotes, but making sure that
extra effort is only spent if there are multiple search terms.
Also if the terms are in fact whole tokens and not just any
phrase, avoid looking opening the page files and doing a regular
search.
tokens (foo_bar).
(SearchFreeTextTagsRule): Add double quotes around tags that
contain a space ("foo bar"). This should work for technorati links
and the like.
(SearchFreeTextIndex): When indexing a tag containing a space, use
underscores instead ([[tag:foo bar]] is indexed as foo_bar).
(SearchFreeTextCloud): When showing a tag containing an
underscore, replace it with space (foo bar).
(NewSearchFreeTextTitleAndBody): When searching for tags, strip
quotes and replace spaces with underscores. Searching for tag:"foo
bar" will thus result in a search for the tag foo_bar.
(SearchFreeTextGet): No longer tags a tag flag as an argument.
This also affects all the callers (NewSearchFreeTextTitleAndBody).
As tags will end up without quotes and with spaces replaced by
underscores, the special case for tags is gone.
by delegating that closure to the "CloseHtmlEnvironments" function.
This permits other extensions (namely, the Creole Markup extension)
to redefine the "CloseHtmlEnvironments" function and thereby
precisely override just when and how list markup is closed.
* modules/creole.pl ($CreoleDashStyleUnorderedLists): New option.
(RunMyRules): New function.
(CreoleRule): Improved conformance to the Wiki Creole standard by
strictly requiring, among other notable things, that horizontal
rules consist of four and only four dashes, that all image links
to images on the Wiki (e.g., image "FreeLinks") be marked as dirty
blocks, that the nowiki markup strictly require the opening and
closing three braces to reside on their own lines having no other
markup, and that preformatted code not extend over multiple blocks.
(CreoleListAndNewLineRule): Avoid handling dash-style unordered
list markup unless explicitly requested by the new
"$CreoleDashStyleUnorderedLists" option being set to 1 (since
that markup is non-standard, and explicitly contradicts the Wiki
Creole standard).
* t/creole.t: Adjusted tests broken by the above modifications;
these were, typically, tests for nowiki and preformatted markup
that assumed a less conformant, gentler handling of that markup.
dependent defaults for $HibernalPostCommentsAuthorshipMarkup.
(AssayHibernalPostBounds): Corrected several obscure, but
damaging, edge-cases. (This necessitated a rewrite of the
algorithm, unfortunately.)
position returns the length of the matched string on finishing
application of all rules. ("creole.pl" and "creoleaddition.pl" now
depend on this; it notifies them that rules are now finished.)
* modules/creoleaddition.pl (CreoleAdditionRule): Injected a sanity
check, to ensure closure of blockquotes at the end of a page.
* modules/creole.pl ($CreoleTableCellsAllowBlockLevelElements): New
option.
* modules/creole.pl (CreoleRule): The last, one hopes, of all Creole
table markup modifications (for the moment). The rather complex
table markup code has been modified so as to use the new option, has
been refactored for robustness and strict conformance to the Wiki
Creole standard, and has been well-documented.
* modules/creole.pl (CreoleGetTableHtmlAttributes): Deleted function.
of Wiki Creole syntax within Wiki Creole syntax. (Yes... This is confusing?)
* modules/creole.pl (CreoleRule): Used the new function. Specifically, you
can now embed Creole and CreoleAddition syntax (such as bold, italics, small
caps, and so on) within URL and Wiki link text, ala
"[[Some_Page|Wow! **Quite** an //%%interesting page%%// page, here]]."
* modules/creoleaddition.pl (CreoleAdditionRule): Renamed function from
"CreoleAdditionRules" to this.