From 5b6d9d983bf13ecabbe7a4e8fe465647dca6902f Mon Sep 17 00:00:00 2001 From: Thibaut Date: Sat, 22 Feb 2014 18:47:30 -0500 Subject: [PATCH] Add C documentation --- assets/images/icons.png | Bin 15182 -> 15668 bytes assets/images/icons@2x.png | Bin 40176 -> 41371 bytes .../templates/pages/about_tmpl.coffee | 6 +++ .../templates/pages/news_tmpl.coffee | 5 +- assets/javascripts/views/pages/c.coffee | 6 +++ assets/stylesheets/application.css.scss | 1 + assets/stylesheets/global/_icons.scss | 1 + assets/stylesheets/pages/_c.scss | 22 +++++++++ lib/docs/filters/c/clean_html.rb | 37 +++++++++++++++ lib/docs/filters/c/entries.rb | 44 ++++++++++++++++++ lib/docs/filters/c/fix_code.rb | 21 +++++++++ lib/docs/filters/c/fix_urls.rb | 11 +++++ lib/docs/scrapers/c.rb | 22 +++++++++ public/icons/docs/c/16.png | Bin 0 -> 591 bytes public/icons/docs/c/16@2x.png | Bin 0 -> 1274 bytes public/icons/docs/c/SOURCE | 2 + 16 files changed, 177 insertions(+), 1 deletion(-) create mode 100644 assets/javascripts/views/pages/c.coffee create mode 100644 assets/stylesheets/pages/_c.scss create mode 100644 lib/docs/filters/c/clean_html.rb create mode 100644 lib/docs/filters/c/entries.rb create mode 100644 lib/docs/filters/c/fix_code.rb create mode 100644 lib/docs/filters/c/fix_urls.rb create mode 100644 lib/docs/scrapers/c.rb create mode 100644 public/icons/docs/c/16.png create mode 100644 public/icons/docs/c/16@2x.png create mode 100644 public/icons/docs/c/SOURCE diff --git a/assets/images/icons.png b/assets/images/icons.png index f87d15eab02ca4289dc1e2b282cc73be905e17a3..87df7c3969d3d697d8d679495282f101b01f8938 100644 GIT binary patch delta 5943 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 delta 9666 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 Ef)6sawEzGB diff --git a/assets/javascripts/templates/pages/about_tmpl.coffee b/assets/javascripts/templates/pages/about_tmpl.coffee index 476b3453..87468d67 100644 --- a/assets/javascripts/templates/pages/about_tmpl.coffee +++ b/assets/javascripts/templates/pages/about_tmpl.coffee @@ -39,6 +39,7 @@ app.templates.aboutPage = -> """

Questions & Answsers

@@ -83,6 +84,11 @@ credits = [ '2010-2014 Jeremy Ashkenas, DocumentCloud', 'MIT', 'https://raw.github.com/jashkenas/backbone/master/LICENSE' + ], [ + 'C', + 'cppreference.com', + 'CC BY-SA', + 'http://en.cppreference.com/w/Cppreference:Copyright/CC-BY-SA' ], [ 'CoffeeScript', '2009-2014 Jeremy Ashkenas', diff --git a/assets/javascripts/templates/pages/news_tmpl.coffee b/assets/javascripts/templates/pages/news_tmpl.coffee index a767f935..1fa38b55 100644 --- a/assets/javascripts/templates/pages/news_tmpl.coffee +++ b/assets/javascripts/templates/pages/news_tmpl.coffee @@ -24,7 +24,10 @@ newsItem = (date, news) -> result app.news = [ - [ 1392508800000, # February 16, 2013 + [ 1393027200000, # February 22, 2013 + """ New C documentation """, + ], [ + 1392508800000, # February 16, 2013 """ New Moment.js documentation """, ], [ 1392163200000, # February 12, 2013 diff --git a/assets/javascripts/views/pages/c.coffee b/assets/javascripts/views/pages/c.coffee new file mode 100644 index 00000000..aa6daf83 --- /dev/null +++ b/assets/javascripts/views/pages/c.coffee @@ -0,0 +1,6 @@ +#= require views/pages/base + +class app.views.CPage extends app.views.BasePage + afterRender: -> + @highlightCode @findAll('pre.source-c, .source-c > pre'), 'c' + return diff --git a/assets/stylesheets/application.css.scss b/assets/stylesheets/application.css.scss index 9baf4415..1a627c4e 100644 --- a/assets/stylesheets/application.css.scss +++ b/assets/stylesheets/application.css.scss @@ -28,6 +28,7 @@ 'components/mobile'; @import 'pages/angular', + 'pages/c', 'pages/coffeescript', 'pages/d3', 'pages/ember', diff --git a/assets/stylesheets/global/_icons.scss b/assets/stylesheets/global/_icons.scss index 8d8df115..417ce20b 100644 --- a/assets/stylesheets/global/_icons.scss +++ b/assets/stylesheets/global/_icons.scss @@ -48,3 +48,4 @@ ._icon-d3:before { background-position: -4rem -6rem; } ._icon-knockout:before { background-position: 0 -7rem; } ._icon-moment:before { background-position: -1rem -7rem; } +._icon-c:before { background-position: -2rem -7rem; } diff --git a/assets/stylesheets/pages/_c.scss b/assets/stylesheets/pages/_c.scss new file mode 100644 index 00000000..9bc384e3 --- /dev/null +++ b/assets/stylesheets/pages/_c.scss @@ -0,0 +1,22 @@ +._c { + > h2, > h3 { @extend %block-heading; } + > h4 { @extend %block-label, %label-blue; } + > p > code { @extend %label; } + + .t-dcl-begin pre { + margin: 0; + padding: 0; + line-height: inherit; + background: none; + border: 0; + box-shadow: none; + } + + .t-lines > span { display: block; } // numeric/fenv, string/byte, etc. + + .t-spar { // language/switch, language/for, etc. + font-style: italic; + color: $textColorLight; + } + .t-sdsc-nopad dl, .t-sdsc-nopad dd { margin: 0; } +} diff --git a/lib/docs/filters/c/clean_html.rb b/lib/docs/filters/c/clean_html.rb new file mode 100644 index 00000000..ed7d5995 --- /dev/null +++ b/lib/docs/filters/c/clean_html.rb @@ -0,0 +1,37 @@ +module Docs + class C + class CleanHtmlFilter < Filter + def call + if root_page? + doc.inner_html = ' ' + return doc + end + + css('#siteSub', '#contentSub', '.printfooter', '.t-navbar', '.editsection', '#toc', '.t-dsc-sep', '.t-dcl-sep', + '#catlinks', '.ambox-notice', '.mw-cite-backlink', '.t-sdsc-sep:first-child:last-child').remove + + css('#bodyContent', '.mw-content-ltr', 'span[style]').each do |node| + node.before(node.children).remove + end + + css('h2 > span[id]', 'h3 > span[id]', 'h4 > span[id]', 'h5 > span[id]', 'h6 > span[id]').each do |node| + node.parent['id'] = node['id'] + node.before(node.children).remove + end + + css('table[style]', 'th[style]', 'td[style]').remove_attr('style') + + css('.t-dsc-hitem > td', '.t-dsc-header > td').each do |node| + node.name = 'th' + node.content = ' ' if node.content.empty? + end + + css('tt').each do |node| + node.name = 'code' + end + + doc + end + end + end +end diff --git a/lib/docs/filters/c/entries.rb b/lib/docs/filters/c/entries.rb new file mode 100644 index 00000000..9e8dc854 --- /dev/null +++ b/lib/docs/filters/c/entries.rb @@ -0,0 +1,44 @@ +module Docs + class C + class EntriesFilter < Docs::EntriesFilter + ADDITIONAL_NAMES = { + 'Conditional inclusion' => %w(if else elif ifdef ifndef endif).map { |s| "##{s} directive" }, + 'Function specifiers' => ['inline specifier', '_Noreturn specifier'] } + + REPLACE_NAMES = { + 'Error directive' => '#error directive', + 'Filename and line information' => '#line directive', + 'Implementation defined behavior control' => '#pragma directive', + 'Replacing text macros' => '#define directive', + 'Source file inclusion' => '#include directive', + 'Warning directive' => '#warning directive' } + + def get_name + name = at_css('#firstHeading').content.strip + name.sub! 'C keywords: ', '' + name.sub! %r{\s\(.+\)}, '' + name = name.split(',').first + REPLACE_NAMES[name] || name + end + + def get_type + if type = at_css('.t-navbar > div:nth-child(4) > :first-child').try(:content) + type.strip! + type.sub! ' library', '' + type.sub! ' utilities', '' + type + end + end + + def additional_entries + names = at_css('#firstHeading').content.split(',')[1..-1] + names.concat ADDITIONAL_NAMES[name] || [] + names.map { |name| [name] } + end + + def include_default_entry? + at_css '.t-navbar > div:nth-child(4) > a' + end + end + end +end diff --git a/lib/docs/filters/c/fix_code.rb b/lib/docs/filters/c/fix_code.rb new file mode 100644 index 00000000..ef160b7f --- /dev/null +++ b/lib/docs/filters/c/fix_code.rb @@ -0,0 +1,21 @@ +module Docs + class C + class FixCodeFilter < Filter + def call + css('div > span.source-c').each do |node| + node.inner_html = node.inner_html.gsub(/
\n?/, "\n").gsub("\n

\n", "

\n") + node.parent.name = 'pre' + node.parent['class'] = 'source-c' + node.parent.content = node.content + end + + nbsp = Nokogiri::HTML(' ').text + css('pre').each do |node| + node.content = node.content.gsub(nbsp, ' ') + end + + doc + end + end + end +end diff --git a/lib/docs/filters/c/fix_urls.rb b/lib/docs/filters/c/fix_urls.rb new file mode 100644 index 00000000..a7d15d94 --- /dev/null +++ b/lib/docs/filters/c/fix_urls.rb @@ -0,0 +1,11 @@ +module Docs + class C + class FixUrlsFilter < Filter + def call + html.gsub! File.join(C.base_url, C.root_path), C.base_url[0..-2] + html.gsub! %r{#{C.base_url}([^"']+?)\.html}, "#{C.base_url}\\1" + html + end + end + end +end diff --git a/lib/docs/scrapers/c.rb b/lib/docs/scrapers/c.rb new file mode 100644 index 00000000..a294e698 --- /dev/null +++ b/lib/docs/scrapers/c.rb @@ -0,0 +1,22 @@ +module Docs + class C < FileScraper + self.type = 'c' + self.dir = '/Users/Thibaut/DevDocs/Docs/C/en/c' + self.base_url = 'http://en.cppreference.com/w/c/' + self.root_path = 'header.html' + + html_filters.insert_before 'clean_html', 'c/fix_code' + html_filters.push 'c/entries', 'c/clean_html', 'title' + text_filters.push 'c/fix_urls' + + options[:container] = '#content' + options[:title] = false + options[:root_title] = 'C Programming Language' + options[:skip] = %w(language/history.html) + + options[:attribution] = <<-HTML + © cppreference.com
+ Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0. + HTML + end +end diff --git a/public/icons/docs/c/16.png b/public/icons/docs/c/16.png new file mode 100644 index 0000000000000000000000000000000000000000..f53cdaab4fe273406bf9ae4edfe3a3cf4bdad329 GIT binary patch literal 591 zcmV-V07hfLToi39qme5#Y(VkVpXV^h}L8#=@=v; zq9PGpSWsG$g;=4wJPW$K#-5s##l5;w$z% zoWfGsM70V$eme(|LrxU%AoCelpG{zk_de)|0ulv6rGEShwbOnxRZVlo7|^)OE#C1W1yCsc7aJY?!j!hvHc#% z*@q2#Lx?^f$M13lHtaducwhjuyB~Bg401=qRD*+d2D-=?{qR!?kLUT;1U^3;iB$;tbk^E}Uc z-t&H~nyY2jd6romU5#|c>V8>nrT5`%XV;Ewr*|Odz^|Y)<{I}FmE7#`BnjC?YyEE| z#e20Lx)yVdd(2sI;w-28Ig87Cm_#{sev(e>++z-NS+fAd-Z+c1%WiS{f^tG3=_Jt% z-U;TihPA|)HL=ZRixIGN0qM5ZUqZH{OGjcB&#HFg-H0xF1FtR)7qh#BpvmrEPJ zV>>M_pAIyu#*K`s4pWcW!lc$;YSz z%Xgi?()2p04b>bnlFVH|mI%me@Zr{QSSR54#eTM2%aPBlHsPkyR>YYbdC$6bFPeZ1 zxf*Mo7aPmY;i(KEeeEM@cNG+;Tu-v_SKtra#^#DPJpcY7EKMwdTD=Eq?Ov#LcBu9H zMM!mI@N{JJ7{Z>Q;cX||nxS6$@Gfye(WJk!3-Q~(LT1g6^B+PwpO)i?YxuAA_6HHa ztsZLSZm1OnbjI3R-}OPzPDh?0=VDF*vc+>;UTpcK4Zf@Y7(|SO!Z>`^i@eGc$g4Vu z=2joqbUCAAc?)YfA9rzH-3PUy5-R-w z1sH#f(km_`KW#mTB?)#Rx9J9qKuHA$(G$3Vne2DTVJ>TQ7!*P5B