You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@maven.apache.org by GitBox <gi...@apache.org> on 2021/01/01 23:26:07 UTC
[GitHub] [maven-doxia] bertysentry commented on a change in pull request #49: [DOXIA-616]
bertysentry commented on a change in pull request #49:
URL: https://github.com/apache/maven-doxia/pull/49#discussion_r550819334
##########
File path: doxia-modules/doxia-module-markdown/src/main/java/org/apache/maven/doxia/module/markdown/MarkdownParser.java
##########
@@ -130,133 +184,98 @@ public void parse( Reader source, Sink sink )
* @return HTML content generated by flexmark-java
* @throws IOException passed through
*/
- String toHtml( Reader source )
+ CharSequence toHtml( Reader source )
throws IOException
{
+ // Read the source
String text = IOUtil.toString( source );
- MutableDataHolder flexmarkOptions = PegdownOptionsAdapter.flexmarkOptions(
- Extensions.ALL & ~( Extensions.HARDWRAPS | Extensions.ANCHORLINKS ) ).toMutable();
- ArrayList<Extension> extensions = new ArrayList<>();
- for ( Extension extension : flexmarkOptions.get( com.vladsch.flexmark.parser.Parser.EXTENSIONS ) )
- {
- extensions.add( extension );
- }
-
- extensions.add( FlexmarkDoxiaExtension.create() );
- flexmarkOptions.set( com.vladsch.flexmark.parser.Parser.EXTENSIONS, extensions );
- flexmarkOptions.set( HtmlRenderer.HTML_BLOCK_OPEN_TAG_EOL, false );
- flexmarkOptions.set( HtmlRenderer.HTML_BLOCK_CLOSE_TAG_EOL, false );
- flexmarkOptions.set( HtmlRenderer.MAX_TRAILING_BLANK_LINES, -1 );
-
- com.vladsch.flexmark.parser.Parser parser = com.vladsch.flexmark.parser.Parser.builder( flexmarkOptions )
- .build();
- HtmlRenderer renderer = HtmlRenderer.builder( flexmarkOptions )
- .linkResolverFactory( new FlexmarkDoxiaLinkResolver.Factory() )
- .build();
-
+ // Now, build the HTML document
StringBuilder html = new StringBuilder( 1000 );
html.append( "<html>" );
html.append( "<head>" );
- Pattern metadataPattern = Pattern.compile( MULTI_MARKDOWN_METADATA_SECTION, Pattern.MULTILINE );
- Matcher metadataMatcher = metadataPattern.matcher( text );
+
+ // 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;
if ( metadataMatcher.find() )
{
- metadataPattern = Pattern.compile( MULTI_MARKDOWN_METADATA_ENTRY, Pattern.MULTILINE );
- Matcher lineMatcher = metadataPattern.matcher( metadataMatcher.group( 1 ) );
- boolean first = true;
- while ( lineMatcher.find() )
+ Matcher entryMatcher = METADATA_ENTRY_PATTERN.matcher( metadataMatcher.group( 0 ) );
+ while ( entryMatcher.find() )
{
- String key = StringUtils.trimToEmpty( lineMatcher.group( 1 ) );
- if ( first )
- {
- boolean found = false;
- for ( String k : STANDARD_METADATA_KEYS )
- {
- if ( k.equalsIgnoreCase( key ) )
- {
- found = true;
- break;
- }
- }
- if ( !found )
- {
- break;
- }
- first = false;
- }
- String value = StringUtils.trimToEmpty( lineMatcher.group( 2 ) );
+ String key = entryMatcher.group( 1 );
+ String value = entryMatcher.group( 2 );
if ( "title".equalsIgnoreCase( key ) )
{
haveTitle = true;
html.append( "<title>" );
- html.append( StringEscapeUtils.escapeXml( value ) );
+ html.append( HtmlTools.escapeHTML( value, false ) );
Review comment:
Happy New Year! 😉
I understand your concern, but I think that the parameter names are misleading.
More importantly, the *XhtmlBaseSink* **itself** uses `HtmlTools.escapeHTML(text, false)`:
* For example, all XHTML content is inserted with [XhtmlBaseSink.content()](https://github.com/apache/maven-doxia/blob/74c3e876b5c7a044f5a6b7ad7be6ea3ac10a6f49/doxia-core/src/main/java/org/apache/maven/doxia/sink/impl/XhtmlBaseSink.java#L2176)
* *XhtmlBaseSink.content()* calls [XhtmlBaseSink.escapeHTML()](https://github.com/apache/maven-doxia/blob/74c3e876b5c7a044f5a6b7ad7be6ea3ac10a6f49/doxia-core/src/main/java/org/apache/maven/doxia/sink/impl/XhtmlBaseSink.java#L2201)
and *XhtmlBaseSink.escapeHTML()* is simply:
```java
/**
* Forward to HtmlTools.escapeHTML( text ).
*
* @param text the String to escape, may be null
* @return the text escaped, "" if null String input
* @see org.apache.maven.doxia.util.HtmlTools#escapeHTML(String)
*/
protected static String escapeHTML( String text )
{
return HtmlTools.escapeHTML( text, false );
}
```
So, calling `HtmlTools.escapeHTML( text, false )` is really the only proper way to produce XHTML content that will be parsed with the XhtmlSink parser. And it is consistent with Doxia's own XhtmlSink.
----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
For queries about this service, please contact Infrastructure at:
users@infra.apache.org