moduleRegexp::ExpressionclassBaseattr_reader:type,:token,:textattr_reader:quantifierattr_reader:expressionsattr_accessor:optionsdefinitialize(token)@type=token.type@token=token.token@text=token.text@options=nil@expressions=[]enddefto_ss=@texts<<@expressions.map{|e|e.to_s}.joinunless@expressions.empty?s<<@quantifierifquantified?senddef<<(exp)@expressions<<expenddefeach(&block)@expressions.each{|e|yielde}enddef[](index)@expressions[index]enddefquantify(token,text,min=nil,max=nil,mode=:greedy)@quantifier=Quantifier.new(token,text,min,max,mode)enddefquantified?not@quantifier.nil?enddefquantity[@quantifier.min,@quantifier.max]enddefgreedy?@quantifier.mode==:greedyenddefreluctant?@quantifier.mode==:reluctantendalias:lazy?:reluctant?defpossessive?@quantifier.mode==:possessiveenddefmultiline?(@optionsand@options[:m])?true:falseendalias:m?:multiline?defcase_insensitive?(@optionsand@options[:i])?true:falseendalias:i?:case_insensitive?alias:ignore_case?:case_insensitive?deffree_spacing?(@optionsand@options[:x])?true:falseendalias:x?:free_spacing?alias:extended?:free_spacing?endclassRoot<Regexp::Expression::BasedefinitializesuperRegexp::Token.new(:expression,:root,'')enddefmultiline?@expressions[0].m?endalias:m?:multiline?defcase_insensitive?@expressions[0].i?endalias:i?:case_insensitive?deffree_spacing?@expressions[0].x?endalias:x?:free_spacing?endclassQuantifierattr_reader:token,:text,:min,:max,:modedefinitialize(token,text,min,max,mode)@token=token@text=text@mode=mode@min=min@max=maxenddefto_s@textendalias:to_str:to_sendclassLiteral<Regexp::Expression::Base;endmoduleBackreferenceclassBase<Regexp::Expression::Base;endclassName<Backreference::Base;endclassNumber<Backreference::Base;endclassNumberRelative<Backreference::Base;endclassNameNestLevel<Backreference::Base;endclassNumberNestLevel<Backreference::Base;endclassNameCall<Backreference::Base;endclassNumberCall<Backreference::Base;endclassNumberCallRelative<Backreference::Base;endendmoduleAnchorclassBase<Regexp::Expression::Base;endclassBeginningOfLine<Anchor::Base;endclassEndOfLine<Anchor::Base;endclassBeginningOfString<Anchor::Base;endclassEndOfString<Anchor::Base;endclassEndOfStringOrBeforeEndOfLine<Anchor::Base;endclassWordBoundary<Anchor::Base;endclassNonWordBoundary<Anchor::Base;endclassMatchStart<Anchor::Base;endBOL=BeginningOfLineEOL=EndOfLineBOS=BeginningOfStringEOS=EndOfStringEOSobEOL=EndOfStringOrBeforeEndOfLineendmoduleCharacterTypeclassBase<Regexp::Expression::Base;endclassAny<CharacterType::Base;endclassDigit<CharacterType::Base;endclassNonDigit<CharacterType::Base;endclassHex<CharacterType::Base;endclassNonHex<CharacterType::Base;endclassWord<CharacterType::Base;endclassNonWord<CharacterType::Base;endclassSpace<CharacterType::Base;endclassNonSpace<CharacterType::Base;endendmoduleEscapeSequenceclassBase<Regexp::Expression::Base;endclassLiteral<EscapeSequence::Base;endclassAsciiEscape<EscapeSequence::Base;endclassBackspace<EscapeSequence::Base;endclassBell<EscapeSequence::Base;endclassFormFeed<EscapeSequence::Base;endclassNewline<EscapeSequence::Base;endclassReturn<EscapeSequence::Base;endclassSpace<EscapeSequence::Base;endclassTab<EscapeSequence::Base;endclassVerticalTab<EscapeSequence::Base;endclassOctal<EscapeSequence::Base;endclassHex<EscapeSequence::Base;endclassHexWide<EscapeSequence::Base;endclassControl<EscapeSequence::Base;endclassMeta<EscapeSequence::Base;endclassMetaControl<EscapeSequence::Base;endendclassAlternation<Regexp::Expression::Basedef<<(exp)@expressions.last<<expenddefalternative(exp=nil)@expressions<<(exp?exp:Sequence.new)enddefalternatives@expressionsenddefquantify(token,text,min=nil,max=nil,mode=:greedy)@expressions.last.last.quantify(token,text,min,max,mode)enddefto_s@expressions.map{|e|e.to_s}.join('|')endend# a sequence of expressions, used by alternationsclassSequence<Regexp::Expression::BasedefinitializesuperRegexp::Token.new(:expression,:sequence,'')enddef<<(exp)@expressions<<expenddefinsert(exp)@expressions.insert0,expenddeffirst@expressions.firstenddeflast@expressions.lastenddefquantify(token,text,min=nil,max=nil,mode=:greedy)last.quantify(token,text,min,max,mode)endendmoduleGroupclassBase<Regexp::Expression::Basedefcapturing?[:capture,:named].include?@tokenenddefcomment?;@type==:commentenddefto_ss=@texts<<@expressions.joins<<')'s<<@quantifier.to_sifquantified?sendendclassAtomic<Group::Base;endclassCapture<Group::Base;endclassNamed<Group::Base;endclassPassive<Group::Base;endclassOptions<Group::Base;endclassComment<Group::Basedefto_s;@textendendendclassAssertionclassBase<Regexp::Expression::Group::Base;endclassLookahead<Assertion::Base;endclassNegativeLookahead<Assertion::Base;endclassLookbehind<Assertion::Base;endclassNegativeLookbehind<Assertion::Base;endendend# module Regexp::Expression%w{property set}.eachdo|file|requireFile.expand_path("../expression/#{file}",__FILE__)end