History

clean up complexity notation and deprecated, better caption handling

Romeo Van Snick committed 12 years ago

Commit 219772f1 parent 5e18b703 files · +164 −5Browse files

Unified · Split

3 files
  1. assets/stylesheets/pages/_haskell.scss +61 −0
  2. lib/docs/filters/haskell/clean_html.rb +91 −5
  3. lib/docs/filters/haskell/entries.rb +12 −0
assets/stylesheets/pages/_haskell.scss+61−0
@@ -0,0 +1,61 @@
1+._icon-haskell:before {
2+ background-image: image-url('/icons/docs/haskell/16.png');
3+ background-size: cover;
4+ background-repeat: no-repeat;
5+}
6+
7+td.src {
8+ font-family: $monoFont;
9+ font-weight: normal;
10+ font-style: normal;
11+ background: #f8f8f8;
12+ width: 20%;
13+}
14+
15+// warnings are red
16+.warning {
17+ @extend %note;
18+ @extend %note-red;
19+}
20+
21+
22+// complexity classes are blue boxes
23+.with-complexity {
24+ display: flex;
25+ justify-content: space-between;
26+ align-items: flex-start;
27+ align-content: stretch;
28+ flex-direction: row;
29+}
30+
31+.complexity {
32+ @extend %note;
33+ @extend %note-blue;
34+ margin: 0;
35+ margin-left: 1em;
36+ margin-bottom: 0.75em;
37+ font-style: italic;
38+ white-space: nowrap;
39+ flex-shrink: 0;
40+ order:2;
41+}
42+
43+.complexity + span {
44+ order: 1;
45+}
46+
47+.added {
48+ @extend %note;
49+ @extend %note-gold;
50+}
51+
52+.top {
53+ margin-bottom: 3em;
54+}
55+
56+.example {
57+ -webkit-flex: none;
58+ background: #faf9e2;
59+ border: 1px solid;
60+ border-color: #dddaaa #dddaaa #d7d7a9;
61+}
lib/docs/filters/haskell/clean_html.rb+91−5
@@ -4,29 +4,115 @@ module Docs · 3 unmodified lines
44 def call
55
66 # remove unwanted elements
7− css('#footer', '#package-header', '#module-header', '#synopsis', '.link', '#table-of-contents', '.empty', '.package').remove
7+ css('#footer', '#package-header', '#module-header', '#synopsis', '.link', '#table-of-contents', '.show .empty', '.package').remove
8+
9+ css('pre').each do |node|
10+ node.add_css_class('example')
11+ end
12+
13+ # cpations in tables are h3
14+ css('table .caption').each do |node|
15+ node.name = 'h3'
16+ end
817
918 # turn captions into real headers
1019 css('.caption').each do |node|
20+ node.name = 'h1'
21+ end
22+
23+ css('.top > .caption').each do |node|
1124 node.name = 'h2'
1225 end
1326
14− css('table .caption').each do |node|
27+ # subsections
28+ css('.top > .subs > .caption', '.fields > .caption').each do |node|
1529 node.name = 'h3'
1630 end
1731
18− # # turn source listing in to pre
19− css('.src').each do |node|
20− node.name = 'pre'
32+ # subsubsections
33+ css('.top > .subs > .subs > .caption').each do |node|
34+ node.name = 'h4'
2135 end
2236
37+ css('.top > .subs > .subs > .subs > .caption').each do |node|
38+ node.name = 'h5'
39+ end
40+
41+ css('.top > .subs > .subs > .subs > .subs > .caption').each do |node|
42+ node.name = 'h6'
43+ end
44+
45+ # turn source listing in to pre
46+ css('.src').each do |node|
47+ if node.name == "td"
48+ # pre = doc.create_element 'pre'
49+ # pre.children = node.children
50+ # node.children = [pre]
51+ else
52+ node.name = 'pre'
53+ end
54+ end
2355
2456 if at_css('h1') && at_css('h1').content == 'Haskell Hierarchical Libraries'
2557 css('h1').remove
2658 end
2759
60+ css('a').each do |node|
61+ if node['name']
62+ node['id'] = node['name']
63+ end
64+ end
65+
66+ css('.caption').each do |node|
67+ if node.content == 'Arguments'
68+ node.remove
69+ end
70+ end
71+
72+ # add some informational boxes
73+ css('em').each do |node|
74+ if node.content == 'Deprecated.'
75+ # Make deprecated messages red.
76+ node.parent.add_css_class('warning')
77+ elsif node.content =~ /O\(.*\)/
78+ # this is big_O notation, but only apply the class if this is not
79+ # inside running text (it must be at the start of a paragraph)
80+ # from:
81+ # <p><em>O(n)</em>. Koel ok</p>
82+ # to:
83+ # <p class="with-complexity">
84+ # <span class="complexity">O(n)</span>
85+ # <span>Koel ok</span>
86+ # </p>
87+ if node.previous == nil
88+ node.add_css_class('complexity') # add css class
89+ node.name="span" # just make it div
90+ node.next.content = node.next.content.gsub(/^. /, "") # remove . if directly after em
91+ node.content = node.content.gsub(/\.$/, "") # remove trailing . if it's inside em
92+
93+ # reparent the nodes
94+ cont = doc.document.create_element "p", :class => "with-complexity"
95+ node.parent.previous = cont
96+ par = node.parent
97+ node.parent = cont
98+ par.parent = cont
99+ par.name = "span"
100+ end
101+ elsif node.content =~ /Since: .*/
102+ # add box to 'Since:' annotations
103+ node.add_css_class('added')
104+ end
105+ end
106+
28107 doc
29108 end
30109 end
31110 end
32111 end
112+
113+class Nokogiri::XML::Node
114+ def add_css_class( *classes )
115+ existing = (self['class'] || "").split(/\s+/)
116+ self['class'] = existing.concat(classes).uniq.join(" ")
117+ end
118+end
lib/docs/filters/haskell/entries.rb+12−0
@@ -51,6 +51,18 @@ module Docs · 50 unmodified lines
5151 t
5252 end
5353
54+ # def additional_entries
55+ # css('a').inject [] do |entries, node|
56+ # name = node.content
57+ # id = node['name']
58+ # if id
59+ # puts id
60+ # entries << [name, id, nil]
61+ # end
62+ # entries
63+ # end
64+ # end
65+
5466 end
5567 end
5668 end