ZMediumToMarkdown 1.7.4 → 1.7.7
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/bin/ZMediumToMarkdown +0 -8
- data/lib/Helper.rb +14 -0
- data/lib/Models/Paragraph.rb +4 -1
- data/lib/Parsers/IMGParser.rb +6 -6
- data/lib/Parsers/MarkupParser.rb +5 -4
- data/lib/Parsers/MarkupStyleRender.rb +24 -3
- data/lib/ZMediumFetcher.rb +2 -2
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6f34b1b96683e25673872ff046d9baaeda079d595d5163fbcf894e0fc3bf340c
|
4
|
+
data.tar.gz: e852a11256fe0789472182bb43d0cb9a15f75439676043703dc368e0a153e06a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7ba230c20dfd3f9638ed837f7a989de1c0fa0309db3865390d6b7616c6f2dcc0321c70acc49875128fb83225d8a892e51ffe7726d06c7311aae30830841d843d
|
7
|
+
data.tar.gz: f8936158de2a595047cf989f7fabaed2602aec4502f2e2480bef81659980f08ead77e0647a024d1eb4efb72cf4614448abada9d7cecec5741960a8aeb98f5048
|
data/bin/ZMediumToMarkdown
CHANGED
@@ -48,14 +48,6 @@ class Main
|
|
48
48
|
Helper.printNewVersionMessageIfExists()
|
49
49
|
end
|
50
50
|
|
51
|
-
opts.on('-cPOST_URL', '--jekyllPostURL=POST_URL', 'Downloading single post with Jekyll friendly') do |postURL|
|
52
|
-
outputFilePath = PathPolicy.new(filePath, "/")
|
53
|
-
fetcher.isForJekyll = true
|
54
|
-
fetcher.downloadPost(postURL, outputFilePath)
|
55
|
-
|
56
|
-
Helper.printNewVersionMessageIfExists()
|
57
|
-
end
|
58
|
-
|
59
51
|
opts.on('-n', '--new', 'Update to latest version') do
|
60
52
|
if Helper.getRemoteVersionFromGithub() > Helper.getLocalVersion()
|
61
53
|
Helper.downloadLatestVersion()
|
data/lib/Helper.rb
CHANGED
@@ -11,6 +11,20 @@ require 'zip'
|
|
11
11
|
|
12
12
|
class Helper
|
13
13
|
|
14
|
+
def self.escapeMarkdown(text)
|
15
|
+
text.gsub(/(\*|_|`|\||\\|\{|\}\[|\]|\(|\)|#|\+|\-|\.|\!)/){ |x| "\\#{x}" }
|
16
|
+
end
|
17
|
+
|
18
|
+
def self.escapeHTML(text)
|
19
|
+
if text == "<"
|
20
|
+
"<"
|
21
|
+
elsif text == ">"
|
22
|
+
">"
|
23
|
+
else
|
24
|
+
text
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
14
28
|
def self.createDirIfNotExist(dirPath)
|
15
29
|
dirs = dirPath.split("/")
|
16
30
|
currentDir = ""
|
data/lib/Models/Paragraph.rb
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
$lib = File.expand_path('../', File.dirname(__FILE__))
|
2
2
|
|
3
|
+
require 'Helper'
|
3
4
|
require 'Parsers/PParser'
|
4
5
|
require 'securerandom'
|
5
6
|
|
@@ -60,11 +61,13 @@ class Paragraph
|
|
60
61
|
def initialize(json, postID)
|
61
62
|
@name = json['name']
|
62
63
|
@text = json['text']
|
63
|
-
@orgText = json['text']
|
64
64
|
@type = json['type']
|
65
65
|
@href = json['href']
|
66
66
|
@postID = postID
|
67
67
|
|
68
|
+
orgText = Helper.escapeMarkdown(json['text'])
|
69
|
+
@orgText = orgText
|
70
|
+
|
68
71
|
if json['metadata'].nil?
|
69
72
|
@metadata = nil
|
70
73
|
else
|
data/lib/Parsers/IMGParser.rb
CHANGED
@@ -24,20 +24,20 @@ class IMGParser < Parser
|
|
24
24
|
absolutePath = imagePathPolicy.getAbsolutePath(fileName)
|
25
25
|
|
26
26
|
result = ""
|
27
|
-
|
28
|
-
if paragraph.orgText != ""
|
29
|
-
|
27
|
+
alt = ""
|
28
|
+
if paragraph.orgText != ""
|
29
|
+
alt = " \"#{paragraph.orgText}\""
|
30
30
|
end
|
31
31
|
|
32
32
|
if ImageDownloader.download(absolutePath, imageURL)
|
33
33
|
relativePath = "#{pathPolicy.getRelativePath(nil)}/#{imagePathPolicy.getRelativePath(fileName)}"
|
34
34
|
if isForJekyll
|
35
|
-
result = "\r\n![#{paragraph.
|
35
|
+
result = "\r\n![#{paragraph.orgText}](/#{relativePath}#{alt})\r\n"
|
36
36
|
else
|
37
|
-
result = "\r\n![#{paragraph.
|
37
|
+
result = "\r\n![#{paragraph.orgText}](#{relativePath}#{alt})\r\n"
|
38
38
|
end
|
39
39
|
else
|
40
|
-
result = "\r\n![#{paragraph.
|
40
|
+
result = "\r\n![#{paragraph.orgText}](#{imageURL}#{alt})\r\n"
|
41
41
|
end
|
42
42
|
|
43
43
|
if paragraph.text != ""
|
data/lib/Parsers/MarkupParser.rb
CHANGED
@@ -7,16 +7,17 @@ require 'securerandom'
|
|
7
7
|
require 'User'
|
8
8
|
|
9
9
|
class MarkupParser
|
10
|
-
attr_accessor :body, :paragraph
|
11
|
-
|
12
|
-
def initialize(paragraph)
|
10
|
+
attr_accessor :body, :paragraph, :isForJekyll
|
11
|
+
|
12
|
+
def initialize(paragraph, isForJekyll)
|
13
13
|
@paragraph = paragraph
|
14
|
+
@isForJekyll = isForJekyll
|
14
15
|
end
|
15
16
|
|
16
17
|
def parse()
|
17
18
|
result = paragraph.text
|
18
19
|
if !paragraph.markups.nil? && paragraph.markups.length > 0
|
19
|
-
markupRender = MarkupStyleRender.new(paragraph)
|
20
|
+
markupRender = MarkupStyleRender.new(paragraph, isForJekyll)
|
20
21
|
|
21
22
|
begin
|
22
23
|
result = markupRender.parse()
|
@@ -2,9 +2,10 @@
|
|
2
2
|
$lib = File.expand_path('../', File.dirname(__FILE__))
|
3
3
|
|
4
4
|
require 'Models/Paragraph'
|
5
|
+
require 'Helper'
|
5
6
|
|
6
7
|
class MarkupStyleRender
|
7
|
-
attr_accessor :paragraph, :chars, :encodeType
|
8
|
+
attr_accessor :paragraph, :chars, :encodeType, :isForJekyll
|
8
9
|
|
9
10
|
class TextChar
|
10
11
|
attr_accessor :chars, :type
|
@@ -26,8 +27,9 @@ class MarkupStyleRender
|
|
26
27
|
end
|
27
28
|
|
28
29
|
|
29
|
-
def initialize(paragraph)
|
30
|
+
def initialize(paragraph, isForJekyll)
|
30
31
|
@paragraph = paragraph
|
32
|
+
@isForJekyll = isForJekyll
|
31
33
|
|
32
34
|
chars = {}
|
33
35
|
index = 0
|
@@ -189,7 +191,12 @@ class MarkupStyleRender
|
|
189
191
|
end
|
190
192
|
|
191
193
|
if char.chars.join() != "\n"
|
192
|
-
|
194
|
+
resultChar = Helper.escapeMarkdown(char.chars.join())
|
195
|
+
if isForJekyll
|
196
|
+
resultChar = Helper.escapeHTML(resultChar)
|
197
|
+
end
|
198
|
+
|
199
|
+
response.append(TextChar.new(resultChar.chars, "Text"))
|
193
200
|
end
|
194
201
|
|
195
202
|
endTags = tags.select { |tag| tag.endIndex == index }
|
@@ -220,6 +227,20 @@ class MarkupStyleRender
|
|
220
227
|
response.push(tag.endChars)
|
221
228
|
end
|
222
229
|
|
230
|
+
response = optimize(response)
|
231
|
+
result = response.map{ |response| response.chars }.join()
|
232
|
+
|
233
|
+
else
|
234
|
+
response = []
|
235
|
+
chars.each do |index, char|
|
236
|
+
resultChar = escapeMarkdown(char)
|
237
|
+
if isForJekyll
|
238
|
+
resultChar = escapeHTML(char)
|
239
|
+
end
|
240
|
+
|
241
|
+
response.append(resultChar)
|
242
|
+
end
|
243
|
+
|
223
244
|
response = optimize(response)
|
224
245
|
result = response.map{ |response| response.chars }.join()
|
225
246
|
end
|
data/lib/ZMediumFetcher.rb
CHANGED
@@ -186,7 +186,7 @@ class ZMediumFetcher
|
|
186
186
|
groupByText += "\n"
|
187
187
|
end
|
188
188
|
|
189
|
-
markupParser = MarkupParser.new(preTypeParagraph)
|
189
|
+
markupParser = MarkupParser.new(preTypeParagraph, isForJekyll)
|
190
190
|
groupByText += markupParser.parse()
|
191
191
|
end
|
192
192
|
|
@@ -244,7 +244,7 @@ class ZMediumFetcher
|
|
244
244
|
paragraphs.each do |paragraph|
|
245
245
|
|
246
246
|
if !(CodeBlockParser.isCodeBlock(paragraph) || PREParser.isPRE(paragraph))
|
247
|
-
markupParser = MarkupParser.new(paragraph)
|
247
|
+
markupParser = MarkupParser.new(paragraph, isForJekyll)
|
248
248
|
paragraph.text = markupParser.parse()
|
249
249
|
end
|
250
250
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ZMediumToMarkdown
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.7.
|
4
|
+
version: 1.7.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- ZhgChgLi
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-06-
|
11
|
+
date: 2022-06-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: nokogiri
|