From 0429e077611c30a3202017def8a4a580a54f5326 Mon Sep 17 00:00:00 2001 From: Jasper van Merle Date: Fri, 13 Jul 2018 16:26:02 +0200 Subject: [PATCH 1/7] Add Dart documentation --- .../templates/pages/about_tmpl.coffee | 5 ++ assets/javascripts/vendor/prism.js | 24 ++++++++ assets/stylesheets/application-dark.css.scss | 1 + assets/stylesheets/application.css.scss | 1 + assets/stylesheets/pages/_dart.scss | 12 ++++ lib/docs/filters/dart/clean_html.rb | 51 +++++++++++++++ lib/docs/filters/dart/entries.rb | 58 ++++++++++++++++++ lib/docs/scrapers/dart.rb | 34 ++++++++++ public/icons/docs/dart/16.png | Bin 0 -> 1129 bytes public/icons/docs/dart/16@2x.png | Bin 0 -> 4217 bytes public/icons/docs/dart/SOURCE | 1 + 11 files changed, 187 insertions(+) create mode 100644 assets/stylesheets/pages/_dart.scss create mode 100644 lib/docs/filters/dart/clean_html.rb create mode 100644 lib/docs/filters/dart/entries.rb create mode 100644 lib/docs/scrapers/dart.rb create mode 100644 public/icons/docs/dart/16.png create mode 100644 public/icons/docs/dart/16@2x.png create mode 100644 public/icons/docs/dart/SOURCE diff --git a/assets/javascripts/templates/pages/about_tmpl.coffee b/assets/javascripts/templates/pages/about_tmpl.coffee index 60ed00c2..d90c338a 100644 --- a/assets/javascripts/templates/pages/about_tmpl.coffee +++ b/assets/javascripts/templates/pages/about_tmpl.coffee @@ -215,6 +215,11 @@ credits = [ '2010-2018 Michael Bostock', 'BSD', 'https://raw.githubusercontent.com/d3/d3/master/LICENSE' + ], [ + 'Dart', + '2012 the Dart project authors', + 'CC BY-SA', + 'https://creativecommons.org/licenses/by-sa/4.0/' ], [ 'Django', 'Django Software Foundation and individual contributors', diff --git a/assets/javascripts/vendor/prism.js b/assets/javascripts/vendor/prism.js index 3dc04a14..a99402d9 100644 --- a/assets/javascripts/vendor/prism.js +++ b/assets/javascripts/vendor/prism.js @@ -2113,3 +2113,27 @@ Prism.languages.yaml = { 'punctuation': /---|[:[\]{}\-,|>?]|\.\.\./ }; +Prism.languages.dart = Prism.languages.extend('clike', { + 'string': [ + { + pattern: /r?("""|''')[\s\S]*?\1/, + greedy: true + }, + { + pattern: /r?("|')(?:\\.|(?!\1)[^\\\r\n])*\1/, + greedy: true + } + ], + 'keyword': [ + /\b(?:async|sync|yield)\*/, + /\b(?:abstract|assert|async|await|break|case|catch|class|const|continue|default|deferred|do|dynamic|else|enum|export|external|extends|factory|final|finally|for|get|if|implements|import|in|library|new|null|operator|part|rethrow|return|set|static|super|switch|this|throw|try|typedef|var|void|while|with|yield)\b/ + ], + 'operator': /\bis!|\b(?:as|is)\b|\+\+|--|&&|\|\||<<=?|>>=?|~(?:\/=?)?|[+\-*\/%&^|=!<>]=?|\?/ +}); + +Prism.languages.insertBefore('dart','function',{ + 'metadata': { + pattern: /@\w+/, + alias: 'symbol' + } +}); diff --git a/assets/stylesheets/application-dark.css.scss b/assets/stylesheets/application-dark.css.scss index 3d9efa6c..38346905 100644 --- a/assets/stylesheets/application-dark.css.scss +++ b/assets/stylesheets/application-dark.css.scss @@ -46,6 +46,7 @@ 'pages/crystal', 'pages/d', 'pages/d3', + 'pages/dart', 'pages/dojo', 'pages/drupal', 'pages/elixir', diff --git a/assets/stylesheets/application.css.scss b/assets/stylesheets/application.css.scss index d72487c2..64916112 100644 --- a/assets/stylesheets/application.css.scss +++ b/assets/stylesheets/application.css.scss @@ -46,6 +46,7 @@ 'pages/crystal', 'pages/d', 'pages/d3', + 'pages/dart', 'pages/dojo', 'pages/drupal', 'pages/elixir', diff --git a/assets/stylesheets/pages/_dart.scss b/assets/stylesheets/pages/_dart.scss new file mode 100644 index 00000000..87159057 --- /dev/null +++ b/assets/stylesheets/pages/_dart.scss @@ -0,0 +1,12 @@ +._dart { + @extend %simple; + + dl:not(.dl-horizontal) dt, .multi-line-signature { + @extend %note, %note-blue; + padding: 1px 0.5rem 2px 0.5rem; + + .features { + float: right; + } + } +} diff --git a/lib/docs/filters/dart/clean_html.rb b/lib/docs/filters/dart/clean_html.rb new file mode 100644 index 00000000..ce1733af --- /dev/null +++ b/lib/docs/filters/dart/clean_html.rb @@ -0,0 +1,51 @@ +module Docs + class Dart + class CleanHtmlFilter < Filter + def call + # Move the title into the main content node in the v1 docs + title = at_css('h1.title') + unless title.nil? + name = title.children.last.content.strip + kind = title.at_css('.kind').content + at_css('.main-content').prepend_child("

#{name} #{kind}

") + end + + # Add a title to the homepage of the v2 docs + if subpath == 'index.html' && at_css('.main-content > h1').nil? + at_css('.main-content').prepend_child('

Dart SDK

') + end + + # Add the library to the main content (it is not always visible in the menu entry) + breadcrumbs = at_css('.breadcrumbs').css('li:not(.self-crumb) > a') + if breadcrumbs.length > 1 + library = breadcrumbs[1].content + + # Generate the link to the homepage of the library + with_hypens = library.gsub(/:/, '-') + location = "#{'../' * subpath.count('/')}#{with_hypens}/#{with_hypens}-library" + link = "#{library}" + + # Add the link to the main title, just like how the "Homepage" and "Source code" links appear + at_css('.main-content').prepend_child("

#{link}

") + end + + # Extract the actual content + # We can't use options[:container] here because the entries filter uses the breadcrumbs node + @doc = at_css('.main-content') + + # Move the features (i.e. "read-only, inherited") into the blue header + css('.features').each do |node| + header = node.xpath('parent::dd/preceding::dt').last + header.add_child node unless header.nil? + end + + # Make code blocks detectable by Prism + css('pre').each do |node| + node['data-language'] = 'dart' + end + + doc + end + end + end +end diff --git a/lib/docs/filters/dart/entries.rb b/lib/docs/filters/dart/entries.rb new file mode 100644 index 00000000..f94c451b --- /dev/null +++ b/lib/docs/filters/dart/entries.rb @@ -0,0 +1,58 @@ +module Docs + class Dart + class EntriesFilter < Docs::EntriesFilter + def get_name + title = get_title + kind = get_kind + + breadcrumbs = at_css('.breadcrumbs').css('li:not(.self-crumb) > a') + first_part = '' + + if breadcrumbs.length == 2 && !kind.include?('class') + first_part = breadcrumbs[1].content + elsif breadcrumbs.length == 3 + first_part = breadcrumbs[2].content + end + + separator = '' + unless first_part.empty? + if kind.include?('class') + separator = ':' + else + separator = '.' + end + end + + first_part + separator + title + end + + def get_type + at_css('.breadcrumbs > li:nth-child(2)').content.split(' ')[0] + end + + def get_title + title = at_css('h1.title') + + if not title.nil? + # v1 + title.children.last.content.strip + else + # v2 + at_css('.main-content > h1').content[/(.*)( )/, 1].split(' top-level')[0] + end + end + + def get_kind + title = at_css('h1.title') + + if not title.nil? + # v1 + title.at_css('.kind').content + else + # v2 + at_css('.main-content > h1').content[/(.*)( )(.+)/, 3] + end + end + end + end +end diff --git a/lib/docs/scrapers/dart.rb b/lib/docs/scrapers/dart.rb new file mode 100644 index 00000000..b06960b2 --- /dev/null +++ b/lib/docs/scrapers/dart.rb @@ -0,0 +1,34 @@ +module Docs + class Dart < FileScraper + self.type = 'dart' + self.root_path = 'index.html' + self.links = { + home: 'https://www.dartlang.org/', + code: 'https://github.com/dart-lang/sdk' + } + + html_filters.push 'dart/entries', 'dart/clean_html' + + options[:fix_urls] = ->(url) do + # localhost/dart-web_audio/..dart-io/dart-io-library.html > localhost/dart-io/dart-io-library.html + url.sub(/(([^\/]+)\/\.\.)/, '') + end + + options[:attribution] = <<-HTML + © 2012, the Dart project authors
+ Licensed under the Creative Commons Attribution-ShareAlike License v4.0. + HTML + + # Download the documentation from https://www.dartlang.org/tools/sdk/archive + + version '1' do + self.release = '1.24.3' + self.dir = '/home/jasper/Documents/dart-docs-1.24.3' + end + + version '2' do + self.release = '2.0.0-dev.68.0' + self.dir = '/home/jasper/Documents/dart-docs-2.0.0-dev.68.0' + end + end +end diff --git a/public/icons/docs/dart/16.png b/public/icons/docs/dart/16.png new file mode 100644 index 0000000000000000000000000000000000000000..3272c1d7648b62aedb7a62ebd9ce9835b0a476f8 GIT binary patch literal 1129 zcmZuvO=uHQ5T1FP#%7b4q#Ly~2Cc1WlVV$=!6wwwhJ>~vLHt4L!5_qf2cam42k{^% zcoA=csCe-t3VIPQ5)~sJ`~eT`q4-yOC{;8TEp4{@oVS~oY-47boq6AU^S$?G_sX8! zuvcwS0l+&tlG#hqFTBx7?+x?(7zNk($k-VGwD5eh`=~?3#0r4)6|`BvQ0$`AxtLPrNTA7@Hh2q>Qe%%uq>OA)3F>4&euyt zJqwSHo7b_9cL&%gnPLD_NwY540-5qN2fv(Rj%zbxT z%_~JLAqazm_tU%@P7^?%9$lg!Ex2v#n&6h$Z>v?DKxUMeXN25{GaAg{a+4yPWeoQA ztk$}_{>XK`C}v;|O-#7f1funHyS1+954v}yZ09m==wnowlGQ3rA^^d7ucpO1r)?UQ zB7=J;XAA{~XtXnuP*-GoJRFE@o{+msuJs?>J@E}1SsIPykFp>{>@K!k+n0#?+S}e% zwx^^zT3QS|<6%JloYIZtm7@Jb9KrbVB0n(u?)@wp^a!He(ghyk2IL8Ax8owO2r1B- yPvU2RSyvEQ*`B6w1{n+zd6In5?nGG>&Wx(o_`dr`rZ0Cq6z!wgT;@Ug=*55V48VT? literal 0 HcmV?d00001 diff --git a/public/icons/docs/dart/16@2x.png b/public/icons/docs/dart/16@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..cad29d188f36091e768731a47a711bbf87f18f3b GIT binary patch literal 4217 zcmb_fU1(fI6h1S1v)P|C*}tT25~Z}5CfO9zO>Hf9X_QDCZG(s_RYX*ohY&z$)eyWqsZ=T8EJ3^;u;!~XIT&@%x_EHpTU36Ei- zur1jl6L4TU!+x~cU55=5$jpj%jl(I7^aeJ2Vl}}cR-|DPbqRP#ye<;11lF0@GYLlm zJ3hGfdVXQ?MXvc;80XE{nt<_U&Y7PxUo&pJCdL@{Oj9$GE=0+~ec%s=?}j!fM!$b5 zI%~(taW#SLr|koW_kTJ6>z{$88#mJxU^P_EIrRcJ0*U7L=Y(z?TKnvkADnR9Zsc4) zZWN4QXC{-5Y}@(=gW}JQt2ZVulEUh0T-OWVz>PCixw*~vEa8yAMrOyK0cy*<(G z56-KOc>JJNvtUak(ALI*f9piTN`U$3h_wkrr_0Qg&5u0X9qa4K(SQ=y6FWv$0{t9G zR0tfN3~??_Py(Sd++>wh9lLkMror~I6+OrhRN4>O-ia5GglNsz8tc2$qE%ho*}a;7c!|u}eDJDi;3=>?0(FjbBms$mezQ8XX7_d5J*{KR8{p8taeis~Af!_?7>_~v>`MW~Jq#3;Kab`G*ws(-C)P!#!gR7|E?yazr% zdd?755-QLOiH@PcrdX;suP#E3MY=jyBtTY^1bfp27={I8+UT!AX&*|5qrKbjNVwbT zX})+BOXT&hu8M)N+pV$4lm2AV@$FaZ(orkb(%l)ozhXTr!^2@vY% zuYU?W`hvgZ{_eea9nd|oZV7jFwHEUE- Date: Mon, 6 Aug 2018 17:15:13 -0400 Subject: [PATCH 2/7] Update Prism.js --- assets/javascripts/vendor/prism.js | 1009 +++++++++++++++++----------- 1 file changed, 633 insertions(+), 376 deletions(-) diff --git a/assets/javascripts/vendor/prism.js b/assets/javascripts/vendor/prism.js index a99402d9..09d6df87 100644 --- a/assets/javascripts/vendor/prism.js +++ b/assets/javascripts/vendor/prism.js @@ -1,4 +1,5 @@ -/* http://prismjs.com/download.html?themes=prism&languages=markup+css+clike+javascript+c+bash+cpp+coffeescript+ruby+d+django+elixir+erlang+go+java+json+kotlin+lua+nginx+nim+perl+php+python+jsx+crystal+rust+scss+sql+typescript+yaml */ +/* PrismJS 1.15.0 +https://prismjs.com/download.html#themes=prism&languages=markup+css+clike+javascript+c+bash+cpp+coffeescript+ruby+d+dart+django+elixir+markup-templating+erlang+go+java+json+kotlin+lua+crystal+nginx+nim+perl+php+sql+scss+python+jsx+typescript+rust+yaml */ var _self = (typeof window !== 'undefined') ? window // if in browser : ( @@ -16,11 +17,12 @@ var _self = (typeof window !== 'undefined') var Prism = (function(){ // Private helper vars -var lang = /\blang(?:uage)?-(\w+)\b/i; +var lang = /\blang(?:uage)?-([\w-]+)\b/i; var uniqueId = 0; var _ = _self.Prism = { manual: _self.Prism && _self.Prism.manual, + disableWorkerMessageHandler: _self.Prism && _self.Prism.disableWorkerMessageHandler, util: { encode: function (tokens) { if (tokens instanceof Token) { @@ -44,23 +46,38 @@ var _ = _self.Prism = { }, // Deep clone a language definition (e.g. to extend it) - clone: function (o) { + clone: function (o, visited) { var type = _.util.type(o); + visited = visited || {}; switch (type) { case 'Object': + if (visited[_.util.objId(o)]) { + return visited[_.util.objId(o)]; + } var clone = {}; + visited[_.util.objId(o)] = clone; for (var key in o) { if (o.hasOwnProperty(key)) { - clone[key] = _.util.clone(o[key]); + clone[key] = _.util.clone(o[key], visited); } } return clone; case 'Array': - return o.map(function(v) { return _.util.clone(v); }); + if (visited[_.util.objId(o)]) { + return visited[_.util.objId(o)]; + } + var clone = []; + visited[_.util.objId(o)] = clone; + + o.forEach(function (v, i) { + clone[i] = _.util.clone(v, visited); + }); + + return clone; } return o; @@ -155,6 +172,10 @@ var _ = _self.Prism = { plugins: {}, highlightAll: function(async, callback) { + _.highlightAllUnder(document, async, callback); + }, + + highlightAllUnder: function(container, async, callback) { var env = { callback: callback, selector: 'code[class*="language-"], [class*="language-"] code, code[class*="lang-"], [class*="lang-"] code' @@ -162,7 +183,7 @@ var _ = _self.Prism = { _.hooks.run("before-highlightall", env); - var elements = env.elements || document.querySelectorAll(env.selector); + var elements = env.elements || container.querySelectorAll(env.selector); for (var i=0, element; element = elements[i++];) { _.highlightElement(element, async === true, env.callback); @@ -185,11 +206,13 @@ var _ = _self.Prism = { // Set language on the element, if not present element.className = element.className.replace(lang, '').replace(/\s+/g, ' ') + ' language-' + language; - // Set language on the parent, for styling - parent = element.parentNode; + if (element.parentNode) { + // Set language on the parent, for styling + parent = element.parentNode; - if (/pre/i.test(parent.nodeName)) { - parent.className = parent.className.replace(lang, '').replace(/\s+/g, ' ') + ' language-' + language; + if (/pre/i.test(parent.nodeName)) { + parent.className = parent.className.replace(lang, '').replace(/\s+/g, ' ') + ' language-' + language; + } } var code = element.textContent; @@ -251,8 +274,15 @@ var _ = _self.Prism = { }, highlight: function (text, grammar, language) { - var tokens = _.tokenize(text, grammar); - return Token.stringify(_.util.encode(tokens), language); + var env = { + code: text, + grammar: grammar, + language: language + }; + _.hooks.run('before-tokenize', env); + env.tokens = _.tokenize(env.code, env.grammar); + _.hooks.run('after-tokenize', env); + return Token.stringify(_.util.encode(env.tokens), env.language); }, matchGrammar: function (text, strarr, grammar, index, startPos, oneshot, target) { @@ -300,15 +330,9 @@ var _ = _self.Prism = { continue; } - pattern.lastIndex = 0; - - var match = pattern.exec(str), - delNum = 1; - - // Greedy patterns can override/remove up to two previously matched tokens - if (!match && greedy && i != strarr.length - 1) { + if (greedy && i != strarr.length - 1) { pattern.lastIndex = pos; - match = pattern.exec(text); + var match = pattern.exec(text); if (!match) { break; } @@ -327,11 +351,8 @@ var _ = _self.Prism = { } } - /* - * If strarr[i] is a Token, then the match starts inside another Token, which is invalid - * If strarr[k - 1] is greedy we are in conflict with another greedy pattern - */ - if (strarr[i] instanceof Token || strarr[k - 1].greedy) { + // If strarr[i] is a Token, then the match starts inside another Token, which is invalid + if (strarr[i] instanceof Token) { continue; } @@ -339,6 +360,11 @@ var _ = _self.Prism = { delNum = k - i; str = text.slice(pos, p); match.index -= pos; + } else { + pattern.lastIndex = 0; + + var match = pattern.exec(str), + delNum = 1; } if (!match) { @@ -350,7 +376,7 @@ var _ = _self.Prism = { } if(lookbehind) { - lookbehindLength = match[1].length; + lookbehindLength = match[1] ? match[1].length : 0; } var from = match.index + lookbehindLength, @@ -480,18 +506,21 @@ Token.stringify = function(o, language, parent) { // // in Node.js // return _self.Prism; // } -// // In worker -// _self.addEventListener('message', function(evt) { -// var message = JSON.parse(evt.data), -// lang = message.language, -// code = message.code, -// immediateClose = message.immediateClose; - -// _self.postMessage(_.highlight(code, _.languages[lang], lang)); -// if (immediateClose) { -// _self.close(); -// } -// }, false); + +// if (!_.disableWorkerMessageHandler) { +// // In worker +// _self.addEventListener('message', function (evt) { +// var message = JSON.parse(evt.data), +// lang = message.language, +// code = message.code, +// immediateClose = message.immediateClose; + +// _self.postMessage(_.highlight(code, _.languages[lang], lang)); +// if (immediateClose) { +// _self.close(); +// } +// }, false); +// } // return _self.Prism; // } @@ -535,7 +564,8 @@ Prism.languages.markup = { 'doctype': //i, 'cdata': //i, 'tag': { - pattern: /<\/?(?!\d)[^\s>\/=$<]+(?:\s+[^\s>\/=]+(?:=(?:("|')(?:\\[\s\S]|(?!\1)[^\\])*\1|[^\s'">=]+))?)*\s*\/?>/i, + pattern: /<\/?(?!\d)[^\s>\/=$<%]+(?:\s+[^\s>\/=]+(?:=(?:("|')(?:\\[\s\S]|(?!\1)[^\\])*\1|[^\s'">=]+))?)*\s*\/?>/i, + greedy: true, inside: { 'tag': { pattern: /^<\/?[^\s>\/]+/i, @@ -600,13 +630,13 @@ Prism.languages.css = { pattern: /("|')(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/, greedy: true }, - 'property': /[\w-]+(?=\s*:)/i, + 'property': /[-_a-z\xA0-\uFFFF][-\w\xA0-\uFFFF]*(?=\s*:)/i, 'important': /\B!important\b/i, 'function': /[-a-z0-9]+(?=\()/i, 'punctuation': /[(){};:]/ }; -Prism.languages.css['atrule'].inside.rest = Prism.util.clone(Prism.languages.css); +Prism.languages.css['atrule'].inside.rest = Prism.languages.css; if (Prism.languages.markup) { Prism.languages.insertBefore('markup', 'tag', { @@ -614,10 +644,11 @@ if (Prism.languages.markup) { pattern: /()[\s\S]*?(?=<\/style>)/i, lookbehind: true, inside: Prism.languages.css, - alias: 'language-css' + alias: 'language-css', + greedy: true } }); - + Prism.languages.insertBefore('inside', 'attr-value', { 'style-attr': { pattern: /\s*style=("|')(?:\\[\s\S]|(?!\1)[^\\])*\1/i, @@ -644,7 +675,8 @@ Prism.languages.clike = { }, { pattern: /(^|[^\\:])\/\/.*/, - lookbehind: true + lookbehind: true, + greedy: true } ], 'string': { @@ -661,51 +693,53 @@ Prism.languages.clike = { 'keyword': /\b(?:if|else|while|do|for|return|in|instanceof|function|new|try|throw|catch|finally|null|break|continue)\b/, 'boolean': /\b(?:true|false)\b/, 'function': /[a-z0-9_]+(?=\()/i, - 'number': /\b-?(?:0x[\da-f]+|\d*\.?\d+(?:e[+-]?\d+)?)\b/i, + 'number': /\b0x[\da-f]+\b|(?:\b\d+\.?\d*|\B\.\d+)(?:e[+-]?\d+)?/i, 'operator': /--?|\+\+?|!=?=?|<=?|>=?|==?=?|&&?|\|\|?|\?|\*|\/|~|\^|%/, 'punctuation': /[{}[\];(),.:]/ }; Prism.languages.javascript = Prism.languages.extend('clike', { 'keyword': /\b(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|var|void|while|with|yield)\b/, - 'number': /\b-?(?:0[xX][\dA-Fa-f]+|0[bB][01]+|0[oO][0-7]+|\d*\.?\d+(?:[Ee][+-]?\d+)?|NaN|Infinity)\b/, + 'number': /\b(?:0[xX][\dA-Fa-f]+|0[bB][01]+|0[oO][0-7]+|NaN|Infinity)\b|(?:\b\d+\.?\d*|\B\.\d+)(?:[Ee][+-]?\d+)?/, // Allow for all non-ASCII characters (See http://stackoverflow.com/a/2008444) - 'function': /[_$a-zA-Z\xA0-\uFFFF][_$a-zA-Z0-9\xA0-\uFFFF]*(?=\s*\()/i, + 'function': /[_$a-z\xA0-\uFFFF][$\w\xA0-\uFFFF]*(?=\s*\()/i, 'operator': /-[-=]?|\+[+=]?|!=?=?|<>?>?=?|=(?:==?|>)?|&[&=]?|\|[|=]?|\*\*?=?|\/=?|~|\^=?|%=?|\?|\.{3}/ }); Prism.languages.insertBefore('javascript', 'keyword', { 'regex': { - pattern: /(^|[^/])\/(?!\/)(\[[^\]\r\n]+]|\\.|[^/\\\[\r\n])+\/[gimyu]{0,5}(?=\s*($|[\r\n,.;})]))/, + pattern: /((?:^|[^$\w\xA0-\uFFFF."'\])\s])\s*)\/(\[[^\]\r\n]+]|\\.|[^/\\\[\r\n])+\/[gimyu]{0,5}(?=\s*($|[\r\n,.;})\]]))/, lookbehind: true, greedy: true }, // This must be declared before keyword because we use "function" inside the look-forward 'function-variable': { - pattern: /[_$a-zA-Z\xA0-\uFFFF][_$a-zA-Z0-9\xA0-\uFFFF]*(?=\s*=\s*(?:function\b|(?:\([^()]*\)|[_$a-zA-Z\xA0-\uFFFF][_$a-zA-Z0-9\xA0-\uFFFF]*)\s*=>))/i, + pattern: /[_$a-z\xA0-\uFFFF][$\w\xA0-\uFFFF]*(?=\s*=\s*(?:function\b|(?:\([^()]*\)|[_$a-z\xA0-\uFFFF][$\w\xA0-\uFFFF]*)\s*=>))/i, alias: 'function' - } + }, + 'constant': /\b[A-Z][A-Z\d_]*\b/ }); Prism.languages.insertBefore('javascript', 'string', { 'template-string': { - pattern: /`(?:\\[\s\S]|[^\\`])*`/, + pattern: /`(?:\\[\s\S]|\${[^}]+}|[^\\`])*`/, greedy: true, inside: { 'interpolation': { - pattern: /\$\{[^}]+\}/, + pattern: /\${[^}]+}/, inside: { 'interpolation-punctuation': { - pattern: /^\$\{|\}$/, + pattern: /^\${|}$/, alias: 'punctuation' }, - rest: Prism.languages.javascript + rest: null // See below } }, 'string': /[\s\S]+/ } } }); +Prism.languages.javascript['template-string'].inside['interpolation'].inside.rest = Prism.languages.javascript; if (Prism.languages.markup) { Prism.languages.insertBefore('markup', 'tag', { @@ -713,7 +747,8 @@ if (Prism.languages.markup) { pattern: /()[\s\S]*?(?=<\/script>)/i, lookbehind: true, inside: Prism.languages.javascript, - alias: 'language-javascript' + alias: 'language-javascript', + greedy: true } }); } @@ -723,7 +758,7 @@ Prism.languages.js = Prism.languages.javascript; Prism.languages.c = Prism.languages.extend('clike', { 'keyword': /\b(?:_Alignas|_Alignof|_Atomic|_Bool|_Complex|_Generic|_Imaginary|_Noreturn|_Static_assert|_Thread_local|asm|typeof|inline|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|int|long|register|return|short|signed|sizeof|static|struct|switch|typedef|union|unsigned|void|volatile|while)\b/, 'operator': /-[>-]?|\+\+?|!=?|<>?=?|==?|&&?|\|\|?|[~^%?*\/]/, - 'number': /\b-?(?:0x[\da-f]+|\d*\.?\d+(?:e[+-]?\d+)?)[ful]*\b/i + 'number': /(?:\b0x[\da-f]+|(?:\b\d+\.?\d*|\B\.\d+)(?:e[+-]?\d+)?)[ful]*/i }); Prism.languages.insertBefore('c', 'string', { @@ -768,7 +803,7 @@ delete Prism.languages.c['boolean']; }, /^\$\(\(/ ], - number: /\b-?(?:0x[\dA-Fa-f]+|\d*\.?\d+(?:[Ee]-?\d+)?)\b/, + number: /\b0x[\dA-Fa-f]+\b|(?:\b\d+\.?\d*|\B\.\d+)(?:[Ee]-?\d+)?/, // Operators according to https://www.gnu.org/software/bash/manual/bashref.html#Shell-Arithmetic operator: /--?|-=|\+\+?|\+=|!=?|~|\*\*?|\*=|\/=?|%=?|<<=?|>>=?|<=?|>=?|==?|&&?|&=|\^=?|\|\|?|\|=|\?|:/, // If there is no $ sign at the beginning highlight (( and )) as punctuation @@ -778,6 +813,7 @@ delete Prism.languages.c['boolean']; // Command Substitution { pattern: /\$\([^)]+\)|`[^`]+`/, + greedy: true, inside: { variable: /^\$\(|^`|\)$|`$/ } @@ -804,7 +840,7 @@ delete Prism.languages.c['boolean']; inside: insideString }, { - pattern: /(["'])(?:\\[\s\S]|(?!\1)[^\\])*\1/, + pattern: /(["'])(?:\\[\s\S]|\$\([^)]+\)|`[^`]+`|(?!\1)[^\\])*\1/, greedy: true, inside: insideString } @@ -812,7 +848,7 @@ delete Prism.languages.c['boolean']; 'variable': insideString.variable, // Originally based on http://ss64.com/bash/ 'function': { - pattern: /(^|[\s;|&])(?:alias|apropos|apt-get|aptitude|aspell|awk|basename|bash|bc|bg|builtin|bzip2|cal|cat|cd|cfdisk|chgrp|chmod|chown|chroot|chkconfig|cksum|clear|cmp|comm|command|cp|cron|crontab|csplit|cut|date|dc|dd|ddrescue|df|diff|diff3|dig|dir|dircolors|dirname|dirs|dmesg|du|egrep|eject|enable|env|ethtool|eval|exec|expand|expect|export|expr|fdformat|fdisk|fg|fgrep|file|find|fmt|fold|format|free|fsck|ftp|fuser|gawk|getopts|git|grep|groupadd|groupdel|groupmod|groups|gzip|hash|head|help|hg|history|hostname|htop|iconv|id|ifconfig|ifdown|ifup|import|install|jobs|join|kill|killall|less|link|ln|locate|logname|logout|look|lpc|lpr|lprint|lprintd|lprintq|lprm|ls|lsof|make|man|mkdir|mkfifo|mkisofs|mknod|more|most|mount|mtools|mtr|mv|mmv|nano|netstat|nice|nl|nohup|notify-send|npm|nslookup|open|op|passwd|paste|pathchk|ping|pkill|popd|pr|printcap|printenv|printf|ps|pushd|pv|pwd|quota|quotacheck|quotactl|ram|rar|rcp|read|readarray|readonly|reboot|rename|renice|remsync|rev|rm|rmdir|rsync|screen|scp|sdiff|sed|seq|service|sftp|shift|shopt|shutdown|sleep|slocate|sort|source|split|ssh|stat|strace|su|sudo|sum|suspend|sync|tail|tar|tee|test|time|timeout|times|touch|top|traceroute|trap|tr|tsort|tty|type|ulimit|umask|umount|unalias|uname|unexpand|uniq|units|unrar|unshar|uptime|useradd|userdel|usermod|users|uuencode|uudecode|v|vdir|vi|vmstat|wait|watch|wc|wget|whereis|which|who|whoami|write|xargs|xdg-open|yes|zip)(?=$|[\s;|&])/, + pattern: /(^|[\s;|&])(?:alias|apropos|apt-get|aptitude|aspell|awk|basename|bash|bc|bg|builtin|bzip2|cal|cat|cd|cfdisk|chgrp|chmod|chown|chroot|chkconfig|cksum|clear|cmp|comm|command|cp|cron|crontab|csplit|curl|cut|date|dc|dd|ddrescue|df|diff|diff3|dig|dir|dircolors|dirname|dirs|dmesg|du|egrep|eject|enable|env|ethtool|eval|exec|expand|expect|export|expr|fdformat|fdisk|fg|fgrep|file|find|fmt|fold|format|free|fsck|ftp|fuser|gawk|getopts|git|grep|groupadd|groupdel|groupmod|groups|gzip|hash|head|help|hg|history|hostname|htop|iconv|id|ifconfig|ifdown|ifup|import|install|jobs|join|kill|killall|less|link|ln|locate|logname|logout|look|lpc|lpr|lprint|lprintd|lprintq|lprm|ls|lsof|make|man|mkdir|mkfifo|mkisofs|mknod|more|most|mount|mtools|mtr|mv|mmv|nano|netstat|nice|nl|nohup|notify-send|npm|nslookup|open|op|passwd|paste|pathchk|ping|pkill|popd|pr|printcap|printenv|printf|ps|pushd|pv|pwd|quota|quotacheck|quotactl|ram|rar|rcp|read|readarray|readonly|reboot|rename|renice|remsync|rev|rm|rmdir|rsync|screen|scp|sdiff|sed|seq|service|sftp|shift|shopt|shutdown|sleep|slocate|sort|source|split|ssh|stat|strace|su|sudo|sum|suspend|sync|tail|tar|tee|test|time|timeout|times|touch|top|traceroute|trap|tr|tsort|tty|type|ulimit|umask|umount|unalias|uname|unexpand|uniq|units|unrar|unshar|uptime|useradd|userdel|usermod|users|uuencode|uudecode|v|vdir|vi|vmstat|wait|watch|wc|wget|whereis|which|who|whoami|write|xargs|xdg-open|yes|zip)(?=$|[\s;|&])/, lookbehind: true }, 'keyword': { @@ -828,15 +864,18 @@ delete Prism.languages.c['boolean']; }; var inside = insideString.variable[1].inside; + inside.string = Prism.languages.bash.string; inside['function'] = Prism.languages.bash['function']; inside.keyword = Prism.languages.bash.keyword; - inside.boolean = Prism.languages.bash.boolean; + inside['boolean'] = Prism.languages.bash['boolean']; inside.operator = Prism.languages.bash.operator; inside.punctuation = Prism.languages.bash.punctuation; + + Prism.languages.shell = Prism.languages.bash; })(Prism); Prism.languages.cpp = Prism.languages.extend('c', { - 'keyword': /\b(?:alignas|alignof|asm|auto|bool|break|case|catch|char|char16_t|char32_t|class|compl|const|constexpr|const_cast|continue|decltype|default|delete|do|double|dynamic_cast|else|enum|explicit|export|extern|float|for|friend|goto|if|inline|int|long|mutable|namespace|new|noexcept|nullptr|operator|private|protected|public|register|reinterpret_cast|return|short|signed|sizeof|static|static_assert|static_cast|struct|switch|template|this|thread_local|throw|try|typedef|typeid|typename|union|unsigned|using|virtual|void|volatile|wchar_t|while)\b/, + 'keyword': /\b(?:alignas|alignof|asm|auto|bool|break|case|catch|char|char16_t|char32_t|class|compl|const|constexpr|const_cast|continue|decltype|default|delete|do|double|dynamic_cast|else|enum|explicit|export|extern|float|for|friend|goto|if|inline|int|int8_t|int16_t|int32_t|int64_t|uint8_t|uint16_t|uint32_t|uint64_t|long|mutable|namespace|new|noexcept|nullptr|operator|private|protected|public|register|reinterpret_cast|return|short|signed|sizeof|static|static_assert|static_cast|struct|switch|template|this|thread_local|throw|try|typedef|typeid|typename|union|unsigned|using|virtual|void|volatile|wchar_t|while)\b/, 'boolean': /\b(?:true|false)\b/, 'operator': /--?|\+\+?|!=?|<{1,2}=?|>{1,2}=?|->|:{1,2}|={1,2}|\^|~|%|&{1,2}|\|\|?|\?|\*|\/|\b(?:and|and_eq|bitand|bitor|not|not_eq|or|or_eq|xor|xor_eq)\b/ }); @@ -847,6 +886,15 @@ Prism.languages.insertBefore('cpp', 'keyword', { lookbehind: true } }); + +Prism.languages.insertBefore('cpp', 'string', { + 'raw-string': { + pattern: /R"([^()\\ ]{0,16})\([\s\S]*?\)\1"/, + alias: 'string', + greedy: true + } +}); + (function(Prism) { // Ignore comments starting with { to privilege string interpolation highlighting @@ -947,10 +995,13 @@ delete Prism.languages.coffeescript['template-string']; (function(Prism) { Prism.languages.ruby = Prism.languages.extend('clike', { 'comment': [ - /#(?!\{[^\r\n]*?\}).*/, - /^=begin(?:\r?\n|\r)(?:.*(?:\r?\n|\r))*?=end/m + /#.*/, + { + pattern: /^=begin(?:\r?\n|\r)(?:.*(?:\r?\n|\r))*?=end/m, + greedy: true + } ], - 'keyword': /\b(?:alias|and|BEGIN|begin|break|case|class|def|define_method|defined|do|each|else|elsif|END|end|ensure|false|for|if|in|module|new|next|nil|not|or|raise|redo|require|rescue|retry|return|self|super|then|throw|true|undef|unless|until|when|while|yield)\b/ + 'keyword': /\b(?:alias|and|BEGIN|begin|break|case|class|def|define_method|defined|do|each|else|elsif|END|end|ensure|false|for|if|in|module|new|next|nil|not|or|protected|private|public|raise|redo|require|rescue|retry|return|self|super|then|throw|true|undef|unless|until|when|while|yield)\b/ }); var interpolation = { @@ -960,7 +1011,7 @@ delete Prism.languages.coffeescript['template-string']; pattern: /^#\{|\}$/, alias: 'tag' }, - rest: Prism.util.clone(Prism.languages.ruby) + rest: Prism.languages.ruby } }; @@ -1009,7 +1060,10 @@ delete Prism.languages.coffeescript['template-string']; } ], 'variable': /[@$]+[a-zA-Z_]\w*(?:[?!]|\b)/, - 'symbol': /:[a-zA-Z_]\w*(?:[?!]|\b)/ + 'symbol': { + pattern: /(^|[^:]):[a-zA-Z_]\w*(?:[?!]|\b)/, + lookbehind: true + } }); Prism.languages.insertBefore('ruby', 'number', { @@ -1127,6 +1181,30 @@ Prism.languages.insertBefore('d', 'function', { alias: 'variable' } }); +Prism.languages.dart = Prism.languages.extend('clike', { + 'string': [ + { + pattern: /r?("""|''')[\s\S]*?\1/, + greedy: true + }, + { + pattern: /r?("|')(?:\\.|(?!\1)[^\\\r\n])*\1/, + greedy: true + } + ], + 'keyword': [ + /\b(?:async|sync|yield)\*/, + /\b(?:abstract|assert|async|await|break|case|catch|class|const|continue|default|deferred|do|dynamic|else|enum|export|external|extends|factory|final|finally|for|get|if|implements|import|in|library|new|null|operator|part|rethrow|return|set|static|super|switch|this|throw|try|typedef|var|void|while|with|yield)\b/ + ], + 'operator': /\bis!|\b(?:as|is)\b|\+\+|--|&&|\|\||<<=?|>>=?|~(?:\/=?)?|[+\-*\/%&^|=!<>]=?|\?/ +}); + +Prism.languages.insertBefore('dart','function',{ + 'metadata': { + pattern: /@\w+/, + alias: 'symbol' + } +}); // Django/Jinja2 syntax definition for Prism.js syntax highlighter. // Mostly it works OK but can paint code incorrectly on complex html/template tag combinations. @@ -1170,15 +1248,15 @@ if (Prism.languages.css) { Prism.languages.jinja2 = Prism.languages.django; Prism.languages.elixir = { - // Negative look-ahead is needed for string interpolation - // Negative look-behind is needed to avoid highlighting markdown headers in - // multi-line doc strings 'comment': { - pattern: /(^|[^#])#(?![{#]).*/m, + pattern: /#.*/m, lookbehind: true }, // ~r"""foo""" (multi-line), ~r'''foo''' (multi-line), ~r/foo/, ~r|foo|, ~r"foo", ~r'foo', ~r(foo), ~r[foo], ~r{foo}, ~r - 'regex': /~[rR](?:("""|''')(?:\\[\s\S]|(?!\1)[^\\])+\1|([\/|"'])(?:\\.|(?!\2)[^\\\r\n])+\2|\((?:\\.|[^\\)\r\n])+\)|\[(?:\\.|[^\\\]\r\n])+\]|\{(?:\\.|[^\\}\r\n])+\}|<(?:\\.|[^\\>\r\n])+>)[uismxfr]*/, + 'regex': { + pattern: /~[rR](?:("""|''')(?:\\[\s\S]|(?!\1)[^\\])+\1|([\/|"'])(?:\\.|(?!\2)[^\\\r\n])+\2|\((?:\\.|[^\\)\r\n])+\)|\[(?:\\.|[^\\\]\r\n])+\]|\{(?:\\.|[^\\}\r\n])+\}|<(?:\\.|[^\\>\r\n])+>)[uismxfr]*/, + greedy: true + }, 'string': [ { // ~s"""foo""" (multi-line), ~s'''foo''' (multi-line), ~s/foo/, ~s|foo|, ~s"foo", ~s'foo', ~s(foo), ~s[foo], ~s{foo} (with interpolation care), ~s @@ -1225,7 +1303,7 @@ Prism.languages.elixir = { alias: 'variable' }, 'attribute': { - pattern: /@[\S]+/, + pattern: /@\w+/, alias: 'variable' }, 'number': /\b(?:0[box][a-f\d_]+|\d[\d_]*)(?:\.[\d_]+)?(?:e[+-]?[\d_]+)?\b/i, @@ -1256,13 +1334,102 @@ Prism.languages.elixir.string.forEach(function(o) { pattern: /^#\{|\}$/, alias: 'punctuation' }, - rest: Prism.util.clone(Prism.languages.elixir) + rest: Prism.languages.elixir } } }; }); +Prism.languages['markup-templating'] = {}; + +Object.defineProperties(Prism.languages['markup-templating'], { + buildPlaceholders: { + // Tokenize all inline templating expressions matching placeholderPattern + // If the replaceFilter function is provided, it will be called with every match. + // If it returns false, the match will not be replaced. + value: function (env, language, placeholderPattern, replaceFilter) { + if (env.language !== language) { + return; + } + + env.tokenStack = []; + + env.code = env.code.replace(placeholderPattern, function(match) { + if (typeof replaceFilter === 'function' && !replaceFilter(match)) { + return match; + } + var i = env.tokenStack.length; + // Check for existing strings + while (env.code.indexOf('___' + language.toUpperCase() + i + '___') !== -1) + ++i; + + // Create a sparse array + env.tokenStack[i] = match; + + return '___' + language.toUpperCase() + i + '___'; + }); + + // Switch the grammar to markup + env.grammar = Prism.languages.markup; + } + }, + tokenizePlaceholders: { + // Replace placeholders with proper tokens after tokenizing + value: function (env, language) { + if (env.language !== language || !env.tokenStack) { + return; + } + + // Switch the grammar back + env.grammar = Prism.languages[language]; + + var j = 0; + var keys = Object.keys(env.tokenStack); + var walkTokens = function (tokens) { + if (j >= keys.length) { + return; + } + for (var i = 0; i < tokens.length; i++) { + var token = tokens[i]; + if (typeof token === 'string' || (token.content && typeof token.content === 'string')) { + var k = keys[j]; + var t = env.tokenStack[k]; + var s = typeof token === 'string' ? token : token.content; + + var index = s.indexOf('___' + language.toUpperCase() + k + '___'); + if (index > -1) { + ++j; + var before = s.substring(0, index); + var middle = new Prism.Token(language, Prism.tokenize(t, env.grammar, language), 'language-' + language, t); + var after = s.substring(index + ('___' + language.toUpperCase() + k + '___').length); + var replacement; + if (before || after) { + replacement = [before, middle, after].filter(function (v) { return !!v; }); + walkTokens(replacement); + } else { + replacement = middle; + } + if (typeof token === 'string') { + Array.prototype.splice.apply(tokens, [i, 1].concat(replacement)); + } else { + token.content = replacement; + } + + if (j >= keys.length) { + break; + } + } + } else if (token.content && typeof token.content !== 'string') { + walkTokens(token.content); + } + } + }; + + walkTokens(env.tokens); + } + } +}); Prism.languages.erlang = { 'comment': /%.+/, 'string': { @@ -1282,7 +1449,7 @@ Prism.languages.erlang = { 'number': [ /\$\\?./, /\d+#[a-z0-9]+/i, - /(?:\b|-)\d*\.?\d+([Ee][+-]?\d+)?\b/ + /(?:\b\d+\.?\d*|\B\.\d+)(?:e[+-]?\d+)?/i ], 'function': /\b[a-z][\w@]*(?=\()/, 'variable': { @@ -1312,7 +1479,7 @@ Prism.languages.go = Prism.languages.extend('clike', { 'builtin': /\b(?:bool|byte|complex(?:64|128)|error|float(?:32|64)|rune|string|u?int(?:8|16|32|64)?|uintptr|append|cap|close|complex|copy|delete|imag|len|make|new|panic|print(?:ln)?|real|recover)\b/, 'boolean': /\b(?:_|iota|nil|true|false)\b/, 'operator': /[*\/%^!=]=?|\+[=+]?|-[=-]?|\|[=|]?|&(?:=|&|\^=?)?|>(?:>=?|=)?|<(?:<=?|=|-)?|:=|\.\.\./, - 'number': /\b(-?(0x[a-f\d]+|(\d+\.?\d*|\.\d+)(e[-+]?\d+)?)i?)\b/i, + 'number': /(?:\b0x[a-f\d]+|(?:\b\d+\.?\d*|\B\.\d+)(?:e[-+]?\d+)?)i?/i, 'string': { pattern: /(["'`])(\\[\s\S]|(?!\1)[^\\])*\1/, greedy: true @@ -1322,7 +1489,7 @@ delete Prism.languages.go['class-name']; Prism.languages.java = Prism.languages.extend('clike', { 'keyword': /\b(?:abstract|continue|for|new|switch|assert|default|goto|package|synchronized|boolean|do|if|private|this|break|double|implements|protected|throw|byte|else|import|public|throws|case|enum|instanceof|return|transient|catch|extends|int|short|try|char|final|interface|static|void|class|finally|long|strictfp|volatile|const|float|native|super|while)\b/, - 'number': /\b0b[01]+\b|\b0x[\da-f]*\.?[\da-fp\-]+\b|\b\d*\.?\d+(?:e[+-]?\d+)?[df]?\b/i, + 'number': /\b0b[01]+\b|\b0x[\da-f]*\.?[\da-fp-]+\b|(?:\b\d+\.?\d*|\B\.\d+)(?:e[+-]?\d+)?[df]?/i, 'operator': { pattern: /(^|[^.])(?:\+[+=]?|-[-=]?|!=?|<>?>?=?|==?|&[&=]?|\|[|=]?|\*=?|\/=?|%=?|\^=?|[?:~])/m, lookbehind: true @@ -1337,14 +1504,25 @@ Prism.languages.insertBefore('java','function', { } }); +Prism.languages.insertBefore('java', 'class-name', { + 'generics': { + pattern: /<\s*\w+(?:\.\w+)?(?:\s*,\s*\w+(?:\.\w+)?)*>/i, + alias: 'function', + inside: { + keyword: Prism.languages.java.keyword, + punctuation: /[<>(),.:]/ + } + } +}); + Prism.languages.json = { 'property': /"(?:\\.|[^\\"\r\n])*"(?=\s*:)/i, 'string': { pattern: /"(?:\\.|[^\\"\r\n])*"(?!\s*:)/, greedy: true }, - 'number': /\b-?(?:0x[\dA-Fa-f]+|\d*\.?\d+(?:[Ee][+-]?\d+)?)\b/, - 'punctuation': /[{}[\]);,]/, + 'number': /-?\d+\.?\d*([Ee][+-]?\d+)?/, + 'punctuation': /[{}[\],]/, 'operator': /:/g, 'boolean': /\b(?:true|false)\b/i, 'null': /\bnull\b/i @@ -1356,7 +1534,7 @@ Prism.languages.jsonp = Prism.languages.json; Prism.languages.kotlin = Prism.languages.extend('clike', { 'keyword': { // The lookbehind prevents wrong highlighting of e.g. kotlin.properties.get - pattern: /(^|[^.])\b(?:abstract|annotation|as|break|by|catch|class|companion|const|constructor|continue|crossinline|data|do|else|enum|final|finally|for|fun|get|if|import|in|init|inline|inner|interface|internal|is|lateinit|noinline|null|object|open|out|override|package|private|protected|public|reified|return|sealed|set|super|tailrec|this|throw|to|try|val|var|when|where|while)\b/, + pattern: /(^|[^.])\b(?:abstract|actual|annotation|as|break|by|catch|class|companion|const|constructor|continue|crossinline|data|do|dynamic|else|enum|expect|external|final|finally|for|fun|get|if|import|in|infix|init|inline|inner|interface|internal|is|lateinit|noinline|null|object|open|operator|out|override|package|private|protected|public|reified|return|sealed|set|super|suspend|tailrec|this|throw|to|try|typealias|val|var|vararg|when|where|while)\b/, lookbehind: true }, 'function': [ @@ -1366,7 +1544,7 @@ Prism.languages.jsonp = Prism.languages.json; lookbehind: true } ], - 'number': /\b(?:0[bx][\da-fA-F]+|\d+(?:\.\d+)?(?:e[+-]?\d+)?[fFL]?)\b/, + 'number': /\b(?:0[xX][\da-fA-F]+(?:_[\da-fA-F]+)*|0[bB][01]+(?:_[01]+)*|\d+(?:_\d+)*(?:\.\d+(?:_\d+)*)?(?:[eE][+-]?\d+(?:_\d+)*)?[fFL]?)\b/, 'operator': /\+[+=]?|-[-=>]?|==?=?|!(?:!|==?)?|[\/*%<>]=?|[?:]:?|\.\.|&&|\|\||\b(?:and|inv|or|shl|shr|ushr|xor)\b/ }); @@ -1400,7 +1578,7 @@ Prism.languages.jsonp = Prism.languages.json; pattern: /^\$\{|\}$/, alias: 'variable' }, - rest: Prism.util.clone(Prism.languages.kotlin) + rest: Prism.languages.kotlin } }, { @@ -1414,6 +1592,7 @@ Prism.languages.jsonp = Prism.languages.json; }; }(Prism)); + Prism.languages.lua = { 'comment': /^#!.+|--(?:\[(=*)\[[\s\S]*?\]\1\]|.*)/m, // \z may be used to skip the following space @@ -1434,16 +1613,68 @@ Prism.languages.lua = { ], 'punctuation': /[\[\](){},;]|\.+|:+/ }; +(function(Prism) { + Prism.languages.crystal = Prism.languages.extend('ruby', { + keyword: [ + /\b(?:abstract|alias|as|asm|begin|break|case|class|def|do|else|elsif|end|ensure|enum|extend|for|fun|if|include|instance_sizeof|lib|macro|module|next|of|out|pointerof|private|protected|rescue|return|require|select|self|sizeof|struct|super|then|type|typeof|uninitialized|union|unless|until|when|while|with|yield|__DIR__|__END_LINE__|__FILE__|__LINE__)\b/, + { + pattern: /(\.\s*)(?:is_a|responds_to)\?/, + lookbehind: true + } + ], + + number: /\b(?:0b[01_]*[01]|0o[0-7_]*[0-7]|0x[\da-fA-F_]*[\da-fA-F]|(?:\d(?:[\d_]*\d)?)(?:\.[\d_]*\d)?(?:[eE][+-]?[\d_]*\d)?)(?:_(?:[uif](?:8|16|32|64))?)?\b/ + }); + + Prism.languages.insertBefore('crystal', 'string', { + attribute: { + pattern: /@\[.+?\]/, + alias: 'attr-name', + inside: { + delimiter: { + pattern: /^@\[|\]$/, + alias: 'tag' + }, + rest: Prism.languages.crystal + } + }, + + expansion: [ + { + pattern: /\{\{.+?\}\}/, + inside: { + delimiter: { + pattern: /^\{\{|\}\}$/, + alias: 'tag' + }, + rest: Prism.languages.crystal + } + }, + { + pattern: /\{%.+?%\}/, + inside: { + delimiter: { + pattern: /^\{%|%\}$/, + alias: 'tag' + }, + rest: Prism.languages.crystal + } + } + ] + }); + +}(Prism)); + Prism.languages.nginx = Prism.languages.extend('clike', { - 'comment': { - pattern: /(^|[^"{\\])#.*/, - lookbehind: true - }, - 'keyword': /\b(?:CONTENT_|DOCUMENT_|GATEWAY_|HTTP_|HTTPS|if_not_empty|PATH_|QUERY_|REDIRECT_|REMOTE_|REQUEST_|SCGI|SCRIPT_|SERVER_|http|events|accept_mutex|accept_mutex_delay|access_log|add_after_body|add_before_body|add_header|addition_types|aio|alias|allow|ancient_browser|ancient_browser_value|auth|auth_basic|auth_basic_user_file|auth_http|auth_http_header|auth_http_timeout|autoindex|autoindex_exact_size|autoindex_localtime|break|charset|charset_map|charset_types|chunked_transfer_encoding|client_body_buffer_size|client_body_in_file_only|client_body_in_single_buffer|client_body_temp_path|client_body_timeout|client_header_buffer_size|client_header_timeout|client_max_body_size|connection_pool_size|create_full_put_path|daemon|dav_access|dav_methods|debug_connection|debug_points|default_type|deny|devpoll_changes|devpoll_events|directio|directio_alignment|disable_symlinks|empty_gif|env|epoll_events|error_log|error_page|expires|fastcgi_buffer_size|fastcgi_buffers|fastcgi_busy_buffers_size|fastcgi_cache|fastcgi_cache_bypass|fastcgi_cache_key|fastcgi_cache_lock|fastcgi_cache_lock_timeout|fastcgi_cache_methods|fastcgi_cache_min_uses|fastcgi_cache_path|fastcgi_cache_purge|fastcgi_cache_use_stale|fastcgi_cache_valid|fastcgi_connect_timeout|fastcgi_hide_header|fastcgi_ignore_client_abort|fastcgi_ignore_headers|fastcgi_index|fastcgi_intercept_errors|fastcgi_keep_conn|fastcgi_max_temp_file_size|fastcgi_next_upstream|fastcgi_no_cache|fastcgi_param|fastcgi_pass|fastcgi_pass_header|fastcgi_read_timeout|fastcgi_redirect_errors|fastcgi_send_timeout|fastcgi_split_path_info|fastcgi_store|fastcgi_store_access|fastcgi_temp_file_write_size|fastcgi_temp_path|flv|geo|geoip_city|geoip_country|google_perftools_profiles|gzip|gzip_buffers|gzip_comp_level|gzip_disable|gzip_http_version|gzip_min_length|gzip_proxied|gzip_static|gzip_types|gzip_vary|if|if_modified_since|ignore_invalid_headers|image_filter|image_filter_buffer|image_filter_jpeg_quality|image_filter_sharpen|image_filter_transparency|imap_capabilities|imap_client_buffer|include|index|internal|ip_hash|keepalive|keepalive_disable|keepalive_requests|keepalive_timeout|kqueue_changes|kqueue_events|large_client_header_buffers|limit_conn|limit_conn_log_level|limit_conn_zone|limit_except|limit_rate|limit_rate_after|limit_req|limit_req_log_level|limit_req_zone|limit_zone|lingering_close|lingering_time|lingering_timeout|listen|location|lock_file|log_format|log_format_combined|log_not_found|log_subrequest|map|map_hash_bucket_size|map_hash_max_size|master_process|max_ranges|memcached_buffer_size|memcached_connect_timeout|memcached_next_upstream|memcached_pass|memcached_read_timeout|memcached_send_timeout|merge_slashes|min_delete_depth|modern_browser|modern_browser_value|mp4|mp4_buffer_size|mp4_max_buffer_size|msie_padding|msie_refresh|multi_accept|open_file_cache|open_file_cache_errors|open_file_cache_min_uses|open_file_cache_valid|open_log_file_cache|optimize_server_names|override_charset|pcre_jit|perl|perl_modules|perl_require|perl_set|pid|pop3_auth|pop3_capabilities|port_in_redirect|post_action|postpone_output|protocol|proxy|proxy_buffer|proxy_buffer_size|proxy_buffering|proxy_buffers|proxy_busy_buffers_size|proxy_cache|proxy_cache_bypass|proxy_cache_key|proxy_cache_lock|proxy_cache_lock_timeout|proxy_cache_methods|proxy_cache_min_uses|proxy_cache_path|proxy_cache_use_stale|proxy_cache_valid|proxy_connect_timeout|proxy_cookie_domain|proxy_cookie_path|proxy_headers_hash_bucket_size|proxy_headers_hash_max_size|proxy_hide_header|proxy_http_version|proxy_ignore_client_abort|proxy_ignore_headers|proxy_intercept_errors|proxy_max_temp_file_size|proxy_method|proxy_next_upstream|proxy_no_cache|proxy_pass|proxy_pass_error_message|proxy_pass_header|proxy_pass_request_body|proxy_pass_request_headers|proxy_read_timeout|proxy_redirect|proxy_redirect_errors|proxy_send_lowat|proxy_send_timeout|proxy_set_body|proxy_set_header|proxy_ssl_session_reuse|proxy_store|proxy_store_access|proxy_temp_file_write_size|proxy_temp_path|proxy_timeout|proxy_upstream_fail_timeout|proxy_upstream_max_fails|random_index|read_ahead|real_ip_header|recursive_error_pages|request_pool_size|reset_timedout_connection|resolver|resolver_timeout|return|rewrite|root|rtsig_overflow_events|rtsig_overflow_test|rtsig_overflow_threshold|rtsig_signo|satisfy|satisfy_any|secure_link_secret|send_lowat|send_timeout|sendfile|sendfile_max_chunk|server|server_name|server_name_in_redirect|server_names_hash_bucket_size|server_names_hash_max_size|server_tokens|set|set_real_ip_from|smtp_auth|smtp_capabilities|so_keepalive|source_charset|split_clients|ssi|ssi_silent_errors|ssi_types|ssi_value_length|ssl|ssl_certificate|ssl_certificate_key|ssl_ciphers|ssl_client_certificate|ssl_crl|ssl_dhparam|ssl_engine|ssl_prefer_server_ciphers|ssl_protocols|ssl_session_cache|ssl_session_timeout|ssl_verify_client|ssl_verify_depth|starttls|stub_status|sub_filter|sub_filter_once|sub_filter_types|tcp_nodelay|tcp_nopush|timeout|timer_resolution|try_files|types|types_hash_bucket_size|types_hash_max_size|underscores_in_headers|uninitialized_variable_warn|upstream|use|user|userid|userid_domain|userid_expires|userid_name|userid_p3p|userid_path|userid_service|valid_referers|variables_hash_bucket_size|variables_hash_max_size|worker_connections|worker_cpu_affinity|worker_priority|worker_processes|worker_rlimit_core|worker_rlimit_nofile|worker_rlimit_sigpending|working_directory|xclient|xml_entities|xslt_entities|xslt_stylesheet|xslt_types)\b/i + 'comment': { + pattern: /(^|[^"{\\])#.*/, + lookbehind: true + }, + 'keyword': /\b(?:CONTENT_|DOCUMENT_|GATEWAY_|HTTP_|HTTPS|if_not_empty|PATH_|QUERY_|REDIRECT_|REMOTE_|REQUEST_|SCGI|SCRIPT_|SERVER_|http|events|accept_mutex|accept_mutex_delay|access_log|add_after_body|add_before_body|add_header|addition_types|aio|alias|allow|ancient_browser|ancient_browser_value|auth|auth_basic|auth_basic_user_file|auth_http|auth_http_header|auth_http_timeout|autoindex|autoindex_exact_size|autoindex_localtime|break|charset|charset_map|charset_types|chunked_transfer_encoding|client_body_buffer_size|client_body_in_file_only|client_body_in_single_buffer|client_body_temp_path|client_body_timeout|client_header_buffer_size|client_header_timeout|client_max_body_size|connection_pool_size|create_full_put_path|daemon|dav_access|dav_methods|debug_connection|debug_points|default_type|deny|devpoll_changes|devpoll_events|directio|directio_alignment|disable_symlinks|empty_gif|env|epoll_events|error_log|error_page|expires|fastcgi_buffer_size|fastcgi_buffers|fastcgi_busy_buffers_size|fastcgi_cache|fastcgi_cache_bypass|fastcgi_cache_key|fastcgi_cache_lock|fastcgi_cache_lock_timeout|fastcgi_cache_methods|fastcgi_cache_min_uses|fastcgi_cache_path|fastcgi_cache_purge|fastcgi_cache_use_stale|fastcgi_cache_valid|fastcgi_connect_timeout|fastcgi_hide_header|fastcgi_ignore_client_abort|fastcgi_ignore_headers|fastcgi_index|fastcgi_intercept_errors|fastcgi_keep_conn|fastcgi_max_temp_file_size|fastcgi_next_upstream|fastcgi_no_cache|fastcgi_param|fastcgi_pass|fastcgi_pass_header|fastcgi_read_timeout|fastcgi_redirect_errors|fastcgi_send_timeout|fastcgi_split_path_info|fastcgi_store|fastcgi_store_access|fastcgi_temp_file_write_size|fastcgi_temp_path|flv|geo|geoip_city|geoip_country|google_perftools_profiles|gzip|gzip_buffers|gzip_comp_level|gzip_disable|gzip_http_version|gzip_min_length|gzip_proxied|gzip_static|gzip_types|gzip_vary|if|if_modified_since|ignore_invalid_headers|image_filter|image_filter_buffer|image_filter_jpeg_quality|image_filter_sharpen|image_filter_transparency|imap_capabilities|imap_client_buffer|include|index|internal|ip_hash|keepalive|keepalive_disable|keepalive_requests|keepalive_timeout|kqueue_changes|kqueue_events|large_client_header_buffers|limit_conn|limit_conn_log_level|limit_conn_zone|limit_except|limit_rate|limit_rate_after|limit_req|limit_req_log_level|limit_req_zone|limit_zone|lingering_close|lingering_time|lingering_timeout|listen|location|lock_file|log_format|log_format_combined|log_not_found|log_subrequest|map|map_hash_bucket_size|map_hash_max_size|master_process|max_ranges|memcached_buffer_size|memcached_connect_timeout|memcached_next_upstream|memcached_pass|memcached_read_timeout|memcached_send_timeout|merge_slashes|min_delete_depth|modern_browser|modern_browser_value|mp4|mp4_buffer_size|mp4_max_buffer_size|msie_padding|msie_refresh|multi_accept|open_file_cache|open_file_cache_errors|open_file_cache_min_uses|open_file_cache_valid|open_log_file_cache|optimize_server_names|override_charset|pcre_jit|perl|perl_modules|perl_require|perl_set|pid|pop3_auth|pop3_capabilities|port_in_redirect|post_action|postpone_output|protocol|proxy|proxy_buffer|proxy_buffer_size|proxy_buffering|proxy_buffers|proxy_busy_buffers_size|proxy_cache|proxy_cache_bypass|proxy_cache_key|proxy_cache_lock|proxy_cache_lock_timeout|proxy_cache_methods|proxy_cache_min_uses|proxy_cache_path|proxy_cache_use_stale|proxy_cache_valid|proxy_connect_timeout|proxy_cookie_domain|proxy_cookie_path|proxy_headers_hash_bucket_size|proxy_headers_hash_max_size|proxy_hide_header|proxy_http_version|proxy_ignore_client_abort|proxy_ignore_headers|proxy_intercept_errors|proxy_max_temp_file_size|proxy_method|proxy_next_upstream|proxy_no_cache|proxy_pass|proxy_pass_error_message|proxy_pass_header|proxy_pass_request_body|proxy_pass_request_headers|proxy_read_timeout|proxy_redirect|proxy_redirect_errors|proxy_send_lowat|proxy_send_timeout|proxy_set_body|proxy_set_header|proxy_ssl_session_reuse|proxy_store|proxy_store_access|proxy_temp_file_write_size|proxy_temp_path|proxy_timeout|proxy_upstream_fail_timeout|proxy_upstream_max_fails|random_index|read_ahead|real_ip_header|recursive_error_pages|request_pool_size|reset_timedout_connection|resolver|resolver_timeout|return|rewrite|root|rtsig_overflow_events|rtsig_overflow_test|rtsig_overflow_threshold|rtsig_signo|satisfy|satisfy_any|secure_link_secret|send_lowat|send_timeout|sendfile|sendfile_max_chunk|server|server_name|server_name_in_redirect|server_names_hash_bucket_size|server_names_hash_max_size|server_tokens|set|set_real_ip_from|smtp_auth|smtp_capabilities|so_keepalive|source_charset|split_clients|ssi|ssi_silent_errors|ssi_types|ssi_value_length|ssl|ssl_certificate|ssl_certificate_key|ssl_ciphers|ssl_client_certificate|ssl_crl|ssl_dhparam|ssl_engine|ssl_prefer_server_ciphers|ssl_protocols|ssl_session_cache|ssl_session_timeout|ssl_verify_client|ssl_verify_depth|starttls|stub_status|sub_filter|sub_filter_once|sub_filter_types|tcp_nodelay|tcp_nopush|timeout|timer_resolution|try_files|types|types_hash_bucket_size|types_hash_max_size|underscores_in_headers|uninitialized_variable_warn|upstream|use|user|userid|userid_domain|userid_expires|userid_name|userid_p3p|userid_path|userid_service|valid_referers|variables_hash_bucket_size|variables_hash_max_size|worker_connections|worker_cpu_affinity|worker_priority|worker_processes|worker_rlimit_core|worker_rlimit_nofile|worker_rlimit_sigpending|working_directory|xclient|xml_entities|xslt_entities|xslt_stylesheet|xslt_types)\b/i }); Prism.languages.insertBefore('nginx', 'keyword', { - 'variable': /\$[a-z_]+/i + 'variable': /\$[a-z_]+/i }); Prism.languages.nim = { 'comment': /#.*/, @@ -1497,31 +1728,31 @@ Prism.languages.perl = { pattern: /\b(?:q|qq|qx|qw)\s*([^a-zA-Z0-9\s{(\[<])(?:(?!\1)[^\\]|\\[\s\S])*\1/, greedy: true }, - + // q a...a { pattern: /\b(?:q|qq|qx|qw)\s+([a-zA-Z0-9])(?:(?!\1)[^\\]|\\[\s\S])*\1/, greedy: true }, - + // q(...) { pattern: /\b(?:q|qq|qx|qw)\s*\((?:[^()\\]|\\[\s\S])*\)/, greedy: true }, - + // q{...} { pattern: /\b(?:q|qq|qx|qw)\s*\{(?:[^{}\\]|\\[\s\S])*\}/, greedy: true }, - + // q[...] { pattern: /\b(?:q|qq|qx|qw)\s*\[(?:[^[\]\\]|\\[\s\S])*\]/, greedy: true }, - + // q<...> { pattern: /\b(?:q|qq|qx|qw)\s*<(?:[^<>\\]|\\[\s\S])*>/, @@ -1547,31 +1778,31 @@ Prism.languages.perl = { pattern: /\b(?:m|qr)\s*([^a-zA-Z0-9\s{(\[<])(?:(?!\1)[^\\]|\\[\s\S])*\1[msixpodualngc]*/, greedy: true }, - + // m a...a { pattern: /\b(?:m|qr)\s+([a-zA-Z0-9])(?:(?!\1)[^\\]|\\[\s\S])*\1[msixpodualngc]*/, greedy: true }, - + // m(...) { pattern: /\b(?:m|qr)\s*\((?:[^()\\]|\\[\s\S])*\)[msixpodualngc]*/, greedy: true }, - + // m{...} { pattern: /\b(?:m|qr)\s*\{(?:[^{}\\]|\\[\s\S])*\}[msixpodualngc]*/, greedy: true }, - + // m[...] { pattern: /\b(?:m|qr)\s*\[(?:[^[\]\\]|\\[\s\S])*\][msixpodualngc]*/, greedy: true }, - + // m<...> { pattern: /\b(?:m|qr)\s*<(?:[^<>\\]|\\[\s\S])*>[msixpodualngc]*/, @@ -1586,42 +1817,42 @@ Prism.languages.perl = { lookbehind: true, greedy: true }, - + // s a...a...a { pattern: /(^|[^-]\b)(?:s|tr|y)\s+([a-zA-Z0-9])(?:(?!\2)[^\\]|\\[\s\S])*\2(?:(?!\2)[^\\]|\\[\s\S])*\2[msixpodualngcer]*/, lookbehind: true, greedy: true }, - + // s(...)(...) { pattern: /(^|[^-]\b)(?:s|tr|y)\s*\((?:[^()\\]|\\[\s\S])*\)\s*\((?:[^()\\]|\\[\s\S])*\)[msixpodualngcer]*/, lookbehind: true, greedy: true }, - + // s{...}{...} { pattern: /(^|[^-]\b)(?:s|tr|y)\s*\{(?:[^{}\\]|\\[\s\S])*\}\s*\{(?:[^{}\\]|\\[\s\S])*\}[msixpodualngcer]*/, lookbehind: true, greedy: true }, - + // s[...][...] { pattern: /(^|[^-]\b)(?:s|tr|y)\s*\[(?:[^[\]\\]|\\[\s\S])*\]\s*\[(?:[^[\]\\]|\\[\s\S])*\][msixpodualngcer]*/, lookbehind: true, greedy: true }, - + // s<...><...> { pattern: /(^|[^-]\b)(?:s|tr|y)\s*<(?:[^<>\\]|\\[\s\S])*>\s*<(?:[^<>\\]|\\[\s\S])*>[msixpodualngcer]*/, lookbehind: true, greedy: true }, - + // /.../ // The look-ahead tries to prevent two divisions on // the same line from being highlighted as regex. @@ -1665,7 +1896,7 @@ Prism.languages.perl = { } }, 'keyword': /\b(?:any|break|continue|default|delete|die|do|else|elsif|eval|for|foreach|given|goto|if|last|local|my|next|our|package|print|redo|require|say|state|sub|switch|undef|unless|until|use|when|while)\b/, - 'number': /\b-?(?:0x[\dA-Fa-f](?:_?[\dA-Fa-f])*|0b[01](?:_?[01])*|(?:\d(?:_?\d)*)?\.?\d(?:_?\d)*(?:[Ee][+-]?\d+)?)\b/, + 'number': /\b(?:0x[\dA-Fa-f](?:_?[\dA-Fa-f])*|0b[01](?:_?[01])*|(?:\d(?:_?\d)*)?\.?\d(?:_?\d)*(?:[Ee][+-]?\d+)?)\b/, 'operator': /-[rwxoRWXOezsfdlpSbctugkTBMAC]\b|\+[+=]?|-[-=>]?|\*\*?=?|\/\/?=?|=[=~>]?|~[~=]?|\|\|?=?|&&?=?|<(?:=>?|<=?)?|>>?=?|![~=]?|[%^]=?|\.(?:=|\.\.?)?|[\\?]|\bx(?:=|\b)|\b(?:lt|gt|le|ge|eq|ne|cmp|not|and|or|xor)\b/, 'punctuation': /[{}[\];(),:]/ }; @@ -1682,110 +1913,211 @@ Prism.languages.perl = { * Adds the following new token classes: * constant, delimiter, variable, function, package */ +(function (Prism) { + Prism.languages.php = Prism.languages.extend('clike', { + 'keyword': /\b(?:and|or|xor|array|as|break|case|cfunction|class|const|continue|declare|default|die|do|else|elseif|enddeclare|endfor|endforeach|endif|endswitch|endwhile|extends|for|foreach|function|include|include_once|global|if|new|return|static|switch|use|require|require_once|var|while|abstract|interface|public|implements|private|protected|parent|throw|null|echo|print|trait|namespace|final|yield|goto|instanceof|finally|try|catch)\b/i, + 'constant': /\b[A-Z0-9_]{2,}\b/, + 'comment': { + pattern: /(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/, + lookbehind: true + } + }); -Prism.languages.php = Prism.languages.extend('clike', { - 'keyword': /\b(?:and|or|xor|array|as|break|case|cfunction|class|const|continue|declare|default|die|do|else|elseif|enddeclare|endfor|endforeach|endif|endswitch|endwhile|extends|for|foreach|function|include|include_once|global|if|new|return|static|switch|use|require|require_once|var|while|abstract|interface|public|implements|private|protected|parent|throw|null|echo|print|trait|namespace|final|yield|goto|instanceof|finally|try|catch)\b/i, - 'constant': /\b[A-Z0-9_]{2,}\b/, - 'comment': { - pattern: /(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/, - lookbehind: true - } -}); + Prism.languages.insertBefore('php', 'string', { + 'shell-comment': { + pattern: /(^|[^\\])#.*/, + lookbehind: true, + alias: 'comment' + } + }); -// Shell-like comments are matched after strings, because they are less -// common than strings containing hashes... -Prism.languages.insertBefore('php', 'class-name', { - 'shell-comment': { - pattern: /(^|[^\\])#.*/, - lookbehind: true, - alias: 'comment' - } -}); + Prism.languages.insertBefore('php', 'keyword', { + 'delimiter': { + pattern: /\?>|<\?(?:php|=)?/i, + alias: 'important' + }, + 'variable': /\$+(?:\w+\b|(?={))/i, + 'package': { + pattern: /(\\|namespace\s+|use\s+)[\w\\]+/, + lookbehind: true, + inside: { + punctuation: /\\/ + } + } + }); -Prism.languages.insertBefore('php', 'keyword', { - 'delimiter': { - pattern: /\?>|<\?(?:php|=)?/i, - alias: 'important' - }, - 'variable': /\$\w+\b/i, - 'package': { - pattern: /(\\|namespace\s+|use\s+)[\w\\]+/, - lookbehind: true, - inside: { - punctuation: /\\/ + // Must be defined after the function pattern + Prism.languages.insertBefore('php', 'operator', { + 'property': { + pattern: /(->)[\w]+/, + lookbehind: true } - } -}); + }); -// Must be defined after the function pattern -Prism.languages.insertBefore('php', 'operator', { - 'property': { - pattern: /(->)[\w]+/, - lookbehind: true - } -}); + Prism.languages.insertBefore('php', 'string', { + 'nowdoc-string': { + pattern: /<<<'([^']+)'(?:\r\n?|\n)(?:.*(?:\r\n?|\n))*?\1;/, + greedy: true, + alias: 'string', + inside: { + 'delimiter': { + pattern: /^<<<'[^']+'|[a-z_]\w*;$/i, + alias: 'symbol', + inside: { + 'punctuation': /^<<<'?|[';]$/ + } + } + } + }, + 'heredoc-string': { + pattern: /<<<(?:"([^"]+)"(?:\r\n?|\n)(?:.*(?:\r\n?|\n))*?\1;|([a-z_]\w*)(?:\r\n?|\n)(?:.*(?:\r\n?|\n))*?\2;)/i, + greedy: true, + alias: 'string', + inside: { + 'delimiter': { + pattern: /^<<<(?:"[^"]+"|[a-z_]\w*)|[a-z_]\w*;$/i, + alias: 'symbol', + inside: { + 'punctuation': /^<<<"?|[";]$/ + } + }, + 'interpolation': null // See below + } + }, + 'single-quoted-string': { + pattern: /'(?:\\[\s\S]|[^\\'])*'/, + greedy: true, + alias: 'string' + }, + 'double-quoted-string': { + pattern: /"(?:\\[\s\S]|[^\\"])*"/, + greedy: true, + alias: 'string', + inside: { + 'interpolation': null // See below + } + } + }); + // The different types of PHP strings "replace" the C-like standard string + delete Prism.languages.php['string']; -// Add HTML support if the markup language exists -if (Prism.languages.markup) { + var string_interpolation = { + pattern: /{\$(?:{(?:{[^{}]+}|[^{}]+)}|[^{}])+}|(^|[^\\{])\$+(?:\w+(?:\[.+?]|->\w+)*)/, + lookbehind: true, + inside: { + rest: Prism.languages.php + } + }; + Prism.languages.php['heredoc-string'].inside['interpolation'] = string_interpolation; + Prism.languages.php['double-quoted-string'].inside['interpolation'] = string_interpolation; - // Tokenize all inline PHP blocks that are wrapped in - // This allows for easy PHP + markup highlighting - Prism.hooks.add('before-highlight', function(env) { - if (env.language !== 'php' || !/(?:<\?php|<\?)/ig.test(env.code)) { + Prism.hooks.add('before-tokenize', function(env) { + if (!/(?:<\?php|<\?)/ig.test(env.code)) { return; } - env.tokenStack = []; - - env.backupCode = env.code; - env.code = env.code.replace(/(?:<\?php|<\?)[\s\S]*?(?:\?>|$)/ig, function(match) { - var i = env.tokenStack.length; - // Check for existing strings - while (env.backupCode.indexOf('___PHP' + i + '___') !== -1) - ++i; - - // Create a sparse array - env.tokenStack[i] = match; - - return '___PHP' + i + '___'; - }); + var phpPattern = /(?:<\?php|<\?)[\s\S]*?(?:\?>|$)/ig; + Prism.languages['markup-templating'].buildPlaceholders(env, 'php', phpPattern); + }); - // Switch the grammar to markup - env.grammar = Prism.languages.markup; + Prism.hooks.add('after-tokenize', function(env) { + Prism.languages['markup-templating'].tokenizePlaceholders(env, 'php'); }); - // Restore env.code for other plugins (e.g. line-numbers) - Prism.hooks.add('before-insert', function(env) { - if (env.language === 'php' && env.backupCode) { - env.code = env.backupCode; - delete env.backupCode; +}(Prism)); +Prism.languages.sql= { + 'comment': { + pattern: /(^|[^\\])(?:\/\*[\s\S]*?\*\/|(?:--|\/\/|#).*)/, + lookbehind: true + }, + 'string' : { + pattern: /(^|[^@\\])("|')(?:\\[\s\S]|(?!\2)[^\\])*\2/, + greedy: true, + lookbehind: true + }, + 'variable': /@[\w.$]+|@(["'`])(?:\\[\s\S]|(?!\1)[^\\])+\1/, + 'function': /\b(?:AVG|COUNT|FIRST|FORMAT|LAST|LCASE|LEN|MAX|MID|MIN|MOD|NOW|ROUND|SUM|UCASE)(?=\s*\()/i, // Should we highlight user defined functions too? + 'keyword': /\b(?:ACTION|ADD|AFTER|ALGORITHM|ALL|ALTER|ANALYZE|ANY|APPLY|AS|ASC|AUTHORIZATION|AUTO_INCREMENT|BACKUP|BDB|BEGIN|BERKELEYDB|BIGINT|BINARY|BIT|BLOB|BOOL|BOOLEAN|BREAK|BROWSE|BTREE|BULK|BY|CALL|CASCADED?|CASE|CHAIN|CHAR(?:ACTER|SET)?|CHECK(?:POINT)?|CLOSE|CLUSTERED|COALESCE|COLLATE|COLUMNS?|COMMENT|COMMIT(?:TED)?|COMPUTE|CONNECT|CONSISTENT|CONSTRAINT|CONTAINS(?:TABLE)?|CONTINUE|CONVERT|CREATE|CROSS|CURRENT(?:_DATE|_TIME|_TIMESTAMP|_USER)?|CURSOR|CYCLE|DATA(?:BASES?)?|DATE(?:TIME)?|DAY|DBCC|DEALLOCATE|DEC|DECIMAL|DECLARE|DEFAULT|DEFINER|DELAYED|DELETE|DELIMITERS?|DENY|DESC|DESCRIBE|DETERMINISTIC|DISABLE|DISCARD|DISK|DISTINCT|DISTINCTROW|DISTRIBUTED|DO|DOUBLE|DROP|DUMMY|DUMP(?:FILE)?|DUPLICATE|ELSE(?:IF)?|ENABLE|ENCLOSED|END|ENGINE|ENUM|ERRLVL|ERRORS|ESCAPED?|EXCEPT|EXEC(?:UTE)?|EXISTS|EXIT|EXPLAIN|EXTENDED|FETCH|FIELDS|FILE|FILLFACTOR|FIRST|FIXED|FLOAT|FOLLOWING|FOR(?: EACH ROW)?|FORCE|FOREIGN|FREETEXT(?:TABLE)?|FROM|FULL|FUNCTION|GEOMETRY(?:COLLECTION)?|GLOBAL|GOTO|GRANT|GROUP|HANDLER|HASH|HAVING|HOLDLOCK|HOUR|IDENTITY(?:_INSERT|COL)?|IF|IGNORE|IMPORT|INDEX|INFILE|INNER|INNODB|INOUT|INSERT|INT|INTEGER|INTERSECT|INTERVAL|INTO|INVOKER|ISOLATION|ITERATE|JOIN|KEYS?|KILL|LANGUAGE|LAST|LEAVE|LEFT|LEVEL|LIMIT|LINENO|LINES|LINESTRING|LOAD|LOCAL|LOCK|LONG(?:BLOB|TEXT)|LOOP|MATCH(?:ED)?|MEDIUM(?:BLOB|INT|TEXT)|MERGE|MIDDLEINT|MINUTE|MODE|MODIFIES|MODIFY|MONTH|MULTI(?:LINESTRING|POINT|POLYGON)|NATIONAL|NATURAL|NCHAR|NEXT|NO|NONCLUSTERED|NULLIF|NUMERIC|OFF?|OFFSETS?|ON|OPEN(?:DATASOURCE|QUERY|ROWSET)?|OPTIMIZE|OPTION(?:ALLY)?|ORDER|OUT(?:ER|FILE)?|OVER|PARTIAL|PARTITION|PERCENT|PIVOT|PLAN|POINT|POLYGON|PRECEDING|PRECISION|PREPARE|PREV|PRIMARY|PRINT|PRIVILEGES|PROC(?:EDURE)?|PUBLIC|PURGE|QUICK|RAISERROR|READS?|REAL|RECONFIGURE|REFERENCES|RELEASE|RENAME|REPEAT(?:ABLE)?|REPLACE|REPLICATION|REQUIRE|RESIGNAL|RESTORE|RESTRICT|RETURNS?|REVOKE|RIGHT|ROLLBACK|ROUTINE|ROW(?:COUNT|GUIDCOL|S)?|RTREE|RULE|SAVE(?:POINT)?|SCHEMA|SECOND|SELECT|SERIAL(?:IZABLE)?|SESSION(?:_USER)?|SET(?:USER)?|SHARE|SHOW|SHUTDOWN|SIMPLE|SMALLINT|SNAPSHOT|SOME|SONAME|SQL|START(?:ING)?|STATISTICS|STATUS|STRIPED|SYSTEM_USER|TABLES?|TABLESPACE|TEMP(?:ORARY|TABLE)?|TERMINATED|TEXT(?:SIZE)?|THEN|TIME(?:STAMP)?|TINY(?:BLOB|INT|TEXT)|TOP?|TRAN(?:SACTIONS?)?|TRIGGER|TRUNCATE|TSEQUAL|TYPES?|UNBOUNDED|UNCOMMITTED|UNDEFINED|UNION|UNIQUE|UNLOCK|UNPIVOT|UNSIGNED|UPDATE(?:TEXT)?|USAGE|USE|USER|USING|VALUES?|VAR(?:BINARY|CHAR|CHARACTER|YING)|VIEW|WAITFOR|WARNINGS|WHEN|WHERE|WHILE|WITH(?: ROLLUP|IN)?|WORK|WRITE(?:TEXT)?|YEAR)\b/i, + 'boolean': /\b(?:TRUE|FALSE|NULL)\b/i, + 'number': /\b0x[\da-f]+\b|\b\d+\.?\d*|\B\.\d+\b/i, + 'operator': /[-+*\/=%^~]|&&?|\|\|?|!=?|<(?:=>?|<|>)?|>[>=]?|\b(?:AND|BETWEEN|IN|LIKE|NOT|OR|IS|DIV|REGEXP|RLIKE|SOUNDS LIKE|XOR)\b/i, + 'punctuation': /[;[\]()`,.]/ +}; +Prism.languages.scss = Prism.languages.extend('css', { + 'comment': { + pattern: /(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/, + lookbehind: true + }, + 'atrule': { + pattern: /@[\w-]+(?:\([^()]+\)|[^(])*?(?=\s+[{;])/, + inside: { + 'rule': /@[\w-]+/ + // See rest below } - }); + }, + // url, compassified + 'url': /(?:[-a-z]+-)*url(?=\()/i, + // CSS selector regex is not appropriate for Sass + // since there can be lot more things (var, @ directive, nesting..) + // a selector must start at the end of a property or after a brace (end of other rules or nesting) + // it can contain some characters that aren't used for defining rules or end of selector, & (parent selector), or interpolated variable + // the end of a selector is found when there is no rules in it ( {} or {\s}) or if there is a property (because an interpolated var + // can "pass" as a selector- e.g: proper#{$erty}) + // this one was hard to do, so please be careful if you edit this one :) + 'selector': { + // Initial look-ahead is used to prevent matching of blank selectors + pattern: /(?=\S)[^@;{}()]?(?:[^@;{}()]|&|#\{\$[-\w]+\})+(?=\s*\{(?:\}|\s|[^}]+[:{][^}]+))/m, + inside: { + 'parent': { + pattern: /&/, + alias: 'important' + }, + 'placeholder': /%[-\w]+/, + 'variable': /\$[-\w]+|#\{\$[-\w]+\}/ + } + } +}); - // Re-insert the tokens after highlighting - Prism.hooks.add('after-highlight', function(env) { - if (env.language !== 'php' || !env.tokenStack) { - return; +Prism.languages.insertBefore('scss', 'atrule', { + 'keyword': [ + /@(?:if|else(?: if)?|for|each|while|import|extend|debug|warn|mixin|include|function|return|content)/i, + { + pattern: /( +)(?:from|through)(?= )/, + lookbehind: true } + ] +}); - // Switch the grammar back - env.grammar = Prism.languages.php; +Prism.languages.scss.property = { + pattern: /(?:[\w-]|\$[-\w]+|#\{\$[-\w]+\})+(?=\s*:)/i, + inside: { + 'variable': /\$[-\w]+|#\{\$[-\w]+\}/ + } +}; - for (var i = 0, keys = Object.keys(env.tokenStack); i < keys.length; ++i) { - var k = keys[i]; - var t = env.tokenStack[k]; +Prism.languages.insertBefore('scss', 'important', { + // var and interpolated vars + 'variable': /\$[-\w]+|#\{\$[-\w]+\}/ +}); - // The replace prevents $$, $&, $`, $', $n, $nn from being interpreted as special patterns - env.highlightedCode = env.highlightedCode.replace('___PHP' + k + '___', - "" + - Prism.highlight(t, env.grammar, 'php').replace(/\$/g, '$$$$') + - ""); - } +Prism.languages.insertBefore('scss', 'function', { + 'placeholder': { + pattern: /%[-\w]+/, + alias: 'selector' + }, + 'statement': { + pattern: /\B!(?:default|optional)\b/i, + alias: 'keyword' + }, + 'boolean': /\b(?:true|false)\b/, + 'null': /\bnull\b/, + 'operator': { + pattern: /(\s)(?:[-+*\/%]|[=!]=|<=?|>=?|and|or|not)(?=\s)/, + lookbehind: true + } +}); - env.element.innerHTML = env.highlightedCode; - }); -} -; +Prism.languages.scss['atrule'].inside.rest = Prism.languages.scss; Prism.languages.python = { 'comment': { pattern: /(^|[^\\])#.*/, @@ -1811,7 +2143,7 @@ Prism.languages.python = { 'keyword': /\b(?:as|assert|async|await|break|class|continue|def|del|elif|else|except|exec|finally|for|from|global|if|import|in|is|lambda|nonlocal|pass|print|raise|return|try|while|with|yield)\b/, 'builtin':/\b(?:__import__|abs|all|any|apply|ascii|basestring|bin|bool|buffer|bytearray|bytes|callable|chr|classmethod|cmp|coerce|compile|complex|delattr|dict|dir|divmod|enumerate|eval|execfile|file|filter|float|format|frozenset|getattr|globals|hasattr|hash|help|hex|id|input|int|intern|isinstance|issubclass|iter|len|list|locals|long|map|max|memoryview|min|next|object|oct|open|ord|pow|property|range|raw_input|reduce|reload|repr|reversed|round|set|setattr|slice|sorted|staticmethod|str|sum|super|tuple|type|unichr|unicode|vars|xrange|zip)\b/, 'boolean': /\b(?:True|False|None)\b/, - 'number': /\b-?(?:0[bo])?(?:(?:\d|0x[\da-f])[\da-f]*\.?\d*|\.\d+)(?:e[+-]?\d+)?j?\b/i, + 'number': /(?:\b(?=\d)|\B(?=\.))(?:0[bo])?(?:(?:\d|0x[\da-f])[\da-f]*\.?\d*|\.\d+)(?:e[+-]?\d+)?j?\b/i, 'operator': /[-+%=]=?|!=|\*\*?=?|\/\/?=?|<[<=>]?|>[=>]?|[&|^~]|\b(?:or|and|not)\b/, 'punctuation': /[{}[\];(),.:]/ }; @@ -1821,93 +2153,134 @@ Prism.languages.python = { var javascript = Prism.util.clone(Prism.languages.javascript); Prism.languages.jsx = Prism.languages.extend('markup', javascript); -Prism.languages.jsx.tag.pattern= /<\/?[\w.:-]+\s*(?:\s+(?:[\w\.:-]+(?:=(?:("|')(?:\\[\s\S]|(?!\1)[^\\])*\1|[^\s'">=]+|(?:\{[^}]*\})))?|\{\.{3}\w+\}))*\s*\/?>/i; +Prism.languages.jsx.tag.pattern= /<\/?(?:[\w.:-]+\s*(?:\s+(?:[\w.:-]+(?:=(?:("|')(?:\\[\s\S]|(?!\1)[^\\])*\1|[^\s{'">=]+|\{(?:\{(?:\{[^}]*\}|[^{}])*\}|[^{}])+\}))?|\{\.{3}[a-z_$][\w$]*(?:\.[a-z_$][\w$]*)*\}))*\s*\/?)?>/i; +Prism.languages.jsx.tag.inside['tag'].pattern = /^<\/?[^\s>\/]*/i; Prism.languages.jsx.tag.inside['attr-value'].pattern = /=(?!\{)(?:("|')(?:\\[\s\S]|(?!\1)[^\\])*\1|[^\s'">]+)/i; Prism.languages.insertBefore('inside', 'attr-name', { 'spread': { - pattern: /\{\.{3}\w+\}/, + pattern: /\{\.{3}[a-z_$][\w$]*(?:\.[a-z_$][\w$]*)*\}/, inside: { - 'punctuation': /[{}]|\.{3}/, + 'punctuation': /\.{3}|[{}.]/, 'attr-value': /\w+/ } } }, Prism.languages.jsx.tag); -var jsxExpression = Prism.util.clone(Prism.languages.jsx); - -delete jsxExpression.punctuation; - -jsxExpression = Prism.languages.insertBefore('jsx', 'operator', { - 'punctuation': /=(?={)|[{}[\];(),.:]/ -}, { jsx: jsxExpression }); - Prism.languages.insertBefore('inside', 'attr-value',{ 'script': { - // Allow for one level of nesting - pattern: /=(\{(?:\{[^}]*\}|[^}])+\})/i, - inside: jsxExpression, + // Allow for two levels of nesting + pattern: /=(\{(?:\{(?:\{[^}]*\}|[^}])*\}|[^}])+\})/i, + inside: { + 'script-punctuation': { + pattern: /^=(?={)/, + alias: 'punctuation' + }, + rest: Prism.languages.jsx + }, 'alias': 'language-javascript' } }, Prism.languages.jsx.tag); -}(Prism)); +// The following will handle plain text inside tags +var stringifyToken = function (token) { + if (!token) { + return ''; + } + if (typeof token === 'string') { + return token; + } + if (typeof token.content === 'string') { + return token.content; + } + return token.content.map(stringifyToken).join(''); +}; -(function(Prism) { - Prism.languages.crystal = Prism.languages.extend('ruby', { - keyword: [ - /\b(?:abstract|alias|as|asm|begin|break|case|class|def|do|else|elsif|end|ensure|enum|extend|for|fun|if|include|instance_sizeof|lib|macro|module|next|of|out|pointerof|private|protected|rescue|return|require|select|self|sizeof|struct|super|then|type|typeof|uninitialized|union|unless|until|when|while|with|yield|__DIR__|__END_LINE__|__FILE__|__LINE__)\b/, - { - pattern: /(\.\s*)(?:is_a|responds_to)\?/, - lookbehind: true - } - ], +var walkTokens = function (tokens) { + var openedTags = []; + for (var i = 0; i < tokens.length; i++) { + var token = tokens[i]; + var notTagNorBrace = false; + + if (typeof token !== 'string') { + if (token.type === 'tag' && token.content[0] && token.content[0].type === 'tag') { + // We found a tag, now find its kind + + if (token.content[0].content[0].content === ' 0 && openedTags[openedTags.length - 1].tagName === stringifyToken(token.content[0].content[1])) { + // Pop matching opening tag + openedTags.pop(); + } + } else { + if (token.content[token.content.length - 1].content === '/>') { + // Autoclosed tag, ignore + } else { + // Opening tag + openedTags.push({ + tagName: stringifyToken(token.content[0].content[1]), + openedBraces: 0 + }); + } + } + } else if (openedTags.length > 0 && token.type === 'punctuation' && token.content === '{') { - number: /\b(?:0b[01_]*[01]|0o[0-7_]*[0-7]|0x[0-9a-fA-F_]*[0-9a-fA-F]|(?:\d(?:[0-9_]*\d)?)(?:\.[0-9_]*\d)?(?:[eE][+-]?[0-9_]*\d)?)(?:_(?:[uif](?:8|16|32|64))?)?\b/ - }); + // Here we might have entered a JSX context inside a tag + openedTags[openedTags.length - 1].openedBraces++; - var rest = Prism.util.clone(Prism.languages.crystal); + } else if (openedTags.length > 0 && openedTags[openedTags.length - 1].openedBraces > 0 && token.type === 'punctuation' && token.content === '}') { - Prism.languages.insertBefore('crystal', 'string', { - attribute: { - pattern: /@\[.+?\]/, - alias: 'attr-name', - inside: { - delimiter: { - pattern: /^@\[|\]$/, - alias: 'tag' - }, - rest: rest - } - }, + // Here we might have left a JSX context inside a tag + openedTags[openedTags.length - 1].openedBraces--; - expansion: [ - { - pattern: /\{\{.+?\}\}/, - inside: { - delimiter: { - pattern: /^\{\{|\}\}$/, - alias: 'tag' - }, - rest: rest + } else { + notTagNorBrace = true } - }, - { - pattern: /\{%.+?%\}/, - inside: { - delimiter: { - pattern: /^\{%|%\}$/, - alias: 'tag' - }, - rest: rest + } + if (notTagNorBrace || typeof token === 'string') { + if (openedTags.length > 0 && openedTags[openedTags.length - 1].openedBraces === 0) { + // Here we are inside a tag, and not inside a JSX context. + // That's plain text: drop any tokens matched. + var plainText = stringifyToken(token); + + // And merge text with adjacent text + if (i < tokens.length - 1 && (typeof tokens[i + 1] === 'string' || tokens[i + 1].type === 'plain-text')) { + plainText += stringifyToken(tokens[i + 1]); + tokens.splice(i + 1, 1); + } + if (i > 0 && (typeof tokens[i - 1] === 'string' || tokens[i - 1].type === 'plain-text')) { + plainText = stringifyToken(tokens[i - 1]) + plainText; + tokens.splice(i - 1, 1); + i--; + } + + tokens[i] = new Prism.Token('plain-text', plainText, null, plainText); } } - ] - }); + + if (token.content && typeof token.content !== 'string') { + walkTokens(token.content); + } + } +}; + +Prism.hooks.add('after-tokenize', function (env) { + if (env.language !== 'jsx' && env.language !== 'tsx') { + return; + } + walkTokens(env.tokens); +}); }(Prism)); +Prism.languages.typescript = Prism.languages.extend('javascript', { + // From JavaScript Prism keyword list and TypeScript language spec: https://github.com/Microsoft/TypeScript/blob/master/doc/spec.md#221-reserved-words + 'keyword': /\b(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|var|void|while|with|yield|module|declare|constructor|namespace|abstract|require|type)\b/, + 'builtin': /\b(?:string|Function|any|number|boolean|Array|symbol|console)\b/, +}); + +Prism.languages.ts = Prism.languages.typescript; /* TODO Add support for Markdown notation inside doc comments Add support for nested block comments... @@ -1932,10 +2305,18 @@ Prism.languages.rust = { greedy: true }, { - pattern: /b?("|')(?:\\.|(?!\1)[^\\\r\n])*\1/, + pattern: /b?"(?:\\.|[^\\\r\n"])*"/, greedy: true } ], + 'char': { + pattern: /b?'(?:\\(?:x[0-7][\da-fA-F]|u{(?:[\da-fA-F]_*){1,6}|.)|[^\\\r\n\t'])'/, + alias: 'string' + }, + 'lifetime-annotation': { + pattern: /'[^\s>']+/, + alias: 'symbol' + }, 'keyword': /\b(?:abstract|alignof|as|be|box|break|const|continue|crate|do|else|enum|extern|false|final|fn|for|if|impl|in|let|loop|match|mod|move|mut|offsetof|once|override|priv|pub|pure|ref|return|sizeof|static|self|struct|super|true|trait|type|typeof|unsafe|unsized|use|virtual|where|while|yield)\b/, 'attribute': { @@ -1955,7 +2336,7 @@ Prism.languages.rust = { }, // Hex, oct, bin, dec numbers with visual separators and type suffix - 'number': /\b-?(?:0x[\dA-Fa-f](?:_?[\dA-Fa-f])*|0o[0-7](?:_?[0-7])*|0b[01](?:_?[01])*|(\d(?:_?\d)*)?\.?\d(?:_?\d)*(?:[Ee][+-]?\d+)?)(?:_?(?:[iu](?:8|16|32|64)?|f32|f64))?\b/, + 'number': /\b(?:0x[\dA-Fa-f](?:_?[\dA-Fa-f])*|0o[0-7](?:_?[0-7])*|0b[01](?:_?[01])*|(\d(?:_?\d)*)?\.?\d(?:_?\d)*(?:[Ee][+-]?\d+)?)(?:_?(?:[iu](?:8|16|32|64)?|f32|f64))?\b/, // Closure params should not be confused with bitwise OR | 'closure-params': { @@ -1966,107 +2347,8 @@ Prism.languages.rust = { } }, 'punctuation': /[{}[\];(),:]|\.+|->/, - 'operator': /[-+*\/%!^=]=?|@|&[&=]?|\|[|=]?|<>?=?/ + 'operator': /[-+*\/%!^]=?|=[=>]?|@|&[&=]?|\|[|=]?|<>?=?/ }; -Prism.languages.scss = Prism.languages.extend('css', { - 'comment': { - pattern: /(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/, - lookbehind: true - }, - 'atrule': { - pattern: /@[\w-]+(?:\([^()]+\)|[^(])*?(?=\s+[{;])/, - inside: { - 'rule': /@[\w-]+/ - // See rest below - } - }, - // url, compassified - 'url': /(?:[-a-z]+-)*url(?=\()/i, - // CSS selector regex is not appropriate for Sass - // since there can be lot more things (var, @ directive, nesting..) - // a selector must start at the end of a property or after a brace (end of other rules or nesting) - // it can contain some characters that aren't used for defining rules or end of selector, & (parent selector), or interpolated variable - // the end of a selector is found when there is no rules in it ( {} or {\s}) or if there is a property (because an interpolated var - // can "pass" as a selector- e.g: proper#{$erty}) - // this one was hard to do, so please be careful if you edit this one :) - 'selector': { - // Initial look-ahead is used to prevent matching of blank selectors - pattern: /(?=\S)[^@;{}()]?(?:[^@;{}()]|&|#\{\$[-\w]+\})+(?=\s*\{(?:\}|\s|[^}]+[:{][^}]+))/m, - inside: { - 'parent': { - pattern: /&/, - alias: 'important' - }, - 'placeholder': /%[-\w]+/, - 'variable': /\$[-\w]+|#\{\$[-\w]+\}/ - } - } -}); - -Prism.languages.insertBefore('scss', 'atrule', { - 'keyword': [ - /@(?:if|else(?: if)?|for|each|while|import|extend|debug|warn|mixin|include|function|return|content)/i, - { - pattern: /( +)(?:from|through)(?= )/, - lookbehind: true - } - ] -}); - -Prism.languages.scss.property = { - pattern: /(?:[\w-]|\$[-\w]+|#\{\$[-\w]+\})+(?=\s*:)/i, - inside: { - 'variable': /\$[-\w]+|#\{\$[-\w]+\}/ - } -}; - -Prism.languages.insertBefore('scss', 'important', { - // var and interpolated vars - 'variable': /\$[-\w]+|#\{\$[-\w]+\}/ -}); - -Prism.languages.insertBefore('scss', 'function', { - 'placeholder': { - pattern: /%[-\w]+/, - alias: 'selector' - }, - 'statement': { - pattern: /\B!(?:default|optional)\b/i, - alias: 'keyword' - }, - 'boolean': /\b(?:true|false)\b/, - 'null': /\bnull\b/, - 'operator': { - pattern: /(\s)(?:[-+*\/%]|[=!]=|<=?|>=?|and|or|not)(?=\s)/, - lookbehind: true - } -}); - -Prism.languages.scss['atrule'].inside.rest = Prism.util.clone(Prism.languages.scss); -Prism.languages.sql= { - 'comment': { - pattern: /(^|[^\\])(?:\/\*[\s\S]*?\*\/|(?:--|\/\/|#).*)/, - lookbehind: true - }, - 'string' : { - pattern: /(^|[^@\\])("|')(?:\\[\s\S]|(?!\2)[^\\])*\2/, - greedy: true, - lookbehind: true - }, - 'variable': /@[\w.$]+|@(["'`])(?:\\[\s\S]|(?!\1)[^\\])+\1/, - 'function': /\b(?:COUNT|SUM|AVG|MIN|MAX|FIRST|LAST|UCASE|LCASE|MID|LEN|ROUND|NOW|FORMAT)(?=\s*\()/i, // Should we highlight user defined functions too? - 'keyword': /\b(?:ACTION|ADD|AFTER|ALGORITHM|ALL|ALTER|ANALYZE|ANY|APPLY|AS|ASC|AUTHORIZATION|AUTO_INCREMENT|BACKUP|BDB|BEGIN|BERKELEYDB|BIGINT|BINARY|BIT|BLOB|BOOL|BOOLEAN|BREAK|BROWSE|BTREE|BULK|BY|CALL|CASCADED?|CASE|CHAIN|CHAR VARYING|CHARACTER (?:SET|VARYING)|CHARSET|CHECK|CHECKPOINT|CLOSE|CLUSTERED|COALESCE|COLLATE|COLUMN|COLUMNS|COMMENT|COMMIT|COMMITTED|COMPUTE|CONNECT|CONSISTENT|CONSTRAINT|CONTAINS|CONTAINSTABLE|CONTINUE|CONVERT|CREATE|CROSS|CURRENT(?:_DATE|_TIME|_TIMESTAMP|_USER)?|CURSOR|DATA(?:BASES?)?|DATE(?:TIME)?|DBCC|DEALLOCATE|DEC|DECIMAL|DECLARE|DEFAULT|DEFINER|DELAYED|DELETE|DELIMITER(?:S)?|DENY|DESC|DESCRIBE|DETERMINISTIC|DISABLE|DISCARD|DISK|DISTINCT|DISTINCTROW|DISTRIBUTED|DO|DOUBLE(?: PRECISION)?|DROP|DUMMY|DUMP(?:FILE)?|DUPLICATE KEY|ELSE|ENABLE|ENCLOSED BY|END|ENGINE|ENUM|ERRLVL|ERRORS|ESCAPE(?:D BY)?|EXCEPT|EXEC(?:UTE)?|EXISTS|EXIT|EXPLAIN|EXTENDED|FETCH|FIELDS|FILE|FILLFACTOR|FIRST|FIXED|FLOAT|FOLLOWING|FOR(?: EACH ROW)?|FORCE|FOREIGN|FREETEXT(?:TABLE)?|FROM|FULL|FUNCTION|GEOMETRY(?:COLLECTION)?|GLOBAL|GOTO|GRANT|GROUP|HANDLER|HASH|HAVING|HOLDLOCK|IDENTITY(?:_INSERT|COL)?|IF|IGNORE|IMPORT|INDEX|INFILE|INNER|INNODB|INOUT|INSERT|INT|INTEGER|INTERSECT|INTO|INVOKER|ISOLATION LEVEL|JOIN|KEYS?|KILL|LANGUAGE SQL|LAST|LEFT|LIMIT|LINENO|LINES|LINESTRING|LOAD|LOCAL|LOCK|LONG(?:BLOB|TEXT)|MATCH(?:ED)?|MEDIUM(?:BLOB|INT|TEXT)|MERGE|MIDDLEINT|MODIFIES SQL DATA|MODIFY|MULTI(?:LINESTRING|POINT|POLYGON)|NATIONAL(?: CHAR VARYING| CHARACTER(?: VARYING)?| VARCHAR)?|NATURAL|NCHAR(?: VARCHAR)?|NEXT|NO(?: SQL|CHECK|CYCLE)?|NONCLUSTERED|NULLIF|NUMERIC|OFF?|OFFSETS?|ON|OPEN(?:DATASOURCE|QUERY|ROWSET)?|OPTIMIZE|OPTION(?:ALLY)?|ORDER|OUT(?:ER|FILE)?|OVER|PARTIAL|PARTITION|PERCENT|PIVOT|PLAN|POINT|POLYGON|PRECEDING|PRECISION|PREV|PRIMARY|PRINT|PRIVILEGES|PROC(?:EDURE)?|PUBLIC|PURGE|QUICK|RAISERROR|READ(?:S SQL DATA|TEXT)?|REAL|RECONFIGURE|REFERENCES|RELEASE|RENAME|REPEATABLE|REPLICATION|REQUIRE|RESTORE|RESTRICT|RETURNS?|REVOKE|RIGHT|ROLLBACK|ROUTINE|ROW(?:COUNT|GUIDCOL|S)?|RTREE|RULE|SAVE(?:POINT)?|SCHEMA|SELECT|SERIAL(?:IZABLE)?|SESSION(?:_USER)?|SET(?:USER)?|SHARE MODE|SHOW|SHUTDOWN|SIMPLE|SMALLINT|SNAPSHOT|SOME|SONAME|START(?:ING BY)?|STATISTICS|STATUS|STRIPED|SYSTEM_USER|TABLES?|TABLESPACE|TEMP(?:ORARY|TABLE)?|TERMINATED BY|TEXT(?:SIZE)?|THEN|TIMESTAMP|TINY(?:BLOB|INT|TEXT)|TOP?|TRAN(?:SACTIONS?)?|TRIGGER|TRUNCATE|TSEQUAL|TYPES?|UNBOUNDED|UNCOMMITTED|UNDEFINED|UNION|UNIQUE|UNPIVOT|UPDATE(?:TEXT)?|USAGE|USE|USER|USING|VALUES?|VAR(?:BINARY|CHAR|CHARACTER|YING)|VIEW|WAITFOR|WARNINGS|WHEN|WHERE|WHILE|WITH(?: ROLLUP|IN)?|WORK|WRITE(?:TEXT)?)\b/i, - 'boolean': /\b(?:TRUE|FALSE|NULL)\b/i, - 'number': /\b-?(?:0x)?\d*\.?[\da-f]+\b/, - 'operator': /[-+*\/=%^~]|&&?|\|\|?|!=?|<(?:=>?|<|>)?|>[>=]?|\b(?:AND|BETWEEN|IN|LIKE|NOT|OR|IS|DIV|REGEXP|RLIKE|SOUNDS LIKE|XOR)\b/i, - 'punctuation': /[;[\]()`,.]/ -}; -Prism.languages.typescript = Prism.languages.extend('javascript', { - // From JavaScript Prism keyword list and TypeScript language spec: https://github.com/Microsoft/TypeScript/blob/master/doc/spec.md#221-reserved-words - 'keyword': /\b(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|var|void|while|with|yield|false|true|module|declare|constructor|string|Function|any|number|boolean|Array|symbol|namespace|abstract|require|type)\b/ -}); - -Prism.languages.ts = Prism.languages.typescript; Prism.languages.yaml = { 'scalar': { pattern: /([\-:]\s*(?:![^\s]+)?[ \t]*[|>])[ \t]*(?:((?:\r?\n|\r)[ \t]+)[^\r\n]+(?:\2[^\r\n]+)*)/, @@ -2105,35 +2387,10 @@ Prism.languages.yaml = { greedy: true }, 'number': { - pattern: /([:\-,[{]\s*(?:![^\s]+)?[ \t]*)[+\-]?(?:0x[\da-f]+|0o[0-7]+|(?:\d+\.?\d*|\.?\d+)(?:e[+-]?\d+)?|\.inf|\.nan)[ \t]*(?=$|,|]|})/im, + pattern: /([:\-,[{]\s*(?:![^\s]+)?[ \t]*)[+-]?(?:0x[\da-f]+|0o[0-7]+|(?:\d+\.?\d*|\.?\d+)(?:e[+-]?\d+)?|\.inf|\.nan)[ \t]*(?=$|,|]|})/im, lookbehind: true }, 'tag': /![^\s]+/, 'important': /[&*][\w]+/, 'punctuation': /---|[:[\]{}\-,|>?]|\.\.\./ }; - -Prism.languages.dart = Prism.languages.extend('clike', { - 'string': [ - { - pattern: /r?("""|''')[\s\S]*?\1/, - greedy: true - }, - { - pattern: /r?("|')(?:\\.|(?!\1)[^\\\r\n])*\1/, - greedy: true - } - ], - 'keyword': [ - /\b(?:async|sync|yield)\*/, - /\b(?:abstract|assert|async|await|break|case|catch|class|const|continue|default|deferred|do|dynamic|else|enum|export|external|extends|factory|final|finally|for|get|if|implements|import|in|library|new|null|operator|part|rethrow|return|set|static|super|switch|this|throw|try|typedef|var|void|while|with|yield)\b/ - ], - 'operator': /\bis!|\b(?:as|is)\b|\+\+|--|&&|\|\||<<=?|>>=?|~(?:\/=?)?|[+\-*\/%&^|=!<>]=?|\?/ -}); - -Prism.languages.insertBefore('dart','function',{ - 'metadata': { - pattern: /@\w+/, - alias: 'symbol' - } -}); From 17964b67d4f515ae014303bd3179c88779584939 Mon Sep 17 00:00:00 2001 From: Thibaut Courouble Date: Mon, 6 Aug 2018 18:30:48 -0400 Subject: [PATCH 3/7] Finish Dart scraper --- assets/images/docs-2.png | Bin 18790 -> 19197 bytes assets/images/docs-2@2x.png | Bin 46115 -> 46805 bytes assets/javascripts/news.json | 3 ++ assets/stylesheets/global/_icons.scss | 1 + assets/stylesheets/pages/_dart.scss | 4 +-- lib/docs/filters/dart/clean_html.rb | 17 +++++++++++- lib/docs/filters/dart/entries.rb | 38 ++++++++------------------ lib/docs/scrapers/dart.rb | 19 +++++++------ public/icons/docs-2.pxm | Bin 1282041 -> 1312856 bytes public/icons/docs-2@2x.pxm | Bin 1391520 -> 1419962 bytes public/icons/docs/dart/16.png | Bin 1129 -> 472 bytes public/icons/docs/dart/16@2x.png | Bin 4217 -> 749 bytes 12 files changed, 44 insertions(+), 38 deletions(-) diff --git a/assets/images/docs-2.png b/assets/images/docs-2.png index 2bd5bdbeb0cc65017b74653b8c3259ac240980c6..089ecbded23ea65f60e613809f7887a40f9a376f 100644 GIT binary patch delta 9779 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 delta 9351 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 Gf&T-MGwP!N diff --git a/assets/images/docs-2@2x.png b/assets/images/docs-2@2x.png index ed34377ac2321589ba97fb7111f44a9dfc4357dc..c8234813332d846a12bd0d9d7f19b6d0c3ea5e75 100644 GIT binary patch delta 14558 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 diff --git a/assets/javascripts/news.json b/assets/javascripts/news.json index 435913f6..ffdb2615 100644 --- a/assets/javascripts/news.json +++ b/assets/javascripts/news.json @@ -1,5 +1,8 @@ [ [ + "2018-08-06", + "New documentation:
Dart" + ], [ "2018-07-29", "New documentations: Bash, Graphite and Pygame" ], [ diff --git a/assets/stylesheets/global/_icons.scss b/assets/stylesheets/global/_icons.scss index 5dfb1034..14c12346 100644 --- a/assets/stylesheets/global/_icons.scss +++ b/assets/stylesheets/global/_icons.scss @@ -176,3 +176,4 @@ ._icon-terraform:before { background-position: -4rem -3rem; @extend %doc-icon-2; } ._icon-pygame:before { background-position: -5rem -3rem; @extend %doc-icon-2; } ._icon-bash:before { background-position: -6rem -3rem; @extend %doc-icon-2; } +._icon-dart:before { background-position: -7rem -3rem; @extend %doc-icon-2; } diff --git a/assets/stylesheets/pages/_dart.scss b/assets/stylesheets/pages/_dart.scss index 87159057..3c011db7 100644 --- a/assets/stylesheets/pages/_dart.scss +++ b/assets/stylesheets/pages/_dart.scss @@ -2,11 +2,11 @@ @extend %simple; dl:not(.dl-horizontal) dt, .multi-line-signature { - @extend %note, %note-blue; - padding: 1px 0.5rem 2px 0.5rem; + @extend %block-label; .features { float: right; + color: $textColorLight; } } } diff --git a/lib/docs/filters/dart/clean_html.rb b/lib/docs/filters/dart/clean_html.rb index ce1733af..c0021aae 100644 --- a/lib/docs/filters/dart/clean_html.rb +++ b/lib/docs/filters/dart/clean_html.rb @@ -4,7 +4,7 @@ module Docs def call # Move the title into the main content node in the v1 docs title = at_css('h1.title') - unless title.nil? + if title name = title.children.last.content.strip kind = title.at_css('.kind').content at_css('.main-content').prepend_child("

#{name} #{kind}

") @@ -39,11 +39,26 @@ module Docs header.add_child node unless header.nil? end + css('section').each do |node| + if node['id'] && node.first_element_child + node.first_element_child['id'] ||= node['id'] + end + + node.before(node.children).remove + end + + css('span').each do |node| + node.before(node.children).remove + end + # Make code blocks detectable by Prism css('pre').each do |node| node['data-language'] = 'dart' + node.content = node.content end + css('.properties', '.property', '.callables', '.callable').remove_attr('class') + doc end end diff --git a/lib/docs/filters/dart/entries.rb b/lib/docs/filters/dart/entries.rb index f94c451b..f3c42bbf 100644 --- a/lib/docs/filters/dart/entries.rb +++ b/lib/docs/filters/dart/entries.rb @@ -2,8 +2,15 @@ module Docs class Dart class EntriesFilter < Docs::EntriesFilter def get_name - title = get_title - kind = get_kind + title = at_css('h1.title') + if title # v1 + name = title.element_children.last.content.strip + kind = title.at_css('.kind').content + else # v2 + title = at_css('.main-content > h1') + name = title.content[/(.*)( )/, 1].split(' top-level')[0] + kind = title.content[/(.*)( )(.+)/, 3] + end breadcrumbs = at_css('.breadcrumbs').css('li:not(.self-crumb) > a') first_part = '' @@ -15,6 +22,7 @@ module Docs end separator = '' + unless first_part.empty? if kind.include?('class') separator = ':' @@ -23,36 +31,12 @@ module Docs end end - first_part + separator + title + "#{first_part}#{separator}#{name}" end def get_type at_css('.breadcrumbs > li:nth-child(2)').content.split(' ')[0] end - - def get_title - title = at_css('h1.title') - - if not title.nil? - # v1 - title.children.last.content.strip - else - # v2 - at_css('.main-content > h1').content[/(.*)( )/, 1].split(' top-level')[0] - end - end - - def get_kind - title = at_css('h1.title') - - if not title.nil? - # v1 - title.at_css('.kind').content - else - # v2 - at_css('.main-content > h1').content[/(.*)( )(.+)/, 3] - end - end end end end diff --git a/lib/docs/scrapers/dart.rb b/lib/docs/scrapers/dart.rb index b06960b2..83ccc1b5 100644 --- a/lib/docs/scrapers/dart.rb +++ b/lib/docs/scrapers/dart.rb @@ -11,24 +11,27 @@ module Docs options[:fix_urls] = ->(url) do # localhost/dart-web_audio/..dart-io/dart-io-library.html > localhost/dart-io/dart-io-library.html - url.sub(/(([^\/]+)\/\.\.)/, '') + url.remove!(/[^\/]+\/\.\./) + url end options[:attribution] = <<-HTML - © 2012, the Dart project authors
+ © 2012 the Dart project authors
Licensed under the Creative Commons Attribution-ShareAlike License v4.0. HTML # Download the documentation from https://www.dartlang.org/tools/sdk/archive - version '1' do - self.release = '1.24.3' - self.dir = '/home/jasper/Documents/dart-docs-1.24.3' + version '2' do + self.release = '2.0.0' + self.dir = '/Users/Thibaut/DevDocs/Docs/Dart2' + self.base_url = "https://api.dartlang.org/stable/#{release}/" end - version '2' do - self.release = '2.0.0-dev.68.0' - self.dir = '/home/jasper/Documents/dart-docs-2.0.0-dev.68.0' + version '1' do + self.release = '1.24.3' + self.dir = '/Users/Thibaut/DevDocs/Docs/Dart1' + self.base_url = "https://api.dartlang.org/stable/#{release}/" end end end diff --git a/public/icons/docs-2.pxm b/public/icons/docs-2.pxm index 37cdd6d7b688c71b54eb26723ab89a0dccece6b7..7039ec5f5990382c85ad1fc5281d6ff66b1c65a2 100644 GIT binary patch delta 30055 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 bf;IA3RewJEg<=4-LH`tT06INUpsW7})SYMB delta 24982 zcmeIacUV-%7dJk0`<8pR@6y>tM6m*5Z@Y+!q6mt;?a~BAI@sNdYmWt8_1dCu>c6F*>XJ|3L83MvldGRMBAqV9?S%Dzd5F@z zAlsHRrk1jR4@~ZsnVwPmyqFIh*xxoj%~nfT$_EbbmYbH|YfMg7kv+YjmcE=19M&r* zBfEHFtgYxRdL^PJr{@&r7Gz}SPN>DMK`)83O-!$SUdIOxw&WCMp%K)QD#VJD^3n&S z7G&iW)lxU2{`SerNjFA$Dfa2$6I3^*Aa_FHyRK|SUF?}K(AXolps2u>Q(JilA2^_A zw{EqMyHO_+(+jd|pZB6STJmhEnd!#Fthe&mkH()+JU($!E$j=_h4|c}>@2ZeyGIp= zP!|$yX-M?BwWx1ABN|hjZF?)A!{~i|a!cNh@M!H=TGduMfhzU36^=&(tR?+``kYw& zwl}Bvz#-kU(^HEIay`Sci!ylR531he0oYj z`deN9jbOdg$4$z9E9iev?_z8z>2C=S(YX7h+cL7#-!}e)4;-4DUQl4m$Sru=?PsW| z#7Sdpnt4;Za%>rCooaOOyxX#!y2 zh=c*LS*b-?xjD9iNtH0bxkKuMhrkAcsXuL?UACcLdMUkz{+O<$x6wQ3 zee_rKH}rA(41JFNnf{Hgq3_U-=qL0GhGb}lW%P^>6TmcN8Zj-HwoH4bBNNN?VEQpb zm|={K8Ovldh0IiDIx~kUW0o?jm`Y|Nvz6J)e9nBu9Ai!}=a|dPRpushm-&aWKW3gX z&zS!txI`)Omjp_JB_>G&Nkd75BuWx3X(MST=^*JO87P@1*&(Ts`bxv3;nJqk7Saf5 zlr&pfAe|zeD_tmcN>@ogmTs0Fl71`wNqR~8n|BUjnD;kq?EPK)DXmG2#|bTZRC-DM zP0ufb2sHo^PA3}$8|*#CZc(ZhEiPNKbor`}D>iQ0v2)k%J)b%4L6g}wd;s4T{qM+k z;yXL3;4$=|DZLVtyG?Tz2DhgM#-`^LWjgl;uV&kJh-z<)Y}+BCZHHE^oWqPMvN2;q z_y*`-ARpvBXAG4M>z13HTQC55taRs7;|SAviB#s8+ic^^S+nQx&G{C5OFm-bypWF; z@R6uaE55b!q^bK@=dyA>>fG=VD}+&RR}BlYvq>9Pth5eJ7~m>$i5p3 z+rkJPfgQz;p>UzGT>vy-Krk=@69@qfKqzPk!ayT101O8sz(_C(j0PDX2jqeYU?Peu zO2Ir7S1d(Q#Tpb-Y(x>o4ir!9N72MLD3&;ZB8jsoj<|%Ph#M$|_!~tKPf+|IMh-M` zMq=C`#tg`hz^1SnjJCtpurured%&KsA54Tp;819TDR3+t2Mb{loC>GGS#UO71Q)|H zxDu{{6|fR+h1=j>xDOtJU%{jB7(4|}!}IV0{0067-LM8;hkwJn@E-gJK8F8;&)|RX zIVQoR$SKJ&77M|eU`?@RSaYm37TE^tf_24uVsTg^HUzU`nOGi{k4?fRV>2)Z_7S!K zTZS#iKE^g-JFw5Oudr%odRQF6(>$|xN7w||u~qBXcI{iWi*4T85*^(UU$I%3R);I#u=dTXVsTsK}oH+s%bUughTG>@5 zS+Pn|AziO%BJa-aqc5>6dtKU=&S!p<@QaE0K`Am@bx`{$3o=%gX(%G@7&Pd^`hD{WzdSW`V zTD}w5gu4zpSt##@Nkp{U*=hWEDl`=}ktC>+utZ@uq*w}uA>MW8KUtY@w7~6E4RaS4)Bfm#(X&61nCg8b$&HI5#yUWx09`%J#qr^(aH`^+lUT(H|D&gge4f) zaj#!V4yO1BEGXxjodb)&Vif8xaqd~JT}rCRGSNbv)e{Z&>|_QK!7SPI<4lZ1;rt`|B{is8c>vr~FNw^5Ht=qjkzB>Xd(|Q$AIv ze6~*c0Xd)4Q~t9~`R_XAf9jMU)|NBSi=Wg!pz^ai z<>z(Euilj*tWzfHl<7KU>6@SiVwTA+MBgl<$!5l<$^*AwMWTBtI%YCO;uR zYnPvsUyxswUz5A#f6DL3|CT?IKb1dYA&apDaw#0EWPMpbHh^u&hOv#=NH&U%W;?T8 zSToy;?alUK2eO0MA*_u}Vbj?0Yz~{pPGTpsQ`uSUY<4cYgk8!mV?SosvE}Ti>{fO= z`#HOxJ-}A8huI_SkF5O^dxrg$y~JK&Z?V6#x7i2mL-sNIl6}PiPQpn!Ij7_FoDXN> zLby<_IoE=V;M#K?xK3Pmt_K&#C2{?^WaJk{aaJyi8_Q*L#aszDkt^i{ZXLIc`wDrC zWt5XYu)b0l(aNcG`DDf6>#go8I5~ zaC)-;o1Fki27^IRB^U?>@p7K61Vg}3XR1A!wgR+%fK=oino_8c2GX7X*n>1_2|V;J0Gu^1g6%bPj_BL_!(eUJ^CDHr_w%}kC0n>zdL2lHKp;IWk9G$ zU*-I_G(O;CP+pH-$#Z-VuN0l%p1(SnYR9=5d|D5<4FQe3(rL`?@)orVd{z&&51~R3 zs(DeD(Au^RfG_KzzCx%_@ueMwq|fn=Z;{pDNIm2+gbaIwOrSfy)x-DT$9l-q&d8a4 zH0Qz3_2?I!Wi#V7SHN%e=rzuJ2!9LQu1CM)>^m!7a}PYIM}OqphUotT|J9?va7t#! z2LOn_PlqJxd9+usXjQ2lBJvCJdO!{V+jxfP+;i)#EKu@CR}W}Fz;<3)wJyqaWK9fy{~iBym(C#Os+>C-1ECT{adZ&eda^^q+62HHIKM6uegqeY z8+u+T5uv34Q0tw$7sP8ez|HmOTb$g& zc+GaWs~&xiGkakNp*)3QOrkT3Y+u{g&*6c3(1Xs?3;SrkhSl}x-#S|?>Z3UhzpqC> z>0G!d)_x8krv}f!v-Nj)h;|O7*KYDgEA>;RL^LzDifBKrnQ=-~G%826ikLRdlY4|e zf&S%uN^RdR!prDg@K<<=&)~;Y!YlA2J`+h2N!&Ma$bjsu)bzr{g7lKC^a;*gi^EMf z;2-d>4e%zs1%Kzq^5gjI4e&Oqb%!61>gDoz&VLuTlii08P?F{$+LkrdcQ)Jf0wwh}%;9(hTbK`uJ#H280&$3^ceGc|)R&;k*(3H9j}d<`#Q5cRB(FXG4W z#hc(2jKD~wZLyan`~)XlGQiFOv@)nM1*XJQm>SbyT1jG?8+IxUl1SqWw$ilMU1B|yL#2gW!Oswrj0apATrUXIec_7wW$P{e)dl0dek35jP zTF6Xn&U=u#2(r)v;cFoau`*z#&OV03`@8 zuP$ISCa%Blq-sY1aT0o4=mBKdPHfM6h`9){@GSxX_G4eX2Uvmti$%aW>}$mS2CLfJ zW!X|Jc!kGWu*2B5^%63ObVQ6}R``b=$4>lz2D>Q0ErAYXAS>X`Ge59%LNZo9si*Ck1jXxsEI+H<6!^pOV|i+jjB^ z`5*a$d`00DiQ;bwN_q~UhET&$($hwzdJ>--sXf$wPpb19s+#(iI!fcTlGf1%+LsQZ zjdTbdN~h4dbP-)bPo$@zoMtKQpsVRq^m+Ox`WN~NeT{b0*BK+zoQYzhnKmeA*_r9e zSQtBFU%)J3oXm1&HM5pk$CRVg5+(g5gC#>H!zCjn zt0kXEwo7(Oc1u2&xFlalzLY$Zl2WNuF6E>esZMG@naV-ZRB5JkEXq>mOADpN(h1Ui z(rW23=?Urg($mtj((}@vWEz>#E^8=jBny|dkVVL%WYMw$nO!zhHd{7VwotZMwnXNX zot0ga-H_dq{UQ5Xc29O+_D~)n?<|jz$I5%i}a%YNM$qGv1~TlIBY}P0{d6&H)wBgj6K1A&z?l#zkv(j zf;c1BkZZ(+b4|HS6y8tfrgGCc2RDnG!_DK4a~HT@xy#&D?mBmq`<=V32vf9Dv{Q6Y zbW&Ip-4xvwJry$*OB5>lGD>4T?>Q>xzFAj}=c9&lE2eua!`VqjbMTnP68A zP!3cMR*q1PQd*TM%Js_a%00@x%FmStm4}pHE31?*RZ^8grBZ2BJ}N&|fGS8eT$QOB zugX>Bt4dT8Rg+ayRR>kaRVP)aRA*E_seV!Ys=BQ9RfnmYs++4@s-x9y)a}$A)DzXS z)brH~)Qi+k^>VeKUZws;?N;0WQ9o6`(ik*GjY-o$6QOCXX{%|k>7p@fVl=TDtEN~p zK{HeHk!GQ0v1W;8rDnBet!AC3T;tMwtNB@TL-VKRsn)0s(Kgk#(zes~)eh1Q*A{DM zXcuZ1YnN!9+T~h7TdCcs-K^cB-KyQL-KqUSdrkXD`$YRn*HG8Ut_#;S)iu|()J5uA z>00aB>e}l%>N@MX>MXi$y6(E3x?Z|?-4NYK-DsUnm!Zqljn!rAN_DGrYjj(5J9N8r zdvyDC2XqH@hjd@-e$buKozq>={i?gHyQ=$5SEIY9d!&1!`=9QG?v)GgUa zy`Mf(zDPewKSe)HKSMuLKU+Unzg)jszgE9a zzd^rA|B3!n{Wkpp{a5;L^ws)f`V;!^^(XbG^q2K+{dN6K{h#{3^mq0D=pX1`8E^w> zpbc^ZXHXi{2Cczl2s1P`G%>U^L>gKdS{vFLVhz0v@peOBLw`fEVUS^nA>A<6kZs5@ z6dH;R6AY6Kvke~^78({CmKjzURvK0tJ~3=J>@@5)d~R?VzA$`gIAQqFaN2Oz@U!8f z;gaEs;g;d9Uy0vDzf!-&ek=Sw_S@yR&+iK{N_)2(#lG`C*M9oJFZb45?FpTmKR)px z>Hi_={~_uB|8~+pltLMdhJ4uG${j~2>X!xcb@LwY&ED4~JWNI01B!tt2L;(dXdT34 zgQeT0P%?;>=MFx|LT|6xNzs+HREAp=dkOaGL7g`SPG#{SW=DcVxF@DxXhJc!3L6WvDm_3fgh@5;UeL6 zXKbLDrf^Uj||h^c+-p4lpq25-j~ue-8?~`eP;ZXJb&}e>fD}Gsy(Ox*ONbSvUZ5 zEgXRVF@ic!fa;F-))h|yXt+NWQTmCLB%z9=|`HYa31j{Xy_kp1MqIQl+17J;KNQL_o+=?nZv7%im+c@A9YyGR-^)yov+;REjp z`(Bg9^n*8=@f^VL1f~7lNez_<-yDPEMUCAEM_2B0f8x_KMimI)(0Mz#=1DvnSD^1a8Fs6Lw6a zEoj<*hPldldLi?F(+mdZ3Mc2&Z>CqNSWbhp#Mj%PT{yb{^&&z^s;GJ1$%$U?nVi&| zH%CzD*>eO1c@dmJIXs75f{61-nVgLVIN4=tM9!vM5zFWazlKW(p>x^=K=M$sSQ5w_ zVg}IY_=285vx?>NUDS3ej=ah0$O3tSaB@6jL>c55Au5L%hr#Er^*PK0f`8S0B#?QoC3ECz%2l2N6|^hyC)gFbqzf3s@6Up}hTew#w z8At8(s?tLjg+hJu7MLXL?t>}eR-svmWIVOQ>uC^hm{2wnWn|!{IjRW~muiAEr6+U? zMPExV!CQjugw#8B`eq86^8GNOYLf~%5!6-s#v2nADWZwe*WZ|>2jVfy8rS_Q>1h)F zCR81h=EJLk@@wfJ@5rtQ_r6ALdyMbW8{_j-6uS*Ci*HV+uf4H655waSf1T6$J1P1v zb9MesJ~mo`6cB`0VeA|>P<}u@MA-RK-dL_!s%XkpamjcU`w-dCR9txUN}d5X2tPu$ zgj(rw5<(JzPF%&g;M#$)Ni;PYjV~SwNezeuu~#xQ5!qbfpGnO37yv6EYlEwVVXx)m zs0y!)N57VP%tcRnMeKPN&yQ*NvDa`s6ptLrh0QGcBfKbF4Pd>8%rrdfo%l%#);sYr zct+@>U{m2~VYh5VTO)93D3Fu>DfnUarWq0Yz&PKxqk}& zjAVTNy-9xNF%=74ie~H@TN@pS0*Ymd##}Wwn7zmrurxYGYbiTIWDz*N6c59`#FF71 zbbSItrz}w^4o+MoBm&CG_w%e0Os0cHq>&y{DwE-mi$>$`1&Df(T5>#B`ldQ$0*i6e zp;TCaaalsuV%Br=+;2swS`8UtB+iYcXjFMLBd*~6gv8dEUU*%G?8)U|t@j5R+?7CdM)H!v=bVM$$?ZpPX5j^2~xrW^VUAAs8oED75aPb?z zQK9D;8eVaonahlW!rB(3$`uxjcJat^UO zoyf`LHM&?hG@kQgP{yODq=wmyJhh)^w#yJ0NK>(Htz%+@t8z3wE0OQy(vZN{$=EF6 zJ2|Wb4+JH>;GCO%%mVW3<wR+ zXcXR+oZ5(%jE)1Hmhp)~*%3@BT-dA1Mz=J^3dYY>=Sj~nJWO#Eu(9jRMDAxI3|)=} z3S0sd3l$-ZiT;xAOv!X?OK-N5inN1#ylfE&Bq%26vGa^s=D zkn@mBqx_JBkg-@_%lnC9z{fazg)Wb{EXv0_%S47KyAUDhF~?8_M2!y=Lsit#Zb~KD zW?Gslf^`w8YP)8e#Mkj-<4RicH93prQ$34vld3371Ey5d)cxhv7Aw zAFU3RYwJ_)IVHJ~=};m*G8>UEnvHN;&e6*=xN)w{(>Qc}=%y?34@oiQG8VzJnCt!u z?h6Xua^-Izc6eqwDbeU}?gsC!D8*)cV$i1tUJvg-6+MbTQfyUt0L}Ga0%5Oxrp)cZvQ9{Cb#dH`c{CHlGMMWUoK(DApTT@|0zypM$Q%mt4?f%1CZGdC3% z84Ua@m^KnGMW3s29lWQw$6??<*V+4$c5=a;r3!UXQe`FX+VZg?tA$I|Nx7V$V#R(D zLUjxpVwnwUh4QoL_2}`f5MmGl3Bf}W7Ywx4Sr7?{K_q#^kmfKWO1!}f62-uHE|E`l zbQKQ8D5q0hM0TJkC657Xsm_Ri#NiQ}=z8$6j!uF+R+&w8L>wd!4@b0I+R*_~QgJWk z-Q;PHsA%$dbQ2MVjtWlqakO)N-Cg+y4gV)>?yEdSosjQ>>r%yAX~Tr_{+NPfOJPJm z=hJ+Z{6UN_yc-Mny>KN_nF_yinUj>oGmKjg%BEwv! zZ{Y;mWlUGjV<3Fb$a9s*$gx@@pRa6;L;O8YvQmjW2~p3J6#2L|f2F*KQ%PhgMA}6e zgnpuSHF&NgQFvXg%!mDi{KLvrDggnICJ`XP@Z8((H^9E4%zBdR|Ez(eGvySI^kutk`^{bs+|#lXQr z%V&!CS8f&s)kCTK`<4et+B^*etAlD zkAprgis^>8mQB$Jj6j3hd5~cNRzPAR;`*DquZf*lq*aRRga}|5CBQkQ`O@>`)pFl#K%PM zvU0k&BimKgP<@Lgb!Z9&){3Q-dZ^U(>5nQMbbZ}L{TJu@^s34xcS(n-*Q2R(R|O-4 ztqav%C`Pngyf|kYVag?}oiTCwZ6DJqv`KnN>w3!%UAa{e>8%@kq&V;TX%G7EM0^!C4nvv}1}_R$ke^ zoqdxL70o^mRh)gomkrf&*YV}*YqTst42Pj&IZ!M|A+Ll$^X@;q_G1x_gduTt*`Xd9 z=aM~B^Fh+zN7(;)mW@{LY$12HCIrh4aeb-ROdcG#@j*a8-Nw>c;R(q>X-UdhgSlrj zzg1zq$|U)j`9fZf#uu5@{2YxX(1@o*qi?T$dIn5gPyhKamYoeYXRK@#o+FvzP89yi z(X__DI7bN2uW7REPc=P<+ztGpJc6zP#`((j!PR-2v@;f1aC0VWjyvh=Xx2}e^qD2; z&UyH-5B*VOX7f4iD5p78Qrfm%>)Bg=GE~Qflgb5M)6FltnWHHX;b-htW>Qx735Dik zuMJrh!Lc@;BP};O*^j&bl)>%eh>Ds>I+Dr&X$|J= ziBQfO!eZ3X1%Qd`YdpaKEZZV4cekCr`<`FL)Q)(hTxu!PQ;w^cbY<4yauVEp5TJBl_qA;KSY9#J z-k37>=e|8l`#UnT0B8ptnIP~+`M56ko3-SDkudKA?2;`lPx$O;&TrY{$U#Z5t$GakPD$v)dd|N({EE4yPpUSR1x-g* z5vv<+ygehZS8}UknLh$(Z92;uX6b1!>?M2JEP6J7&hN5A=4-v?i zgYy=wg{@Da5V*zd*V_#IU@wFmR zk6R<;{SI5Z96#qhggR#KNx#y^ZO>M$ zi|V~9FuR6m+4KHd|C@<P_)bL|-_xwO^)Y{ zXG^!V=FVR1NcPP;Idq}Ew7d;<Gz@jxzJp{v6EZSuz{L(#+`!d-V(A*!}Cln7jL& z-8}+kFzqq8AdFIN*3-^@{K|8z7}7pE`J|-^Y;4jQ`C6X!t3A_ChbIaBu|1mdQG2{;&TXU>w_aIDJ;Xce&oR-3fwgg|+O47o}mKpB{ zHtwG_mA1r~L8^q0R1+d{?1K8@fDo}IZ4ALhi0^K2VTjRcB>x|z5 zWJgY{);QWN*;w9mX%*P8@Nna&bmZ1MT* z|z3huW1Brxkp&r_*BV*Y_FPD z{~T<*4uBe1DjUM5p8_pZ>5yBbro&m5>;Vv;&EEv+SgAiPz2_PaPzBnp$Ezz_gCO4Tg zSxEX_qqVm&-aP@}G5`B#a^{CXKH%~Ud4TO;5d4~R@6=aK4Xn8kRCD6rlup3fhX99I z<0ul`QChb8mo`yFFzy*XKGmBQ;2B=kMOwj_5*y!G)X8`(0+i-xK}itEByC%v?O;G! z3kr;=3~Sf0GN3YL8Z^!Yh{fC z#}G$T+ojm$0i}n6&=`+9w?zyWdz$}m-w0uO)HZd z;kz1F1&6DbhcEFDf4HIN&P$y8zQV$*KzR_4zBuKBg%JMLRse4XRkmR(x`dU+XwF^G z!P%JUWPtWSVBy7}8n-g}2t#y|JU%I{Is>a1ol)-7vp??cgi=yUa|~{`9{Zh38Dc&t zHMfvebDSI9Q+lDQ{@P%g>Qn93)tm^ZdFV4QF}UV?6}V4Wv~ufC-1xJs-0fGR*4OZX z=PpD?t^ie`N>dl6x`4Ef#oU?3vz7j{f`Dp=%H0AZh(^0ZdfLABtGVQFd?+*JG4Og| z^#fKH3yp2?@9c}1^3}LITEcG`mlw&ZMqqskC}2I5RJr!^5$2{>0MNF#0>A3d!en3dGXJfD_vGLI?q_S;&D|(A zDmAQNY?IP+fk^?3d##iQK`WY_ioFN4-wZZ_T|cGAHh$;~FIdxa*|fB+ZY3m?6+0DG zvjadP0ES+cR~J#c@X%e`(x6)hS>vY^e@R_>QD4zmZ41@xe5S5$@dN)8c2hVzS!1w= z|E=WPr~KTauh|b~jnGv@lQvtD?J-_;x;4L`5q#zUU>UIbuvLfgLajWqleQ)$&~j2? z(fU_yjVOKLml{hL`(x$|WknoQQ-m3tz@F`lpU?g^=@S+tlBZm494}0ka-ZsxKGm4q zQX+x(gHH5_?*59jS|!%$28%Feilzb6;#@#zW7E#t!q~qwVfK;-z4X2nE%X%ye&!3t zpH;Txp0>)({_wLbut2iEu?%dLMsqPWeRP&#Knfb}@7&`;ep>Q`w2MAFszcQkQGw+b z$?Exq4nMQyd!H08z3(wB5>r|Vu$pyB@JhiS(ydJNvwk`&FSK3bS2*86Q*}bN;-+uS zI$#a*YrN8Ks5&LLbYROLD!_>$W^^SoObUGzd=G8aA=n~KfB#lpxEOy0=8Fv#ChrKxG+XWOqX)i$iTII5dD*Ch2Z z&t}|9>55@GTk`GFi=Dw%nfcUxQ&lg}3^FSlR&G#z8srCe7tV@1X4(>PcNtz~1Q%v2 ztNoY|R>Fr%s*|M3O;X{Gzhyr_btfs6)tG_@+L~lt74WsKoDtI}=FfpW%7=wu@LB-e z?U(q2{F(p9TkdG9`!}=h#%kh>W>tpee0P+@X0lZ^t7&+K<8QL%Z8Qhv!JDe&6Ng1x zudw_@Mfsw*8UmJX4(L6De!NIpv)`|(#MiI0GEHz#)A-oO(&h8%st~#9LSV&H%+`8= zDb`RiH?T%(hOcr$yR0`(RoY^h>alCh94x&OICJnIzh-24262FaQ4yxlQ)Xx^=g%2R zhxnI9cN;vo*fq-cdVn5Iq(MxOb9Vq9s{l{A8eURfDYZ`5RS%v59|p%*rC$sJu+pz_ zs2#Vq!`-0kh8KP?Sz86L3-aKWEdYG#A9*Us+8Zwi%Boi?qq0%yi(sQ>pH(;6)XcB^ zd%3wfA!dtz$ZP;sORb*)Fq_f%?%%gaVPlkuiP({npz2dSbN_=CC;e(Fea%VP?DCH< zugo`D^`#}j?zMMj5a5q?!8MmB^-9q~&(^EW*nRBE{aTUDIECzU{_Yb7%{oK!Q)XozfqOCa60AHvOplZ?!2@ZPE8F zIR>l&D&u3qG7L91164%^(~J$aO26vczNXLotM3`Ib_SQOYgGDr$WatFd`+5fO1?$u z*Te2A-B!L2&`R6?^m}~hsYa!-s*2T0Te7-(qq4m^W{=HWjt(vZG*un&W=hkDc{>hX zvv)I_2@uT~e>qb+g5X1Z%Z-dRzdQUrc;NUHNpjf9HU`_;zb3U=2=B!mV6eY9ztYvd zRksZ_6McG0n^=3?HWw*7$Tj8rNq%7Zb@sFyNZi|HJWTM94lKR2C;VAh^@V_nBf1Xj z0;*nISv&3gs3Td%mMQQ`AZQXa;fpWrerJN8^MiVHf>V^h*kO1@Wx(MC=Ckf^?6vVqyRD<7u%-|>LzO23-h8v4pYj94Cb zC)LW4#!L)+CIR~i^HbWrjO63GRwfvaFy||HUG+horJb^31^dsj;I4LaV!wT~b(XG_ zP`CW=^{b{Qu9S7-_envb&b^r_Js|~U%;Gb^t@~<*?3;+JM#uYOpfOVg3~*_%#p+YD zz_&We-?ZDmG_O~a0H*4Itg1>G_qEEL^X0~KMj|Dv4|qPkD^QGCb9CjMf&+@v$1mT_ z0Uve0p;~z%r+wh!p7xt+U+tn^4V}GismhEwLkgS5pTJZ;W&I6uYDVt=9=&{ZGylNI z<~`PQUs<`K+2{+)V>frni1KA`ls%idU|0HQ1GY6ecW_k*_@&BZE!R%|dqS5>r+@kD z<*y@My<=ybS$X@&M8C>exN*y`KmR_Zyp_Qk4bY8bObi~L9$Nrh{A}H9f_`6$=CcO+=KX})# zcmFr#RdBFy`p+lNr@and|I0uBzI@&FK4Hh9IWJU(oA1YJNK0OtKW(``vw5&+*lu|@J1V+8AiAky^F!k`u@7Pg=(^{p4L5XuFf-M+NB+if{yiQXDGcnHe{)K3 z&xeG=6ju=XQG>XLvCf9Q3ewgz>h*BuhVb468@Dy>{qV@%=J5qLzib)*i1;?LPhsc} zt?Yds#h!27w=nH;+rE!x-e{jtxbd%!36G9E>fEpJ=JT%o9+S8wv8bV}TjJyHn(j$O z>Ha;F9?xpftAEj^rt$qBA8pllK+&y^{RTWCyCo$TH;f;U{G|JUfdh-vhYue3WLE0X zLB*TK4IlL6XyM4g#kZ!69{iMa*oKre{3vzE)9%jnp(W$f*NhqZbk>HfVI`ZkjT`p# z=-%fGr@Jmc)%Y@f`vUZL6+WcbKBU(^ zq}M*A*FL1zKBU(^q}M*A*FL1zKBU(^q}M*A*FL1zKBU(^q}M*A*FL1zKBU(^q}Tp` z(`)`uHR1XQHTna^Y9L;8d-pR^81_^X>g&DAhOS?}CNpC%l4TGYa+J?LpLrqu`;&op}MpIBk~Gfkl^ zGfoY%ZIjXq3R^mDxgCYJ|7u#|SRb{}`H(u!i$C%&!q4d|T=`d1h)qV{0RB%?Ae)l( zww@sVbu>Zp990ZSRtqDK)K*;a998^xps@2fdeOgj!g4vbMtG z7aBcYGDpV zwJou2lZ90ffn?Lsm&y<-oPURk%wswTM=@p$snz2X7OMp_sV$IwvgB=J;@_?lo{`#?_;#mS z7*1(=3D2G*Da@u&g+YQ^SWjv5@gG;Ig{g8)oG_e5O;28{7Qz+i>9qJ%uwE^g)S5V5 Vym)&VU2;PI)~NvKK3#*J{ttXxQ@j8G diff --git a/public/icons/docs-2@2x.pxm b/public/icons/docs-2@2x.pxm index fcc1aafb2cfe02c5ebffc182eda84ea72192ab4a..e0dd2df57bc1442b11f2f2fc43403530cc279d69 100644 GIT binary patch delta 64570 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 delta 55860 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
uECVs^_%$Vw-dJ7*U4i|;kLTs@rZZ!Zl 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 diff --git a/public/icons/docs/dart/16@2x.png b/public/icons/docs/dart/16@2x.png index cad29d188f36091e768731a47a711bbf87f18f3b..c27da76f1bb0bdc2b01de204d44b2f1e1fb8041e 100644 GIT binary patch delta 726 zcmV;{0xA9ZAngT^BYy(4Nkl*Q)e2;g||BdH{9e^HT608YR;Ch%0&%+hi5GBDd zhECnY%S_@D9uoj;JilwNAlCv<*edANWwl^Wh z(qr5`ZR>6+T^8;-)hyltNb`87A#k}?scT=hO!D}7o!>0ZvBu)QaoV!|GjvujtzLufYB9K?qWF7Yqk7=A8tk>u6hm*8dY)Wu|C{ZL+>=@tJb__qN^^b z1QlpNB4$G?_T$5U0%aFp(r~0tn)*v0O7M0oK+`zAM1P!fqW;g3W#``$0V)9k5>x=1 z#Z=s5cb63{*q597KSz|D{YnKWebbLXD;9=`2sDo=f5wh{M}qc6|L5@HGrxHPc9bwH zz&`A$B~Ww*xB^7Ngh2H>Q30e6lMok(cc>x)6qFD+2CAdX3!sGhn}+iQ@FFxz|L3qm z6fiE)Yk!UUowxQ>fJ&f%2?_ZlXYHu~N;qd~1BT|G0=yZCNLU#?R!FZ%I7a|0-Z5iP znoI-`elUW!@;bw*0Il9j_omslfBJzEqG-!^Te9z}ApxvWTVBo68XzL!NS6h>PGY!M z0$9HLzRwLj^y@bRkRT3$br5jq*Qb6f4o}oh`A`3dcLeiiLNd(6M{QBU{t_fU9g|>& zc(AyDumlMHv>a=>YJwh0Uqrk0#vr7!~g&Q07*qo IM6N<$g25wE-~a#s literal 4217 zcmb_fU1(fI6h1S1v)P|C*}tT25~Z}5CfO9zO>Hf9X_QDCZG(s_RYX*ohY&z$)eyWqsZ=T8EJ3^;u;!~XIT&@%x_EHpTU36Ei- zur1jl6L4TU!+x~cU55=5$jpj%jl(I7^aeJ2Vl}}cR-|DPbqRP#ye<;11lF0@GYLlm zJ3hGfdVXQ?MXvc;80XE{nt<_U&Y7PxUo&pJCdL@{Oj9$GE=0+~ec%s=?}j!fM!$b5 zI%~(taW#SLr|koW_kTJ6>z{$88#mJxU^P_EIrRcJ0*U7L=Y(z?TKnvkADnR9Zsc4) zZWN4QXC{-5Y}@(=gW}JQt2ZVulEUh0T-OWVz>PCixw*~vEa8yAMrOyK0cy*<(G z56-KOc>JJNvtUak(ALI*f9piTN`U$3h_wkrr_0Qg&5u0X9qa4K(SQ=y6FWv$0{t9G zR0tfN3~??_Py(Sd++>wh9lLkMror~I6+OrhRN4>O-ia5GglNsz8tc2$qE%ho*}a;7c!|u}eDJDi;3=>?0(FjbBms$mezQ8XX7_d5J*{KR8{p8taeis~Af!_?7>_~v>`MW~Jq#3;Kab`G*ws(-C)P!#!gR7|E?yazr% zdd?755-QLOiH@PcrdX;suP#E3MY=jyBtTY^1bfp27={I8+UT!AX&*|5qrKbjNVwbT zX})+BOXT&hu8M)N+pV$4lm2AV@$FaZ(orkb(%l)ozhXTr!^2@vY% zuYU?W`hvgZ{_eea9nd|oZV7jFwHEUE- Date: Mon, 30 Jul 2018 14:09:58 +0200 Subject: [PATCH 4/7] Add DuckDuckGo shortcut Added an alias ```alt + d``` to be DuckDuckGo shortcut --- assets/javascripts/app/shortcuts.coffee | 3 +++ assets/javascripts/templates/pages/help_tmpl.coffee | 3 +++ assets/javascripts/views/search/search.coffee | 5 +++++ 3 files changed, 11 insertions(+) diff --git a/assets/javascripts/app/shortcuts.coffee b/assets/javascripts/app/shortcuts.coffee index 5bc24806..5755a71d 100644 --- a/assets/javascripts/app/shortcuts.coffee +++ b/assets/javascripts/app/shortcuts.coffee @@ -149,6 +149,9 @@ class app.Shortcuts when 40 @trigger 'altDown' false + when 68 + @trigger 'altD' + false when 70 @trigger 'altF', event when 71 diff --git a/assets/javascripts/templates/pages/help_tmpl.coffee b/assets/javascripts/templates/pages/help_tmpl.coffee index 3997528d..9fb4ed48 100644 --- a/assets/javascripts/templates/pages/help_tmpl.coffee +++ b/assets/javascripts/templates/pages/help_tmpl.coffee @@ -131,6 +131,9 @@ app.templates.helpPage = ->
alt + s
Search on Stack Overflow +
+ alt + d +
Search on DuckDuckGo

Tip: If the cursor is no longer in the search field, press / or diff --git a/assets/javascripts/views/search/search.coffee b/assets/javascripts/views/search/search.coffee index b6c83e1a..8fab885c 100644 --- a/assets/javascripts/views/search/search.coffee +++ b/assets/javascripts/views/search/search.coffee @@ -17,6 +17,7 @@ class app.views.Search extends app.View typing: 'focus' altG: 'google' altS: 'stackoverflow' + altD: 'duckduckgo' @routes: after: 'afterRoute' @@ -113,6 +114,10 @@ class app.views.Search extends app.View @externalSearch "https://stackoverflow.com/search?q=" return + duckduckgo: => + @externalSearch "https://duckduckgo.com/?t=devdocs&q=" + return + onResults: (results) => @hasResults = true if results.length @trigger 'results', results, @flags From d022785b733272b368a80995a623877c29be41d4 Mon Sep 17 00:00:00 2001 From: Colin Zheng Date: Sat, 11 Aug 2018 23:24:55 +0800 Subject: [PATCH 5/7] Fix #835 --- Dockerfile | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Dockerfile b/Dockerfile index 7a2efbbc..2c216e96 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,7 @@ FROM ruby:2.5.1 +ENV LANG=C.UTF-8 + WORKDIR /devdocs RUN apt-get update && \ From 67b5e3cb47c80b0f59be30bdd32d5242a2edad6b Mon Sep 17 00:00:00 2001 From: Nicolas Ettlin Date: Fri, 20 Jul 2018 13:41:02 +0200 Subject: [PATCH 6/7] Add Qt scraper --- .../templates/pages/about_tmpl.coffee | 5 + assets/stylesheets/application-dark.css.scss | 1 + assets/stylesheets/application.css.scss | 1 + assets/stylesheets/pages/_qt.scss | 63 ++++++++ lib/docs/filters/qt/clean_html.rb | 21 +++ lib/docs/filters/qt/entries.rb | 139 ++++++++++++++++++ lib/docs/scrapers/qt.rb | 121 +++++++++++++++ public/icons/docs/qt/16.png | Bin 0 -> 456 bytes public/icons/docs/qt/16@2x.png | Bin 0 -> 986 bytes public/icons/docs/qt/SOURCE | 1 + 10 files changed, 352 insertions(+) create mode 100644 assets/stylesheets/pages/_qt.scss create mode 100644 lib/docs/filters/qt/clean_html.rb create mode 100644 lib/docs/filters/qt/entries.rb create mode 100644 lib/docs/scrapers/qt.rb create mode 100644 public/icons/docs/qt/16.png create mode 100644 public/icons/docs/qt/16@2x.png create mode 100644 public/icons/docs/qt/SOURCE diff --git a/assets/javascripts/templates/pages/about_tmpl.coffee b/assets/javascripts/templates/pages/about_tmpl.coffee index d90c338a..96febbc2 100644 --- a/assets/javascripts/templates/pages/about_tmpl.coffee +++ b/assets/javascripts/templates/pages/about_tmpl.coffee @@ -575,6 +575,11 @@ credits = [ '2009-2017 Kristopher Michael Kowal', 'MIT', 'https://raw.githubusercontent.com/kriskowal/q/master/LICENSE' + ], [ + 'Qt', + '2012-2018 The Qt Company Ltd', + 'GFDL', + 'https://doc.qt.io/qt-5/licensing.html' ], [ 'Ramda', '2013-2016 Scott Sauyet and Michael Hurley', diff --git a/assets/stylesheets/application-dark.css.scss b/assets/stylesheets/application-dark.css.scss index 38346905..821ebc36 100644 --- a/assets/stylesheets/application-dark.css.scss +++ b/assets/stylesheets/application-dark.css.scss @@ -83,6 +83,7 @@ 'pages/postgres', 'pages/pug', 'pages/python', + 'pages/qt', 'pages/ramda', 'pages/rdoc', 'pages/react_native', diff --git a/assets/stylesheets/application.css.scss b/assets/stylesheets/application.css.scss index 64916112..245a8012 100644 --- a/assets/stylesheets/application.css.scss +++ b/assets/stylesheets/application.css.scss @@ -83,6 +83,7 @@ 'pages/postgres', 'pages/pug', 'pages/python', + 'pages/qt', 'pages/ramda', 'pages/rdoc', 'pages/react_native', diff --git a/assets/stylesheets/pages/_qt.scss b/assets/stylesheets/pages/_qt.scss new file mode 100644 index 00000000..8efecaaf --- /dev/null +++ b/assets/stylesheets/pages/_qt.scss @@ -0,0 +1,63 @@ +._qt { + @extend %simple; + + h1 { + margin-top: 0; + @extend %lined-heading; + } + + // Home page + .landingicons { + .icons1of3 { + display: flex; + flex-wrap: wrap; + align-items: center; + margin: 1em 0; + + @if $style == 'dark' { + &:nth-child(3) img { + filter: invert(1) hue-rotate(180deg) brightness(1.5) + } + } + } + + h2 { + flex: 1; + margin: 0; + margin-left: 10px; + } + + h2 + p { + width: 100%; + padding-left: 70px; + } + + .centerAlign, + .centerAlign img { // Icon + width: 60px; + height: 60px; + margin: 0; + } + } + + // Syntax highlighting + .pre { + .operator { @extend .token, .operator; } + .number { @extend .token, .number; } + .keyword { @extend .token, .keyword; } + .type { @extend .token, .function; } + .type a { color: inherit; } + .pun, .comment { @extend .token, .punctuation; } + .kwd, .preprocessor { @extend .token, .keyword; } + .str, .string { @extend .token, .string; } + } + + // Function headers + h3.fn code { + @extend %label; + float: right; + font-size: .8em; + padding: 0; + margin-right: -.5em; + } +} diff --git a/lib/docs/filters/qt/clean_html.rb b/lib/docs/filters/qt/clean_html.rb new file mode 100644 index 00000000..18e57baa --- /dev/null +++ b/lib/docs/filters/qt/clean_html.rb @@ -0,0 +1,21 @@ +module Docs + class Qt + class CleanHtmlFilter < Filter + def call + # Remove unneeded elements + css('.copy-notice, .navigationbar, .headerNavi, .footerNavi, .sidebar, .toc, #ec_toggle').remove + + # QML property/method header + css('.qmlproto').each do |node| + id = node.at_css('tr')['id'] + node.inner_html = node.at_css('td').inner_html + node.name = 'h3' + node.add_class '_qml_header' + node['id'] = id + end + + doc + end + end + end +end diff --git a/lib/docs/filters/qt/entries.rb b/lib/docs/filters/qt/entries.rb new file mode 100644 index 00000000..c9e172d0 --- /dev/null +++ b/lib/docs/filters/qt/entries.rb @@ -0,0 +1,139 @@ +module Docs + class Qt + class EntriesFilter < Docs::EntriesFilter + def get_name + header = at_css('h1.title + .small-subtitle a') || at_css('h1.title') || at_css('.context h2') + name = header.content + name.sub! %r{ Class$}, ' (class)' + name.sub! %r{ QML Type$}, ' (QML type)' + name.sub! %r{ QML Basic Type$}, ' (QML basic type)' + + # Add '(class)' to the class pages where the subtitle name is used (e.g. qset-const-iterator.html) + if at_css('h1.title').content.strip.end_with?(' Class') and !name.include?('(class)') + name = "#{name} (class) " + end + + name + end + + def get_type + breadcrumb = css('#main_title_bar + ul li') + category = if breadcrumb.length < 3 + then 'Qt' + else breadcrumb.at(1).content + end + + if category == 'Qt' + return 'Qt Platforms' if name.include? ' for ' or name == 'Qt Platform Abstraction' + return 'Qt Quick' if name == 'Qt Quick Test' or name == 'Qt Quick Test Reference Documentation' + + alwaysInQt = ["Qt Configure Options", "Qt Image Formats"] + category = name if name.start_with?('Qt ') && !alwaysInQt.include?(name) + end + + qtPlatformsTypes = ['Qt Platform Headers', 'Qt Android Extras', 'Qt Mac Extras', 'Qt Windows Extras', 'Qt X11 Extras'] + return 'Qt Platforms' if qtPlatformsTypes.include? category + + category.sub! ' Manual', '' + category + end + + def include_default_entry? + name != 'All Classes' and name != 'All QML Types' + end + + def additional_entries + entries = [] + titles = [] + + className = at_css('h1.title').content.strip.sub ' Class', '' + displayedClassName = className + alternativeClassName = at_css('h1.title + .small-subtitle a') + displayedClassName = alternativeClassName.content if alternativeClassName + + # Functions signatures + css('h3.fn').each do |node| + header = node.clone + + # Skip typenames + next if header.content.strip.start_with? 'typename ' + + # Remove leading + header.children.css('a[name]').remove + + # Remove leading tag (virtual/static/… attributes) + code = header.children.first + code.remove if code.name == 'code' + + # Remove leading ‘const’ + header.children.first.remove if header.content.strip.start_with? 'const ' + + # Remove return type + returnType = header.children.first + returnType.remove if returnType['class'] == 'type' + + title = header.content.strip + + # Remove leading '&'/'*' + title[0] = '' if title[0] == '&' || title[0] == '*' + + # Ignore operator overloads + next if title.start_with? 'operator' + + # Remove function parameters + title.sub! %r{\(.*\)}, '()' + + # Remove template generics + title.sub! %r{^<.*> }, '' + + # Remove ‘const’ at the end + title.sub! %r{ const$}, '' + + # Enum/typedef formatting + title.sub! %r{(enum|typedef) (.*)}, '\2 (\1)' + + # Remove property type + title = "#{displayedClassName}::#{title}" if title.sub! %r{ : .*$}, '' + + # Replace the class name by the alternative class name if available + title.sub! className, displayedClassName if alternativeClassName + + unless titles.include? title # Remove duplicates (function overloading) + entries << [title, header['id']] + titles.push title + end + end + + # QML properties/functions + qmlTypeName = at_css('h1.title').content.sub ' QML Type', '' + css('.qmlproto').each do |node| + title = node.content.strip + id = node.at_css('tr')['id'] + + # Remove options + title.sub! %r{^\[.*\] }, '' + + # Remove function parameters + title.sub! %r{\(.*\)}, '()' + + # Remove property type + title.sub! %r{ : .*$}, '' + + # Remove return type + title.sub! %r{.* }, '' + + # Remove return type + title.sub! %r{.* }, '' + + title = "#{qmlTypeName}.#{title.strip}" + unless titles.include? title # Remove duplicates (function overloading) + entries << [title, id] + titles.push title + end + end + + entries + end + end + end +end diff --git a/lib/docs/scrapers/qt.rb b/lib/docs/scrapers/qt.rb new file mode 100644 index 00000000..c4ff2db9 --- /dev/null +++ b/lib/docs/scrapers/qt.rb @@ -0,0 +1,121 @@ +module Docs + class Qt < UrlScraper + self.name = 'Qt' + self.type = 'qt' + self.initial_paths = %w(classes.html qmltypes.html) + self.root_path = 'index.html' + self.links = { + home: 'https://www.qt.io', + code: 'https://code.qt.io/cgit/' + } + + html_filters.push 'qt/entries', 'qt/clean_html' + + options[:container] = '.main' + + options[:skip_patterns] = [ + # License, copyright attributions + /3rdparty/, + /attribution/, + /license/, + /licensing/, + + # Examples, guides, tutorials + /example/, + /guide$/, + /tutorial/, + /porting/, + /usecase/, + /topic/, + /^modelview/, + /deploy(ing|ment)/, + /building/, + + # Old versions, changelog + /obsolete/, + /compatibility/, + /^whatsnew/, + /^newclasses/, + + # Deprecated modules + /(qtopengl|qgl)/, + /qt?script/, + + # Indexes + /members/, + /module/, + /overview/, + /^qopenglfunctions/, + + # Tooling + /^(qt)?(linguist|assistant|qdbusviewer)/, + ] + + options[:skip] = [ + "qt5-intro.html", + "compatmap.html", + + # Indexes + "classes.html", + "qtmodules.html", + "modules-qml.html", + "modules-cpp.html", + "functions.html", + "namespaces.html", + "qmltypes.html", + "qt3d-qml.html", + "qmlbasictypes.html", + "guibooks.html", + "annotated.html", + "overviews-main.html", + "reference-overview.html", + + # Tutorials + "qtvirtualkeyboard-build.html", + + # Copyright + "trademarks.html", + "lgpl.html", + "bughowto.html", + + # Changelogs + "changes.html", + "qtlocation-changes.html", + "sourcebreaks.html", + + # Best practice guides + "accessible.html", + "accessible-qtquick.html", + "sharedlibrary.html", + "exceptionsafety.html", + "scalability.html", + "session.html", + "appicon.html", + "accelerators.html", + + # Other + "ecmascript.html", + "qtremoteobjects-interaction.html", + ] + + options[:attribution] = <<-HTML + © The Qt Company Ltd
+ Licensed under the GNU Free Documentation License, Version 1.3. + HTML + + version '5.11' do + self.release = '5.11' + self.base_url = 'https://doc.qt.io/qt-5/' + end + + version '5.9' do + self.release = '5.9' + self.base_url = 'https://doc.qt.io/qt-5.9/' + end + + version '5.6' do + self.release = '5.6' + self.base_url = 'https://doc.qt.io/qt-5.6/' + end + end +end diff --git a/public/icons/docs/qt/16.png b/public/icons/docs/qt/16.png new file mode 100644 index 0000000000000000000000000000000000000000..9d601d7372d07645802e30ffc933ff52543cec1e GIT binary patch literal 456 zcmV;(0XP1MP)-z`0c=cc3_pRkzyOHN z$;`oUqs25_XoxL_J3 z3_#9Ll!^d*0pw&SAsdFqyFFlqAO3t~@D_1lU}0otI0Xz77(g*#``f(?U;ln((B;u& zkYE#I`1a>J11!LLA5CYl6|i9V4}{2o(eZ2$st8n;iGhisO}UC;$%{2`Lr^p_F#cs^ y{GX1~0A$7JY(_@LUyKY)(R+4P)4K(2nO&j0rjiTml+ zjcQ1$r_Qba!l~YeT+&olL7-ltM3bHoi<=Eea2V5Il`ZhA0jTu)6QHOPxdei!UeFs} zYFmu5^z|s1l&_IhqT|VJ6GXI z)&WS8gs#9RZZz3oM!sbhmZTP9(d2okd|QQQ!>yX_)s7Wd<8b3fZ+(IRXsXeOMNYwi z%w631wccB(?z~J}gm59d(S{Sb$B}KGhC@^LVt?DwXytL76p?JPtq?2-PiP3|J8LxO zOum0~5Er|yqAI5nGgD^3Wy(N+jN(w%KFmtV;U}K$w|Di^YMT7yQ8=YLXH}E-Dho47O zKL&#y*p$h9Iyy$WQTl8*&w|@tj5_+&H9gm9ixGH3zPL6RQ5b+(Hgl!nkXNWIOW{4n zO2x)Teu1q3CVF0gu@3{VKOCC%=zEp28H#r*ydNF9zEhG9r;WUGIw{d>tAq?P& zrx|SHnd#!$=h_jG=kH|NANw0m zFhzs`FrhOY7r_GAmaz$0NiKftm2c7j?+--J_ Date: Sun, 12 Aug 2018 18:10:30 -0400 Subject: [PATCH 7/7] Finish Qt scraper --- assets/images/docs-2.png | Bin 19197 -> 19346 bytes assets/images/docs-2@2x.png | Bin 46805 -> 47420 bytes assets/javascripts/news.json | 4 +- assets/stylesheets/global/_icons.scss | 1 + assets/stylesheets/pages/_qt.scss | 58 +------------------------- lib/docs/filters/qt/clean_html.rb | 14 ++++++- lib/docs/filters/qt/entries.rb | 50 +++++++++++----------- lib/docs/scrapers/qt.rb | 2 +- public/icons/docs-2.pxm | Bin 1312856 -> 1343093 bytes public/icons/docs-2@2x.pxm | Bin 1419962 -> 1456026 bytes public/icons/docs/qt/16.png | Bin 456 -> 362 bytes public/icons/docs/qt/16@2x.png | Bin 986 -> 681 bytes 12 files changed, 44 insertions(+), 85 deletions(-) diff --git a/assets/images/docs-2.png b/assets/images/docs-2.png index 089ecbded23ea65f60e613809f7887a40f9a376f..2af0f5b90dd7a33c12a4d8514446be6b527b753e 100644 GIT binary patch delta 9896 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 delta 14415 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 diff --git a/assets/javascripts/news.json b/assets/javascripts/news.json index ffdb2615..aff770f4 100644 --- a/assets/javascripts/news.json +++ b/assets/javascripts/news.json @@ -1,7 +1,7 @@ [ [ - "2018-08-06", - "New documentation:
Dart" + "2018-08-12", + "New documentations: Dart and Qt" ], [ "2018-07-29", "New documentations: Bash, Graphite and Pygame" diff --git a/assets/stylesheets/global/_icons.scss b/assets/stylesheets/global/_icons.scss index 14c12346..42e5be23 100644 --- a/assets/stylesheets/global/_icons.scss +++ b/assets/stylesheets/global/_icons.scss @@ -177,3 +177,4 @@ ._icon-pygame:before { background-position: -5rem -3rem; @extend %doc-icon-2; } ._icon-bash:before { background-position: -6rem -3rem; @extend %doc-icon-2; } ._icon-dart:before { background-position: -7rem -3rem; @extend %doc-icon-2; } +._icon-qt:before { background-position: -8rem -3rem; @extend %doc-icon-2; } diff --git a/assets/stylesheets/pages/_qt.scss b/assets/stylesheets/pages/_qt.scss index 8efecaaf..db2554ce 100644 --- a/assets/stylesheets/pages/_qt.scss +++ b/assets/stylesheets/pages/_qt.scss @@ -1,63 +1,9 @@ ._qt { @extend %simple; - h1 { - margin-top: 0; - @extend %lined-heading; - } - - // Home page - .landingicons { - .icons1of3 { - display: flex; - flex-wrap: wrap; - align-items: center; - margin: 1em 0; - - @if $style == 'dark' { - &:nth-child(3) img { - filter: invert(1) hue-rotate(180deg) brightness(1.5) - } - } - } - - h2 { - flex: 1; - margin: 0; - margin-left: 10px; - } - - h2 + p { - width: 100%; - padding-left: 70px; - } - - .centerAlign, - .centerAlign img { // Icon - width: 60px; - height: 60px; - margin: 0; - } - } - - // Syntax highlighting - .pre { - .operator { @extend .token, .operator; } - .number { @extend .token, .number; } - .keyword { @extend .token, .keyword; } - .type { @extend .token, .function; } - .type a { color: inherit; } - .pun, .comment { @extend .token, .punctuation; } - .kwd, .preprocessor { @extend .token, .keyword; } - .str, .string { @extend .token, .string; } - } - // Function headers - h3.fn code { - @extend %label; + h3.fn > code { float: right; - font-size: .8em; - padding: 0; - margin-right: -.5em; + color: $textColorLight; } } diff --git a/lib/docs/filters/qt/clean_html.rb b/lib/docs/filters/qt/clean_html.rb index 18e57baa..f8f7ebd0 100644 --- a/lib/docs/filters/qt/clean_html.rb +++ b/lib/docs/filters/qt/clean_html.rb @@ -3,17 +3,27 @@ module Docs class CleanHtmlFilter < Filter def call # Remove unneeded elements - css('.copy-notice, .navigationbar, .headerNavi, .footerNavi, .sidebar, .toc, #ec_toggle').remove + css('.copy-notice, .navigationbar, .headerNavi, .footerNavi, .sidebar, .toc, #ec_toggle', '.landingicons img', 'br').remove # QML property/method header css('.qmlproto').each do |node| id = node.at_css('tr')['id'] node.inner_html = node.at_css('td').inner_html node.name = 'h3' - node.add_class '_qml_header' node['id'] = id end + css('.main-rounded', '.content', '.line', '.context', '.descr', '.types', '.func', '.table', 'div:not([class])', '.landing', '.col-1', '.heading', '.qmlitem', '.qmldoc', 'div.pre').each do |node| + node.before(node.children).remove + end + + css('pre').each do |node| + node.content = node.content + node['data-language'] = 'cpp' if node['class'].include?('cpp') + node['data-language'] = 'qml' if node['class'].include?('qml') + node.remove_attribute('class') + end + doc end end diff --git a/lib/docs/filters/qt/entries.rb b/lib/docs/filters/qt/entries.rb index c9e172d0..64d342f1 100644 --- a/lib/docs/filters/qt/entries.rb +++ b/lib/docs/filters/qt/entries.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Docs class Qt class EntriesFilter < Docs::EntriesFilter @@ -9,7 +11,7 @@ module Docs name.sub! %r{ QML Basic Type$}, ' (QML basic type)' # Add '(class)' to the class pages where the subtitle name is used (e.g. qset-const-iterator.html) - if at_css('h1.title').content.strip.end_with?(' Class') and !name.include?('(class)') + if at_css('h1.title').content.strip.end_with?(' Class') && !name.include?('(class)') name = "#{name} (class) " end @@ -19,34 +21,34 @@ module Docs def get_type breadcrumb = css('#main_title_bar + ul li') category = if breadcrumb.length < 3 - then 'Qt' + then 'Qt'.dup else breadcrumb.at(1).content end if category == 'Qt' - return 'Qt Platforms' if name.include? ' for ' or name == 'Qt Platform Abstraction' - return 'Qt Quick' if name == 'Qt Quick Test' or name == 'Qt Quick Test Reference Documentation' + return 'Qt Platforms' if name.include?(' for ') || name == 'Qt Platform Abstraction' + return 'Qt Quick' if name == 'Qt Quick Test' || name == 'Qt Quick Test Reference Documentation' - alwaysInQt = ["Qt Configure Options", "Qt Image Formats"] + alwaysInQt = ['Qt Configure Options', 'Qt Image Formats'] category = name if name.start_with?('Qt ') && !alwaysInQt.include?(name) end qtPlatformsTypes = ['Qt Platform Headers', 'Qt Android Extras', 'Qt Mac Extras', 'Qt Windows Extras', 'Qt X11 Extras'] - return 'Qt Platforms' if qtPlatformsTypes.include? category + return 'Qt Platforms' if qtPlatformsTypes.include?(category) - category.sub! ' Manual', '' + category.remove!(' Manual') category end def include_default_entry? - name != 'All Classes' and name != 'All QML Types' + name != 'All Classes' && name != 'All QML Types' end def additional_entries entries = [] titles = [] - className = at_css('h1.title').content.strip.sub ' Class', '' + className = at_css('h1.title').content.strip.remove(' Class') displayedClassName = className alternativeClassName = at_css('h1.title + .small-subtitle a') displayedClassName = alternativeClassName.content if alternativeClassName @@ -56,7 +58,7 @@ module Docs header = node.clone # Skip typenames - next if header.content.strip.start_with? 'typename ' + next if header.content.strip.start_with?('typename ') # Remove leading header.children.css('a[name]').remove @@ -66,7 +68,7 @@ module Docs code.remove if code.name == 'code' # Remove leading ‘const’ - header.children.first.remove if header.content.strip.start_with? 'const ' + header.children.first.remove if header.content.strip.start_with?('const ') # Remove return type returnType = header.children.first @@ -78,57 +80,57 @@ module Docs title[0] = '' if title[0] == '&' || title[0] == '*' # Ignore operator overloads - next if title.start_with? 'operator' + next if title.start_with?('operator') # Remove function parameters title.sub! %r{\(.*\)}, '()' # Remove template generics - title.sub! %r{^<.*> }, '' + title.remove!(%r{^<.*> }) # Remove ‘const’ at the end - title.sub! %r{ const$}, '' + title.remove!(%r{ const$}) # Enum/typedef formatting title.sub! %r{(enum|typedef) (.*)}, '\2 (\1)' # Remove property type - title = "#{displayedClassName}::#{title}" if title.sub! %r{ : .*$}, '' + title = "#{displayedClassName}::#{title}" if title.sub!(%r{ : .*$}, '') # Replace the class name by the alternative class name if available - title.sub! className, displayedClassName if alternativeClassName + title = title.sub(className, displayedClassName) if alternativeClassName - unless titles.include? title # Remove duplicates (function overloading) + unless titles.include?(title) # Remove duplicates (function overloading) entries << [title, header['id']] titles.push title end end # QML properties/functions - qmlTypeName = at_css('h1.title').content.sub ' QML Type', '' + qmlTypeName = at_css('h1.title').content.remove(' QML Type', '') css('.qmlproto').each do |node| title = node.content.strip id = node.at_css('tr')['id'] # Remove options - title.sub! %r{^\[.*\] }, '' + title.remove!(%r{^\[.*\] }) # Remove function parameters title.sub! %r{\(.*\)}, '()' # Remove property type - title.sub! %r{ : .*$}, '' + title.remove!(%r{ : .*$}) # Remove return type - title.sub! %r{.* }, '' + title.remove!(%r{.* }) # Remove return type - title.sub! %r{.* }, '' + title.remove!(%r{.* }) title = "#{qmlTypeName}.#{title.strip}" - unless titles.include? title # Remove duplicates (function overloading) + unless titles.include?(title) # Remove duplicates (function overloading) entries << [title, id] - titles.push title + titles.push(title) end end diff --git a/lib/docs/scrapers/qt.rb b/lib/docs/scrapers/qt.rb index c4ff2db9..412eca6d 100644 --- a/lib/docs/scrapers/qt.rb +++ b/lib/docs/scrapers/qt.rb @@ -12,7 +12,7 @@ module Docs html_filters.push 'qt/entries', 'qt/clean_html' options[:container] = '.main' - + options[:max_image_size] = 156_000 options[:skip_patterns] = [ # License, copyright attributions /3rdparty/, diff --git a/public/icons/docs-2.pxm b/public/icons/docs-2.pxm index 7039ec5f5990382c85ad1fc5281d6ff66b1c65a2..1d81916effc9a4e2f90794f5dfe0ebc37df39971 100644 GIT binary patch delta 25224 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 Q&>pB&0Cak)MnmZT00V1TPyhe` diff --git a/public/icons/docs-2@2x.pxm b/public/icons/docs-2@2x.pxm index e0dd2df57bc1442b11f2f2fc43403530cc279d69..ca26ef6fa89c607d0acb6e139d45a12e6f98d3fc 100644 GIT binary patch delta 47841 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 Um+wp^R+xFgqLlbH}GW!LkXOmk-966jouW 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 B7VrQ7 diff --git a/public/icons/docs/qt/16.png b/public/icons/docs/qt/16.png index 9d601d7372d07645802e30ffc933ff52543cec1e..3c14a85f3e17b9591b8a49a6bb17dbb9291dd3e6 100644 GIT binary patch delta 336 zcmV-W0k8hZ1L^{hBYy!gNkl}f9BYyw{XF*Lt006O%3;baP0004hNkliJ?uoiebr%HE=^vG%_&$Wn}!Hj?(~S#VF`(Mn=Y8j0{ZCdyQ7FL6@UH Z9{@Q_d&N8*2Q~lz002ovPDHLkV1kwJzvTb` diff --git a/public/icons/docs/qt/16@2x.png b/public/icons/docs/qt/16@2x.png index 5140eb23b8d116709088c80476cd3df126af4221..858b2245f0b51aebffe5f33a24e88819b3200d53 100644 GIT binary patch delta 658 zcmV;D0&V@;2dM>+BYy&LNklO)5$?@^*(~JcbMC9#K~wV9=P6p zKd^h?=g2>hmjfSM7OM%Pvi<6 z+GkcTgUQ^QRp#$s^uGtW+5I4}0HqakKqDTx+xx_(Erl-u4M=1_Gh{O~-|Kw}LftRm zk&p%xlQvZ+-VJ@h=i#3i(hi%45`WXLZPj?d01E&B07*qoM6N<$f*$=w<^TWy delta 965 zcmV;$13LVv1=4K(2nO&j0 zrjQ)J903o&r?O(hN%!&Ky){SaNs;ADa|H7%>hg{NBRzaX%p+u9O5sRA* zNpKj`V3jTKs{yF=`V*k261fC|s9w+;UTRy6vh?*Rn3S)PRifh2U=wP3YVp$dMx!%i zzI8UT%$a!q?SBKFd)uOT@eayZ&euCv;Yij2NRouEz$b1r*EcZJvfh zQ}<$j+tFy{ahw#9Y_Y8nEC^3%2KRyML~tDyI@NQ)a+r%0PgO;!xH; z%u31OCW~wf;50cnev@XSdH6ZUV;{l*@+`Srw$1w%Argw!L!+lfqp|*Y;eCZ=sYM#i zl{5wHX7Hf@p+=8IgaM=*om{pz@Htk8pGQTeu1q3CVF0gu@3{VKOCC%= zzEp28H#r*ydNF9zEhG9r;WUGIw{d>tAq?P&r+*o2~GZ+8_HfcXIs8 zXg^;2-fMiH8g95uvrD6mg$SFl%in`reGS->z7FN-8&G6hNFBYSX*XhyH4khSxGK_>y>ZP z0DtcfM9=trI`akA+gLbhE+5eWItjF0gdn+_O2b7Hii8;sqn($7m8D`zIo3K?^7-D= zdKi79Uw)w-pDjTO340(`h1I&#-;HkiQ#wmC^EvR9uj*sd55|fnbf#JHO9qsWSptzI zFKx6_?bRr;FGXEny+}+