ppz 0.0.1 → 0.0.6
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.
- checksums.yaml +4 -4
- data/asset/style/ppz.css +141 -0
- data/asset/style/ppz.styl +126 -0
- data/bin/common.rb +42 -0
- data/bin/doc.rb +17 -0
- data/bin/folder.rb +10 -0
- data/bin/ppz +12 -10
- data/lib/func/util.rb +19 -2
- data/lib/{object/model → model}/abstract/model.rb +16 -18
- data/lib/model/abstract/wrapper-model.rb +26 -0
- data/lib/model/comment/container.rb +7 -0
- data/lib/model/comment/item.rb +12 -0
- data/lib/{object/model → model}/common/escape.rb +1 -1
- data/lib/{object/model → model}/common/tag.rb +0 -0
- data/lib/model/list/item/abstract.rb +13 -0
- data/lib/model/list/item/unordered.rb +7 -0
- data/lib/model/list/wrapper/abstract.rb +12 -0
- data/lib/model/list/wrapper/unordered.rb +3 -0
- data/lib/model/p/index.rb +17 -0
- data/lib/model/section/abstract.rb +15 -0
- data/lib/model/section/leaf.rb +29 -0
- data/lib/model/section/root.rb +16 -0
- data/lib/model/special-block/container.rb +25 -0
- data/lib/model/special-block/item.rb +8 -0
- data/lib/{object/parser → parser}/common/context/abstract.rb +3 -5
- data/lib/parser/common/context/doc.rb +15 -0
- data/lib/parser/doc/abstract.rb +68 -0
- data/lib/{object/parser → parser}/doc/file.rb +1 -3
- data/lib/{object/parser → parser}/doc/string.rb +1 -3
- data/lib/parser/folder/index.rb +9 -0
- data/lib/parser/folder/model/abstract.rb +90 -0
- data/lib/parser/folder/model/file/abstract.rb +23 -0
- data/lib/parser/folder/model/file/other.rb +7 -0
- data/lib/parser/folder/model/file/ppz.rb +15 -0
- data/lib/parser/folder/model/folder.rb +93 -0
- data/lib/ppz.rb +26 -1
- metadata +34 -26
- data/bin/ppz-util.rb +0 -31
- data/lib/object/model/abstract/wrapper-model.rb +0 -21
- data/lib/object/model/common/tag.test.rb +0 -25
- data/lib/object/model/list/item/abstract.rb +0 -15
- data/lib/object/model/list/item/unordered.rb +0 -5
- data/lib/object/model/list/wrapper/abstract.rb +0 -7
- data/lib/object/model/list/wrapper/unordered.rb +0 -5
- data/lib/object/model/p/index.rb +0 -15
- data/lib/object/model/section/abstract.rb +0 -10
- data/lib/object/model/section/leaf.rb +0 -35
- data/lib/object/model/section/root.rb +0 -7
- data/lib/object/model/section/test.rb +0 -12
- data/lib/object/model/special-block/container.rb +0 -18
- data/lib/object/model/special-block/item.rb +0 -10
- data/lib/object/parser/common/context/doc.rb +0 -15
- data/lib/object/parser/doc/abstract.rb +0 -69
- data/lib/object/parser/doc/file.test.rb +0 -6
- data/lib/object/parser/folder/index.rb +0 -7
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
module PPZ::Folder
|
|
2
|
+
class AbstractFileModel < AbstractModel
|
|
3
|
+
attr_reader :name
|
|
4
|
+
def self.from_path path, level
|
|
5
|
+
if (File.extname path) == '.ppz'
|
|
6
|
+
PPZFileModel.new path, level
|
|
7
|
+
else
|
|
8
|
+
OtherFileModel.new path, level
|
|
9
|
+
end
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
attr_reader :file_ext
|
|
13
|
+
def initialize path, level
|
|
14
|
+
super
|
|
15
|
+
unless /^((\d+)_)?([^\.]+)(\.[^\.]+)?$/.match @basename
|
|
16
|
+
throw '文件的命名方式不太理解哦:' + path
|
|
17
|
+
end
|
|
18
|
+
@index = $2?($2.to_i):(Float::INFINITY)
|
|
19
|
+
@name = $3
|
|
20
|
+
@file_ext = $4 || ''
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
module PPZ::Folder
|
|
2
|
+
class PPZFileModel < AbstractFileModel
|
|
3
|
+
attr_accessor :left, :right
|
|
4
|
+
|
|
5
|
+
def _compile dir_out
|
|
6
|
+
PPZ::Func::write_to_file (dir_out + '/' + @name + '.html'), to_html
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
private
|
|
10
|
+
def get_content_html
|
|
11
|
+
(PPZ::FileDocParser.new @path)
|
|
12
|
+
.get_model.to_html
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
module PPZ::Folder
|
|
2
|
+
class FolderModel < AbstractModel
|
|
3
|
+
attr_reader :children
|
|
4
|
+
|
|
5
|
+
def initialize path, level
|
|
6
|
+
super
|
|
7
|
+
/^((\d+)_)?(.+)/.match @basename
|
|
8
|
+
@index = $2?($2.to_i):(Float::INFINITY)
|
|
9
|
+
@name = $3
|
|
10
|
+
|
|
11
|
+
@children = []
|
|
12
|
+
(Dir.children path, encoding: 'utf-8').each do |child_name|
|
|
13
|
+
@children.push AbstractModel.from_path (path + '/' + child_name), level
|
|
14
|
+
end
|
|
15
|
+
@children.sort! do |a, b|
|
|
16
|
+
a.index <=> b.index
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
# 设置上级 和 左右
|
|
20
|
+
left = right = nil
|
|
21
|
+
@children.each do |child|
|
|
22
|
+
child.father_model = self # 上级
|
|
23
|
+
|
|
24
|
+
next unless child.is_a? PPZFileModel
|
|
25
|
+
if left
|
|
26
|
+
left.right = child
|
|
27
|
+
child.left = left
|
|
28
|
+
end
|
|
29
|
+
left = child
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def _compile out_dir # compile 是 _compile 的安全版本
|
|
34
|
+
PPZ::Func.write_to_file (out_dir + '/' + @name + '.html'), to_html
|
|
35
|
+
|
|
36
|
+
children_dir = out_dir + '/' + @name
|
|
37
|
+
Dir.mkdir children_dir
|
|
38
|
+
@children.each { |child| child._compile children_dir }
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def compile out_dir
|
|
42
|
+
set_prev_and_next_page
|
|
43
|
+
|
|
44
|
+
unless out_dir.is_a? String
|
|
45
|
+
throw 'out_dir 只能是字符串'
|
|
46
|
+
end
|
|
47
|
+
unless Dir.exist? out_dir
|
|
48
|
+
throw "out_dir #{out_dir} 不存在"
|
|
49
|
+
end
|
|
50
|
+
if ['/', '\\'].include? out_dir[-1]
|
|
51
|
+
_compile out_dir[0...-1]
|
|
52
|
+
else
|
|
53
|
+
_compile out_dir
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
# 设置页面的“上一篇、下一篇”
|
|
58
|
+
private
|
|
59
|
+
def set_prev_and_next_page
|
|
60
|
+
list = []
|
|
61
|
+
linearize_children self, list
|
|
62
|
+
list.inject do |pre, nex|
|
|
63
|
+
pre.next_model = nex
|
|
64
|
+
nex.prev_model = pre
|
|
65
|
+
nex
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
def linearize_children child, list
|
|
70
|
+
if child.is_a? PPZFileModel
|
|
71
|
+
list.push child
|
|
72
|
+
elsif child.is_a? FolderModel
|
|
73
|
+
list.push child
|
|
74
|
+
child.children.each do |cc|
|
|
75
|
+
linearize_children cc, list
|
|
76
|
+
end
|
|
77
|
+
end
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
def get_content_html
|
|
81
|
+
%!<article><ul>#{
|
|
82
|
+
@children
|
|
83
|
+
.select do |child|
|
|
84
|
+
(child.class == FolderModel) || (child.file_ext == '.ppz')
|
|
85
|
+
end
|
|
86
|
+
.map do |child|
|
|
87
|
+
"<li><a href=\"./#{@name}/#{child.name}.html\">#{child.name}</a></li>"
|
|
88
|
+
end
|
|
89
|
+
.join
|
|
90
|
+
}</ul></article>!
|
|
91
|
+
end
|
|
92
|
+
end
|
|
93
|
+
end
|
data/lib/ppz.rb
CHANGED
|
@@ -1 +1,26 @@
|
|
|
1
|
-
|
|
1
|
+
module PPZ
|
|
2
|
+
require_relative './func/util'
|
|
3
|
+
|
|
4
|
+
require_relative './model/abstract/model'
|
|
5
|
+
require_relative './model/abstract/wrapper-model'
|
|
6
|
+
require_relative './model/section/abstract'
|
|
7
|
+
require_relative './model/section/leaf'
|
|
8
|
+
require_relative './model/section/root'
|
|
9
|
+
require_relative './model/comment/container'
|
|
10
|
+
require_relative './model/comment/item'
|
|
11
|
+
require_relative './model/common/escape'
|
|
12
|
+
require_relative './model/list/wrapper/abstract'
|
|
13
|
+
require_relative './model/list/wrapper/unordered'
|
|
14
|
+
require_relative './model/list/item/abstract'
|
|
15
|
+
require_relative './model/list/item/unordered'
|
|
16
|
+
require_relative './model/p/index'
|
|
17
|
+
require_relative './model/special-block/container'
|
|
18
|
+
require_relative './model/special-block/item'
|
|
19
|
+
|
|
20
|
+
require_relative './parser/common/context/abstract'
|
|
21
|
+
require_relative './parser/common/context/doc'
|
|
22
|
+
require_relative './parser/doc/abstract'
|
|
23
|
+
require_relative './parser/doc/file'
|
|
24
|
+
require_relative './parser/doc/string'
|
|
25
|
+
|
|
26
|
+
end
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: ppz
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.0.
|
|
4
|
+
version: 0.0.6
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- wuse
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2021-02-
|
|
11
|
+
date: 2021-02-20 00:00:00.000000000 Z
|
|
12
12
|
dependencies: []
|
|
13
13
|
description:
|
|
14
14
|
email: 372301467@qq.com
|
|
@@ -17,32 +17,40 @@ executables:
|
|
|
17
17
|
extensions: []
|
|
18
18
|
extra_rdoc_files: []
|
|
19
19
|
files:
|
|
20
|
+
- asset/style/ppz.css
|
|
21
|
+
- asset/style/ppz.styl
|
|
22
|
+
- bin/common.rb
|
|
23
|
+
- bin/doc.rb
|
|
24
|
+
- bin/folder.rb
|
|
20
25
|
- bin/ppz
|
|
21
|
-
- bin/ppz-util.rb
|
|
22
26
|
- lib/func/util.rb
|
|
23
|
-
- lib/
|
|
24
|
-
- lib/
|
|
25
|
-
- lib/
|
|
26
|
-
- lib/
|
|
27
|
-
- lib/
|
|
28
|
-
- lib/
|
|
29
|
-
- lib/
|
|
30
|
-
- lib/
|
|
31
|
-
- lib/
|
|
32
|
-
- lib/
|
|
33
|
-
- lib/
|
|
34
|
-
- lib/
|
|
35
|
-
- lib/
|
|
36
|
-
- lib/
|
|
37
|
-
- lib/
|
|
38
|
-
- lib/
|
|
39
|
-
- lib/
|
|
40
|
-
- lib/
|
|
41
|
-
- lib/
|
|
42
|
-
- lib/
|
|
43
|
-
- lib/
|
|
44
|
-
- lib/
|
|
45
|
-
- lib/
|
|
27
|
+
- lib/model/abstract/model.rb
|
|
28
|
+
- lib/model/abstract/wrapper-model.rb
|
|
29
|
+
- lib/model/comment/container.rb
|
|
30
|
+
- lib/model/comment/item.rb
|
|
31
|
+
- lib/model/common/escape.rb
|
|
32
|
+
- lib/model/common/tag.rb
|
|
33
|
+
- lib/model/list/item/abstract.rb
|
|
34
|
+
- lib/model/list/item/unordered.rb
|
|
35
|
+
- lib/model/list/wrapper/abstract.rb
|
|
36
|
+
- lib/model/list/wrapper/unordered.rb
|
|
37
|
+
- lib/model/p/index.rb
|
|
38
|
+
- lib/model/section/abstract.rb
|
|
39
|
+
- lib/model/section/leaf.rb
|
|
40
|
+
- lib/model/section/root.rb
|
|
41
|
+
- lib/model/special-block/container.rb
|
|
42
|
+
- lib/model/special-block/item.rb
|
|
43
|
+
- lib/parser/common/context/abstract.rb
|
|
44
|
+
- lib/parser/common/context/doc.rb
|
|
45
|
+
- lib/parser/doc/abstract.rb
|
|
46
|
+
- lib/parser/doc/file.rb
|
|
47
|
+
- lib/parser/doc/string.rb
|
|
48
|
+
- lib/parser/folder/index.rb
|
|
49
|
+
- lib/parser/folder/model/abstract.rb
|
|
50
|
+
- lib/parser/folder/model/file/abstract.rb
|
|
51
|
+
- lib/parser/folder/model/file/other.rb
|
|
52
|
+
- lib/parser/folder/model/file/ppz.rb
|
|
53
|
+
- lib/parser/folder/model/folder.rb
|
|
46
54
|
- lib/ppz.rb
|
|
47
55
|
homepage: https://github.com/daGaiGuanYu/ppz
|
|
48
56
|
licenses:
|
data/bin/ppz-util.rb
DELETED
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
require 'pathname'
|
|
2
|
-
|
|
3
|
-
class UtilInMain
|
|
4
|
-
class << self
|
|
5
|
-
def get_file_in_and_out
|
|
6
|
-
file_in, file_out = ARGV
|
|
7
|
-
unless file_in && file_out
|
|
8
|
-
abort '参数不对啊,需要至少俩参数(输入文件路径、输出文件路径)'
|
|
9
|
-
end
|
|
10
|
-
|
|
11
|
-
current_path = Pathname Dir.pwd
|
|
12
|
-
file_in = (current_path + file_in).to_s
|
|
13
|
-
file_out = (current_path + file_out).to_s
|
|
14
|
-
|
|
15
|
-
unless File.exist? file_in
|
|
16
|
-
abort '没有 ' + file_in + " 这个文件\n【参数不正确:ppz 源文件不存在】"
|
|
17
|
-
end
|
|
18
|
-
|
|
19
|
-
file_out_dir = File.dirname file_out
|
|
20
|
-
unless Dir.exist? file_out_dir
|
|
21
|
-
abort '输出文件的目录不存在'
|
|
22
|
-
end
|
|
23
|
-
|
|
24
|
-
if File.exist? file_out
|
|
25
|
-
abort '输出文件已存在'
|
|
26
|
-
end
|
|
27
|
-
|
|
28
|
-
[file_in, file_out]
|
|
29
|
-
end
|
|
30
|
-
end
|
|
31
|
-
end
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
require_relative './model'
|
|
2
|
-
|
|
3
|
-
class AbstractWrapperModel < AbstractModel
|
|
4
|
-
def initialize
|
|
5
|
-
@children = []
|
|
6
|
-
end
|
|
7
|
-
|
|
8
|
-
# 把 el 加入到 children
|
|
9
|
-
def append el
|
|
10
|
-
if el.respond_to? :on_append
|
|
11
|
-
el.on_append
|
|
12
|
-
end
|
|
13
|
-
@children.push el
|
|
14
|
-
end
|
|
15
|
-
|
|
16
|
-
def to_html
|
|
17
|
-
@children
|
|
18
|
-
.map { |child| child.to_html }
|
|
19
|
-
.join
|
|
20
|
-
end
|
|
21
|
-
end
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
require_relative './tag'
|
|
2
|
-
require_relative 'test/unit'
|
|
3
|
-
|
|
4
|
-
class TagTest < Test::Unit::TestCase
|
|
5
|
-
def test_1
|
|
6
|
-
assert_equal '<div></div>', AbstractModel.new.getTag
|
|
7
|
-
end
|
|
8
|
-
|
|
9
|
-
def test_2
|
|
10
|
-
assert_equal '<div>ha i</div>', AbstractModel.new('ha i').getTag
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
def test_3
|
|
14
|
-
assert_equal '<span>hai</span>', AbstractModel.new('hai', tagName: 'span').getTag
|
|
15
|
-
end
|
|
16
|
-
|
|
17
|
-
def test_4
|
|
18
|
-
assert_equal '<span name=\'test\' tel=\'110\'>hai</span>', AbstractModel.new('hai', tagName: 'span',
|
|
19
|
-
attr: {
|
|
20
|
-
name: 'test',
|
|
21
|
-
tel: '110'
|
|
22
|
-
}
|
|
23
|
-
).getTag
|
|
24
|
-
end
|
|
25
|
-
end
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
require_relative '../../abstract/wrapper-model'
|
|
2
|
-
|
|
3
|
-
class AbstractListItemModel < AbstractModel
|
|
4
|
-
def initialize text
|
|
5
|
-
@text = transform_inline_element text
|
|
6
|
-
end
|
|
7
|
-
|
|
8
|
-
def on_append
|
|
9
|
-
puts '+: ' + @text
|
|
10
|
-
end
|
|
11
|
-
|
|
12
|
-
def to_html
|
|
13
|
-
"<li>#{@text}</li>"
|
|
14
|
-
end
|
|
15
|
-
end
|
data/lib/object/model/p/index.rb
DELETED
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
require_relative './abstract'
|
|
2
|
-
|
|
3
|
-
class LeafSectionModel < AbstractSectionModel
|
|
4
|
-
|
|
5
|
-
attr_accessor :title, :father
|
|
6
|
-
attr_reader :level
|
|
7
|
-
|
|
8
|
-
def initialize title, level
|
|
9
|
-
raise TypeError unless title.is_a?(String) && level.is_a?(Integer)
|
|
10
|
-
super() # 不可以省略括号
|
|
11
|
-
@title = transform_inline_element title
|
|
12
|
-
@level = level
|
|
13
|
-
end
|
|
14
|
-
|
|
15
|
-
REG_EXP = /^\#{1,5} /
|
|
16
|
-
def self.from_line line
|
|
17
|
-
return nil unless match_data = REG_EXP.match(line)
|
|
18
|
-
|
|
19
|
-
level = {
|
|
20
|
-
2 => 1,
|
|
21
|
-
6 => 3
|
|
22
|
-
}[match_data.to_s.length] || 2
|
|
23
|
-
LeafSectionModel.new match_data.post_match, level
|
|
24
|
-
end
|
|
25
|
-
|
|
26
|
-
def on_append
|
|
27
|
-
puts 'h: ' + @title
|
|
28
|
-
end
|
|
29
|
-
|
|
30
|
-
def to_html
|
|
31
|
-
%{<section><h#{@level}>#{@title}</h#{@level}>#{
|
|
32
|
-
super
|
|
33
|
-
}</section>}
|
|
34
|
-
end
|
|
35
|
-
end
|