diff --git a/build.gradle b/build.gradle index c26135f82..c084b68b2 100644 --- a/build.gradle +++ b/build.gradle @@ -15,6 +15,7 @@ java { } repositories { + mavenLocal() maven { url "https://maven.aliyun.com/nexus/content/groups/public" } diff --git a/src/main/java/run/halo/app/service/impl/PostServiceImpl.java b/src/main/java/run/halo/app/service/impl/PostServiceImpl.java index c8e9605a9..d9ddde6f4 100644 --- a/src/main/java/run/halo/app/service/impl/PostServiceImpl.java +++ b/src/main/java/run/halo/app/service/impl/PostServiceImpl.java @@ -1,6 +1,7 @@ package run.halo.app.service.impl; import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.StrUtil; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.context.ApplicationEventPublisher; @@ -318,8 +319,11 @@ public class PostServiceImpl extends BasePostServiceImpl implements PostSe // Gets frontMatter Map> frontMatter = MarkdownUtils.getFrontMatter(markdown); + // remove frontMatter + markdown = MarkdownUtils.removeFrontMatter(markdown); PostParam post = new PostParam(); + post.setStatus(null); List elementValue; @@ -331,6 +335,11 @@ public class PostServiceImpl extends BasePostServiceImpl implements PostSe for (String key : frontMatter.keySet()) { elementValue = frontMatter.get(key); for (String ele : elementValue) { + ele = StrUtil.strip(ele, "[", "]"); + ele = StrUtil.strip(ele, "\""); + if ("".equals(ele)) { + continue; + } switch (key) { case "title": post.setTitle(ele); diff --git a/src/main/java/run/halo/app/utils/MarkdownUtils.java b/src/main/java/run/halo/app/utils/MarkdownUtils.java index fc4fa6f29..d2cfdffee 100644 --- a/src/main/java/run/halo/app/utils/MarkdownUtils.java +++ b/src/main/java/run/halo/app/utils/MarkdownUtils.java @@ -27,6 +27,8 @@ import run.halo.app.model.support.HaloConst; import java.util.Arrays; import java.util.List; import java.util.Map; +import java.util.regex.Matcher; +import java.util.regex.Pattern; /** * Markdown utils. @@ -122,4 +124,21 @@ public class MarkdownUtils { visitor.visit(document); return visitor.getData(); } + + private static final Pattern FRONT_MATTER = Pattern.compile("^---[\\s\\S]*?---"); + + /** + * remove front matter + * + * @param markdown markdown + * @return markdown + */ + public static String removeFrontMatter(String markdown) { + markdown = markdown.trim(); + Matcher matcher = FRONT_MATTER.matcher(markdown); + if (matcher.find()) { + return markdown.replace(matcher.group(), ""); + } + return markdown; + } } diff --git a/src/test/java/run/halo/app/utils/MarkdownUtilsTest.java b/src/test/java/run/halo/app/utils/MarkdownUtilsTest.java new file mode 100644 index 000000000..043209e72 --- /dev/null +++ b/src/test/java/run/halo/app/utils/MarkdownUtilsTest.java @@ -0,0 +1,35 @@ +package run.halo.app.utils; + +import cn.hutool.core.lang.Assert; +import lombok.extern.slf4j.Slf4j; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.*; + +/** + * @author zhixiang.yuan + * @since 2020/07/19 20:22:58 + */ +@Slf4j +class MarkdownUtilsTest { + + @Test + void removeFrontMatter() { + String markdown = "---\n" + + "title: \"test remove\"\n" + + "---"; + Assert.isTrue("".equals(MarkdownUtils.removeFrontMatter(markdown))); + + markdown = "---\n" + + "title: \"test remove\"\n" + + "---" + + "test"; + Assert.isTrue("test".equals(MarkdownUtils.removeFrontMatter(markdown))); + + markdown = "---\n" + + "title: \"test remove\"\n" + + "---" + + "test---"; + Assert.isTrue("test---".equals(MarkdownUtils.removeFrontMatter(markdown))); + } +} \ No newline at end of file