markup_parser 0.0.1 → 0.0.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.
data/.gitignore CHANGED
@@ -3,6 +3,7 @@
3
3
  .bundle
4
4
  .config
5
5
  .yardoc
6
+ .rvmrc
6
7
  Gemfile.lock
7
8
  InstalledFiles
8
9
  _yardoc
data/Rakefile CHANGED
@@ -1,2 +1,11 @@
1
1
  #!/usr/bin/env rake
2
2
  require "bundler/gem_tasks"
3
+ require 'rake/testtask'
4
+
5
+ Rake::TestTask.new do |t|
6
+ t.pattern = "specs/**/*_spec.rb"
7
+ t.verbose = true
8
+ t.libs << "specs"
9
+ end
10
+
11
+ task default: :test
@@ -1,6 +1,7 @@
1
+ require 'nokogiri'
2
+
1
3
  module MarkupParser
2
4
  class Default
3
- puts "\n**************\nMarkupParser::Default loaded\n**************\n"
4
5
  attr_reader :original_text, :nokoguri_parser, :html_text, :lexer_proc
5
6
 
6
7
  def initialize(text='', &lexer)
@@ -14,12 +15,13 @@ module MarkupParser
14
15
  begin
15
16
  nokoguri_parser.to_xhtml(:save_with => Nokogiri::XML::Node::SaveOptions::AS_XHTML)
16
17
  rescue => e
17
- puts "
18
- \n******************
18
+ puts <<-ERROR
19
+ ******************
19
20
  Error in #{self.class}#to_html.
20
21
  Reason: #{e.message}.
21
22
  Putting error message into the output.
22
- ******************\n"
23
+ ******************
24
+ ERROR
23
25
  return "<p class='parse_error'>Error in parsing in #{self.class}: #{e.message}.</p>"
24
26
  end
25
27
  end
@@ -28,7 +30,7 @@ module MarkupParser
28
30
  # Instantiates a Nokoguri::HTML fragment parser
29
31
  def nokoguri_parser
30
32
  begin
31
- @nokoguri_parser ||= Nokogiri::HTML::DocumentFragment.parse(html_text)
33
+ @nokoguri_parser ||= ::Nokogiri::HTML::DocumentFragment.parse(html_text)
32
34
  rescue => e
33
35
  puts "
34
36
  \n******************
@@ -36,7 +38,7 @@ module MarkupParser
36
38
  Reason: #{e.message}.
37
39
  Putting error message into the output.
38
40
  ******************\n"
39
- @nokoguri_parser = Nokogiri::HTML::DocumentFragment.parse("<p class='parse_error'>Error in parsing in #{self.class}: #{e.message}.</p>")
41
+ @nokoguri_parser = ::Nokogiri::HTML::DocumentFragment.parse("<p class='parse_error'>Error in parsing in #{self.class}: #{e.message}.</p>")
40
42
  end
41
43
  end
42
44
 
@@ -1,6 +1,5 @@
1
1
  module MarkupParser
2
2
  class Html < MarkupParser::Default
3
- puts "\n**************\nMarkupParser::Html loaded\n**************\n"
4
3
 
5
4
  private
6
5
 
@@ -1,14 +1,10 @@
1
+ require 'redcarpet'
2
+ require "#{File.dirname(__FILE__)}/markdown/string_extensions"
3
+ require "#{File.dirname(__FILE__)}/markdown/uv_html_render"
4
+ require "#{File.dirname(__FILE__)}/markdown/class_methods"
1
5
  module MarkupParser
2
6
  class Markdown < MarkupParser::Default
3
- puts "\n**************\nMarkupParser::Markdown loaded\n**************\n"
4
7
 
5
- # HTML renderer with Ultraviolet Code Lexer
6
- class UvHtmlRender < Redcarpet::Render::HTML
7
- puts "\n**************\nMarkupParser::Markdown::UvHtmlRender loaded\n**************\n"
8
- def block_code(code, language)
9
- Uv.parse(code, "xhtml", language, false, "railscasts")
10
- end
11
- end
12
8
 
13
9
 
14
10
  # Only loads the Markdown parser once
@@ -36,11 +32,6 @@ module MarkupParser
36
32
  }
