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.
Files changed (55) hide show
  1. checksums.yaml +4 -4
  2. data/asset/style/ppz.css +141 -0
  3. data/asset/style/ppz.styl +126 -0
  4. data/bin/common.rb +42 -0
  5. data/bin/doc.rb +17 -0
  6. data/bin/folder.rb +10 -0
  7. data/bin/ppz +12 -10
  8. data/lib/func/util.rb +19 -2
  9. data/lib/{object/model → model}/abstract/model.rb +16 -18
  10. data/lib/model/abstract/wrapper-model.rb +26 -0
  11. data/lib/model/comment/container.rb +7 -0
  12. data/lib/model/comment/item.rb +12 -0
  13. data/lib/{object/model → model}/common/escape.rb +1 -1
  14. data/lib/{object/model → model}/common/tag.rb +0 -0
  15. data/lib/model/list/item/abstract.rb +13 -0
  16. data/lib/model/list/item/unordered.rb +7 -0
  17. data/lib/model/list/wrapper/abstract.rb +12 -0
  18. data/lib/model/list/wrapper/unordered.rb +3 -0
  19. data/lib/model/p/index.rb +17 -0
  20. data/lib/model/section/abstract.rb +15 -0
  21. data/lib/model/section/leaf.rb +29 -0
  22. data/lib/model/section/root.rb +16 -0
  23. data/lib/model/special-block/container.rb +25 -0
  24. data/lib/model/special-block/item.rb +8 -0
  25. data/lib/{object/parser → parser}/common/context/abstract.rb +3 -5
  26. data/lib/parser/common/context/doc.rb +15 -0
  27. data/lib/parser/doc/abstract.rb +68 -0
  28. data/lib/{object/parser → parser}/doc/file.rb +1 -3
  29. data/lib/{object/parser → parser}/doc/string.rb +1 -3
  30. data/lib/parser/folder/index.rb +9 -0
  31. data/lib/parser/folder/model/abstract.rb +90 -0
  32. data/lib/parser/folder/model/file/abstract.rb +23 -0
  33. data/lib/parser/folder/model/file/other.rb +7 -0
  34. data/lib/parser/folder/model/file/ppz.rb +15 -0
  35. data/lib/parser/folder/model/folder.rb +93 -0
  36. data/lib/ppz.rb +26 -1
  37. metadata +34 -26
  38. data/bin/ppz-util.rb +0 -31
  39. data/lib/object/model/abstract/wrapper-model.rb +0 -21
  40. data/lib/object/model/common/tag.test.rb +0 -25
  41. data/lib/object/model/list/item/abstract.rb +0 -15
  42. data/lib/object/model/list/item/unordered.rb +0 -5
  43. data/lib/object/model/list/wrapper/abstract.rb +0 -7
  44. data/lib/object/model/list/wrapper/unordered.rb +0 -5
  45. data/lib/object/model/p/index.rb +0 -15
  46. data/lib/object/model/section/abstract.rb +0 -10
  47. data/lib/object/model/section/leaf.rb +0 -35
  48. data/lib/object/model/section/root.rb +0 -7
  49. data/lib/object/model/section/test.rb +0 -12
  50. data/lib/object/model/special-block/container.rb +0 -18
  51. data/lib/object/model/special-block/item.rb +0 -10
  52. data/lib/object/parser/common/context/doc.rb +0 -15
  53. data/lib/object/parser/doc/abstract.rb +0 -69
  54. data/lib/object/parser/doc/file.test.rb +0 -6
  55. 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,7 @@
1
+ module PPZ::Folder
2
+ class OtherFileModel < AbstractFileModel
3
+ def _compile dir_out
4
+ FileUtils.cp @path, (dir_out + '/' + @basename)
5
+ end
6
+ end
7
+ 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
- p '接口还没写呢~感兴趣的话,可以直接读源码,码量不大'
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.1
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-02 00:00:00.000000000 Z
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/object/model/abstract/model.rb
24
- - lib/object/model/abstract/wrapper-model.rb
25
- - lib/object/model/common/escape.rb
26
- - lib/object/model/common/tag.rb
27
- - lib/object/model/common/tag.test.rb
28
- - lib/object/model/list/item/abstract.rb
29
- - lib/object/model/list/item/unordered.rb
30
- - lib/object/model/list/wrapper/abstract.rb
31
- - lib/object/model/list/wrapper/unordered.rb
32
- - lib/object/model/p/index.rb
33
- - lib/object/model/section/abstract.rb
34
- - lib/object/model/section/leaf.rb
35
- - lib/object/model/section/root.rb
36
- - lib/object/model/section/test.rb
37
- - lib/object/model/special-block/container.rb
38
- - lib/object/model/special-block/item.rb
39
- - lib/object/parser/common/context/abstract.rb
40
- - lib/object/parser/common/context/doc.rb
41
- - lib/object/parser/doc/abstract.rb
42
- - lib/object/parser/doc/file.rb
43
- - lib/object/parser/doc/file.test.rb
44
- - lib/object/parser/doc/string.rb
45
- - lib/object/parser/folder/index.rb
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
@@ -1,5 +0,0 @@
1
- require_relative './abstract'
2
-
3
- class UnorderedListItemModel < AbstractListItemModel
4
- REG_EXP = /^\++ /
5
- end
@@ -1,7 +0,0 @@
1
- require_relative '../../abstract/model.rb'
2
-
3
- class AbstractListWrapperModel < AbstractWrapperModel
4
- def to_html
5
- "<#{self.class::TAG_NAME}>#{super}</#{self.class::TAG_NAME}>"
6
- end
7
- end
@@ -1,5 +0,0 @@
1
- require_relative './abstract'
2
-
3
- class UnorderedListWrapperModel < AbstractListWrapperModel
4
- TAG_NAME = 'ul'
5
- end
@@ -1,15 +0,0 @@
1
- require_relative '../abstract/model'
2
-
3
- class PModel < 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
- "<p>#{@text}</p>"
14
- end
15
- end
@@ -1,10 +0,0 @@
1
- require_relative '../abstract/wrapper-model'
2
-
3
- class AbstractSectionModel < AbstractWrapperModel
4
- def append section
5
- if section.is_a? AbstractSectionModel
6
- section.father = self
7
- end
8
- super
9
- end
10
- end
@@ -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
@@ -1,7 +0,0 @@
1
- require_relative './abstract'
2
-
3
- class RootSectionModel < AbstractSectionModel
4
- def level
5
- 0
6
- end
7
- end