distil 0.11.6 → 0.11.8

Sign up to get free protection for your applications and to get access to all the features.
Files changed (168) hide show
  1. data/VERSION +1 -1
  2. data/assets/distil.js +2 -1
  3. data/bin/distil +2 -0
  4. data/distil.gemspec +152 -2
  5. data/lib/distil/configurable.rb +3 -1
  6. data/lib/distil/error-reporter.rb +2 -0
  7. data/lib/distil/product/concatenated.rb +1 -3
  8. data/lib/distil/product/debug.rb +1 -3
  9. data/lib/distil/product/javascript-product.rb +2 -8
  10. data/lib/distil/product.rb +5 -5
  11. data/lib/distil/project/distil-project.rb +18 -1
  12. data/lib/distil/project/external-project.rb +1 -1
  13. data/lib/distil/project/remote-project.rb +39 -0
  14. data/lib/distil/project.rb +18 -9
  15. data/lib/distil/target.rb +13 -12
  16. data/lib/distil/task/css-dependency-task.rb +1 -1
  17. data/lib/distil/task/validate-js-task.rb +6 -1
  18. data/lib/distil.rb +1 -0
  19. data/vendor/pdoc/LICENSE +16 -0
  20. data/vendor/pdoc/PDoc.tmbundle/Commands/Continue PDoc Comment.tmCommand +39 -0
  21. data/vendor/pdoc/PDoc.tmbundle/Macros/Collapse PDoc Blocks.tmMacro +4084 -0
  22. data/vendor/pdoc/PDoc.tmbundle/Macros/Expand PDoc Blocks.tmMacro +1388 -0
  23. data/vendor/pdoc/PDoc.tmbundle/Preferences/PDoc.tmPreferences +50 -0
  24. data/vendor/pdoc/PDoc.tmbundle/Snippets/class.tmSnippet +24 -0
  25. data/vendor/pdoc/PDoc.tmbundle/Snippets/constant.tmSnippet +22 -0
  26. data/vendor/pdoc/PDoc.tmbundle/Snippets/event.tmSnippet +16 -0
  27. data/vendor/pdoc/PDoc.tmbundle/Snippets/method.tmSnippet +22 -0
  28. data/vendor/pdoc/PDoc.tmbundle/Snippets/mixin.tmSnippet +23 -0
  29. data/vendor/pdoc/PDoc.tmbundle/Snippets/namespace.tmSnippet +24 -0
  30. data/vendor/pdoc/PDoc.tmbundle/Snippets/param.tmSnippet +16 -0
  31. data/vendor/pdoc/PDoc.tmbundle/Snippets/property.tmSnippet +22 -0
  32. data/vendor/pdoc/PDoc.tmbundle/Snippets/section.tmSnippet +23 -0
  33. data/vendor/pdoc/PDoc.tmbundle/Syntaxes/PDoc.tmLanguage +33 -0
  34. data/vendor/pdoc/PDoc.tmbundle/info.plist +22 -0
  35. data/vendor/pdoc/README.markdown +34 -0
  36. data/vendor/pdoc/Rakefile +46 -0
  37. data/vendor/pdoc/bin/pdoc +58 -0
  38. data/vendor/pdoc/lib/pdoc/error.rb +4 -0
  39. data/vendor/pdoc/lib/pdoc/generators/abstract_generator.rb +16 -0
  40. data/vendor/pdoc/lib/pdoc/generators/html/helpers.rb +256 -0
  41. data/vendor/pdoc/lib/pdoc/generators/html/page.rb +71 -0
  42. data/vendor/pdoc/lib/pdoc/generators/html/syntax_highlighter.rb +41 -0
  43. data/vendor/pdoc/lib/pdoc/generators/html/template.rb +37 -0
  44. data/vendor/pdoc/lib/pdoc/generators/html/website.rb +194 -0
  45. data/vendor/pdoc/lib/pdoc/generators/html.rb +8 -0
  46. data/vendor/pdoc/lib/pdoc/generators/json.rb +15 -0
  47. data/vendor/pdoc/lib/pdoc/generators/pythonesque.rb +105 -0
  48. data/vendor/pdoc/lib/pdoc/generators.rb +6 -0
  49. data/vendor/pdoc/lib/pdoc/models/argument.rb +37 -0
  50. data/vendor/pdoc/lib/pdoc/models/base.rb +107 -0
  51. data/vendor/pdoc/lib/pdoc/models/callable.rb +19 -0
  52. data/vendor/pdoc/lib/pdoc/models/class.rb +28 -0
  53. data/vendor/pdoc/lib/pdoc/models/class_method.rb +18 -0
  54. data/vendor/pdoc/lib/pdoc/models/class_property.rb +9 -0
  55. data/vendor/pdoc/lib/pdoc/models/constant.rb +9 -0
  56. data/vendor/pdoc/lib/pdoc/models/constructor.rb +14 -0
  57. data/vendor/pdoc/lib/pdoc/models/container.rb +114 -0
  58. data/vendor/pdoc/lib/pdoc/models/entity.rb +54 -0
  59. data/vendor/pdoc/lib/pdoc/models/instance_method.rb +18 -0
  60. data/vendor/pdoc/lib/pdoc/models/instance_property.rb +9 -0
  61. data/vendor/pdoc/lib/pdoc/models/mixin.rb +10 -0
  62. data/vendor/pdoc/lib/pdoc/models/namespace.rb +10 -0
  63. data/vendor/pdoc/lib/pdoc/models/root.rb +27 -0
  64. data/vendor/pdoc/lib/pdoc/models/section.rb +19 -0
  65. data/vendor/pdoc/lib/pdoc/models/signature.rb +27 -0
  66. data/vendor/pdoc/lib/pdoc/models/utility.rb +11 -0
  67. data/vendor/pdoc/lib/pdoc/models.rb +47 -0
  68. data/vendor/pdoc/lib/pdoc/parser/argument_description_nodes.rb +21 -0
  69. data/vendor/pdoc/lib/pdoc/parser/basic_nodes.rb +31 -0
  70. data/vendor/pdoc/lib/pdoc/parser/description_nodes.rb +42 -0
  71. data/vendor/pdoc/lib/pdoc/parser/documentation_nodes.rb +483 -0
  72. data/vendor/pdoc/lib/pdoc/parser/ebnf_arguments_nodes.rb +58 -0
  73. data/vendor/pdoc/lib/pdoc/parser/ebnf_expression_nodes.rb +227 -0
  74. data/vendor/pdoc/lib/pdoc/parser/fragment.rb +55 -0
  75. data/vendor/pdoc/lib/pdoc/parser/section_content_nodes.rb +19 -0
  76. data/vendor/pdoc/lib/pdoc/parser/tags_nodes.rb +14 -0
  77. data/vendor/pdoc/lib/pdoc/parser/treetop_files/argument_description.treetop +31 -0
  78. data/vendor/pdoc/lib/pdoc/parser/treetop_files/basic.treetop +41 -0
  79. data/vendor/pdoc/lib/pdoc/parser/treetop_files/description.treetop +7 -0
  80. data/vendor/pdoc/lib/pdoc/parser/treetop_files/documentation.treetop +75 -0
  81. data/vendor/pdoc/lib/pdoc/parser/treetop_files/ebnf_arguments.treetop +33 -0
  82. data/vendor/pdoc/lib/pdoc/parser/treetop_files/ebnf_expression.treetop +70 -0
  83. data/vendor/pdoc/lib/pdoc/parser/treetop_files/ebnf_javascript.treetop +54 -0
  84. data/vendor/pdoc/lib/pdoc/parser/treetop_files/events.treetop +17 -0
  85. data/vendor/pdoc/lib/pdoc/parser/treetop_files/section_content.treetop +8 -0
  86. data/vendor/pdoc/lib/pdoc/parser/treetop_files/tags.treetop +31 -0
  87. data/vendor/pdoc/lib/pdoc/parser.rb +109 -0
  88. data/vendor/pdoc/lib/pdoc/runner.rb +110 -0
  89. data/vendor/pdoc/lib/pdoc/treemaker.rb +94 -0
  90. data/vendor/pdoc/lib/pdoc.rb +32 -0
  91. data/vendor/pdoc/pdoc-0.2.0.gem +0 -0
  92. data/vendor/pdoc/pdoc.gemspec +31 -0
  93. data/vendor/pdoc/templates/html/assets/images/pdoc/alias.png +0 -0
  94. data/vendor/pdoc/templates/html/assets/images/pdoc/class.png +0 -0
  95. data/vendor/pdoc/templates/html/assets/images/pdoc/class_deprecated.png +0 -0
  96. data/vendor/pdoc/templates/html/assets/images/pdoc/class_method.png +0 -0
  97. data/vendor/pdoc/templates/html/assets/images/pdoc/class_property.png +0 -0
  98. data/vendor/pdoc/templates/html/assets/images/pdoc/constant.png +0 -0
  99. data/vendor/pdoc/templates/html/assets/images/pdoc/constructor.png +0 -0
  100. data/vendor/pdoc/templates/html/assets/images/pdoc/deprecated.png +0 -0
  101. data/vendor/pdoc/templates/html/assets/images/pdoc/description.png +0 -0
  102. data/vendor/pdoc/templates/html/assets/images/pdoc/information.png +0 -0
  103. data/vendor/pdoc/templates/html/assets/images/pdoc/instance_method.png +0 -0
  104. data/vendor/pdoc/templates/html/assets/images/pdoc/instance_property.png +0 -0
  105. data/vendor/pdoc/templates/html/assets/images/pdoc/method.png +0 -0
  106. data/vendor/pdoc/templates/html/assets/images/pdoc/method_deprecated.png +0 -0
  107. data/vendor/pdoc/templates/html/assets/images/pdoc/mixin.png +0 -0
  108. data/vendor/pdoc/templates/html/assets/images/pdoc/namespace.png +0 -0
  109. data/vendor/pdoc/templates/html/assets/images/pdoc/property.png +0 -0
  110. data/vendor/pdoc/templates/html/assets/images/pdoc/related_to.png +0 -0
  111. data/vendor/pdoc/templates/html/assets/images/pdoc/search-background.png +0 -0
  112. data/vendor/pdoc/templates/html/assets/images/pdoc/section-background.png +0 -0
  113. data/vendor/pdoc/templates/html/assets/images/pdoc/section.png +0 -0
  114. data/vendor/pdoc/templates/html/assets/images/pdoc/selected-section-background.png +0 -0
  115. data/vendor/pdoc/templates/html/assets/images/pdoc/subclass.png +0 -0
  116. data/vendor/pdoc/templates/html/assets/images/pdoc/superclass.png +0 -0
  117. data/vendor/pdoc/templates/html/assets/images/pdoc/utility.png +0 -0
  118. data/vendor/pdoc/templates/html/assets/javascripts/pdoc/application.js +478 -0
  119. data/vendor/pdoc/templates/html/assets/javascripts/pdoc/prototype.js +4874 -0
  120. data/vendor/pdoc/templates/html/assets/javascripts/pdoc/tabs.js +506 -0
  121. data/vendor/pdoc/templates/html/assets/stylesheets/pdoc/api.css +677 -0
  122. data/vendor/pdoc/templates/html/assets/stylesheets/pdoc/pygments.css +62 -0
  123. data/vendor/pdoc/templates/html/helpers.rb +35 -0
  124. data/vendor/pdoc/templates/html/index.erb +18 -0
  125. data/vendor/pdoc/templates/html/item_index.js.erb +6 -0
  126. data/vendor/pdoc/templates/html/layout.erb +67 -0
  127. data/vendor/pdoc/templates/html/leaf.erb +22 -0
  128. data/vendor/pdoc/templates/html/node.erb +30 -0
  129. data/vendor/pdoc/templates/html/partials/class_relationships.erb +19 -0
  130. data/vendor/pdoc/templates/html/partials/classes.erb +7 -0
  131. data/vendor/pdoc/templates/html/partials/constructor.erb +5 -0
  132. data/vendor/pdoc/templates/html/partials/description.erb +5 -0
  133. data/vendor/pdoc/templates/html/partials/link_list.erb +1 -0
  134. data/vendor/pdoc/templates/html/partials/method_signatures.erb +14 -0
  135. data/vendor/pdoc/templates/html/partials/methodized_note.erb +9 -0
  136. data/vendor/pdoc/templates/html/partials/mixins.erb +7 -0
  137. data/vendor/pdoc/templates/html/partials/namespaces.erb +7 -0
  138. data/vendor/pdoc/templates/html/partials/related_utilities.erb +5 -0
  139. data/vendor/pdoc/templates/html/partials/relationships.erb +11 -0
  140. data/vendor/pdoc/templates/html/partials/short_description_list.erb +7 -0
  141. data/vendor/pdoc/templates/html/partials/title.erb +22 -0
  142. data/vendor/pdoc/templates/html/section.erb +18 -0
  143. data/vendor/pdoc/test/fixtures/ajax.js +809 -0
  144. data/vendor/pdoc/test/fixtures/prototype.js +5789 -0
  145. data/vendor/pdoc/test/fixtures/test.txt +1 -0
  146. data/vendor/pdoc/test/fixtures/text.txt +13 -0
  147. data/vendor/pdoc/test/unit/parser/argument_description_test.rb +40 -0
  148. data/vendor/pdoc/test/unit/parser/basic_test.rb +55 -0
  149. data/vendor/pdoc/test/unit/parser/description_test.rb +34 -0
  150. data/vendor/pdoc/test/unit/parser/documentation_test.rb +520 -0
  151. data/vendor/pdoc/test/unit/parser/ebnf_arguments_test.rb +81 -0
  152. data/vendor/pdoc/test/unit/parser/ebnf_expression_test.rb +382 -0
  153. data/vendor/pdoc/test/unit/parser/ebnf_javascript_test.rb +37 -0
  154. data/vendor/pdoc/test/unit/parser/events_test.rb +27 -0
  155. data/vendor/pdoc/test/unit/parser/section_content_test.rb +44 -0
  156. data/vendor/pdoc/test/unit/parser/tags_test.rb +39 -0
  157. data/vendor/pdoc/test/unit/parser/test_fragment.rb +80 -0
  158. data/vendor/pdoc/test/unit/parser_test_helper.rb +62 -0
  159. data/vendor/pdoc/test/unit/runner/basic_test.rb +14 -0
  160. data/vendor/pdoc/test/unit/templates/html_helpers_test.rb +25 -0
  161. data/vendor/pdoc/vendor/albino.rb +122 -0
  162. data/vendor/pdoc/website/html/documentation.html +280 -0
  163. data/vendor/pdoc/website/html/images/pdoc.jpg +0 -0
  164. data/vendor/pdoc/website/html/index.html +84 -0
  165. data/vendor/pdoc/website/html/stylesheets/main.css +73 -0
  166. data/vendor/pdoc/website/html/stylesheets/reset.css +18 -0
  167. data/vendor/pdoc/website/markdown/syntax.markdown +226 -0
  168. metadata +153 -3
