Arlolra has uploaded a new change for review.

  https://gerrit.wikimedia.org/r/235277

Change subject: Tabs are preventing nowiki pre protection
......................................................................

Tabs are preventing nowiki pre protection

 * The regexp wants spaces followed immediately by non-whitespace chars,
   when it should really be anywhere on the line.

 * The changes to the "1. Leading whitespace in SOL context should be
   escaped" test are because leading tabs don't need escaping.

Change-Id: I1461a0e155477f57d9b1835b4e662c1ee85ba699
---
M lib/wts.escapeWikitext.js
M tests/parserTests-blacklist.js
M tests/parserTests.txt
3 files changed, 46 insertions(+), 17 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/mediawiki/services/parsoid 
refs/changes/77/235277/1

diff --git a/lib/wts.escapeWikitext.js b/lib/wts.escapeWikitext.js
index c824cc5..0f18fc6 100644
--- a/lib/wts.escapeWikitext.js
+++ b/lib/wts.escapeWikitext.js
@@ -565,7 +565,7 @@
        var sol = state.onSOL && !indentPreSafeMode;
        if (!fullCheckNeeded) {
                hasQuoteChar = /'/.test(text);
-               indentPreUnsafe = (!indentPreSafeMode && (/\n 
+[^\s]+/).test(text) || sol && (/^ +[^\s]+/).test(text));
+               indentPreUnsafe = (!indentPreSafeMode && (/\n 
+[^\r\n]*?[^\s]+/).test(text) || sol && (/^ +[^\r\n]*?[^\s]+/).test(text));
                hasNonQuoteEscapableChars = 
/[<>\[\]\-\+\|!=#\*:;~{}]|__[^_]*__/.test(text);
        }
 
diff --git a/tests/parserTests-blacklist.js b/tests/parserTests-blacklist.js
index 291f296..67ffe5c 100644
--- a/tests/parserTests-blacklist.js
+++ b/tests/parserTests-blacklist.js
@@ -305,7 +305,6 @@
 add("wt2html", "Special parser function", "<p 
data-parsoid='{\"dsr\":[0,65,0,0]}'><span about=\"#mwt1\" 
typeof=\"mw:Transclusion\" 
data-parsoid='{\"pi\":[[]],\"dsr\":[0,23,null,null]}' 
data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"#special:RandomPage\",\"function\":\"#special\"},\"params\":{},\"i\":0}}]}'>Parser
 function implementation for pf_#special missing in Parsoid.</span>\n<span 
about=\"#mwt2\" typeof=\"mw:Transclusion\" 
data-parsoid='{\"pi\":[[]],\"dsr\":[24,45,null,null]}' 
data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"#special:BaDtItLe\",\"function\":\"#special\"},\"params\":{},\"i\":0}}]}'>Parser
 function implementation for pf_#special missing in Parsoid.</span>\n<span 
about=\"#mwt3\" typeof=\"mw:Transclusion\" 
data-parsoid='{\"pi\":[[]],\"dsr\":[46,65,null,null]}' 
data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"#special:Foobar\",\"function\":\"#special\"},\"params\":{},\"i\":0}}]}'>Parser
 function implementation for pf_#special missing in Parsoid.</span></p>");
 add("wt2html", "1. SOL-sensitive wikitext tokens as template-args", "<p 
data-parsoid='{\"dsr\":[0,35,0,0]}'><span about=\"#mwt1\" 
typeof=\"mw:Transclusion\" 
data-parsoid='{\"pi\":[[{\"k\":\"1\",\"spc\":[\"\",\"\",\"\",\"\"]}]],\"dsr\":[0,11,null,null]}'
 
data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"echo\",\"href\":\"./Template:Echo\"},\"params\":{\"1\":{\"wt\":\"*a\"}},\"i\":0}}]}'>*a</span>\n<span
 about=\"#mwt2\" typeof=\"mw:Transclusion\" 
data-parsoid='{\"pi\":[[{\"k\":\"1\",\"spc\":[\"\",\"\",\"\",\"\"]}]],\"dsr\":[12,23,null,null]}'
 
data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"echo\",\"href\":\"./Template:Echo\"},\"params\":{\"1\":{\"wt\":\"#a\"}},\"i\":0}}]}'>#a</span>\n<span
 about=\"#mwt3\" typeof=\"mw:Transclusion\" 
data-parsoid='{\"pi\":[[{\"k\":\"1\",\"spc\":[\"\",\"\",\"\",\"\"]}]],\"dsr\":[24,35,null,null]}'
 
data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"echo\",\"href\":\"./Template:Echo\"},\"params\":{\"1\":{\"wt\":\":a\"}},\"i\":0}}]}'>:a</span></p>");
 add("wt2html", "Links 3. WikiLinks: No escapes needed", "<p 
data-parsoid='{\"dsr\":[0,31,0,0]}'>[[Foo|[Foobar]]\n<a rel=\"mw:WikiLink\" 
href=\"./Foo\" title=\"Foo\" 
data-parsoid='{\"stx\":\"piped\",\"a\":{\"href\":\"./Foo\"},\"sa\":{\"href\":\"Foo\"},\"dsr\":[16,31,6,2]}'>foo|bar</a></p>");
-add("wt2html", "1. Leading whitespace in SOL context should be escaped", "<p 
data-parsoid='{\"dsr\":[0,19,0,0]}'><span typeof=\"mw:Nowiki\" 
data-parsoid='{\"dsr\":[0,18,8,9]}'> </span>a</p>\n\n<p 
data-parsoid='{\"dsr\":[21,41,0,0]}'><span typeof=\"mw:Nowiki\" 
data-parsoid='{\"dsr\":[21,39,8,9]}'> </span> a</p>\n\n<p 
data-parsoid='{\"dsr\":[43,67,0,0]}'><span typeof=\"mw:Nowiki\" 
data-parsoid='{\"dsr\":[43,61,8,9]}'>\t</span>a(tab)</p>\n\n<p 
data-parsoid='{\"dsr\":[69,121,0,0]}'><span typeof=\"mw:Nowiki\" 
data-parsoid='{\"dsr\":[69,87,8,9]}'> </span>\ta\n<!--cmt-->\n<span 
typeof=\"mw:Nowiki\" data-parsoid='{\"dsr\":[101,119,8,9]}'> </span> 
a</p>\n\n<p data-parsoid='{\"dsr\":[123,144,0,0]}'>a\n<span 
typeof=\"mw:Nowiki\" data-parsoid='{\"dsr\":[125,143,8,9]}'> </span>b</p>\n\n<p 
data-parsoid='{\"dsr\":[146,167,0,0]}'>a\n<span typeof=\"mw:Nowiki\" 
data-parsoid='{\"dsr\":[148,166,8,9]}'>\t</span>b</p>\n\n<p 
data-parsoid='{\"dsr\":[169,191,0,0]}'>a\n<span typeof=\"mw:Nowiki\" 
data-parsoid='{\"dsr\":[171,189,8,9]}'>\t</span> b</p>");
 add("wt2html", "1. a tags", "<p data-parsoid='{\"dsr\":[0,38,0,0]}'>&lt;a 
href=\"http://google.com\";>google&lt;/a></p>");
 add("wt2html", "Parsoid-only: Don't wrap broken template tags in <nowiki> on 
wt2wt (Bug 42353)", "<p data-parsoid='{\"dsr\":[0,4,0,0]}'><span 
typeof=\"mw:Nowiki\" 
data-parsoid='{\"src\":\"{{}}\",\"dsr\":[0,4,0,0]}'>{{}}</span></p>");
 add("wt2html", "Parsoid-only: Don't wrap broken template tags in <nowiki> on 
wt2wt (Bug 42353)", "<p data-parsoid='{\"dsr\":[0,4,0,0]}'><span 
typeof=\"mw:Nowiki\" 
data-parsoid='{\"src\":\"}}{{\",\"dsr\":[0,4,0,0]}'>}}{{</span></p>");
@@ -673,7 +672,6 @@
 add("html2html", "Entities in ref name", "<p 
data-parsoid='{\"dsr\":[0,38,0,0]}'><span about=\"#mwt2\" class=\"mw-ref\" 
id=\"cite_ref-test_.26amp.3B_me_1-0\" rel=\"dc:references\" 
typeof=\"mw:Extension/ref\" data-parsoid='{\"dsr\":[0,38,30,6]}' 
data-mw='{\"name\":\"ref\",\"body\":{\"id\":\"mw-reference-text-cite_note-test_.26amp.3B_me-1\"},\"attrs\":{\"name\":\"test
 &amp;amp;amp; me\"}}'><a href=\"#cite_note-test_.26amp.3B_me-1\" 
style=\"counter-reset: mw-Ref 1;\"><span 
class=\"mw-reflink-text\">[1]</span></a></span></p>\n<ol 
class=\"mw-references\" typeof=\"mw:Extension/references\" about=\"#mwt4\" 
data-parsoid='{\"dsr\":[39,53,2,2]}' 
data-mw='{\"name\":\"references\",\"attrs\":{}}'><li 
about=\"#cite_note-test_.26amp.3B_me-1\" 
id=\"cite_note-test_.26amp.3B_me-1\"><a 
href=\"#cite_ref-test_.26amp.3B_me_1-0\" rel=\"mw:referencedBy\"><span 
class=\"mw-linkback-text\">↑ </span></a> <span 
id=\"mw-reference-text-cite_note-test_.26amp.3B_me-1\" 
class=\"mw-reference-text\" data-parsoid=\"{}\">hi</span></li></ol>");
 add("html2html", "Empty LI and TR nodes should not be stripped from top-level 
content", "<ul data-parsoid='{\"dsr\":[0,9,0,0]}'><li 
data-parsoid='{\"dsr\":[0,3,1,0]}'> a</li>\n<li 
data-parsoid='{\"dsr\":[4,5,1,0]}'></li>\n<li 
data-parsoid='{\"dsr\":[6,9,1,0]}'> b</li></ul>\n\n<table 
data-parsoid='{\"dsr\":[11,26,2,2]}'>\n\n<tbody 
data-parsoid='{\"dsr\":[15,24,0,0]}'><tr 
data-parsoid='{\"startTagSrc\":\"|-\",\"autoInsertedEnd\":true,\"dsr\":[15,22,2,0]}'>\n<td
 
data-parsoid='{\"autoInsertedEnd\":true,\"dsr\":[18,22,1,0]}'>foo</td></tr>\n\n</tbody></table>\n");
 add("html2html", "Links 3. WikiLinks: No escapes needed", "<p 
data-parsoid='{\"dsr\":[0,31,0,0]}'>[[Foo|[Foobar]]\n<a rel=\"mw:WikiLink\" 
href=\"./Foo\" title=\"Foo\" 
data-parsoid='{\"stx\":\"piped\",\"a\":{\"href\":\"./Foo\"},\"sa\":{\"href\":\"Foo\"},\"dsr\":[16,31,6,2]}'>foo|bar</a></p>\n");
-add("html2html", "1. Leading whitespace in SOL context should be escaped", "<p 
data-parsoid='{\"dsr\":[0,19,0,0]}'><span typeof=\"mw:Nowiki\" 
data-parsoid='{\"dsr\":[0,18,8,9]}'> </span>a</p>\n\n<p 
data-parsoid='{\"dsr\":[21,41,0,0]}'><span typeof=\"mw:Nowiki\" 
data-parsoid='{\"dsr\":[21,39,8,9]}'> </span> a</p>\n\n<p 
data-parsoid='{\"dsr\":[43,50,0,0]}'>\ta(tab)</p>\n\n<pre 
data-parsoid='{\"dsr\":[52,55,1,0]}'>\ta</pre>\n\n<!--cmt--><p 
data-parsoid='{\"dsr\":[67,87,0,0]}'><span typeof=\"mw:Nowiki\" 
data-parsoid='{\"dsr\":[67,85,8,9]}'> </span> a</p>\n\n<p 
data-parsoid='{\"dsr\":[89,110,0,0]}'>a\n<span typeof=\"mw:Nowiki\" 
data-parsoid='{\"dsr\":[91,109,8,9]}'> </span>b</p>\n\n<p 
data-parsoid='{\"dsr\":[112,116,0,0]}'>a\n\tb</p>\n\n<p 
data-parsoid='{\"dsr\":[118,123,0,0]}'>a\n\t b</p>\n");
 add("html2html", "1. a tags", "<p data-parsoid='{\"dsr\":[0,38,0,0]}'>&lt;a 
href=\"http://google.com\";>google&lt;/a></p>");
 add("html2html", "Parsoid-only: Don't wrap broken template tags in <nowiki> on 
wt2wt (Bug 42353)", "<p data-parsoid='{\"dsr\":[0,21,0,0]}'><span 
typeof=\"mw:Nowiki\" data-parsoid='{\"dsr\":[0,21,8,9]}'>{{}}</span></p>");
 add("html2html", "Parsoid-only: Don't wrap broken template tags in <nowiki> on 
wt2wt (Bug 42353)", "<p data-parsoid='{\"dsr\":[0,21,0,0]}'><span 
typeof=\"mw:Nowiki\" data-parsoid='{\"dsr\":[0,21,8,9]}'>}}{{</span></p>");
@@ -715,7 +713,6 @@
 add("html2wt", "Block tag on both lines (<blockquote>)", 
"a\n<blockquote>\nfoo\n</blockquote>\nb\n<blockquote>\nfoo\n</blockquote>");
 add("html2wt", "Multiple lines without block tags", "<div>foo</div>\na\n\nb c 
d e\n\nx\n<div>foo</div>\nz\n");
 add("html2wt", "Preformatted text", " This is some\n Preformatted text\n With 
''italic''\n And '''bold'''\n And a [[wiki/Main Page|link]]\n");
-add("html2wt", "Tabs don't trigger preformatted text", "\tThis is not\n\t 
preformatted text.\n\n This is preformatted text.\n \tSo is this.\n");
 add("html2wt", "<pre> with <nowiki> inside (compatibility with 1.6 and 
earlier)", " <nowiki><b>\n <cite>\n <em></nowiki>\n");
 add("html2wt", "Regression with preformatted in <center>", "<center>\n 
Blah\n\n</center>\n");
 add("html2wt", "Bug 52763: Preformatted in <blockquote>", "<blockquote>\n 
Blah\n\n{|\n\n|\n indented cell (no pre-wrapping!)\n\n|}\n</blockquote>\n");
@@ -1397,7 +1394,6 @@
 add("html2wt", "Lists: 3. Only bullets at start of text should be escaped", "* 
<nowiki>*foo*bar</nowiki>\n\n* <nowiki>*foo</nowiki>''it''*bar\n");
 add("html2wt", "Lists: 4. No escapes needed", "* foo*bar\n\n* ''foo''*bar\n\n* 
[[Foo]]: bar\n\n* [[Foo]]*bar\n");
 add("html2wt", "HRs: 1. Single line", 
"----\n<nowiki>----</nowiki>\n----\n<nowiki>=foo=</nowiki>\n----\n<nowiki>*</nowiki>foo\n");
-add("html2wt", "1. Leading whitespace in SOL context should be escaped", 
"<nowiki> </nowiki>a\n\n<nowiki> </nowiki> a\n\n\ta(tab)\n\n 
\ta\n\n<!--cmt--><nowiki> </nowiki> a\n\na\n<nowiki> 
</nowiki>b\n\na\n\tb\n\na\n\t b\n");
 add("html2wt", "3. Leading whitespace in indent-pre suppressing contexts 
should not be escaped", "<blockquote>\n\n a\n <span>b</span>\n 
c\n</blockquote>");
 add("html2wt", "HTML tag with 'unnecessary' entity encoding in attributes", 
"<span title=\"&\">foo</span>\n");
 add("html2wt", "HTML tag with broken attribute value quoting", "<span 
title=\"Hello world\">Foo</span>\n");
diff --git a/tests/parserTests.txt b/tests/parserTests.txt
index 8bdc74b..034282d 100644
--- a/tests/parserTests.txt
+++ b/tests/parserTests.txt
@@ -2057,13 +2057,28 @@
         preformatted text.
  This is preformatted text.
        So is this.
-!! html
+!! html/php
 <p>    This is not
         preformatted text.
 </p>
 <pre>This is preformatted text.
        So is this.
 </pre>
+!! html/parsoid
+<p>    This is not
+        preformatted text.</p>
+<pre>This is preformatted text.
+       So is this.</pre>
+!! end
+
+!! test
+Space before tab needs nowiki pre protection
+!! options
+parsoid=html2wt
+!! html/parsoid
+<p>    a</p>
+!! wikitext
+<nowiki> </nowiki>     a
 !! end
 
 !! test
@@ -23209,14 +23224,12 @@
 #### ------------------------------------------------------
 !! test
 1. Leading whitespace in SOL context should be escaped
-!! options
-parsoid
 !! wikitext
 <nowiki> </nowiki>a
 
 <nowiki> </nowiki> a
 
-<nowiki>       </nowiki>a(tab)
+       a(tab)
 
 <nowiki> </nowiki>     a
 <!--cmt-->
@@ -23226,20 +23239,40 @@
 <nowiki> </nowiki>b
 
 a
-<nowiki>       </nowiki>b
+       b
 
 a
-<nowiki>       </nowiki> b
-!! html
-<p> a</p>
-<p>  a</p>
+        b
+!! html/php
+<p> a
+</p><p>  a
+</p><p>        a(tab)
+</p><p>        a
+  a
+</p><p>a
+ b
+</p><p>a
+       b
+</p><p>a
+        b
+</p>
+!! html/parsoid
+<p><span typeof="mw:Nowiki"> </span>a</p>
+
+<p><span typeof="mw:Nowiki"> </span> a</p>
+
 <p>    a(tab)</p>
-<p>    a</p>
-<p><!--cmt-->  a</p>
+
+<p><span typeof="mw:Nowiki"> </span>   a
+<!--cmt-->
+<span typeof="mw:Nowiki"> </span> a</p>
+
 <p>a
- b</p>
+<span typeof="mw:Nowiki"> </span>b</p>
+
 <p>a
        b</p>
+
 <p>a
         b</p>
 !! end

-- 
To view, visit https://gerrit.wikimedia.org/r/235277
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I1461a0e155477f57d9b1835b4e662c1ee85ba699
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/services/parsoid
Gerrit-Branch: master
Gerrit-Owner: Arlolra <abrea...@wikimedia.org>

_______________________________________________
MediaWiki-commits mailing list
MediaWiki-commits@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to