From ee0512a97843e717fb7070f98a6ddcedf325b900 Mon Sep 17 00:00:00 2001
From: Christophe Geuzaine <cgeuzaine@ulg.ac.be>
Date: Wed, 5 Oct 2016 19:52:47 +0000
Subject: [PATCH]

---
 contrib/mobile/utils/microlight.js | 209 +++++++++++++++++++++++++++++
 1 file changed, 209 insertions(+)
 create mode 100644 contrib/mobile/utils/microlight.js

diff --git a/contrib/mobile/utils/microlight.js b/contrib/mobile/utils/microlight.js
new file mode 100644
index 0000000000..e3f21fad2c
--- /dev/null
+++ b/contrib/mobile/utils/microlight.js
@@ -0,0 +1,209 @@
+/**
+ * Modified version of microlight for GetDP/Gmsh - october 2016
+ *
+ * @fileoverview microlight - syntax highlightning library
+ * @version 0.0.7
+ *
+ * @license MIT, see http://github.com/asvd/microlight
+ * @copyright 2016 asvd <heliosframework@gmail.com>
+ *
+ * Code structure aims at minimizing the compressed library size
+ */
+
+
+(function (root, factory) {
+    if (typeof define === 'function' && define.amd) {
+        define(['exports'], factory);
+    } else if (typeof exports !== 'undefined') {
+        factory(exports);
+    } else {
+        factory((root.microlight = {}));
+    }
+}(this, function (exports) {
+    // for better compression
+    var _window       = window,
+        _document     = document,
+        appendChild   = 'appendChild',
+        test          = 'test',
+        // style and color templates
+        textShadow    = ';text-shadow:',
+        opacity       = 'opacity:.',
+        _0px_0px      = ' 0px 0px ',
+        _3px_0px_5    = '3px 0px 5',
+        brace         = ')',
+
+        i,
+        microlighted,
+        el;  // current microlighted element to run through
+
+
+    
+    var reset = function(cls) {
+        // nodes to highlight
+        microlighted = _document.getElementsByClassName(cls||'microlight');
+
+        for (i = 0; el = microlighted[i++];) {
+            var text  = el.textContent,
+                pos   = 0,       // current position
+                next1 = text[0], // next character
+                chr   = 1,       // current character
+                prev1,           // previous character
+                prev2,           // the one before the previous
+                token =          // current token content
+                el.innerHTML = '',  // (and cleaning the node)
+                
+                // current token type:
+                //  0: anything else (whitespaces / newlines)
+                //  1: operator or brace
+                //  2: closing braces (after which '/' is division not regex)
+                //  3: (key)word
+                //  4: regex
+                //  5: string starting with "
+                //  6: string starting with '
+                //  7: xml comment  <!-- -->
+                //  8: multiline comment /* */
+                //  9: single-line comment starting with two slashes //
+                // 10: single-line comment starting with hash #
+                tokenType = 0,
+
+                // kept to determine between regex and division
+                lastTokenType,
+                // flag determining if token is multi-character
+                multichar,
+                node,
+
+                // calculating the colors for the style templates
+                colorArr = /(\d*\, \d*\, \d*)(, ([.\d]*))?/g.exec(
+                    _window.getComputedStyle(el).color
+                ),
+                pxColor = 'px rgba('+colorArr[1]+',',
+                alpha = colorArr[3]||1;
+
+            // running through characters and highlighting
+            while (prev2 = prev1,
+                   // escaping if needed (with except for comments)
+                   // pervious character will not be therefore
+                   // recognized as a token finalize condition
+                   prev1 = tokenType < 7 && prev1 == '\\' ? 1 : chr
+            ) {
+                chr = next1;
+                next1=text[++pos];
+                multichar = token.length > 1;
+
+                // checking if current token should be finalized
+                if (!chr  || // end of content
+                    // types 9-10 (single-line comments) end with a
+                    // newline
+                    (tokenType > 8 && chr == '\n') ||
+                    [ // finalize conditions for other token types
+                        // 0: whitespaces
+                        /\S/[test](chr),  // merged together
+                        // 1: operators
+                        1,                // consist of a single character
+                        // 2: braces
+                        1,                // consist of a single character
+                        // 3: (key)word
+                        !/[$\w]/[test](chr),
+                        // 4: regex
+                        (prev1 == '/' || prev1 == '\n') && multichar,
+                        // 5: string with "
+                        prev1 == '"' && multichar,
+                        // 6: string with '
+                        prev1 == "'" && multichar,
+                        // 7: xml comment
+                        text[pos-4]+prev2+prev1 == '-->',
+                        // 8: multiline comment
+                        prev2+prev1 == '*/'
+                    ][tokenType]
+                ) {
+                    // appending the token to the result
+                    if (token) {
+                        // remapping token type into style
+                        // (some types are highlighted similarly)
+                        el[appendChild](
+                            node = _document.createElement('span')
+                        ).setAttribute('style', [
+                            // 0: not formatted
+                            '',
+                            // 1: keywords
+                            'font-weight:bold;color:#00c;',
+                            // 2: punctuation
+                            opacity + 6,
+                            // 3: strings and regexps
+                            'color: #a08;'+
+                            opacity + 8,
+                            // 4: comments
+                            'font-style:italic;color: #b00;'+
+                            opacity + 8
+                        ][
+                            // not formatted
+                            !tokenType ? 0 :
+                            // punctuation
+                            tokenType < 3 ? 2 :
+                            // comments
+                            tokenType > 6 ? 4 :
+                            // regex and strings
+                            tokenType > 3 ? 3 :
+                            // otherwise tokenType == 3, (key)word
+                            // (1 if regexp matches, 0 otherwise)
+                                + /^(If|Else|ElseIf|EndIf|Include|For|EndFor|Include|Macro|Return)$/[test](token)
+                        ]);
+
+                        node[appendChild](_document.createTextNode(token));
+                    }
+
+                    // saving the previous token type
+                    // (skipping whitespaces and comments)
+                    lastTokenType =
+                        (tokenType && tokenType < 7) ?
+                        tokenType : lastTokenType;
+
+                    // initializing a new token
+                    token = '';
+
+                    // determining the new token type (going up the
+                    // list until matching a token type start
+                    // condition)
+                    tokenType = 11;
+                    while (![
+                        1,                   //  0: whitespace
+                                             //  1: operator or braces
+                        /[\/{}[(\-+*=<>:;|\\.,?!&@~]/[test](chr),
+                        /[\])]/[test](chr),  //  2: closing brace
+                        /[$\w]/[test](chr),  //  3: (key)word
+                        chr == '/' &&        //  4: regex
+                            // previous token was an
+                            // opening brace or an
+                            // operator (otherwise
+                            // division, not a regex)
+                            (lastTokenType < 2) &&
+                            // workaround for xml
+                            // closing tags
+                            prev1 != '<',
+                        chr == '"',          //  5: string with "
+                        chr == "'",          //  6: string with '
+                                             //  7: xml comment
+                        chr+next1+text[pos+1]+text[pos+2] == '<!--',
+                        chr+next1 == '/*',   //  8: multiline comment
+                        chr+next1 == '//',   //  9: single-line comment
+                        chr+next1 == '//'    // 10: hash-style comment -- removed!
+                    ][--tokenType]);
+                }
+
+                token += chr;
+            }
+        }
+    }
+
+    exports.reset = reset;
+
+    if (_document.readyState == 'complete') {
+        reset();
+    } else {
+        _window.addEventListener('load', function(){reset()}, 0);
+    }
+}));
+
+// then compress with https://jscompress.com and escape \ " '
+
+//!function(a,b){\"function\"==typeof define&&define.amd?define([\"exports\"],b):b(\"undefined\"!=typeof exports?exports:a.microlight={})}(this,function(a){var k,l,m,b=window,c=document,d=\"appendChild\",e=\"test\",g=\"opacity:.\",n=function(a){for(l=c.getElementsByClassName(a||\"microlight\"),k=0;m=l[k++];){var n,o,r,s,t,f=m.textContent,h=0,i=f[0],j=1,p=m.innerHTML=\"\",q=0,u=/(\\d*\\, \\d*\\, \\d*)(, ([.\\d]*))?/g.exec(b.getComputedStyle(m).color);for(\"px rgba(\"+u[1]+\",\",u[3]||1;o=n,n=q<7&&\"\\\\\"==n?1:j;){if(j=i,i=f[++h],s=p.length>1,!j||q>8&&\"\\n\"==j||[/\\S/[e](j),1,1,!/[$\\w]/[e](j),(\"/\"==n||\"\\n\"==n)&&s,\'\"\'==n&&s,\"\'\"==n&&s,f[h-4]+o+n==\"-->\",o+n==\"*/\"][q])for(p&&(m[d](t=c.createElement(\"span\")).setAttribute(\"style\",[\"\",\"font-weight:bold;color:#00c;\",g+6,\"color: #a08;\"+g+8,\"font-style:italic;color: #b00;\"+g+8][q?q<3?2:q>6?4:q>3?3:+/^(If|Else|ElseIf|EndIf|Include|For|EndFor|Include|Macro|Return)$/[e](p):0]),t[d](c.createTextNode(p))),r=q&&q<7?q:r,p=\"\",q=11;![1,/[\\/{}[(\\-+*=<>:;|\\\\.,?!&@~]/[e](j),/[\\])]/[e](j),/[$\\w]/[e](j),\"/\"==j&&r<2&&\"<\"!=n,\'\"\'==j,\"\'\"==j,j+i+f[h+1]+f[h+2]==\"<!--\",j+i==\"/*\",j+i==\"//\",j+i==\"//\"][--q];);p+=j}}};a.reset=n,\"complete\"==c.readyState?n():b.addEventListener(\"load\",function(){n()},0)});
-- 
GitLab