summaryrefslogtreecommitdiff
path: root/vendor/bundle/ruby/3.4.0/gems/rexml-3.4.1/lib/rexml/dtd
diff options
context:
space:
mode:
authorBenjamin Sanders <ben@Benjamins-MacBook-Pro.local>2025-10-11 10:34:24 -0400
committerBenjamin Sanders <ben@Benjamins-MacBook-Pro.local>2025-10-11 10:34:24 -0400
commit5571dc766e2143e39762ff0b47c41d1c2e154f4c (patch)
treef4f124d314a7e76c04484515aa0fd1f2e271a601 /vendor/bundle/ruby/3.4.0/gems/rexml-3.4.1/lib/rexml/dtd
parent359f3309c97fc894b63e0a295c76ab298504d635 (diff)
Vendor bundled gems for deployment
Diffstat (limited to 'vendor/bundle/ruby/3.4.0/gems/rexml-3.4.1/lib/rexml/dtd')
-rw-r--r--vendor/bundle/ruby/3.4.0/gems/rexml-3.4.1/lib/rexml/dtd/attlistdecl.rb11
-rw-r--r--vendor/bundle/ruby/3.4.0/gems/rexml-3.4.1/lib/rexml/dtd/dtd.rb47
-rw-r--r--vendor/bundle/ruby/3.4.0/gems/rexml-3.4.1/lib/rexml/dtd/elementdecl.rb18
-rw-r--r--vendor/bundle/ruby/3.4.0/gems/rexml-3.4.1/lib/rexml/dtd/entitydecl.rb57
-rw-r--r--vendor/bundle/ruby/3.4.0/gems/rexml-3.4.1/lib/rexml/dtd/notationdecl.rb40
5 files changed, 173 insertions, 0 deletions
diff --git a/vendor/bundle/ruby/3.4.0/gems/rexml-3.4.1/lib/rexml/dtd/attlistdecl.rb b/vendor/bundle/ruby/3.4.0/gems/rexml-3.4.1/lib/rexml/dtd/attlistdecl.rb
new file mode 100644
index 0000000..1326cb2
--- /dev/null
+++ b/vendor/bundle/ruby/3.4.0/gems/rexml-3.4.1/lib/rexml/dtd/attlistdecl.rb
@@ -0,0 +1,11 @@
+# frozen_string_literal: false
+require_relative "../child"
+module REXML
+ module DTD
+ class AttlistDecl < Child
+ START = "<!ATTLIST"
+ START_RE = /^\s*#{START}/um
+ PATTERN_RE = /\s*(#{START}.*?>)/um
+ end
+ end
+end
diff --git a/vendor/bundle/ruby/3.4.0/gems/rexml-3.4.1/lib/rexml/dtd/dtd.rb b/vendor/bundle/ruby/3.4.0/gems/rexml-3.4.1/lib/rexml/dtd/dtd.rb
new file mode 100644
index 0000000..8b0f2d7
--- /dev/null
+++ b/vendor/bundle/ruby/3.4.0/gems/rexml-3.4.1/lib/rexml/dtd/dtd.rb
@@ -0,0 +1,47 @@
+# 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
diff --git a/vendor/bundle/ruby/3.4.0/gems/rexml-3.4.1/lib/rexml/dtd/elementdecl.rb b/vendor/bundle/ruby/3.4.0/gems/rexml-3.4.1/lib/rexml/dtd/elementdecl.rb
new file mode 100644
index 0000000..20ed023
--- /dev/null
+++ b/vendor/bundle/ruby/3.4.0/gems/rexml-3.4.1/lib/rexml/dtd/elementdecl.rb
@@ -0,0 +1,18 @@
+# frozen_string_literal: false
+require_relative "../child"
+module REXML
+ module DTD
+ class ElementDecl < Child
+ START = "<!ELEMENT"
+ START_RE = /^\s*#{START}/um
+ # PATTERN_RE = /^\s*(#{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
diff --git a/vendor/bundle/ruby/3.4.0/gems/rexml-3.4.1/lib/rexml/dtd/entitydecl.rb b/vendor/bundle/ruby/3.4.0/gems/rexml-3.4.1/lib/rexml/dtd/entitydecl.rb
new file mode 100644
index 0000000..312df65
--- /dev/null
+++ b/vendor/bundle/ruby/3.4.0/gems/rexml-3.4.1/lib/rexml/dtd/entitydecl.rb
@@ -0,0 +1,57 @@
+# frozen_string_literal: false
+require_relative "../child"
+module REXML
+ module DTD
+ class EntityDecl < Child
+ START = "<!ENTITY"
+ START_RE = /^\s*#{START}/um
+ PUBLIC = /^\s*#{START}\s+(?:%\s+)?(\w+)\s+PUBLIC\s+((["']).*?\3)\s+((["']).*?\5)\s*>/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
+ # <!ENTITY name SYSTEM "...">
+ # <!ENTITY name "...">
+ 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 = "<!ENTITY #@name "
+ rv << "#@middle " if @middle.size > 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
diff --git a/vendor/bundle/ruby/3.4.0/gems/rexml-3.4.1/lib/rexml/dtd/notationdecl.rb b/vendor/bundle/ruby/3.4.0/gems/rexml-3.4.1/lib/rexml/dtd/notationdecl.rb
new file mode 100644
index 0000000..04a9b08
--- /dev/null
+++ b/vendor/bundle/ruby/3.4.0/gems/rexml-3.4.1/lib/rexml/dtd/notationdecl.rb
@@ -0,0 +1,40 @@
+# frozen_string_literal: false
+require_relative "../child"
+module REXML
+ module DTD
+ class NotationDecl < Child
+ START = "<!NOTATION"
+ START_RE = /^\s*#{START}/um
+ PUBLIC = /^\s*#{START}\s+(\w[\w-]*)\s+(PUBLIC)\s+((["']).*?\4)\s*>/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
+ "<!NOTATION #@name #@middle #@rest>"
+ 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