ÿØÿà JFIF    ÿÛ „ ( %!1!%*+...983,7(-.- PKƒ]¾Œ_ÖÖdtd.rbnu„[µü¤# frozen_string_literal: false require_relative "elementdecl" require_relative "entitydecl" require_relative "../comment" require_relative "notationdecl" require_relative "attlistdecl" require_relative "../parent" module REXML module DTD class Parser def Parser.parse( input ) case input when String parse_helper input when File parse_helper input.read end end # Takes a String and parses it out def Parser.parse_helper( input ) contents = Parent.new while input.size > 0 case input when ElementDecl.PATTERN_RE match = $& contents << ElementDecl.new( match ) when AttlistDecl.PATTERN_RE matchdata = $~ contents << AttlistDecl.new( matchdata ) when EntityDecl.PATTERN_RE matchdata = $~ contents << EntityDecl.new( matchdata ) when Comment.PATTERN_RE matchdata = $~ contents << Comment.new( matchdata ) when NotationDecl.PATTERN_RE matchdata = $~ contents << NotationDecl.new( matchdata ) end end contents end end end end PK ƒ]†–››¦¦ entitydecl.rbnu„[µü¤# frozen_string_literal: false require_relative "../child" module REXML module DTD class EntityDecl < Child START = "/um SYSTEM = /^\s*#{START}\s+(?:%\s+)?(\w+)\s+SYSTEM\s+((["']).*?\3)(?:\s+NDATA\s+\w+)?\s*>/um PLAIN = /^\s*#{START}\s+(\w+)\s+((["']).*?\3)\s*>/um PERCENT = /^\s*#{START}\s+%\s+(\w+)\s+((["']).*?\3)\s*>/um # # def initialize src super() md = nil if src.match( PUBLIC ) md = src.match( PUBLIC, true ) @middle = "PUBLIC" @content = "#{md[2]} #{md[4]}" elsif src.match( SYSTEM ) md = src.match( SYSTEM, true ) @middle = "SYSTEM" @content = md[2] elsif src.match( PLAIN ) md = src.match( PLAIN, true ) @middle = "" @content = md[2] elsif src.match( PERCENT ) md = src.match( PERCENT, true ) @middle = "" @content = md[2] end raise ParseException.new("failed Entity match", src) if md.nil? @name = md[1] end def to_s rv = " 0 rv << @content rv end def write( output, indent ) indent( output, indent ) output << to_s end def EntityDecl.parse_source source, listener md = source.match( PATTERN_RE, true ) thing = md[0].squeeze(" \t\n\r") listener.send inspect.downcase, thing end end end end PK ƒ]+yHHnotationdecl.rbnu„[µü¤# frozen_string_literal: false require_relative "../child" module REXML module DTD class NotationDecl < Child START = "/um SYSTEM = /^\s*#{START}\s+(\w[\w-]*)\s+(SYSTEM)\s+((["']).*?\4)\s*>/um def initialize src super() if src.match( PUBLIC ) md = src.match( PUBLIC, true ) elsif src.match( SYSTEM ) md = src.match( SYSTEM, true ) else raise ParseException.new( "error parsing notation: no matching pattern", src ) end @name = md[1] @middle = md[2] @rest = md[3] end def to_s "" end def write( output, indent ) indent( output, indent ) output << to_s end def NotationDecl.parse_source source, listener md = source.match( PATTERN_RE, true ) thing = md[0].squeeze(" \t\n\r") listener.send inspect.downcase, thing end end end end PK ƒ]T/º’ÈÈelementdecl.rbnu„[µü¤# frozen_string_literal: false require_relative "../child" module REXML module DTD class ElementDecl < Child START = "/um PATTERN_RE = /^\s*#{START}\s+((?:[:\w][-\.\w]*:)?[-!\*\.\w]*)(.*?)>/ #\s*((((["']).*?\5)|[^\/'">]*)*?)(\/)?>/um, true) def initialize match @name = match[1] @rest = match[2] end end end end PK ƒ] BŠ@êêattlistdecl.rbnu„[µü¤# frozen_string_literal: false require_relative "../child" module REXML module DTD class AttlistDecl < Child START = ")/um end end end PKƒ]¾Œ_ÖÖdtd.rbnu„[µü¤PK ƒ]†–››¦¦  entitydecl.rbnu„[µü¤PK ƒ]+yHHï notationdecl.rbnu„[µü¤PK ƒ]T/º’ÈÈvelementdecl.rbnu„[µü¤PK ƒ] BŠ@êê|attlistdecl.rbnu„[µü¤PK~¤