Commit graph

58 commits

Author SHA1 Message Date
Thiemo Kreuz f1cf1a534c Fix performance bottleneck in mediawiki syntax highlighter
I continued profiling the matchbrackets addon for T270237 and run into
performance issues that turned out to be unrelated to the addon. The
flame graph highlighted a "match" function. Note this is not the
String.match() from JavaScript, but something in the CodeMirror lib:

StringStream.prototype.match = function (pattern) {
  var match = this.string.match(pattern);
  if (match && match.index > 0) {
    return null;
  }
  return match;
}

(Note: I simplified this code so we can focus on the bug.)

When the pattern is a regular expression, it's executed via
JavaScript's String.match(). The function then checks if there was a
match and if it's at the start of the string. If not, it's not a
match and doesn't return one.

In other words: Even if there is a match somewhere in the string, the
function acts as if there was no match.

When we change all patterns to be anchored via ^, they don't scan the
entire string any more but return much ealier when there is no match
at the start of the string. We are effectively replacing nested loops
(hidden in the patterns) with single calls.

This bug exists since 2014.

The disabled line in the matchbrackets addon is just dead code. I
don't remove it to document the fact that we disabled it.

Bug: T270237
Bug: T270317
Change-Id: Icbb1122e6a3b26c0606726ff405e108931d185be
2021-01-13 16:58:57 +01:00
Derk-Jan Hartman d1a3e49265 Highlight match end tag with different capitalization
This recoginizes <ref></Ref>

Bug: T179321
Change-Id: Ib1e501f97654a019281eddd6cc69ea3b979daec7
2019-04-14 01:25:40 +02:00
Ed Sanders 37b49bfdc4 build: Update eslint-config-wikimedia to 0.11.0
Change-Id: I7ca5276791d9add0709387422016d7193e8d9945
2019-03-06 12:10:29 +00:00
jenkins-bot 0e4bb8feb6 Merge "Don't match // as protocol unless used in a link" 2018-03-15 23:51:21 +00:00
MusikAnimal 5c8eb20c33 Don't match // as protocol unless used in a link
Bug: https://phabricator.wikimedia.org/T185069
Change-Id: I2111e7c7ae599c5aed2f5ae779bc3d7b2d8ce82a
2018-03-13 22:51:35 -04:00
MusikAnimal ccbce0e69d Highlight void tags and invalid self-closing tags correctly
Bug: T170238
Change-Id: Ice1bdae3d16cf365da14c6df0e8d91d2b914e074
2018-03-13 22:18:59 -04:00
jenkins-bot b7a201e2f0 Merge "Fix highlighting of table headers on single text row" 2018-03-13 22:39:01 +00:00
MusikAnimal 62a53c5905 Fix highlighting of table headers on single text row
Bug: https://phabricator.wikimedia.org/T179534
Change-Id: I6e353d52af849678da63624e456ec2a82c680df4
2018-03-13 18:23:16 -04:00
MusikAnimal 980f3d2848 Add <translate> as a permitted tag
Bug: T172456
Change-Id: I2315053b79bfd2dd009a98c0fe824ccdbcaf431c
2018-03-05 15:01:45 -05:00
Pavel Astakhov cd4bdebe8b Add highlighting of double underscore Magic Words as __TOC__
For testing:
__NOTOC__
___NOTOC___
____NOTOC____
_____NOTOC_____
______NO!TOC__NOTOC____
______NO{{TOC}}_____
______NO[[TOC]]_____
______NO'''TOC'''_____
__nOtOc__
FFFFF___NOtoc______
'''____________NOTOC______'''
__TOC___TOC__
__TOC____TOC__
___TOC_____TOC___
__TOC___TOC__
___NOTOC___
____NOTOC____
_____NOTOC_____
______NO!TOC__NOTOC____
______NO{{TOC}}_____
______NO[[TOC]]_____
______NO'''TOC'''_____
__nOtOc__
FFFFF___NOtoc______
{{__TOC__|__TOC__}}

Wrong, but not a big problem:
[[__TOC__|__TOC__]]

Bug: T170041
Change-Id: I0b2cfd02550c2685d241bdf3596507c5972878d5
2017-09-13 10:43:41 +06:00
Max Semenik 54c032d732 Fix exception on some combination of quotes
Bug: T174060
Change-Id: Ie53b7260a98519f45d38d2a705b900142c77c801
2017-08-25 16:05:55 -07:00
Reedy 5cd288b203 Don't use tab indenting between array items
Change-Id: Ifbc293c5075c6518edbefd5d7c4b6ce2cd71ace3
2017-08-21 19:53:52 +01:00
Ed Sanders 410e442fd1 build: Update eslint, stylelint
Whitespace and regex escaping fixes

Change-Id: Ic706dfd3ed7efb16db104b054091bec0ba0cb5ed
2017-07-20 15:58:31 +00:00
Pavel Astakhov c9b4aa65fd Refactor the Integration with other extensions (v 4.0.0)
This patch makes initialization easier and cheaper.

