lib/kramdown/options.rb in kramdown-1.17.0 vs lib/kramdown/options.rb in kramdown-2.0.0.beta1

- old
+ new

@@ -1,9 +1,9 @@ -# -*- coding: utf-8 -*- +# -*- coding: utf-8; frozen_string_literal: true -*- # #-- -# Copyright (C) 2009-2016 Thomas Leitner <t_leitner@gmx.at> +# Copyright (C) 2009-2019 Thomas Leitner <t_leitner@gmx.at> # # This file is part of kramdown which is licensed under the MIT. #++ # @@ -47,12 +47,12 @@ # The type 'Object' should only be used for complex types for which none of the other types # suffices. A block needs to be specified when using type 'Object' and it has to cope with # a value given as string and as the opaque type. def self.define(name, type, default, desc, &block) name = name.to_sym - raise ArgumentError, "Option name #{name} is already used" if @options.has_key?(name) - raise ArgumentError, "Invalid option type #{type} specified" if !ALLOWED_TYPES.include?(type) + raise ArgumentError, "Option name #{name} is already used" if @options.key?(name) + raise ArgumentError, "Invalid option type #{type} specified" unless ALLOWED_TYPES.include?(type) raise ArgumentError, "Invalid type for default value" if !(type === default) && !default.nil? raise ArgumentError, "Missing validator block" if type == Object && block.nil? @options[name] = Definition.new(name, type, default, desc, block) end @@ -61,27 +61,27 @@ @options end # Return +true+ if an option called +name+ is defined. def self.defined?(name) - @options.has_key?(name.to_sym) + @options.key?(name.to_sym) end # Return a Hash with the default values for all options. def self.defaults temp = {} - @options.each {|n, o| temp[o.name] = o.default} + @options.each {|_n, o| temp[o.name] = o.default } temp end # Merge the #defaults Hash with the *parsed* options from the given Hash, i.e. only valid option # names are considered and their value is run through the #parse method. def self.merge(hash) temp = defaults - hash.each do |k,v| + hash.each do |k, v| k = k.to_sym - @options.has_key?(k) ? temp[k] = parse(k, v) : temp[k] = v + temp[k] = @options.key?(k) ? parse(k, v) : v end temp end # Parse the given value +data+ as if it was a value for the option +name+ and return the parsed @@ -89,12 +89,12 @@ # # If +data+ already has the correct type, it is just returned. Otherwise it is converted to a # String and then to the correct type. def self.parse(name, data) name = name.to_sym - raise ArgumentError, "No option named #{name} defined" if !@options.has_key?(name) - if !(@options[name].type === data) + raise ArgumentError, "No option named #{name} defined" unless @options.key?(name) + unless @options[name].type === data data = data.to_s data = if @options[name].type == String data elsif @options[name].type == Integer Integer(data) rescue raise Kramdown::Error, "Invalid integer value for option '#{name}': '#{data}'" @@ -115,11 +115,11 @@ # # - A leading colon is stripped from the string. # - An empty value or a value equal to "nil" results in +nil+. def self.str_to_sym(data) data = data.strip - data = data[1..-1] if data[0] == ?: + data = data[1..-1] if data[0] == ':' (data.empty? || data == 'nil' ? nil : data.to_sym) end # ---------------------------- # :section: Option Validators @@ -152,530 +152,404 @@ # - a hash in YAML format # - or a Ruby Hash object. def self.simple_hash_validator(val, name) if String === val begin - val = YAML.load(val) + val = YAML.safe_load(val) rescue RuntimeError, ArgumentError, SyntaxError raise Kramdown::Error, "Invalid YAML value for option #{name}" end end - raise Kramdown::Error, "Invalid type #{val.class} for option #{name}" if !(Hash === val) + raise Kramdown::Error, "Invalid type #{val.class} for option #{name}" unless Hash === val val end # ---------------------------- # :section: Option Definitions # # This sections contains all option definitions that are used by the included # parsers/converters. # ---------------------------- - define(:template, String, '', <<EOF) -The name of an ERB template file that should be used to wrap the output -or the ERB template itself. + define(:template, String, '', <<~EOF) + The name of an ERB template file that should be used to wrap the output + or the ERB template itself. -This is used to wrap the output in an environment so that the output can -be used as a stand-alone document. For example, an HTML template would -provide the needed header and body tags so that the whole output is a -valid HTML file. If no template is specified, the output will be just -the converted text. + This is used to wrap the output in an environment so that the output can + be used as a stand-alone document. For example, an HTML template would + provide the needed header and body tags so that the whole output is a + valid HTML file. If no template is specified, the output will be just + the converted text. -When resolving the template file, the given template name is used first. -If such a file is not found, the converter extension (the same as the -converter name) is appended. If the file still cannot be found, the -templates name is interpreted as a template name that is provided by -kramdown (without the converter extension). If the file is still not -found, the template name is checked if it starts with 'string://' and if -it does, this prefix is removed and the rest is used as template -content. + When resolving the template file, the given template name is used first. + If such a file is not found, the converter extension (the same as the + converter name) is appended. If the file still cannot be found, the + templates name is interpreted as a template name that is provided by + kramdown (without the converter extension). If the file is still not + found, the template name is checked if it starts with 'string://' and if + it does, this prefix is removed and the rest is used as template + content. -kramdown provides a default template named 'document' for each converter. + kramdown provides a default template named 'document' for each converter. -Default: '' -Used by: all converters -EOF + Default: '' + Used by: all converters + EOF - define(:auto_ids, Boolean, true, <<EOF) -Use automatic header ID generation + define(:auto_ids, Boolean, true, <<~EOF) + Use automatic header ID generation -If this option is `true`, ID values for all headers are automatically -generated if no ID is explicitly specified. + If this option is `true`, ID values for all headers are automatically + generated if no ID is explicitly specified. -Default: true -Used by: HTML/Latex converter -EOF + Default: true + Used by: HTML/Latex converter + EOF - define(:auto_id_stripping, Boolean, false, <<EOF) -Strip all formatting from header text for automatic ID generation + define(:auto_id_stripping, Boolean, false, <<~EOF) + Strip all formatting from header text for automatic ID generation -If this option is `true`, only the text elements of a header are used -for generating the ID later (in contrast to just using the raw header -text line). + If this option is `true`, only the text elements of a header are used + for generating the ID later (in contrast to just using the raw header + text line). -This option will be removed in version 2.0 because this will be the -default then. + This option will be removed in version 2.0 because this will be the + default then. -Default: false -Used by: kramdown parser -EOF + Default: false + Used by: kramdown parser + EOF - define(:auto_id_prefix, String, '', <<EOF) -Prefix used for automatically generated header IDs + define(:auto_id_prefix, String, '', <<~EOF) + Prefix used for automatically generated header IDs -This option can be used to set a prefix for the automatically generated -header IDs so that there is no conflict when rendering multiple kramdown -documents into one output file separately. The prefix should only -contain characters that are valid in an ID! + This option can be used to set a prefix for the automatically generated + header IDs so that there is no conflict when rendering multiple kramdown + documents into one output file separately. The prefix should only + contain characters that are valid in an ID! -Default: '' -Used by: HTML/Latex converter -EOF + Default: '' + Used by: HTML/Latex converter + EOF - define(:transliterated_header_ids, Boolean, false, <<EOF) -Transliterate the header text before generating the ID + define(:transliterated_header_ids, Boolean, false, <<~EOF) + Transliterate the header text before generating the ID -Only ASCII characters are used in headers IDs. This is not good for -languages with many non-ASCII characters. By enabling this option -the header text is transliterated to ASCII as good as possible so that -the resulting header ID is more useful. + Only ASCII characters are used in headers IDs. This is not good for + languages with many non-ASCII characters. By enabling this option + the header text is transliterated to ASCII as good as possible so that + the resulting header ID is more useful. -The stringex library needs to be installed for this feature to work! + The stringex library needs to be installed for this feature to work! -Default: false -Used by: HTML/Latex converter -EOF + Default: false + Used by: HTML/Latex converter + EOF - define(:parse_block_html, Boolean, false, <<EOF) -Process kramdown syntax in block HTML tags + define(:parse_block_html, Boolean, false, <<~EOF) + Process kramdown syntax in block HTML tags -If this option is `true`, the kramdown parser processes the content of -block HTML tags as text containing block-level elements. Since this is -not wanted normally, the default is `false`. It is normally better to -selectively enable kramdown processing via the markdown attribute. + If this option is `true`, the kramdown parser processes the content of + block HTML tags as text containing block-level elements. Since this is + not wanted normally, the default is `false`. It is normally better to + selectively enable kramdown processing via the markdown attribute. -Default: false -Used by: kramdown parser -EOF + Default: false + Used by: kramdown parser + EOF - define(:parse_span_html, Boolean, true, <<EOF) -Process kramdown syntax in span HTML tags + define(:parse_span_html, Boolean, true, <<~EOF) + Process kramdown syntax in span HTML tags -If this option is `true`, the kramdown parser processes the content of -span HTML tags as text containing span-level elements. + If this option is `true`, the kramdown parser processes the content of + span HTML tags as text containing span-level elements. -Default: true -Used by: kramdown parser -EOF + Default: true + Used by: kramdown parser + EOF - define(:html_to_native, Boolean, false, <<EOF) -Convert HTML elements to native elements + define(:html_to_native, Boolean, false, <<~EOF) + Convert HTML elements to native elements -If this option is `true`, the parser converts HTML elements to native -elements. For example, when parsing `<em>hallo</em>` the emphasis tag -would normally be converted to an `:html` element with tag type `:em`. -If `html_to_native` is `true`, then the emphasis would be converted to a -native `:em` element. + If this option is `true`, the parser converts HTML elements to native + elements. For example, when parsing `<em>hallo</em>` the emphasis tag + would normally be converted to an `:html` element with tag type `:em`. + If `html_to_native` is `true`, then the emphasis would be converted to a + native `:em` element. -This is useful for converters that cannot deal with HTML elements. + This is useful for converters that cannot deal with HTML elements. -Default: false -Used by: kramdown parser -EOF + Default: false + Used by: kramdown parser + EOF - define(:link_defs, Object, {}, <<EOF) do |val| -Pre-defines link definitions + define(:link_defs, Object, {}, <<~EOF) do |val| + Pre-defines link definitions -This option can be used to pre-define link definitions. The value needs -to be a Hash where the keys are the link identifiers and the values are -two element Arrays with the link URL and the link title. + This option can be used to pre-define link definitions. The value needs + to be a Hash where the keys are the link identifiers and the values are + two element Arrays with the link URL and the link title. -If the value is a String, it has to contain a valid YAML hash and the -hash has to follow the above guidelines. + If the value is a String, it has to contain a valid YAML hash and the + hash has to follow the above guidelines. -Default: {} -Used by: kramdown parser -EOF + Default: {} + Used by: kramdown parser + EOF val = simple_hash_validator(val, :link_defs) - val.each do |k,v| - if !(Array === v) || v.size > 2 || v.size < 1 + val.each do |_k, v| + if !(Array === v) || v.size > 2 || v.empty? raise Kramdown::Error, "Invalid structure for hash value of option #{name}" end v << nil if v.size == 1 end val end - define(:footnote_nr, Integer, 1, <<EOF) -The number of the first footnote + define(:footnote_nr, Integer, 1, <<~EOF) + The number of the first footnote -This option can be used to specify the number that is used for the first -footnote. + This option can be used to specify the number that is used for the first + footnote. -Default: 1 -Used by: HTML converter -EOF + Default: 1 + Used by: HTML converter + EOF - define(:enable_coderay, Boolean, true, <<EOF) -Use coderay for syntax highlighting + define(:entity_output, Symbol, :as_char, <<~EOF) + Defines how entities are output -If this option is `true`, coderay is used by the HTML converter for -syntax highlighting the content of code spans and code blocks. + The possible values are :as_input (entities are output in the same + form as found in the input), :numeric (entities are output in numeric + form), :symbolic (entities are output in symbolic form if possible) or + :as_char (entities are output as characters if possible, only available + on Ruby 1.9). -Default: true -Used by: HTML converter -EOF + Default: :as_char + Used by: HTML converter, kramdown converter + EOF - define(:coderay_wrap, Symbol, :div, <<EOF) -Defines how the highlighted code should be wrapped + define(:toc_levels, Object, (1..6).to_a, <<~EOF) do |val| + Defines the levels that are used for the table of contents -The possible values are :span, :div or nil. + The individual levels can be specified by separating them with commas + (e.g. 1,2,3) or by using the range syntax (e.g. 1..3). Only the + specified levels are used for the table of contents. -Default: :div -Used by: HTML converter -EOF - - define(:coderay_line_numbers, Symbol, :inline, <<EOF) -Defines how and if line numbers should be shown - -The possible values are :table, :inline or nil. If this option is -nil, no line numbers are shown. - -Default: :inline -Used by: HTML converter -EOF - - define(:coderay_line_number_start, Integer, 1, <<EOF) -The start value for the line numbers - -Default: 1 -Used by: HTML converter -EOF - - define(:coderay_tab_width, Integer, 8, <<EOF) -The tab width used in highlighted code - -Used by: HTML converter -EOF - - define(:coderay_bold_every, Object, 10, <<EOF) do |val| -Defines how often a line number should be made bold - -Can either be an integer or false (to turn off bold line numbers -completely). - -Default: 10 -Used by: HTML converter -EOF - if val == false || val.to_s == 'false' - false - else - Integer(val.to_s) rescue raise Kramdown::Error, "Invalid value for option 'coderay_bold_every'" - end -end - - define(:coderay_css, Symbol, :style, <<EOF) -Defines how the highlighted code gets styled - -Possible values are :class (CSS classes are applied to the code -elements, one must supply the needed CSS file) or :style (default CSS -styles are directly applied to the code elements). - -Default: style -Used by: HTML converter -EOF - - define(:coderay_default_lang, Symbol, nil, <<EOF) -Sets the default language for highlighting code blocks - -If no language is set for a code block, the default language is used -instead. The value has to be one of the languages supported by coderay -or nil if no default language should be used. - -Default: nil -Used by: HTML converter -EOF - - define(:entity_output, Symbol, :as_char, <<EOF) -Defines how entities are output - -The possible values are :as_input (entities are output in the same -form as found in the input), :numeric (entities are output in numeric -form), :symbolic (entities are output in symbolic form if possible) or -:as_char (entities are output as characters if possible, only available -on Ruby 1.9). - -Default: :as_char -Used by: HTML converter, kramdown converter -EOF - - define(:toc_levels, Object, (1..6).to_a, <<EOF) do |val| -Defines the levels that are used for the table of contents - -The individual levels can be specified by separating them with commas -(e.g. 1,2,3) or by using the range syntax (e.g. 1..3). Only the -specified levels are used for the table of contents. - -Default: 1..6 -Used by: HTML/Latex converter -EOF + Default: 1..6 + Used by: HTML/Latex converter + EOF case val when String if val =~ /^(\d)\.\.(\d)$/ val = Range.new($1.to_i, $2.to_i).to_a elsif val =~ /^\d(?:,\d)*$/ - val = val.split(/,/).map {|s| s.to_i}.uniq + val = val.split(/,/).map(&:to_i).uniq else raise Kramdown::Error, "Invalid syntax for option toc_levels" end when Array, Range - val = val.map {|s| s.to_i}.uniq + val = val.map(&:to_i).uniq else raise Kramdown::Error, "Invalid type #{val.class} for option toc_levels" end - if val.any? {|i| !(1..6).include?(i)} + if val.any? {|i| !(1..6).cover?(i) } raise Kramdown::Error, "Level numbers for option toc_levels have to be integers from 1 to 6" end val end - define(:line_width, Integer, 72, <<EOF) -Defines the line width to be used when outputting a document + define(:line_width, Integer, 72, <<~EOF) + Defines the line width to be used when outputting a document -Default: 72 -Used by: kramdown converter -EOF + Default: 72 + Used by: kramdown converter + EOF - define(:latex_headers, Object, %w{section subsection subsubsection paragraph subparagraph subparagraph}, <<EOF) do |val| -Defines the LaTeX commands for different header levels + define(:latex_headers, Object, %w[section subsection subsubsection paragraph subparagraph subparagraph], <<~EOF) do |val| + Defines the LaTeX commands for different header levels -The commands for the header levels one to six can be specified by -separating them with commas. + The commands for the header levels one to six can be specified by + separating them with commas. -Default: section,subsection,subsubsection,paragraph,subparagraph,subparagraph -Used by: Latex converter -EOF + Default: section,subsection,subsubsection,paragraph,subparagraph,subparagraph + Used by: Latex converter + EOF simple_array_validator(val, :latex_headers, 6) end - define(:smart_quotes, Object, %w{lsquo rsquo ldquo rdquo}, <<EOF) do |val| -Defines the HTML entity names or code points for smart quote output + define(:smart_quotes, Object, %w[lsquo rsquo ldquo rdquo], <<~EOF) do |val| + Defines the HTML entity names or code points for smart quote output -The entities identified by entity name or code point that should be -used for, in order, a left single quote, a right single quote, a left -double and a right double quote are specified by separating them with -commas. + The entities identified by entity name or code point that should be + used for, in order, a left single quote, a right single quote, a left + double and a right double quote are specified by separating them with + commas. -Default: lsquo,rsquo,ldquo,rdquo -Used by: HTML/Latex converter -EOF + Default: lsquo,rsquo,ldquo,rdquo + Used by: HTML/Latex converter + EOF val = simple_array_validator(val, :smart_quotes, 4) - val.map! {|v| Integer(v) rescue v} + val.map! {|v| Integer(v) rescue v } val end - define(:typographic_symbols, Object, {}, <<EOF) do |val| -Defines a mapping from typographical symbol to output characters + define(:typographic_symbols, Object, {}, <<~EOF) do |val| + Defines a mapping from typographical symbol to output characters -Typographical symbols are normally output using their equivalent Unicode -codepoint. However, sometimes one wants to change the output, mostly to -fallback to a sequence of ASCII characters. + Typographical symbols are normally output using their equivalent Unicode + codepoint. However, sometimes one wants to change the output, mostly to + fallback to a sequence of ASCII characters. -This option allows this by specifying a mapping from typographical -symbol to its output string. For example, the mapping {hellip: ...} would -output the standard ASCII representation of an ellipsis. + This option allows this by specifying a mapping from typographical + symbol to its output string. For example, the mapping {hellip: ...} would + output the standard ASCII representation of an ellipsis. -The available typographical symbol names are: + The available typographical symbol names are: -* hellip: ellipsis -* mdash: em-dash -* ndash: en-dash -* laquo: left guillemet -* raquo: right guillemet -* laquo_space: left guillemet followed by a space -* raquo_space: right guillemet preceeded by a space + * hellip: ellipsis + * mdash: em-dash + * ndash: en-dash + * laquo: left guillemet + * raquo: right guillemet + * laquo_space: left guillemet followed by a space + * raquo_space: right guillemet preceeded by a space -Default: {} -Used by: HTML/Latex converter -EOF + Default: {} + Used by: HTML/Latex converter + EOF val = simple_hash_validator(val, :typographic_symbols) val.keys.each do |k| val[k.kind_of?(String) ? str_to_sym(k) : k] = val.delete(k).to_s end val end - define(:remove_block_html_tags, Boolean, true, <<EOF) -Remove block HTML tags + define(:remove_block_html_tags, Boolean, true, <<~EOF) + Remove block HTML tags -If this option is `true`, the RemoveHtmlTags converter removes -block HTML tags. + If this option is `true`, the RemoveHtmlTags converter removes + block HTML tags. -Default: true -Used by: RemoveHtmlTags converter -EOF + Default: true + Used by: RemoveHtmlTags converter + EOF - define(:remove_span_html_tags, Boolean, false, <<EOF) -Remove span HTML tags + define(:remove_span_html_tags, Boolean, false, <<~EOF) + Remove span HTML tags -If this option is `true`, the RemoveHtmlTags converter removes -span HTML tags. + If this option is `true`, the RemoveHtmlTags converter removes + span HTML tags. -Default: false -Used by: RemoveHtmlTags converter -EOF + Default: false + Used by: RemoveHtmlTags converter + EOF - define(:header_offset, Integer, 0, <<EOF) -Sets the output offset for headers + define(:header_offset, Integer, 0, <<~EOF) + Sets the output offset for headers -If this option is c (may also be negative) then a header with level n -will be output as a header with level c+n. If c+n is lower than 1, -level 1 will be used. If c+n is greater than 6, level 6 will be used. + If this option is c (may also be negative) then a header with level n + will be output as a header with level c+n. If c+n is lower than 1, + level 1 will be used. If c+n is greater than 6, level 6 will be used. -Default: 0 -Used by: HTML converter, Kramdown converter, Latex converter -EOF + Default: 0 + Used by: HTML converter, Kramdown converter, Latex converter + EOF - define(:hard_wrap, Boolean, true, <<EOF) -Interprets line breaks literally + define(:syntax_highlighter, Symbol, :rouge, <<~EOF) + Set the syntax highlighter -Insert HTML `<br />` tags inside paragraphs where the original Markdown -document had newlines (by default, Markdown ignores these newlines). + Specifies the syntax highlighter that should be used for highlighting + code blocks and spans. If this option is set to +nil+, no syntax + highlighting is done. -Default: true -Used by: GFM parser -EOF + Options for the syntax highlighter can be set with the + syntax_highlighter_opts configuration option. - define(:syntax_highlighter, Symbol, :coderay, <<EOF) -Set the syntax highlighter + Default: rouge + Used by: HTML/Latex converter + EOF -Specifies the syntax highlighter that should be used for highlighting -code blocks and spans. If this option is set to +nil+, no syntax -highlighting is done. + define(:syntax_highlighter_opts, Object, {}, <<~EOF) do |val| + Set the syntax highlighter options -Options for the syntax highlighter can be set with the -syntax_highlighter_opts configuration option. + Specifies options for the syntax highlighter set via the + syntax_highlighter configuration option. -Default: coderay -Used by: HTML/Latex converter -EOF + The value needs to be a hash with key-value pairs that are understood by + the used syntax highlighter. - define(:syntax_highlighter_opts, Object, {}, <<EOF) do |val| -Set the syntax highlighter options - -Specifies options for the syntax highlighter set via the -syntax_highlighter configuration option. - -The value needs to be a hash with key-value pairs that are understood by -the used syntax highlighter. - -Default: {} -Used by: HTML/Latex converter -EOF + Default: {} + Used by: HTML/Latex converter + EOF val = simple_hash_validator(val, :syntax_highlighter_opts) val.keys.each do |k| val[k.kind_of?(String) ? str_to_sym(k) : k] = val.delete(k) end val end - define(:math_engine, Symbol, :mathjax, <<EOF) -Set the math engine + define(:math_engine, Symbol, :mathjax, <<~EOF) + Set the math engine -Specifies the math engine that should be used for converting math -blocks/spans. If this option is set to +nil+, no math engine is used and -the math blocks/spans are output as is. + Specifies the math engine that should be used for converting math + blocks/spans. If this option is set to +nil+, no math engine is used and + the math blocks/spans are output as is. -Options for the selected math engine can be set with the -math_engine_opts configuration option. + Options for the selected math engine can be set with the + math_engine_opts configuration option. -Default: mathjax -Used by: HTML converter -EOF + Default: mathjax + Used by: HTML converter + EOF - define(:math_engine_opts, Object, {}, <<EOF) do |val| -Set the math engine options + define(:math_engine_opts, Object, {}, <<~EOF) do |val| + Set the math engine options -Specifies options for the math engine set via the math_engine -configuration option. + Specifies options for the math engine set via the math_engine + configuration option. -The value needs to be a hash with key-value pairs that are understood by -the used math engine. + The value needs to be a hash with key-value pairs that are understood by + the used math engine. -Default: {} -Used by: HTML converter -EOF + Default: {} + Used by: HTML converter + EOF val = simple_hash_validator(val, :math_engine_opts) val.keys.each do |k| val[k.kind_of?(String) ? str_to_sym(k) : k] = val.delete(k) end val end - define(:footnote_backlink, String, '&#8617;', <<EOF) -Defines the text that should be used for the footnote backlinks + define(:footnote_backlink, String, '&#8617;', <<~EOF) + Defines the text that should be used for the footnote backlinks -The footnote backlink is just text, so any special HTML characters will -be escaped. + The footnote backlink is just text, so any special HTML characters will + be escaped. -If the footnote backlint text is an empty string, no footnote backlinks -will be generated. + If the footnote backlint text is an empty string, no footnote backlinks + will be generated. -Default: '&8617;' -Used by: HTML converter -EOF + Default: '&8617;' + Used by: HTML converter + EOF - define(:footnote_backlink_inline, Boolean, false, <<EOF) -Specifies whether the footnote backlink should always be inline + define(:footnote_backlink_inline, Boolean, false, <<~EOF) + Specifies whether the footnote backlink should always be inline -With the default of false the footnote backlink is placed at the end of -the last paragraph if there is one, or an extra paragraph with only the -footnote backlink is created. + With the default of false the footnote backlink is placed at the end of + the last paragraph if there is one, or an extra paragraph with only the + footnote backlink is created. -Setting this option to true tries to place the footnote backlink in the -last, possibly nested paragraph or header. If this fails (e.g. in the -case of a table), an extra paragraph with only the footnote backlink is -created. + Setting this option to true tries to place the footnote backlink in the + last, possibly nested paragraph or header. If this fails (e.g. in the + case of a table), an extra paragraph with only the footnote backlink is + created. -Default: false -Used by: HTML converter -EOF - - define(:gfm_quirks, Object, [:paragraph_end], <<EOF) do |val| -Enables a set of GFM specific quirks - -The way how GFM is transformed on Github often differs from the way -kramdown does things. Many of these differences are negligible but -others are not. - -This option allows one to enable/disable certain GFM quirks, i.e. ways -in which GFM parsing differs from kramdown parsing. - -The value has to be a list of quirk names that should be enabled, -separated by commas. Possible names are: - -* paragraph_end - - Disables the kramdown restriction that at least one blank line has to - be used after a paragraph before a new block element can be started. - - Note that if this quirk is used, lazy line wrapping does not fully - work anymore! - -* no_auto_typographic - - Disables automatic conversion of some characters into their - corresponding typographic symbols (like `--` to em-dash etc). - This helps to achieve results closer to what GitHub Flavored - Markdown produces. - -Default: paragraph_end -Used by: GFM parser -EOF - val = simple_array_validator(val, :gfm_quirks) - val.map! {|v| str_to_sym(v.to_s)} - val - end + Default: false + Used by: HTML converter + EOF end end