/
xslt.rb
57 lines (53 loc) · 1.39 KB
/
xslt.rb
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
# frozen_string_literal: true
require "nokogiri/xslt/stylesheet"
module Nokogiri
class << self
###
# Create a Nokogiri::XSLT::Stylesheet with +stylesheet+.
#
# Example:
#
# xslt = Nokogiri::XSLT(File.read(ARGV[0]))
#
def XSLT stylesheet, modules = {}
XSLT.parse(stylesheet, modules)
end
end
###
# See Nokogiri::XSLT::Stylesheet for creating and manipulating
# Stylesheet object.
module XSLT
class << self
###
# Parse the stylesheet in +string+, register any +modules+
def parse(string, modules = {})
modules.each do |url, klass|
XSLT.register(url, klass)
end
doc = XML::Document.parse(string, nil, nil, XML::ParseOptions::DEFAULT_XSLT)
if Nokogiri.jruby?
Stylesheet.parse_stylesheet_doc(doc, string)
else
Stylesheet.parse_stylesheet_doc(doc)
end
end
###
# Quote parameters in +params+ for stylesheet safety
def quote_params(params)
parray = (params.instance_of?(Hash) ? params.to_a.flatten : params).dup
parray.each_with_index do |v, i|
parray[i] = if i % 2 > 0
if v =~ /'/
"concat('#{v.gsub(/'/, %q{', "'", '})}')"
else
"'#{v}'"
end
else
v.to_s
end
end
parray.flatten
end
end
end
end