From 5d364e097968b01e30ddb74f2ad9259204be7a26 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herv=C3=A9=20Boutemy?= Date: Thu, 22 Dec 2022 08:12:41 +0100 Subject: [PATCH] [DOXIA-617] support yaml metadata --- .../doxia/module/markdown/MarkdownParser.java | 7 +++++++ .../module/markdown/MarkdownParserTest.java | 19 ++++++++++++++++++- .../src/test/resources/metadata-yaml.md | 14 ++++++++++++++ 3 files changed, 39 insertions(+), 1 deletion(-) create mode 100644 doxia-modules/doxia-module-markdown/src/test/resources/metadata-yaml.md diff --git a/doxia-modules/doxia-module-markdown/src/main/java/org/apache/maven/doxia/module/markdown/MarkdownParser.java b/doxia-modules/doxia-module-markdown/src/main/java/org/apache/maven/doxia/module/markdown/MarkdownParser.java index a066c508c..b4fd58caa 100644 --- a/doxia-modules/doxia-module-markdown/src/main/java/org/apache/maven/doxia/module/markdown/MarkdownParser.java +++ b/doxia-modules/doxia-module-markdown/src/main/java/org/apache/maven/doxia/module/markdown/MarkdownParser.java @@ -189,6 +189,13 @@ CharSequence toHtml( Reader source ) html.append( "" ); html.append( "" ); + // detect yaml style metadata + if ( text.startsWith( "---" ) ) + { + // remove the enclosing --- to get back to classical metadata + text = text.replaceFirst( "---", "" ).replaceFirst( "---", "" ); + } + // First, we interpret the "metadata" section of the document and add the corresponding HTML headers Matcher metadataMatcher = METADATA_SECTION_PATTERN.matcher( text ); boolean haveTitle = false; diff --git a/doxia-modules/doxia-module-markdown/src/test/java/org/apache/maven/doxia/module/markdown/MarkdownParserTest.java b/doxia-modules/doxia-module-markdown/src/test/java/org/apache/maven/doxia/module/markdown/MarkdownParserTest.java index 11e4da53e..35b3799fa 100644 --- a/doxia-modules/doxia-module-markdown/src/test/java/org/apache/maven/doxia/module/markdown/MarkdownParserTest.java +++ b/doxia-modules/doxia-module-markdown/src/test/java/org/apache/maven/doxia/module/markdown/MarkdownParserTest.java @@ -300,7 +300,24 @@ public void testNumberedListSinkEvent() public void testMetadataSinkEvent() throws Exception { - List eventList = parseFileToEventTestingSink( "metadata" ).getEventList(); + testMetadataSinkEvent( "metadata" ); + } + + /** + * Assert the metadata is passed through when parsing "metadata-yaml.md". + * + * @throws Exception if the event list is not correct when parsing the document + */ + public void testMetadataYamlSinkEvent() + throws Exception + { + testMetadataSinkEvent( "metadata-yaml" ); + } + + private void testMetadataSinkEvent( String doc ) + throws Exception + { + List eventList = parseFileToEventTestingSink( doc ).getEventList(); Iterator it = eventList.iterator(); assertEquals( it, "head", "title", "text", "text", "text", "title_", "author", "text", "author_", "date", "text", "date_", diff --git a/doxia-modules/doxia-module-markdown/src/test/resources/metadata-yaml.md b/doxia-modules/doxia-module-markdown/src/test/resources/metadata-yaml.md new file mode 100644 index 000000000..406c74ffc --- /dev/null +++ b/doxia-modules/doxia-module-markdown/src/test/resources/metadata-yaml.md @@ -0,0 +1,14 @@ +--- +title: A Title & a 'Test' +author: Somebody 'Nickname' Great +date: 2013 © Copyleft +keywords: maven,doxia,markdown +--- + +# The document with look-alike header + +copyright: none + +## A subheading + +Some more text \ No newline at end of file