xuite_blog_to_hugo_gem 0.0.1
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 +7 -0
- data/bin/xuite_blog_to_hugo_gem +4 -0
- data/lib/xuite_blog_to_hugo_gem.rb +175 -0
- metadata +74 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 43f70bd2e068e61196adf229f70c480fbd00b5a416ed76713188e17248d5ec52
|
4
|
+
data.tar.gz: 5039821a6fa8b9ff5e123bcdcdadc08f0cc1669e8126c49c57d46124d2a4bfce
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: e558cc92dc4670f08416fa57437f94db38a1795eaf79ad079a40166e550b6b6033ff61ab1644395749b64e277810c7d05aec456c6129453e0aa16de7bb621c8e
|
7
|
+
data.tar.gz: 1e52de9342f117da4550ccca08a73b3ee840cddd40bd1f954d7a0eb271b74bb1f41258fce870d457f95201d20550b16f7f33f66db2ef41dcd3f6fc0d07fcf6c0
|
@@ -0,0 +1,175 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
# author: howardsun
|
3
|
+
# Date: 2019/12/16
|
4
|
+
# Transform exported M.T. file(Movable type file) of xuite blog to be markdown-type file of hugo static site generator with liva-hugo theme posts.
|
5
|
+
|
6
|
+
require 'reverse_markdown'
|
7
|
+
require 'date'
|
8
|
+
require 'yaml'
|
9
|
+
|
10
|
+
module XuiteBlogToHugoGem
|
11
|
+
|
12
|
+
if ARGV.length != 1
|
13
|
+
# 如果命令列不符合只有一個參數的條件,一律不執行本程式後續內容,直接結束
|
14
|
+
exit
|
15
|
+
end
|
16
|
+
|
17
|
+
if File.exist?(ARGV[0]) == false
|
18
|
+
# 如果命令列的第一個參數表示的檔案不存在,一律不執行本程式後續內容,直接結束
|
19
|
+
exit
|
20
|
+
end
|
21
|
+
|
22
|
+
# load input file
|
23
|
+
input_file = File.open(ARGV[0], "r")
|
24
|
+
#input_file = File.open('./input/sample-input.txt_', "r")
|
25
|
+
raw_content = input_file.read
|
26
|
+
input_file.close
|
27
|
+
|
28
|
+
|
29
|
+
# Notice: need to save input file as LF as line separator. If it is CRLF, convert it to LF.
|
30
|
+
if (raw_content.match?(/\r\n/u))
|
31
|
+
raw_content.gsub!(/\r\n/u, "\n")
|
32
|
+
end
|
33
|
+
|
34
|
+
if (raw_content.match?(/\r/u))
|
35
|
+
# replace \r with \n
|
36
|
+
raw_content.gsub!(/\r/u, "\n")
|
37
|
+
end
|
38
|
+
|
39
|
+
|
40
|
+
# need append file first 8 bytes with "-" character
|
41
|
+
raw_content.prepend("--------\n")
|
42
|
+
|
43
|
+
|
44
|
+
# split meta and body
|
45
|
+
meta = Array.new
|
46
|
+
body = Array.new
|
47
|
+
|
48
|
+
|
49
|
+
|
50
|
+
# extract meta from raw file content
|
51
|
+
meta_match = raw_content.gsub(/(?<=\-{8}).*?(?=-{4})/um)
|
52
|
+
# meta_match.with_index { |content, idx|
|
53
|
+
# puts "index #{idx} is #{content}" #debug
|
54
|
+
# }
|
55
|
+
|
56
|
+
|
57
|
+
|
58
|
+
# extract body of post from raw file content
|
59
|
+
body_match = raw_content.gsub(/(?<=BODY:\s).*?(?=\-{5})/um)
|
60
|
+
# body_match.with_index { |a,index|
|
61
|
+
# puts "index #{index} is #{a}" #debug
|
62
|
+
# }
|
63
|
+
|
64
|
+
|
65
|
+
|
66
|
+
|
67
|
+
# mapping meta to hugo post
|
68
|
+
=begin
|
69
|
+
xuite article ------- hugo post
|
70
|
+
meta : : meta
|
71
|
+
TITLE: : title
|
72
|
+
AUTHOR: <NONE>
|
73
|
+
DATE: : date
|
74
|
+
MM/DD/YYYY HH:mm:ss AM
|
75
|
+
YYYY-MM-DDTHH:mm:ss+HH:mm
|
76
|
+
|
77
|
+
CATEGORY: : categories
|
78
|
+
array
|
79
|
+
|
80
|
+
: image
|
81
|
+
: description
|
82
|
+
|
83
|
+
|
84
|
+
STATUS: : draft
|
85
|
+
publish/draft true/false
|
86
|
+
|
87
|
+
: tags
|
88
|
+
array
|
89
|
+
|
90
|
+
: type
|
91
|
+
post/feature
|
92
|
+
|
93
|
+
: highlight
|
94
|
+
true/false
|
95
|
+
|
96
|
+
=end
|
97
|
+
|
98
|
+
tmpHash = Hash.new
|
99
|
+
|
100
|
+
meta_match.with_index { |meta, idx|
|
101
|
+
|
102
|
+
# create a new hash for each post
|
103
|
+
tmpHash[idx] = Hash.new
|
104
|
+
|
105
|
+
# TITLE to title
|
106
|
+
tmpHash[idx]["title"] = /(?<=TITLE:\s).+/u.match(meta).to_s
|
107
|
+
|
108
|
+
# DATE to date
|
109
|
+
tmpHash[idx]['date'] = DateTime.strptime(/(?<=DATE:\s).+/u.match(meta).to_s.concat(' +08'), '%m/%d/%Y %I:%M:%S %p %z').to_s
|
110
|
+
|
111
|
+
# CATEGORY to categories
|
112
|
+
tmpHash[idx]['categories'] = [/(?<=CATEGORY:\s).+/u.match(meta).to_s]
|
113
|
+
|
114
|
+
# gen image meta
|
115
|
+
tmpHash[idx]['image'] = ''
|
116
|
+
|
117
|
+
# gen description meta
|
118
|
+
tmpHash[idx]['description'] = tmpHash[idx]['title']
|
119
|
+
|
120
|
+
# gen draft meta
|
121
|
+
tmpDraft = /(?<=STATUS:\s).+/u.match(meta).to_s
|
122
|
+
tmpHash[idx]['draft'] = (tmpDraft.casecmp('publish') === 0)? false : true
|
123
|
+
|
124
|
+
# gen tags meta
|
125
|
+
tmpHash[idx]['tags'] = []
|
126
|
+
|
127
|
+
# gen type meta
|
128
|
+
tmpHash[idx]['type'] = 'post'
|
129
|
+
|
130
|
+
# gen highlight meta
|
131
|
+
tmpHash[idx]['highlight'] = false
|
132
|
+
|
133
|
+
|
134
|
+
}
|
135
|
+
|
136
|
+
=begin
|
137
|
+
body transformation
|
138
|
+
|
139
|
+
xuite article ------- hugo post
|
140
|
+
BODY: : --- and two newlines
|
141
|
+
|
142
|
+
=end
|
143
|
+
|
144
|
+
# tranform body to markdown content
|
145
|
+
# use reverse_markdown gem
|
146
|
+
tmpContent = Hash.new
|
147
|
+
body_match.with_index {|content, idx|
|
148
|
+
|
149
|
+
tmpContent[idx] = ReverseMarkdown.convert content
|
150
|
+
|
151
|
+
}
|
152
|
+
|
153
|
+
# Detect whether output folder is created and has right permissions or not
|
154
|
+
if Dir.exist?("./output") == false
|
155
|
+
begin
|
156
|
+
Dir.mkdir("./output")
|
157
|
+
rescue SystemCallError
|
158
|
+
$stderr.puts "Cannot create output folder, please checkout permission"
|
159
|
+
exit
|
160
|
+
end
|
161
|
+
end
|
162
|
+
|
163
|
+
# output every post a separated file
|
164
|
+
# output file name is test-timestamp.md
|
165
|
+
# Notice: f.puts \-{3} and two newline
|
166
|
+
meta_match.with_index { |_, index|
|
167
|
+
File.open("./output/#{index}.md", "w") { |f|
|
168
|
+
f.write(tmpHash[index].to_yaml)
|
169
|
+
f.puts("---", "", "", tmpContent[index])
|
170
|
+
}
|
171
|
+
}
|
172
|
+
|
173
|
+
puts "Convert complete"
|
174
|
+
|
175
|
+
end
|
metadata
ADDED
@@ -0,0 +1,74 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: xuite_blog_to_hugo_gem
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Howard Lee
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2020-01-04 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: nokogiri
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: reverse_markdown
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
description:
|
42
|
+
email: contact-me@howardlee.cloud
|
43
|
+
executables:
|
44
|
+
- xuite_blog_to_hugo_gem
|
45
|
+
extensions: []
|
46
|
+
extra_rdoc_files: []
|
47
|
+
files:
|
48
|
+
- bin/xuite_blog_to_hugo_gem
|
49
|
+
- lib/xuite_blog_to_hugo_gem.rb
|
50
|
+
homepage: https://github.com/yhunglee/xuiteMTtoHugoMarkdown
|
51
|
+
licenses:
|
52
|
+
- MIT
|
53
|
+
metadata: {}
|
54
|
+
post_install_message:
|
55
|
+
rdoc_options: []
|
56
|
+
require_paths:
|
57
|
+
- lib
|
58
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
59
|
+
requirements:
|
60
|
+
- - ">="
|
61
|
+
- !ruby/object:Gem::Version
|
62
|
+
version: '0'
|
63
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
64
|
+
requirements:
|
65
|
+
- - ">="
|
66
|
+
- !ruby/object:Gem::Version
|
67
|
+
version: '0'
|
68
|
+
requirements: []
|
69
|
+
rubygems_version: 3.0.4
|
70
|
+
signing_key:
|
71
|
+
specification_version: 4
|
72
|
+
summary: xuite_blog_to_hugo_gem is the converter from xuite blog .mt file to hugo
|
73
|
+
.md
|
74
|
+
test_files: []
|