motion-kramdown 0.6.0 → 1.16.2
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.
- checksums.yaml +5 -5
- data/README.md +6 -2
- data/lib/kramdown.rb +1 -1
- data/lib/kramdown/converter.rb +10 -11
- data/lib/kramdown/converter/base.rb +19 -12
- data/lib/kramdown/converter/hash_ast.rb +38 -0
- data/lib/kramdown/converter/html.rb +71 -39
- data/lib/kramdown/converter/kramdown.rb +19 -10
- data/lib/kramdown/converter/latex.rb +28 -10
- data/lib/kramdown/converter/man.rb +303 -0
- data/lib/kramdown/converter/math_engine/itex2mml.rb +2 -2
- data/lib/kramdown/converter/math_engine/mathjax.rb +13 -3
- data/lib/kramdown/converter/math_engine/mathjaxnode.rb +56 -0
- data/lib/kramdown/converter/math_engine/ritex.rb +2 -2
- data/lib/kramdown/converter/math_engine/sskatex.rb +97 -0
- data/lib/kramdown/converter/pdf.rb +6 -6
- data/lib/kramdown/converter/remove_html_tags.rb +5 -3
- data/lib/kramdown/converter/syntax_highlighter.rb +5 -2
- data/lib/kramdown/converter/syntax_highlighter/coderay.rb +8 -5
- data/lib/kramdown/converter/syntax_highlighter/minted.rb +35 -0
- data/lib/kramdown/converter/syntax_highlighter/rouge.rb +48 -10
- data/lib/kramdown/converter/toc.rb +2 -2
- data/lib/kramdown/document.rb +16 -19
- data/lib/kramdown/element.rb +5 -1
- data/lib/kramdown/error.rb +1 -1
- data/lib/kramdown/options.rb +103 -7
- data/lib/kramdown/parser.rb +1 -1
- data/lib/kramdown/parser/base.rb +12 -18
- data/lib/kramdown/parser/gfm.rb +142 -11
- data/lib/kramdown/parser/html.rb +28 -18
- data/lib/kramdown/parser/kramdown.rb +45 -36
- data/lib/kramdown/parser/kramdown/abbreviation.rb +1 -1
- data/lib/kramdown/parser/kramdown/autolink.rb +2 -8
- data/lib/kramdown/parser/kramdown/blank_line.rb +2 -2
- data/lib/kramdown/parser/kramdown/block_boundary.rb +4 -4
- data/lib/kramdown/parser/kramdown/blockquote.rb +4 -4
- data/lib/kramdown/parser/kramdown/codeblock.rb +11 -8
- data/lib/kramdown/parser/kramdown/codespan.rb +1 -1
- data/lib/kramdown/parser/kramdown/emphasis.rb +2 -2
- data/lib/kramdown/parser/kramdown/eob.rb +1 -1
- data/lib/kramdown/parser/kramdown/escaped_chars.rb +1 -1
- data/lib/kramdown/parser/kramdown/extensions.rb +6 -3
- data/lib/kramdown/parser/kramdown/footnote.rb +4 -5
- data/lib/kramdown/parser/kramdown/header.rb +2 -2
- data/lib/kramdown/parser/kramdown/horizontal_rule.rb +1 -1
- data/lib/kramdown/parser/kramdown/html.rb +8 -8
- data/lib/kramdown/parser/kramdown/html_entity.rb +2 -2
- data/lib/kramdown/parser/kramdown/line_break.rb +1 -1
- data/lib/kramdown/parser/kramdown/link.rb +5 -4
- data/lib/kramdown/parser/kramdown/list.rb +17 -10
- data/lib/kramdown/parser/kramdown/math.rb +2 -2
- data/lib/kramdown/parser/kramdown/paragraph.rb +19 -8
- data/lib/kramdown/parser/kramdown/smart_quotes.rb +3 -3
- data/lib/kramdown/parser/kramdown/table.rb +10 -12
- data/lib/kramdown/parser/kramdown/typographic_symbol.rb +1 -1
- data/lib/kramdown/parser/markdown.rb +2 -2
- data/lib/kramdown/utils.rb +2 -1
- data/lib/kramdown/utils/configurable.rb +2 -2
- data/lib/kramdown/utils/entities.rb +1 -1
- data/lib/kramdown/utils/html.rb +2 -2
- data/lib/kramdown/utils/lru_cache.rb +40 -0
- data/lib/kramdown/utils/ordered_hash.rb +2 -71
- data/lib/kramdown/utils/string_scanner.rb +2 -2
- data/lib/kramdown/utils/unidecoder.rb +2 -2
- data/lib/kramdown/version.rb +2 -2
- data/lib/rubymotion/require_override.rb +9 -0
- data/lib/rubymotion/version.rb +1 -1
- data/spec/{helpers → motion-kramdown/_helpers}/it_behaves_like.rb +0 -0
- data/spec/{helpers → motion-kramdown/_helpers}/option_file.rb +2 -2
- data/spec/{helpers → motion-kramdown/_helpers}/tidy.rb +0 -0
- data/spec/motion-kramdown/bench_mark.rb +37 -0
- data/spec/{document_tree.rb → motion-kramdown/document_tree.rb} +11 -1
- data/spec/{gfm_to_html.rb → motion-kramdown/gfm_to_html.rb} +51 -18
- data/spec/{html_to_html.rb → motion-kramdown/html_to_html.rb} +27 -9
- data/spec/{html_to_kramdown_to_html.rb → motion-kramdown/html_to_kramdown_to_html.rb} +35 -16
- data/spec/motion-kramdown/kramdown_to_xxx.rb +75 -0
- data/spec/{test_location.rb → motion-kramdown/test_location.rb} +0 -0
- data/spec/{test_string_scanner_kramdown.rb → motion-kramdown/test_string_scanner_kramdown.rb} +0 -0
- data/spec/motion-kramdown/text_manpage.rb +11 -0
- data/spec/{text_to_kramdown_to_html.rb → motion-kramdown/text_to_kramdown_to_html.rb} +30 -19
- data/spec/{text_to_latex.rb → motion-kramdown/text_to_latex.rb} +0 -0
- data/spec/{helpers/spec_options.rb → spec_helper.rb} +13 -2
- metadata +54 -33
- data/lib/kramdown/compatibility.rb +0 -36
- data/spec/bench_mark.rb +0 -43
- data/spec/kramdown_to_xxx.rb +0 -42
@@ -1,7 +1,7 @@
|
|
1
1
|
# -*- coding: utf-8 -*-
|
2
2
|
#
|
3
3
|
#--
|
4
|
-
# Copyright (C) 2009-
|
4
|
+
# Copyright (C) 2009-2016 Thomas Leitner <t_leitner@gmx.at>
|
5
5
|
#
|
6
6
|
# This file is part of kramdown which is licensed under the MIT.
|
7
7
|
#++
|
@@ -13,7 +13,7 @@ module Kramdown::Converter::MathEngine
|
|
13
13
|
module Ritex
|
14
14
|
|
15
15
|
begin
|
16
|
-
|
16
|
+
require 'ritex'
|
17
17
|
|
18
18
|
# Ritex is available if this constant is +true+.
|
19
19
|
AVAILABLE = true
|
@@ -0,0 +1,97 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
#
|
3
|
+
#--
|
4
|
+
# Copyright (C) 2017 Christian Cornelssen <ccorn@1tein.de>
|
5
|
+
#
|
6
|
+
# This file is part of kramdown which is licensed under the MIT.
|
7
|
+
#++
|
8
|
+
|
9
|
+
module Kramdown::Converter::MathEngine
|
10
|
+
|
11
|
+
# Consider this a lightweight alternative to MathjaxNode. Uses KaTeX and ExecJS (via ::SsKaTeX)
|
12
|
+
# instead of MathJax and Node.js. Javascript execution context initialization is done only once.
|
13
|
+
# As a result, the performance is reasonable.
|
14
|
+
module SsKaTeX
|
15
|
+
|
16
|
+
# Indicate whether SsKaTeX may be available.
|
17
|
+
#
|
18
|
+
# This test is incomplete; it cannot test the existence of _katex_js_ nor the availability of a
|
19
|
+
# specific _js_run_ because those depend on configuration not given here. This test mainly
|
20
|
+
# indicates whether static dependencies such as the +sskatex+ and +execjs+ gems are available.
|
21
|
+
AVAILABLE = begin
|
22
|
+
require 'sskatex'
|
23
|
+
# No test for any JS engine availability here; specifics are config-dependent anyway
|
24
|
+
true
|
25
|
+
rescue LoadError
|
26
|
+
false
|
27
|
+
end
|
28
|
+
|
29
|
+
if AVAILABLE
|
30
|
+
|
31
|
+
# Class-level cache for ::SsKaTeX converter state, queried by configuration. Note: KTXC
|
32
|
+
# contents may become stale if the contents of used JS files change while the configuration
|
33
|
+
# remains unchanged.
|
34
|
+
KTXC = ::Kramdown::Utils::LRUCache.new(10)
|
35
|
+
|
36
|
+
# A logger that routes messages to the debug channel only. No need to create this dynamically.
|
37
|
+
DEBUG_LOGGER = lambda { |level, &expr| warn(expr.call) }
|
38
|
+
|
39
|
+
class << self
|
40
|
+
private
|
41
|
+
|
42
|
+
# Given a Kramdown::Converter::Base object _converter_, retrieves the logging options and
|
43
|
+
# builds an object usable for ::SsKaTeX#logger. The result is either +nil+ (no logging) or a
|
44
|
+
# +Proc+ object which, when given a _level_ (either +:verbose+ or +:debug+) and a block,
|
45
|
+
# decides whether logging is enabled, and if so, evaluates the given block for the message
|
46
|
+
# and routes that message to the appropriate channels. With <tt>level == :verbose+</tt>,
|
47
|
+
# messages are passed to _converter_.warning if the _converter_'s +:verbose+ option is set.
|
48
|
+
# All messages are passed to +warn+ if the _converter_'s +:debug+ option is set.
|
49
|
+
#
|
50
|
+
# Note that the returned logger may contain references to the given _converter_ and is not
|
51
|
+
# affected by subsequent changes in the _converter_'s logging options.
|
52
|
+
def logger(converter)
|
53
|
+
config = converter.options[:math_engine_opts]
|
54
|
+
debug = config[:debug]
|
55
|
+
if config[:verbose]
|
56
|
+
# Need a closure
|
57
|
+
lambda do |level, &expr|
|
58
|
+
verbose = (level == :verbose)
|
59
|
+
msg = expr.call if debug || verbose
|
60
|
+
warn(msg) if debug
|
61
|
+
converter.warning(msg) if verbose
|
62
|
+
end
|
63
|
+
elsif debug
|
64
|
+
DEBUG_LOGGER
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
# Given a Kramdown::Converter::Base object _converter_, return a ::SsKaTeX converter _sktx_
|
69
|
+
# that has been configured with _converter_'s +math_engine_opts+, but not for logging. Cache
|
70
|
+
# _sktx_ for reuse, without references to _converter_.
|
71
|
+
def katex_conv(converter)
|
72
|
+
config = converter.options[:math_engine_opts]
|
73
|
+
# Could .reject { |key, _| [:verbose, :debug].include?(key.to_sym) }
|
74
|
+
# because the JS engine setup can be reused for different logging settings.
|
75
|
+
# But then the +math_engine_opts+ dict would be essentially dup'ed every time,
|
76
|
+
# and late activation of logging would miss the initialization if the engine is reused.
|
77
|
+
KTXC[config] ||= ::SsKaTeX.new(config)
|
78
|
+
end
|
79
|
+
|
80
|
+
public
|
81
|
+
|
82
|
+
# The function used by kramdown for rendering TeX math to HTML
|
83
|
+
def call(converter, el, opts)
|
84
|
+
display_mode = el.options[:category]
|
85
|
+
ans = katex_conv(converter).call(el.value, display_mode == :block, &logger(converter))
|
86
|
+
attr = el.attr.dup
|
87
|
+
attr.delete('xmlns')
|
88
|
+
attr.delete('display')
|
89
|
+
ans.insert(ans =~ /[[:space:]>]/, converter.html_attributes(attr))
|
90
|
+
ans = ' ' * opts[:indent] << ans << "\n" if display_mode == :block
|
91
|
+
ans
|
92
|
+
end
|
93
|
+
|
94
|
+
end
|
95
|
+
end
|
96
|
+
end
|
97
|
+
end
|
@@ -1,17 +1,17 @@
|
|
1
1
|
# -*- coding: utf-8 -*-
|
2
2
|
#
|
3
3
|
#--
|
4
|
-
# Copyright (C) 2009-
|
4
|
+
# Copyright (C) 2009-2016 Thomas Leitner <t_leitner@gmx.at>
|
5
5
|
#
|
6
6
|
# This file is part of kramdown which is licensed under the MIT.
|
7
7
|
#++
|
8
8
|
#
|
9
9
|
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
10
|
+
require 'prawn'
|
11
|
+
require 'prawn/table'
|
12
|
+
require 'kramdown/converter'
|
13
|
+
require 'kramdown/utils'
|
14
|
+
require 'open-uri'
|
15
15
|
|
16
16
|
module Kramdown
|
17
17
|
|
@@ -1,13 +1,13 @@
|
|
1
1
|
# -*- coding: utf-8 -*-
|
2
2
|
#
|
3
3
|
#--
|
4
|
-
# Copyright (C) 2009-
|
4
|
+
# Copyright (C) 2009-2016 Thomas Leitner <t_leitner@gmx.at>
|
5
5
|
#
|
6
6
|
# This file is part of kramdown which is licensed under the MIT.
|
7
7
|
#++
|
8
8
|
#
|
9
9
|
|
10
|
-
|
10
|
+
require 'kramdown/converter'
|
11
11
|
|
12
12
|
module Kramdown
|
13
13
|
|
@@ -30,6 +30,8 @@ module Kramdown
|
|
30
30
|
end
|
31
31
|
|
32
32
|
def convert(el)
|
33
|
+
real_el, el = el, el.value if el.type == :footnote
|
34
|
+
|
33
35
|
children = el.children.dup
|
34
36
|
index = 0
|
35
37
|
while index < children.length
|
@@ -46,7 +48,7 @@ module Kramdown
|
|
46
48
|
end
|
47
49
|
end
|
48
50
|
el.children = children
|
49
|
-
el
|
51
|
+
real_el || el
|
50
52
|
end
|
51
53
|
|
52
54
|
end
|
@@ -1,7 +1,7 @@
|
|
1
1
|
# -*- coding: utf-8 -*-
|
2
2
|
#
|
3
3
|
#--
|
4
|
-
# Copyright (C) 2009-
|
4
|
+
# Copyright (C) 2009-2016 Thomas Leitner <t_leitner@gmx.at>
|
5
5
|
#
|
6
6
|
# This file is part of kramdown which is licensed under the MIT.
|
7
7
|
#++
|
@@ -46,8 +46,11 @@ module Kramdown
|
|
46
46
|
# :block type text correctly wrapped (i.e. normally inside a pre-tag, but may
|
47
47
|
# also be a table-tag or just a div-tag) but :span type text *without* a
|
48
48
|
# code-tag!
|
49
|
+
#
|
50
|
+
# Also, a syntax highlighter should store the default highlighting language for
|
51
|
+
# the invocation in the +opts+ hash under the key :default_lang.
|
49
52
|
module SyntaxHighlighter
|
50
53
|
end
|
51
54
|
|
52
55
|
end
|
53
|
-
end
|
56
|
+
end
|
@@ -1,7 +1,7 @@
|
|
1
1
|
# -*- coding: utf-8 -*-
|
2
2
|
#
|
3
3
|
#--
|
4
|
-
# Copyright (C) 2009-
|
4
|
+
# Copyright (C) 2009-2016 Thomas Leitner <t_leitner@gmx.at>
|
5
5
|
#
|
6
6
|
# This file is part of kramdown which is licensed under the MIT.
|
7
7
|
#++
|
@@ -13,7 +13,7 @@ module Kramdown::Converter::SyntaxHighlighter
|
|
13
13
|
module Coderay
|
14
14
|
|
15
15
|
begin
|
16
|
-
|
16
|
+
require 'coderay'
|
17
17
|
|
18
18
|
# Highlighting via coderay is available if this constant is +true+.
|
19
19
|
# RM AVAILABLE = true
|
@@ -21,17 +21,20 @@ module Kramdown::Converter::SyntaxHighlighter
|
|
21
21
|
AVAILABLE = false # :nodoc:
|
22
22
|
end
|
23
23
|
|
24
|
-
def self.call(converter, text, lang, type,
|
24
|
+
def self.call(converter, text, lang, type, call_opts)
|
25
25
|
return nil unless converter.options[:enable_coderay]
|
26
26
|
|
27
27
|
if type == :span && lang
|
28
28
|
::CodeRay.scan(text, lang.to_sym).html(options(converter, :span)).chomp
|
29
29
|
elsif type == :block && (lang || options(converter, :default_lang))
|
30
|
-
lang
|
31
|
-
::CodeRay.scan(text, lang).html(options(converter, :block)).chomp << "\n"
|
30
|
+
lang ||= call_opts[:default_lang] = options(converter, :default_lang)
|
31
|
+
::CodeRay.scan(text, lang.to_s.gsub(/-/, '_').to_sym).html(options(converter, :block)).chomp << "\n"
|
32
32
|
else
|
33
33
|
nil
|
34
34
|
end
|
35
|
+
rescue
|
36
|
+
converter.warning("There was an error using CodeRay: #{$!.message}")
|
37
|
+
nil
|
35
38
|
end
|
36
39
|
|
37
40
|
def self.options(converter, type)
|
@@ -0,0 +1,35 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
#
|
3
|
+
#--
|
4
|
+
# Copyright (C) 2009-2016 Thomas Leitner <t_leitner@gmx.at>
|
5
|
+
#
|
6
|
+
# This file is part of kramdown which is licensed under the MIT.
|
7
|
+
#++
|
8
|
+
#
|
9
|
+
|
10
|
+
module Kramdown::Converter::SyntaxHighlighter
|
11
|
+
|
12
|
+
# Uses Minted to highlight code blocks and code spans.
|
13
|
+
module Minted
|
14
|
+
|
15
|
+
def self.call(converter, text, lang, type, _opts)
|
16
|
+
opts = converter.options[:syntax_highlighter_opts]
|
17
|
+
|
18
|
+
# Fallback to default language
|
19
|
+
lang ||= opts[:default_lang]
|
20
|
+
|
21
|
+
options = []
|
22
|
+
options << "breaklines" if opts[:wrap]
|
23
|
+
options << "linenos" if opts[:line_numbers]
|
24
|
+
options << "frame=#{opts[:frame]}" if opts[:frame]
|
25
|
+
|
26
|
+
if lang && type == :block
|
27
|
+
"\\begin{minted}[#{options.join(',')}]{#{lang}}\n#{text}\n\\end{minted}"
|
28
|
+
elsif lang && type == :span
|
29
|
+
"\\mintinline{#{lang}}{#{text}}"
|
30
|
+
else
|
31
|
+
nil
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -1,7 +1,7 @@
|
|
1
1
|
# -*- coding: utf-8 -*-
|
2
2
|
#
|
3
3
|
#--
|
4
|
-
# Copyright (C) 2009-
|
4
|
+
# Copyright (C) 2009-2016 Thomas Leitner <t_leitner@gmx.at>
|
5
5
|
#
|
6
6
|
# This file is part of kramdown which is licensed under the MIT.
|
7
7
|
#++
|
@@ -13,23 +13,61 @@ module Kramdown::Converter::SyntaxHighlighter
|
|
13
13
|
module Rouge
|
14
14
|
|
15
15
|
begin
|
16
|
-
|
16
|
+
require 'rouge'
|
17
17
|
|
18
18
|
# Highlighting via Rouge is available if this constant is +true+.
|
19
|
-
|
20
|
-
|
19
|
+
AVAILABLE = false # RM
|
20
|
+
rescue LoadError, SyntaxError
|
21
21
|
AVAILABLE = false # :nodoc:
|
22
22
|
end
|
23
23
|
|
24
|
-
def self.call(converter, text, lang, type,
|
25
|
-
opts = converter
|
24
|
+
def self.call(converter, text, lang, type, call_opts)
|
25
|
+
opts = options(converter, type)
|
26
|
+
call_opts[:default_lang] = opts[:default_lang]
|
26
27
|
lexer = ::Rouge::Lexer.find_fancy(lang || opts[:default_lang], text)
|
27
|
-
return nil
|
28
|
+
return nil if opts[:disable] || !lexer
|
29
|
+
opts[:css_class] ||= 'highlight' # For backward compatibility when using Rouge 2.0
|
30
|
+
formatter = formatter_class(opts).new(opts)
|
31
|
+
formatter.format(lexer.lex(text))
|
32
|
+
end
|
28
33
|
|
29
|
-
|
34
|
+
def self.options(converter, type)
|
35
|
+
prepare_options(converter)
|
36
|
+
converter.data[:syntax_highlighter_rouge][type]
|
37
|
+
end
|
30
38
|
|
31
|
-
|
32
|
-
|
39
|
+
def self.prepare_options(converter)
|
40
|
+
return if converter.data.key?(:syntax_highlighter_rouge)
|
41
|
+
|
42
|
+
cache = converter.data[:syntax_highlighter_rouge] = {}
|
43
|
+
|
44
|
+
opts = converter.options[:syntax_highlighter_opts].dup
|
45
|
+
span_opts = (opts.delete(:span) || {}).dup
|
46
|
+
block_opts = (opts.delete(:block) || {}).dup
|
47
|
+
[span_opts, block_opts].each do |hash|
|
48
|
+
hash.keys.each do |k|
|
49
|
+
hash[k.kind_of?(String) ? Kramdown::Options.str_to_sym(k) : k] = hash.delete(k)
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
cache[:span] = opts.merge(span_opts).update(:wrap => false)
|
54
|
+
cache[:block] = opts.merge(block_opts)
|
55
|
+
end
|
56
|
+
|
57
|
+
|
58
|
+
def self.formatter_class(opts = {})
|
59
|
+
case formatter = opts[:formatter]
|
60
|
+
when Class
|
61
|
+
formatter
|
62
|
+
when /\A[[:upper:]][[:alnum:]_]*\z/
|
63
|
+
::Rouge::Formatters.const_get(formatter)
|
64
|
+
else
|
65
|
+
# Available in Rouge 2.0 or later
|
66
|
+
::Rouge::Formatters::HTMLLegacy
|
67
|
+
end
|
68
|
+
rescue NameError
|
69
|
+
# Fallback to Rouge 1.x
|
70
|
+
::Rouge::Formatters::HTML
|
33
71
|
end
|
34
72
|
|
35
73
|
end
|
@@ -1,13 +1,13 @@
|
|
1
1
|
# -*- coding: utf-8 -*-
|
2
2
|
#
|
3
3
|
#--
|
4
|
-
# Copyright (C) 2009-
|
4
|
+
# Copyright (C) 2009-2016 Thomas Leitner <t_leitner@gmx.at>
|
5
5
|
#
|
6
6
|
# This file is part of kramdown which is licensed under the MIT.
|
7
7
|
#++
|
8
8
|
#
|
9
9
|
|
10
|
-
|
10
|
+
require 'kramdown/converter'
|
11
11
|
|
12
12
|
module Kramdown
|
13
13
|
|
data/lib/kramdown/document.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
# -*- coding: utf-8 -*-
|
2
2
|
#
|
3
3
|
#--
|
4
|
-
# Copyright (C) 2009-
|
4
|
+
# Copyright (C) 2009-2016 Thomas Leitner <t_leitner@gmx.at>
|
5
5
|
#
|
6
6
|
# This file is part of kramdown which is licensed under the MIT.
|
7
7
|
#++
|
@@ -29,31 +29,28 @@
|
|
29
29
|
#
|
30
30
|
# Kramdown::Document.new(text).to_html
|
31
31
|
#
|
32
|
-
# For detailed information have a look at the Kramdown::Document class.
|
32
|
+
# For detailed information have a look at the *\Kramdown::Document* class.
|
33
33
|
#
|
34
34
|
# == License
|
35
35
|
#
|
36
36
|
# MIT - see the COPYING file.
|
37
37
|
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
# RM require 'kramdown/converter'
|
46
|
-
# RM require 'kramdown/options'
|
47
|
-
# RM require 'kramdown/utils'
|
38
|
+
require 'kramdown/version'
|
39
|
+
require 'kramdown/element'
|
40
|
+
require 'kramdown/error'
|
41
|
+
require 'kramdown/parser'
|
42
|
+
require 'kramdown/converter'
|
43
|
+
require 'kramdown/options'
|
44
|
+
require 'kramdown/utils'
|
48
45
|
|
49
46
|
module Kramdown
|
50
47
|
|
51
48
|
# Return the data directory for kramdown.
|
52
49
|
def self.data_dir
|
53
50
|
unless defined?(@@data_dir)
|
54
|
-
|
51
|
+
require 'rbconfig'
|
55
52
|
@@data_dir = File.expand_path(File.join(File.dirname(__FILE__), '..', '..', 'data', 'kramdown'))
|
56
|
-
@@data_dir = File.expand_path(File.join(
|
53
|
+
@@data_dir = File.expand_path(File.join(RbConfig::CONFIG["datadir"], "kramdown")) if !File.exist?(@@data_dir)
|
57
54
|
raise "kramdown data directory not found! This is a bug, please report it!" unless File.directory?(@@data_dir)
|
58
55
|
end
|
59
56
|
@@data_dir
|
@@ -100,13 +97,13 @@ module Kramdown
|
|
100
97
|
# immediately available and the output can be generated.
|
101
98
|
def initialize(source, options = {})
|
102
99
|
@options = Options.merge(options).freeze
|
103
|
-
parser = (options[:input] || 'kramdown').to_s
|
100
|
+
parser = (@options[:input] || 'kramdown').to_s
|
104
101
|
parser = parser[0..0].upcase + parser[1..-1]
|
105
102
|
try_require('parser', parser)
|
106
103
|
if Parser.const_defined?(parser)
|
107
104
|
@root, @warnings = Parser.const_get(parser).parse(source, @options)
|
108
105
|
else
|
109
|
-
raise Kramdown::Error.new("kramdown has no parser to handle the specified input format: #{options[:input]}")
|
106
|
+
raise Kramdown::Error.new("kramdown has no parser to handle the specified input format: #{@options[:input]}")
|
110
107
|
end
|
111
108
|
end
|
112
109
|
|
@@ -131,9 +128,9 @@ module Kramdown
|
|
131
128
|
|
132
129
|
# Try requiring a parser or converter class and don't raise an error if the file is not found.
|
133
130
|
def try_require(type, name)
|
134
|
-
|
135
|
-
|
136
|
-
|
131
|
+
require("kramdown/#{type}/#{Utils.snake_case(name)}")
|
132
|
+
true
|
133
|
+
rescue LoadError
|
137
134
|
true
|
138
135
|
end
|
139
136
|
protected :try_require
|