# -*- coding: utf-8 -*- # module Rouge module Lexers class Actionscript < RegexLexer title "ActionScript" desc "ActionScript" tag 'actionscript' aliases 'as', 'as3' filenames '*.as' mimetypes 'application/x-actionscript' state :comments_and_whitespace do rule /\s+/, Text rule %r(//.*?$), Comment::Single rule %r(/\*.*?\*/)m, Comment::Multiline end state :expr_start do mixin :comments_and_whitespace rule %r(/) do token Str::Regex goto :regex end rule /[{]/, Punctuation, :object rule //, Text, :pop! end state :regex do rule %r(/) do token Str::Regex goto :regex_end end rule %r([^/]\n), Error, :pop! rule /\n/, Error, :pop! rule /\[\^/, Str::Escape, :regex_group rule /\[/, Str::Escape, :regex_group rule /\\./, Str::Escape rule %r{[(][?][:=>>? | === | !== )x, Operator, :expr_start rule %r([:-<>+*%&|\^/!=]=?), Operator, :expr_start rule /[(\[,]/, Punctuation, :expr_start rule /;/, Punctuation, :statement rule /[)\].]/, Punctuation rule /[?]/ do token Punctuation push :ternary push :expr_start end rule /[{}]/, Punctuation, :statement rule id do |m| if self.class.keywords.include? m[0] token Keyword push :expr_start elsif self.class.declarations.include? m[0] token Keyword::Declaration push :expr_start elsif self.class.reserved.include? m[0] token Keyword::Reserved elsif self.class.constants.include? m[0] token Keyword::Constant elsif self.class.builtins.include? m[0] token Name::Builtin else token Name::Other end end rule /\-?[0-9][0-9]*\.[0-9]+([eE][0-9]+)?[fd]?/, Num::Float rule /0x[0-9a-fA-F]+/, Num::Hex rule /\-?[0-9]+/, Num::Integer rule /"(\\\\|\\"|[^"])*"/, Str::Double rule /'(\\\\|\\'|[^'])*'/, Str::Single end # braced parts that aren't object literals state :statement do rule /(#{id})(\s*)(:)/ do groups Name::Label, Text, Punctuation end rule /[{}]/, Punctuation mixin :expr_start end # object literals state :object do mixin :comments_and_whitespace rule /[}]/ do token Punctuation goto :statement end rule /(#{id})(\s*)(:)/ do groups Name::Attribute, Text, Punctuation push :expr_start end rule /:/, Punctuation mixin :root end # ternary expressions, where : is not a label! state :ternary do rule /:/ do token Punctuation goto :expr_start end mixin :root end end end end