rubydictionary 0.0.2 → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -12,11 +12,15 @@ You will need latest [*Xcode* developer tools](http://developer.apple.com/).
12
12
 
13
13
  Run `rubydictionary` in your source code directory. For example for source of Sinatra:
14
14
 
15
- rubydictionary --format=rubydictionary --dict-name=Sinatra --dict-id=com.sinatrarb.Dictionary
15
+ rubydictionary --dict-name=Sinatra --dict-id=com.sinatrarb.Dictionary
16
16
 
17
- If all goes well, you should have Sinatra.dictionary file under ./doc/objects directory. Drop it into `~/Library/Dictionaries/` folder.
17
+ If all goes well, you should now have `Sinatra.dictionary` file under `./doc/objects` directory. Drop it into `~/Library/Dictionaries/` folder.
18
18
 
19
- # Links
19
+ ## Authors
20
+
21
+ See the [Github contributors page](https://github.com/priithaamer/rubydictionary/contributors).
22
+
23
+ ## Links
20
24
 
21
25
  * [Dictionary Services programming guide at Apple Developer site](http://developer.apple.com/library/mac/documentation/UserExperience/Conceptual/DictionaryServicesProgGuide/index.html)
22
26
  * [https://github.com/breakpointer/ajax-rdoc](https://github.com/breakpointer/ajax-rdoc)
@@ -2,6 +2,6 @@
2
2
 
3
3
  require File.expand_path('../../lib/rubydictionary', __FILE__)
4
4
 
5
- ARGV.push('--format=dictionary') if ARGV.grep(/\A(-f|--fmt|--format|-r|-R|--ri|--ri-site)\b/).empty?
5
+ ARGV.unshift('--format=dictionary') if ARGV.grep(/\A(-f|--fmt|--format|-r|-R|--ri|--ri-site)\b/).empty?
6
6
  r = RDoc::RDoc.new
7
7
  r.document ARGV
@@ -6,10 +6,9 @@ d|entry {
6
6
 
7
7
  h1, h2, h3 {
8
8
  font-family: 'Helvetica Neue', Helvetica, sans-serif;
9
- text-shadow: 0px 0px 0px #000;
10
9
  }
11
10
 
12
- h1 { font-size: 150%; }
11
+ h1 { font-size: 130%; }
13
12
  h1 .classname { font-size: 80%; }
14
13
  h1 .methodtype { font-size: 80%; }
15
14
  h1 .visibility { font-size: 70%; font-weight: normal; }
@@ -23,20 +22,35 @@ ul.attributes li { list-style-type: none; }
23
22
 
24
23
  hr { border: none; border-bottom: 1px solid #ddd; }
25
24
 
25
+ p.method_name {
26
+ color: #666;
27
+ font-family: 'Helvetica Neue', Helvetica, sans-serif;
28
+ font-size: 90%;
29
+ font-weight: bold;
30
+ }
31
+
32
+ dl.rdoc-list dt {
33
+ font-weight: bold;
34
+ }
35
+
26
36
  tt,
27
37
  pre,
28
38
  p.signatures {
29
- font-family: Monaco;
39
+ font-family: Inconsolata, Monaco;
30
40
  font-size: 12px;
31
41
  }
32
42
 
33
43
  pre {
34
- padding: 10px;
35
- background-color: #eee;
36
- border: 1px solid #ddd;
44
+ background: rgb(254,251,243);
45
+ border: 1px solid rgba(0,0,0,0.2);
46
+ color: rgb(5, 75, 125);
47
+ line-height: 16px;
48
+ padding: 9px;
49
+ -webkit-border-radius: 3px;
50
+ -webkit-box-shadow: 0 1px 2px rgba(0,0,0,0.1);
37
51
  }
38
52
 
39
53
  a {
40
- color: #555;
54
+ color: rgb(41, 113, 167);
41
55
  text-decoration: none;
42
56
  }
@@ -41,6 +41,10 @@ class RDoc::Generator::Dictionary
41
41
  def initialize(options)
42
42
  @options = options
43
43
  @template_dir = Pathname.new(File.expand_path('../../rdoc/generator/template', __FILE__))
44
+
45
+ # Keep the track of methods and classes already rendered and avoid duplication
46
+ @class_ids = []
47
+ @method_ids = []
44
48
  end
45
49
 
46
50
  def generate(top_levels)
@@ -48,10 +52,17 @@ class RDoc::Generator::Dictionary
48
52
  xml.send('dictionary', 'xmlns' => XMLNS, 'xmlns:d' => XMLNS_D) do
49
53
  xml.parent.namespace = xml.parent.namespace_definitions.first
50
54
 
51
- RDoc::TopLevel.all_classes.each do |clazz|
52
- append_class_entry(clazz, xml)
53
- clazz.method_list.each do |mthd|
54
- append_method_entry(mthd, xml)
55
+ RDoc::TopLevel.all_classes_and_modules.each do |clazz|
56
+ unless @class_ids.include?(class_id(clazz))
57
+ append_class_entry(clazz, xml)
58
+ @class_ids << class_id(clazz)
59
+
60
+ clazz.method_list.each do |mthd|
61
+ unless @method_ids.include?(method_id(mthd))
62
+ append_method_entry(mthd, xml)
63
+ @method_ids << method_id(mthd)
64
+ end
65
+ end
55
66
  end
56
67
  end
57
68
  end
@@ -70,7 +81,7 @@ class RDoc::Generator::Dictionary
70
81
 
71
82
  dict_build_tool = "/Developer/Extras/Dictionary Development Kit/bin/build_dict.sh"
72
83
 
73
- %x{"#{dict_build_tool}" #{@options.dictionary_name} #{dict_src_path} #{css_path} #{plist_path}}
84
+ %x{"#{dict_build_tool}" "#{@options.dictionary_name}" #{dict_src_path} #{css_path} #{plist_path}}
74
85
  end
75
86
 
76
87
  def class_dir
@@ -79,14 +90,9 @@ class RDoc::Generator::Dictionary
79
90
 
80
91
  private
81
92
 
82
- # <d:entry id="activerecord_base" d:title="ActiveRecord::Base">
83
- # <d:index d:value="ActiveRecord::Base"/>
84
- # <d:index d:value="Base"/>
85
- # <h1>ActiveRecord::Base</h1>
86
93
  def append_class_entry(cls, xml)
87
94
  xml.entry('id' => class_id(cls), 'd:title' => class_title(cls)) do
88
95
  xml.index('d:value' => cls.full_name)
89
- # xml.index('d:value' => class_index_name(clazz))
90
96
 
91
97
  xml.h1(cls.full_name, :xmlns => XMLNS)
92
98
 
@@ -120,23 +126,14 @@ class RDoc::Generator::Dictionary
120
126
  end
121
127
  end
122
128
 
123
- # <d:entry id="method_method_id" d:title="method-Name">
124
- # <d:index d:value="method full name"/>
125
- # <d:index d:value="method name"/>
126
- # <h1><a href="x-dictionary:r:class_id:org.ruby-lang.Dictionary">class full name</a> <span class="methodtype"> <%= @method.singleton ? '::' : '#' %> </span> <%= @method.name.escape %> <span class="visibility">(<%= @method.visibility %>)</span></h1>
127
- # <% unless @method.arglists.nil? %><p class="signatures"><%= @method.arglists.escape %></p><% end %>
128
- # <% unless !@method.respond_to?(:aliases) || @method.aliases.empty? %><p>Aliases: <%= @method.aliases.map {|a| a.new_name }.join(", ").escape %></p><% end %>
129
- # <% unless !@method.respond_to?(:is_alias_for) || @method.is_alias_for.nil? %><p>Alias for: <%= @method.is_alias_for.escape %></p><% end %>
130
- # <% unless @description.empty? %>
131
- # <%= @description %>
132
- # <% end %>
133
- # </d:entry>
134
129
  def append_method_entry(mthd, xml)
135
130
  xml.entry('id' => method_id(mthd), 'd:title' => method_title(mthd)) do
136
131
  xml.index('d:value' => mthd.full_name)
137
132
  xml.index('d:value' => mthd.name)
138
133
 
139
- xml.h1(mthd.full_name, :xmlns => XMLNS)
134
+ xml.h1(mthd.arglists, :xmlns => XMLNS)
135
+
136
+ xml.p(mthd.full_name, :class => 'method_name', :xmlns => XMLNS)
140
137
 
141
138
  xml.div(:xmlns => XMLNS) do
142
139
  xml << mthd.description
@@ -153,7 +150,6 @@ class RDoc::Generator::Dictionary
153
150
  end
154
151
 
155
152
  def method_title(mthd)
156
- # TODO: escape <>
157
153
  mthd.name
158
154
  end
159
155
 
@@ -1,3 +1,3 @@
1
1
  module Rubydictionary
2
- VERSION = "0.0.2"
2
+ VERSION = "0.1.0"
3
3
  end
metadata CHANGED
@@ -5,9 +5,9 @@ version: !ruby/object:Gem::Version
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
+ - 1
8
9
  - 0
9
- - 2
10
- version: 0.0.2
10
+ version: 0.1.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - Priit Haamer
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-10-03 00:00:00 +03:00
18
+ date: 2011-10-07 00:00:00 +03:00
19
19
  default_executable:
20
20
  dependencies: []
21
21
 
@@ -34,16 +34,12 @@ files:
34
34
  - README.markdown
35
35
  - Rakefile
36
36
  - bin/rubydictionary
37
- - dictionary_generator.rb
38
37
  - lib/rdoc/generator/template/Dictionary.css
39
38
  - lib/rdoc/generator/template/Dictionary.plist.erb
40
39
  - lib/rubydictionary.rb
41
40
  - lib/rubydictionary/generator.rb
42
41
  - lib/rubydictionary/version.rb
43
42
  - rubydictionary.gemspec
44
- - templates/class.erb
45
- - templates/dictionary.erb
46
- - templates/method.erb
47
43
  has_rdoc: true
48
44
  homepage: https://github.com/priithaamer/rubydictionary
49
45
  licenses: []
@@ -1,121 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- require 'erb'
4
- require 'rubygems'
5
- require 'iconv'
6
-
7
- gem 'rdoc', '>= 0'
8
- require 'rdoc/ri'
9
- require 'rdoc/ri/store'
10
- require 'rdoc/ri/paths'
11
- require 'rdoc/markup'
12
- require 'rdoc/markup/formatter'
13
- require 'rdoc/text'
14
-
15
- class RDoc::Markup::ToHtml < RDoc::Markup::Formatter
16
- def self.gen_relative_url(path, target)
17
- nil
18
- end
19
- end
20
-
21
- class String
22
- def escape
23
- gsub("&", "&amp;").gsub("<", "&lt;").gsub(">", "&gt;").gsub("'", "&apos;").gsub("\"", "&quot;")
24
- end
25
- def to_id
26
- downcase.gsub('::', '_')
27
- end
28
- end
29
-
30
- def get_template(file)
31
- erb = ''
32
- File.open("./templates/#{file}", 'r') { |f| erb = f.read }
33
- ERB.new(erb)
34
- end
35
-
36
- class_template = get_template('class.erb')
37
-
38
- def render_class(klass)
39
- tpl = get_template('class.erb')
40
- @class = klass
41
- @class_methods = klass.method_list.reject{ |m| !m.singleton }.sort{ |a,b| a.name <=> b.name }
42
- @instance_methods = klass.method_list.reject{ |m| m.singleton }.sort{ |a,b| a.name <=> b.name }
43
- begin
44
- @description = @iconv.iconv(klass.comment.accept(@formatter))
45
- rescue
46
- @description = ""
47
- end
48
- tpl.result(binding)
49
- end
50
-
51
- def render_class_method(klass, method)
52
- tpl = get_template('method.erb')
53
- @klass = klass
54
- @method = method
55
- begin
56
- @description = @iconv.iconv(method.comment.accept(@formatter))
57
- rescue
58
- @description = ""
59
- end
60
- tpl.result(binding)
61
- end
62
-
63
- puts "Loading Ruby documentation"
64
-
65
- classes = {}
66
- class_methods = {}
67
- instance_methods = {}
68
- stores = []
69
- class_count = 0
70
- count = 0
71
-
72
- @formatter = RDoc::Markup::ToHtml.new
73
- @iconv = Iconv.new('UTF-8//IGNORE', 'UTF-8')
74
-
75
- RDoc::RI::Paths.each(true, true, true, true) do |path, type|
76
- $stderr.puts path
77
- store = RDoc::RI::Store.new(path, type)
78
- store.load_cache
79
- stores << store
80
- class_count += store.modules.count
81
- end
82
-
83
- stores.each do |store|
84
- store.modules.each do |name|
85
- count += 1
86
- $stderr << "Parse [#{count}/#{class_count}]...\r"
87
- klass = store.load_class(name)
88
- oldklass = classes[name]
89
- unless oldklass.nil? || oldklass.method_list.count < klass.method_list.count
90
- $stderr.puts "Skipping #{name}..."
91
- next
92
- end
93
- classes[name] = klass
94
- klass.method_list.each_index do |index|
95
- method = klass.method_list[index]
96
- begin
97
- method = store.load_method(name, "#{method.singleton ? '::' : '#'}#{method.name}")
98
- klass.method_list[index] = method
99
- rescue Errno::ENOENT => e
100
- $stderr.puts e
101
- end
102
- end
103
- end
104
- end
105
-
106
- puts "Building XML files from sources"
107
-
108
- @classes = []
109
- @methods = []
110
- count = 0
111
-
112
- classes.each do |name, klass|
113
- count += 1
114
- $stderr << "Render [#{count}/#{class_count}]...\r"
115
- @classes << render_class(klass)
116
- klass.method_list.each { |method| @methods << render_class_method(klass, method) }
117
- end
118
-
119
- File.open('./Ruby.xml', 'w') { |file| file.puts get_template('dictionary.erb').result(binding) }
120
-
121
- puts "Dictionary XML file generation complete"
@@ -1,44 +0,0 @@
1
- <d:entry id="class_<%= @class.object_id.to_s(36) %>" d:title="<%= @class.full_name.escape %>">
2
- <d:index d:value="<%= @class.full_name.escape %>"/>
3
- <d:index d:value="<%= @class.name.escape %>"/>
4
- <h1><%= @class.full_name.escape %></h1>
5
- <% unless @description.empty? %>
6
- <%= @description %>
7
- <% end %>
8
-
9
- <% unless @class_methods.empty? %>
10
- <h3>Class methods</h3>
11
- <ul class="classmethods">
12
- <% for method in @class_methods %>
13
- <li><a href="x-dictionary:r:method_<%= method.object_id.to_s(36) %>:org.ruby-lang.Dictionary"><%= method.name.escape %></a></li>
14
- <% end %>
15
- </ul>
16
- <% end %>
17
-
18
- <% unless @instance_methods.empty? %>
19
- <h3>Instance methods</h3>
20
- <ul class="instancemethods">
21
- <% for method in @instance_methods %>
22
- <li><a href="x-dictionary:r:method_<%= method.object_id.to_s(36) %>:org.ruby-lang.Dictionary"><%= method.name.escape %></a></li>
23
- <% end %>
24
- </ul>
25
- <% end %>
26
-
27
- <% unless @class.constants.empty? %>
28
- <h3>Constants</h3>
29
- <ul class="constants">
30
- <% for constant in @class.constants %>
31
- <li><tt><%= constant.name.escape %><% unless constant.value.nil? %>= <%= constant.value.escape %><% end %></tt> <% if constant.comment.respond_to?(:accept) %><%= @iconv.iconv(constant.comment.accept(@formatter)) %><% end %></li>
32
- <% end %>
33
- </ul>
34
- <% end %>
35
-
36
- <% unless @class.attributes.empty? %>
37
- <h3>Attributes</h3>
38
- <ul class="attributes">
39
- <% for attrib in @class.attributes %>
40
- <li><span class="access <%= attrib.rw.downcase %>access"> <%= attrib.rw %> </span> <%= attrib.name.escape %> <% if attrib.comment.respond_to?(:accept) %><%= @iconv.iconv(attrib.comment.accept(@formatter)) %><% end %></li>
41
- <% end %>
42
- </ul>
43
- <% end %>
44
- </d:entry>
@@ -1,9 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <d:dictionary xmlns="http://www.w3.org/1999/xhtml" xmlns:d="http://www.apple.com/DTDs/DictionaryService-1.0.rng">
3
- <% for cls in @classes %>
4
- <%= cls %>
5
- <% end %>
6
- <% for mthd in @methods %>
7
- <%= mthd %>
8
- <% end %>
9
- </d:dictionary>
@@ -1,11 +0,0 @@
1
- <d:entry id="method_<%= @method.object_id.to_s(36) %>" d:title="<%= @method.name.escape %>">
2
- <d:index d:value="<%= @method.full_name.escape %>"/>
3
- <d:index d:value="<%= @method.name.escape %>"/>
4
- <h1><a href="x-dictionary:r:class_<%= @class.object_id.to_s(36) %>:org.ruby-lang.Dictionary"><%= @class.full_name.escape %></a> <span class="methodtype"> <%= @method.singleton ? '::' : '#' %> </span> <%= @method.name.escape %> <span class="visibility">(<%= @method.visibility %>)</span></h1>
5
- <% unless @method.arglists.nil? %><p class="signatures"><%= @method.arglists.escape %></p><% end %>
6
- <% unless !@method.respond_to?(:aliases) || @method.aliases.empty? %><p>Aliases: <%= @method.aliases.map {|a| a.new_name }.join(", ").escape %></p><% end %>
7
- <% unless !@method.respond_to?(:is_alias_for) || @method.is_alias_for.nil? %><p>Alias for: <%= @method.is_alias_for.escape %></p><% end %>
8
- <% unless @description.empty? %>
9
- <%= @description %>
10
- <% end %>
11
- </d:entry>