ZMediumToMarkdown 2.0.5 → 2.0.8
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/bin/ZMediumToMarkdown +7 -2
- data/lib/Helper.rb +13 -4
- data/lib/Models/Paragraph.rb +17 -8
- data/lib/Parsers/BQParser.rb +1 -1
- data/lib/Parsers/IframeParser.rb +14 -8
- data/lib/Parsers/MIXTAPEEMBEDParser.rb +12 -3
- data/lib/Parsers/MarkupParser.rb +2 -2
- data/lib/Parsers/MarkupStyleRender.rb +41 -17
- data/lib/Parsers/PQParser.rb +1 -1
- data/lib/ZMediumFetcher.rb +8 -11
- metadata +2 -3
- data/lib/Parsers/LinkParser.rb +0 -54
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 15f4bb468ab40811678a1a7b38dc51aa6e442b28a8da0b3835dce158f6d90fd4
|
4
|
+
data.tar.gz: 67715feec8e9e7c9f798a61e61529e7846b2db42c86d0c8bd9dd43f3d2de971d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 84f8eece59e468fb75768af6ed756dd96812ea81d8c6e6ecaeabf2c090db5f5bea10c39e8fc8693720322681f5ec902966371d4a95476f6f30ac8ada0782702e
|
7
|
+
data.tar.gz: 66c66d9b514fd8b0c81776e3dff2a466e91d291ebd9c466de8f6ca8ad19e7ba1d89aa154fa768e746194031805bf8722dbb8f0569b143e2700d04b550c0ce35f
|
data/bin/ZMediumToMarkdown
CHANGED
@@ -76,7 +76,7 @@ end
|
|
76
76
|
begin
|
77
77
|
puts "#https://github.com/ZhgChgLi/ZMediumToMarkdown"
|
78
78
|
puts "You have read and agree with the Disclaimer."
|
79
|
-
Main.new()
|
79
|
+
#Main.new()
|
80
80
|
puts "Execute Successfully!!!"
|
81
81
|
puts "#https://github.com/ZhgChgLi/ZMediumToMarkdown"
|
82
82
|
puts "#Thanks for using this tool."
|
@@ -86,4 +86,9 @@ rescue => e
|
|
86
86
|
puts e.backtrace
|
87
87
|
puts "#Please feel free to open an Issue or submit a fix/contribution via Pull Request on:\n"
|
88
88
|
puts "#https://github.com/ZhgChgLi/ZMediumToMarkdown\n"
|
89
|
-
end
|
89
|
+
end
|
90
|
+
|
91
|
+
obj = JSON.parse('{ "id": "e41429008434_63", "name": "35a0", "type": "ULI", "href": null, "layout": null, "metadata": null, "text": "[New] Customer reviews", "hasDropCap": null, "dropCapImage": null, "markups": [ { "type": "A", "start": 6, "end": 22, "href": "https://developer.apple.com/documentation/appstoreconnectapi/app_store/customer_reviews", "anchorType": "LINK", "userId": null, "linkMetadata": null, "__typename": "Markup" }, { "type": "STRONG", "start": 0, "end": 6, "href": null, "anchorType": null, "userId": null, "linkMetadata": null, "__typename": "Markup" } ], "__typename": "Paragraph", "iframe": null, "mixtapeMetadata": null }')
|
92
|
+
p = Paragraph.new(obj, "100")
|
93
|
+
r = MarkupParser.new(p, false)
|
94
|
+
puts r.parse()
|
data/lib/Helper.rb
CHANGED
@@ -19,6 +19,10 @@ class Helper
|
|
19
19
|
content
|
20
20
|
end
|
21
21
|
|
22
|
+
def self.escapeMarkdown(text)
|
23
|
+
text.gsub(/(\*|_|`|\||\\|\{|\}|\[|\]|\(|\)|#|\+|\-|\.|\!)/){ |x| "\\#{x}" }
|
24
|
+
end
|
25
|
+
|
22
26
|
def self.escapeHTML(text)
|
23
27
|
if text == "<"
|
24
28
|
"<"
|
@@ -101,8 +105,8 @@ class Helper
|
|
101
105
|
result = "---\n"
|
102
106
|
result += "title: #{title}\n"
|
103
107
|
result += "author: #{postInfo.creator}\n"
|
104
|
-
result += "date: #{postInfo.firstPublishedAt.strftime('%Y-%m-%dT%H:%M:%S.%
|
105
|
-
result += "last_modified_at: #{postInfo.latestPublishedAt.strftime('%Y-%m-%dT%H:%M:%S.%
|
108
|
+
result += "date: #{postInfo.firstPublishedAt.strftime('%Y-%m-%dT%H:%M:%S.%L%z')}\n"
|
109
|
+
result += "last_modified_at: #{postInfo.latestPublishedAt.strftime('%Y-%m-%dT%H:%M:%S.%L%z')}\n"
|
106
110
|
result += "categories: #{postInfo.collectionName}\n"
|
107
111
|
result += "tags: [#{postInfo.tags.join(",")}]\n"
|
108
112
|
result += "description: #{postInfo.description}\n"
|
@@ -185,9 +189,14 @@ class Helper
|
|
185
189
|
end
|
186
190
|
|
187
191
|
|
188
|
-
def self.createWatermark(postURL)
|
192
|
+
def self.createWatermark(postURL, isForJekyll)
|
193
|
+
jekyllOpen = ""
|
194
|
+
if isForJekyll
|
195
|
+
jekyllOpen = "{:target=\"_blank\"}"
|
196
|
+
end
|
197
|
+
|
189
198
|
text = "\r\n\r\n\r\n"
|
190
|
-
text += "_Converted [Medium Post](#{postURL}) by [ZMediumToMarkdown](https://github.com/ZhgChgLi/ZMediumToMarkdown)._"
|
199
|
+
text += "_Converted [Medium Post](#{postURL})#{jekyllOpen} by [ZMediumToMarkdown](https://github.com/ZhgChgLi/ZMediumToMarkdown)#{jekyllOpen}._"
|
191
200
|
text += "\r\n"
|
192
201
|
|
193
202
|
text
|
data/lib/Models/Paragraph.rb
CHANGED
@@ -96,14 +96,23 @@ class Paragraph
|
|
96
96
|
end
|
97
97
|
end
|
98
98
|
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
99
|
+
index = 0
|
100
|
+
orgText.each_char do |char|
|
101
|
+
|
102
|
+
if char.chars.join() =~ /(\*|_|`|\||\\|\{|\}|\[|\]|\(|\)|#|\+|\-|\.|\!)/
|
103
|
+
escapeMarkup = {
|
104
|
+
"type" => 'ESCAPE',
|
105
|
+
"start" => index,
|
106
|
+
"end" => index + 1
|
107
|
+
}
|
108
|
+
markups.append(Markup.new(escapeMarkup))
|
109
|
+
end
|
110
|
+
|
111
|
+
index += 1
|
112
|
+
if char.bytes.length >= 4
|
113
|
+
# some emoji need more space (in Medium)
|
114
|
+
index += 1
|
115
|
+
end
|
107
116
|
end
|
108
117
|
|
109
118
|
@markups = markups
|
data/lib/Parsers/BQParser.rb
CHANGED
data/lib/Parsers/IframeParser.rb
CHANGED
@@ -19,6 +19,12 @@ class IframeParser < Parser
|
|
19
19
|
end
|
20
20
|
|
21
21
|
def parse(paragraph)
|
22
|
+
|
23
|
+
jekyllOpen = ""
|
24
|
+
if isForJekyll
|
25
|
+
jekyllOpen = "{:target=\"_blank\"}"
|
26
|
+
end
|
27
|
+
|
22
28
|
if paragraph.type == 'IFRAME'
|
23
29
|
|
24
30
|
if !paragraph.iframe.src.nil? && paragraph.iframe.src != ""
|
@@ -27,7 +33,7 @@ class IframeParser < Parser
|
|
27
33
|
url = "https://medium.com/media/#{paragraph.iframe.id}"
|
28
34
|
end
|
29
35
|
|
30
|
-
result = "[#{paragraph.iframe.title}](#{url})"
|
36
|
+
result = "[#{paragraph.iframe.title}](#{url})#{jekyllOpen}"
|
31
37
|
|
32
38
|
if !url[/(www\.youtube\.com)/].nil?
|
33
39
|
# is youtube
|
@@ -49,12 +55,12 @@ class IframeParser < Parser
|
|
49
55
|
if ImageDownloader.download(absolutePath, imageURL)
|
50
56
|
relativePath = imagePathPolicy.getRelativePath(fileName)
|
51
57
|
if isForJekyll
|
52
|
-
result = "\r\n\r\n[](#{params["url"]})\r\n\r\n"
|
58
|
+
result = "\r\n\r\n[](#{params["url"]})#{jekyllOpen}\r\n\r\n"
|
53
59
|
else
|
54
|
-
result = "\r\n\r\n[](#{params["url"]})\r\n\r\n"
|
60
|
+
result = "\r\n\r\n[](#{params["url"]})#{jekyllOpen}\r\n\r\n"
|
55
61
|
end
|
56
62
|
else
|
57
|
-
result = "\r\n[#{title}](#{params["url"]})\r\n"
|
63
|
+
result = "\r\n[#{title}](#{params["url"]})#{jekyllOpen}\r\n"
|
58
64
|
end
|
59
65
|
end
|
60
66
|
else
|
@@ -118,9 +124,9 @@ class IframeParser < Parser
|
|
118
124
|
createdAt = Time.parse(twitterObj["created_at"]).strftime('%Y-%m-%d %H:%M:%S')
|
119
125
|
result = "\n\n"
|
120
126
|
result += "■■■■■■■■■■■■■■ \n"
|
121
|
-
result += "> **[#{twitterObj["user"]["name"]}](https://twitter.com/#{twitterObj["user"]["screen_name"]}) @ Twitter Says:** \n\n"
|
127
|
+
result += "> **[#{twitterObj["user"]["name"]}](https://twitter.com/#{twitterObj["user"]["screen_name"]})#{jekyllOpen} @ Twitter Says:** \n\n"
|
122
128
|
result += "> > #{fullText} \n\n"
|
123
|
-
result += "> **Tweeted at [#{createdAt}](#{ogURL}).** \n\n"
|
129
|
+
result += "> **Tweeted at [#{createdAt}](#{ogURL})#{jekyllOpen}.** \n\n"
|
124
130
|
result += "■■■■■■■■■■■■■■ \n\n"
|
125
131
|
end
|
126
132
|
else
|
@@ -132,9 +138,9 @@ class IframeParser < Parser
|
|
132
138
|
end
|
133
139
|
|
134
140
|
if !ogImageURL.nil?
|
135
|
-
result = "\r\n\r\n[](#{ogURL})\r\n\r\n"
|
141
|
+
result = "\r\n\r\n[](#{ogURL})#{jekyllOpen}\r\n\r\n"
|
136
142
|
else
|
137
|
-
result = "[#{title}](#{ogURL})"
|
143
|
+
result = "[#{title}](#{ogURL})#{jekyllOpen}"
|
138
144
|
end
|
139
145
|
end
|
140
146
|
end
|
@@ -5,15 +5,24 @@ require "Parsers/Parser"
|
|
5
5
|
require 'Models/Paragraph'
|
6
6
|
|
7
7
|
class MIXTAPEEMBEDParser < Parser
|
8
|
-
attr_accessor :nextParser
|
8
|
+
attr_accessor :nextParser, :isForJekyll
|
9
|
+
|
10
|
+
def initialize(isForJekyll)
|
11
|
+
@isForJekyll = isForJekyll
|
12
|
+
end
|
13
|
+
|
9
14
|
def parse(paragraph)
|
10
15
|
if paragraph.type == 'MIXTAPE_EMBED'
|
11
16
|
if !paragraph.mixtapeMetadata.nil? && !paragraph.mixtapeMetadata.href.nil?
|
12
17
|
ogImageURL = Helper.fetchOGImage(paragraph.mixtapeMetadata.href)
|
13
18
|
if !ogImageURL.nil?
|
14
|
-
|
19
|
+
jekyllOpen = ""
|
20
|
+
if isForJekyll
|
21
|
+
jekyllOpen = "{:target=\"_blank\"}"
|
22
|
+
end
|
23
|
+
"\r\n\r\n[](#{paragraph.mixtapeMetadata.href})#{jekyllOpen}\r\n\r\n"
|
15
24
|
else
|
16
|
-
"\n
|
25
|
+
"\n#{paragraph.text}"
|
17
26
|
end
|
18
27
|
else
|
19
28
|
"\n#{paragraph.text}"
|
data/lib/Parsers/MarkupParser.rb
CHANGED
@@ -7,7 +7,7 @@ require 'securerandom'
|
|
7
7
|
require 'User'
|
8
8
|
|
9
9
|
class MarkupParser
|
10
|
-
attr_accessor :body, :paragraph, :isForJekyll
|
10
|
+
attr_accessor :body, :paragraph, :isForJekyll, :usersPostURLs
|
11
11
|
|
12
12
|
def initialize(paragraph, isForJekyll)
|
13
13
|
@paragraph = paragraph
|
@@ -18,7 +18,7 @@ class MarkupParser
|
|
18
18
|
result = paragraph.text
|
19
19
|
if !paragraph.markups.nil? && paragraph.markups.length > 0
|
20
20
|
markupRender = MarkupStyleRender.new(paragraph, isForJekyll)
|
21
|
-
|
21
|
+
markupRender.usersPostURLs = usersPostURLs
|
22
22
|
begin
|
23
23
|
result = markupRender.parse()
|
24
24
|
rescue => e
|
@@ -5,7 +5,7 @@ require 'Models/Paragraph'
|
|
5
5
|
require 'Helper'
|
6
6
|
|
7
7
|
class MarkupStyleRender
|
8
|
-
attr_accessor :paragraph, :chars, :encodeType, :isForJekyll
|
8
|
+
attr_accessor :paragraph, :chars, :encodeType, :isForJekyll, :usersPostURLs
|
9
9
|
|
10
10
|
class TextChar
|
11
11
|
attr_accessor :chars, :type
|
@@ -171,11 +171,11 @@ class MarkupStyleRender
|
|
171
171
|
if markup.type == "EM"
|
172
172
|
tag = TagChar.new(2, markup.start, markup.end, "_", "_")
|
173
173
|
elsif markup.type == "CODE"
|
174
|
-
tag = TagChar.new(
|
174
|
+
tag = TagChar.new(0, markup.start, markup.end, "`", "`")
|
175
175
|
elsif markup.type == "STRONG"
|
176
176
|
tag = TagChar.new(2, markup.start, markup.end, "**", "**")
|
177
177
|
elsif markup.type == "ESCAPE"
|
178
|
-
escapeTagChar = TagChar.new(
|
178
|
+
escapeTagChar = TagChar.new(999,markup.start, markup.end,'','')
|
179
179
|
escapeTagChar.startChars = TextChar.new('\\'.chars,'Text')
|
180
180
|
escapeTagChar.endChars = TextChar.new([],'Text')
|
181
181
|
|
@@ -188,7 +188,27 @@ class MarkupStyleRender
|
|
188
188
|
url = "https://medium.com/u/#{markup.userId}"
|
189
189
|
end
|
190
190
|
|
191
|
-
|
191
|
+
lastPath = url.split("/").last
|
192
|
+
lastQuery = nil
|
193
|
+
if !lastPath.nil?
|
194
|
+
lastQuery = lastPath.split("-").last
|
195
|
+
end
|
196
|
+
|
197
|
+
if !usersPostURLs.nil? && !usersPostURLs.find { |usersPostURL| usersPostURL.split("/").last.split("-").last == lastQuery }.nil?
|
198
|
+
if isForJekyll
|
199
|
+
url = "(../#{lastQuery}/)"
|
200
|
+
else
|
201
|
+
url = "(#{lastPath})"
|
202
|
+
end
|
203
|
+
else
|
204
|
+
if isForJekyll
|
205
|
+
url = "(#{url}){:target=\"_blank\"}"
|
206
|
+
else
|
207
|
+
url = "(#{url})"
|
208
|
+
end
|
209
|
+
end
|
210
|
+
|
211
|
+
tag = TagChar.new(1, markup.start, markup.end, "[", "]#{url}")
|
192
212
|
else
|
193
213
|
Helper.makeWarningText("Undefined Markup Type: #{markup.type}.")
|
194
214
|
end
|
@@ -205,6 +225,15 @@ class MarkupStyleRender
|
|
205
225
|
|
206
226
|
chars.each do |index, char|
|
207
227
|
|
228
|
+
# is in code block
|
229
|
+
if !stack.last.nil? && stack.last.endChars.chars.join() == "`"
|
230
|
+
containEndTag = tags.select { |tag| tag.endIndex == index && tag.endChars.chars.join() == "`" }.length > 0
|
231
|
+
if !containEndTag
|
232
|
+
response.append(char)
|
233
|
+
next
|
234
|
+
end
|
235
|
+
end
|
236
|
+
|
208
237
|
if char.chars.join() == "\n"
|
209
238
|
brStack = stack.dup
|
210
239
|
while brStack.length > 0
|
@@ -228,21 +257,16 @@ class MarkupStyleRender
|
|
228
257
|
end
|
229
258
|
|
230
259
|
if char.chars.join() != "\n"
|
231
|
-
|
232
|
-
|
233
|
-
|
234
|
-
else
|
235
|
-
resultChar = Helper.escapeMarkdown(char.chars.join())
|
236
|
-
if isForJekyll
|
237
|
-
resultChar = Helper.escapeHTML(resultChar)
|
238
|
-
end
|
239
|
-
|
240
|
-
response.append(TextChar.new(resultChar.chars, "Text"))
|
260
|
+
resultChar = char.chars.join()
|
261
|
+
if isForJekyll
|
262
|
+
resultChar = Helper.escapeHTML(resultChar)
|
241
263
|
end
|
264
|
+
|
265
|
+
response.append(TextChar.new(resultChar.chars, "Text"))
|
242
266
|
end
|
243
267
|
|
244
268
|
endTags = tags.select { |tag| tag.endIndex == index }
|
245
|
-
if
|
269
|
+
if endTags.length > 0
|
246
270
|
mismatchTags = []
|
247
271
|
while endTags.length > 0
|
248
272
|
stackTag = stack.pop
|
@@ -268,14 +292,14 @@ class MarkupStyleRender
|
|
268
292
|
tag = stack.pop
|
269
293
|
response.push(tag.endChars)
|
270
294
|
end
|
271
|
-
|
295
|
+
|
272
296
|
response = optimize(response)
|
273
297
|
result = response.map{ |response| response.chars }.join()
|
274
298
|
|
275
299
|
else
|
276
300
|
response = []
|
277
301
|
chars.each do |index, char|
|
278
|
-
resultChar =
|
302
|
+
resultChar = char
|
279
303
|
if isForJekyll
|
280
304
|
resultChar = escapeHTML(char)
|
281
305
|
end
|
data/lib/Parsers/PQParser.rb
CHANGED
data/lib/ZMediumFetcher.rb
CHANGED
@@ -19,7 +19,6 @@ require "Parsers/MarkupParser"
|
|
19
19
|
require "Parsers/OLIParser"
|
20
20
|
require "Parsers/MIXTAPEEMBEDParser"
|
21
21
|
require "Parsers/PQParser"
|
22
|
-
require "Parsers/LinkParser"
|
23
22
|
require "Parsers/CodeBlockParser"
|
24
23
|
|
25
24
|
require "PathPolicy"
|
@@ -30,7 +29,7 @@ require 'date'
|
|
30
29
|
|
31
30
|
class ZMediumFetcher
|
32
31
|
|
33
|
-
attr_accessor :progress, :
|
32
|
+
attr_accessor :progress, :usersPostURLs, :isForJekyll
|
34
33
|
|
35
34
|
class Progress
|
36
35
|
attr_accessor :username, :postPath, :currentPostIndex, :totalPostsLength, :currentPostParagraphIndex, :totalPostParagraphsLength, :message
|
@@ -71,7 +70,7 @@ class ZMediumFetcher
|
|
71
70
|
|
72
71
|
def initialize
|
73
72
|
@progress = Progress.new()
|
74
|
-
@
|
73
|
+
@usersPostURLs = nil
|
75
74
|
@isForJekyll = false
|
76
75
|
end
|
77
76
|
|
@@ -89,7 +88,7 @@ class ZMediumFetcher
|
|
89
88
|
ppParser.setNext(uliParser)
|
90
89
|
oliParser = OLIParser.new()
|
91
90
|
uliParser.setNext(oliParser)
|
92
|
-
mixtapeembedParser = MIXTAPEEMBEDParser.new()
|
91
|
+
mixtapeembedParser = MIXTAPEEMBEDParser.new(isForJekyll)
|
93
92
|
oliParser.setNext(mixtapeembedParser)
|
94
93
|
pqParser = PQParser.new()
|
95
94
|
mixtapeembedParser.setNext(pqParser)
|
@@ -223,8 +222,6 @@ class ZMediumFetcher
|
|
223
222
|
progress.message = "Converting Post..."
|
224
223
|
progress.printLog()
|
225
224
|
|
226
|
-
linkParser.isForJekyll = isForJekyll
|
227
|
-
|
228
225
|
postWithDatePath = "#{postInfo.firstPublishedAt.strftime("%Y-%m-%d")}-#{postPath}"
|
229
226
|
|
230
227
|
absolutePath = postPathPolicy.getAbsolutePath("#{postWithDatePath}.md")
|
@@ -236,7 +233,7 @@ class ZMediumFetcher
|
|
236
233
|
if lines.first.start_with?("---")
|
237
234
|
dateLine = lines.select { |line| line.start_with?("last_modified_at:") }.first
|
238
235
|
if !dateLine.nil?
|
239
|
-
fileLatestPublishedAt = Time.parse(dateLine[/^(last_modified_at:)\s+(\S*)/, 2]).to_i
|
236
|
+
#fileLatestPublishedAt = Time.parse(dateLine[/^(last_modified_at:)\s+(\S*)/, 2]).to_i
|
240
237
|
end
|
241
238
|
end
|
242
239
|
end
|
@@ -260,12 +257,12 @@ class ZMediumFetcher
|
|
260
257
|
|
261
258
|
if !(CodeBlockParser.isCodeBlock(paragraph) || PREParser.isPRE(paragraph))
|
262
259
|
markupParser = MarkupParser.new(paragraph, isForJekyll)
|
260
|
+
markupParser.usersPostURLs = usersPostURLs
|
263
261
|
paragraph.text = markupParser.parse()
|
264
262
|
end
|
265
263
|
|
266
264
|
result = startParser.parse(paragraph)
|
267
|
-
|
268
|
-
|
265
|
+
|
269
266
|
file.puts(result)
|
270
267
|
|
271
268
|
index += 1
|
@@ -274,7 +271,7 @@ class ZMediumFetcher
|
|
274
271
|
progress.printLog()
|
275
272
|
end
|
276
273
|
|
277
|
-
postWatermark = Helper.createWatermark(postURL)
|
274
|
+
postWatermark = Helper.createWatermark(postURL, isForJekyll)
|
278
275
|
if !postWatermark.nil?
|
279
276
|
file.puts(postWatermark)
|
280
277
|
end
|
@@ -311,7 +308,7 @@ class ZMediumFetcher
|
|
311
308
|
nextID = postPageInfo["nextID"]
|
312
309
|
end while !nextID.nil?
|
313
310
|
|
314
|
-
|
311
|
+
@usersPostURLs = postURLS
|
315
312
|
|
316
313
|
progress.totalPostsLength = postURLS.length
|
317
314
|
progress.currentPostIndex = 0
|
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: 2.0.
|
4
|
+
version: 2.0.8
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- ZhgChgLi
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-07-
|
11
|
+
date: 2022-07-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: nokogiri
|
@@ -74,7 +74,6 @@ files:
|
|
74
74
|
- lib/Parsers/H4Parser.rb
|
75
75
|
- lib/Parsers/IMGParser.rb
|
76
76
|
- lib/Parsers/IframeParser.rb
|
77
|
-
- lib/Parsers/LinkParser.rb
|
78
77
|
- lib/Parsers/MIXTAPEEMBEDParser.rb
|
79
78
|
- lib/Parsers/MarkupParser.rb
|
80
79
|
- lib/Parsers/MarkupStyleRender.rb
|
data/lib/Parsers/LinkParser.rb
DELETED
@@ -1,54 +0,0 @@
|
|
1
|
-
$lib = File.expand_path('../', File.dirname(__FILE__))
|
2
|
-
|
3
|
-
require 'Models/Paragraph'
|
4
|
-
|
5
|
-
class LinkParser
|
6
|
-
attr_accessor :usersPostURLs, :isForJekyll
|
7
|
-
|
8
|
-
def initialize()
|
9
|
-
@usersPostURLs = []
|
10
|
-
@isForJekyll = false
|
11
|
-
end
|
12
|
-
|
13
|
-
def parse(markdownString)
|
14
|
-
matchLinks = markdownString.scan(/\[[^\]]*\]\(([^\)]+)\)/m)
|
15
|
-
if !matchLinks.nil?
|
16
|
-
|
17
|
-
matchLinks.each do |matchLink|
|
18
|
-
link = matchLink[0]
|
19
|
-
linkMarkdown = "(#{link})"
|
20
|
-
newLinkMarkdown = linkMarkdown
|
21
|
-
|
22
|
-
if isForJekyll
|
23
|
-
newLinkMarkdown = "(#{link}){:target=\"_blank\"}"
|
24
|
-
end
|
25
|
-
|
26
|
-
|
27
|
-
if !usersPostURLs.nil?
|
28
|
-
# if have provide user's post urls
|
29
|
-
# find & replace medium url to local post url if matched
|
30
|
-
|
31
|
-
if isForJekyll
|
32
|
-
postPath = link.split("/").last.split("-").last
|
33
|
-
else
|
34
|
-
postPath = link.split("/").last
|
35
|
-
end
|
36
|
-
|
37
|
-
if !usersPostURLs.find { |usersPostURL| usersPostURL.split("/").last.split("-").last == postPath.split("-").last }.nil?
|
38
|
-
if isForJekyll
|
39
|
-
newLinkMarkdown = "(../#{postPath}/)"
|
40
|
-
else
|
41
|
-
newLinkMarkdown = "(#{postPath})"
|
42
|
-
end
|
43
|
-
end
|
44
|
-
end
|
45
|
-
|
46
|
-
if linkMarkdown != newLinkMarkdown
|
47
|
-
markdownString = markdownString.sub! linkMarkdown, newLinkMarkdown
|
48
|
-
end
|
49
|
-
end
|
50
|
-
end
|
51
|
-
|
52
|
-
markdownString
|
53
|
-
end
|
54
|
-
end
|