From 8902d5331d997aa5ec4de326fec7020282280723 Mon Sep 17 00:00:00 2001 From: Thibaut Courouble Date: Mon, 4 Sep 2017 09:24:35 -0400 Subject: [PATCH] Finish D scraper --- assets/images/docs-2.png | Bin 14072 -> 14773 bytes assets/images/docs-2@2x.png | Bin 32991 -> 35391 bytes assets/javascripts/news.json | 2 +- .../templates/pages/about_tmpl.coffee | 5 ++ assets/javascripts/vendor/prism.js | 66 ++++++++++++++++- assets/stylesheets/global/_icons.scss | 1 + assets/stylesheets/pages/_d.scss | 45 ++--------- lib/docs/filters/d/clean_html.rb | 70 +++++++++++++++++- lib/docs/filters/d/entries.rb | 43 ++++++++--- lib/docs/scrapers/d.rb | 24 ++++-- public/icons/docs/d/16.png | Bin 784 -> 661 bytes public/icons/docs/d/16@2x.png | Bin 1965 -> 1763 bytes public/icons/docs/d/SOURCE | 1 + 13 files changed, 196 insertions(+), 61 deletions(-) create mode 100644 public/icons/docs/d/SOURCE diff --git a/assets/images/docs-2.png b/assets/images/docs-2.png index 208aeadeb8dd7597c716dee93a3007be4aca3bfa..0aa1a1051970958a5ec97cca842cd9acae7e4445 100644 GIT binary patch delta 5129 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 Yu~?zKYEvsOTs+C|XDUKN678Hvj+t delta 4423 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 z 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 and Vulkan" + "New documentations: D, Nim and Vulkan" ], [ "2017-07-23", "New documentation: Godot" diff --git a/assets/javascripts/templates/pages/about_tmpl.coffee b/assets/javascripts/templates/pages/about_tmpl.coffee index 11be6211..28884fc2 100644 --- a/assets/javascripts/templates/pages/about_tmpl.coffee +++ b/assets/javascripts/templates/pages/about_tmpl.coffee @@ -193,6 +193,11 @@ credits = [ '2012-2017 Manas Technology Solutions', 'Apache', 'https://raw.githubusercontent.com/crystal-lang/crystal/master/LICENSE' + ], [ + 'D', + '1999-2017 The D Language Foundation', + 'Boost', + 'https://raw.githubusercontent.com/dlang/phobos/master/LICENSE_1_0.txt' ], [ 'D3.js', '2010-2017 Michael Bostock', diff --git a/assets/javascripts/vendor/prism.js b/assets/javascripts/vendor/prism.js index 288a9c7f..b55bdecd 100644 --- a/assets/javascripts/vendor/prism.js +++ b/assets/javascripts/vendor/prism.js @@ -1,4 +1,4 @@ -/* http://prismjs.com/download.html?themes=prism&languages=markup+css+clike+javascript+c+cpp+coffeescript+ruby+elixir+erlang+go+java+json+kotlin+lua+nginx+nim+perl+php+python+crystal+rust+scss+sql+typescript */ +/* http://prismjs.com/download.html?themes=prism&languages=markup+css+clike+javascript+c+cpp+coffeescript+ruby+d+elixir+erlang+go+java+json+kotlin+lua+nginx+nim+perl+php+python+crystal+rust+scss+sql+typescript */ var _self = (typeof window !== 'undefined') ? window // if in browser : ( @@ -976,6 +976,70 @@ delete Prism.languages.coffeescript['template-string']; } ]; }(Prism)); +Prism.languages.d = Prism.languages.extend('clike', { + 'string': [ + // r"", x"" + /\b[rx]"(\\.|[^\\"])*"[cwd]?/, + // q"[]", q"()", q"<>", q"{}" + /\bq"(?:\[[\s\S]*?\]|\([\s\S]*?\)|<[\s\S]*?>|\{[\s\S]*?\})"/, + // q"IDENT + // ... + // IDENT" + /\bq"([_a-zA-Z][_a-zA-Z\d]*)(?:\r?\n|\r)[\s\S]*?(?:\r?\n|\r)\1"/, + // q"//", q"||", etc. + /\bq"(.)[\s\S]*?\1"/, + // Characters + /'(?:\\'|\\?[^']+)'/, + + /(["`])(\\.|(?!\1)[^\\])*\1[cwd]?/ + ], + + 'number': [ + // The lookbehind and the negative look-ahead try to prevent bad highlighting of the .. operator + // Hexadecimal numbers must be handled separately to avoid problems with exponent "e" + /\b0x\.?[a-f\d_]+(?:(?!\.\.)\.[a-f\d_]*)?(?:p[+-]?[a-f\d_]+)?[ulfi]*/i, + { + pattern: /((?:\.\.)?)(?:\b0b\.?|\b|\.)\d[\d_]*(?:(?!\.\.)\.[\d_]*)?(?:e[+-]?\d[\d_]*)?[ulfi]*/i, + lookbehind: true + } + ], + + // In order: $, keywords and special tokens, globally defined symbols + 'keyword': /\$|\b(?:abstract|alias|align|asm|assert|auto|body|bool|break|byte|case|cast|catch|cdouble|cent|cfloat|char|class|const|continue|creal|dchar|debug|default|delegate|delete|deprecated|do|double|else|enum|export|extern|false|final|finally|float|for|foreach|foreach_reverse|function|goto|idouble|if|ifloat|immutable|import|inout|int|interface|invariant|ireal|lazy|long|macro|mixin|module|new|nothrow|null|out|override|package|pragma|private|protected|public|pure|real|ref|return|scope|shared|short|static|struct|super|switch|synchronized|template|this|throw|true|try|typedef|typeid|typeof|ubyte|ucent|uint|ulong|union|unittest|ushort|version|void|volatile|wchar|while|with|__(?:(?:FILE|MODULE|LINE|FUNCTION|PRETTY_FUNCTION|DATE|EOF|TIME|TIMESTAMP|VENDOR|VERSION)__|gshared|traits|vector|parameters)|string|wstring|dstring|size_t|ptrdiff_t)\b/, + 'operator': /\|[|=]?|&[&=]?|\+[+=]?|-[-=]?|\.?\.\.|=[>=]?|!(?:i[ns]\b|<>?=?|>=?|=)?|\bi[ns]\b|(?:<[<>]?|>>?>?|\^\^|[*\/%^~])=?/ +}); + + +Prism.languages.d.comment = [ + // Shebang + /^\s*#!.+/, + // /+ +/ + { + // Allow one level of nesting + pattern: /(^|[^\\])\/\+(?:\/\+[\s\S]*?\+\/|[\s\S])*?\+\//, + lookbehind: true + } +].concat(Prism.languages.d.comment); + +Prism.languages.insertBefore('d', 'comment', { + 'token-string': { + // Allow one level of nesting + pattern: /\bq\{(?:|\{[^}]*\}|[^}])*\}/, + alias: 'string' + } +}); + +Prism.languages.insertBefore('d', 'keyword', { + 'property': /\B@\w*/ +}); + +Prism.languages.insertBefore('d', 'function', { + 'register': { + // Iasm registers + pattern: /\b(?:[ABCD][LHX]|E[ABCD]X|E?(?:BP|SP|DI|SI)|[ECSDGF]S|CR[0234]|DR[012367]|TR[3-7]|X?MM[0-7]|R[ABCD]X|[BS]PL|R[BS]P|[DS]IL|R[DS]I|R(?:[89]|1[0-5])[BWD]?|XMM(?:[89]|1[0-5])|YMM(?:1[0-5]|\d))\b|\bST(?:\([0-7]\)|\b)/, + alias: 'variable' + } +}); Prism.languages.elixir = { // Negative look-ahead is needed for string interpolation // Negative look-behind is needed to avoid highlighting markdown headers in diff --git a/assets/stylesheets/global/_icons.scss b/assets/stylesheets/global/_icons.scss index 566ef90d..c2c62f3d 100644 --- a/assets/stylesheets/global/_icons.scss +++ b/assets/stylesheets/global/_icons.scss @@ -175,3 +175,4 @@ ._icon-godot:before { background-position: -4rem -2rem; @extend %doc-icon-2; } ._icon-nim:before { background-position: -5rem -2rem; @extend %doc-icon-2; @extend %darkIconFix !optional; } ._icon-vulkan:before { background-position: -6rem -2rem; @extend %doc-icon-2; @extend %darkIconFix !optional; } +._icon-d:before { background-position: -7rem -2rem; @extend %doc-icon-2; } diff --git a/assets/stylesheets/pages/_d.scss b/assets/stylesheets/pages/_d.scss index 821b5ce3..b90ab8ec 100644 --- a/assets/stylesheets/pages/_d.scss +++ b/assets/stylesheets/pages/_d.scss @@ -1,44 +1,9 @@ ._d { - > .description, > .documentation-section { padding-left: 1rem; } - > .description > h2, header > h3, > h2 { @extend %block-heading; } - .description > h1 { font-size: 1rem; } - .method-description > h2, h3, h4, h5, h6 { font-size: 1em; } + h2 { @extend %block-heading; } + h3, .d_decl { @extend %block-label, %label-blue; } + .d_decl { @extend %code; } - .d_decl { - font-weight: $boldFontWeight; - @extend %block-label, %label-blue; + p > code, li > code, td > code, dd > code { @extend %label; } - + .d_decl { margin-top: -.5em; } - } - - > .meta { - @extend %note, %note-blue; - - > dd { margin: 0; } - > dd + dt { margin-top: .5em; } - } - - a.method-click-advice { - float: right; - font-size: .75rem; - color: $linkColor; - cursor: pointer; - @extend %user-select-none; - - &:hover { text-decoration: underline; } - } - - .method-description { position: relative; } - - .method-source-code { - display: none; - position: absolute; - z-index: 1; - top: 0; - right: 0; - background: rgba($contentBackground, .95); - box-shadow: 0 1em 1em 1em $contentBackground; - - > pre { margin: 0; } - } + span.red { color: $textColorRed; } } diff --git a/lib/docs/filters/d/clean_html.rb b/lib/docs/filters/d/clean_html.rb index 8beaed51..675816f9 100644 --- a/lib/docs/filters/d/clean_html.rb +++ b/lib/docs/filters/d/clean_html.rb @@ -2,9 +2,75 @@ module Docs class D class CleanHtmlFilter < Filter def call - css('.d_decl > div > span.def-anchor').each do |node| - node.parent.parent['id'] = node['id'] + @doc = at_css("#content") + + css('#tools', '#copyright').remove + + css('td > b', 'h1 > span').each do |node| + node.before(node.children).remove end + + css('span.d_inlinecode').each do |node| + node.name = 'code' + node.remove_attribute('class') + end + + css('.keyval').each do |node| + key = node.at_css('.key') + dt = key.inner_html + dd = if val = node.at_css('.val') + val.inner_html + else + siblings = [] + siblings << key while key = key.next + siblings.map(&:to_html).join + end + node.replace("
#{dt}
#{dd}
") + end + + css('div.summary', 'div.description').each do |node| + node.name = 'p' unless node.at_css('p') + node.css('.blankline').each { |n| n.replace('

') } + end + + css('.d_decl').each do |node| + node['id'] = node.at_css('.def-anchor')['id'].remove(/\A\./) + constraints = node.css('.constraint').remove + node.content = node.content.strip + node.inner_html = node.inner_html.gsub(/;\s*/, '
').remove(/
\z/) + node << "

Constraints:
#{constraints.map(&:content).join('
')}" unless constraints.empty? + end + + css('pre').each do |node| + node.content = node.content + node['data-language'] = 'd' if node['class'] && node['class'].include?('d_code') + end + + css('div', 'code > a > code', 'code > code').each do |node| + node.before(node.children).remove + end + + css('a[href*="#."]').each do |node| + node['href'] = node['href'].sub('#.', '#') + end + + css('tr', 'td', 'code', 'pre', 'p', 'table').remove_attr('class') + css('table').remove_attr('border').remove_attr('cellpadding').remove_attr('cellspacing') + + if base_url.path == '/spec/' + css('a.anchor').each do |node| + node.parent['id'] ||= node['id'] + node.before(node.children).remove + end + + css('center').each do |node| + node.before(node.children).remove + end + + css('.fa-angle-left + a').remove + css('a + .fa-angle-right').each { |node| node.previous_element.remove } + end + doc end end diff --git a/lib/docs/filters/d/entries.rb b/lib/docs/filters/d/entries.rb index 662e5405..c319f59a 100644 --- a/lib/docs/filters/d/entries.rb +++ b/lib/docs/filters/d/entries.rb @@ -2,25 +2,46 @@ module Docs class D class EntriesFilter < Docs::EntriesFilter def get_name - slug.to_s.gsub('_', '.').gsub('/', '.').squish! + name = at_css('h1').content + + if base_url.path == '/spec/' + index = css('.subnav li a').to_a.index(at_css(".subnav li a[href='#{result[:path]}']")) + 1 + name.prepend "#{index}. " + end + + name end def get_type - slug.to_s.sub(/_(.*)/, '') + return 'Reference' if base_url.path == '/spec/' + + if name.start_with?('etc') || name.start_with?('core.stdc.') + name.split('.')[0..2].join('.') + elsif name.start_with?('ddmd') + 'ddmd' + else + name.split('.')[0..1].join('.') + end end def additional_entries - names = [] - css('.book > tr > td > a').each do |x| - span_block = x.at_css('span') - if span_block != nil - elem_name = span_block.text - name = "#{get_name}.#{elem_name}" - type = name.sub(/\..*/,'') - names << [name, "#{slug}#{x['href']}", type] + return [] if root_page? || base_url.path == '/spec/' + + entries = [] + + css('.book > tr > td > a').each do |node| + entries << ["#{self.name}.#{node.content}", node['href'].remove(/\A#/).remove(/\A\./)] + end + + if entries.empty? + css('.quickindex[id]').each do |node| + name = node['id'].remove(/quickindex\.?/) + next if name.empty? || name =~ /\.\d+\z/ + entries << ["#{self.name}.#{name}", name] end end - names + + entries end end end diff --git a/lib/docs/scrapers/d.rb b/lib/docs/scrapers/d.rb index 34786728..7c535a1a 100644 --- a/lib/docs/scrapers/d.rb +++ b/lib/docs/scrapers/d.rb @@ -1,18 +1,30 @@ module Docs class D < UrlScraper - self.release = '2.075.1' + include MultipleBaseUrls + + self.release = '2.076.0' self.type = 'd' - self.base_url = 'http://dlang.org/phobos/' + self.base_urls = ['https://dlang.org/phobos/', 'https://dlang.org/spec/'] + self.root_path = 'index.html' + self.links = { + home: 'https://dlang.org/', + code: 'https://github.com/dlang/phobos' + } html_filters.push 'd/entries', 'd/clean_html' - options[:container] = '#content' + options[:skip] = %w(spec.html) + options[:container] = '.container' + options[:root_title] = 'D Programming Language' options[:title] = false - options[:root_title] = 'D Language' - options[:skip_patterns] = [/#.*/] options[:attribution] = <<-HTML - Copyright © 1999-2017 by the D Language Foundation + © 1999–2017 The D Language Foundation
+ Licensed under the Boost License 1.0. HTML + + def initial_urls + %w(https://dlang.org/phobos/index.html https://dlang.org/spec/intro.html) + end end end diff --git a/public/icons/docs/d/16.png b/public/icons/docs/d/16.png index 548e2658ad969b36c94346b15d77134cd6ca4d54..55dc0d1a9446b2af6cbc18683c357b100f7b5630 100644 GIT binary patch delta 637 zcmV-@0)qXJ29*VnBYy&1NklD35{Pr8-~YQYXp&&# z7_}BR8WI2UtCNKba%X4ExXVm!HXoe)?Kj0}`}VRCAuyqz5r0XiL;s(D=)UqQ32+{c zBCz1qmvLU^zWd>R(?5B#xZv<%yX^AI0vE@GnGC3+ekOwf^&76|HNf z!G}!Vw3)VZYTtajU;+^p)exY2@+6gSzeR!&$!3|dVLh|AZDrcpwFJfxgdsCGZQ`%T z9>@Oji$u$pIe(+p3hGkfpjzYf)z`w}#U#g$rLM1f^9>dpI+%K+&XFmXnRZ}5W1oJC zPM#uxMc_rD&Q|O&O!@1|4!=5=qv~(%9(@9HebU0KGAZi`a^Y*D>dexm7!z`}N~bMhYUK7a0R#fJ9N+53bR~wmaUVJ{l*AbAF4nM@R9UO!)U7 X>B2E~(k6_%00000NkvXXu0mjfsDMB6 delta 761 zcmVLb3(Era^KocR0007?NklgA34)+)yB4*Gf;L6bu1LygLW1arrGMiO6eEAtIO?1Cx?yH9+x1*n!h*7G z{PJ>;2zyIF8(qzKUWjjE!RU%}Zn=A2#EZmXL;?@_A90N8`S>{{akl z2AQ~~_I8Xl6)<}D4r)~d;gW$SZ54;`r^fO6`W4uuCS4DDEh*7%jCC_OaN!bmbsoax zivq%lZ$LIr2|7*~peBoaTL)I>=TRAa1y53EQeCjR#(xT97LN6xVaHB5TWV4Ds|m2B z`4_KLAnWUK@cc!zo;sa6PFAD_L8^#Jmn~fHkd8tqnr?C_Ax2Ci5%Q8Q>o7oMembHI z%Mf4>HDe55+Dt`2lfx0B1fnQEgrLjj7}Th;gji?@=@5)>tR4`+3{r}q$sjPnWMBZo zDy)bV`G4SLv&eNGMRjHx!R!oj`wu59JnGK3?ty`*F3crNO?(PKgM`t`N!(T_;KYqv z`1<@Qh9BHR&&}I#*qQYK9UXj&rH@6_Ffa8WF(g8`_!|@N-$B|k0a_dxK~!GCRI$j} zaOh)*xzC?4`S3nuxeVpH&}1zhUGCQ&+ZL`YBXSb|Dw&EF`$1l*H#E$mR7qci#k*_{ z`uIu6j@~{D&CkIp{eTSETc)MUm`;*3+p~T$*`!m-^APXeiz8>bOlF;bmP#mnC?c#Z r!y^4nwmD&8bh~x+XzA|8cKY=f>{MhQ+eOT400000NkvXXu0mjf(eq@o diff --git a/public/icons/docs/d/16@2x.png b/public/icons/docs/d/16@2x.png index aa90e110f90010a14c3f94614f1b2d92f69afe00..c3b02b96128bbc08960adf365643b5d7693049d4 100644 GIT binary patch delta 1748 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