jekyll-import 0.12.0 → 0.13.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 +4 -4
- data/lib/jekyll-import.rb +10 -8
- data/lib/jekyll-import/importer.rb +1 -1
- data/lib/jekyll-import/importers.rb +1 -1
- data/lib/jekyll-import/importers/behance.rb +20 -20
- data/lib/jekyll-import/importers/blogger.rb +108 -118
- data/lib/jekyll-import/importers/csv.rb +7 -7
- data/lib/jekyll-import/importers/drupal6.rb +5 -6
- data/lib/jekyll-import/importers/drupal7.rb +7 -13
- data/lib/jekyll-import/importers/drupal_common.rb +57 -59
- data/lib/jekyll-import/importers/easyblog.rb +30 -30
- data/lib/jekyll-import/importers/enki.rb +28 -29
- data/lib/jekyll-import/importers/ghost.rb +46 -33
- data/lib/jekyll-import/importers/google_reader.rb +9 -9
- data/lib/jekyll-import/importers/joomla.rb +32 -32
- data/lib/jekyll-import/importers/joomla3.rb +41 -39
- data/lib/jekyll-import/importers/jrnl.rb +16 -17
- data/lib/jekyll-import/importers/marley.rb +25 -26
- data/lib/jekyll-import/importers/mephisto.rb +26 -26
- data/lib/jekyll-import/importers/mt.rb +76 -75
- data/lib/jekyll-import/importers/posterous.rb +30 -29
- data/lib/jekyll-import/importers/rss.rb +13 -10
- data/lib/jekyll-import/importers/s9y.rb +16 -17
- data/lib/jekyll-import/importers/s9y_database.rb +98 -89
- data/lib/jekyll-import/importers/textpattern.rb +18 -17
- data/lib/jekyll-import/importers/tmp.rb +0 -0
- data/lib/jekyll-import/importers/tumblr.rb +146 -143
- data/lib/jekyll-import/importers/typo.rb +31 -31
- data/lib/jekyll-import/importers/wordpress.rb +100 -100
- data/lib/jekyll-import/importers/wordpressdotcom.rb +70 -60
- data/lib/jekyll-import/util.rb +24 -24
- data/lib/jekyll-import/version.rb +1 -1
- data/lib/jekyll/commands/import.rb +32 -35
- metadata +14 -13
@@ -1,56 +1,55 @@
|
|
1
1
|
module JekyllImport
|
2
2
|
module Importers
|
3
3
|
class Posterous < Importer
|
4
|
-
|
5
4
|
def self.specify_options(c)
|
6
|
-
c.option
|
7
|
-
c.option
|
8
|
-
c.option
|
5
|
+
c.option "email", "--email EMAIL", "Posterous email address"
|
6
|
+
c.option "password", "--password PW", "Posterous password"
|
7
|
+
c.option "api_token", "--token TOKEN", "Posterous API Token"
|
9
8
|
end
|
10
9
|
|
11
10
|
def self.require_deps
|
12
|
-
JekyllImport.require_with_fallback(%w
|
11
|
+
JekyllImport.require_with_fallback(%w(
|
13
12
|
rubygems
|
14
13
|
jekyll
|
15
14
|
fileutils
|
16
15
|
uri
|
17
16
|
json
|
18
17
|
net/http
|
19
|
-
|
18
|
+
))
|
20
19
|
end
|
21
20
|
|
22
21
|
def self.fetch(uri_str, limit = 10)
|
23
22
|
# You should choose better exception.
|
24
|
-
raise ArgumentError,
|
23
|
+
raise ArgumentError, "Stuck in a redirect loop. Please double check your email and password" if limit.zero?
|
25
24
|
|
26
25
|
response = nil
|
27
|
-
Net::HTTP.start(
|
26
|
+
Net::HTTP.start("posterous.com") do |http|
|
28
27
|
req = Net::HTTP::Get.new(uri_str)
|
29
28
|
req.basic_auth @email, @pass
|
30
29
|
response = http.request(req)
|
31
30
|
end
|
32
31
|
|
33
32
|
case response
|
34
|
-
|
35
|
-
|
36
|
-
|
33
|
+
when Net::HTTPSuccess then response
|
34
|
+
when Net::HTTPRedirection then fetch(response["location"], limit - 1)
|
35
|
+
else response.error!
|
37
36
|
end
|
38
37
|
end
|
39
38
|
|
40
39
|
def self.fetch_images(directory, imgs)
|
41
40
|
def self.fetch_one(url, limit = 10)
|
42
|
-
raise ArgumentError,
|
41
|
+
raise ArgumentError, "HTTP redirect too deep" if limit.zero?
|
43
42
|
response = Net::HTTP.get_response(URI.parse(url))
|
44
43
|
case response
|
45
44
|
when Net::HTTPSuccess then response.body
|
46
|
-
when Net::HTTPRedirection then self.fetch_one(response[
|
45
|
+
when Net::HTTPRedirection then self.fetch_one(response["location"], limit - 1)
|
47
46
|
else
|
48
47
|
response.error!
|
49
48
|
end
|
50
49
|
end
|
51
50
|
|
52
51
|
FileUtils.mkdir_p directory
|
53
|
-
urls =
|
52
|
+
urls = []
|
54
53
|
imgs.each do |img|
|
55
54
|
fullurl = img["full"]["url"]
|
56
55
|
uri = URI.parse(fullurl)
|
@@ -66,12 +65,14 @@ module JekyllImport
|
|
66
65
|
end
|
67
66
|
|
68
67
|
def self.process(options)
|
69
|
-
email = options.fetch(
|
70
|
-
pass = options.fetch(
|
71
|
-
api_token = options.fetch(
|
72
|
-
|
73
|
-
@email
|
74
|
-
|
68
|
+
email = options.fetch("email")
|
69
|
+
pass = options.fetch("password")
|
70
|
+
api_token = options.fetch("api_token")
|
71
|
+
|
72
|
+
@email = email
|
73
|
+
@pass = pass
|
74
|
+
@api_token = api_token
|
75
|
+
defaults = { :include_imgs => false, :blog => "primary", :base_path => "/" }
|
75
76
|
opts = defaults.merge(opts)
|
76
77
|
FileUtils.mkdir_p "_posts"
|
77
78
|
|
@@ -81,18 +82,18 @@ module JekyllImport
|
|
81
82
|
while posts.any?
|
82
83
|
posts.each do |post|
|
83
84
|
title = post["title"]
|
84
|
-
slug = title.gsub(
|
85
|
+
slug = title.gsub(%r![^[:alnum:]]+!, "-").downcase
|
85
86
|
date = Date.parse(post["display_date"])
|
86
87
|
content = post["body_html"]
|
87
88
|
published = !post["is_private"]
|
88
|
-
basename = "%02d-%02d-%02d-%s"
|
89
|
-
name = basename +
|
89
|
+
basename = format("%02d-%02d-%02d-%s", date.year, date.month, date.day, slug)
|
90
|
+
name = basename + ".html"
|
90
91
|
|
91
92
|
# Images:
|
92
93
|
if opts[:include_imgs]
|
93
94
|
post_imgs = post["media"]["images"]
|
94
95
|
if post_imgs.any?
|
95
|
-
img_dir = "imgs/%s"
|
96
|
+
img_dir = format("imgs/%s", basename)
|
96
97
|
img_urls = self.fetch_images(img_dir, post_imgs)
|
97
98
|
|
98
99
|
img_urls.map! do |url|
|
@@ -101,17 +102,17 @@ module JekyllImport
|
|
101
102
|
imgcontent = "<ol>\n" + img_urls.join("\n") + "</ol>\n"
|
102
103
|
|
103
104
|
# filter out "posterous-content", replacing with imgs:
|
104
|
-
content = content.sub(
|
105
|
+
content = content.sub(%r!\<p\>\[\[posterous-content:[^\]]+\]\]\<\/p\>!, imgcontent)
|
105
106
|
end
|
106
107
|
end
|
107
108
|
|
108
109
|
# Get the relevant fields as a hash, delete empty fields and convert
|
109
110
|
# to YAML for the header
|
110
111
|
data = {
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
112
|
+
"layout" => "post",
|
113
|
+
"title" => title.to_s,
|
114
|
+
"published" => published,
|
115
|
+
}.delete_if { |_k, v| v.nil? || v == "" }.to_yaml
|
115
116
|
|
116
117
|
# Write out the data and content to file
|
117
118
|
File.open("_posts/#{name}", "w") do |f|
|
@@ -2,24 +2,25 @@ module JekyllImport
|
|
2
2
|
module Importers
|
3
3
|
class RSS < Importer
|
4
4
|
def self.specify_options(c)
|
5
|
-
c.option
|
5
|
+
c.option "source", "--source NAME", "The RSS file or URL to import"
|
6
|
+
c.option "tag", "--tag NAME", "Add a tag to posts"
|
6
7
|
end
|
7
8
|
|
8
9
|
def self.validate(options)
|
9
|
-
if options[
|
10
|
+
if options["source"].nil?
|
10
11
|
abort "Missing mandatory option --source."
|
11
12
|
end
|
12
13
|
end
|
13
14
|
|
14
15
|
def self.require_deps
|
15
|
-
JekyllImport.require_with_fallback(%w
|
16
|
+
JekyllImport.require_with_fallback(%w(
|
16
17
|
rss
|
17
18
|
rss/1.0
|
18
19
|
rss/2.0
|
19
20
|
open-uri
|
20
21
|
fileutils
|
21
22
|
safe_yaml
|
22
|
-
|
23
|
+
))
|
23
24
|
end
|
24
25
|
|
25
26
|
# Process the import.
|
@@ -28,7 +29,7 @@ module JekyllImport
|
|
28
29
|
#
|
29
30
|
# Returns nothing.
|
30
31
|
def self.process(options)
|
31
|
-
source = options.fetch(
|
32
|
+
source = options.fetch("source")
|
32
33
|
|
33
34
|
content = ""
|
34
35
|
open(source) { |s| content = s.read }
|
@@ -37,17 +38,19 @@ module JekyllImport
|
|
37
38
|
raise "There doesn't appear to be any RSS items at the source (#{source}) provided." unless rss
|
38
39
|
|
39
40
|
rss.items.each do |item|
|
40
|
-
formatted_date = item.date.strftime(
|
41
|
+
formatted_date = item.date.strftime("%Y-%m-%d")
|
41
42
|
post_name = item.title.split(%r{ |!|/|:|&|-|$|,}).map do |i|
|
42
|
-
i.downcase if i !=
|
43
|
-
end.compact.join(
|
43
|
+
i.downcase if i != ""
|
44
|
+
end.compact.join("-")
|
44
45
|
name = "#{formatted_date}-#{post_name}"
|
45
46
|
|
46
47
|
header = {
|
47
|
-
|
48
|
-
|
48
|
+
"layout" => "post",
|
49
|
+
"title" => item.title,
|
49
50
|
}
|
50
51
|
|
52
|
+
header["tag"] = options["tag"] if !options.to_s.empty?
|
53
|
+
|
51
54
|
FileUtils.mkdir_p("_posts")
|
52
55
|
|
53
56
|
File.open("_posts/#{name}.html", "w") do |f|
|
@@ -2,50 +2,49 @@ module JekyllImport
|
|
2
2
|
module Importers
|
3
3
|
class S9Y < Importer
|
4
4
|
def self.specify_options(c)
|
5
|
-
c.option
|
5
|
+
c.option "source", "--source SOURCE", "The URL of the S9Y RSS feed"
|
6
6
|
end
|
7
7
|
|
8
8
|
def self.validate(options)
|
9
|
-
if options[
|
9
|
+
if options["source"].nil?
|
10
10
|
abort "Missing mandatory option --source, e.g. --source \"http://blog.example.com/rss.php?version=2.0&all=1\""
|
11
11
|
end
|
12
12
|
end
|
13
13
|
|
14
14
|
def self.require_deps
|
15
|
-
JekyllImport.require_with_fallback(%w
|
15
|
+
JekyllImport.require_with_fallback(%w(
|
16
16
|
open-uri
|
17
17
|
rss
|
18
18
|
fileutils
|
19
19
|
safe_yaml
|
20
|
-
|
20
|
+
))
|
21
21
|
end
|
22
22
|
|
23
23
|
def self.process(options)
|
24
|
-
source = options.fetch(
|
24
|
+
source = options.fetch("source")
|
25
25
|
|
26
26
|
FileUtils.mkdir_p("_posts")
|
27
27
|
|
28
|
-
text =
|
28
|
+
text = ""
|
29
29
|
open(source) { |line| text = line.read }
|
30
30
|
rss = ::RSS::Parser.parse(text)
|
31
31
|
|
32
32
|
rss.items.each do |item|
|
33
|
-
post_url = item.link.match(
|
34
|
-
categories = item.categories.collect
|
33
|
+
post_url = item.link.match(".*(/archives/.*)")[1]
|
34
|
+
categories = item.categories.collect(&:content)
|
35
35
|
content = item.content_encoded.strip
|
36
36
|
date = item.date
|
37
37
|
slug = item.link.match('.*/archives/[0-9]+-(.*)\.html')[1]
|
38
|
-
name = "%02d-%02d-%02d-%s.markdown"
|
39
|
-
slug]
|
38
|
+
name = format("%02d-%02d-%02d-%s.markdown", date.year, date.month, date.day, slug)
|
40
39
|
|
41
40
|
data = {
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
}.delete_if { |
|
41
|
+
"layout" => "post",
|
42
|
+
"title" => item.title,
|
43
|
+
"categories" => categories,
|
44
|
+
"permalink" => post_url,
|
45
|
+
"s9y_link" => item.link,
|
46
|
+
"date" => item.date,
|
47
|
+
}.delete_if { |_k, v| v.nil? || v == "" }.to_yaml
|
49
48
|
|
50
49
|
# Write out the data and content to file
|
51
50
|
File.open("_posts/#{name}", "w") do |f|
|
@@ -1,32 +1,33 @@
|
|
1
1
|
module JekyllImport
|
2
2
|
module Importers
|
3
3
|
class S9YDatabase < Importer
|
4
|
-
|
5
4
|
def self.require_deps
|
6
5
|
JekyllImport.require_with_fallback(
|
7
|
-
%w
|
8
|
-
|
6
|
+
%w(
|
7
|
+
rubygems
|
9
8
|
sequel
|
10
9
|
fileutils
|
11
10
|
safe_yaml
|
12
11
|
unidecode
|
13
|
-
|
12
|
+
)
|
13
|
+
)
|
14
14
|
end
|
15
15
|
|
16
16
|
def self.specify_options(c)
|
17
|
-
c.option
|
18
|
-
c.option
|
19
|
-
c.option
|
20
|
-
c.option
|
21
|
-
c.option
|
22
|
-
c.option
|
23
|
-
c.option
|
24
|
-
c.option
|
25
|
-
c.option
|
26
|
-
c.option
|
27
|
-
c.option
|
28
|
-
c.option
|
29
|
-
c.option
|
17
|
+
c.option "dbname", "--dbname DB", "Database name (default: '')"
|
18
|
+
c.option "socket", "--socket SOCKET", "Database socket (default: '')"
|
19
|
+
c.option "user", "--user USER", "Database user name (default: '')"
|
20
|
+
c.option "password", "--password PW", "Database user's password (default: '')"
|
21
|
+
c.option "host", "--host HOST", "Database host name (default: 'localhost')"
|
22
|
+
c.option "port", "--port PORT", "Custom database port connect to (default: 3306)"
|
23
|
+
c.option "table_prefix", "--table_prefix PREFIX", "Table prefix name (default: 'serendipity_')"
|
24
|
+
c.option "clean_entities", "--clean_entities", "Whether to clean entities (default: true)"
|
25
|
+
c.option "comments", "--comments", "Whether to import comments (default: true)"
|
26
|
+
c.option "categories", "--categories", "Whether to import categories (default: true)"
|
27
|
+
c.option "tags", "--tags", "Whether to import tags (default: true)"
|
28
|
+
c.option "drafts", "--drafts", "Whether to export drafts as well"
|
29
|
+
c.option "markdown", "--markdown", "convert into markdown format (default: false)"
|
30
|
+
c.option "permalinks", "--permalinks", "preserve S9Y permalinks (default: false)"
|
30
31
|
end
|
31
32
|
|
32
33
|
# Main migrator function. Call this to perform the migration.
|
@@ -35,6 +36,7 @@ module JekyllImport
|
|
35
36
|
# user:: The database user name
|
36
37
|
# pass:: The database user's password
|
37
38
|
# host:: The address of the MySQL database host. Default: 'localhost'
|
39
|
+
# port:: The port of the MySQL database server. Default: 3306
|
38
40
|
# socket:: The database socket's path
|
39
41
|
# options:: A hash table of configuration options.
|
40
42
|
#
|
@@ -54,7 +56,7 @@ module JekyllImport
|
|
54
56
|
# :tags:: If true, save the post's tags in its
|
55
57
|
# YAML front matter. Default: true.
|
56
58
|
# :extension:: Set the post extension. Default: "html"
|
57
|
-
# :drafts::
|
59
|
+
# :drafts:: If true, export drafts as well
|
58
60
|
# Default: true.
|
59
61
|
# :markdown:: If true, convert the content to markdown
|
60
62
|
# Default: false
|
@@ -63,35 +65,42 @@ module JekyllImport
|
|
63
65
|
#
|
64
66
|
def self.process(opts)
|
65
67
|
options = {
|
66
|
-
:user => opts.fetch(
|
67
|
-
:pass => opts.fetch(
|
68
|
-
:host => opts.fetch(
|
69
|
-
:
|
70
|
-
:
|
71
|
-
:
|
72
|
-
:
|
73
|
-
:
|
74
|
-
:
|
75
|
-
:
|
76
|
-
:
|
77
|
-
:
|
78
|
-
:
|
79
|
-
:
|
68
|
+
:user => opts.fetch("user", ""),
|
69
|
+
:pass => opts.fetch("password", ""),
|
70
|
+
:host => opts.fetch("host", "localhost"),
|
71
|
+
:port => opts.fetch("port", 3306),
|
72
|
+
:socket => opts.fetch("socket", nil),
|
73
|
+
:dbname => opts.fetch("dbname", ""),
|
74
|
+
:table_prefix => opts.fetch("table_prefix", "serendipity_"),
|
75
|
+
:clean_entities => opts.fetch("clean_entities", true),
|
76
|
+
:comments => opts.fetch("comments", true),
|
77
|
+
:categories => opts.fetch("categories", true),
|
78
|
+
:tags => opts.fetch("tags", true),
|
79
|
+
:extension => opts.fetch("extension", "html"),
|
80
|
+
:drafts => opts.fetch("drafts", true),
|
81
|
+
:markdown => opts.fetch("markdown", false),
|
82
|
+
:permalinks => opts.fetch("permalinks", false),
|
80
83
|
}
|
81
84
|
|
82
85
|
if options[:clean_entities]
|
83
|
-
options[:clean_entities] = require_if_available(
|
86
|
+
options[:clean_entities] = require_if_available("htmlentities", "clean_entities")
|
84
87
|
end
|
85
88
|
|
86
89
|
if options[:markdown]
|
87
|
-
options[:markdown] = require_if_available(
|
90
|
+
options[:markdown] = require_if_available("reverse_markdown", "markdown")
|
88
91
|
end
|
89
92
|
|
90
93
|
FileUtils.mkdir_p("_posts")
|
91
94
|
FileUtils.mkdir_p("_drafts") if options[:drafts]
|
92
95
|
|
93
|
-
db = Sequel.mysql2(options[:dbname],
|
94
|
-
|
96
|
+
db = Sequel.mysql2(options[:dbname],
|
97
|
+
:user => options[:user],
|
98
|
+
:password => options[:pass],
|
99
|
+
:socket => options[:socket],
|
100
|
+
:host => options[:host],
|
101
|
+
:port => options[:port],
|
102
|
+
:encoding => "utf8"
|
103
|
+
)
|
95
104
|
|
96
105
|
px = options[:table_prefix]
|
97
106
|
|
@@ -108,7 +117,7 @@ module JekyllImport
|
|
108
117
|
page[:slug] = sluggify(page[:title])
|
109
118
|
|
110
119
|
page_name_list[ page[:id] ] = {
|
111
|
-
:slug
|
120
|
+
:slug => page[:slug],
|
112
121
|
}
|
113
122
|
end
|
114
123
|
|
@@ -119,6 +128,7 @@ module JekyllImport
|
|
119
128
|
entries.title AS `title`,
|
120
129
|
entries.timestamp AS `timestamp`,
|
121
130
|
entries.body AS `body`,
|
131
|
+
entries.extended AS `body_extended`,
|
122
132
|
authors.realname AS `author`,
|
123
133
|
authors.username AS `author_login`,
|
124
134
|
authors.email AS `author_email`
|
@@ -148,11 +158,14 @@ module JekyllImport
|
|
148
158
|
slug = sluggify(title)
|
149
159
|
end
|
150
160
|
|
151
|
-
status = post[:isdraft] ==
|
161
|
+
status = post[:isdraft] == "true" ? "draft" : "published"
|
152
162
|
date = Time.at(post[:timestamp]).utc || Time.now.utc
|
153
|
-
name = "%02d-%02d-%02d-%s.%s"
|
163
|
+
name = format("%02d-%02d-%02d-%s.%s", date.year, date.month, date.day, slug, extension)
|
154
164
|
|
155
165
|
content = post[:body].to_s
|
166
|
+
unless post[:body_extended].to_s.empty?
|
167
|
+
content += "\n\n" + post[:body_extended].to_s
|
168
|
+
end
|
156
169
|
|
157
170
|
if options[:clean_entities]
|
158
171
|
content = clean_entities(content)
|
@@ -170,28 +183,28 @@ module JekyllImport
|
|
170
183
|
# Get the relevant fields as a hash, delete empty fields and
|
171
184
|
# convert to YAML for the header.
|
172
185
|
data = {
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
186
|
+
"layout" => post[:type].to_s,
|
187
|
+
"status" => status.to_s,
|
188
|
+
"published" => status.to_s == "draft" ? nil : (status.to_s == "published"),
|
189
|
+
"title" => title.to_s,
|
190
|
+
"author" => {
|
191
|
+
"display_name" => post[:author].to_s,
|
192
|
+
"login" => post[:author_login].to_s,
|
193
|
+
"email" => post[:author_email].to_s,
|
181
194
|
},
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
}.delete_if { |
|
190
|
-
|
191
|
-
if post[:type] ==
|
195
|
+
"author_login" => post[:author_login].to_s,
|
196
|
+
"author_email" => post[:author_email].to_s,
|
197
|
+
"date" => date.to_s,
|
198
|
+
"permalink" => options[:permalinks] ? permalink : nil,
|
199
|
+
"categories" => options[:categories] ? categories : nil,
|
200
|
+
"tags" => options[:tags] ? tags : nil,
|
201
|
+
"comments" => options[:comments] ? comments : nil,
|
202
|
+
}.delete_if { |_k, v| v.nil? || v == "" }.to_yaml
|
203
|
+
|
204
|
+
if post[:type] == "page"
|
192
205
|
filename = page_path(post[:id], page_name_list) + "index.#{extension}"
|
193
206
|
FileUtils.mkdir_p(File.dirname(filename))
|
194
|
-
elsif status ==
|
207
|
+
elsif status == "draft"
|
195
208
|
filename = "_drafts/#{slug}.#{extension}"
|
196
209
|
else
|
197
210
|
filename = "_posts/#{name}"
|
@@ -206,13 +219,11 @@ module JekyllImport
|
|
206
219
|
end
|
207
220
|
|
208
221
|
def self.require_if_available(gem_name, option_name)
|
209
|
-
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
|
214
|
-
return true
|
215
|
-
end
|
222
|
+
require gem_name
|
223
|
+
return true
|
224
|
+
rescue LoadError
|
225
|
+
STDERR.puts "Could not require '#{gem_name}', so the :#{option_name} option is now disabled."
|
226
|
+
return true
|
216
227
|
end
|
217
228
|
|
218
229
|
def self.process_categories(db, options, post)
|
@@ -232,11 +243,11 @@ module JekyllImport
|
|
232
243
|
)
|
233
244
|
|
234
245
|
db[cquery].each_with_object([]) do |category, categories|
|
235
|
-
if options[:clean_entities]
|
236
|
-
|
237
|
-
|
238
|
-
|
239
|
-
|
246
|
+
categories << if options[:clean_entities]
|
247
|
+
clean_entities(category[:name])
|
248
|
+
else
|
249
|
+
category[:name]
|
250
|
+
end
|
240
251
|
end
|
241
252
|
end
|
242
253
|
|
@@ -273,14 +284,14 @@ module JekyllImport
|
|
273
284
|
end
|
274
285
|
|
275
286
|
comments << {
|
276
|
-
|
277
|
-
|
278
|
-
|
279
|
-
|
280
|
-
|
281
|
-
|
287
|
+
"id" => comment[:id].to_i,
|
288
|
+
"author" => comauthor,
|
289
|
+
"author_email" => comment[:author_email].to_s,
|
290
|
+
"author_url" => comment[:author_url].to_s,
|
291
|
+
"date" => comment[:date].to_s,
|
292
|
+
"content" => comcontent,
|
282
293
|
}
|
283
|
-
end.sort!{ |a,b| a[
|
294
|
+
end.sort! { |a, b| a["id"] <=> b["id"] }
|
284
295
|
end
|
285
296
|
|
286
297
|
def self.process_tags(db, options, post)
|
@@ -298,11 +309,11 @@ module JekyllImport
|
|
298
309
|
)
|
299
310
|
|
300
311
|
db[cquery].each_with_object([]) do |tag, tags|
|
301
|
-
if options[:clean_entities]
|
302
|
-
|
303
|
-
|
304
|
-
|
305
|
-
|
312
|
+
tags << if options[:clean_entities]
|
313
|
+
clean_entities(tag[:name])
|
314
|
+
else
|
315
|
+
tag[:name]
|
316
|
+
end
|
306
317
|
end
|
307
318
|
end
|
308
319
|
|
@@ -326,7 +337,7 @@ module JekyllImport
|
|
326
337
|
end
|
327
338
|
end
|
328
339
|
|
329
|
-
def self.clean_entities(
|
340
|
+
def self.clean_entities(text)
|
330
341
|
if text.respond_to?(:force_encoding)
|
331
342
|
text.force_encoding("UTF-8")
|
332
343
|
end
|
@@ -342,22 +353,20 @@ module JekyllImport
|
|
342
353
|
text
|
343
354
|
end
|
344
355
|
|
345
|
-
def self.sluggify(
|
346
|
-
title.to_ascii.downcase.gsub(
|
356
|
+
def self.sluggify(title)
|
357
|
+
title.to_ascii.downcase.gsub(%r![^0-9A-Za-z]+!, " ").strip.tr(" ", "-")
|
347
358
|
end
|
348
359
|
|
349
|
-
def self.page_path(
|
360
|
+
def self.page_path(page_id, page_name_list)
|
350
361
|
if page_name_list.key?(page_id)
|
351
362
|
[
|
352
363
|
page_name_list[page_id][:slug],
|
353
|
-
|
364
|
+
"/",
|
354
365
|
].join("")
|
355
366
|
else
|
356
367
|
""
|
357
368
|
end
|
358
369
|
end
|
359
|
-
|
360
370
|
end
|
361
371
|
end
|
362
372
|
end
|
363
|
-
|