jenkins-bot has submitted this change and it was merged.

Change subject: add highlighting tag names (v 1.5.0)
......................................................................


add highlighting tag names (v 1.5.0)

* rename CODEMIRROR_VERSION to EXT_CODEMIRROR_VERSION

Change-Id: I20b1cb872595a1491bb2c0485cb49c68fa908dd0
---
M CodeMirror.php
M resources/mode/mediawiki/mediawiki.js
2 files changed, 67 insertions(+), 8 deletions(-)

Approvals:
  Pastakhov: Looks good to me, approved
  jenkins-bot: Verified



diff --git a/CodeMirror.php b/CodeMirror.php
index 827be9d..0fe7e93 100644
--- a/CodeMirror.php
+++ b/CodeMirror.php
@@ -15,13 +15,13 @@
        die( 'This file is an extension to MediaWiki and thus not a valid entry 
point.' );
 }
 
-const CODEMIRROR_VERSION = '1.4.1';
+const EXT_CODEMIRROR_VERSION = '1.5.0';
 
 // Register this extension on Special:Version
 $wgExtensionCredits['parserhook'][] = array(
        'path' => __FILE__,
        'name' => 'CodeMirror',
-       'version' => CODEMIRROR_VERSION,
+       'version' => EXT_CODEMIRROR_VERSION,
        'url' => 'https://www.mediawiki.org/wiki/Extension:CodeMirror',
        'author' => '[https://www.mediawiki.org/wiki/User:Pastakhov Pavel 
Astakhov]',
        'descriptionmsg' => 'codemirror-desc'
