haml-edge 2.1.21 → 2.1.22

Sign up to get free protection for your applications and to get access to all the features.
Files changed (61) hide show
  1. data/EDGE_GEM_VERSION +1 -1
  2. data/FAQ.md +142 -0
  3. data/{README.rdoc → README.md} +141 -141
  4. data/Rakefile +29 -17
  5. data/VERSION +1 -1
  6. data/lib/haml/buffer.rb +63 -27
  7. data/lib/haml/engine.rb +103 -80
  8. data/lib/haml/error.rb +7 -7
  9. data/lib/haml/exec.rb +80 -26
  10. data/lib/haml/filters.rb +106 -40
  11. data/lib/haml/helpers/action_view_extensions.rb +34 -39
  12. data/lib/haml/helpers/action_view_mods.rb +132 -139
  13. data/lib/haml/helpers.rb +207 -153
  14. data/lib/haml/html.rb +40 -21
  15. data/lib/haml/precompiler.rb +2 -0
  16. data/lib/haml/shared.rb +34 -3
  17. data/lib/haml/template/patch.rb +1 -1
  18. data/lib/haml/template/plugin.rb +0 -2
  19. data/lib/haml/template.rb +5 -0
  20. data/lib/haml/util.rb +136 -1
  21. data/lib/haml/version.rb +16 -4
  22. data/lib/haml.rb +502 -481
  23. data/lib/sass/css.rb +106 -68
  24. data/lib/sass/engine.rb +55 -22
  25. data/lib/sass/environment.rb +52 -21
  26. data/lib/sass/error.rb +23 -12
  27. data/lib/sass/files.rb +27 -0
  28. data/lib/sass/plugin/merb.rb +2 -2
  29. data/lib/sass/plugin/rails.rb +0 -2
  30. data/lib/sass/plugin.rb +32 -23
  31. data/lib/sass/repl.rb +7 -0
  32. data/lib/sass/script/bool.rb +9 -5
  33. data/lib/sass/script/color.rb +87 -1
  34. data/lib/sass/script/funcall.rb +23 -2
  35. data/lib/sass/script/functions.rb +93 -44
  36. data/lib/sass/script/lexer.rb +33 -3
  37. data/lib/sass/script/literal.rb +93 -1
  38. data/lib/sass/script/node.rb +14 -0
  39. data/lib/sass/script/number.rb +128 -4
  40. data/lib/sass/script/operation.rb +16 -1
  41. data/lib/sass/script/parser.rb +51 -21
  42. data/lib/sass/script/string.rb +7 -4
  43. data/lib/sass/script/unary_operation.rb +14 -1
  44. data/lib/sass/script/variable.rb +12 -1
  45. data/lib/sass/script.rb +26 -5
  46. data/lib/sass/tree/attr_node.rb +46 -9
  47. data/lib/sass/tree/comment_node.rb +41 -1
  48. data/lib/sass/tree/debug_node.rb +8 -0
  49. data/lib/sass/tree/directive_node.rb +20 -0
  50. data/lib/sass/tree/file_node.rb +12 -0
  51. data/lib/sass/tree/for_node.rb +15 -0
  52. data/lib/sass/tree/if_node.rb +22 -0
  53. data/lib/sass/tree/mixin_def_node.rb +12 -1
  54. data/lib/sass/tree/mixin_node.rb +13 -0
  55. data/lib/sass/tree/node.rb +136 -6
  56. data/lib/sass/tree/rule_node.rb +66 -7
  57. data/lib/sass/tree/variable_node.rb +10 -0
  58. data/lib/sass/tree/while_node.rb +11 -1
  59. data/lib/sass.rb +544 -534
  60. metadata +7 -6
  61. data/FAQ +0 -138
data/lib/haml/buffer.rb CHANGED
@@ -1,76 +1,92 @@
1
1
  module Haml
2
- # This class is used only internally. It holds the buffer of XHTML that
3
- # is eventually output by Haml::Engine's to_html method. It's called
4
- # from within the precompiled code, and helps reduce the amount of
5
- # processing done within instance_eval'd code.
2
+ # This class is used only internally. It holds the buffer of HTML that
3
+ # is eventually output as the resulting document.
4
+ # It's called from within the precompiled code,
5
+ # and helps reduce the amount of processing done within `instance_eval`ed code.
6
6
  class Buffer
7
7
  include Haml::Helpers
8
8
  include Haml::Util
9
9
 