37
33
 
38
34
 
39
-
40
-
41
-
42
-
43
-
44
35
  # Returns the fully stylized HTML for this markdown text
45
36
  def html_text
46
37
  @html_text ||= parser.render(@original_text)
@@ -48,19 +39,17 @@ module MarkupParser
48
39
 
49
40
  # Sets the parser to include as code lexer
50
41
  def stylize_code_blocks
51
- @parser = Markdown.html_parser_with_code_lexer
42
+ @parser = MarkupParser::Markdown.html_parser_with_code_lexer
52
43
  self
53
44
  end
54
45
 
55
46
 
56
-
57
-
58
47
  private
59
48
 
60
49
  # Instantiates the parser for this Markdown instance.
61
50
  # Defaults to @@html_parser
62
51
  def parser
63
- @parser ||= Markdown.html_parser
52
+ @parser ||= MarkupParser::Markdown.html_parser
64
53
  end
65
54
 
66
55
  # Hacks parse to return this instence's parser for a later call
@@ -77,40 +66,4 @@ module MarkupParser
77
66
  end
78
67
 
79
68
  end
80
- end
81
-
82
-
83
-
84
-
85
- # Adds classes to String class...
86
- class String
87
-
88
- # Corrects the gh code block syntax mistake where one would write '~~~ .ruby'
89
- # and the correct code should be '~~~ruby'
90
- def correct_gh_code_syntax!
91
- self.gsub!(/~~~\s\.([a-zA-Z]*)/, '~~~\1')
92
- end
93
-
94
- # Corrects the ol list elements: which only except the syntax: '1. ...'.
95
- # Corrected syntaxes: '1)'
96
- def correct_ol_list_parenth!
97
- self.gsub!(/(\s*)(\d)\)/,'\1\2.')
98
- end
99
-
100
- # Converts tabs (\t) to 2 spaces
101
- def convert_tabs_to_spaces!
102
- self.gsub!(/\t/, " ")
103
- end
104
-
105
- # Standardize line endings
106
- def standardize_newlines!
107
- self.gsub!("\r\n", "\n")
108
- self.gsub!("\r", "\n")
109
- end
110
-
111
- # Corrects the newlines by stripping the leading whitespace.
112
- # NOTE: this is a hack to workaround the strange Gollum editor indentation behavior
113
- def sub_newlines!
114
- self.gsub!(/([\r\n|\n])[\ ]*(.)/,'\1\2')
115
- end
116
69
  end
@@ -1,7 +1,7 @@
1
1
  require 'rdoc/markup/to_html'
2
+
2
3
  module MarkupParser
3
4
  class Rdoc < MarkupParser::Default
4
- puts "\n**************\nMarkupParser::Rdoc loaded\n**************\n"
5
5
 
6
6
 
7
7
 
@@ -1,3 +1,3 @@
1
1
  module MarkupParser
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
data/lib/markup_parser.rb CHANGED
@@ -3,9 +3,52 @@ require "markup_parser/version"
3
3
  module MarkupParser
4
4
  puts "\n**************\nMarkupParser loaded\n**************\n"
5
5
 
6
- self.parser_path = File.join(File.dirname(__FILE__), 'markup_parser')
6
+ PARSER_PATH = File.join(File.dirname(__FILE__), 'markup_parser')
7
+
8
+
9
+ def self.formats
10
+ parser_files.collect {|f| File.basename(f, '.rb') } - ["version"]
11
+ end
12
+
13
+ def self.format_parsers
14
+ Hash[*formats.zip(parsers).flatten]
15
+ end
7
16
 
8
17
  def self.parsers
9
- @parsers ||= Dir.glob( File.join(@parser_path, '*.rb') ).collect {|f| File.basename(f, '.rb') } - ["default"]
18
+ formats.collect {|f| constantize(camelize("markup_parser/#{f}")) }
10
19
  end
