]> scripts.mit.edu Git - autoinstallsdev/mediawiki.git/blob - extensions/SyntaxHighlight_GeSHi/modules/ve-syntaxhighlight/ve.dm.MWSyntaxHighlightNode.js
MediaWiki 1.30.2
[autoinstallsdev/mediawiki.git] / extensions / SyntaxHighlight_GeSHi / modules / ve-syntaxhighlight / ve.dm.MWSyntaxHighlightNode.js
1 /*!
2  * VisualEditor DataModel MWSyntaxHighlightNode class.
3  *
4  * @copyright 2011-2015 VisualEditor Team and others; see AUTHORS.txt
5  * @license The MIT License (MIT); see LICENSE.txt
6  */
7
8 /**
9  * DataModel MediaWiki syntax highlight node.
10  *
11  * @class
12  * @abstract
13  *
14  * @constructor
15  */
16 ve.dm.MWSyntaxHighlightNode = function VeDmMWSyntaxHighlightNode() {
17 };
18
19 /* Inheritance */
20
21 OO.initClass( ve.dm.MWSyntaxHighlightNode );
22
23 /* Static members */
24
25 ve.dm.MWSyntaxHighlightNode.static.name = 'mwSyntaxHighlight';
26
27 ve.dm.MWSyntaxHighlightNode.static.extensionName = 'syntaxhighlight';
28
29 ve.dm.MWSyntaxHighlightNode.static.getMatchRdfaTypes = function () {
30         return [ 'mw:Extension/syntaxhighlight', 'mw:Extension/source' ];
31 };
32
33 /* Static methods */
34
35 /**
36  * @inheritdoc
37  */
38 ve.dm.MWSyntaxHighlightNode.static.toDataElement = function ( domElements, converter ) {
39         // Parent method
40         var isInline = this.isHybridInline( domElements, converter ),
41                 type = isInline ? 'mwInlineSyntaxHighlight' : 'mwBlockSyntaxHighlight',
42                 dataElement = ve.dm.MWExtensionNode.static.toDataElement.call( this, domElements, converter, type );
43
44         return dataElement;
45 };
46
47 ( function () {
48         var supportedLanguages = [ undefined ],
49                 geshiToPygmentsMap,
50                 pygmentsToAceMap;
51
52         /**
53          * Register supported Pygments languages.
54          *
55          * @param {Array} languages
56          */
57         ve.dm.MWSyntaxHighlightNode.static.addPygmentsLanguages = function ( languages ) {
58                 ve.batchPush( supportedLanguages, languages );
59         };
60
61         /**
62          * Register map from Geshi to pygments lexer names.
63          *
64          * @param {Array} map
65          */
66         ve.dm.MWSyntaxHighlightNode.static.addGeshiToPygmentsMap = function ( map ) {
67                 geshiToPygmentsMap = map;
68                 ve.batchPush( supportedLanguages, Object.keys( geshiToPygmentsMap ) );
69         };
70
71         /**
72          * Register a map from pygments to Ace lexer names.
73          *
74          * @param {Array} map
75          */
76         ve.dm.MWSyntaxHighlightNode.static.addPygmentsToAceMap = function ( map ) {
77                 pygmentsToAceMap = map;
78         };
79
80         /**
81          * Converts a (valid) language as recognized by the SyntaxHighlight wikicode
82          * to a compatible Ace lexer name (to be used by CodeEditor)
83          *
84          * @param {string} language Language name
85          * @return {string} The name of the ace lexer
86          */
87         ve.dm.MWSyntaxHighlightNode.static.convertLanguageToAce = function ( language ) {
88                 language = geshiToPygmentsMap[ language ] || language;
89                 return ( pygmentsToAceMap[ language ] || language ).toLowerCase();
90         };
91
92         /**
93          * Check if a language is supported
94          *
95          * @param {string} language Language name
96          * @return {boolean} The language is supported
97          */
98         ve.dm.MWSyntaxHighlightNode.static.isLanguageSupported = function ( language ) {
99                 return supportedLanguages.indexOf( language || undefined ) !== -1;
100         };
101
102         /**
103          * Get an array of all languages (both Pygments and former GeSHi names)
104          *
105          * @return {Array} All currently supported languages
106          */
107         ve.dm.MWSyntaxHighlightNode.static.getLanguages = function () {
108                 return supportedLanguages.slice();
109         };
110 }() );
111
112 /* Methods */
113
114 /**
115  * Check if the node's current language is supported
116  *
117  * @return {boolean} The language is supported
118  */
119 ve.dm.MWSyntaxHighlightNode.prototype.isLanguageSupported = function () {
120         return this.constructor.static.isLanguageSupported( this.getLanguage() );
121 };
122
123 ve.dm.MWSyntaxHighlightNode.prototype.getLanguage = function () {
124         return this.getAttribute( 'mw' ).attrs.lang;
125 };
126
127 /* Concrete subclasses */
128
129 ve.dm.MWBlockSyntaxHighlightNode = function VeDmMWBlockSyntaxHighlightNode() {
130         // Parent method
131         ve.dm.MWBlockExtensionNode.super.apply( this, arguments );
132
133         // Mixin method
134         ve.dm.MWSyntaxHighlightNode.call( this );
135 };
136
137 OO.inheritClass( ve.dm.MWBlockSyntaxHighlightNode, ve.dm.MWBlockExtensionNode );
138
139 OO.mixinClass( ve.dm.MWBlockSyntaxHighlightNode, ve.dm.MWSyntaxHighlightNode );
140
141 ve.dm.MWBlockSyntaxHighlightNode.static.name = 'mwBlockSyntaxHighlight';
142
143 ve.dm.MWBlockSyntaxHighlightNode.static.tagName = 'div';
144
145 ve.dm.MWInlineSyntaxHighlightNode = function VeDmMWInlineSyntaxHighlightNode() {
146         // Parent method
147         ve.dm.MWInlineExtensionNode.super.apply( this, arguments );
148
149         // Mixin method
150         ve.dm.MWSyntaxHighlightNode.call( this );
151 };
152
153 OO.inheritClass( ve.dm.MWInlineSyntaxHighlightNode, ve.dm.MWInlineExtensionNode );
154
155 OO.mixinClass( ve.dm.MWInlineSyntaxHighlightNode, ve.dm.MWSyntaxHighlightNode );
156
157 ve.dm.MWInlineSyntaxHighlightNode.static.name = 'mwInlineSyntaxHighlight';
158
159 ve.dm.MWInlineSyntaxHighlightNode.static.tagName = 'code';
160
161 ve.dm.MWInlineSyntaxHighlightNode.static.isContent = true;
162
163 /* Registration */
164
165 ve.dm.modelRegistry.register( ve.dm.MWBlockSyntaxHighlightNode );
166 ve.dm.modelRegistry.register( ve.dm.MWInlineSyntaxHighlightNode );