10
- # The string that holds the compiled XHTML. This is aliased as
11
- # _erbout for compatibility with ERB-specific code.
10
+ # The string that holds the compiled HTML. This is aliased as
11
+ # `_erbout` for compatibility with ERB-specific code.
12
+ #
13
+ # @return [String]
12
14
  attr_accessor :buffer
13
15
 
14
- # The options hash passed in from Haml::Engine.
16
+ # The options hash passed in from {Haml::Engine}.
17
+ #
18
+ # @return [Hash<String, Object>]
19
+ # @see Haml::Engine#options_for_buffer
15
20
  attr_accessor :options
16
21
 
17
- # The Buffer for the enclosing Haml document.
22
+ # The {Buffer} for the enclosing Haml document.
18
23
  # This is set for partials and similar sorts of nested templates.
19
- # It's nil at the top level (see #toplevel?).
24
+ # It's `nil` at the top level (see \{#toplevel?}).
25
+ #
26
+ # @return [Buffer]
20
27
  attr_accessor :upper
21
28
 
22
29
  # nil if there's no capture_haml block running,
23
30
  # and the position at which it's beginning the capture if there is one.
31
+ #
32
+ # @return [Fixnum, nil]
24
33
  attr_accessor :capture_position
25
34
 
26
- # See #active?
35
+ # @return [Boolean]
36
+ # @see #active?
27
37
  attr_writer :active
28
38
 
29
- # True if the format is XHTML
39
+ # @return [Boolean] Whether or not the format is XHTML
30
40
  def xhtml?
31
41
  not html?
32
42
  end
33
43
 
34
- # True if the format is any flavor of HTML
44
+ # @return [Boolean] Whether or not the format is any flavor of HTML
35
45
  def html?
36
46
  html4? or html5?
37
47
  end
38
48
 
39
- # True if the format is HTML4
49
+ # @return [Boolean] Whether or not the format is HTML4
40
50
  def html4?
41
51
  @options[:format] == :html4
42
52
  end
43
53
 
44
- # True if the format is HTML5
54
+ # @return [Boolean] Whether or not the format is HTML5.
45
55
  def html5?
46
56
  @options[:format] == :html5
47
57
  end
48
58
 
49
- # True if this buffer is a top-level template,
50
- # as opposed to a nested partial.
59
+ # @return [Boolean] Whether or not this buffer is a top-level template,
60
+ # as opposed to a nested partial
51
61
  def toplevel?
52
62
  upper.nil?
53
63
  end
54
64
 
55
- # True if this buffer is currently being used to render a Haml template.
56
- # However, this returns false if a subtemplate is being rendered,
65
+ # Whether or not this buffer is currently being used to render a Haml template.
66
+ # Returns `false` if a subtemplate is being rendered,
57
67
  # even if it's a subtemplate of this buffer's template.
68
+ #
69
+ # @return [Boolean]
58
70
  def active?
59
71
  @active
60
72
  end
61
73
 
62
- # Gets the current tabulation of the document.
74
+ # @return [Fixnum] The current indentation level of the document
63
75
  def tabulation
64
76
  @real_tabs + @tabulation
65
77
  end
66
78
 
67
79
  # Sets the current tabulation of the document.
80
+ #
81
+ # @param val [Fixnum] The new tabulation
68
82
  def tabulation=(val)
69
83
  val = val - @real_tabs
70
84
  @tabulation = val > -1 ? val : 0
71
85
  end
72
86
 
73
- # Creates a new buffer.
87
+ # @param upper [Buffer] The parent buffer
88
+ # @param options [Hash<Symbol, Object>] An options hash.
89
+ # See {Haml::Engine#options\_for\_buffer}
74
90
  def initialize(upper = nil, options = {})
75
91
  @active = true
76
92
  @upper = upper
@@ -87,6 +103,13 @@ module Haml
87
103
  @real_tabs = 0
88
104
  end
89
105
 
106
+ # Appends text to the buffer, properly tabulated.
107
+ # Also modifies the document's indentation.
108
+ #
109
+ # @param text [String] The text to append
110
+ # @param tab_change [Fixnum] The number of tabs by which to increase
111
+ # or decrease the document's indentation
112
+ # @param dont_tab_up [Boolean] If true, don't indent the first line of `text`
90
113
  def push_text(text, tab_change, dont_tab_up)
91
114
  if @tabulation > 0
92
115
  # Have to push every line in by the extra user set tabulation.
@@ -100,6 +123,10 @@ module Haml
100
123
  @real_tabs += tab_change
101
124
  end
102
125
 