Since only the PhpTags extension uses the CodeMirrorGetAdditionalResources
  hook it was removed. Instead, the CodeMirrorPluginModules and
  CodeMirrorTagModes properties are used in extension.json file.

This patch adds ext.CodeMirror.lib.mode.php module for the PhpTags
  extension (with dependences). In CodeMirror there are a lot of modes
  they will be registered on request (if they will be requered for
  extensions).

Examples of integration:
* Cite: I1bf156fa813af4d5f891619f692047bbdb8a1a86
* PhpTags: Ie339f0475e63885e603defaee2cdcccd6a95fafc

Bug: T163238
Change-Id: Idb7a1a5769a1047ef2f7cd25a7152f73a6613225
2017-05-04 21:20:21 +01:00
Pavel Astakhov 6ce71b3667 Add additional classes cm-mw-ext-{tag name} to extensions tags
They can be used to create specific color themes (T163533)
See also bug T161694

Change-Id: I499e1e4b2e1e4fa972e28fc05a65047ecadc204c
2017-04-23 13:51:24 +06:00
Ed Sanders 66ba217ba2 build: Replace jshint/jscs with eslint, introduce stylelint
Change-Id: I9b5afb39f5a0d32e722b2a1f56c219b8c85b451c
2017-03-21 16:45:56 +00:00
Pavel Astakhov 339e677bee Remove usage of mod function
Change-Id: Id84d85318ef498b4aa8fcbe073b8bc8a8c8c7ed7
2016-07-19 16:31:35 +06:00
Paladox 45ebd2d55d Update Jenkins tests
Test jshint and jscs through npm using latest version of jscs and jshint.

Add support for composer.json running phplint and in the future php code
sniffer.

Change-Id: Id8f11f9414fae8313dc18a857a07e11694354dcb
2016-03-03 13:29:48 +00:00
Pavel Astakhov 991be29500 fix highlighting parameters inside a template transclusion (v 3.2.1)
Bug: T108450
Change-Id: Ic686fe6aa211988d8458037c275779f512d03563
2015-08-20 10:32:11 +06:00
Pavel Astakhov 9acce89672 fix bold and italic apostrophes (v 3.2)
Bug: T108455
Change-Id: Ie9e0d734004d062e4c347f7940eb34bdc231d026
2015-08-19 21:10:31 +06:00
Pavel Astakhov 66b518d8dd fix highlighting of external links, multiple apostrophes end link (3.1.14)
Change-Id: Ibbb4850edc04ed6b184fa59c51e1978d60cd1269
2015-08-14 13:22:47 +06:00
Pavel Astakhov 491f186e14 fix matching hr ---- (v 3.1.13)
Change-Id: I7ea6fa891d2c53da4ac9bd62319dad702a11b8d7
2015-08-14 12:03:41 +06:00
Pavel Astakhov 443ccff873 fix function eatFreeExternalLink (v 3.1.10)
allow one '{' in free external link

Change-Id: Ieaa157b79cff9d05d8bed3ae536cfe45e7e4ae42
2015-08-10 23:30:05 +06:00
Pavel Astakhov 00f668e32c add highlighting of free external links (v 3.1.9)
Bug: T108448
Change-Id: I1311be98e346b9d85350eeb9a6dffaf08f344d56
2015-08-10 23:14:18 +06:00
Pavel Astakhov 545d21ce61 add highlighting of indented tables (v 3.1.8)
Bug: T108454
Change-Id: Ib5344fa870954da166314c8ace916861bd71acf9
2015-08-10 13:48:48 +06:00
Pavel Astakhov 27a7499906 skip leading spaces in table syntax (v 3.1.7)
Bug: T108453
Change-Id: I348855b9ae8a4f571bb765df2b0819ebe3fda75d
2015-08-10 11:07:55 +06:00
Pavel Astakhov 19bced27dc add highlighting of table caption (v 3.1.6)
Bug: T108452
Change-Id: I543db4c26c1a0ed7314ae826ddd2876de7539bf2
2015-08-10 10:34:11 +06:00
Florian Schmidt 3253edba8b Rework extensions setup (v 3.1.0)
* Cleanup the init process of this extension (PHP & JS setup)
* Make it useable for other extensions like MobileFrontend.
* Call new hook CodeMirrorGetAdditionalResources instead of CodeMirrorGetExtensionMode

Bug: T91796
Change-Id: I9763c40835c2edddafb0dcbacdf53a86f663b8cd
2015-03-16 16:45:18 +01:00
Pavel Astakhov ae450a5c3c refactor and extend usability (v 3.0.0)
* add on/off button to toolbar
* add highlighting table, hr ----, sign ~~~
* update codemirror lib to 4.7
* fix font size

