Class: Markdown::Config

Inherits:
Object
  • Object
show all
Defined in:
lib/markdown/config.rb

Constant Summary collapse

DEFAULTS =

note: make kramdown default engine

{ 'libs' => [
     'kramdown' ],
  'extnames' => [
     '.markdown',
     '.m',
     '.mark',
     '.mkdn',
     '.md',
     '.mdown',
     '.markdn',
     '.txt',
     '.text' ],  # todo: check - add .wiki??? ext
  'redcarpet' => {
      'extensions' => [
         'no_intra_emphasis',
         'fenced_code_blocks',
         'tables',
         'strikethrough' ] },   # todo/fix:  merge nested hash??
  'filters' => [
     'comments-percent-style' ] # optional (preprocessing) text filters: e.g. comments-percent-style, skip-end-directive, etc. (see textutils gem)
}

Instance Method Summary collapse

Constructor Details

#initializeConfig

Returns a new instance of Config.



45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
# File 'lib/markdown/config.rb', line 45

def initialize
  @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 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 settings from '#{props_work_file}'..."
    @props = @props_work = Props.load_file( props_work_file, @props )
  end

  @libs   = []
  
  require_markdown_libs()
end

Instance Method Details

#known_markdown_libsObject



78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
# File 'lib/markdown/config.rb', line 78

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

#markdown_extnamesObject



70
71
72
# File 'lib/markdown/config.rb', line 70

def markdown_extnames
  @props.fetch( 'extnames', nil )
end

#markdown_filtersObject



74
75
76
# File 'lib/markdown/config.rb', line 74

def markdown_filters
  @props.fetch( 'filters', nil )
end

#markdown_libObject



121
122
123
# File 'lib/markdown/config.rb', line 121

def markdown_lib
  @libs.first
end

#markdown_lib_defaultsObject



125
126
127
128
# File 'lib/markdown/config.rb', line 125

def markdown_lib_defaults
  ## todo: return props ? that acts like a hash?? (lets us support section lookup without deep merge???)
  opts = @props.fetch( @libs.first, {} )
end

#markdown_to_html_methodObject



130
131
132
133
134
# File 'lib/markdown/config.rb', line 130

def markdown_to_html_method
  lib  = @libs.first
  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

#require_markdown_libsObject



103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
# File 'lib/markdown/config.rb', line 103

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

  puts "  Found #{@libs.length} Markdown #{(@libs.length == 1) ? 'library' : 'libraries'}: #{@libs.join(', ')}"
end