docbook_xsl_wrapper 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/.autotest ADDED
@@ -0,0 +1,9 @@
1
+ require "autotest/growl"
2
+ require "autotest/fsevent"
3
+
4
+ Autotest.add_hook :initialize do |at|
5
+ at.add_mapping(%r%^spec/(docbook_xsl_wrapper)/.*rb$%) {|filename, _|
6
+ filename
7
+ }
8
+ end
9
+
data/.gitignore ADDED
@@ -0,0 +1,17 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --color
2
+ --format progress
data/.rvmrc ADDED
@@ -0,0 +1,48 @@
1
+ #!/usr/bin/env bash
2
+
3
+ # This is an RVM Project .rvmrc file, used to automatically load the ruby
4
+ # development environment upon cd'ing into the directory
5
+
6
+ # First we specify our desired <ruby>[@<gemset>], the @gemset name is optional,
7
+ # Only full ruby name is supported here, for short names use:
8
+ # echo "rvm use 1.9.3" > .rvmrc
9
+ environment_id="ruby-1.9.3-p374@docbook"
10
+
11
+ # Uncomment the following lines if you want to verify rvm version per project
12
+ # rvmrc_rvm_version="1.18.5 (stable)" # 1.10.1 seams as a safe start
13
+ # eval "$(echo ${rvm_version}.${rvmrc_rvm_version} | awk -F. '{print "[[ "$1*65536+$2*256+$3" -ge "$4*65536+$5*256+$6" ]]"}' )" || {
14
+ # echo "This .rvmrc file requires at least RVM ${rvmrc_rvm_version}, aborting loading."
15
+ # return 1
16
+ # }
17
+
18
+ # First we attempt to load the desired environment directly from the environment
19
+ # file. This is very fast and efficient compared to running through the entire
20
+ # CLI and selector. If you want feedback on which environment was used then
21
+ # insert the word 'use' after --create as this triggers verbose mode.
22
+ if [[ -d "${rvm_path:-$HOME/.rvm}/environments"
23
+ && -s "${rvm_path:-$HOME/.rvm}/environments/$environment_id" ]]
24
+ then
25
+ \. "${rvm_path:-$HOME/.rvm}/environments/$environment_id"
26
+ [[ -s "${rvm_path:-$HOME/.rvm}/hooks/after_use" ]] &&
27
+ \. "${rvm_path:-$HOME/.rvm}/hooks/after_use" || true
28
+ else
29
+ # If the environment file has not yet been created, use the RVM CLI to select.
30
+ rvm --create "$environment_id" || {
31
+ echo "Failed to create RVM environment '${environment_id}'."
32
+ return 1
33
+ }
34
+ fi
35
+
36
+ # If you use bundler, this might be useful to you:
37
+ # if [[ -s Gemfile ]] && {
38
+ # ! builtin command -v bundle >/dev/null ||
39
+ # builtin command -v bundle | GREP_OPTIONS= \grep $rvm_path/bin/bundle >/dev/null
40
+ # }
41
+ # then
42
+ # printf "%b" "The rubygem 'bundler' is not installed. Installing it now.\n"
43
+ # gem install bundler
44
+ # fi
45
+ # if [[ -s Gemfile ]] && builtin command -v bundle >/dev/null
46
+ # then
47
+ # bundle install | GREP_OPTIONS= \grep -vE '^Using|Your bundle is complete'
48
+ # fi
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in docbook_xsl_wrapper.gemspec
4
+ gemspec
data/LICENSE.txt ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2013 Mike Cook
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,59 @@
1
+ # DocBook XSL Wrapper
2
+
3
+ _Initial 'gemification' of the DocBook XSL Ruby script. Please consider
4
+ this as an Alpha release._
5
+
6
+ The DocBook XSL stylesheets are very powerful and provide an easy way to output
7
+ your DocBook XML documents into a usable format such as EPUB and PDF. This GEM
8
+ hopes to make using these stylesheets even easier.
9
+
10
+ At present the wrapper will only convert DocBook to EPUB 2 and is
11
+ intended to be run from the command-line - future versions will have more
12
+ functionality (see Future Improvements).
13
+
14
+
15
+ ## Requirements
16
+
17
+ * DocBook
18
+ * DocBook XSL (~> v1.78.0)
19
+ * xsltproc
20
+
21
+ ### NOTE
22
+
23
+ The Docbook XSL Wrapper uses xsltproc, which allows all stylesheets to be
24
+ pulled from the http://docbook.sourceforge.net... URI, but if you have the
25
+ stylesheets installed locally, xsltproc will rewrite the URI to use local files.
26
+
27
+ On my OSX Lion system, "docbook" was installed via Homebrew, but two issues
28
+ needed fixing before everything worked correctly.
29
+
30
+ The catalog file ($XML_CATALOG_FILES) needed updating;
31
+
32
+ 1. Add an entry to your 1.78.0 path.
33
+ 2. Remove older XSL entries (e.g. 1.76.0 & 1.77.0).
34
+
35
+ _Please make sure that xsltproc uses the *1.78.0* stylesheets as default_
36
+
37
+
38
+ ## Installation
39
+
40
+ $ gem install docbook_xsl_wrapper
41
+
42
+ ## Usage
43
+
44
+ $ docbook_xsl_wrapper [OPTIONS] [DocBook File]
45
+
46
+ ## Future Improvements
47
+
48
+ * Better design so it can be used from within other GEMs, as part of a larger tool-chain.
49
+ * Test that the GEM also works on Linux.
50
+ * EPUB3 output
51
+ * Other output formats (e.g. PDF)
52
+
53
+ ## Contributing
54
+
55
+ 1. Fork it
56
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
57
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
58
+ 4. Push to the branch (`git push origin my-new-feature`)
59
+ 5. Create new Pull Request
data/Rakefile ADDED
@@ -0,0 +1 @@
1
+ require "bundler/gem_tasks"
@@ -0,0 +1,76 @@
1
+ #!/usr/bin/env ruby
2
+ # This program converts DocBook documents into .epub files.
3
+ #
4
+ # Usage: dbtoepub [OPTIONS] [DocBook Files]
5
+ #
6
+ # .epub is defined by the IDPF at www.idpf.org and is made up of 3 standards:
7
+ # - Open Publication Structure (OPS)
8
+ # - Open Packaging Format (OPF)
9
+ # - Open Container Format (OCF)
10
+ #
11
+ # Specific options:
12
+ # -c, --css [FILE] Use FILE for CSS on generated XHTML.
13
+ # -d, --debug Show debugging output.
14
+ # -f, --font [OTF FILE] Embed OTF FILE in .epub.
15
+ # -h, --help Display usage info.
16
+ # -s, --stylesheet [XSL FILE] Use XSL FILE as a customization
17
+ # layer (imports epub/docbook.xsl).
18
+ # -v, --verbose Make output verbose.
19
+
20
+ $LOAD_PATH << File.expand_path(File.dirname(__FILE__) + '/../lib')
21
+
22
+
23
+ require 'fileutils'
24
+ require 'optparse'
25
+ require 'tmpdir'
26
+
27
+ require 'docbook_xsl_wrapper'
28
+
29
+ verbose = false
30
+ debug = false
31
+ css_file = nil
32
+ otf_files = []
33
+ customization_layer = nil
34
+ output_file = nil
35
+
36
+ #$DEBUG=true
37
+
38
+ # Set up the OptionParser
39
+ opts = OptionParser.new
40
+ opts.banner = "Usage: #{File.basename($0)} [OPTIONS] [DocBook Files]
41
+
42
+ #{File.basename($0)} converts DocBook <book> and <article>s into to .epub files.
43
+
44
+ .epub is defined by the IDPF at www.idpf.org and is made up of 3 standards:
45
+ - Open Publication Structure (OPS)
46
+ - Open Packaging Format (OPF)
47
+ - Open Container Format (OCF)
48
+
49
+ Specific options:"
50
+ opts.on("-c", "--css [FILE]", "Use FILE for CSS on generated XHTML.") {|f| css_file = f}
51
+ opts.on("-d", "--debug", "Show debugging output.") {debug = true; verbose = true}
52
+ opts.on("-f", "--font [OTF FILE]", "Embed OTF FILE in .epub.") {|f| otf_files << f}
53
+ opts.on("-h", "--help", "Display usage info.") {puts opts.to_s; exit 0}
54
+ opts.on("-o", "--output [OUTPUT FILE]", "Output ePub file as OUTPUT FILE.") {|f| output_file = f}
55
+ opts.on("-s", "--stylesheet [XSL FILE]", "Use XSL FILE as a customization layer (imports epub/docbook.xsl).") {|f| customization_layer = f}
56
+ opts.on("-v", "--verbose", "Make output verbose.") {verbose = true}
57
+
58
+ db_files = opts.parse(ARGV)
59
+ if db_files.size == 0
60
+ puts opts.to_s
61
+ exit 0
62
+ end
63
+
64
+ db_files.each {|docbook_file|
65
+ dir = File.expand_path(File.join(Dir.tmpdir, ".epubtmp#{Time.now.to_f.to_s}"))
66
+ FileUtils.mkdir_p(dir)
67
+ e = DocbookXslWrapper::Epub.new(docbook_file, dir, css_file, customization_layer, otf_files)
68
+
69
+ if output_file
70
+ epub_file = output_file
71
+ else
72
+ epub_file = File.join(File.dirname(docbook_file), File.basename(docbook_file, ".xml") + ".epub")
73
+ end
74
+ puts "Rendering DocBook file #{docbook_file} to #{epub_file}" if verbose
75
+ e.render_to_file(epub_file)
76
+ }
@@ -0,0 +1,25 @@
1
+ # -*- encoding: utf-8 -*-
2
+ require File.expand_path('../lib/docbook_xsl_wrapper/version', __FILE__)
3
+
4
+ Gem::Specification.new do |gem|
5
+ gem.name = "docbook_xsl_wrapper"
6
+ gem.version = DocbookXslWrapper::VERSION
7
+ gem.authors = ["Mike Cook"]
8
+ gem.email = ["m@mikecook.co.uk"]
9
+ gem.summary = %q{Wrapper for the DocBook XSL stylesheets for easy XML to EPUB}
10
+ gem.description = %q{DocBook XSL Wrapper let's you easily convert DocBook XML to EPUB using the official DocBook XSL stylesheets.}
11
+ gem.homepage = ""
12
+
13
+ gem.platform = Gem::Platform::RUBY
14
+ gem.files = `git ls-files`.split($\)
15
+ gem.require_paths = ['lib']
16
+ gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
17
+ gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
18
+
19
+ gem.required_ruby_version = '~> 1.9.3'
20
+
21
+ gem.add_development_dependency('rspec', '~> 2.12.0')
22
+ gem.add_development_dependency('autotest-standalone')
23
+ gem.add_development_dependency('autotest-growl')
24
+ gem.add_development_dependency('autotest-fsevent')
25
+ end
@@ -0,0 +1,228 @@
1
+ require 'fileutils'
2
+ require 'rexml/parsers/pullparser'
3
+
4
+ module DocbookXslWrapper
5
+
6
+ class Epub
7
+ DOCBOOK_URI = "http://docbook.sourceforge.net/release/xsl/current"
8
+ CHECKER = "epubcheck"
9
+ STYLESHEET = File.join(DOCBOOK_URI, "epub", "docbook.xsl")
10
+ CALLOUT_PATH = File.join('images', 'callouts')
11
+ CALLOUT_FULL_PATH = File.join(DOCBOOK_URI, CALLOUT_PATH)
12
+ CALLOUT_LIMIT = 15
13
+ CALLOUT_EXT = ".png"
14
+ XSLT_PROCESSOR = "xsltproc"
15
+ OUTPUT_DIR = ".epubtmp#{Time.now.to_f.to_s}"
16
+ MIMETYPE = "application/epub+zip"
17
+ META_DIR = "META-INF"
18
+ OEBPS_DIR = "OEBPS"
19
+ ZIPPER = "zip"
20
+
21
+ attr_reader :output_dir
22
+
23
+ def initialize(docbook_file, output_dir=OUTPUT_DIR, css_file=nil, customization_layer=nil, embedded_fonts=[])
24
+ @docbook_file = docbook_file
25
+ @output_dir = output_dir
26
+ @meta_dir = File.join(@output_dir, META_DIR)
27
+ @oebps_dir = File.join(@output_dir, OEBPS_DIR)
28
+ @css_file = css_file ? File.expand_path(css_file) : css_file
29
+ @embedded_fonts = embedded_fonts
30
+ @to_delete = []
31
+
32
+ if customization_layer
33
+ @stylesheet = File.expand_path(customization_layer)
34
+ else
35
+ @stylesheet = STYLESHEET
36
+ end
37
+
38
+ unless File.exist?(@docbook_file)
39
+ raise ArgumentError.new("File #{@docbook_file} does not exist")
40
+ end
41
+ end
42
+
43
+ def render_to_file(output_file, verbose=false)
44
+ render_to_epub(output_file, verbose)
45
+ bundle_epub(output_file, verbose)
46
+ cleanup_files(@to_delete)
47
+ end
48
+
49
+ def self.invalid?(file)
50
+ # Obnoxiously, we can't just check for a non-zero output...
51
+ cmd = %Q(#{CHECKER} "#{file}")
52
+ output = `#{cmd} 2>&1`
53
+
54
+ if $?.to_i == 0
55
+ return false
56
+ else
57
+ STDERR.puts output if $DEBUG
58
+ return output
59
+ end
60
+ end
61
+
62
+ private
63
+ def render_to_epub(output_file, verbose)
64
+ @collapsed_docbook_file = collapse_docbook()
65
+
66
+ chunk_quietly = "--stringparam chunk.quietly " + (verbose ? '0' : '1')
67
+ callout_path = "--stringparam callout.graphics.path #{CALLOUT_PATH}/"
68
+ callout_limit = "--stringparam callout.graphics.number.limit #{CALLOUT_LIMIT}"
69
+ callout_ext = "--stringparam callout.graphics.extension #{CALLOUT_EXT}"
70
+ html_stylesheet = "--stringparam html.stylesheet #{File.basename(@css_file)}" if @css_file
71
+ base = "--stringparam base.dir #{OEBPS_DIR}/"
72
+ unless @embedded_fonts.empty?
73
+ embedded_fonts = @embedded_fonts.map {|f| File.basename(f)}.join(',')
74
+ font = "--stringparam epub.embedded.fonts \"#{embedded_fonts}\""
75
+ end
76
+ meta = "--stringparam epub.metainf.dir #{META_DIR}/"
77
+ oebps = "--stringparam epub.oebps.dir #{OEBPS_DIR}/"
78
+ options = [chunk_quietly,
79
+ callout_path,
80
+ callout_limit,
81
+ callout_ext,
82
+ base,
83
+ font,
84
+ meta,
85
+ oebps,
86
+ html_stylesheet,
87
+ ].join(" ")
88
+ # Double-quote stylesheet & file to help Windows cmd.exe
89
+ db2epub_cmd = %Q(cd "#{@output_dir}" && #{XSLT_PROCESSOR} #{options} "#{@stylesheet}" "#{@collapsed_docbook_file}")
90
+ STDERR.puts db2epub_cmd if $DEBUG
91
+ success = system(db2epub_cmd)
92
+ raise "Could not render as .epub to #{output_file} (#{db2epub_cmd})" unless success
93
+ @to_delete << Dir["#{@meta_dir}/*"]
94
+ @to_delete << Dir["#{@oebps_dir}/*"]
95
+ end
96
+
97
+ def bundle_epub(output_file, verbose)
98
+
99
+ quiet = verbose ? "" : "-q"
100
+ mimetype_filename = write_mimetype()
101
+ meta = File.basename(@meta_dir)
102
+ oebps = File.basename(@oebps_dir)
103
+ images = copy_images()
104
+ csses = copy_csses()
105
+ fonts = copy_fonts()
106
+ callouts = copy_callouts()
107
+ # zip -X -r ../book.epub mimetype META-INF OEBPS
108
+ # Double-quote stylesheet & file to help Windows cmd.exe
109
+ zip_cmd = %Q(cd "#{@output_dir}" && #{ZIPPER} #{quiet} -X -r "#{File.expand_path(output_file)}" "#{mimetype_filename}" "#{meta}" "#{oebps}")
110
+ puts zip_cmd if $DEBUG
111
+ success = system(zip_cmd)
112
+ raise "Could not bundle into .epub file to #{output_file}" unless success
113
+ end
114
+
115
+ # Input must be collapsed because REXML couldn't find figures in files that
116
+ # were XIncluded or added by ENTITY
117
+ # http://sourceforge.net/tracker/?func=detail&aid=2750442&group_id=21935&atid=373747
118
+ def collapse_docbook
119
+ # Double-quote stylesheet & file to help Windows cmd.exe
120
+ collapsed_file = File.join(File.expand_path(File.dirname(@docbook_file)),
121
+ '.collapsed.' + File.basename(@docbook_file))
122
+ entity_collapse_command = %Q(xmllint --loaddtd --noent -o "#{collapsed_file}" "#{@docbook_file}")
123
+ entity_success = system(entity_collapse_command)
124
+ raise "Could not collapse named entites in #{@docbook_file}" unless entity_success
125
+
126
+ xinclude_collapse_command = %Q(xmllint --xinclude -o "#{collapsed_file}" "#{collapsed_file}")
127
+ xinclude_success = system(xinclude_collapse_command)
128
+ raise "Could not collapse XIncludes in #{@docbook_file}" unless xinclude_success
129
+
130
+ @to_delete << collapsed_file
131
+ return collapsed_file
132
+ end
133
+
134
+ def copy_callouts
135
+ new_callout_images = []
136
+ if has_callouts?
137
+ calloutglob = "#{CALLOUT_FULL_PATH}/*#{CALLOUT_EXT}"
138
+ Dir.glob(calloutglob).each {|img|
139
+ img_new_filename = File.join(@oebps_dir, CALLOUT_PATH, File.basename(img))
140
+
141
+ # TODO: What to rescue for these two?
142
+ FileUtils.mkdir_p(File.dirname(img_new_filename))
143
+ FileUtils.cp(img, img_new_filename)
144
+ @to_delete << img_new_filename
145
+ new_callout_images << img
146
+ }
147
+ end
148
+ return new_callout_images
149
+ end
150
+
151
+ def copy_fonts
152
+ new_fonts = []
153
+ @embedded_fonts.each {|font_file|
154
+ font_new_filename = File.join(@oebps_dir, File.basename(font_file))
155
+ FileUtils.cp(font_file, font_new_filename)
156
+ new_fonts << font_file
157
+ }
158
+ return new_fonts
159
+ end
160
+
161
+ def copy_csses
162
+ if @css_file
163
+ css_new_filename = File.join(@oebps_dir, File.basename(@css_file))
164
+ FileUtils.cp(@css_file, css_new_filename)
165
+ end
166
+ end
167
+
168
+ def copy_images
169
+ image_references = get_image_refs()
170
+ new_images = []
171
+ image_references.each {|img|
172
+ # TODO: It'd be cooler if we had a filetype lookup rather than just
173
+ # extension
174
+ if img =~ /\.(svg|png|gif|jpe?g|xml)/i
175
+ img_new_filename = File.join(@oebps_dir, img)
176
+ img_full = File.join(File.expand_path(File.dirname(@docbook_file)), img)
177
+
178
+ # TODO: What to rescue for these two?
179
+ FileUtils.mkdir_p(File.dirname(img_new_filename))
180
+ puts(img_full + ": " + img_new_filename) if $DEBUG
181
+ FileUtils.cp(img_full, img_new_filename)
182
+ @to_delete << img_new_filename
183
+ new_images << img_full
184
+ end
185
+ }
186
+ return new_images
187
+ end
188
+
189
+ def write_mimetype
190
+ mimetype_filename = File.join(@output_dir, "mimetype")
191
+ File.open(mimetype_filename, "w") {|f| f.print MIMETYPE}
192
+ @to_delete << mimetype_filename
193
+ return File.basename(mimetype_filename)
194
+ end
195
+
196
+ def cleanup_files(file_list)
197
+ file_list.flatten.each {|f|
198
+ # Yikes
199
+ FileUtils.rm_r(f, :force => true )
200
+ }
201
+ end
202
+
203
+ # Returns an Array of all of the (image) @filerefs in a document
204
+ def get_image_refs
205
+ parser = REXML::Parsers::PullParser.new(File.new(@collapsed_docbook_file))
206
+ image_refs = []
207
+ while parser.has_next?
208
+ el = parser.pull
209
+ if el.start_element? and (el[0] == "imagedata" or el[0] == "graphic")
210
+ image_refs << el[1]['fileref']
211
+ end
212
+ end
213
+ return image_refs.uniq
214
+ end
215
+
216
+ # Returns true if the document has code callouts
217
+ def has_callouts?
218
+ parser = REXML::Parsers::PullParser.new(File.new(@collapsed_docbook_file))
219
+ while parser.has_next?
220
+ el = parser.pull
221
+ if el.start_element? and (el[0] == "calloutlist" or el[0] == "co")
222
+ return true
223
+ end
224
+ end
225
+ return false
226
+ end
227
+ end
228
+ end
@@ -0,0 +1,3 @@
1
+ module DocbookXslWrapper
2
+ VERSION = "0.0.1"
3
+ end
@@ -0,0 +1,5 @@
1
+ require "docbook_xsl_wrapper/version"
2
+
3
+ module DocbookXslWrapper
4
+ require 'docbook_xsl_wrapper/epub'
5
+ end
@@ -0,0 +1,9 @@
1
+ require 'docbook_xsl_wrapper'
2
+
3
+ RSpec.configure do |config|
4
+ config.treat_symbols_as_metadata_keys_with_true_values = true
5
+ config.run_all_when_everything_filtered = true
6
+ config.filter_run :focus
7
+
8
+ config.order = 'random'
9
+ end
@@ -0,0 +1,12 @@
1
+ <?xml version="1.0"?>
2
+ <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
3
+ <xsl:output method="xml" omit-xml-declaration="no" doctype-public="-//OASIS//DTD DocBook XML V4.4//EN" doctype-system="http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd" indent="no"/>
4
+ <xsl:template match="@*|*|comment()|processing-instruction()">
5
+ <xsl:copy>
6
+ <xsl:apply-templates select="@*|node()"/>
7
+ </xsl:copy>
8
+ </xsl:template>
9
+ <xsl:template match="text()">
10
+ <xsl:value-of select="replace(replace(., '[a-z]', 'x'), '[0-9]', 'd')"/>
11
+ </xsl:template>
12
+ </xsl:stylesheet>
metadata ADDED
@@ -0,0 +1,127 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: docbook_xsl_wrapper
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Mike Cook
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2013-02-22 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: rspec
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ~>
20
+ - !ruby/object:Gem::Version
21
+ version: 2.12.0
22
+ type: :development
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ~>
28
+ - !ruby/object:Gem::Version
29
+ version: 2.12.0
30
+ - !ruby/object:Gem::Dependency
31
+ name: autotest-standalone
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ! '>='
36
+ - !ruby/object:Gem::Version
37
+ version: '0'
38
+ type: :development
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
46
+ - !ruby/object:Gem::Dependency
47
+ name: autotest-growl
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ! '>='
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ type: :development
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ - !ruby/object:Gem::Dependency
63
+ name: autotest-fsevent
64
+ requirement: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ! '>='
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
70
+ type: :development
71
+ prerelease: false
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ! '>='
76
+ - !ruby/object:Gem::Version
77
+ version: '0'
78
+ description: DocBook XSL Wrapper let's you easily convert DocBook XML to EPUB using
79
+ the official DocBook XSL stylesheets.
80
+ email:
81
+ - m@mikecook.co.uk
82
+ executables:
83
+ - docbook_xsl_wrapper
84
+ extensions: []
85
+ extra_rdoc_files: []
86
+ files:
87
+ - .autotest
88
+ - .gitignore
89
+ - .rspec
90
+ - .rvmrc
91
+ - Gemfile
92
+ - LICENSE.txt
93
+ - README.md
94
+ - Rakefile
95
+ - bin/docbook_xsl_wrapper
96
+ - docbook_xsl_wrapper.gemspec
97
+ - lib/docbook_xsl_wrapper.rb
98
+ - lib/docbook_xsl_wrapper/epub.rb
99
+ - lib/docbook_xsl_wrapper/version.rb
100
+ - spec/spec_helper.rb
101
+ - xslt/obfuscate.xsl
102
+ homepage: ''
103
+ licenses: []
104
+ post_install_message:
105
+ rdoc_options: []
106
+ require_paths:
107
+ - lib
108
+ required_ruby_version: !ruby/object:Gem::Requirement
109
+ none: false
110
+ requirements:
111
+ - - ~>
112
+ - !ruby/object:Gem::Version
113
+ version: 1.9.3
114
+ required_rubygems_version: !ruby/object:Gem::Requirement
115
+ none: false
116
+ requirements:
117
+ - - ! '>='
118
+ - !ruby/object:Gem::Version
119
+ version: '0'
120
+ requirements: []
121
+ rubyforge_project:
122
+ rubygems_version: 1.8.25
123
+ signing_key:
124
+ specification_version: 3
125
+ summary: Wrapper for the DocBook XSL stylesheets for easy XML to EPUB
126
+ test_files:
127
+ - spec/spec_helper.rb