madowu 0.0.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,109 @@
1
+ #! /usr/bin/env ruby
2
+ # coding: utf-8
3
+
4
+ #
5
+ #
6
+ #
7
+ class Madowu::HtmlGenerator
8
+ DEFAULT_MARKDOWN_COMMAND = 'markdown'
9
+
10
+ #
11
+ def initialize(md_file, markdown = DEFAULT_MARKDOWN_COMMAND)
12
+ @md_file = md_file
13
+ @markdown = markdown || DEFAULT_MARKDOWN_COMMAND
14
+ @markup_lines = `#{@markdown} #{@md_file}`.split("\n")
15
+ end
16
+
17
+ #unless ARGV.size == 1
18
+ # PRINTUSAGE;
19
+ # exit
20
+ #end
21
+
22
+ def self.get_title(md_file)
23
+ `grep -E '^#' #{md_file} | head -n 1`.sub(/^#\s*/, '').strip
24
+ end
25
+
26
+ # 'title' element in head is set as first /^#/ in md_file.
27
+ def generate(options = {})
28
+ embed_outline if options[:outline]
29
+
30
+ if options[:dirmap]
31
+ md_dir = Pathname.new(@md_file).dirname.expand_path
32
+ embed_sidebar( Madowu::DirectoryMapper.dirmap(md_dir) )
33
+ end
34
+
35
+ if options[:sidebar]
36
+ lines = File.open( options[:sidebar], "r").readlines
37
+ embed_sidebar(lines)
38
+ end
39
+
40
+ result = [
41
+ make_header(options[:css]),
42
+ @markup_lines,
43
+ "</div></div></body></html>",
44
+ ''
45
+ ].join("\n")
46
+ end
47
+
48
+ private
49
+
50
+ def embed_sidebar(lines)
51
+ lines.unshift "<div class='sidebar'>"
52
+ lines.push "</div>"
53
+ @markup_lines += lines
54
+ end
55
+
56
+ def embed_outline
57
+ new_lines = []
58
+ outlines = []
59
+ outlines << "<div class='header'>"
60
+ outlines << "<p>Outline:</p>"
61
+ outlines << "<ul class='outline'>"
62
+ counter = 0
63
+
64
+ @markup_lines.each do |line|
65
+ #pp line
66
+ new_line = line
67
+ if /^\<h(\d)\>(.*)\<\/h(\d)\>$/ =~ line
68
+ new_line = "<h#{$1}><a name='#{counter.to_s}'>#{$2}</a></h#{$3}>"
69
+ outlines << " <li><a href='\##{counter}'>#{' + ' * ($1.to_i-1)}#{$2}</a></ll>"
70
+ counter += 1
71
+ end
72
+ new_lines << new_line
73
+ end
74
+ outlines << "</ul>"
75
+ outlines << "</div>"
76
+
77
+ @markup_lines = outlines + new_lines
78
+ end
79
+
80
+ def make_header(css)
81
+ #title = `grep -E '^#' #{@md_file} | head -n 1`.sub(/^#\s*/, '').strip
82
+ title = self.class.get_title(@md_file)
83
+
84
+ results = []
85
+ results << "<!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 4.01 Transitional//EN'>"
86
+ results << "<HTML lang=\'ja\'>"
87
+ results << "<head>"
88
+ results << " <title>#{title}</title>"
89
+ results << " <meta http-equiv='Content-Type' content='text/html; charset=UTF-8'>"
90
+
91
+ if css
92
+ if File.exist? css
93
+ md_dir = Pathname.new(@md_file).dirname.expand_path
94
+ css_path = Pathname.new(css).expand_path
95
+ rel_path = css_path.relative_path_from(md_dir)
96
+ #pp md_dir
97
+ #pp css_path
98
+ #pp rel_path
99
+ results << " <link rel='stylesheet' type='text/css' href='#{rel_path}' media='all'>"
100
+ end
101
+ end
102
+ results << "</head>"
103
+ results << "<body>"
104
+ results << "<div class='main'>"
105
+ results << "<div class='body'>"
106
+ end
107
+
108
+ end
109
+
data/lib/madowu.rb ADDED
@@ -0,0 +1,5 @@
1
+ module Madowu; end
2
+
3
+ require 'madowu/htmlgenerator.rb'
4
+ require 'madowu/directorymapper.rb'
5
+ require 'pathname'
@@ -0,0 +1 @@
1
+ **/*.html
@@ -0,0 +1 @@
1
+ # head
@@ -0,0 +1 @@
1
+ # dir_index_md
@@ -0,0 +1 @@
1
+ # foo_md
@@ -0,0 +1,9 @@
1
+ <!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 4.01 Transitional//EN'>
2
+ <HTML lang='ja'>
3
+ <head>
4
+ <title>title_index.html</title>
5
+ <meta http-equiv='Content-Type' content='text/html; charset=UTF-8'>
6
+ <link rel='stylesheet' type='text/css' href='madowu.css' media='all'>
7
+ </head>
8
+ <body>
9
+ </body></html>
File without changes
File without changes
@@ -0,0 +1,17 @@
1
+ # head1
2
+ line1
3
+
4
+ ## head2
5
+ line2
6
+
7
+ ### head3
8
+ line3
9
+
10
+ #### head4
11
+ line4
12
+
13
+ ##### head5
14
+ line5
15
+
16
+ ###### head6
17
+ line6
@@ -0,0 +1,9 @@
1
+ <!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 4.01 Transitional//EN'>
2
+ <HTML lang='ja'>
3
+ <head>
4
+ <title>title_index.html</title>
5
+ <meta http-equiv='Content-Type' content='text/html; charset=UTF-8'>
6
+ <link rel='stylesheet' type='text/css' href='madowu.css' media='all'>
7
+ </head>
8
+ <body>
9
+ </body></html>
data/test/empty.md ADDED
File without changes
data/test/head.md ADDED
@@ -0,0 +1,17 @@
1
+ # head1
2
+ line1
3
+
4
+ ## head2
5
+ line2
6
+
7
+ ### head3
8
+ line3
9
+
10
+ #### head4
11
+ line4
12
+
13
+ ##### head5
14
+ line5
15
+
16
+ ###### head6
17
+ line6
data/test/head1.md ADDED
@@ -0,0 +1 @@
1
+ # head1
data/test/helper.rb ADDED
@@ -0,0 +1,33 @@
1
+ require 'simplecov'
2
+
3
+ module SimpleCov::Configuration
4
+ def clean_filters
5
+ @filters = []
6
+ end
7
+ end
8
+
9
+ SimpleCov.configure do
10
+ clean_filters
11
+ load_adapter 'test_frameworks'
12
+ end
13
+
14
+ ENV["COVERAGE"] && SimpleCov.start do
15
+ add_filter "/.rvm/"
16
+ end
17
+ require 'rubygems'
18
+ require 'bundler'
19
+ begin
20
+ Bundler.setup(:default, :development)
21
+ rescue Bundler::BundlerError => e
22
+ $stderr.puts e.message
23
+ $stderr.puts "Run `bundle install` to install missing gems"
24
+ exit e.status_code
25
+ end
26
+ require 'test/unit'
27
+
28
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
29
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
30
+ require 'madowu'
31
+
32
+ class Test::Unit::TestCase
33
+ end
File without changes
data/test/test.css ADDED
File without changes
@@ -0,0 +1,61 @@
1
+ #! /usr/bin/env ruby
2
+ # coding: utf-8
3
+
4
+ require "pp"
5
+ require "helper"
6
+ #require "test/unit"
7
+ #require "pkg/klass.rb"
8
+
9
+ class TC_Klass < Test::Unit::TestCase
10
+ #def setup
11
+ # @k = Klass.new
12
+ #end
13
+
14
+ def test_map
15
+ correct = []
16
+ correct << "<p>Parent directory:</p>"
17
+ correct << "<ul>"
18
+ correct << " <li> <a href='../'>../</a>"
19
+ correct << "</ul>"
20
+ correct << "<p>Current directory:</p>"
21
+ correct << "<ul>"
22
+ correct << " <li> <a href='dir/index.html'>dir/</a>(dir_index_md)"
23
+ correct << " <li> <a href='foo.html'>foo.html</a>(foo_md)"
24
+ correct << " <li> <a href='index.html'>index.html</a>(title_index.html)"
25
+ correct << "</ul>"
26
+ assert_equal(correct, Madowu::DirectoryMapper.dirmap("test/directorymapper/dir2"))
27
+
28
+ #pp Madowu::DirectoryMapper.dirmap("/home/ippei/doc/bookmark/")
29
+
30
+
31
+
32
+ end
33
+
34
+ def test_get_title
35
+ # markdown without heading
36
+ #assert_equal('empty.html',
37
+ assert_equal('',
38
+ Madowu::DirectoryMapper.get_title('test/directorymapper/empty.md')
39
+ )
40
+
41
+ # markdown without heading
42
+
43
+ assert_equal('head1',
44
+ Madowu::DirectoryMapper.get_title('test/directorymapper/head.md')
45
+ )
46
+
47
+ # html
48
+ assert_equal('title_index.html',
49
+ Madowu::DirectoryMapper.get_title('test/directorymapper/title.html')
50
+ )
51
+
52
+ # dir
53
+ assert_equal('dir1/',
54
+ Madowu::DirectoryMapper.get_title('test/directorymapper/dir1')
55
+ )
56
+
57
+
58
+ end
59
+
60
+ end
61
+
@@ -0,0 +1,117 @@
1
+ #! /usr/bin/env ruby
2
+ # coding: utf-8
3
+
4
+ require "pp"
5
+ require "helper"
6
+ #require "test/unit"
7
+ #require "pkg/klass.rb"
8
+
9
+ class Madowu::HtmlGenerator
10
+ public :embed_outline, :embed_sidebar
11
+ attr_reader :markup_lines
12
+ end
13
+
14
+ class TC_HtmlGenerator < Test::Unit::TestCase
15
+ def setup
16
+ @h00 = Madowu::HtmlGenerator.new("test/empty.md")
17
+ @h01 = Madowu::HtmlGenerator.new("test/head.md")
18
+ @h02 = Madowu::HtmlGenerator.new("test/head1.md")
19
+ end
20
+
21
+ def test_generate
22
+ correct = []
23
+ correct << "<!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 4.01 Transitional//EN'>"
24
+ correct << "<HTML lang=\'ja\'>"
25
+ correct << "<head>"
26
+ correct << " <title></title>"
27
+ correct << " <meta http-equiv='Content-Type' content='text/html; charset=UTF-8'>"
28
+ correct << "</head>"
29
+ correct << "<body>"
30
+ correct << "<div class='main'>"
31
+ correct << "<div class='body'>"
32
+ correct << ""
33
+ correct << "</div></div></body></html>"
34
+ correct << ""
35
+ correct = correct.join("\n")
36
+ assert_equal( correct, @h00.generate)
37
+
38
+
39
+ h04 = Madowu::HtmlGenerator.new("test/subdir/empty.md")
40
+ options = {:css => "test/test.css"}
41
+ correct = []
42
+ correct << "<!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 4.01 Transitional//EN'>"
43
+ correct << "<HTML lang=\'ja\'>"
44
+ correct << "<head>"
45
+ correct << " <title></title>"
46
+ correct << " <meta http-equiv='Content-Type' content='text/html; charset=UTF-8'>"
47
+ correct << " <link rel='stylesheet' type='text/css' href='../test.css' media='all'>"
48
+ correct << "</head>"
49
+ correct << "<body>"
50
+ correct << "<div class='main'>"
51
+ correct << "<div class='body'>"
52
+ correct << ""
53
+ correct << "</div></div></body></html>"
54
+ correct << ""
55
+ correct = correct.join("\n")
56
+ assert_equal( correct, h04.generate(options))
57
+ end
58
+
59
+ def test_embed_outline
60
+ correct = []
61
+ correct << "<div class='header'>"
62
+ correct << "<p>Outline:</p>"
63
+ correct << "<ul class='outline'>"
64
+ correct << " <li><a href='#0'>head1</a></ll>"
65
+ correct << " <li><a href='#1'> + head2</a></ll>"
66
+ correct << " <li><a href='#2'> + + head3</a></ll>"
67
+ correct << " <li><a href='#3'> + + + head4</a></ll>"
68
+ correct << " <li><a href='#4'> + + + + head5</a></ll>"
69
+ correct << " <li><a href='#5'> + + + + + head6</a></ll>"
70
+ correct << "</ul>"
71
+ correct << "</div>"
72
+ correct << "<h1><a name='0'>head1</a></h1>"
73
+ correct << ""
74
+ correct << "<p>line1</p>"
75
+ correct << ""
76
+ correct << "<h2><a name='1'>head2</a></h2>"
77
+ correct << ""
78
+ correct << "<p>line2</p>"
79
+ correct << ""
80
+ correct << "<h3><a name='2'>head3</a></h3>"
81
+ correct << ""
82
+ correct << "<p>line3</p>"
83
+ correct << ""
84
+ correct << "<h4><a name='3'>head4</a></h4>"
85
+ correct << ""
86
+ correct << "<p>line4</p>"
87
+ correct << ""
88
+ correct << "<h5><a name='4'>head5</a></h5>"
89
+ correct << ""
90
+ correct << "<p>line5</p>"
91
+ correct << ""
92
+ correct << "<h6><a name='5'>head6</a></h6>"
93
+ correct << ""
94
+ correct << "<p>line6</p>"
95
+
96
+ @h01.embed_outline
97
+ #puts correct
98
+ #puts "-"*60
99
+ #puts @h01.markup_lines
100
+ #exit
101
+ assert_equal( correct, @h01.markup_lines)
102
+ end
103
+
104
+ def test_embed_sidebar
105
+ lines = ['1', '2' ]
106
+ @h02.embed_sidebar(lines)
107
+ correct = []
108
+ correct << "<h1>head1</h1>"
109
+ correct << "<div class='sidebar'>"
110
+ correct << "1"
111
+ correct << "2"
112
+ correct << "</div>"
113
+ assert_equal(correct, @h02.markup_lines)
114
+ end
115
+
116
+ end
117
+
@@ -0,0 +1,6 @@
1
+ require 'helper'
2
+
3
+ class TestMadowu < Test::Unit::TestCase
4
+ def test_something_for_real
5
+ end
6
+ end
metadata ADDED
@@ -0,0 +1,156 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: madowu
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.0
5
+ platform: ruby
6
+ authors:
7
+ - ippei94da
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-10-20 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rdoc
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '4.2'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '4.2'
27
+ - !ruby/object:Gem::Dependency
28
+ name: bundler
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '1.0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '1.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: jeweler
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '2.0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '2.0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: simplecov
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: test-unit
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '3.1'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '3.1'
83
+ description: Markdown to HTML with table of contents, sidebar to neighboring directories.
84
+ email: ippei94da@gmail.com
85
+ executables:
86
+ - dirmap
87
+ - madowu
88
+ extensions: []
89
+ extra_rdoc_files:
90
+ - LICENSE.txt
91
+ - README.rdoc
92
+ files:
93
+ - ".document"
94
+ - CHANGES
95
+ - Gemfile
96
+ - LICENSE.txt
97
+ - README.rdoc
98
+ - Rakefile
99
+ - VERSION
100
+ - bin/dirmap
101
+ - bin/madowu
102
+ - example/.gitignore
103
+ - example/Rakefile
104
+ - example/enum.md
105
+ - example/heading.md
106
+ - example/index.md
107
+ - example/list.md
108
+ - example/madowu.css
109
+ - example/subdir/index.md
110
+ - example/subdir/subdir2/index.md
111
+ - lib/madowu.rb
112
+ - lib/madowu/directorymapper.rb
113
+ - lib/madowu/htmlgenerator.rb
114
+ - test/directorymapper/.gitignore
115
+ - test/directorymapper/dir1/foo.md
116
+ - test/directorymapper/dir2/dir/index.md
117
+ - test/directorymapper/dir2/foo.md
118
+ - test/directorymapper/dir2/index.html
119
+ - test/directorymapper/empty.md
120
+ - test/directorymapper/file1.md
121
+ - test/directorymapper/head.md
122
+ - test/directorymapper/title.html
123
+ - test/empty.md
124
+ - test/head.md
125
+ - test/head1.md
126
+ - test/helper.rb
127
+ - test/subdir/empty.md
128
+ - test/test.css
129
+ - test/test_directorymapper.rb
130
+ - test/test_htmlgenerator.rb
131
+ - test/test_madowu.rb
132
+ homepage: http://github.com/ippei94da/madowu
133
+ licenses:
134
+ - MIT
135
+ metadata: {}
136
+ post_install_message:
137
+ rdoc_options: []
138
+ require_paths:
139
+ - lib
140
+ required_ruby_version: !ruby/object:Gem::Requirement
141
+ requirements:
142
+ - - ">="
143
+ - !ruby/object:Gem::Version
144
+ version: '0'
145
+ required_rubygems_version: !ruby/object:Gem::Requirement
146
+ requirements:
147
+ - - ">="
148
+ - !ruby/object:Gem::Version
149
+ version: '0'
150
+ requirements: []
151
+ rubyforge_project:
152
+ rubygems_version: 2.2.2
153
+ signing_key:
154
+ specification_version: 4
155
+ summary: Madowu, MArkDOWn to markUp, to build html
156
+ test_files: []