lib/liquidscript/scanner/liquidscript.rb in liquidscript-0.7.9 vs lib/liquidscript/scanner/liquidscript.rb in liquidscript-0.7.10
- old
+ new
@@ -1,5 +1,10 @@
+require "liquidscript/scanner/liquidscript/main"
+require "liquidscript/scanner/liquidscript/regexs"
+require "liquidscript/scanner/liquidscript/heredocs"
+require "liquidscript/scanner/liquidscript/interpolations"
+
module Liquidscript
module Scanner
class Liquidscript < Base
include Base::DSL
@@ -7,188 +12,13 @@
attr_reader :tokens
define do
default_context :main
- context :main do
- set :number, %r{
- -? ([1-9][0-9]* | 0) # the base of the number
- (\.[0-9]+)? # decmial portion, if needed
- ([eE][+-]?[0-9]+)? # scientific notation
- }x
-
- set :string, %r{
- '
- [A-Za-z0-9_$\-\/\.]+
- '?
- }x
-
- set :unops, %w(
- ++
- --
- )
-
- set :preunops, %w(
- !
- ~
- new
- return
- typeof
- throw
- )
-
- set :actions, %w(
- break
- continue
- )
-
- set :binops, %w(
- * / ^
- << >> >>>
- === ==
- !== !=
- >= >
- <= <
- && ||
- & |
- instanceof
- or and
- )
-
- set :keywords, %w(
- undefined
- null
- true
- false
- )
-
- set :identifier, %r{[A-Za-z_$]([A-Za-z0-9_$-]*[A-Za-z0-9_$])?}
-
- on("class") { emit :class }
- on("module") { emit :module }
- on("if") { emit :if }
- on("unless") { emit :unless }
- on("elsif") { emit :elsif }
- on("else") { emit :else }
- on("for") { emit :for }
- on("while") { emit :while }
- on("try") { emit :try }
- on("catch") { emit :catch }
- on("finally") { emit :finally }
- on(:number) { |m| emit :number, m }
- on(:string) { |m| emit :sstring, m }
- on(:keywords) { |m| emit :keyword, m }
- on(:actions) { |m| emit :action, m }
- on("->") { emit :arrow }
- on("=") { emit :equal }
- on("{") { emit :lbrace }
- on("(") { emit :lparen }
- on("[") { emit :lbrack }
- on("}") { emit :rbrace }
- on(")") { emit :rparen }
- on("]") { emit :rbrack }
- on(":") { emit :colon }
- on(".") { emit :prop }
- on(",") { emit :comma }
- on("-") { emit :minus }
- on("+") { emit :plus }
- on("\n") { line! }
- on(%r{"} => :istring)
- on(%r{<<([A-Z]+)}) do |_, s|
- emit :heredoc_ref, s
- @lexes << [:heredoc, s]
- end
- on(%r{<<-([A-Z]+)}) do |_, s|
- emit :iheredoc_ref, s
- @lexes << [:iheredoc, s]
- end
- on(%r{/(.*?)/([a-z]*)}) { |_, m, b|
- emit :regex, [m, b]
- }
- on("///" => :block_regex)
- on(:binops) { |m| emit :binop, m }
- on(:preunops) { |m| emit :preunop, m }
- on(:unops) { |m| emit :unop, m }
-
- on(:identifier) { |m| emit :identifier, m.gsub(/\-[a-z]/) { |p| p[1].upcase } }
-
- on(%r{#! ([A-Za-z]+) ?(.*?)\n}) do |_, c, a|
- metadata[:directives] ||= []
- metadata[:directives].push :command => c,
- :args => a
- end
-
- on(%r{#.*?\n}) { }
- on(%r{\s}) { }
- on(:_) { |m| error }
- end
-
- context :istring do
- init { @buffer = [] }
-
- on('\\"') { |m| @buffer << m }
- on('"') do
- emit :istring, @buffer.join
- exit
- end
-
- on(%r{\#\{(.*?)\}}) do |_, b|
- emit :istring_begin, @buffer.join
- lex :main => b
- @buffer = []
- end
-
- on(:_) { |m| @buffer << m }
- end
-
- context :heredoc do
- init { @buffer = [] }
-
- on(%r{\n\s*([A-Z]+)\s*\n}) do |_, s|
- if @start == s
- emit :heredoc, @buffer.join
- exit
- else
- @buffer << _
- end
- end
-
- on(:_) { |m| @buffer << m }
- end
-
- context :iheredoc do
- init { @buffer = [] }
-
- on(%r{\n\s*([A-Z]+)\s*\n}) do |_, s|
- if @start == s
- emit :iheredoc, @buffer.join
- @start = nil
- exit
- else
- @buffer << _
- end
- end
-
- on(%r{\#\{(.*?)\}}) do |_, b|
- emit :iheredoc_begin, @buffer.join
- lex :main => b
- @buffer = []
- end
-
- on(:_) { |m| @buffer << m }
- end
-
- context :block_regex do
- init { @buffer = [] }
-
- on(%r{///([a-z]*)}) do |_, m|
- emit :regex, [@buffer.join, m]
- exit
- end
- on(%r{#.*?\n}) { }
- on("\n") { }
- on(:_) { |m| @buffer << m }
- end
+ context Main
+ context Regexs
+ context Heredocs
+ context Interpolations
end
def initialize(*)
@line = 1
@cstart = 0