20
+
21
+ def self.reload_parsers
22
+ parser_files.each { |parser_file| require parser_file }
23
+ end
24
+
25
+
26
+
27
+ private
28
+
29
+ def self.parser_files
30
+ Dir.glob( File.join(PARSER_PATH, '*.rb') )
31
+ end
32
+
33
+ def self.constantize(camel_cased_word)
34
+ names = camel_cased_word.split('::')
35
+ names.shift if names.empty? || names.first.empty?
36
+
37
+ constant = Object
38
+ names.each do |name|
39
+ constant = constant.const_defined?(name) ? constant.const_get(name) : constant.const_missing(name)
40
+ end
41
+ constant
42
+ end
43
+
44
+ def self.camelize(lower_case_and_underscored_word, first_letter_in_uppercase = true)
45
+ if first_letter_in_uppercase
46
+ lower_case_and_underscored_word.to_s.gsub(/\/(.?)/) { "::#{$1.upcase}" }.gsub(/(?:^|_)(.)/) { $1.upcase }
47
+ else
48
+ lower_case_and_underscored_word.to_s[0].chr.downcase + camelize(lower_case_and_underscored_word)[1..-1]
49
+ end
50
+ end
51
+
11
52
  end
53
+
54
+ MarkupParser.reload_parsers
@@ -15,5 +15,11 @@ Gem::Specification.new do |gem|
15
15
  gem.require_paths = ["lib"]
16
16
  gem.version = MarkupParser::VERSION
17
17
 
18
+ gem.add_dependency 'redcarpet', '>= 2.0.0b5'
19
+ gem.add_dependency 'nokogiri'
18
20
  gem.add_dependency "uv"
21
+ gem.add_dependency 'rdoc'
22
+
23
+ gem.add_development_dependency 'rake'
24
+ gem.add_development_dependency 'minitest'
19
25
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: markup_parser
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,33 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2011-09-28 00:00:00.000000000 Z
12
+ date: 2011-09-29 00:00:00.000000000 Z
13
13
  dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: redcarpet
16
+ requirement: &70241141367760 !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: 2.0.0b5
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: *70241141367760
25
+ - !ruby/object:Gem::Dependency
26
+ name: nokogiri
27
+ requirement: &70241141367300 !ruby/object:Gem::Requirement
28
+ none: false
29
+ requirements:
30
+ - - ! '>='
31
+ - !ruby/object:Gem::Version
32
+ version: '0'
33
+ type: :runtime
34
+ prerelease: false
35
+ version_requirements: *70241141367300
14
36
  - !ruby/object:Gem::Dependency
15
37
  name: uv
16
- requirement: &70102402385260 !ruby/object:Gem::Requirement
38
+ requirement: &70241141366840 !ruby/object:Gem::Requirement
17
39
  none: false
18
40
  requirements:
19
41
  - - ! '>='
@@ -21,7 +43,40 @@ dependencies:
21
43
  version: '0'
22
44
  type: :runtime
23
45
  prerelease: false
24
- version_requirements: *70102402385260
46
+ version_requirements: *70241141366840
47
+ - !ruby/object:Gem::Dependency
48
+ name: rdoc
49
+ requirement: &70241141366300 !ruby/object:Gem::Requirement
50
+ none: false
51
+ requirements:
52
+ - - ! '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ type: :runtime
56
+ prerelease: false
57
+ version_requirements: *70241141366300
58
+ - !ruby/object:Gem::Dependency
59
+ name: rake
60
+ requirement: &70241141365600 !ruby/object:Gem::Requirement
61
+ none: false
62
+ requirements:
63
+ - - ! '>='
64
+ - !ruby/object:Gem::Version
65
+ version: '0'
66
+ type: :development
67
+ prerelease: false
68
+ version_requirements: *70241141365600
69
+ - !ruby/object:Gem::Dependency
70
+ name: minitest
71
+ requirement: &70241141364920 !ruby/object:Gem::Requirement
72
+ none: false
73
+ requirements:
74
+ - - ! '>='
75
+ - !ruby/object:Gem::Version
76
+ version: '0'
77
+ type: :development
78
+ prerelease: false
79
+ version_requirements: *70241141364920
25
80
  description: ! 'Standardized markup parsers to use a single format: an object. Instantiate
26
81
  a specific markup class with text to output formated Html. Allows for easy code
27
82
  block highlighting using a Proc; defaults to Uv (ruby Ultraviolet)'