Change-Id: Idd5775d6c80a18406aee7b8ab51691f26038764c
2014-10-23 12:09:10 +06:00
Pavel Astakhov 73963bb7a5 fix template page name regex perfomance (v 2.1.4)
Change-Id: If66d3a7cdb38c4d650f003083a6dea67f4220997
2014-09-11 16:30:49 +06:00
Pavel Astakhov 16c83240fd add highlighting external links (v 2.1.3)
Change-Id: Ibe065e710c9acb6e65f3aa130b2483588458461b
2014-09-10 16:09:49 +06:00
Pavel Astakhov 60e283ca81 fix highlighting links, tags and templates in section headers (v 2.1.2)
Change-Id: Ib4b788f7f8dc21732e231c9e59cf31a9165d04fa
2014-09-10 12:45:05 +06:00
Pavel Astakhov 5cd447d60e add highlighting section headers (v 2.1.1)
Change-Id: I082a81ff3fd44d97b8064e0a567db33ac709a196
2014-09-10 12:06:17 +06:00
Pavel Astakhov 8f270c34a9 refactor css style, move it to own definition (v 2.1.0)
*add highlighting list and indenting
*add tags: <noinclude>, <includeonly>, <onlyinclude>
*modify highlighting template variable

Change-Id: If6ae7d127766c32bc7e3c10b226a74ec97a0848f
2014-09-09 20:45:04 +06:00
Pavel Astakhov e789605772 make compatible with toolbox (v 2.0.0)
replace function $.fn.textSelection from file:
MediaWiki/core/resources/src/jquery/jquery.textSelection.js

Change-Id: Ie22f480968cf5eba1c4e91fbcf7881e6f86ee5ac
2014-09-05 15:44:51 +06:00
Pavel Astakhov 30a3ae4319 add highlighting double underscore Magic words (v 1.12.0)
Change-Id: I4eceaa790ca053de49f5d0983bdd8ae288ba985f
2014-09-04 10:23:05 +06:00
Pavel Astakhov 31951e253a fix highlighting tag. Highlight only html and parser tags (v 1.11.1)
Change-Id: I1f330181cf99ba1ccf7702bcd6fadf60957ae638
2014-09-03 12:50:45 +06:00
Pavel Astakhov b9f40490f3 add highlighting extension tags (v 1.11.0)
* fix some bugs...

Change-Id: Icf7eb836c6fbe3a686d67355064f57a6199d6b22
2014-09-03 11:04:56 +06:00
Pavel Astakhov 691ed8bec2 add highlighting tag <pre> (v 1.10.0)
* remove state.allowWikimarkup

Change-Id: Ic34d8be7e10b2e829cf76d5e5c0f40da3c943961
2014-09-02 19:23:13 +06:00
Pavel Astakhov 5cbe8bd28f fix highlighting template variable (v 1.9.2)
Change-Id: Iea975300c0ce1a3f80f75bff1be7b013bad4c420
2014-09-02 10:53:00 +06:00
Pavel Astakhov 89e584b947 fix word boundary for not english parser functions (v 1.9.1)
Change-Id: I7399b7787cec57745a1cf7401d519f145e65845c
2014-08-29 12:20:54 +06:00
Pavel Astakhov 65ffeacf9e add highlighting the magic word that does not begin with '#' (v 1.9.0)
* fix brackets color

Change-Id: I1cd057287d5ae142ed240e4ea9012790716f888c
2014-08-29 10:05:50 +06:00
Pavel Astakhov 77c8f73fec add highlighting template variables (v 1.8.0)
Change-Id: I0808c518c553bedf0b8cca8a1502c346292c7b5a
2014-08-28 15:46:50 +06:00
Pavel Astakhov fa6049075e fix highlighting text that starts with space (v 1.7.4)
Change-Id: I1da85271f81a2e01fa617434c82faa8148d56e0d
2014-08-28 12:38:31 +06:00
Pavel Astakhov 675e892f8d fix highlighting mnemonic (v 1.7.3)
Change-Id: I10a650b26caf8ce6d2d5d60706d8bd1f5adfd4c4
2014-08-28 10:20:03 +06:00
Pavel Astakhov 9b4faf39b1 add highlighting internal link (v 1.7.0)
Change-Id: I9609c62e67ff61650d7e4efed802246a99f0703c
2014-08-26 13:00:52 +06:00
Pavel Astakhov 3627671730 fix highlighting arguments of templates and parser functions (v 1.6.1)
Change-Id: I3f65a6fa84289fa8e8e371232c58055978d9e9c3
2014-08-26 09:10:02 +06:00
Pavel Astakhov 82d1247978 add highlighting text that starts with space (1.6.0)
* fix highlighting template argument name

Change-Id: I249f89e34774c1c52ab62d4349d2f16fa0d69115
2014-08-25 22:59:36 +06:00
Pavel Astakhov ac5080f18d add highlighting tag names (v 1.5.0)
* rename CODEMIRROR_VERSION to EXT_CODEMIRROR_VERSION

Change-Id: I20b1cb872595a1491bb2c0485cb49c68fa908dd0
2014-08-25 16:56:52 +06:00
Pavel Astakhov 0697497834 fix templagte argements with '=' is more that one (v 1.4.1)
Change-Id: I6191fff3d2d9084189de2c10107ef43a236a2561
2014-08-25 11:08:40 +06:00