pnote_client 2.4.5 → 2.5.0

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ff8f2b39c3dcb41b81b2acd6aa0e6c6468ae694def1f31b6b7c3cd1bd871dcec
4
- data.tar.gz: 11118c0753bf8876099e2ac833919f3dd4b51abe46d80ff7e5e78aedb3a34c35
3
+ metadata.gz: a3ba1826c4b23e1951591e2b88f0b835ea3c5ffa2c3501f58afd971d8a0b52c2
4
+ data.tar.gz: b18197526f4a93f7910310b885479c55d8f32f4c4b3b7cb3165afa54ef13cfb0
5
5
  SHA512:
6
- metadata.gz: accfeda9c8ebd5288e4104783ba1d6b83b2565c94015b2310a740fe4eb54bee8e47c4f1586f2b483b29db10207a8e2338c6918e83b48be90b12cfe159d4af8f5
7
- data.tar.gz: 5b2fb999ab60ece1abed5e1c94d7ad1f4bce5bab7ec58528b7f7e25ecfe5c4ed5006b1cc2400179528cfec77fb128c0cdc28740d3e56fa483acb000edcc36fe5
6
+ metadata.gz: 1c3edfc027d91c5738e144885f03d495f87f401cbdd0c5cc31d2be566479c241520c73a3d410b1269ec62b9b3f31710d202dd26ad9f39287761a3fd5fefe3c5d
7
+ data.tar.gz: 9feceda15a01f1fe44c87875057b2c85625a52bdd67bb1cd588cbfcaaf94656d10501714f5fae5a490d09a90a73ca1b152750929f5a136701edfab2782ac04a9
data/exe/pnote_to_json CHANGED
@@ -9,6 +9,7 @@ require 'pnote_client/converters/pnote_to_json_converter'
9
9
  require 'pnote_client/documents/hml'
10
10
  require 'pnote_client/display/console_display'
11
11
  require 'pnote_client/validators/pnote_validator'
12
+ require 'pnote_client/validators/hml_validator'
12
13
 
13
14
  def read_file(filepath)
14
15
  f = File.open(filepath, 'r')
@@ -25,22 +26,21 @@ def write_file(content, filepath)
25
26
  f.close
26
27
  end
27
28
 
28
- def save_validation_log_file(result, log_filepath)
29
+ def save_validation_log_file(hml_validate_result, pnote_validate_result, log_filepath)
29
30
  log_content = ""
30
31
  log_content += "==========[Warnings]=========="
31
32
  log_content += "\n"
32
- result[:warnings].each_with_index do |warning, index|
33
+ (hml_validate_result[:warnings] + pnote_validate_result[:warnings]).each_with_index do |warning, index|
33
34
  log_content += "#{index + 1}.\n[경고 메시지]\n#{warning[:message]}\n[상세내용]\n#{warning[:detail]}\n\n\n"
34
35
  end
35
36
  log_content += "\n\n"
36
37
  log_content += "==========[Errors]=========="
37
38
  log_content += "\n"
38
- result[:errors].each_with_index do |error, index|
39
+ (hml_validate_result[:errors] + pnote_validate_result[:errors]).each_with_index do |error, index|
39
40
  log_content += "#{index + 1}.\n[에러 메시지]\n#{error[:message]}\n[상세내용]\n#{error[:detail]}\n\n\n"
40
41
  end
41
42
 
42
43
  write_file(log_content, log_filepath)
43
- puts "로그 파일이 저장되었습니다. (#{log_filepath})"
44
44
  end
45
45
 
46
46
  # 커맨드라인 argument로 옵션 입력받기