126
+ # Modifies the indentation of the document.
127
+ #
128
+ # @param tab_change [Fixnum] The number of tabs by which to increase
129
+ # or decrease the document's indentation
103
130
  def adjust_tabs(tab_change)
104
131
  @real_tabs += tab_change
105
132
  end
@@ -164,8 +191,8 @@ module Haml
164
191
  <% end %>
165
192
  RUBY
166
193
 
167
- # Takes the various information about the opening tag for an
168
- # element, formats it, and adds it to the buffer.
194
+ # Takes the various information about the opening tag for an element,
195
+ # formats it, and appends it to the buffer.
169
196
  def open_tag(name, self_closing, try_one_line, preserve_tag, escape_html, class_id,
170
197
  nuke_outer_whitespace, nuke_inner_whitespace, obj_ref, content, *attributes_hashes)
171
198
  tabulation = @real_tabs
@@ -208,6 +235,18 @@ RUBY
208
235
  buffer << buffer.slice!(capture_position..-1).rstrip
209
236
  end
210
237
 
238
+ # Merges two attribute hashes.
239
+ # This is the same as `to.merge!(from)`,
240
+ # except that it merges id and class attributes.
241
+ #
242
+ # ids are concatenated with `"_"`,
243
+ # and classes are concatenated with `" "`.
244
+ #
245
+ # Destructively modifies both `to` and `from`.
246
+ #
247
+ # @param to [Hash<String, String>] The attribute hash to merge into
248
+ # @param from [Hash<String, String>] The attribute hash to merge from
249
+ # @return [Hash<String, String>] `to`, after being merged
211
250
  def self.merge_attrs(to, from)
212
251
  if to['id'] && from['id']
213
252
  to['id'] << '_' << from.delete('id')
@@ -227,11 +266,8 @@ RUBY
227
266
 
228
267
  private
229
268
 
230
- # Some of these methods are exposed as public class methods
231
- # so they can be re-used in helpers.
232
-
233
269
  @@tab_cache = {}
234
- # Gets <tt>count</tt> tabs. Mostly for internal use.
270
+ # Gets `count` tabs. Mostly for internal use.
235
271
  def tabs(count = 0)
236
272
  tabs = [count + @tabulation, 0].max
237
273
  @@tab_cache[tabs] ||= ' ' * tabs
@@ -240,7 +276,7 @@ RUBY
240
276
  # Takes an array of objects and uses the class and id of the first
241
277
  # one to create an attributes hash.
242
278
  # The second object, if present, is used as a prefix,
243
- # just like you can do with dom_id() and dom_class() in Rails
279
+ # just like you can do with `dom_id()` and `dom_class()` in Rails
244
280
  def parse_object_ref(ref)
245
281
  prefix = ref[1]
246
282
  ref = ref[0]
data/lib/haml/engine.rb CHANGED
@@ -5,58 +5,62 @@ require 'haml/filters'
5
5
  require 'haml/error'
6
6
 
7
7
  module Haml
8
- # This is the class where all the parsing and processing of the Haml
9
- # template is done. It can be directly used by the user by creating a
10
- # new instance and calling <tt>to_html</tt> to render the template. For example:
8
+ # This is the frontend for using Haml programmatically.
9
+ # It can be directly used by the user by creating a
10
+ # new instance and calling \{#render} to render the template.
11
+ # For example:
11
12
  #
12
- # template = File.read('templates/really_cool_template.haml')
13
- # haml_engine = Haml::Engine.new(template)
14
- # output = haml_engine.to_html
15
- # puts output
13
+ # template = File.read('templates/really_cool_template.haml')
14
+ # haml_engine = Haml::Engine.new(template)
15
+ # output = haml_engine.render
16
+ # puts output
16
17
  class Engine
17
18
  include Precompiler
18
19
 
19
- # Allow reading and writing of the options hash
20
+ # The options hash.
21
+ # See [the Haml options documentation](../Haml.html#haml_options).
22
+ #
23
+ # @return [Hash<Symbol, Object>]
20
24
  attr_accessor :options
21
25
 
22
- # This string contains the source code that is evaluated
23
- # to produce the Haml document.
26
+ # The source code that is evaluated to produce the Haml document.
27
+ #
28
+ # @return [String]
24
29
  attr_accessor :precompiled
25
30
 
26
- # A string containing the indentation used for the Haml document.
27
- # nil if the indentation is ambiguous
31
+ # The indentation used in the Haml document,
32
+ # or `nil` if the indentation is ambiguous
28
33
  # (for example, for a single-level document).