@@ -0,0 +1,227 @@
1
+ module EbnfExpression
2
+ class Base < Treetop::Runtime::SyntaxNode
3
+ def klass_name
4
+ js_namespace.to_a.last
5
+ end
6
+
7
+ def name
8
+ js_variable.value
9
+ end
10
+
11
+ def full_name
12
+ js_namespace.text_value
13
+ end
14
+
15
+ def namespace
16
+ js_namespace.text_value
17
+ end
18
+
19
+ def returns
20
+ return_value.value.text_value.strip
21
+ end
22
+
23
+ def to_s
24
+ text_value
25
+ end
26
+
27
+ def inspect
28
+ "#<#{self.class} @input=#{@input.inspect}>"
29
+ end
30
+ end
31
+
32
+ class Method < Base
33
+ def arguments
34
+ args.arguments.to_a
35
+ end
36
+
37
+ def methodized?
38
+ false
39
+ end
40
+
41
+ def signature
42
+ "#{name}#{args.text_value}"
43
+ end
44
+ end
45
+
46
+ class KlassMethod < Method
47
+ def klass_name
48
+ js_namespace.to_a.slice(-2)
49
+ end
50
+
51
+ def name
52
+ js_namespace.to_a.last
53
+ end
54
+
55
+ def methodized?
56
+ args.methodize.text_value == '@'
57
+ end
58
+
59
+ def namespace
60
+ js_namespace.to_a.slice(0..-2).join(".")
61
+ end
62
+
63
+ def signature
64
+ "#{namespace}.#{name}#{args.text_value.sub('@', '')}"
65
+ end
66
+ end
67
+
68
+ class Utility < Method
69
+ def klass_name
70
+ nil
71
+ end
72
+
73
+ def name
74
+ utility_name.text_value
75
+ end
76
+
77
+ def full_name
78
+ name
79
+ end
80
+
81
+ def namespace
82
+ ""
83
+ end
84
+ end
85
+
86
+ class InstanceMethod < Method
87
+ def accessor
88
+ instance_signature.instance_accessor
89
+ end
90
+
91
+ def args
92
+ instance_signature.args
93
+ end
94
+
95
+ def js_namespace
96
+ accessor.js_namespace
97
+ end
98
+
99
+ def js_variable
100
+ accessor.js_variable
101
+ end
102
+
103
+ def full_name
104
+ accessor.text_value
105
+ end
106
+
107
+ def signature
108
+ instance_signature.text_value
109
+ end
110
+ end
111
+
112
+ class Constructor < Method
113
+ def name
114
+ "new"
115
+ end
116
+
117
+ def full_name
118
+ "new #{super}"
119
+ end
120
+
121
+ def returns
122
+ nil
123
+ end
124
+
125
+ def signature
126
+ "#{full_name}#{args.text_value}"
127
+ end
128
+ end
129
+
130
+ class KlassProperty < Base
131
+ def klass_name
132
+ js_namespace.to_a.slice(-2)
133
+ end
134
+
135
+ def name
136
+ js_namespace.to_a.last
137
+ end
138
+
139
+ def namespace
140
+ js_namespace.to_a.slice(0..-2).join(".")
141
+ end
142
+
143
+ def signature
144
+ "#{namespace}.#{name}"
145
+ end
146
+ end
147
+
148
+ class InstanceProperty < Base
149
+ def accessor
150
+ instance_accessor
151
+ end
152
+
153
+ def js_namespace
154
+ accessor.js_namespace
155
+ end
156
+
157
+ def js_variable
158
+ accessor.js_variable
159
+ end
160
+
161
+ def full_name
162
+ accessor.text_value
163
+ end
164
+
165
+ def signature
166
+ "#{namespace}##{name}"
167
+ end
168
+ end
169
+
170
+ class Constant < Base
171
+ def klass_name
172
+ nil
173
+ end
174
+
175
+ def name
176
+ js_namespace.to_a.last
177
+ end
178
+
179
+ def namespace
180
+ js_namespace.to_a.slice(0..-2).join(".")
181
+ end
182
+
183
+ def returns
184
+ value.text_value.strip
185
+ end
186
+
187
+ def signature
188
+ "#{namespace}.#{name}"
189
+ end
190
+ end
191
+
192
+ class Namespace < Base
193
+ def klass_name
194
+ nil
195
+ end
196
+
197
+ def name
198
+ js_namespace.to_a.last
199
+ end
200
+
201
+ def namespace
202
+ js_namespace.to_a.slice(0..-2).join(".")
203
+ end
204
+
205
+ def mixins
206
+ second_line = elements.last
207
+ if second_line.empty?
208
+ []
209
+ else
210
+ [second_line.js_namespace].concat(second_line.more.elements.map{|e| e.elements.last})
211
+ end
212
+ end
213
+ end
214
+
215
+ class Klass < Namespace
216
+ def subklass?
217
+ !extends.elements.nil?
218
+ end
219
+
220
+ def superklass
221
+ subklass? ? extends.elements.last : nil
222
+ end
223
+ end
224
+
225
+ class Mixin < Namespace
226
+ end
227
+ end
@@ -0,0 +1,55 @@
1
+ require 'pdoc/error'
2
+
3
+ module PDoc
4
+ class Fragment
5
+ PREFIX_REGEXP = /^\s*\*?\s*/
6
+
7
+ attr_reader :line_number
8
+ def initialize(string, line_number)
9
+ @line_number = line_number
10
+ @string = string
11
+ end
12
+
13
+ def normalize
14
+ # Cleans up the text by removing opening and closing comment tags
15
+ # and removing the prefix off of every line.
16
+ # Raises and error if prefix are inconsistent. (Prefix is calculated
17
+ # by looking at line 2 of the comment)
18
+ results = []
19
+ lines.each_with_index do |line, index|
20
+ if index == 0 # first line
21
+ results << line.sub(/\s*\/\*\*\s*/, '') # remove opening /**
22
+ elsif index == lines.size - 1 # last line
23
+ results << line.sub(/\s*\*\*?\/\s*/, '') # remove closing **/
24
+ elsif line =~ prefix_regexp # correctly prefixed lines
25
+ results << line.sub(prefix_regexp, '') # remove optional prefix
26
+ else
27
+ raise InconsistentPrefixError.new(self, line, index)
28
+ end
29
+ end
30
+ results
31
+ end
32
+
33
+ def prefix
34
+ PREFIX_REGEXP.match(lines[1])[0] if lines.size > 2
35
+ end
36
+
37
+ def prefix_regexp
38
+ @prefix_regexp ||= Regexp.new('^' << Regexp.escape(prefix))
39
+ end
40
+
41
+ def lines
42
+ @lines ||= @string.split("\n")
43
+ end
44
+
45
+ class InconsistentPrefixError < PDocError
46
+ def initialize(fragment, line, index)
47
+ @fragment = fragment
48
+ actual = PREFIX_REGEXP.match(line)[0].inspect
49
+ msg = "Inconsistent prefixing at line ##{fragment.line_number + index}."
50
+ msg << "Expected prefix is: #{fragment.prefix.inspect}, actual prefix is: #{actual}"
51
+ super(msg)
52
+ end
53
+ end
54
+ end
55
+ end
@@ -0,0 +1,19 @@
1
+ module SectionContent
2
+ class Section < Treetop::Runtime::SyntaxNode
3
+ def name
4
+ title.text_value.strip
5
+ end
6
+
7
+ def description
8
+ text.to_s
9
+ end
10
+
11
+ def full_name
12
+ name
13
+ end
14
+
15
+ def id
16
+ name.downcase.gsub(/\s+/, "_")
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,14 @@
1
+ module Tags
2
+ class Tags < Treetop::Runtime::SyntaxNode
3
+ include Enumerable
4
+
5
+ def include?(tag_name)
6
+ any? {|tag| tag.name == tag_name }
7
+ end
8
+
9
+ def each
10
+ yield tag
11
+ more.elements.each { |e| yield e.tag }
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,31 @@
1
+ grammar ArgumentDescription
2
+ include EbnfJavascript
3
+
4
+ rule argument_description
5
+ first:argument_description_first_line more:(argument_description_line)* <ArgumentDescription>
6
+ end
7
+
8
+ rule argument_description_first_line
9
+ line space* '-' space+ argument_name arg_types:(space+ arguments_types)? ':' description:char+
10
+ end
11
+
12
+ rule argument_description_line
13
+ line space* first_char:(!'-' .) more_char:char+ {
14
+ def to_s
15
+ first_char.text_value << more_char.text_value
16
+ end
17
+ }
18
+ end
19
+
20
+ rule argument_name
21
+ '@'? name:[a-zA-Z$]+
22
+ end
23
+
24
+ rule arguments_types
25
+ '(' space* argument_type more:(space+ '|' space+ argument_type)* space* ')'
26
+ end
27
+
28
+ rule argument_type
29
+ js_namespace / '?'
30
+ end
31
+ end
@@ -0,0 +1,41 @@
1
+ grammar Basic
2
+ rule test_base
3
+ (blank_line / text_line / comment_start / comment_end / line / line_break / space / char)+
4
+ end
5
+
6
+ rule blank_line
7
+ line_break space* line_separator space* &(line_break) <BlankLine>
8
+ end
9
+
10
+ rule text_line
11
+ line text:char+ <TextLine>
12
+ end
13
+
14
+ rule line
15
+ line_break space* line_separator space <Line>
16
+ end
17
+
18
+ rule comment_start
19
+ line_break space* "/**" space* <CommentStart>
20
+ end
21
+
22
+ rule comment_end
23
+ line_break space* "**/" space* line_break <CommentEnd>
24
+ end
25
+
26
+ rule line_break
27
+ [\n] <LineBreak>
28
+ end
29
+
30
+ rule line_separator
31
+ "*"
32
+ end
33
+
34
+ rule char
35
+ ![\n] . <Char>
36
+ end
37
+
38
+ rule space
39
+ " " <Space>
40
+ end
41
+ end
@@ -0,0 +1,7 @@
1
+ grammar Description
2
+ include Basic
3
+
4
+ rule text
5
+ (blank_line / text_line)* <Text>
6
+ end
7
+ end
@@ -0,0 +1,75 @@
1
+ grammar Documentation
2
+ include Tags
3
+ include Events
4
+ include ArgumentDescription
5
+ include Description
6
+ include SectionContent
7
+ include EbnfExpression
8
+
9
+ rule documentation
10
+ ((!comment_start .)* doc_instance)+ (!comment_start .)* <Doc> / (!comment_start .)* {
11
+ def each
12
+ end
13
+ }
14
+ end
15
+
16
+ rule doc_instance
17
+ section_doc / klass_method_doc / instance_method_doc / klass_property_doc / instance_property_doc / utility_doc / constructor_doc / klass_doc / mixin_doc / constant_doc / namespace_doc
18
+ end
19
+
20
+ rule section_doc
21
+ start section comment_end <Section>
22
+ end
23
+
24
+ rule constructor_doc
25
+ start ebnf:(line constructor)+ argument_descriptions events text comment_end <Constructor>
26
+ end
27
+
28
+ rule mixin_doc
29
+ start line ebnf:mixin text comment_end <Mixin>
30
+ end
31
+
32
+ rule klass_doc
33
+ start line space* ebnf:klass text comment_end <Klass>
34
+ end
35
+
36
+ rule klass_method_doc
37
+ start ebnf:(line klass_method)+ argument_descriptions events text comment_end <KlassMethod>
38
+ end
39
+
40
+ rule instance_method_doc
41
+ start ebnf:(line instance_method)+ argument_descriptions events text comment_end <InstanceMethod>
42
+ end
43
+
44
+ rule klass_property_doc
45
+ start line ebnf:klass_property text comment_end <KlassProperty>
46
+ end
47
+
48
+ rule instance_property_doc
49
+ start line ebnf:instance_property text comment_end <InstanceProperty>
50
+ end
51
+
52
+ rule constant_doc
53
+ start line ebnf:constant text comment_end <Constant>
54
+ end
55
+
56
+ rule utility_doc
57
+ start ebnf:(line utility)+ argument_descriptions events text comment_end <Utility>
58
+ end
59
+
60
+ rule namespace_doc
61
+ start line space* ebnf:namespace text comment_end <Namespace>
62
+ end
63
+
64
+ rule start
65
+ comment_start space* (tags)?
66
+ end
67
+
68
+ rule argument_descriptions
69
+ (argument_description+ blank_line)?
70
+ end
71
+
72
+ rule events
73
+ (super)?
74
+ end
75
+ end
@@ -0,0 +1,33 @@
1
+ grammar EbnfArguments
2
+ include EbnfJavascript
3
+
4
+ rule arguments
5
+ first_argument:argument rest:(argument_separator argument)* <Arguments>
6
+ /
7
+ space* {
8
+ def to_a
9
+ []
10
+ end
11
+ }
12
+ end
13
+
14
+ rule argument
15
+ optional_argument / required_argument
16
+ end
17
+
18
+ rule argument_separator
19
+ space* (&'[' / ',')
20
+ end
21
+
22
+ rule optional_argument
23
+ "[" space* ","? required_argument default:(default_value?) nested:(optional_argument*) "]" <OptionalArgument>
24
+ end
25
+
26
+ rule default_value
27
+ space* "=" space* value:[^\[\]]+
28
+ end
29
+
30
+ rule required_argument
31
+ space* (js_variable / js_object) '...'? space* <Argument>
32
+ end
33
+ end
@@ -0,0 +1,70 @@
1
+ grammar EbnfExpression
2
+ include EbnfArguments
3
+ rule ebnf
4
+ klass_method / instance_method / klass_property / instance_property / utility / constructor / mixin / klass / constant / namespace
5
+ end
6
+
7
+ rule mixin
8
+ space* 'mixin' space+ js_namespace (includes)? <Mixin>
9
+ end
10
+
11
+ rule klass
12
+ space* 'class' space+ js_namespace extends:(space+ '<' space+ js_namespace)? (includes)? <Klass>
13
+ end
14
+
15
+ rule includes
16
+ line space* 'includes' space+ js_namespace more:(',' space+ js_namespace)*
17
+ end
18
+
19
+ rule constructor
20
+ space* 'new' (space)+ js_namespace args <Constructor>
21
+ end
22
+
23
+ rule instance_accessor
24
+ js_namespace '#' js_variable
25
+ end
26
+
27
+ rule instance_signature
28
+ instance_accessor args
29
+ end
30
+
31
+ rule klass_method
32
+ space* js_namespace args return_value <KlassMethod>
33
+ end
34
+
35
+ rule instance_method
36
+ space* instance_signature return_value <InstanceMethod>
37
+ end
38
+
39
+ rule klass_property
40
+ space* js_namespace return_value <KlassProperty>
41
+ end
42
+
43
+ rule instance_property
44
+ space* instance_accessor return_value <InstanceProperty>
45
+ end
46
+
47
+ rule constant
48
+ space* js_namespace space* "=" space* value:(char)+ space* <Constant>
49
+ end
50
+
51
+ rule utility
52
+ space* utility_name:('$' [$a-zA-Z]*) args return_value <Utility>
53
+ end
54
+
55
+ rule args
56
+ '(' space* methodize:'@'? arguments space* ')' {
57
+ def text_value
58
+ super.to_s.sub('( )', '()')
59
+ end
60
+ }
61
+ end
62
+
63
+ rule namespace
64
+ js_namespace (includes)? <Namespace>
65
+ end
66
+
67
+ rule return_value
68
+ space* '->' space* value:(char)+
69
+ end
70
+ end
@@ -0,0 +1,54 @@
1
+ grammar EbnfJavascript
2
+ include Basic
3
+ rule primitive
4
+ js_all_caps_constant / js_namespace / js_constant / js_variable / js_object
5
+ end
6
+
7
+ rule js_object
8
+ '{' [^}]* '}'
9
+ end
10
+
11
+ rule js_constant
12
+ [A-Z] [a-zA-Z_0-9$]* {
13
+ def value
14
+ text_value
15
+ end
16
+ }
17
+ end
18
+
19
+ rule js_all_caps_constant
20
+ [A-Z] [A-Z_]+ {
21
+ def value
22
+ text_value
23
+ end
24
+ }
25
+ end
26
+
27
+ rule js_variable
28
+ [_a-zA-Z] [_a-zA-Z0-9]* {
29
+ def value
30
+ text_value
31
+ end
32
+ }
33
+ end
34
+
35
+ rule js_namespace
36
+ (js_constant / js_all_caps_constant / js_variable) ('.' (js_constant / js_all_caps_constant / js_variable))* {
37
+ def namespace
38
+ to_a.slice(0..-2).join(".")
39
+ end
40
+
41
+ def name
42
+ to_a.pop
43
+ end
44
+
45
+ def to_a
46
+ text_value.split('.')
47
+ end
48
+
49
+ def full_name
50
+ text_value
51
+ end
52
+ }
53
+ end
54
+ end
@@ -0,0 +1,17 @@
1
+ grammar Events
2
+ include Basic
3
+
4
+ rule events
5
+ line space* 'fires' space+ event more:(',' space* event)* {
6
+ def to_a
7
+ [event.text_value].concat(more.elements.map{ |e| e.event.text_value })
8
+ end
9
+ }
10
+ end
11
+
12
+ rule event
13
+ [a-zA-Z]+ (':' [a-zA-Z]+)*
14
+ end
15
+ end
16
+
17
+
@@ -0,0 +1,8 @@
1
+ grammar SectionContent
2
+ include Basic
3
+ include Description
4
+
5
+ rule section
6
+ line space* '==' space* title:[a-zA-Z0-9\s]+ space* '==' space* text <Section>
7
+ end
8
+ end
@@ -0,0 +1,31 @@
1
+ grammar Tags
2
+ include Basic
3
+
4
+ rule tags
5
+ tag more:(', ' tag)* <Tags>
6
+ end
7
+
8
+ rule tag
9
+ tag_name opt:(": " tag_value)? {
10
+ def name
11
+ tag_name.text_value
12
+ end
13
+
14
+ def value
15
+ if opt.respond_to?("tag_value")
16
+ opt.tag_value.text_value
17
+ else
18
+ nil
19
+ end
20
+ end
21
+ }
22
+ end
23
+
24
+ rule tag_value
25
+ (![\n:,] .)+
26
+ end
27
+
28
+ rule tag_name
29
+ (![\n:,] .)+
30
+ end
31
+ end