sass 3.1.21 → 3.2.0.alpha.3

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.
Files changed (180) hide show
  1. data/README.md +5 -4
  2. data/REVISION +1 -1
  3. data/Rakefile +6 -15
  4. data/VERSION +1 -1
  5. data/VERSION_NAME +1 -1
  6. data/lib/sass.rb +0 -1
  7. data/lib/sass/cache_stores/base.rb +1 -3
  8. data/lib/sass/cache_stores/filesystem.rb +0 -3
  9. data/lib/sass/css.rb +49 -145
  10. data/lib/sass/engine.rb +23 -47
  11. data/lib/sass/environment.rb +5 -30
  12. data/lib/sass/exec.rb +7 -30
  13. data/lib/sass/importers/base.rb +1 -2
  14. data/lib/sass/importers/filesystem.rb +13 -18
  15. data/lib/sass/less.rb +1 -1
  16. data/lib/sass/plugin.rb +8 -4
  17. data/lib/sass/plugin/compiler.rb +67 -93
  18. data/lib/sass/plugin/configuration.rb +2 -0
  19. data/lib/sass/plugin/staleness_checker.rb +4 -14
  20. data/lib/sass/repl.rb +3 -2
  21. data/lib/sass/script.rb +1 -0
  22. data/lib/sass/script/color.rb +9 -4
  23. data/lib/sass/script/funcall.rb +3 -16
  24. data/lib/sass/script/functions.rb +55 -98
  25. data/lib/sass/script/interpolation.rb +0 -9
  26. data/lib/sass/script/lexer.rb +4 -2
  27. data/lib/sass/script/list.rb +0 -8
  28. data/lib/sass/script/literal.rb +20 -5
  29. data/lib/sass/script/node.rb +0 -8
  30. data/lib/sass/script/number.rb +11 -35
  31. data/lib/sass/script/operation.rb +0 -16
  32. data/lib/sass/script/parser.rb +5 -12
  33. data/lib/sass/script/string_interpolation.rb +0 -9
  34. data/lib/sass/script/unary_operation.rb +0 -7
  35. data/lib/sass/script/variable.rb +1 -5
  36. data/lib/sass/scss/parser.rb +54 -191
  37. data/lib/sass/scss/rx.rb +3 -15
  38. data/lib/sass/scss/static_parser.rb +3 -3
  39. data/lib/sass/selector.rb +3 -15
  40. data/lib/sass/selector/abstract_sequence.rb +2 -11
  41. data/lib/sass/selector/comma_sequence.rb +3 -8
  42. data/lib/sass/selector/sequence.rb +11 -74
  43. data/lib/sass/selector/simple.rb +1 -7
  44. data/lib/sass/selector/simple_sequence.rb +8 -28
  45. data/lib/sass/shared.rb +5 -3
  46. data/lib/sass/tree/comment_node.rb +12 -25
  47. data/lib/sass/tree/debug_node.rb +1 -1
  48. data/lib/sass/tree/directive_node.rb +0 -5
  49. data/lib/sass/tree/each_node.rb +1 -1
  50. data/lib/sass/tree/extend_node.rb +1 -1
  51. data/lib/sass/tree/for_node.rb +2 -2
  52. data/lib/sass/tree/function_node.rb +1 -1
  53. data/lib/sass/tree/if_node.rb +14 -1
  54. data/lib/sass/tree/media_node.rb +4 -4
  55. data/lib/sass/tree/mixin_def_node.rb +1 -1
  56. data/lib/sass/tree/mixin_node.rb +2 -2
  57. data/lib/sass/tree/node.rb +26 -10
  58. data/lib/sass/tree/return_node.rb +1 -1
  59. data/lib/sass/tree/root_node.rb +1 -1
  60. data/lib/sass/tree/rule_node.rb +11 -9
  61. data/lib/sass/tree/variable_node.rb +1 -1
  62. data/lib/sass/tree/visitors/base.rb +1 -1
  63. data/lib/sass/tree/visitors/check_nesting.rb +36 -29
  64. data/lib/sass/tree/visitors/convert.rb +9 -16
  65. data/lib/sass/tree/visitors/cssize.rb +9 -40
  66. data/lib/sass/tree/visitors/perform.rb +23 -79
  67. data/lib/sass/tree/visitors/to_css.rb +21 -23
  68. data/lib/sass/tree/warn_node.rb +1 -1
  69. data/lib/sass/tree/while_node.rb +1 -1
  70. data/lib/sass/util.rb +9 -147
  71. data/lib/sass/version.rb +0 -14
  72. data/test/sass/cache_test.rb +0 -15
  73. data/test/sass/conversion_test.rb +8 -50
  74. data/test/sass/css2sass_test.rb +0 -33
  75. data/test/sass/engine_test.rb +32 -283
  76. data/test/sass/extend_test.rb +0 -315
  77. data/test/sass/functions_test.rb +23 -60
  78. data/test/sass/importer_test.rb +0 -110
  79. data/test/sass/more_results/more_import.css +2 -2
  80. data/test/sass/plugin_test.rb +13 -40
  81. data/test/sass/results/import.css +2 -2
  82. data/test/sass/results/import_charset.css +0 -1
  83. data/test/sass/results/import_charset_1_8.css +0 -1
  84. data/test/sass/results/import_charset_ibm866.css +0 -1
  85. data/test/sass/results/scss_import.css +2 -2
  86. data/test/sass/results/units.css +1 -1
  87. data/test/sass/script_conversion_test.rb +0 -2
  88. data/test/sass/script_test.rb +4 -28
  89. data/test/sass/scss/css_test.rb +1 -79
  90. data/test/sass/scss/scss_test.rb +16 -96
  91. data/test/sass/templates/import_charset.sass +0 -2
  92. data/test/sass/templates/import_charset_1_8.sass +0 -2
  93. data/test/sass/templates/import_charset_ibm866.sass +0 -2
  94. data/test/sass/test_helper.rb +1 -1
  95. data/test/sass/util_test.rb +0 -28
  96. data/test/test_helper.rb +0 -2
  97. data/vendor/{listen → fssm}/LICENSE +1 -1
  98. data/vendor/fssm/README.markdown +55 -0
  99. data/vendor/fssm/Rakefile +59 -0
  100. data/vendor/fssm/VERSION.yml +5 -0
  101. data/vendor/fssm/example.rb +9 -0
  102. data/vendor/fssm/fssm.gemspec +77 -0
  103. data/vendor/fssm/lib/fssm.rb +33 -0
  104. data/vendor/fssm/lib/fssm/backends/fsevents.rb +36 -0
  105. data/vendor/fssm/lib/fssm/backends/inotify.rb +26 -0
  106. data/vendor/fssm/lib/fssm/backends/polling.rb +25 -0
  107. data/vendor/fssm/lib/fssm/backends/rubycocoa/fsevents.rb +131 -0
  108. data/vendor/fssm/lib/fssm/monitor.rb +26 -0
  109. data/vendor/fssm/lib/fssm/path.rb +91 -0
  110. data/vendor/fssm/lib/fssm/pathname.rb +502 -0
  111. data/vendor/fssm/lib/fssm/state/directory.rb +57 -0
  112. data/vendor/fssm/lib/fssm/state/file.rb +24 -0
  113. data/vendor/fssm/lib/fssm/support.rb +63 -0
  114. data/vendor/fssm/lib/fssm/tree.rb +176 -0
  115. data/vendor/fssm/profile/prof-cache.rb +40 -0
  116. data/vendor/fssm/profile/prof-fssm-pathname.html +1231 -0
  117. data/vendor/fssm/profile/prof-pathname.rb +68 -0
  118. data/vendor/fssm/profile/prof-plain-pathname.html +988 -0
  119. data/vendor/fssm/profile/prof.html +2379 -0
  120. data/vendor/fssm/spec/path_spec.rb +75 -0
  121. data/vendor/fssm/spec/root/duck/quack.txt +0 -0
  122. data/vendor/fssm/spec/root/file.css +0 -0
  123. data/vendor/fssm/spec/root/file.rb +0 -0
  124. data/vendor/fssm/spec/root/file.yml +0 -0
  125. data/vendor/fssm/spec/root/moo/cow.txt +0 -0
  126. data/vendor/fssm/spec/spec_helper.rb +14 -0
  127. metadata +246 -281
  128. data/VERSION_DATE +0 -1
  129. data/lib/sass/logger.rb +0 -15
  130. data/lib/sass/logger/base.rb +0 -32
  131. data/lib/sass/logger/log_level.rb +0 -49
  132. data/lib/sass/tree/visitors/deep_copy.rb +0 -87
  133. data/lib/sass/tree/visitors/extend.rb +0 -42
  134. data/lib/sass/tree/visitors/set_options.rb +0 -97
  135. data/lib/sass/util/multibyte_string_scanner.rb +0 -134
  136. data/test/Gemfile +0 -4
  137. data/test/Gemfile.lock +0 -19
  138. data/test/sass/fixtures/test_staleness_check_across_importers.css +0 -1
  139. data/test/sass/fixtures/test_staleness_check_across_importers.scss +0 -1
  140. data/test/sass/logger_test.rb +0 -58
  141. data/test/sass/templates/_double_import_loop2.sass +0 -1
  142. data/test/sass/templates/bork5.sass +0 -3
  143. data/test/sass/templates/double_import_loop1.sass +0 -1
  144. data/test/sass/templates/nested_bork5.sass +0 -2
  145. data/test/sass/templates/single_import_loop.sass +0 -1
  146. data/test/sass/util/multibyte_string_scanner_test.rb +0 -147
  147. data/vendor/listen/CHANGELOG.md +0 -147
  148. data/vendor/listen/Gemfile +0 -23
  149. data/vendor/listen/Guardfile +0 -8
  150. data/vendor/listen/README.md +0 -312
  151. data/vendor/listen/Rakefile +0 -47
  152. data/vendor/listen/Vagrantfile +0 -96
  153. data/vendor/listen/lib/listen.rb +0 -38
  154. data/vendor/listen/lib/listen/adapter.rb +0 -167
  155. data/vendor/listen/lib/listen/adapters/darwin.rb +0 -84
  156. data/vendor/listen/lib/listen/adapters/linux.rb +0 -110
  157. data/vendor/listen/lib/listen/adapters/polling.rb +0 -66
  158. data/vendor/listen/lib/listen/adapters/windows.rb +0 -81
  159. data/vendor/listen/lib/listen/directory_record.rb +0 -318
  160. data/vendor/listen/lib/listen/listener.rb +0 -203
  161. data/vendor/listen/lib/listen/multi_listener.rb +0 -121
  162. data/vendor/listen/lib/listen/turnstile.rb +0 -28
  163. data/vendor/listen/lib/listen/version.rb +0 -3
  164. data/vendor/listen/listen.gemspec +0 -26
  165. data/vendor/listen/spec/listen/adapter_spec.rb +0 -142
  166. data/vendor/listen/spec/listen/adapters/darwin_spec.rb +0 -31
  167. data/vendor/listen/spec/listen/adapters/linux_spec.rb +0 -41
  168. data/vendor/listen/spec/listen/adapters/polling_spec.rb +0 -68
  169. data/vendor/listen/spec/listen/adapters/windows_spec.rb +0 -24
  170. data/vendor/listen/spec/listen/directory_record_spec.rb +0 -1138
  171. data/vendor/listen/spec/listen/listener_spec.rb +0 -155
  172. data/vendor/listen/spec/listen/multi_listener_spec.rb +0 -156
  173. data/vendor/listen/spec/listen/turnstile_spec.rb +0 -56
  174. data/vendor/listen/spec/listen_spec.rb +0 -73
  175. data/vendor/listen/spec/spec_helper.rb +0 -18
  176. data/vendor/listen/spec/support/adapter_helper.rb +0 -716
  177. data/vendor/listen/spec/support/directory_record_helper.rb +0 -55
  178. data/vendor/listen/spec/support/fixtures_helper.rb +0 -29
  179. data/vendor/listen/spec/support/listeners_helper.rb +0 -144
  180. data/vendor/listen/spec/support/platform_helper.rb +0 -11
