NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
Packagist · #2961 most downloaded on Packagist
Multi-purpose text formatting and markup library. Plugins offer support for BBCodes, Markdown, emoticons, HTML, embedding third-party media (YouTube, etc...), enhanced typography and more.
Last release 10 months ago
14 Nov 2025
Release timing varies
gaps range from 2 weeks to 9 months
Nearly every release is documented
notes for 60 of the last 60 stable releases
Nothing withdrawn
no release was ever pulled
11 years old
137 releases · first in 2015
61d2a9b6c Emoji: fixed compiler warnings in JavaScript parser
61d2a9b6c Emoji: fixed compiler warnings in JavaScript parser15fa701f5 Fixed compiler warning in JavaScript version of urldecode()b69ead06d Fixed various compiler warnings in JavaScript sources987acc8f4 Fixed various compiler warnings in JavaScript sourcesda93809a4 Fixed various compiler warnings in JavaScript sources55b029742 Keywords: fixed compiler warnings in JavaScript parserb75c7ccb5 Litedown: fixed JavaScript warnings in Emphasis pass6f2f1fcc9 BBCodes: updated default CODE BBCode4dd69b5dd FancyPants: updated JavaScript parserbb7c27a95 HTMLElements: simplified attributes parsing1dbbcc606 HTMLElements: updated attribute filter definitions9e2a4e874 JavaScript: updated externs3c3bc7d3f JavaScript: updated externsa28771a30 JavaScript: updated regexp result handling and castinga2e4c9a83 Litedown: eliminated superfluous variable in Blocks pass0ddf1936c Litedown: made variable non-nullable in Emphasis passf5f10524a Parser: ensure that regexpLimit is set before executing a plugin's regexpfea82fedf PipeTables: handle tables inside of spoiler blocksef703b9b1 Reorganized DOM diffing in live previewOne column per quarter.
28a405d9e MediaEmbed: added Trending Views
28a405d9e MediaEmbed: added Trending Viewse83bf910c BBCodes: updated the algorithm that handles backslashesdecd84340 BBCodes: updated the regexp that captures unquoted attributes58835aa86 Litedown: exclude ASCII punctuation from inline scripts' short form⚠️ This release contains API changes. See [docs/Internals/API_changes.md](https://s9etextformatter.readthedocs.io/Internals/API_changes/#210) for a de
⚠️ This release contains API changes. See docs/Internals/API_changes.md for a description. ⚠️
aed44ffd6 Added FilterHelper and short syntaxc8e3025c5 Added RecursiveParser, to be used internally357c9c773 DisallowUnsafeDynamicURL: added support for xsl:choose statements3da711fed Litedown: added support for block spoilers and inline spoilersa59c76606 MediaEmbed: removed defunct site Healthguruc7a59a846 MediaEmbed: removed defunct site LiveCap8d4310813 MediaEmbed: removed defunct site Yahoo Screen6f7aa1ab2 MediaEmbed: removed discontinued site HumorTV1b79cd300 Fixed default sortPriority value in Tag.js8d6c6327b Fixed handling of ignored attributes in live preview3c63ecc4a BBCode: properly reject colons in BBCode names during configuration531c0e963 FilterSyntaxMatcher: renamed ArrayKey, ArrayValue to Scalar, Literal13cfdfa2e Litedown: set all blockquote tags to the same priority27f70904e Litedown: skip the next auto line break when a forced line break is used42d410db1 MediaEmbed: updated BBC News903568b8a MediaEmbed: updated Bleacher Report81239be11 MediaEmbed: updated CNBCf2d0b1cb1 MediaEmbed: updated Internet Archive69d0bfeb4 MediaEmbed: updated MRCTV1a78a1e62 MediaEmbed: updated MSNBC58874c6f0 MediaEmbed: updated İzlesene872421b92 OptimizeChoose: switch the logic of when/otherwise if it eliminates a branch34b2c5369 Parser: do not needlessly fix self-closing tags with an autoClose rulef7eb4688d Parser: improved the tag sorting algorithm9641a2721 RecursiveParser: use the match name as a tiebreaker when sorting7cd28aa6a XPathConvertor: simplified tokenizeXPathForExport()a3e52ece8 XPathConvertor: updated to use RecursiveParserd43da72ea XPathConvertor: use a PCRE MARK to identify the matchs9e\TextFormatter\Configurator\RendererGenerators\PHP\XPathConvertor\Runner has been removed.
The Litedown behaviour has changed:
021b68b5b Emoji: fixed Twemoji filenames for ZWJ sequences
07a289f23 Removed deprecated APIs
⚠️ This release contains API changes. See docs/Internals/API_changes.md for a description. ⚠️
2868b21d6 Added new named parameters to tag filterscfb9bb738 Fatdown: added mailto to the list of allowed schemesbec1c0810 MediaEmbed: added Sporcleab956458c MediaEmbed: added support for Google Sheets charts40adb246e TemplateNormalizer: added support for custom normalizations list in constructor27716cd91 Utils\Http\Client: added returnHeaders option7bb7842f8 AbstractNormalization: removed the $onlyOnce property5d443634e Emoji: removed attribute name from configurator4d6998300 RegexpBuilder: removed CharacterClassBuilder07a289f23 Removed deprecated APIs571a82ce8 Renderers\XSLT: removed unreachable codec2e519208 TemplateHelper: removed deprecated APIf018f9da3 Fixed rejection of templates that can only be partially rendered by the Quick renderer234c8df36 Utils\Http\Client: fixed custom headers not being reset between requests1f917de42 AVTHelper: improved handling of escaped braces6f827c274 Autolink: prevent partial replacements inside of a URLffd66f8b8 Bumped PHP requirements to 7.1f237bd07c DisallowUnsafeDynamicURL: reorganized codebf09f813a Emoji: changed default template to use Twemoji assets407f5208e JavaScript\FunctionProvider: prefill cache and keep it in sync40a9f8e66 MediaEmbed: updated BBC Newscb7888d3d RegexpBuilder: refactored to use s9e\RegexpBuilderbf24e0d72 RendererGenerators\XSLT: reorganized code47c32647d RendererGenerators\XSLT: replaced optimizer6a71b5f29 Reorganized Configurable trait9f029995b Tag: reorganized invalidate()b18ba8205 TemplateLoader: replace CDATA on load5c18a0de1 UrlFilter: allow non-HTTP, non-FTP URLs with no authority parte70e95de4 Utils\Http\Client: updated API212389923 XPathConvertor: identify translate() as a string functionb9aa4c8e3 XPathConvertor: refactored and rewritten234de3584 XPathConvertor: updated Runner constructorThe following elements have been removed:
s9e\TextFormatter\Configurator\RendererGenerators\XSLT::$optimizer
s9e\TextFormatter\Configurator\RendererGenerators\XSLT\Optimizer
s9e\TextFormatter\Configurator\TemplateNormalizations\AbstractNormalization::$onlyOnce
Elements that were deprecated in 1.x have been removed. See previous entries for current usage. This includes:
s9e\TextFormatter\Configurator\Helpers\TemplateHelper::getAttributesByRegexp()
s9e\TextFormatter\Configurator\Helpers\TemplateHelper::getCSSNodes()
s9e\TextFormatter\Configurator\Helpers\TemplateHelper::getElementsByRegexp()
s9e\TextFormatter\Configurator\Helpers\TemplateHelper::getJSNodes()
s9e\TextFormatter\Configurator\Helpers\TemplateHelper::getObjectParamsByRegexp()
s9e\TextFormatter\Configurator\Helpers\TemplateHelper::getURLNodes()
s9e\TextFormatter\Configurator\Helpers\TemplateHelper::loadTemplate()
s9e\TextFormatter\Configurator\Helpers\TemplateHelper::replaceTokens()
s9e\TextFormatter\Configurator\Helpers\TemplateHelper::saveTemplate()
s9e\TextFormatter\Configurator\Helpers\TemplateParser::parseEqualityExpr()
s9e\TextFormatter\Configurator\JavaScript::$exportMethods
s9e\TextFormatter\Configurator\JavaScript\Minifiers\ClosureCompilerApplication::$closureCompilerBin
s9e\TextFormatter\Configurator\JavaScript\Minifiers\ClosureCompilerApplication::$javaBin
s9e\TextFormatter\Plugins\Emoji\Configurator::$attrName
s9e\TextFormatter\Plugins\Emoji\Configurator::addAlias()
s9e\TextFormatter\Plugins\Emoji\Configurator::getAliases()
s9e\TextFormatter\Plugins\Emoji\Configurator::removeAlias()
The second argument for the s9e\TextFormatter\Utils\Http\Client methods get() and post() has changed. See API .
The Autolink behaviour has changed:
The Emoji configurator has changed:
Nothing published for this version
Nothing published for this version
5b4420b4c MediaEmbed: added Sendvid
5b4420b4c MediaEmbed: added Sendvidd3860f3a5 MediaEmbed: updated XboxDVR35cd6f3bd MediaEmbed: added 247Sports
35cd6f3bd MediaEmbed: added 247Sports9312daef7 MediaEmbed: added BitChute639a92db4 Censor: do not use atomic grouping in JavaScript regexp3e576cd3d MediaEmbed: updated 247Sports5f26c13a5 MediaEmbed: updated Amazon78d31f3f0 MediaEmbed: updated Gfycatae5ac62af MediaEmbed: updated MLB01d8b015f Autovideo: added controls to the player
01d8b015f Autovideo: added controls to the player496320829 MediaEmbed: added TikTok2fb37c77a Emoji: updated to Unicode 12.0c164ec116 MediaEmbed: register variables on setup and update them in real timec35ed70dd MediaEmbed: updated Spotify63574b76c UninlineAttributes: added a fast path for static attributes
63574b76c UninlineAttributes: added a fast path for static attributesd2d21bae3 AVTHelper: simplified parse()5644c5f88 Configurator: do not implicitly call finalize() in asConfig()3440c0225 Emoji: updated EmojiOne URLfc470bbd9 FoldArithmeticConstants: updated regexps3a2d4d3c0 MediaEmbed: updated Gfycat446c4295e MediaEmbed: updated Gistea5d59768 MediaEmbed: updated Google Sheets4be095e3e MediaEmbed: updated Google Sheetsc216c71b5 MediaEmbed: updated Pinterest020ea657d MediaEmbed: updated The Guardian582dcb793 MediaEmbed: updated Tumblr1fc93878f NodeLocator: reorganized internal APIc61d88266 NormalizeAttributeNames: replaced PHP conditional with XPath predicate76f73f2ab PHP Serializer: cache the value of all "void" attributes8ca414940 Quick: improved the regexp used to match string literals in sourcea24789833 TemplateLoader: remove redundant namespace declarations on load/save192081983 TemplateNormalizations: improved the handling of whitespace in text nodes1c805a2ee TemplateNormalizer: reduced the number of passes that run on uninlined attributesfacc8d79b TemplateParser: use XPath queries instead of DOM methodsf944f8789 UninlineAttributes: use a document fragment when creating xsl:attribute elements4e355e608 XPathHelper: reorganized parseEqualityExpr()$configurator->asConfig() does not implicitly call $configurator->plugins->finalize() anymore. The latter remains available and can be called explicitly if necessary, before the configuration is generated.
AVTHelper::parse() now silently converts invalid XPath expressions to literals instead of throwing an exception.
640eed514 ColorFilter: added support for alpha channel
640eed514 ColorFilter: added support for alpha channel7651e0c8a MediaEmbed: updated Gfycat9341727fd MediaEmbed: updated Google Sheets62b26960b MediaEmbed: updated Instagram3eb59f3e9 MediaEmbed: updated MSNBC and Team Coco1ba5d6685 MediaEmbed: updated Medium397e9f640 MediaEmbed: updated Twitter2d1755cbd MediaEmbed: updated Twitter9dc6edfb2 MediaEmbed: updated dynamically-sized sites21a52e55d Parser: reject invalid UTF-8 inputec51bb0b9 Parser: remove control characters from attribute values8c9bfcbf2 AbstractDynamicContentCheck: added support for multiple named attributes in XPath expressions
8c9bfcbf2 AbstractDynamicContentCheck: added support for multiple named attributes in XPath expressionsc3c8c86ea DisallowUnsafeCopyOf: added support for multiple attributes in xsl:copy-ofe6668ae95 MediaEmbed: added support for /embed/ URLs in Internet Archivea2bd8c7b0 MediaEmbed: added support for YouTube playlists with no IDe4db3c75d TemplateParser: added support for multiple attributes in xsl:copy-of119cd186e MediaEmbed: removed defunct sites Kiss Video and Videomega9a1107012 AbstractDynamicContentCheck: reorganized checkExpression() codef1f24c6e9 Censor: simplified Helper's regexp8aa52c780 MediaEmbed: updated Hudl3f5de94b9 MediaEmbed: updated Internet Archivecdb0984ad MediaEmbed: updated example URLs to use HTTPS23aadcb92 TemplateHelper: updated highlightNode()⚠️ This release contains API changes. See [docs/Internals/API_changes.md](https://s9etextformatter.readthedocs.io/Internals/API_changes/#130) for a de
⚠️ This release contains API changes. See docs/Internals/API_changes.md for a description. ⚠️
2be2114b4 BBCodes: added colspan/rowspan to TD and THb1f9068e9 ClosureCompilerApplication: added support for user-defined invocation77cd86307 Emoji: added support for Twemoji-style filenamesf73f8c737 Emoji: added support for Unicode 11.0d64c68848 MediaEmbed: added getSites()51a901525 MediaEmbed: added support for /presentation/ URLs in Scribd4473762e5 MediaEmbed: removed Fora.tv684350c16 MediaEmbed: fixed a potential issue with cached HTTP client using the wrong cache dire2abcec27 Emoji: capture trailing U+FE0F even when it's superfluous89d0da364 Emoji: merged default shortnames into custom aliases5b705ab2d Emoji: renamed JavaScript hint71c4369a3 JavaScript: renamed $exportMethods to $exports5baaab747 JavaScript: sort exports in lexical order072c87d2d MediaEmbed: updated Getty Images70c62091a MediaEmbed: updated Global News7d42f039d MediaEmbed: updated Rutubee29597a06 MediaEmbed: updated VK5a42834b2 RegexpConvertor: updated Unicode properties6ccd4a31b Remove e/i/s tags in live preview to emulate the PHP renderer's algorithms9e\TextFormatter\Configurator\JavaScript::$exportMethods has been renamed to $exports . The $exportMethods property is silently deprecated but remains as an alias.
s9e\TextFormatter\Plugins\Emoji\Configurator::$attrName is deprecated but remains functional. The names of the attributes used by this plugin will be hardcoded in a future version.
s9e\TextFormatter\Plugins\Emoji\Configurator::$aliases has been made accessible (see API and docs for usage) and the following methods are now deprecated:
addAlias
getAliases
removeAlias
The following properties are now deprecated in s9e\TextFormatter\Configurator\JavaScript\Minifiers\ClosureCompilerApplication . Check out the documentation for the recommended usage.
closureCompilerBin
javaBin
cf9b03193 Autoimage: added support for .svg, .svgz and .webp
cf9b03193 Autoimage: added support for .svg, .svgz and .webpa656b9159 EnforceHTMLOmittedEndTags: reorganized code6e3039f2e PHP Quick renderer: detect truncated XML with a "r" root tagfd5e9f35a Renderer: detect truncated XML with a "t" root tag806df83ad Renderer: throw an exception when loading invalid XML23906f738 MediaEmbed: added Streamja
23906f738 MediaEmbed: added Streamja149e28792 MediaEmbed: added support for Instagram's IGTV8af61dce9 TemplateNormalizations: added EnforceHTMLOmittedEndTags972a5a2fa MediaEmbed: removed defunct site Blab9cc11283d MediaEmbed: removed defunct site Viagamec0b22b293 ElementInspector: fixed incorrect results in closesParent()fd66aa6f2 MediaEmbed: updated Amazon8d2e3c683 MediaEmbed: updated Amazon (.in)4ccf4531f MediaEmbed: updated Brightcove0d813046d MediaEmbed: updated Gamespot142e4f953 MediaEmbed: updated Kickstarter25db4ecb8 MediaEmbed: updated MSNBCe152afe5a Parser: prevent tags from starting or ending in the middle of a UTF sequence⚠️ This release contains API changes. See [docs/Internals/API_changes.md](https://s9etextformatter.readthedocs.io/Internals/API_changes/#120) for a de
⚠️ This release contains API changes. See docs/Internals/API_changes.md for a description. ⚠️
70e7d0631 MediaEmbed: updated Youku7b909f51a NodeLocator: simplified code8b647bafc Split TemplateHelper into separate componentsec48771b3 TemplateHelper: simplified some codeThe s9e\TextFormatter\Configurator\Helpers\TemplateHelper class have been split into subcomponents. The current API is deprecated but remains fully functional. The new API is as follows:
s9e\TextFormatter\Configurator\Helpers\NodeLocator
getAttributesByRegexp
getCSSNodes
getElementsByRegexp
getJSNodes
getObjectParamsByRegexp
getURLNodes
s9e\TextFormatter\Configurator\Helpers\TemplateLoader
load (previously: loadTemplate)
save (previously: saveTemplate)
s9e\TextFormatter\Configurator\Helpers\TemplateModifier
replaceTokens
s9e\TextFormatter\Configurator\Helpers\XPathHelper
50be65408 MediaEmbed: added support for custom headers when scraping
50be65408 MediaEmbed: added support for custom headers when scrapinga7a43dec5 MediaEmbed: updated NPRfcaa772d5 Reorganized PHP serializer coded16774a0e TemplateParser: fixed an issue with empty elements being incorrectly removed from default case
d16774a0e TemplateParser: fixed an issue with empty elements being incorrectly removed from default case1052a19e0 BBCodes: removed useless code from repository
1052a19e0 BBCodes: removed useless code from repositorya8174fafa Fixed a potential issue with DOMNode::$childNodes returning empty text nodescf1069519 Fixed a potential issue with whitespace passed to the PHP renderer generator's serializer21ef901d2 TemplateParser: fixed a potential issue with DOMNode::$childNodes588c7e272 BBCodes: reorganized Repository internals2aabcb262 TemplateNormalizations: avoid creating empty text nodescb2ddd1df TemplateParser: improved compatibility with Libxml 2.76e1ddead0 TemplateParser: replaced PHP conditionals with XPath predicates65c1fedf6 MediaEmbed: added support for custom user-agent value in scrapes
65c1fedf6 MediaEmbed: added support for custom user-agent value in scrapes5d97a666a ElementInspector: updated with HTML 5.2 changes8d5ece9fe HTMLComments: remove trailing dashes to conform to HTML 5.2a213d7403 MediaEmbed: updated GoFundMe2a1977596 MediaEmbed: updated Imgurfd5a06765 MediaEmbed: updated Team Coco76a71ed88 MediaEmbed: updated Twitter5a558c1da MediaEmbed: updated VK9e6255edc MediaEmbed: updated VK's dimensions692a5157f TemplateHelper: added support for select attribute in passthrough replacements
692a5157f TemplateHelper: added support for select attribute in passthrough replacements4096d3523 MediaEmbed: fixed legacy Imgur embedsa6b9a107b BBCodes\Configurator\Repository: improved error message on bad repository filec50c7525b XmlFileDefinitionCollection: load XML files using native PHP streamsdce9241bb FoldConstantXPathExpressions: fixed an issue with function calls without arguments being incorrectly replaced
dce9241bb FoldConstantXPathExpressions: fixed an issue with function calls without arguments being incorrectly replaced95ea73acb XPathConvertor: fixed boolean conversion of parameters set to '0' in conditionals49330b7fd XPathConvertor: fixed handling of negative numbers that start with a zero815cef8b5 XPathConvertor: fixed handling of numbers that start with a zero1d8456c11 MediaEmbed: updated Liveleakeee99ce51 MediaEmbed: updated MLB8cfcbe30c XPathConvertor: refactored exportXPath()6d69d0ee0 XPathConvertor: simplified matchXPathForExport()57c7a5d71 XPathConvertor: simplified translate()8e6388310 MediaEmbed: added support for "allow" attributes in iframes
8e6388310 MediaEmbed: added support for "allow" attributes in iframes26cad57a6 XPathConvertor: added support for current()d5cafb5e1 MediaEmbed: removed Oddshot556b72ff8 MediaEmbed: updated Gfycat83b6bfa5d MediaEmbed: updated Spotifyaa5532afc TemplateHelper: reorganized replaceTokens()dcef175d3 XPathConvertor: refactored the way XPath expressions are tokenizedac38f54cf MediaEmbed: added support for Telegram
ac38f54cf MediaEmbed: added support for Telegram5f4d01827 TemplateParser: added support for disable-output-escaping="yes"08cb4d52a MediaEmbed: removed support for Imgur's /t/ URLs86f0c7ad7 BBCodes: updated SPOILER BBCode to prevent it from submitting forms7a4633b98 FixUnescapedCurlyBracesInHtmlAttributes: escape the first left brace of a function declaration74c90041a InlineTextElements: do not inline text with disable-output-escaping="yes"58b2a389f MediaEmbed: embed Imgur links to static images87671bcb8 MediaEmbed: updated BBC News95ed3fc0d MediaEmbed: updated CBS News2b30e7523 MediaEmbed: updated Vevo25559caf4 MediaEmbed: updated Vevo289b1e26e Simplified Quick renderer generator472c568b7 TemplateParser: refactored and split into subcomponents8a323795f TemplateParser: simplified node removalb72c04884 MediaEmbed: added FOX Sports
b72c04884 MediaEmbed: added FOX Sports1b7e7a387 Parser: fixed an issue with malformed XML in places where text is ignored⚠️ This release contains API changes. See [docs/Internals/API_changes.md](https://s9etextformatter.readthedocs.io/Internals/API_changes/#100) for a de
⚠️ This release contains API changes. See docs/Internals/API_changes.md for a description. ⚠️
7577e4584 Added caching HTTP clienta107e470a Emoji: added support for textual codepoint sequences147c773ea BBCodes: removed $predefinedAttributes06920f1fb MediaEmbed: removed $captureURLsffde0c243 MediaEmbed: removed $createIndividualBBCodesac33fb0a2 MediaEmbed: removed Vidme24d5ae989 MediaEmbed: removed Zippysharedef39285e MediaEmbed: removed appendTemplate()7e343bf2d MediaEmbed: removed support for custom schemes5921a6ad1 MediaEmbed: removed unused code21a9fce71 Parser: removed implicit invalidation in tag filters1c136a634 Removed InvalidTemplateException and InvalidXslException classes80ec0e641 Removed support for attribute generators and the {RANDOM} token in BBCodes0c3bcb2c2 ElementInspector: updated for HTML 5.2ff6da69aa HTMLElements: updated configurator for HTML 5.20bc92a880 HTMLElements: updated the list of URL attributesdace43e40 Litedown: restricted the characters allowed in link references' URLs8092ea038 MediaEmbed: refactored plugin6557a14ae MediaEmbed: updated 8tracks112b7457c MediaEmbed: updated Dailymotion and Twitch488a15907 MediaEmbed: updated Facebook9079e50c3 MediaEmbed: updated Flickrb7ee53bf5 MediaEmbed: updated Imgurc0f863da8 MediaEmbed: updated Redditeacf0e0f8 MediaEmbed: updated Spotifya5647eb14 MediaEmbed: updated Vimeo3d5cfef45 Parser: reorganized filter processing3de8c6af8 RegexpConvertor: updated Unicode properties to latest version1987a0ba4 TemplateHelper: updated for HTML 5.2788152faf Updated live preview algorithmThe following method and properties have been removed from s9e\TextFormatter\Plugins\MediaEmbed\Configurator :
appendTemplate() — The same functionality can be implemented as a template normalizer.
$captureURLs — Disabling the plugin at runtime produces the same effect.
$createIndividualBBCodes — Individual BBCodes can be created manually .
In addition, support for custom schemes has been removed from the MediaEmbed plugin. The same functionality can be produced using the Preg plugin.
The predefinedAttributes property of s9e\TextFormatter\Plugins\BBCodes\Configurator\BBCode has been removed, as well as the s9e\TextFormatter\Plugins\BBCodes\Configurator\AttributeValueCollection class.
The return value of tag filters is not used to invalidate tags anymore. Tags must be explicitly invalidated in tag filters.
Support for attribute generators and the {RANDOM} token in BBCode definitions has been removed. The same behaviour can be defined in PHP by prepending a custom tag filter to a tag's filterChain .
The s9e\TextFormatter\Configurator\Exceptions\InvalidTemplateException and s9e\TextFormatter\Configurator\Exceptions\InvalidXslException classes have been removed.
8aef6ff75 Added RemoveLivePreviewAttributes template normalization to non-JavaScript renderer generators
8aef6ff75 Added RemoveLivePreviewAttributes template normalization to non-JavaScript renderer generatorsbadcf2a35 Added live preview attribute data-s9e-livepreview-ignore-attrsfa352dc5a MediaEmbed: added live preview hints to dynamically-resized embeds500d43a51 RegexpBuilder: fixed infinite recursion during remerge69332cc50 JavaScript: updated Closure Compiler externs62ed3073f MediaEmbed: keep all optional fields in cached definitions1e56d2a60 MediaEmbed: moved attribute creation out of add()805b1ae9a MediaEmbed: normalize site definitions as they are createdee4b1bdd4 MediaEmbed: updated MSNBC6e5b6c405 Ruleset: refactored internals to be more scalabled3fde3969 TemplateInspector: split individual elements' inpection into ElementInspector2d242d8a7 Updated live preview code and JavaScript externsf6551bb4d Updated live preview to return the last node modifieda75aef0cb Updated the live preview algorithm⚠️ This release contains API changes. See [docs/Internals/API_changes.md](https://s9etextformatter.readthedocs.io/Internals/API_changes/#0130) for a d
⚠️ This release contains API changes. See docs/Internals/API_changes.md for a description. ⚠️
fa9e938a4 Added MinifyInlineCSS template normalizationd471649ce Added timestamp attribute filter0ef891332 Censor: removed unused methodfeeeac930 HashmapFilter: fixed an issue where hash keys were not preserved during JavaScript minification803d3c5b9 RegexpConvertor: fixed the conversion of empty regexps9ccb7597a BuiltInFilters: reorganized filters into separate classes66b1d77be BuiltInFilters: simplified regexp-based filters4f998c818 Logger: renamed get() to getLogs()d2df9701b MediaEmbed: updated MSNBC47b00f1c8 MediaEmbed: updated YouTube017c8f77c MediaEmbed: updated cached definitionss9e\TextFormatter\Parser\BuiltInFilters has been removed and split into multiple classes.
s9e\TextFormatter\Parser\Logger::get() has been renamed s9e\TextFormatter\Parser\Logger::getLogs() .
283087b99 MediaEmbed: updated YouTube to remove deprecated option
⚠️ This release contains API changes. See docs/Internals/API_changes.md for a description. ⚠️
cff256ec2 Added OptimizeChooseText template normalizationf7b88b2d8 Added UninlineAttributes template normalization8dfdedf97 BBCodeMonkey: added support for short-form optional attributese92549522 Litedown: added support for subscript8e751a5a1 MediaEmbed: added Orfium193dec933 Emoji: removed set configuration and hardcoded default template4744c5950 OptimizeChoose: removed redundant method232bb4e03 PHP renderer: removed source from renderer instance433651b7b Removed HostedMinifier and RemoteCachecf79c62f4 Renderer: removed $metaElementsRegexpd37d1912a TemplateInspector: removed getDOM()0c6bc3331 AVTHelper: preserve whitespace in toXSL()4ea55275c BBCodeMonkey: reorganized some code761bc3e35 ClosureCompilerService: updated service's URL34ff96f14 Detect unexpected input that cannot be rendered by the Quick renderer1fc40d19d Emoji: use EmojiOne 3.1's PNG assetse6f58045d Litedown: do not require a blank line before listsbe2618c1d Litedown: refactored Superscript passb6368c235 Litedown: refactored parser into separate passes9ebe42bea Litedown: reorganized Emphasis parserc941be98a Litedown: simplified configurator setupf4be8e77d Litedown: updated emphasis syntax to check for whitespace92ba7928c Litedown: updated superscript syntax8d8e3cde3 MediaEmbed: updated Google Sheetscb942255a MediaEmbed: updated Mail.Rucb0c4d6dc MediaEmbed: updated YouTube283087b99 MediaEmbed: updated YouTube to remove deprecated optione06cc7079 Moved static code from dynamically generated PHP renderers into a separate class713cc2e29 OptimizeChoose: moved generic methods to an abstract class21f63889d Preg: replaced detection of invalid regexpsd5bfb22a4 Quick: bypass entity decoding/encoding when multiple XML attribute values are output in an HTML attribute50d1bf55e Quick: simplified boilerplate code3755ed483 Refactored and simplified template normalization classesf1a382413 Replaced custom branch tables with native switch statements in PHP renderers844df511a TemplateInspector: reorganized code for readabilityd184254b7 TemplateInspector: simplified bitfield analysisbdcfec4fc TemplateNormalizer: increased the maximum number of iterationse20a5c8b0 Updated JavaScript parsers to use bracket notation for character accessf6a3dfdb6 Updated PHP requirements to PHP 5.4.7Support for PHP 5.3 has been abandoned. Releases are now based on the release/php5.4 branch, which requires PHP 5.4.7 or greater. The release/php5.3 branch will remain active for some time but is unsupported.
The PHP renderer's source has been removed from the renderer instance.
The HostedMinifier and RemoteCache minifiers have been removed.
s9e\TextFormatter\Configurator\Helpers\TemplateHelper::getMetaElementsRegexp() has been removed.
s9e\TextFormatter\Configurator\Helpers\TemplateInspector::getDOM() has been removed.
The metaElementsRegexp property of s9e\TextFormatter\Renderer has been removed. Meta elements e , i and s are now always removed from the source XML before rendering.
The quickRenderingTest property of the PHP renderer is now protected.
s9e\TextFormatter\Configurator\Helpers\XPathHelper::export() has been moved to s9e\TextFormatter\Utils\XPath::export() .
s9e\TextFormatter\Configurator\TemplateNormalization has been replaced by s9e\TextFormatter\Configurator\TemplateNormalizations\AbstractNormalization .
The branchTableThreshold property of s9e\TextFormatter\Configurator\RendererGenerators\PHP\Serializer has been removed.
The generateConditionals() and generateBranchTable() methods of s9e\TextFormatter\Configurator\RendererGenerators\PHP\Quick have been removed.
The template used by the Emoji plugin is now hardcoded and defaults to using EmojiOne 3.1's PNG assets. The following methods have been removed from the Emoji configurator:
forceImageSize()
omitImageSize()
setImageSize()
useEmojiOne()
usePNG()
useSVG()
useTwemoji()
b82ab12b4 Litedown: fixed a bug triggered by empty code blocks
b82ab12b4 Litedown: fixed a bug triggered by empty code blocks77e81cfba Quick: fixed an issue with @* in conditionalsac2353ba6 XmlFileDefinitionCollection: fixed an issue with atypical but valid definitions14c4846e4 MediaEmbed: identify [media] tag pairs as markupaeaa1c8f1 MediaEmbed: made ->MediaEmbed->captureURLs accessible744f5a436 MediaEmbed: updated NHLee5e8e13b MediaEmbed: updated Podbean91fa461a0 Preg: normalize custom tag names955c8e78c RulesGenerator: improved code's readabilityba76dd0fd XmlFileDefinitionCollection: cast known config values to the appropriate typeeebac1ad4 MediaEmbed: added support for parameters metadata in site config
eebac1ad4 MediaEmbed: added support for parameters metadata in site config8eb826344 MediaEmbed: removed default dimensions from definitionsd84102711 BBCodes: updated default [img] BBCode to accept dimensions9e917849f MediaEmbed: updated Gfycat57bff33ca MediaEmbed: updated Imgur7e7aa3b23 MediaEmbed: updated Vidmed75174d02 MediaEmbed: updated YouTube⚠️ This release contains API changes. See [docs/Internals/API_changes.md](https://s9etextformatter.readthedocs.io/Internals/API_changes/#0110) for a d
⚠️ This release contains API changes. See docs/Internals/API_changes.md for a description. ⚠️
0239f7e06 Added AllowAll rules generator76c01d93b MediaEmbed: added support for Amazon Indiaafe63fc05 RulesGenerator: added BlockElementsCloseFormattingElements to default generatorsd94ef970f Configurator: removed addHTML5Rules() and integrated it in finalize()3e9a48fe1 Configurator: removed the finalizeParser and finalizeRenderer options from finalize()599a21548 Configurator: removed the optimizeConfig option from finalize()c20153268 Configurator: removed the returnParser and returnRenderer options from finalize()77f96dfe8 RulesGenerator: removed support for parentHTML option4d3370389 Ruleset: removed defaultChildRule() and defaultDescendantRule()65c910a20 TemplateInspector: removed isIframe()f5f176c8c Utils: fixed removeTag() failing with arbitrarily high values4b05c5233 Autoimage: reversed tag priority to allow Autolink to linkify the imagea4862b55e Autovideo: explicitly allow URL tags to be used as fallback9970de5da Internals: increased the default limits for tags and other resourcesc31a802d1 MediaEmbed: explicitly allow URL tags to be used as fallback2d3cc9ba9 MediaEmbed: limit the width of dynamically-sized embeds to 100%a2dba6ee0 MediaEmbed: reorganized template generation for readabilitya58a52a34 MediaEmbed: updated Amazona7088bd48 MediaEmbed: updated Amazon4fc5fbda2 MediaEmbed: updated Getty2074eeabc MediaEmbed: updated Google Drive6b26c91cd MediaEmbed: updated Vidme608840ec2 MediaEmbed: use span as responsive wrapper15f65327a Rules: the default rule for tags is now deny. allowDescendant and denyDescendant now only apply to non-child descendantThe optional argument of s9e\TextFormatter\Configurator\RulesGenerator::getRules() has been removed.
The optional argument of s9e\TextFormatter\Configurator::finalize() has been removed.
The following methods have been removed:
s9e\TextFormatter\Configurator::addHTML5Rules()
Tag rules are systematically added during finalize() . See Automatic rules generation .
s9e\TextFormatter\Configurator\Collections\Ruleset::defaultChildRule()
The default is now deny .
s9e\TextFormatter\Configurator\Collections\Ruleset::defaultDescendantRule()
The default is now deny .
s9e\TextFormatter\Configurator\Helpers\TemplateInspector::isIframe()
In addition, the meaning of the allowDescendant and denyDescendant rules have been changed to exclude the tag's child. See Tag rules .
98f1ec319 Censor: fixed an issue where Helper::censorHtml() would not use the correct replacement
98f1ec319 Censor: fixed an issue where Helper::censorHtml() would not use the correct replacement⚠️ This release contains API changes. See [docs/Internals/API_changes.md](https://s9etextformatter.readthedocs.io/Internals/API_changes/#0100) for a d
⚠️ This release contains API changes. See docs/Internals/API_changes.md for a description. ⚠️
438497a86 MediaEmbed: added support for new Twitch Clips URLse12a63653 TemplateParser: added support for namespacesf0a1b6589 Censor: removed Helper::reparse()023d2f1a7 Tag: removed setSortPriority()51fce5c9d Censor: fixed an issue with special characters in censorHtml()5390c3af6 BBCodes: updated default spoiler BBCode80e813320 MediaEmbed: updated Audiomackaf3c2e758 MediaEmbed: updated audioBoom3e32c86eb MediaEmbed: updated vidmes9e\TextFormatter\Plugins\Censor\Helper::reparse() has been removed.
s9e\TextFormatter\Parser\Tag::setSortPriority() has been removed. See the 0.7.0 notes for more info.
dc754f8d9 BBCodeMonkey: added support for setting nestingLimit and tagLimit in definitions
dc754f8d9 BBCodeMonkey: added support for setting nestingLimit and tagLimit in definitionsc6edaf190 BuiltInFilters: added support for PHP 7.2739fa2ee9 HotnameList: added support for PHP 7.2bd9a5d697 XPathConvertor: added support for PHP 7.207abb3413 MediaEmbed: removed the authoritative part of SoundCloud URLs used as ided780e3b9 FixUnescapedCurlyBracesInHtmlAttributes: fixed an issue where properly escaped braces would get incorrectly escaped again7d7e16ebf FixUnescapedCurlyBracesInHtmlAttributes: improved support for HTML attributes that end with an odd number of left braces76b806e92 HTMLElements: updated list of URL attributes6aba111ff MediaEmbed: systematically scrape track_id from SoundCloud URLs935381522 MediaEmbed: updated BBC Newsd8f6c0573 MediaEmbed: updated Pinterest to exclude "explore" links3159fe96a XPathHelper: added support for ints and floats in export()
3159fe96a XPathHelper: added support for ints and floats in export()284b4e08e FoldArithmeticConstants: fixed an issue with number formatting in non-C locales65f5721d4 Parser: fixed an unbounded loop that can occur when a tag closes an ancestor with a worse prioritycd0a160b3 FoldArithmeticConstants: improved the parsing of decimal and negative numbers82abeb20c Parser: do not apply closeAncestor/closeParent rules if maxFixingCost has been reached to mitigate against unbounded loopsa8abcf6dd Parser: tweaked regexp for performanceb7ba9e117 XPathHelper: improved detection of numerical expressionsa1b60abf9 TemplateInspector: fixed an issue where templates with a mixed content model would not allow any children
a1b60abf9 TemplateInspector: fixed an issue where templates with a mixed content model would not allow any children4ebc635ce FixUnescapedCurlyBracesInHtmlAttributes: escape left braces that are not followed by a right brace3a3577129 MediaEmbed: updated Youku9e1197ae1 TemplateNormalizer: replaced the way iterations are counted10d67eec1 MediaEmbed: added livestreaming tag
10d67eec1 MediaEmbed: added livestreaming tag5e9de5cda MediaEmbed: added support for ABC News embed URLsea80c9deb OptimizeChoose: fixed an issue where xsl:choose elements could be improperly repositionedf44d2dede MediaEmbed: accept uppercase schemes in IGN1356d05e8 MediaEmbed: accept uppercase schemes in SoundCloud231d1bc0e MediaEmbed: updated Google Sheets1041b3e88 MediaEmbed: updated Oddshotd8ed8bf40 MediaEmbed: updated TinyPicb14e5abb4 MediaEmbed: updated Twitch72091c2c4 Autoimage: added support for more punctuations
72091c2c4 Autoimage: added support for more punctuations4f9aa8bcd Autovideo: added support for more punctuations18c63cea7 MediaEmbed: added support for attribution links from YouTube8bbb9b089 MediaEmbed: added support for new share links from YouTube4f5475ffe TemplateInspector: added isIframe()d3f9ae424 BBCodeMonkey: allow newlines in {TEXT} used in composite attributese52087874 EnforceContentModels: limit content fallback to single iframes31f46d6cb MediaEmbed: updated Twitch8d0d4a82a MediaEmbed: updated vidme6d678d75b TemplateInspector: elements with "display:none" won't be considered block elements1f4c52189 BBCodeMonkey: added support for flexible whitespace in composite attributes
1f4c52189 BBCodeMonkey: added support for flexible whitespace in composite attributes22566a0a1 BBCodes: added TBODY and THEAD to the repositorya8114878c PHP renderer generators: added support for @* in conditionsf36db2024 BBCodeMonkey: TEXT and ANYTHING tokens don't have to consume any text in composite attributes3d7542c72 Parser: create tags generated by a fosterParent rule at the first available non-whitespace positionb241fbd2d Parser: remove empty tag pairs, including those with attributes0031b5fa0 Parser: trim whitespace when adding a magic end tag if the current tag ignores whitespacee8bcaed06 Parser: trim whitespace when closing multiple tags if any of them ignores whitespace⚠️ This release contains API changes. See [docs/Internals/API_changes.md](https://s9etextformatter.readthedocs.io/Internals/API_changes/#090) for a de
⚠️ This release contains API changes. See docs/Internals/API_changes.md for a description. ⚠️
8a25af9fa FixUnescapedCurlyBracesInHtmlAttributes: added more JavaScript-related replacementsacdd16962 MediaEmbed: added support for Gifs.com42f549035 MediaEmbed: added support for Pinterest25f2c231a Removed the custom autoloader382b31df3 RegexpParser: fixed incorrect unanchored patternecf1d71e4 Utils: fixed raw newlines in replaceAttributes()bd3e3edce Autolink: simplified parentheses matching842b02716 JavaScript: do not replace the s9e object if it already exists19c33a310 JavaScript\ConfigOptimizer: do not deduplicate empty arrays and dictionariescaf68b1cf MediaEmbed: updated Podbean9deb2f725 MediaEmbed: updated WSHHd8623b088 RegexpParser: anchored bracket matching pattern as a precautionf5f494fc7 TemplateForensics: renamed to TemplateInspector2f57d0383 TemplateInspector: replaced "self" type hints with "TemplateInspector"20c5ed80f Utils: normalize control characters in replaceAttributes()s9e\TextFormatter\Configurator\TemplateForensics has been renamed to s9e\TextFormatter\Configurator\TemplateInspector .
s9e\TextFormatter\Configurator\Items\Template::getForensics() has been renamed to s9e\TextFormatter\Configurator\Items\Template::getInspector() .
e2910c4b1 FancyPants: added =/= as an alias for the not-equal sign
e2910c4b1 FancyPants: added =/= as an alias for the not-equal signa9a2f2fa2 FancyPants: added support for toggling groups of replacementsd8644729c FancyPants: added support for vulgar fractions5bc811858 PipeTables: added support for empty cellsff0e5cf03 Emoji: updated aliases and changed JavaScript regexp to lowercasefcbe4f120 MediaEmbed: updated IMDbe7ad9f604 PipeTables: improved the priority of table tags9c4eff9ab Updated composer.json with dev dependencies92f61dc74 XSLT: force HTML attributes to use double quotes29dd2ca78 Added #fontfamily attribute filter
29dd2ca78 Added #fontfamily attribute filter008025df4 Added PipeTables plugind62d30a89 BBCodes: added align attribute to TD and THf7da8cd9c Fatdown: added PipeTables1b2a9b28f MediaEmbed: added support for MLB.comba6ce5e2d MediaEmbed: added support for Twitch clipsfffd95cde MediaEmbed: added support for the new NHL video site3b3731fe6 FontfamilyFilter: fixed consecutive quoted strings88bbafc3f AttributeFilters: reorganized how each filter sets its own safenessf911748d3 BBCodes: disabled paragraphs inside [TD] and [TH]71c0fe828 BBCodes: updated default [font]8620a49e3 ClosureCompiler: updated externs85f6f41bb HashmapFilter: reorganized code. No functional change5d2eea951 Litedown: improved the priority of QUOTE start tagsffde5aa2e MediaEmbed: updated BBC Newsf4c750adc MediaEmbed: updated Facebook06658f1b3 MediaEmbed: updated IMDbce1b411d7 MediaEmbed: updated SoundCloud. No functional change507fcbddd MediaEmbed: updated Spotify8a486df0d Parser: addTagPair() now sets the priority of the end tag to minus the given value7db413b19 Parser: invalidate tags that are skippedc5d2dbece RegexpFilter: reorganized code slightlyf72332402 Ruleset: clear() should reset defaultChildRule and defaultDescendantRule rather than remove themf83eb28 FancyPants: added support for not equal sign and guillemets
f83eb28 FancyPants: added support for not equal sign and guillemets6d5797c Censor\Helper: fixed an issue with text in quotes being ignored83f2797 Quick renderer: fixed an issue where attribute values would not be saved6dced78 FancyPants: cached tagName/attrName in a local variable for better JS minification7293db8 FancyPants: reorganized code. No functional change04a6539 FancyPants: simplified parseSymbolsAfterDigits()0300282 MediaEmbed: made the default [media] tag's name configurable4048a68 BBCodes: added [table], [tr], [th] and [td] to repository
4048a68 BBCodes: added [table], [tr], [th] and [td] to repository1e44987 Forum bundle: added [table], [tr], [th] and [td]90fcbce MediaEmbed: added support for NBC News videosde73726 MediaEmbed: added support for Washington Post Video426e103 MediaEmbed: added support for new Pastebin URLsfd1094a TemplateForensics: added support for more optional end tags2805fba Emoji: updated aliases915a281 Fatdown: disabled paragraphs inside of <td> and <th>3b8b047 FoldConstantXPathExpressions: replaced the blacklist of unsupported functions with a whitelist of supported functionse82316c FoldConstantXPathExpressions: fixed detection of XPath node tests in uppercase
e82316c FoldConstantXPathExpressions: fixed detection of XPath node tests in uppercased26e62b FoldConstantXPathExpressions: improved detection of nonfoldable expressions⚠️ This release contains API changes. See [docs/Internals/API_changes.md](https://s9etextformatter.readthedocs.io/Internals/API_changes/#080) for a de
⚠️ This release contains API changes. See docs/Internals/API_changes.md for a description. ⚠️
f3ce808 FoldArithmeticConstants: added support for folding substractions83a3468 Litedown: added support for spaces in inline links' info7cb65e0 MediaEmbed: added 'name' and 'tags' metadata to CachedDefinitionCollection items4602feb TemplateNormalizer: added FoldConstantXPathExpressions pass8b2e036 Parser: removed manual garbage collectiondc20ca8 BBCodes: updated default [CODE]75b28f9 MediaEmbed: replaced the SiteDefinitionProvider API6d1d7c0 MediaEmbed: simplified the XML configuration readerThe s9e\TextFormatter\Plugins\MediaEmbed\Configurator\SiteDefinitionProvider interface has been removed.
$configurator->MediaEmbed->defaultSites is now an iterable collection that implements the ArrayAccess interface. See its API .
8608895 Autoimage: added support for fallback link via Autolink
3c2ff81 Added Autovideo plugin8608895 Autoimage: added support for fallback link via Autolinkca3cc4e MediaEmbed: added Steam store64bc419 MediaEmbed: added support for fallback link via Autolink2a7b9ff MediaEmbed: added support for uppercase scheme0693ad7 BuiltInFilters.js: fixed unchecked access to undefined vardfa0e66 HTMLElements: fixed exception's messageba79789 TemplateForensics: fixed allowsChildElements() on a template with no xsl:apply-templates element8371057 Utils: fixed an issue with removeFormatting() where some tags were skipped411f753 Autolink: excluded fullwidth and halfwidth punctuation from links02360fa Emoji: simplified UTF-8 to codepoint algorithma0a2546 Emoji: store hexadecimal codepoints padded to 4 characters31b88d0 Emoji: updated JavaScript regexp. No functional changeb3b9e7b EnforceContentModels: allow for some fallback content in templates with no xsl:apply-templates elementf1fb0c3 HTMLElements: updated the list of URL attributes7f67345 MediaEmbed: updated Amazon9388645 RegexpConvertor: updated Unicode properties2023bfb Replaced the default behaviour on duplicates in AttributeCollection, BBCodeCollection, EmoticonCollection and TagCollectione66f291 TemplateForensics: updated specs to HTML 5.12c8bbf0 Utils: simplified the UTF-8 to codepoint algorithmcda5b1f Tag: setSortPriority() has been deprecated and will emit a warning
⚠️ This release contains API changes. See docs/Internals/API_changes.md for a description. ⚠️
7cd1dfe Emoji: added support for UTR #51 Unicode Emoji, Version 3.0e1701fd Forum bundle: added support for emoji646c85b JavaScript: added support for urldecode() as a callback3626b16 MediaEmbed: added support for non-ASCII usernames in Google+f654a16 BBCodes: replaced stripos() calls for performance3352264 Emoji: made EmojiOne the default image setaee1add Emoji: updated path to Twemoji assets27d1b6b MediaEmbed: improved support for embeds whose dimensions are fully dynamic76e4641 MediaEmbed: updated ESPN8a77784 MediaEmbed: updated Imgurce36a47 MediaEmbed: updated TED Talksf3a0f52 MediaEmbed: updated VK2fc4807 Parser: improved the performance of out-of-order insertions in the tag stack4d3b0b0 Parser: simplified out-of-order insertion algorithm2507bfc Parser: tweaked addTagPair() to reduce the need for additional sorting36c544e Preg: set a higher priority to replacements over default pluginsd0543dd StylesheetCompressor: improved heuristicscda5b1f Tag: setSortPriority() has been deprecated and will emit a warnings9e\TextFormatter\Parser\Tag::setSortPriority() has been deprecated. It will emit a warning upon use and will be removed in a future version.
The following methods now accept an additional argument to set a tag's priority at the time of its creation:
addBrTag
addCopyTag
addEndTag
addIgnoreTag
addParagraphBreak
addSelfClosingTag
addStartTag
addTagPair
addVerbatim
3d68336 Autoimage: added support for uppercased URLs
3d68336 Autoimage: added support for uppercased URLsc8253c9 BBCodeMonkey: added support for putting BBCode attributes in quotes7f3031c Litedown: fixed catastrophic backtracking when matching inline links/images
7f3031c Litedown: fixed catastrophic backtracking when matching inline links/images5e6c18a Litedown: added support for separating blockquotes with two blank lines
5e6c18a Litedown: added support for separating blockquotes with two blank lines636bd77 Litedown: added support for separating lists with two blank linesd77de85 MediaEmbed: added support for Plays.tv shortlinksbf77ead BuiltInFilters: removed public access to parseUrl()39a41bc Configurator: removed getParser() and getRenderer()b005a40 Removed the Variant class and related API915226a BuiltInFilters: fixed an issue with empty query/fragment in URLs52e41b9 ClosureCompilerService: updated externs07317a1 Code: ensure that __toString() always returns a stringe3c010a Code: filterConfig('JS') should return the instance itself to preserve its content from being encoded as a stringd4c9eca Emoticons: customized exception message to be more meaningful584562c Litedown: expanded escaping to include the left parenthesis and single quotea365537 Litedown: replaced the algorithm handling links and imagesec2f000 Litedown: simplified ignoreEmphasis()0f533ba MediaEmbed: updated Scribdaf8ddab MediaEmbed: updated Straw Poll78ca63b MediaEmbed: updated YouTube2ded572 Moved JS parser loading to PluginBase::getBaseProperties()0f34747 PluginBase: getBaseProperties() should not return a 'js' element if there is no JS parser4ecb7f2 Quick renderer: replaced the export() algorithmfa99034 Regexp: replaced JavaScript-related API99fbcd1 RegexpConvertor: updated toJS() to return a string rather than an instance of Coded081f95 Added new rule type: createChild
d081f95 Added new rule type: createChild413fbeb MediaEmbed: added support for Google Drive links that contain a domain namebfad6cc MediaEmbed: added support for JW Platform8a53870 Litedown: suspended escaping inside inline code spansafbbcd5 MediaEmbed: ignore the hash part of URLs when scraping2683928 MediaEmbed: updated Hudl0aff031 MediaEmbed: updated Hudl38ad33f MediaEmbed: updated Reddit41967d0 MediaEmbed: updated SoundCloudd7526a4 MediaEmbed: updated XboxClips to exclude screenshotse141f0b TemplateHelper: refactored some code and reformatted sources96a5a67 TemplateHelper: remove invalid attributes in loadTemplate()a55119c Litedown: removed excessive slash stripping from attributes
a55119c Litedown: removed excessive slash stripping from attributes722763d Removed unused variable from PHP renderers7ea7d29 Fixed an issue with newlines in attribute values in Quick renderingefd1ce3 Litedown: fixed an issue with quote markup inside of multiline attributes65d80c1 Litedown: refactored inline code spans matching665444d Parser: output LF characters as HTML entities in attribute values0c704d7 Litedown: fixed an issue with backticks inside inline code spans
0c704d7 Litedown: fixed an issue with backticks inside inline code spans6e536e6 Litedown: fixed an issue with unbalanced inline code markersc66c940 TemplateHelper: fixed an issue with UTF-8 characters in HTML-to-XML conversionbad5c74 BBCodes: updated Highlight.js to 9.4.06e8c811 MediaEmbed: updated Getty Imagesff775b7 Emoji: added support for more aliases
ff775b7 Emoji: added support for more aliasesb573086 XPathConvertor: added support for less-than and greater-then comparisons558f34e JavaScript\Encoder: fixed a potential issue with property names that start with a digit448e167 RegexpConvertor: fixed an issue with incorrect ranges used for \P properties81106df Emoji: updated EmojiOne's template to use lowercase filenames50e85d6 MediaEmbed: prevent division by zero in variable-sized embeds43acb03 MediaEmbed: updated Facebook3912aa9 MediaEmbed: updated Getty253fbb5 MediaEmbed: updated Internet Archivea579d85 RegexpConvertor: precompute the regexp that matches Unicode properties for performancee22a808 Updated Tinypic64f3ee0 Added OL and UL to the Forum bundle
64f3ee0 Added OL and UL to the Forum bundle794d664 BBCodes: added OL and UL to the default repository794127a MediaEmbed: added NBC Sports8c6aa1e MediaEmbed: added The Guardian7714ae9 MediaEmbed: added Veoh630ad0a MediaEmbed: added a background image to YouTube and Twitterc2a3a1c Litedown: removed support for unquoted titles in links and imagesa13416c Fatdown: fixed missing title in linksc032937 Autolink: made ->Autolink->matchWww public11633f8 Autolink: remove most non-letters at the end of the URL2a7de09 Autolink: replaced manual check with word boundary assertion90eaf86 BBCodes: updated Highlight.js to 9.3.01608c79 Litedown: made the decodeHtmlEntities property public94f07bd MediaEmbed: replaced all HTTP URLs with protocol-relative URLs in src attributes8b0a31d MediaEmbed: updated Brightcove76638c6 MediaEmbed: updated Gfycat16038df MediaEmbed: updated Gistab22f0b MediaEmbed: updated VBOX7b0b717a MediaEmbed: updated Youkud9f1608 MediaEmbed: updated dumperte49d6c9 OnlineMinifier: instantiate the HTTP client in the constructor15e3223 OnlineMinifier: renamed HTTP client property4f10e67 OptimizeChoose: streamlined conditionalc6fd225 TemplateForensics: inspect an element's style to determine whether it's a block-level element266ccf8 Added support for named parameter 'text' in tag filters
266ccf8 Added support for named parameter 'text' in tag filterse5d1b85 MediaEmbed: added Brightcove5c5206c MediaEmbed: added Healthguru34a49c1 MediaEmbed: added MRCTV04d14f1 MediaEmbed: added Video Detectiveae8cc70 MediaEmbed: added support for FORA.tv9a741c3 MediaEmbed: added support for Livestream short links and old sitebdc62e8 TemplateNormalizations: added SetRelNoreferrerOnTargetedLinks (enabled by default)3b0682f Litedown: removed support for space in inline links markup71064bb Litedown: fixed an issue with Setext headers causing the next line to be ignoredf038f28 Litedown: prefix the class name used to identify the language of a code block7606ab6 Litedown: require code fences' length to matchd2ff237 MediaEmbed: updated Dailymotion55ca396 MediaEmbed: updated NYTimeseb234d7 MediaEmbed: added support for LiveCap
eb234d7 MediaEmbed: added support for LiveCap7e8fb2a OptimizeChoose: fixed an issue when removing nested conditionalsYour coding agent can read these notes before it upgrades. Set up the MCP server →