diff --git a/resources/mode/mediawiki/mediawiki.js 
b/resources/mode/mediawiki/mediawiki.js
index 041d1ee..67fa12e 100644
--- a/resources/mode/mediawiki/mediawiki.js
+++ b/resources/mode/mediawiki/mediawiki.js
@@ -11,6 +11,9 @@
 'use strict';
 
 CodeMirror.defineMode('mediawiki', function( /*config, parserConfig*/ ) {
+
+       var tagName = false;
+
        function inWikitext( stream, state ) {
                function chain( parser ) {
                        state.tokenize = parser;
@@ -31,7 +34,7 @@
                                        state.ImInBlock.push( 
'ParserFunctionName' );
                                        return 'keyword strong';
                                } else {
-                                       if ( stream.eatWhile( /[^<\{\&\s\}\|]/ 
) ) {
+                                       if ( stream.eatWhile( 
/[^\s\u00a0\}\|<\{\&]/ ) ) {
                                                state.ImInBlock.push( 
'TemplatePageNameContinue' );
                                                return 'link';
                                        }
@@ -39,7 +42,7 @@
                                break;
                        case 'TemplatePageNameContinue':
                                stream.eatSpace();
-                               if ( stream.match( /\s*[^<\{\&\s\}\|]/ ) ) {
+                               if ( stream.match( 
/[\s\u00a0]*[^\s\u00a0\}\|<\{\&]/ ) ) {
                                        return 'link';
                                }
                                if ( stream.eat( '|' ) ) {
@@ -54,7 +57,7 @@
                                }
                                break;
                        case 'TemplateArgument':
-                               if ( stream.eatWhile( /[^=<\{\&\}\|]/ ) ) {
+                               if ( stream.eatWhile( /[^=\}\|<\{\&]/ ) ) {
                                        if ( blockType === 'TemplateArgument' 
&& stream.eat('=') ) {
                                                state.ImInBlock.pop();
                                                state.ImInBlock.push( 
'TemplateArgumentContinue' );
@@ -71,7 +74,7 @@
                                }
                                break;
                        case 'TemplateArgumentContinue':
-                               if ( stream.eatWhile( /[^<\{\&\}\|]/ ) ) {
+                               if ( stream.eatWhile( /[^\}\|<\{\&]/ ) ) {
                                        state.ImInBlock.pop();
                                        state.ImInBlock.push( 
'TemplateArgument' );
                                        return 'string';
@@ -97,7 +100,7 @@
                                }
                                break;
                        case 'ParserFunctionArgument':
-                               if ( stream.eatWhile( /[^<\{\&\}\|]/ ) ) {
+                               if ( stream.eatWhile( /[^\}\|<\{\&]/ ) ) {
                                        return 'string-2';
                                } else if ( stream.eat( '|' ) ) {
                                        return 'tag strong';
@@ -108,6 +111,49 @@
                                        }
                                }
                                break;
+                       case 'TagName':
+                               var tmp = stream.eatWhile( 
/[^>\/\s\u00a0<\{\&]/ );
+                               if ( tmp ) {
+                                       if ( stream.eatSpace() || 
/[>\/\s\u00a0]/.test( stream.peek() ) ) {
+                                               state.ImInBlock.pop();
+                                               state.ImInBlock.push( 
'TagAttribute' );
+                                               state.ImInTag.push( tagName === 
true ? tmp : null );
+                                       }
+                                       tagName = false;
+                                       return 'tag';
+                               }
+                               tagName = false;
+                               break;
+                       case 'TagAttribute':
+                               var attributName = stream.eatWhile( 
/[^>\/\s\u00a0<\{\&]/ );
+                               if ( attributName ) {
+                                       stream.eatSpace();
+//                                     if ( stream.eat( '=' ) ) {
+//                                             //state.tokenize = 
inTagAttributeValue( attributName );
+//                                     }
+                                       return 'attribute';
+                               }
+                               if ( stream.eat( '>' ) ) {
+                                       state.ImInBlock.pop();
+                                       return 'tag bracket';
+                               }
+                               break;
+                       case 'TagClose':
+                               if ( stream.eatWhile( /[^>\/\s\u00a0<\{\&]/ ) ) 
{
+                                       stream.eatSpace();
+                                       if ( /[^<\{\&]/.test( stream.peek() ) ) 
{
+                                               state.ImInBlock.pop();
+                                               state.ImInBlock.push( 
'TagCloseEnd' );
+                                       }
+                                       return 'tag';
+                               }
+                               break;
+                       case 'TagCloseEnd':
+                               if ( stream.eat( '>' ) ) {
+                                       state.ImInBlock.pop();
+                                       return 'tag bracket';
+                               }
+                               return 'error';
                        case null:
                                if ( sol ) {
                                        state.isBold = false;
@@ -145,6 +191,19 @@
                        case '<':
                                if ( stream.match( '!--' ) ) {
                                        return chain( inBlock( 'comment', '-->' 
) );
+                               }
+                               if ( stream.eat( '/' ) ) {
+                                       if ( /[\w\{<]/.test( stream.peek() ) ) {
+                                               if ( state.ImInBlock.length > 0 
&& state.ImInBlock[state.ImInBlock.length -1] === 'TagName' ) { // 
<nowiki><</nowiki>
+                                                       state.ImInBlock.pop();
+                                               }
+                                               state.ImInBlock.push( 
'TagClose' );
+                                               return 'tag bracket';
+                                       }
+                               } else if ( /[\w\{<]/.test( stream.peek() ) ) {
+                                       tagName = true;
+                                       state.ImInBlock.push( 'TagName' );
+                                       return 'tag bracket';
                                }
                                break;
                        case '&':
@@ -187,7 +246,7 @@
 
        return {
                startState: function() {
-                       return { tokenize: inWikitext, ImInBlock: [], isBold: 
false, isItalic: false };
+                       return { tokenize: inWikitext, ImInBlock: [], 
ImInTag:[], isBold: false, isItalic: false };
                },
                token: function( stream, state ) {
                        return state.tokenize( stream, state );

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

Gerrit-MessageType: merged
Gerrit-Change-Id: I20b1cb872595a1491bb2c0485cb49c68fa908dd0
Gerrit-PatchSet: 2
Gerrit-Project: mediawiki/extensions/CodeMirror
Gerrit-Branch: master
Gerrit-Owner: Pastakhov <pastak...@yandex.ru>
Gerrit-Reviewer: Pastakhov <pastak...@yandex.ru>
Gerrit-Reviewer: jenkins-bot <>

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

Reply via email to