View Javadoc
1   /*
2    * Portions of this software was developed by employees of the National Institute
3    * of Standards and Technology (NIST), an agency of the Federal Government and is
4    * being made available as a public service. Pursuant to title 17 United States
5    * Code Section 105, works of NIST employees are not subject to copyright
6    * protection in the United States. This software may be subject to foreign
7    * copyright. Permission in the United States and in foreign countries, to the
8    * extent that NIST may hold copyright, to use, copy, modify, create derivative
9    * works, and distribute this software and its documentation without fee is hereby
10   * granted on a non-exclusive basis, provided that this notice and disclaimer
11   * of warranty appears in all copies.
12   *
13   * THE SOFTWARE IS PROVIDED 'AS IS' WITHOUT ANY WARRANTY OF ANY KIND, EITHER
14   * EXPRESSED, IMPLIED, OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, ANY WARRANTY
15   * THAT THE SOFTWARE WILL CONFORM TO SPECIFICATIONS, ANY IMPLIED WARRANTIES OF
16   * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND FREEDOM FROM
17   * INFRINGEMENT, AND ANY WARRANTY THAT THE DOCUMENTATION WILL CONFORM TO THE
18   * SOFTWARE, OR ANY WARRANTY THAT THE SOFTWARE WILL BE ERROR FREE.  IN NO EVENT
19   * SHALL NIST BE LIABLE FOR ANY DAMAGES, INCLUDING, BUT NOT LIMITED TO, DIRECT,
20   * INDIRECT, SPECIAL OR CONSEQUENTIAL DAMAGES, ARISING OUT OF, RESULTING FROM,
21   * OR IN ANY WAY CONNECTED WITH THIS SOFTWARE, WHETHER OR NOT BASED UPON WARRANTY,
22   * CONTRACT, TORT, OR OTHERWISE, WHETHER OR NOT INJURY WAS SUSTAINED BY PERSONS OR
23   * PROPERTY OR OTHERWISE, AND WHETHER OR NOT LOSS WAS SUSTAINED FROM, OR AROSE OUT
24   * OF THE RESULTS OF, OR USE OF, THE SOFTWARE OR SERVICES PROVIDED HEREUNDER.
25   */
26  
27  package gov.nist.secauto.metaschema.core.datatype.markup.flexmark;
28  
29  import com.vladsch.flexmark.formatter.Formatter;
30  import com.vladsch.flexmark.html.HtmlRenderer;
31  import com.vladsch.flexmark.html2md.converter.FlexmarkHtmlConverter;
32  import com.vladsch.flexmark.parser.ListOptions;
33  import com.vladsch.flexmark.parser.Parser;
34  import com.vladsch.flexmark.util.data.DataHolder;
35  
36  import edu.umd.cs.findbugs.annotations.NonNull;
37  
38  public class FlexmarkFactory {
39    @NonNull
40    private static final FlexmarkFactory SINGLETON = new FlexmarkFactory();
41  
42    @NonNull
43    private final DataHolder configuration;
44    @NonNull
45    private final Parser markdownParser;
46    @NonNull
47    private final HtmlRenderer htmlRenderer;
48    @NonNull
49    private final Formatter formatter;
50    @NonNull
51    private final FlexmarkHtmlConverter htmlConverter;
52    @NonNull
53    final ListOptions listOptions;
54  
55    @NonNull
56    public static FlexmarkFactory instance() {
57      return SINGLETON;
58    }
59  
60    public FlexmarkFactory() {
61      this(FlexmarkConfiguration.FLEXMARK_CONFIG);
62    }
63  
64    @SuppressWarnings("null")
65    public FlexmarkFactory(@NonNull DataHolder config) {
66      this.configuration = config;
67      this.markdownParser = Parser.builder(config)
68          .customDelimiterProcessor(new FixedEmphasisDelimiterProcessor(Parser.STRONG_WRAPS_EMPHASIS.get(config)))
69          .build();
70      this.htmlRenderer = HtmlRenderer.builder(config).build();
71      this.formatter = Formatter.builder(config).build();
72      this.htmlConverter = FlexmarkHtmlConverter.builder(config).build();
73      this.listOptions = ListOptions.get(config);
74    }
75  
76    @NonNull
77    public DataHolder getConfiguration() {
78      return configuration;
79    }
80  
81    @NonNull
82    public ListOptions getListOptions() {
83      return listOptions;
84    }
85  
86    @NonNull
87    public Parser getMarkdownParser() {
88      return markdownParser;
89    }
90  
91    @NonNull
92    public HtmlRenderer getHtmlRenderer() {
93      return htmlRenderer;
94    }
95  
96    @NonNull
97    public Formatter getFormatter() {
98      return formatter;
99    }
100 
101   @NonNull
102   public FlexmarkHtmlConverter getFlexmarkHtmlConverter() {
103     return htmlConverter;
104   }
105 }