@@ -1 +0,0 @@
1
- 11 August 2012 00:38:15 UTC
@@ -1,15 +0,0 @@
1
- module Sass::Logger
2
-
3
- end
4
-
5
- require "sass/logger/log_level"
6
- require "sass/logger/base"
7
-
8
- module Sass
9
-
10
- class << self
11
- attr_accessor :logger
12
- end
13
-
14
- self.logger = Sass::Logger::Base.new
15
- end
@@ -1,32 +0,0 @@
1
- require 'sass/logger/log_level'
2
-
3
- class Sass::Logger::Base
4
-
5
- include Sass::Logger::LogLevel
6
-
7
- attr_accessor :log_level
8
- attr_accessor :disabled
9
-
10
- log_level :trace
11
- log_level :debug
12
- log_level :info
13
- log_level :warn
14
- log_level :error
15
-
16
- def initialize(log_level = :debug)
17
- self.log_level = log_level
18
- end
19
-
20
- def logging_level?(level)
21
- !disabled && self.class.log_level?(level, log_level)
22
- end
23
-
24
- def log(level, message)
25
- self._log(level, message) if logging_level?(level)
26
- end
27
-
28
- def _log(level, message)
29
- Kernel::warn(message)
30
- end
31
-
32
- end
@@ -1,49 +0,0 @@
1
- module Sass
2
- module Logger
3
- module LogLevel
4
-
5
- def self.included(base)
6
- base.extend(ClassMethods)
7
- end
8
-
9
- module ClassMethods
10
- def inherited(subclass)
11
- subclass.log_levels = subclass.superclass.log_levels.dup
12
- end
13
-
14
- def log_levels
15
- @log_levels ||= {}
16
- end
17
-
18
- def log_levels=(levels)
19
- @log_levels = levels
20
- end
21
-
22
- def log_level?(level, min_level)
23
- log_levels[level] >= log_levels[min_level]
24
- end
25
-
26
- def log_level(name, options = {})
27
- if options[:prepend]
28
- level = log_levels.values.min
29
- level = level.nil? ? 0 : level - 1
30
- else
31
- level = log_levels.values.max
32
- level = level.nil? ? 0 : level + 1
33
- end
34
- log_levels.update(name => level)
35
- define_logger(name)
36
- end
37
-
38
- def define_logger(name, options = {})
39
- class_eval %Q{
40
- def #{name}(message)
41
- #{options.fetch(:to, :log)}(#{name.inspect}, message)
42
- end
43
- }
44
- end
45
- end
46
-
47
- end
48
- end
49
- end
@@ -1,87 +0,0 @@
1
- # A visitor for copying the full structure of a Sass tree.
2
- class Sass::Tree::Visitors::DeepCopy < Sass::Tree::Visitors::Base
3
- protected
4
-
5
- def visit(node)
6
- super(node.dup)
7
- end
8
-
9
- def visit_children(parent)
10
- parent.children = parent.children.map {|c| visit(c)}
11
- parent
12
- end
13
-
14
- def visit_debug(node)
15
- node.expr = node.expr.deep_copy
16
- yield
17
- end
18
-
19
- def visit_each(node)
20
- node.list = node.list.deep_copy
21
- yield
22
- end
23
-
24
- def visit_extend(node)
25
- node.selector = node.selector.map {|c| c.is_a?(Sass::Script::Node) ? c.deep_copy : c}
26
- yield
27
- end
28
-
29
- def visit_for(node)
30
- node.from = node.from.deep_copy
31
- node.to = node.to.deep_copy
32
- yield
33
- end
34
-
35
- def visit_function(node)
36
- node.args = node.args.map {|k, v| [k.deep_copy, v && v.deep_copy]}
37
- yield
38
- end
39
-
40
- def visit_if(node)
41
- node.expr = node.expr.deep_copy if node.expr
42
- node.else = visit(node.else) if node.else
43
- yield
44
- end
45
-
46
- def visit_mixindef(node)
47
- node.args = node.args.map {|k, v| [k.deep_copy, v && v.deep_copy]}
48
- yield
49
- end
50
-
51
- def visit_mixin(node)
52
- node.args = node.args.map {|a| a.deep_copy}
53
- node.keywords = Hash[node.keywords.map {|k, v| [k, v.deep_copy]}]
54
- yield
55
- end
56
-
57
- def visit_prop(node)
58
- node.name = node.name.map {|c| c.is_a?(Sass::Script::Node) ? c.deep_copy : c}
59
- node.value = node.value.deep_copy
60
- yield
61
- end
62
-
63
- def visit_return(node)
64
- node.expr = node.expr.deep_copy
65
- yield
66
- end
67
-
68
- def visit_rule(node)
69
- node.rule = node.rule.map {|c| c.is_a?(Sass::Script::Node) ? c.deep_copy : c}
70
- yield
71
- end
72
-
73
- def visit_variable(node)
74
- node.expr = node.expr.deep_copy
75
- yield
76
- end
77
-
78
- def visit_warn(node)
79
- node.expr = node.expr.deep_copy
80
- yield
81
- end
82
-
83
- def visit_while(node)
84
- node.expr = node.expr.deep_copy
85
- yield
86
- end
87
- end
@@ -1,42 +0,0 @@
1
- # A visitor for performing selector inheritance on a static CSS tree.
2
- #
3
- # Destructively modifies the tree.
4
- class Sass::Tree::Visitors::Extend < Sass::Tree::Visitors::Base
5
- # @param root [Tree::Node] The root node of the tree to visit.
6
- # @param extends [Sass::Util::SubsetMap{Selector::Simple =>
7
- # Sass::Tree::Visitors::Cssize::Extend}]
8
- # The extensions to perform on this tree.
9
- # @return [Object] The return value of \{#visit} for the root node.
10
- def self.visit(root, extends)
11
- return if extends.empty?
12
- new(extends).send(:visit, root)
13
- end
14
-
15
- protected
16
-
17
- def initialize(extends)
18
- @parent_directives = []
19
- @extends = extends
20
- end
21
-
22
- # If an exception is raised, this adds proper metadata to the backtrace.
23
- def visit(node)
24
- super(node)
25
- rescue Sass::SyntaxError => e
26
- e.modify_backtrace(:filename => node.filename, :line => node.line)
27
- raise e
28
- end
29
-
30
- # Keeps track of the current parent directives.
31
- def visit_children(parent)
32
- @parent_directives.push parent if parent.is_a?(Sass::Tree::DirectiveNode)
33
- super
34
- ensure
35
- @parent_directives.pop if parent.is_a?(Sass::Tree::DirectiveNode)
36
- end
37
-
38
- # Applies the extend to a single rule's selector.
39
- def visit_rule(node)
40
- node.resolved_rules = node.resolved_rules.do_extend(@extends, @parent_directives)
41
- end
42
- end
@@ -1,97 +0,0 @@
1
- # A visitor for setting options on the Sass tree
2
- class Sass::Tree::Visitors::SetOptions < Sass::Tree::Visitors::Base
3
- # @param root [Tree::Node] The root node of the tree to visit.
4
- # @param options [{Symbol => Object}] The options has to set.
5
- def self.visit(root, options); new(options).send(:visit, root); end
6
-
7
- protected
8
-
9
- def initialize(options)
10
- @options = options
11
- end
12
-
13
- def visit(node)
14
- node.instance_variable_set('@options', @options)
15
- super
16
- end
17
-
18
- def visit_debug(node)
19
- node.expr.options = @options
20
- yield
21
- end
22
-
23
- def visit_each(node)
24
- node.list.options = @options
25
- yield
26
- end
27
-
28
- def visit_extend(node)
29
- node.selector.each {|c| c.options = @options if c.is_a?(Sass::Script::Node)}
30
- yield
31
- end
32
-
33
- def visit_for(node)
34
- node.from.options = @options
35
- node.to.options = @options
36
- yield
37
- end
38
-
39
- def visit_function(node)
40
- node.args.each do |k, v|
41
- k.options = @options
42
- v.options = @options if v
43
- end
44
- yield
45
- end
46
-
47
- def visit_if(node)
48
- node.expr.options = @options if node.expr
49
- visit(node.else) if node.else
50
- yield
51
- end
52
-
53
- def visit_mixindef(node)
54
- node.args.each do |k, v|
55
- k.options = @options
56
- v.options = @options if v
57
- end
58
- yield
59
- end
60
-
61
- def visit_mixin(node)
62
- node.args.each {|a| a.options = @options}
63
- node.keywords.each {|k, v| v.options = @options}
64
- yield
65
- end
66
-
67
- def visit_prop(node)
68
- node.name.each {|c| c.options = @options if c.is_a?(Sass::Script::Node)}
69
- node.value.options = @options
70
- yield
71
- end
72
-
73
- def visit_return(node)
74
- node.expr.options = @options
75
- yield
76
- end
77
-
78
- def visit_rule(node)
79
- node.rule.each {|c| c.options = @options if c.is_a?(Sass::Script::Node)}
80
- yield
81
- end
82
-
83
- def visit_variable(node)
84
- node.expr.options = @options
85
- yield
86
- end
87
-
88
- def visit_warn(node)
89
- node.expr.options = @options
90
- yield
91
- end
92
-
93
- def visit_while(node)
94
- node.expr.options = @options
95
- yield
96
- end
97
- end
@@ -1,134 +0,0 @@
1
- require 'strscan'
2
-
3
- if Sass::Util.ruby1_8?
4
- Sass::Util::MultibyteStringScanner = StringScanner
5
- else
6
- # A wrapper of the native StringScanner class that works correctly with
7
- # multibyte character encodings. The native class deals only in bytes, not
8
- # characters, for methods like [#pos] and [#matched_size]. This class deals
9
- # only in characters, instead.
10
- class Sass::Util::MultibyteStringScanner < StringScanner
11
- def self.new(str)
12
- return StringScanner.new(str) if str.ascii_only?
13
- super
14
- end
15
-
16
- def initialize(str)
17
- super
18
- @mb_pos = 0
19
- @mb_matched_size = nil
20
- @mb_last_pos = nil
21
- end
22
-
23
- alias_method :byte_pos, :pos
24
- alias_method :byte_matched_size, :matched_size
25
-
26
- def check(pattern); _match super; end
27
- def check_until(pattern); _matched super; end
28
- def getch; _forward _match super; end
29
- def match?(pattern); _size check(pattern); end
30
- def matched_size; @mb_matched_size; end
31
- def peek(len); string[@mb_pos, len]; end
32
- alias_method :peep, :peek
33
- def pos; @mb_pos; end
34
- alias_method :pointer, :pos
35
- def rest_size; rest.size; end
36
- def scan(pattern); _forward _match super; end
37
- def scan_until(pattern); _forward _matched super; end
38
- def skip(pattern); _size scan(pattern); end
39
- def skip_until(pattern); _matched _size scan_until(pattern); end
40
-
41
- def get_byte
42
- raise "MultibyteStringScanner doesn't support #get_byte."
43
- end
44
-
45
- def getbyte
46
- raise "MultibyteStringScanner doesn't support #getbyte."
47
- end
48
-
49
- def pos=(n)
50
- @mb_last_pos = nil
51
-
52
- # We set position kind of a lot during parsing, so we want it to be as
53
- # efficient as possible. This is complicated by the fact that UTF-8 is a
54
- # variable-length encoding, so it's difficult to find the byte length that
55
- # corresponds to a given character length.
56
- #
57
- # Our heuristic here is to try to count the fewest possible characters. So
58
- # if the new position is close to the current one, just count the
59
- # characters between the two; if the new position is closer to the
60
- # beginning of the string, just count the characters from there.
61
- if @mb_pos - n < @mb_pos / 2
62
- # New position is close to old position
63
- byte_delta = @mb_pos > n ? -string[n...@mb_pos].bytesize : string[@mb_pos...n].bytesize
64
- super(byte_pos + byte_delta)
65
- else
66
- # New position is close to BOS
67
- super(string[0...n].bytesize)
68
- end
69
- @mb_pos = n
70
- end
71
-
72
- def reset
73
- @mb_pos = 0
74
- @mb_matched_size = nil
75
- @mb_last_pos = nil
76
- super
77
- end
78
-
79
- def scan_full(pattern, advance_pointer_p, return_string_p)
80
- res = _match super(pattern, advance_pointer_p, true)
81
- _forward res if advance_pointer_p
82
- return res if return_string_p
83
- end
84
-
85
- def search_full(pattern, advance_pointer_p, return_string_p)
86
- res = super(pattern, advance_pointer_p, true)
87
- _forward res if advance_pointer_p
88
- _matched((res if return_string_p))
89
- end
90
-
91
- def string=(str)
92
- @mb_pos = 0
93
- @mb_matched_size = nil
94
- @mb_last_pos = nil
95
- super
96
- end
97
-
98
- def terminate
99
- @mb_pos = string.size
100
- @mb_matched_size = nil
101
- @mb_last_pos = nil
102
- super
103
- end
104
- alias_method :clear, :terminate
105
-
106
- def unscan
107
- super
108
- @mb_pos = @mb_last_pos
109
- @mb_last_pos = @mb_matched_size = nil
110
- end
111
-
112
- private
113
-
114
- def _size(str)
115
- str && str.size
116
- end
117
-
118
- def _match(str)
119
- @mb_matched_size = str && str.size
120
- str
121
- end
122
-
123
- def _matched(res)
124
- _match matched
125
- res
126
- end
127
-
128
- def _forward(str)
129
- @mb_last_pos = @mb_pos
130
- @mb_pos += str.size if str
131
- str
132
- end
133
- end
134
- end