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
7td.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
4 def call4 def call
5 5
6 # remove unwanted elements6 # remove unwanted elements
7 css('#footer', '#package-header', '#module-header', '#synopsis', '.link', '#table-of-contents', '.empty', '.package').remove7 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
8 17
9 # turn captions into real headers18 # turn captions into real headers
10 css('.caption').each do |node|19 css('.caption').each do |node|
20 node.name = 'h1'
21 end
22
23 css('.top > .caption').each do |node|
11 node.name = 'h2'24 node.name = 'h2'
12 end25 end
13 26
14 css('table .caption').each do |node|27 # subsections
28 css('.top > .subs > .caption', '.fields > .caption').each do |node|
15 node.name = 'h3'29 node.name = 'h3'
16 end30 end
17 31
18 # # turn source listing in to pre32 # subsubsections
19 css('.src').each do |node|33 css('.top > .subs > .subs > .caption').each do |node|
20 node.name = 'pre'34 node.name = 'h4'
21 end35 end
22 36
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
23 55
24 if at_css('h1') && at_css('h1').content == 'Haskell Hierarchical Libraries'56 if at_css('h1') && at_css('h1').content == 'Haskell Hierarchical Libraries'
25 css('h1').remove57 css('h1').remove
26 end58 end
27 59
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
28 doc107 doc
29 end108 end
30 end109 end
31 end110 end
32end111end
112
113class 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
118end
lib/docs/filters/haskell/entries.rb+12−0
@@ -51,6 +51,18 @@ module Docs · 50 unmodified lines
51 t51 t
52 end52 end
53 53
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
54 end66 end
55 end67 end
56end68end