lib/markdown/config.rb in markdown-1.2.0 vs lib/markdown/config.rb in markdown-1.2.1
- old
+ new
@@ -1,202 +1,202 @@
-# encoding: utf-8
-
-module Markdown
-
- class Config
-
-# note: only kramdown is listed as a dependency in gem specs (because it's Ruby only and, thus, easy to install)
-# if you want to use other markdown libs install the required/desired lib e.g.
-# use gem install rdiscount for rdiscount and so on
-#
-# also note for now the first present markdown library gets used
-# the search order is first come, first serve, that is: rdiscount, rpeg-markdown, maruku, bluecloth, kramdown (fallback, always present)
-
-
-DEFAULT_EXTNAMES = [
- '.markdown',
- '.m',
- '.mark',
- '.mkdn',
- '.md',
- '.mdown',
- '.markdn',
- '.txt',
- '.text' ] # todo: check - add .wiki??? ext
-
-DEFAULT_REDCARPET = {
- 'extensions' => [
- 'no_intra_emphasis',
- 'fenced_code_blocks',
- 'tables',
- 'strikethrough' ] }
-
-DEFAULT_FILTERS = [
- 'comments-percent-style' ] # optional (preprocessing) text filters: e.g. comments-percent-style, skip-end-directive, etc. (see textutils gem)
-
-
-DEFAULTS = { 'libs' => [ 'kramdown' ], # note: make kramdown default engine
- 'extnames' => DEFAULT_EXTNAMES,
- 'redcarpet' => DEFAULT_REDCARPET, # todo/fix: merge nested hash??
- 'filters' => DEFAULT_FILTERS
- }
-
-#
-# pandoc-ruby - how to include - gemfile cannot install binary ??
-# rpeg-markdown - build failure - still active, anyway?
-# rdiscount - # compilation error on heroku; sorry excluded for now
-
-DEFAULTS_SERVICE = { 'libs' => [
- 'kramdown', # note: make kramdown default engine
- 'maruku',
- 'bluecloth',
- 'redcarpet'
- ],
- 'extnames' => DEFAULT_EXTNAMES,
- 'redcarpet' => DEFAULT_REDCARPET
- }
-
- def load_props
- @props = @props_default = Props.new( DEFAULTS, 'DEFAULTS' )
-
- # check for user settings (markdown.yml) in home folder
-
- ## todo: use .markdown.yml?? or differnt name ??
- props_home_file = File.join( Env.home, 'markdown.yml' )
- if File.exists?( props_home_file )
- puts "Loading home settings from '#{props_home_file}'..."
- @props = @props_home = Props.load_file( props_home_file, @props )
- end
-
- # check for user settings (markdown.yml) in working folder
-
- props_work_file = File.join( '.', 'markdown.yml' )
- if File.exists?( props_work_file )
- puts "Loading work settings from '#{props_work_file}'..."
- @props = @props_work = Props.load_file( props_work_file, @props )
- end
- end
-
- def load_props_service
- puts "Loading service settings..."
- @props = @props_default = Props.new( DEFAULTS_SERVICE, 'DEFAULTS' )
- end
-
- def initialize
-
- # for an example see ./boot.rb
- if $MARKDOWN_USE_SERVICE_CONFIG == true
- load_props_service
- else
- load_props
- end
-
- @libs = []
-
- require_markdown_libs()
- end
-
- def dump # for debugging dump all settings
- puts "Markdown settings:"
- @props_default.dump if @props_default
- @props_home.dump if @props_home
- @props_work.dump if @props_work
-
- puts
- puts "Markdown libs:"
- puts " #{@libs.length} Markdown #{(@libs.length == 1) ? 'library' : 'libraries'} found: #{@libs.join(', ')}"
- end
-
- def markdown_extnames
- @props.fetch( 'extnames', nil )
- end
-
- def markdown_filters
- @props.fetch( 'filters', nil )
- end
-
- def known_markdown_libs
- # returns an array of known markdown engines e.g.
- # [ 'pandoc-ruby', 'rdiscount', 'rpeg-markdown', 'maruku', 'bluecloth', 'kramdown' ]
-
- ## todo: allow single lib para instead of libs
- ## todo: allow ENV setting markdown_[select]_lib=xxxx
-
- ## todo/fix: use lookup with config parent cascade
-
-
- ## lookup order
- ## 1) env variable MARKDOWN_LIB
- ## 2) lib property (single markdown engine)
- ## 3) libs property (first-come first-serve markdown engine list)
-
- user_lib = Env.markdown_lib || @props.fetch( 'lib', nil )
-
- if user_lib.nil?
- user_libs = @props.fetch( 'libs', nil )
- else
- [ user_lib ] # return as array (wrap single lib entry)
- end
- end
-
- def require_markdown_libs
- # check for available markdown libs/gems
- # try to require each lib and remove any not installed
-
- known_markdown_libs.each do |lib|
- begin
- require lib
- @libs << lib
- rescue LoadError => ex
- ## todo: use logger.debug instead of puts
- puts "Markdown library #{lib} not found. Use gem install #{lib} to install."
- end
- end
- end
-
- def markdown_lib=( lib )
-
- # fix/todo: check if @libs.first == lib => do nothing; return
-
- # check if value exists in libs array
- # if yes put it into first position
- # otherwise issue warning/error - better throw exception; engine not found
-
- # try to delete
- obj = @libs.delete( lib )
- if obj.nil? # nothing deleted; no obj found
- # try to require; will raise load error exception if not found; know what your're doing! no fallback; sorry; better fail fast
- require lib
- end
-
- # add it back; make it first entry
- @libs.unshift( lib )
- end
-
- def markdown_lib
- @libs.first
- end
-
- def markdown_libs
- @libs # NB: return all libs - should we return a clone?
- end
-
- def markdown_lib_defaults( lib=nil )
- lib = @libs.first if lib.nil?
- ## todo: return props ? that acts like a hash?? (lets us support section lookup without deep merge???)
- opts = @props.fetch( lib, {} )
- end
-
- def markdown_version_method( lib=nil )
- lib = @libs.first if lib.nil?
- method = "#{lib.downcase}_version" # default to <lib>_to_html if converter prop not found
- method.tr('-','_').to_sym
- end
-
- def markdown_to_html_method( lib=nil )
- lib = @libs.first if lib.nil?
- method = @props.fetch_from_section( lib, 'converter', "#{lib.downcase}_to_html" ) # default to <lib>_to_html if converter prop not found
- method.tr('-','_').to_sym
- end
-
- end # class Config
-end # module Markdown
+# encoding: utf-8
+
+module Markdown
+
+ class Config
+
+# note: only kramdown is listed as a dependency in gem specs (because it's Ruby only and, thus, easy to install)
+# if you want to use other markdown libs install the required/desired lib e.g.
+# use gem install rdiscount for rdiscount and so on
+#
+# also note for now the first present markdown library gets used
+# the search order is first come, first serve, that is: rdiscount, rpeg-markdown, maruku, bluecloth, kramdown (fallback, always present)
+
+
+DEFAULT_EXTNAMES = [
+ '.markdown',
+ '.m',
+ '.mark',
+ '.mkdn',
+ '.md',
+ '.mdown',
+ '.markdn',
+ '.txt',
+ '.text' ] # todo: check - add .wiki??? ext
+
+DEFAULT_REDCARPET = {
+ 'extensions' => [
+ 'no_intra_emphasis',
+ 'fenced_code_blocks',
+ 'tables',
+ 'strikethrough' ] }
+
+DEFAULT_FILTERS = [
+ 'comments-percent-style' ] # optional (preprocessing) text filters: e.g. comments-percent-style, skip-end-directive, etc. (see textutils gem)
+
+
+DEFAULTS = { 'libs' => [ 'kramdown' ], # note: make kramdown default engine
+ 'extnames' => DEFAULT_EXTNAMES,
+ 'redcarpet' => DEFAULT_REDCARPET, # todo/fix: merge nested hash??
+ 'filters' => DEFAULT_FILTERS
+ }
+
+#
+# pandoc-ruby - how to include - gemfile cannot install binary ??
+# rpeg-markdown - build failure - still active, anyway?
+# rdiscount - # compilation error on heroku; sorry excluded for now
+
+DEFAULTS_SERVICE = { 'libs' => [
+ 'kramdown', # note: make kramdown default engine
+ 'maruku',
+ 'bluecloth',
+ 'redcarpet'
+ ],
+ 'extnames' => DEFAULT_EXTNAMES,
+ 'redcarpet' => DEFAULT_REDCARPET
+ }
+
+ def load_props
+ @props = @props_default = Props.new( DEFAULTS, 'DEFAULTS' )
+
+ # check for user settings (markdown.yml) in home folder
+
+ ## todo: use .markdown.yml?? or differnt name ??
+ props_home_file = File.join( Env.home, 'markdown.yml' )
+ if File.exist?( props_home_file )
+ puts "Loading home settings from '#{props_home_file}'..."
+ @props = @props_home = Props.load_file( props_home_file, @props )
+ end
+
+ # check for user settings (markdown.yml) in working folder
+
+ props_work_file = File.join( '.', 'markdown.yml' )
+ if File.exist?( props_work_file )
+ puts "Loading work settings from '#{props_work_file}'..."
+ @props = @props_work = Props.load_file( props_work_file, @props )
+ end
+ end
+
+ def load_props_service
+ puts "Loading service settings..."
+ @props = @props_default = Props.new( DEFAULTS_SERVICE, 'DEFAULTS' )
+ end
+
+ def initialize
+
+ # for an example see ./boot.rb
+ if $MARKDOWN_USE_SERVICE_CONFIG == true
+ load_props_service
+ else
+ load_props
+ end
+
+ @libs = []
+
+ require_markdown_libs()
+ end
+
+ def dump # for debugging dump all settings
+ puts "Markdown settings:"
+ @props_default.dump if @props_default
+ @props_home.dump if @props_home
+ @props_work.dump if @props_work
+
+ puts
+ puts "Markdown libs:"
+ puts " #{@libs.length} Markdown #{(@libs.length == 1) ? 'library' : 'libraries'} found: #{@libs.join(', ')}"
+ end
+
+ def markdown_extnames
+ @props.fetch( 'extnames', nil )
+ end
+
+ def markdown_filters
+ @props.fetch( 'filters', nil )
+ end
+
+ def known_markdown_libs
+ # returns an array of known markdown engines e.g.
+ # [ 'pandoc-ruby', 'rdiscount', 'rpeg-markdown', 'maruku', 'bluecloth', 'kramdown' ]
+
+ ## todo: allow single lib para instead of libs
+ ## todo: allow ENV setting markdown_[select]_lib=xxxx
+
+ ## todo/fix: use lookup with config parent cascade
+
+
+ ## lookup order
+ ## 1) env variable MARKDOWN_LIB
+ ## 2) lib property (single markdown engine)
+ ## 3) libs property (first-come first-serve markdown engine list)
+
+ user_lib = Env.markdown_lib || @props.fetch( 'lib', nil )
+
+ if user_lib.nil?
+ user_libs = @props.fetch( 'libs', nil )
+ else
+ [ user_lib ] # return as array (wrap single lib entry)
+ end
+ end
+
+ def require_markdown_libs
+ # check for available markdown libs/gems
+ # try to require each lib and remove any not installed
+
+ known_markdown_libs.each do |lib|
+ begin
+ require lib
+ @libs << lib
+ rescue LoadError => ex
+ ## todo: use logger.debug instead of puts
+ puts "Markdown library #{lib} not found. Use gem install #{lib} to install."
+ end
+ end
+ end
+
+ def markdown_lib=( lib )
+
+ # fix/todo: check if @libs.first == lib => do nothing; return
+
+ # check if value exists in libs array
+ # if yes put it into first position
+ # otherwise issue warning/error - better throw exception; engine not found
+
+ # try to delete
+ obj = @libs.delete( lib )
+ if obj.nil? # nothing deleted; no obj found
+ # try to require; will raise load error exception if not found; know what your're doing! no fallback; sorry; better fail fast
+ require lib
+ end
+
+ # add it back; make it first entry
+ @libs.unshift( lib )
+ end
+
+ def markdown_lib
+ @libs.first
+ end
+
+ def markdown_libs
+ @libs # NB: return all libs - should we return a clone?
+ end
+
+ def markdown_lib_defaults( lib=nil )
+ lib = @libs.first if lib.nil?
+ ## todo: return props ? that acts like a hash?? (lets us support section lookup without deep merge???)
+ opts = @props.fetch( lib, {} )
+ end
+
+ def markdown_version_method( lib=nil )
+ lib = @libs.first if lib.nil?
+ method = "#{lib.downcase}_version" # default to <lib>_to_html if converter prop not found
+ method.tr('-','_').to_sym
+ end
+
+ def markdown_to_html_method( lib=nil )
+ lib = @libs.first if lib.nil?
+ method = @props.fetch_from_section( lib, 'converter', "#{lib.downcase}_to_html" ) # default to <lib>_to_html if converter prop not found
+ method.tr('-','_').to_sym
+ end
+
+ end # class Config
+end # module Markdown