From d5219634ff0128aacc740800b7f454d4e92e987d Mon Sep 17 00:00:00 2001 From: Thibaut Courouble Date: Sun, 31 Jan 2016 13:39:22 -0500 Subject: [PATCH] Finish Erlang documentation --- assets/images/icons.png | Bin 37015 -> 37340 bytes assets/images/icons@2x.png | Bin 97762 -> 98465 bytes assets/javascripts/news.json | 2 +- .../templates/pages/about_tmpl.coffee | 5 + assets/stylesheets/global/_icons.scss | 1 + assets/stylesheets/pages/_erlang.scss | 20 ++-- lib/docs/filters/erlang/attribution.rb | 9 -- lib/docs/filters/erlang/clean_html.rb | 104 +++++++++++++++++- lib/docs/filters/erlang/entries.rb | 48 ++++---- lib/docs/filters/erlang/pre_clean_html.rb | 10 ++ lib/docs/scrapers/erlang.rb | 47 ++++---- public/icons/docs/erlang/16.png | Bin 637 -> 407 bytes public/icons/docs/erlang/16@2x.png | Bin 1869 -> 725 bytes public/icons/docs/erlang/SOURCE | 3 +- 14 files changed, 170 insertions(+), 79 deletions(-) delete mode 100644 lib/docs/filters/erlang/attribution.rb create mode 100644 lib/docs/filters/erlang/pre_clean_html.rb diff --git a/assets/images/icons.png b/assets/images/icons.png index 220fecf93e39afa38139c3f09e53c148fd749cbc..4a8fe500d68ed8634ec0c477e655b3cada41a321 100644 GIT binary patch delta 7579 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 diff --git a/assets/images/icons@2x.png b/assets/images/icons@2x.png index 6bc93bdfe0ecd65d79e6e27ff580f10c65947fe3..6d27e38e4840e6bdcff11157811aa709941768f8 100644 GIT binary patch delta 2382 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 TI=%$~00000NkvXXu0mjfIz2fc diff --git a/assets/javascripts/news.json b/assets/javascripts/news.json index fc3c35bd..d1bd731b 100644 --- a/assets/javascripts/news.json +++ b/assets/javascripts/news.json @@ -1,7 +1,7 @@ [ [ "2016-01-31", - "New documentation: Tcl/Tk" + "New documentations: Erlang and Tcl/Tk" ], [ "2016-01-24", "“Multi-version support” has landed!\nClick Select documentation to pick which versions to use. More versions will be added in the coming weeks.\nIf you notice any bugs, please report them on GitHub." diff --git a/assets/javascripts/templates/pages/about_tmpl.coffee b/assets/javascripts/templates/pages/about_tmpl.coffee index 19e7343a..ce8ded53 100644 --- a/assets/javascripts/templates/pages/about_tmpl.coffee +++ b/assets/javascripts/templates/pages/about_tmpl.coffee @@ -154,6 +154,11 @@ credits = [ '2012 Plataformatec', 'Apache', 'https://raw.githubusercontent.com/elixir-lang/elixir/master/LICENSE' + ], [ + 'Erlang', + '1999-2015 Ericsson AB', + 'Apache', + 'https://raw.githubusercontent.com/erlang/otp/maint/LICENSE.txt' ], [ 'Express', '2009-2015 TJ Holowaychuk', diff --git a/assets/stylesheets/global/_icons.scss b/assets/stylesheets/global/_icons.scss index c9b7d110..df20b04d 100644 --- a/assets/stylesheets/global/_icons.scss +++ b/assets/stylesheets/global/_icons.scss @@ -123,3 +123,4 @@ ._icon-relay:before { background-position: -8rem -9rem; } ._icon-phoenix:before { background-position: -9rem -9rem; } ._icon-tcl_tk:before { background-position: 0 -10rem; } +._icon-erlang:before { background-position: -1rem -10rem; } diff --git a/assets/stylesheets/pages/_erlang.scss b/assets/stylesheets/pages/_erlang.scss index aa2ed0f2..317699dd 100644 --- a/assets/stylesheets/pages/_erlang.scss +++ b/assets/stylesheets/pages/_erlang.scss @@ -1,14 +1,8 @@ -.REFBODY { - margin-bottom: 20px; -} -.REFBODY+p { - margin-top: 30px; - margin-bottom: 5px; -} -.function-name { - font-family: $monoFont; - display: block; - margin: 0; - min-height: none; - font-weight: bold; +._erlang { + @extend %simple; + + h3.code { @extend %code; } + .note { @extend %note; } + .warning { @extend %note, %note-red; } + .note .label, .warning .label { font-weight: bold; } } diff --git a/lib/docs/filters/erlang/attribution.rb b/lib/docs/filters/erlang/attribution.rb deleted file mode 100644 index 57a03767..00000000 --- a/lib/docs/filters/erlang/attribution.rb +++ /dev/null @@ -1,9 +0,0 @@ -module Docs - class Erlang - class AttributionFilter < Docs::AttributionFilter - def attribution_link - %(#{base_url}) - end - end - end -end diff --git a/lib/docs/filters/erlang/clean_html.rb b/lib/docs/filters/erlang/clean_html.rb index 6c23c8db..47535e33 100644 --- a/lib/docs/filters/erlang/clean_html.rb +++ b/lib/docs/filters/erlang/clean_html.rb @@ -2,10 +2,106 @@ module Docs class Erlang class CleanHtmlFilter < Filter def call - css('#leftnav').remove - css('#content .innertube center:last-child').remove - css('.function-name+br').remove - css('#content .footer').remove + @doc = at_css('#content .innertube') + + # frontpage + + css('center:last-child').remove # copyright + + css('center').each do |node| + node.before(node.children).remove + end + + css('> br').remove + + css('> font[size="+1"]:first-child').each do |node| + node.name = 'h1' + end + + css('p > b:first-child:last-child > font[size="+1"]').each do |node| + node = node.parent.parent + node.name = 'h2' + node.content = node.content + end + + css('font').each do |node| + node.before(node.children).remove + end + + # others + + # css('p > br:last-child').remove + + css('a[name]').each do |node| + parent = node.parent + parent = parent.parent while parent.name == 'span' + parent['id'] = node['name'] + node.before(node.children).remove + end + + css('h3').each do |node| + node.name = 'h2' + content = node.content + node.content = content.capitalize if content == content.upcase + end + + css('p > span.bold_code:first-child ~ br:last-child').each do |node| + parent = node.parent + parent.name = 'h3' + parent['class'] = 'code' + parent.css('*:not(a):not(br)').each { |n| n.before(n.children).remove } + node.remove + parent.inner_html = parent.inner_html.strip + end + + css('span.code').each do |node| + node.name = 'code' + end + + css('pre *:not(a)').each do |node| + node.before(node.children).remove + end + + css('pre').each do |node| + node.inner_html = node.inner_html.strip_heredoc + end + + css('.REFBODY').each do |node| + if node.element_children.length == 0 + node.name = 'p' + else + node.before(node.children).remove + end + end + + css('.REFTYPES').each do |node| + next unless node.parent + html = "
"
+          while node['class'] == 'REFTYPES'
+            node.inner_html = node.inner_html.remove(/\n/).gsub('
', "\n") + node.css('*:not(a)').each { |n| n.before(n.children).remove } + html << node.inner_html.strip + "\n" + node = node.next_element + node.previous_element.remove + end + html.strip! + html << "
" + node.before(html) + end + + css('.REFTYPES').remove + + css('table').each do |node| + node.remove_attribute('border') + node.remove_attribute('cellpadding') + node.remove_attribute('cellspacing') + end + + css('td').each do |node| + node.remove_attribute('align') + node.remove_attribute('valign') + end + doc end end diff --git a/lib/docs/filters/erlang/entries.rb b/lib/docs/filters/erlang/entries.rb index 3d438aa4..23050193 100644 --- a/lib/docs/filters/erlang/entries.rb +++ b/lib/docs/filters/erlang/entries.rb @@ -1,43 +1,35 @@ module Docs class Erlang class EntriesFilter < Docs::EntriesFilter - def get_name - at_css('h1').try(:content).try(:strip) + name = at_css('h1').content.strip + name.prepend 'Guide: ' if doc.inner_html.include?('User\'s Guide') + name end def get_type - return nil if 'STDLIB Reference Manual' == name - name + type = subpath[/lib\/(.+?)[\-\/]/, 1] + type << "/#{name}" if type == 'stdlib' && entry_nodes.length >= 10 + type end - def additional_entries - css('div.REFBODY+p > a').map do |node| - - id = node.attribute('name').value - - # Here, "node" represents an empty tag. It will later be removed - # by CleanTextFilter. - # We need to pass its id attribute to another element in order to - # make the function anchors in the sidebar work properly. - node.next_sibling['id'] = id - node.next_sibling['class'] = 'function-name' - - if id == name - # Module index page - [name, id, name] - else - # Erlang functions are identified - # by name + arity (no. of parameters). - # The notation is func_name/arity + def include_default_entry? + !at_css('.frontpage') + end - # Replaces the last hyphen with a slash. - # E.g: to_string-3 becomes to_string/3 - function_name = id.gsub(/\-(?.*)$/, '/\k') - ["#{name}:" + function_name, id, name] - end + def additional_entries + entry_nodes.map do |node| + id = node['name'] + name = id.gsub %r{\-(?.*)\z}, '/\k' + name.remove! 'Module:' + name.prepend "#{self.name}:" + [name, id] end end + + def entry_nodes + @entry_nodes ||= css('div.REFBODY + p > a') + end end end end diff --git a/lib/docs/filters/erlang/pre_clean_html.rb b/lib/docs/filters/erlang/pre_clean_html.rb new file mode 100644 index 00000000..75824b49 --- /dev/null +++ b/lib/docs/filters/erlang/pre_clean_html.rb @@ -0,0 +1,10 @@ +module Docs + class Erlang + class PreCleanHtmlFilter < Filter + def call + css('.flipMenu li[title] > a').remove + doc + end + end + end +end diff --git a/lib/docs/scrapers/erlang.rb b/lib/docs/scrapers/erlang.rb index 2621b920..031df7bc 100644 --- a/lib/docs/scrapers/erlang.rb +++ b/lib/docs/scrapers/erlang.rb @@ -1,40 +1,43 @@ module Docs class Erlang < FileScraper - self.version = '18.1' self.type = 'erlang' - self.dir = File.expand_path('~/devdocs/erlang') - self.base_url = 'http://www.erlang.org/doc/' self.root_path = 'doc/index.html' self.links = { - home: 'http://erlang.org/' + home: 'https://www.erlang.org/', + code: 'https://github.com/erlang/otp' } + html_filters.insert_after 'container', 'erlang/pre_clean_html' html_filters.push 'erlang/entries', 'erlang/clean_html' - # The folder structure of the offline documentation - # differs from the online structure. We need - # to replace the attribution filter to generate the - # right attribution_link - text_filters.replace 'attribution', 'erlang/attribution' + options[:only_patterns] = [/\Alib/] - # Do not scrape these unnecessary links options[:skip_patterns] = [ - /\.pdf$/, - /users_guide\.html$/, - /release_notes\.html$/, - /\/html\/.*_app\.html$/, - /\/html\/unicode_usage\.html$/, - /\/html\/io_protocol\.html$/ + /pdf/, + /release_notes/, + /result/, + /java/, + /\/html\/.*_app\.html\z/, + /_examples\.html\z/, + /\Alib\/edoc/, + /\Alib\/erl_docgen/, + /\Alib\/hipe/, + /\Alib\/ose/, + /\Alib\/test_server/, + /\Alib\/jinterface/, + /\Alib\/wx/, + /\Alib\/ic/, + /\Alib\/Cos/i ] - options[:title] = false - - # Scrape stdlib documentation only - options[:only_patterns] = [/stdlib/] - options[:attribution] = <<-HTML - Copyright © 1999-2015 Ericsson AB
+ © 1999–2015 Ericsson AB
Licensed under the Apache License, Version 2.0. HTML + + version '18' do + self.release = '18.2' + self.dir = '/Users/Thibaut/DevDocs/Docs/Erlang18' + end end end diff --git a/public/icons/docs/erlang/16.png b/public/icons/docs/erlang/16.png index 48c57ae50faa0ee69b5bdeafdcbef61a6cd308cf..7612c8cb5ba61fd131b115bf51c36c812b63c287 100644 GIT binary patch delta 381 zcmV-@0fPSh1eXJlBYy#2NklC-`X*RI2l@?gaZkZ}KgWaD=_p%x0E z76=N6Fj~LK(}V!aL`VKj$Dc6JL5u+Hf_rL!NpOdqs`r!5*<3#vnSdT z3(ifP1fSiGY<5JucB46SI2u1#whWe+FCpE#7iWeJ1=SMa>G|`>#;I20^6c4YAwp|d z+QM>g=~8&iW+V{o*a2$ba@nb|W10QaM+P86d^Q_8zA6BW%lep|o&Y=2(|*Vh{oK|I0;Rs{qbGQ4S%O{Tsod);(8AWZ4c%5 z`Y-IAH}cE?Up!Cw{`@U-L*smM_vLZL#u6G`SJ2kCQ2<&zxAO$4y*Sa;O{!a)scvni zNKx3^jpS*XI<5g=sIu4Rtp{KzGje}^g2PaCrU3vYTl_Cd%1coU#Tbm1iULyK-et+_ zJ2XHt86=azkbg;~3rKBqhp&Avj@-g%sX&Qs?i3KmZ6}X3XQ6}^m&qhk`2jU2sBE$w zXt1`Q9x4CST!0e@7Djc@Y>!j_&p1+(JPV>rk9x%})Qp2d$??DhM1F#q~Pf%w9c zdz|jLn(ND|Ep&c9w2 zSz%ycfM76)&1R#wx0kxQI=Z^L7#$tOZnyInV2>%n6Cmj~00000NkvXXu0mjf{) z2|{_>Z9b1aI^NwqFRqc6mcrkDOY`k=pM3Hop!mab;r=twpPnvOGS|}VV`IYr&{Zz{0+Qc7-nBmJrNP4@DP0dZ+1VKY&1Xrznd3!*Ihh71q9xG_txsF=(})u@ej(t zIoO-l&IqQ2;~V$vbJO+pN5Q}8Fi%=q!C+%!`o5Q3zb*#&vvQ`suHf^}Bk#K}Q05ry z;hFr_TkU>+yPF%PA^r}SYiskp>1G;$8c+)U9X4q3_uJnSLXz6q++3TUKKyNop6uo2 jxTl}i2~W=~v(B#rj{!BaSw!U_00000NkvXXu0mjf0?t;+ delta 1854 zcmV-E2f_H&1g2pwWG>{U4Ng7~EZH!gGHaL#sN5P)4=XKBC{kZlpwtop~kM76Ox%<7>+3S$F zuBw6n1u+w|suB^>mnw)OImlhFuo0M?0v!m^ci|lj6b%W!^ z+c&qr^RL>^7=Ko$My20<1O#kIiCeEI%q6!6&o`N0B zy8h+|?VpAKDqXR}+Vs@IuBI*vzUQl7pR{DL7(>j1Srb8om}A}FoLT*9{o#{+EnU5L zzv;YEf9vQ+IkSrLrk6p6@&E`B5!;^;oHV}q$ln1cZ+}`b!=fZ2Q+_z7?B$iJO3cH0 z3j$ELV_(bVD;ZXvLm3V-{B}+<5)Hj^P}~?<59Jl`)F&@roWG>p#Q-rF0zk`uwh~}9 zg7l8564O9uTiahQ1&|FSNrfPgq!0ec&Gx>#cZcFYs!-w@%gHEQI>#UeV%x-%!7<|s zS1bcSOn*p61rY!zJ9p)u-hwg1Dy;w`t6)M(Y;fZt9+>dLZ2L{Wx?-DHJa1N6VBC0B z4|yYz?gX;(=FWZ`5Yu#M$luuFVjr^97+clNo%>w?Du$TT5%KWi81rb;=?zP1i4ub{ z9b{Ng*l?`i<-cWFch@xH!TclRTM{TBOb`TgO0 zZIV@*aNO4b;%?R%&H_Q}t8Il*id`JWspKu}eaNRZ7o0EkKZHA>!Z#iCIYV^swn zKe%Yf42Ug&0JYUMk)Gbi^k8g3f#1qhLqz;|2Sf}e6@edkr=9W*Bq?uI=4u{e#% znz&$A{;U~nIU+(#UVX{p+ow)net-RKfk`C7_QW5(U=^1-nHkCcSoq)fB;HT{EHQ?M z`5+L~2nVvBeDS5i<(i^nB8dPL1WXbO+Pi_=1(sgdR07pn5f6;DHDU5 z9<9qDBdHNDGh!AI8e+{sYXqZe6D!o3SWvKQ=dPxkHy18g==gm5_V2H(tbgq2=$JQe zo@H4lPMo-K;llj+^Nlg8%9d4CRn^$oID5_xp=;L`E?B^qKmUBuqJ^7(v6*cPz||{P)~{b*TU&ea;za;AZrlikLI6a> zvaErDf&KgUS65eig-a%rRex1g6%`c#u3fv<(a`~5%a$!AB_;14dB3={q%R!iU@-X6 znKOU>@WVm=a-5SVPfnRKrMS2lfZy-8ZQFAI;MA#8Yu2opF=NK*)29JMqtRu{mStvU zR##W&=jR6kf&2IGcXoDe+qUgSW24{i@95}Y*LByeTeo4u24)6e+kf`CbLR>R3rk8$ zJi95{0dV~I@$1*GU%h&@rl!WLcz=I?Wo2b+YwNLN#{z*sZf>q^+YJp3B_$;X4jibh zt!2k?YHDf@9XgauCIK+>!Gi}wq0psEmjLAC6Zn>SZfRP5cmx4gW3X=yoo_H12UT{4+e z)jN0YL?V&a*4Ep%Z>wr|clY`8=j-a~RJE(CtEHtyRYjzsp&=X&yRO^T)|N;lRJEt4 z=fQ&qs;a7?Q0VaC!|mNXf-n3