34
+ #
35
+ # @return [String]
29
36
  attr_accessor :indentation
30
37
 
31
- # True if the format is XHTML
38
+ # @return [Boolean] Whether or not the format is XHTML.
32
39
  def xhtml?
33
40
  not html?
34
41
  end
35
42
 
36
- # True if the format is any flavor of HTML
43
+ # @return [Boolean] Whether or not the format is any flavor of HTML.
37
44
  def html?
38
45
  html4? or html5?
39
46
  end
40
47
 
41
- # True if the format is HTML4
48
+ # @return [Boolean] Whether or not the format is HTML4.
42
49
  def html4?
43
50
  @options[:format] == :html4
44
51
  end
45
52
 
46
- # True if the format is HTML5
53
+ # @return [Boolean] Whether or not the format is HTML5.
47
54
  def html5?
48
55
  @options[:format] == :html5
49
56
  end
50
57
 
51
- # Creates a new instace of Haml::Engine that will compile the given
52
- # template string when <tt>render</tt> is called.
53
- # See the Haml module documentation for available options.
54
- #
55
- #--
56
- # When adding options, remember to add information about them
57
- # to lib/haml.rb!
58
- #++
58
+ # Precompiles the Haml template.
59
59
  #
60
+ # @param template [String] The Haml template
61
+ # @param options [Hash<Symbol, Object>] An options hash;
62
+ # see [the Haml options documentation](../Haml.html#haml_options)
63
+ # @raise [Haml::Error] if there's a Haml syntax error in the template
60
64
  def initialize(template, options = {})
61
65
  @options = {
62
66
  :suppress_eval => false,
@@ -108,39 +112,45 @@ END
108
112
 
109
113
  # Processes the template and returns the result as a string.
110
114
  #
111
- # +scope+ is the context in which the template is evaluated.
112
- # If it's a Binding or Proc object,
113
- # Haml uses it as the second argument to Kernel#eval;
114
- # otherwise, Haml just uses its #instance_eval context.
115
+ # `scope` is the context in which the template is evaluated.
116
+ # If it's a `Binding` or `Proc` object,
117
+ # Haml uses it as the second argument to `Kernel#eval`;
118
+ # otherwise, Haml just uses its `#instance_eval` context.
115
119
  #
116
120
  # Note that Haml modifies the evaluation context
117
- # (either the scope object or the "self" object of the scope binding).
118
- # It extends Haml::Helpers, and various instance variables are set
119
- # (all prefixed with "haml").
121
+ # (either the scope object or the `self` object of the scope binding).
122
+ # It extends {Haml::Helpers}, and various instance variables are set
123
+ # (all prefixed with `haml_`).
120
124
  # For example:
121
125
  #
122
- # s = "foobar"
123
- # Haml::Engine.new("%p= upcase").render(s) #=> "<p>FOOBAR</p>"
126
+ # s = "foobar"
127
+ # Haml::Engine.new("%p= upcase").render(s) #=> "<p>FOOBAR</p>"
124
128
  #
125
- # # s now extends Haml::Helpers
126
- # s.responds_to?(:html_attrs) #=> true
129
+ # # s now extends Haml::Helpers
130
+ # s.responds_to?(:html_attrs) #=> true
127
131
  #
128
- # +locals+ is a hash of local variables to make available to the template.
132
+ # `locals` is a hash of local variables to make available to the template.
129
133
  # For example:
130
134
  #
131
- # Haml::Engine.new("%p= foo").render(Object.new, :foo => "Hello, world!") #=> "<p>Hello, world!</p>"
135
+ # Haml::Engine.new("%p= foo").render(Object.new, :foo => "Hello, world!") #=> "<p>Hello, world!</p>"
132
136
  #
133
137
  # If a block is passed to render,
134
- # that block is run when +yield+ is called
138
+ # that block is run when `yield` is called
135
139
  # within the template.
136
140
  #
137
141
  # Due to some Ruby quirks,
138
- # if scope is a Binding or Proc object and a block is given,
142
+ # if `scope` is a `Binding` or `Proc` object and a block is given,
139
143
  # the evaluation context may not be quite what the user expects.
140
- # In particular, it's equivalent to passing <tt>eval("self", scope)</tt> as scope.
144
+ # In particular, it's equivalent to passing `eval("self", scope)` as `scope`.
141
145
  # This won't have an effect in most cases,
142
- # but if you're relying on local variables defined in the context of scope,
146
+ # but if you're relying on local variables defined in the context of `scope`,
143
147
  # they won't work.
148
+ #
149
+ # @param scope [Binding, Proc, Object] The context in which the template is evaluated
150
+ # @param locals [Hash<Symbol, Object>] Local variables that will be made available
151
+ # to the template
152
+ # @param block [#to_proc] A block that can be yielded to within the template
153
+ # @return [String] The rendered template
144
154
  def render(scope = Object.new, locals = {}, &block)
145
155
  buffer = Haml::Buffer.new(scope.instance_variable_get('@haml_buffer'), options_for_buffer)
146
156
 
@@ -173,24 +183,27 @@ END
173
183
  # Returns a proc that, when called,
174
184
  # renders the template and returns the result as a string.
175
185
  #
176
- # +scope+ works the same as it does for render.
186
+ # `scope` works the same as it does for render.
177
187
  #
178
188
  # The first argument of the returned proc is a hash of local variable names to values.
179
189
  # However, due to an unfortunate Ruby quirk,
180
190
  # the local variables which can be assigned must be pre-declared.
181
- # This is done with the +local_names+ argument.
191
+ # This is done with the `local_names` argument.
182
192
  # For example:
183
193
  #
184
- # # This works
185
- # Haml::Engine.new("%p= foo").render_proc(Object.new, :foo).call :foo => "Hello!"
186
- # #=> "<p>Hello!</p>"
194
+ # # This works
195
+ # Haml::Engine.new("%p= foo").render_proc(Object.new, :foo).call :foo => "Hello!"
196
+ # #=> "<p>Hello!</p>"
197
+ #
198
+ # # This doesn't
199
+ # Haml::Engine.new("%p= foo").render_proc.call :foo => "Hello!"
200
+ # #=> NameError: undefined local variable or method `foo'
187
201
  #
188
- # # This doesn't
189
- # Haml::Engine.new("%p= foo").render_proc.call :foo => "Hello!"
190
- # #=> NameError: undefined local variable or method `foo'
202
+ # The proc doesn't take a block; any yields in the template will fail.
191
203
  #
192
- # The proc doesn't take a block;
193
- # any yields in the template will fail.
204
+ # @param scope [Binding, Proc, Object] The context in which the template is evaluated
205
+ # @param local_names [Array<Symbol>] The names of the locals that can be passed to the proc
206
+ # @return [Proc] The proc that will run the template
194
207
  def render_proc(scope = Object.new, *local_names)
195
208
  if scope.is_a?(Binding) || scope.is_a?(Proc)
196
209
  scope_object = eval("self", scope)
@@ -203,41 +216,44 @@ END
203
216
  precompiled_with_ambles(local_names) + "}\n", scope, @options[:filename], @options[:line])
