summaryrefslogtreecommitdiffstats
path: root/commands/import_jekyll.go
diff options
context:
space:
mode:
authorStefan Buynov <stefan.buynov@gmail.com>2017-04-22 23:35:52 +0300
committerBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>2017-04-22 22:35:52 +0200
commit5f3ad1c31985450fab8d6772e9cbfcb57cf5cc53 (patch)
treee0be3f30d59238fd66241bf9a763b4d9e6f5caf1 /commands/import_jekyll.go
parent8cd3ea565ae57a8e77d0b0935472944a0643b29d (diff)
commands: Import Octopress image tag in Jekyll importer
Diffstat (limited to 'commands/import_jekyll.go')
-rw-r--r--commands/import_jekyll.go45
1 files changed, 45 insertions, 0 deletions
diff --git a/commands/import_jekyll.go b/commands/import_jekyll.go
index 89fab8ba3..7d503466e 100644
--- a/commands/import_jekyll.go
+++ b/commands/import_jekyll.go
@@ -528,5 +528,50 @@ func convertJekyllContent(m interface{}, content string) string {
content = replace.re.ReplaceAllString(content, replace.replace)
}
+ replaceListFunc := []struct {
+ re *regexp.Regexp
+ replace func(string) string
+ }{
+ // Octopress image tag: http://octopress.org/docs/plugins/image-tag/
+ {regexp.MustCompile(`{%\s+img\s*(.*?)\s*%}`), replaceImageTag},
+ }
+
+ for _, replace := range replaceListFunc {
+ content = replace.re.ReplaceAllStringFunc(content, replace.replace)
+ }
+
return content
}
+
+func replaceImageTag(match string) string {
+ r := regexp.MustCompile(`{%\s+img\s*(\p{L}*)\s+([\S]*/[\S]+)\s+(\d*)\s*(\d*)\s*(.*?)\s*%}`)
+ result := bytes.NewBufferString("{{< figure ")
+ parts := r.FindStringSubmatch(match)
+ // Index 0 is the entire string, ignore
+ replaceOptionalPart(result, "class", parts[1])
+ replaceOptionalPart(result, "src", parts[2])
+ replaceOptionalPart(result, "width", parts[3])
+ replaceOptionalPart(result, "height", parts[4])
+ // title + alt
+ part := parts[5]
+ if len(part) > 0 {
+ splits := strings.Split(part, "'")
+ lenSplits := len(splits)
+ if lenSplits == 1 {
+ replaceOptionalPart(result, "title", splits[0])
+ } else if lenSplits == 3 {
+ replaceOptionalPart(result, "title", splits[1])
+ } else if lenSplits == 5 {
+ replaceOptionalPart(result, "title", splits[1])
+ replaceOptionalPart(result, "alt", splits[3])
+ }
+ }
+ result.WriteString(">}}")
+ return result.String()
+
+}
+func replaceOptionalPart(buffer *bytes.Buffer, partName string, part string) {
+ if len(part) > 0 {
+ buffer.WriteString(partName + "=\"" + part + "\" ")
+ }
+}