@@ -104,28 +104,65 @@ input_filename, input_dir_path, hml_content = read_file(options[:input_filepath]
104
104
  output_filepath = File.join(input_dir_path, input_filename + ".json")
105
105
  log_filepath = File.join(input_dir_path, input_filename + ".log")
106
106
 
107
- # 파일 읽어들인 PnoteDocument로 변환
107
+ # 변환 HmlDocument 검증
108
+ puts ""
109
+ puts "=============================================="
110
+ puts "hml 파일을 검사하는 중입니다..."
111
+ puts "=============================================="
112
+ puts ""
113
+ sleep(1)
108
114
  hml_document = PnoteClient::Documents::Hml.parse(hml_content)
115
+ hml_validator = PnoteClient::Validators::HmlValidator.new(hml_document)
116
+ hml_validate_result = hml_validator.validate
117
+
118
+ # HmlDocument를 PnoteDocument로 변환
119
+ puts ""
120
+ puts "=============================================="
121
+ puts "hml 파일을 pnote 파일로 변환하는 중입니다..."
109
122
  hml_to_pnote_converter = PnoteClient::Converters::HmlToPnoteConverter.new(hml_document, show_time: options[:show_time], type_style_mapper: type_style_mapper, include_image_data: options[:include_image_data])
110
123
  hml_to_pnote_converter.delegate = display
111
124
  pnote_document = hml_to_pnote_converter.convert
125
+ puts "=============================================="
126
+ puts ""
112
127
 
113
128
  # PnoteDocument 상태 검증
114
- validator = PnoteClient::Validators::PnoteValidator.new(pnote_document, display)
115
- result = validator.validate
116
- if validator.has_error?
117
- save_validation_log_file(result, log_filepath)
118
- puts "변환 에러가 발생했습니다. 로그파일을 확인해주세요."
119
- abort
120
- elsif validator.has_warning?
121
- save_validation_log_file(result, log_filepath)
122
- puts "#{validator.warning_count}개의 경고가 있습니다. 계속 진행하시겠습니까? (y/n)"
123
- response = gets.chomp.downcase
124
- if response != 'y'
125
- abort
126
- end
127
- end
129
+ puts ""
130
+ puts "=============================================="
131
+ puts "pnote 파일을 검사하는 중입니다..."
132
+ puts "=============================================="
133
+ puts ""
134
+ sleep(1)
135
+ pnote_validator = PnoteClient::Validators::PnoteValidator.new(pnote_document)
136
+ pnote_validate_result = pnote_validator.validate
137
+
128
138
 
129
139
  # PnoteDocument를 JSON 파일로 저장
140
+ puts ""
141
+ puts "=============================================="
142
+ puts "pnote 파일을 json 파일로 저장하는 중입니다..."
143
+ puts "=============================================="
144
+ puts ""
145
+ sleep(1)
130
146
  json = PnoteClient::Converters::PnoteToJsonConverter.new(pnote_document).convert
131
147
  write_file(json, output_filepath)
148
+
149
+
150
+ #로그 파일 저장
151
+ puts ""
152
+ puts "=============================================="
153
+ puts "로그 파일을 저장하는 중입니다..."
154
+ puts "파일 경로: #{log_filepath}"
155
+ puts "=============================================="
156
+ puts ""
157
+ sleep(1)
158
+ save_validation_log_file(hml_validate_result, pnote_validate_result, log_filepath)
159
+
160
+ puts ""
161
+ puts "=============================================="
162
+ puts "변환이 완료되었습니다. (파일 경로: #{output_filepath})"
163
+ puts "hml 파일 검사 결과: 경고 #{hml_validate_result[:warnings].length}개, 에러 #{hml_validate_result[:errors].length}개"
164
+ puts "pnote 파일 검사 결과: 경고 #{pnote_validate_result[:warnings].length}개, 에러 #{pnote_validate_result[:errors].length}개"
165
+ puts ""
166
+ puts "에러가 있을 경우 json 파일 업로드나 LaTeX 렌더링에 문제가 발생할 수 있습니다."
167
+ puts "=============================================="
168
+ puts ""
@@ -6,10 +6,6 @@ module PnoteClient
6
6
  def initialize
7
7
  end
8
8
 
9
- def print_validation(result)
10
- puts "검증 결과: 경고 #{result[:warnings].length}개, 에러 #{result[:errors].length}개"
11
- end
12
-
13
9
  def paragraph_converted(count:, current:)
14
10
  print_progress(count, current, "문단 변환 중")
15
11
 
@@ -11,6 +11,8 @@ module PnoteClient
11
11
  return self.new(script)
12
12
  end
13
13
 
14
+ attr_reader :script
15
+
14
16
  def initialize(script)
15
17
  @script = script
16
18
  @script_converter = ::HwpScriptToLatex::Converter.new
@@ -48,7 +48,7 @@ module PnoteClient
48
48
  return paragraph
49
49
  end
50
50
 
51
- attr_reader :style_id, :shape_id
51
+ attr_reader :style_id, :shape_id, :elements
52
52
  attr_reader :endnote_paragraphs, :footnote_paragraphs
53
53
 
54
54
  def initialize(style_id:, shape_id:)
@@ -0,0 +1,110 @@
1
+ #
2
+ # Author: osh
3
+ # Created: 2019-05-23
4
+ # Last modified: 2019-05-23
5
+
6
+ require 'pnote_client/documents/hml/equation'
7
+
8
+ module PnoteClient
9
+ module Validators
10
+ class HmlValidator
11
+ def initialize(hml_document)
12
+ @hml_document = hml_document
13
+ @result = {
14
+ errors: [],
15
+ warnings: []
16
+ }
17
+ end
18
+
19
+ def validate
20
+ reset_result
21
+ validate_document
22
+ return @result
23
+ end
24
+
25
+ def has_error?
26
+ return error_count > 0
27
+ end
28
+
29
+ def has_warning?
30
+ return warning_count > 0
31
+ end
32
+
33
+ def error_count
34
+ return @result[:errors].length
35
+ end
36
+
37
+ def warning_count
38
+ return @result[:warnings].length
39
+ end
40
+
41
+ private
42
+
43
+ def reset_result
44
+ @result = {
45
+ errors: [],
46
+ warnings: []
47
+ }
48
+ end
49
+
50
+ def validate_document
51
+ @hml_document.paragraphs.each do |paragraph|
52
+ validate_paragraph(paragraph)
53
+
54
+ paragraph.footnote_paragraphs.each do |paragraph|
55
+ validate_paragraph(paragraph)
56
+ end
57
+
58
+ paragraph.endnote_paragraphs.each do |paragraph|
59
+ validate_paragraph(paragraph)
60
+ end
61
+ end
62
+ end
63
+
64
+ def validate_paragraph(paragraph)
65
+ paragraph.elements.each do |element|
66
+ if element.class == Documents::Hml::Equation
67
+ invalids = validate_equation(element)
68
+ invalids.each do |invalid|
69
+ if invalid[:type] == :error
70
+ @result[:errors] << {
71
+ message: invalid[:message],
72
+ detail: paragraph.content
73
+ }
74
+ elsif invalid[:type] == :warning
75
+ @result[:warnings] << {
76
+ message: invalid[:message],
77
+ detail: paragraph.content
78
+ }
79
+ end
80
+ end
81
+ end
82
+ end
83
+ end
84
+
85
+ def validate_equation(equation)
86
+ open_bracket_regex = /(?<![\\])\s*{/
87
+ close_bracket_regex = /(?<![\\])\s*}/
88
+ open_bracket_count = equation.script.scan(open_bracket_regex).length
89
+ close_bracket_count = equation.script.scan(close_bracket_regex).length
90
+ invalids = []
91
+
92
+ if open_bracket_count > close_bracket_count
93
+ invalids << {
94
+ type: :error,
95
+ message: "닫는 중괄호(`}`)가 부족합니다."
96
+ }
97
+ end
98
+
99
+ if open_bracket_count < close_bracket_count
100
+ invalids << {
101
+ type: :error,
102
+ message: "여는 중괄호(`}`)가 부족합니다."
103
+ }
104
+ end
105
+
106
+ return invalids
107
+ end
108
+ end
109
+ end
110
+ end
@@ -6,9 +6,8 @@
6
6
  module PnoteClient
7
7
  module Validators
8
8
  class PnoteValidator
9
- def initialize(pnote_document, display = nil)
9
+ def initialize(pnote_document)
10
10
  @pnote_document = pnote_document
11
- @display = display
12
11
  @result = {
13
12
  errors: [],
14
13
  warnings: []
@@ -18,7 +17,6 @@ module PnoteClient
18
17
  def validate
19
18
  reset_result
20
19
  validate_pnote_document
21
- print_validation_result
22
20
  return @result
23
21
  end
24
22
 
@@ -110,10 +108,6 @@ module PnoteClient
110
108
  }
111
109
  end
112
110
  end
113
-
114
- def print_validation_result
115
- @display&.print_validation(@result)
116
- end
117
111
  end
118
112
  end
119
113
  end
@@ -1,3 +1,3 @@
1
1
  module PnoteClient
2
- VERSION = "2.4.5"
2
+ VERSION = "2.5.0"
3
3
  end
data/pnote_client.gemspec CHANGED
@@ -31,5 +31,5 @@ Gem::Specification.new do |spec|
31
31
  spec.add_development_dependency "rspec", "~> 3.0"
32
32
 
33
33
  spec.add_dependency "nokogiri"
34
- spec.add_dependency "hwp_script_to_latex", '~> 1.3.5'
34
+ spec.add_dependency "hwp_script_to_latex", '~> 1.4.0'
35
35
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pnote_client
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.4.5
4
+ version: 2.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - bluesh55
@@ -72,14 +72,14 @@ dependencies:
72
72
  requirements:
73
73
  - - "~>"
74
74
  - !ruby/object:Gem::Version
75
- version: 1.3.5
75
+ version: 1.4.0
76
76
  type: :runtime
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
80
  - - "~>"
81
81
  - !ruby/object:Gem::Version
82
- version: 1.3.5
82
+ version: 1.4.0
83
83
  description:
84
84
  email:
85
85
  - bluesh55@naver.com
@@ -126,6 +126,7 @@ files:
126
126
  - lib/pnote_client/documents/pnote/sub_chapter.rb
127
127
  - lib/pnote_client/documents/pnote/teacher_comment.rb
128
128
  - lib/pnote_client/utils/string_util.rb
129
+ - lib/pnote_client/validators/hml_validator.rb
129
130
  - lib/pnote_client/validators/pnote_validator.rb
130
131
  - lib/pnote_client/version.rb
131
132
  - pnote_client.gemspec