204
217
  end
205
218
 
206
- # Defines a method on +object+
207
- # with the given name
219
+ # Defines a method on `object` with the given name
208
220
  # that renders the template and returns the result as a string.
209
221
  #
210
- # If +object+ is a class or module,
222
+ # If `object` is a class or module,
211
223
  # the method will instead by defined as an instance method.
212
224
  # For example:
213
225
  #
214
- # t = Time.now
215
- # Haml::Engine.new("%p\n Today's date is\n .date= self.to_s").def_method(t, :render)
216
- # t.render #=> "<p>\n Today's date is\n <div class='date'>Fri Nov 23 18:28:29 -0800 2007</div>\n</p>\n"
226
+ # t = Time.now
227
+ # Haml::Engine.new("%p\n Today's date is\n .date= self.to_s").def_method(t, :render)
228
+ # t.render #=> "<p>\n Today's date is\n <div class='date'>Fri Nov 23 18:28:29 -0800 2007</div>\n</p>\n"
217
229
  #
218
- # Haml::Engine.new(".upcased= upcase").def_method(String, :upcased_div)
219
- # "foobar".upcased_div #=> "<div class='upcased'>FOOBAR</div>\n"
230
+ # Haml::Engine.new(".upcased= upcase").def_method(String, :upcased_div)
231
+ # "foobar".upcased_div #=> "<div class='upcased'>FOOBAR</div>\n"
220
232
  #
221
233
  # The first argument of the defined method is a hash of local variable names to values.
222
234
  # However, due to an unfortunate Ruby quirk,
223
235
  # the local variables which can be assigned must be pre-declared.
224
- # This is done with the +local_names+ argument.
236
+ # This is done with the `local_names` argument.
225
237
  # For example:
226
238
  #
