pandoku 0.1

Sign up to get free protection for your applications and to get access to all the features.
data/lib/pandoku.rb ADDED
@@ -0,0 +1,9 @@
1
+ require File.dirname(__FILE__) + '/pandoku/document'
2
+ require File.dirname(__FILE__) + '/pandoku/format'
3
+
4
+ # %w<markdown rst html latex
5
+ # context man mediawiki texinfo docbook opendocument odt s5 rtf>.each do |f|
6
+ %w<markdown html>.each do |f|
7
+ require "#{File.dirname(__FILE__)}/pandoku/formats/#{f}"
8
+ end
9
+
@@ -0,0 +1,37 @@
1
+ require File.dirname(__FILE__) + '/format'
2
+
3
+ module Pandoku
4
+ PANDOC_PATH = 'pandoc'
5
+
6
+ class Document
7
+ attr_reader :format, :text
8
+
9
+ def initialize(format, text)
10
+ unless format.is_a?(InputFormat)
11
+ raise TypeError, 'format must be InputFormat'
12
+ end
13
+ @format = format
14
+ @text = text
15
+ end
16
+
17
+ # Makes a command string to execute Pandoc.
18
+ def command_for(format)
19
+ <<-CMD
20
+ #{PANDOC_PATH} -f #{self.format.class.name}
21
+ -t #{format.class.name}
22
+ #{self.format.cliopts}
23
+ #{format.cliopts}
24
+ CMD
25
+ end
26
+
27
+ # Compiles the document to given +format+.
28
+ # If a second argument +io+ is true, returns +IO+ instead of +String+.
29
+ def compile(format, io = false)
30
+ unless format.is_a?(OutputFormat)
31
+ raise TypeError, 'format must be OutputFormat'
32
+ end
33
+ format.compile(self, io)
34
+ end
35
+ end
36
+ end
37
+
@@ -0,0 +1,54 @@
1
+ require 'open3'
2
+ require File.dirname(__FILE__) + '/document'
3
+
4
+ module Pandoku
5
+ class Format
6
+ attr_reader :options
7
+
8
+ def self.name
9
+ raise NotImplementedError,
10
+ 'Format.name should be overrided to return Symbol'
11
+ end
12
+
13
+ def self.default_options
14
+ {}
15
+ end
16
+
17
+ def initialize(options = {})
18
+ @options = self.class.default_options
19
+ keys = @options.keys
20
+ @options.merge!(Hash[options.select {|k, v| keys.include?(k) }])
21
+ end
22
+
23
+ def cliopts
24
+ escapeshellarg = lambda do |arg|
25
+ "'" + arg.gsub(/[^\\]'/) {|s| %<#{s.chars.first}\\'> } + "'"
26
+ end
27
+ @options.select {|k, v| v } \
28
+ .collect {|p| %<--#{p[0].gsub('_', '-')}> +
29
+ (p[1] != true ? %<=#{p[1]}> : '') } \
30
+ .join(' ')
31
+ end
32
+ end
33
+
34
+ module InputFormat
35
+ def parse(text)
36
+ Document.new(self, text)
37
+ end
38
+ end
39
+
40
+ module OutputFormat
41
+ # Compiles the given +document+ to the format.
42
+ # If a second argument +io+ is true, returns +IO+ instead of +String+.
43
+ def compile(document, io = false)
44
+ cin, cout, cerr = Open3.popen3(document.command_for(self))
45
+ cin.print(document.text)
46
+ cin.close
47
+ return cout if io
48
+ result = cout.read
49
+ cout.close
50
+ return result
51
+ end
52
+ end
53
+ end
54
+
@@ -0,0 +1,66 @@
1
+ require File.dirname(File.dirname(__FILE__)) + '/format'
2
+
3
+ module Pandoku::Formats
4
+ # HTML format.
5
+ #
6
+ # == Available Options
7
+ #
8
+ # * <tt>:standalone</tt> - Produce output with an appropriate header
9
+ # and footer.
10
+ # * <tt>:parse_raw</tt> - Parse untranslatable HTML codes as raw HTML,
11
+ # instead of ignoring them.
12
+ # * <tt>latexmathml</tt> - Use LaTeXMathML to display embedded TeX math in
13
+ # HTML output. To insert a link to a local copy of the <b>LaTeXMathML.js</b>
14
+ # script, provide a URL string. If just <tt>true</tt> is provided, the
15
+ # contents of the script will be inserted directly into the HTML header.
16
+ # * <tt>:jsmath</tt> - Use jsMath to display embedded TeX math in HTML output.
17
+ # The URL should point to the jsMath load script; if provided,
18
+ # it will be linked to in the header of standalone HTML documents.
19
+ # * <tt>:gladtex</tt> - Enclose TeX math in +<eq>+ tags in HTML output.
20
+ # These can then be processed by gladTeX to produce links
21
+ # to images of the typeset formulas.
22
+ # * <tt>:mimetex</tt> - Render TeX math using the mimeTeX CGI script.
23
+ # If URL is not specified, it is assumed that the script is at
24
+ # <b>/cgi-bin/mimetex.cgi</b>.
25
+ # * <tt>:no_wrap</tt> - Disable text wrapping in output.
26
+ # (Default is to wrap text.)
27
+ # * <tt>:sanitize_html</tt> - Sanitizes HTML using a whitelist.
28
+ # Unsafe tags are replaced by HTML comments; unsafe attributes are omitted.
29
+ # URIs in links and images are also checked against a whitelist of URI
30
+ # schemes.
31
+ # * <tt>:email_obfuscation</tt> -
32
+ # (<tt>nil</tt>|<tt>:javascript</tt>|<tt>:references</tt>)
33
+ # Specify a method for obfuscating <tt>mailto:</tt> links in HTML documents.
34
+ # * <tt>:nil</tt> leaves <tt>mailto:</tt> links as they are.
35
+ # * <tt>:javascript</tt> obfuscates them using javascript.
36
+ # * <tt>:references</tt> obfuscates them by printing their letters
37
+ # as decimal or hexadecimal character references.
38
+ # If <tt>:strict => true</tt> is specified, references is used regardless
39
+ # of the presence of this option.
40
+ # * <tt>:toc</tt> - Include an automatically generated table of contents.
41
+ # * <tt>:css</tt> - Link to a CSS style sheet.
42
+ # The pathname of the style sheet goes value.
43
+ # * <tt>:include_in_header</tt> - Include contents of the given filename
44
+ # at the end of the header. Implies <tt>:standalone</tt>.
45
+ # * <tt>:include_before_body</tt> - Include contents of the given filename
46
+ # at the beginning of the document body.
47
+ # * <tt>:include_after_body</tt> - Include contents of the given filename
48
+ # at the end of the document body.
49
+ # * <tt>:custom_header</tt> - Use contents of the given filename as the
50
+ # document header. Implies <tt>:standalone</tt>.
51
+ class HTML < Pandoku::Format
52
+ include Pandoku::InputFormat, Pandoku::OutputFormat
53
+
54
+ def self.name
55
+ :html
56
+ end
57
+
58
+ def self.default_options
59
+ { :standalone => false, :parse_raw => false, :latexmathml => nil,
60
+ :jsmath => nil, :gladtex => false, :mimetex => nil, :no_wrap => false,
61
+ :sanitize_html => false, :email_obfuscation => false, :toc => false,
62
+ :css => nil, :include_in_header => nil, :include_before_body => nil,
63
+ :include_after_body => nil, :custom_header => nil }
64
+ end
65
+ end
66
+ end
@@ -0,0 +1,31 @@
1
+ require File.dirname(File.dirname(__FILE__)) + '/format'
2
+
3
+ module Pandoku::Formats
4
+ # Markdown format. http://daringfireball.net/projects/markdown/
5
+ #
6
+ # == Available Options
7
+ #
8
+ # * <tt>:strict</tt> - Use strict syntax, with no extensions or variants.
9
+ # * <tt>:reference_links</tt> - Use reference-style links,
10
+ # rather than inline links, in writing.
11
+ # * <tt>:smart</tt> - Use smart quotes, dashes, and ellipses.
12
+ # * <tt>:no_wrap</tt> - Disable text wrapping in output.
13
+ # (Default is to wrap text.)
14
+ # * <tt>:sanitize_html</tt> - Sanitizes HTML using a whitelist.
15
+ # Unsafe tags are replaced by HTML comments; unsafe attributes are omitted.
16
+ # URIs in links and images are also checked against a whitelist of URI
17
+ # schemes.
18
+ # * <tt>:toc</tt> - Include an automatically generated table of contents.
19
+ class Markdown < Pandoku::Format
20
+ include Pandoku::InputFormat, Pandoku::OutputFormat
21
+
22
+ def self.name
23
+ :markdown
24
+ end
25
+
26
+ def self.default_options
27
+ { :strict => false, :reference_links => false, :smart => false,
28
+ :no_wrap => false, :sanitize_html => false, :toc => false }
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,27 @@
1
+ require File.dirname(File.dirname(__FILE__)) + '/format'
2
+
3
+ module Pandoku::Formats
4
+ # ODT (OpenOffice text document) format.
5
+ class ODT
6
+ include OutputFormat
7
+
8
+ def self.name
9
+ :odt
10
+ end
11
+
12
+ def cliopts
13
+ @tmpfile = @tmpfile || self._tmpfile
14
+ "--output=#{@tmpfile} #{super.cliopts}"
15
+ end
16
+
17
+ def compile(document)
18
+ @tmpfile = self._tmpfile
19
+ end
20
+
21
+ private
22
+
23
+ def _tmpfile
24
+ Dir.tmpdir
25
+ end
26
+ end
27
+ end
metadata ADDED
@@ -0,0 +1,60 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: pandoku
3
+ version: !ruby/object:Gem::Version
4
+ version: "0.1"
5
+ platform: ruby
6
+ authors:
7
+ - Hong, MinHee
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2009-10-08 00:00:00 +09:00
13
+ default_executable:
14
+ dependencies: []
15
+
16
+ description: Loose Ruby interface for Pandoc, the most powerful markup processor.
17
+ email: minhee@dahlia.kr
18
+ executables: []
19
+
20
+ extensions: []
21
+
22
+ extra_rdoc_files: []
23
+
24
+ files:
25
+ - lib/pandoku.rb
26
+ - lib/pandoku/formats/odt.rb
27
+ - lib/pandoku/formats/html.rb
28
+ - lib/pandoku/formats/markdown.rb
29
+ - lib/pandoku/document.rb
30
+ - lib/pandoku/format.rb
31
+ has_rdoc: true
32
+ homepage: http://github.com/dahlia/pandoku
33
+ licenses: []
34
+
35
+ post_install_message:
36
+ rdoc_options: []
37
+
38
+ require_paths:
39
+ - lib
40
+ required_ruby_version: !ruby/object:Gem::Requirement
41
+ requirements:
42
+ - - ">="
43
+ - !ruby/object:Gem::Version
44
+ version: "0"
45
+ version:
46
+ required_rubygems_version: !ruby/object:Gem::Requirement
47
+ requirements:
48
+ - - ">="
49
+ - !ruby/object:Gem::Version
50
+ version: "0"
51
+ version:
52
+ requirements: []
53
+
54
+ rubyforge_project:
55
+ rubygems_version: 1.3.5
56
+ signing_key:
57
+ specification_version: 3
58
+ summary: Loose Ruby interface for Pandoc, the most powerful markup processor.
59
+ test_files: []
60
+