File: exttesti.rb

package info (click to toggle)
libxml-parser-ruby 0.6.8-1
  • links: PTS
  • area: main
  • in suites: sarge
  • size: 908 kB
  • ctags: 1,524
  • sloc: ruby: 11,080; ansic: 1,958; xml: 467; makefile: 69
file content (81 lines) | stat: -rwxr-xr-x 1,497 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
#! /usr/local/bin/ruby

require 'xmlextparser'

def escapeAttrVal(str)
  ret = ""
  str.scan(/./um) do |c|
    code = c.unpack("U")[0]
    if code == 9 || code == 10 || code == 13
      ret << sprintf("&#x%X;", code)
    elsif c == "&"
      ret << "&amp;"
    elsif c == "\""
      ret << "&quot;"
    elsif c == "<"
        ret << "&lt;"
    else
      ret << c
    end
  end
  ret
end

def escapeText(str)
  ret = ""
  str.scan(/./um) do |c|
    code = c.unpack("U")[0]
    if code == 13
      ret << sprintf("&#x%X;", code)
    elsif c == "&"
      ret << "&amp;"
    elsif c == "<"
        ret << "&lt;"
    elsif c == ">"
      ret << "&gt;"
    else
      ret << c
    end
  end
  ret
end


p = XML::ExtParser.new
def p.externalParsedEntityDecl; end
def p.internalParsedEntityDecl; end

pos = ARGV[0].rindex("/")
if pos
  p.setBase(ARGV[0][0, pos + 1])
else
  p.setBase("")
end
begin
  p.parse($<.read) do |event, name, data|
    case event
    when XML::Parser::EXTERNAL_PARSED_ENTITY_DECL
      p(["externalParsedEntityDecl", name, data])

    when XML::Parser::INTERNAL_PARSED_ENTITY_DECL
      p(["internalParsedEntityDecl", name, data])


    when XML::Parser::START_ELEM
      print "<" + name
      data.each do |n, v|
        print " " + n + "='" + escapeAttrVal(v) + "'"
      end
      print  ">"

    when XML::Parser::END_ELEM
      print "</" + name + ">"

    when XML::Parser::CDATA
      print escapeText(data)

    end
  end
rescue XML::Parser::Error
  p([$!, p.line])
end