227
- # # This works
228
- # obj = Object.new
229
- # Haml::Engine.new("%p= foo").def_method(obj, :render, :foo)
230
- # obj.render(:foo => "Hello!") #=> "<p>Hello!</p>"
239
+ # # This works
240
+ # obj = Object.new
241
+ # Haml::Engine.new("%p= foo").def_method(obj, :render, :foo)
242
+ # obj.render(:foo => "Hello!") #=> "<p>Hello!</p>"
231
243
  #
232
- # # This doesn't
233
- # obj = Object.new
234
- # Haml::Engine.new("%p= foo").def_method(obj, :render)
235
- # obj.render(:foo => "Hello!") #=> NameError: undefined local variable or method `foo'
244
+ # # This doesn't
245
+ # obj = Object.new
246
+ # Haml::Engine.new("%p= foo").def_method(obj, :render)
247
+ # obj.render(:foo => "Hello!") #=> NameError: undefined local variable or method `foo'
236
248
  #
237
249
  # Note that Haml modifies the evaluation context
238
- # (either the scope object or the "self" object of the scope binding).
239
- # It extends Haml::Helpers, and various instance variables are set
240
- # (all prefixed with "haml").
250
+ # (either the scope object or the `self` object of the scope binding).
251
+ # It extends {Haml::Helpers}, and various instance variables are set
252
+ # (all prefixed with `haml_`).
253
+ #
254
+ # @param object [Object, Module] The object on which to define the method
255
+ # @param name [String, Symbol] The name of the method to define
256
+ # @param local_names [Array<Symbol>] The names of the locals that can be passed to the proc
241
257
  def def_method(object, name, *local_names)
242
258
  method = object.is_a?(Module) ? :module_eval : :instance_eval
243
259
 
@@ -245,16 +261,15 @@ END
245
261
  @options[:filename], @options[:line])
246
262
  end
247
263
 
248
- private
249
-
250
- def set_locals(locals, scope, scope_object)
251
- scope_object.send(:instance_variable_set, '@_haml_locals', locals)
252
- set_locals = locals.keys.map { |k| "#{k} = @_haml_locals[#{k.inspect}]" }.join("\n")
253
- eval(set_locals, scope)
254
- end
264
+ protected
255
265
 
256
- # Returns a hash of options that Haml::Buffer cares about.
257
- # This should remain loadable from #inspect.
266
+ # Returns a subset of \{#options}: those that {Haml::Buffer} cares about.
267
+ # All of the values here are such that when `#inspect` is called on the hash,
268
+ # it can be `Kernel#eval`ed to get the same result back.
269
+ #
270
+ # See [the Haml options documentation](../Haml.html#haml_options).
271
+ #
272
+ # @return [Hash<Symbol, Object>] The options hash
258
273
  def options_for_buffer
259
274
  {
260
275
  :autoclose => @options[:autoclose],
@@ -264,5 +279,13 @@ END
264
279
  :format => @options[:format]
265
280
  }
266
281
  end
282
+
283
+ private
284
+
285
+ def set_locals(locals, scope, scope_object)
286
+ scope_object.send(:instance_variable_set, '@_haml_locals', locals)
287
+ set_locals = locals.keys.map { |k| "#{k} = @_haml_locals[#{k.inspect}]" }.join("\n")
288
+ eval(set_locals, scope)
289
+ end
267
290
  end
268
291
  end
data/lib/haml/error.rb CHANGED
@@ -1,22 +1,22 @@
1
1
  module Haml
2
2
  # An exception raised by Haml code.
3
3
  class Error < StandardError
4
- # :stopdoc:
5
-
6
- # By default, an error is taken to refer to the line of the template
7
- # that was being processed when the exception was raised.
8
- # However, if line is non-nil, it + 1 is used instead.
4
+ # The line of the template on which the error occurred.
5
+ #
6
+ # @return [Fixnum]
9
7
  attr_reader :line
10
8
 
9
+ # @param message [String] The error message
10
+ # @param line [Fixnum] See \{#line}
11
11
  def initialize(message = nil, line = nil)
12
12
  super(message)
13
13
  @line = line
14
14
  end
15
- # :startdoc:
16
15
  end
17
16
 
18
17
  # SyntaxError is the type of exception raised when Haml encounters an
19
18
  # ill-formatted document.
20
- # It's not particularly interesting, except in that it includes Haml::Error.
19
+ # It's not particularly interesting,
20
+ # except in that it's a subclass of {Haml::Error}.
21
21
  class SyntaxError < Haml::Error; end
22
22
  end