History

Add Python documentation

Thibaut committed 12 years ago

Commit 36d6a101 parent 587855115 files · +220 −0Browse files

Showing the changes to lib/docs/filters/python (2 of 15 files). Show all

Unified · Split

2 files
  1. lib/docs/filters/python/clean_html.rb +68 −0
  2. lib/docs/filters/python/entries.rb +82 −0
lib/docs/filters/python/clean_html.rb+68−0
@@ -0,0 +1,68 @@
1module Docs
2 class Python
3 class CleanHtmlFilter < Filter
4 def call
5 @doc = at_css '.body > .section'
6
7 # Clean inline code elements
8
9 css('tt.literal').each do |node|
10 node.before(node.children).remove
11 end
12
13 css('tt', 'span.pre').each do |node|
14 node.name = 'code'
15 node.remove_attribute 'class'
16 end
17
18 root_page? ? root : other
19
20 doc
21 end
22
23 def root
24 at_css('h1').content = 'Python'
25 css('> p').remove
26 end
27
28 def other
29 css('.headerlink', 'hr').remove
30
31 # Clean headings
32
33 at_css('h1').tap do |node|
34 node.content = node.content.sub!(/\A[\d\.]+/) { |str| @levelRegexp = /\A#{str}/; '' }
35 end
36
37 css('h2', 'h3', 'h4').each do |node|
38 node.css('a').each do |link|
39 link.before(link.children).remove
40 end
41 node.child.content = node.child.content.sub @levelRegexp, ''
42 end
43
44 css('dt').each do |node|
45 node.content = node.content
46 end
47
48 # Remove blockquotes
49 css('blockquote').each do |node|
50 node.before(node.children).remove
51 end
52
53 # Remove code highlighting
54 css('.highlight-python3').each do |node|
55 pre = node.at_css('pre')
56 pre.content = pre.content
57 pre['class'] = 'python'
58 node.replace(pre)
59 end
60
61 # Remove <table> border attribute
62 css('table[border]').each do |node|
63 node.remove_attribute 'border'
64 end
65 end
66 end
67 end
68end
lib/docs/filters/python/entries.rb+82−0
@@ -0,0 +1,82 @@
1module Docs
2 class Python
3 class EntriesFilter < Docs::EntriesFilter
4 REPLACE_TYPES = {
5 'Cryptographic' => 'Cryptography',
6 'Custom Interpreters' => 'Interpreters',
7 'Data Compression & Archiving' => 'Data Compression',
8 'Generic Operating System' => 'Operating System',
9 'Graphical User Interfaces with Tk' => 'Tk',
10 'Internet Data Handling' => 'Internet Data',
11 'Internet Protocols & Support' => 'Internet',
12 'Interprocess Communication & Networking' => 'Networking',
13 'Program Frameworks' => 'Frameworks',
14 'Structured Markup Processing Tools' => 'Structured Markup' }
15
16 def get_name
17 name = at_css('h1').content
18 name.sub! %r{\A[\d\.]+ }, '' # remove list number
19 name.sub! %r{ \u{2014}.+\z}, '' # remove text after em dash
20 name
21 end
22
23 def get_type
24 return 'Logging' if slug.start_with? 'library/logging'
25
26 type = at_css('.related a[accesskey="U"]').content
27
28 if type == 'The Python Standard Library'
29 type = at_css('h1').content
30 elsif type.start_with? '19'
31 type = 'Internet Data Handling'
32 end
33
34 type.sub! %r{\A\d+\.\s+}, '' # remove list number
35 type.sub! "\u{00b6}", '' # remove paragraph character
36 type.sub! ' and ', ' & '
37 [' Services', ' Modules', ' Specific', 'Python '].each { |str| type.sub! str, '' }
38
39 REPLACE_TYPES[type] || type
40 end
41
42 def include_default_entry?
43 name !~ /[A-Z]/ && !skip? # skip non-module names
44 end
45
46 def additional_entries
47 return [] if root_page? || skip? || name == 'errno'
48 clean_id_attributes
49 entries = []
50
51 css('.class > dt[id]', '.exception > dt[id]', '.attribute > dt[id]').each do |node|
52 entries << [node['id'], node['id']]
53 end
54
55 css('.data > dt[id]').each do |node|
56 if node['id'].split('.').last.upcase! # skip constants
57 entries << [node['id'], node['id']]
58 end
59 end
60
61 css('.function > dt[id]', '.method > dt[id]', '.classmethod > dt[id]').each do |node|
62 entries << [node['id'] + '()', node['id']]
63 end
64
65 entries
66 end
67
68 def skip?
69 type == 'Language'
70 end
71
72 def clean_id_attributes
73 css('.section > .target[id]').each do |node|
74 if dt = node.at_css('+ dl > dt')
75 dt['id'] ||= node['id'].sub(/\w+\-/, '')
76 end
77 node.remove
78 end
79 end
80 end
81 end
82end