下面列出了org.eclipse.lsp4j.ParameterInformation#com.vladsch.flexmark.parser.Parser 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。
public static String getHtmlFromMarkdown(String md){
MutableDataSet options = new MutableDataSet();
// uncomment to set optional extensions
//options.set(Parser.EXTENSIONS, Arrays.asList(TablesExtension.create(), StrikethroughExtension.create()));
// uncomment to convert soft-breaks to hard breaks
//options.set(HtmlRenderer.SOFT_BREAK, "<br />\n");
Parser parser = Parser.builder(options).build();
HtmlRenderer renderer = HtmlRenderer.builder(options).build();
Node document = parser.parse(md);
String html = renderer.render(document);
//do some more formatting
html = RegexUtils.replaceMarkdownImage(html);
html = RegexUtils.replacePlainImageLinks(html);
return html;
}
@Override
protected String doInBackground(String... strings) {
Parser parser = Parser.builder(OPTIONS)
.extensions(EXTENSIONS)
.build();
HtmlRenderer renderer = HtmlRenderer.builder(OPTIONS)
.escapeHtml(true)
.attributeProviderFactory(new IndependentAttributeProviderFactory() {
@Override
public AttributeProvider create(NodeRendererContext context) {
return new CustomAttributeProvider();
}
})
.nodeRendererFactory(new NodeRendererFactoryImpl())
.extensions(EXTENSIONS)
.build();
return renderer.render(parser.parse(strings[0]));
}
protected void makeConverter() {
try {
parserOptions = new MutableDataSet();
parserOptions.setFrom(ParserEmulationProfile.valueOf(emulationSelector.getValue()));
parserOptions.set(Parser.EXTENSIONS, Arrays.asList(
// AbbreviationExtension.create(),
// DefinitionExtension.create(),
// FootnoteExtension.create(),
// TypographicExtension.create(),
TablesExtension.create()
));
parserOptions.set(HtmlRenderer.INDENT_SIZE, indentSize)
// .set(HtmlRenderer.PERCENT_ENCODE_URLS, true)
// .set(TablesExtension.COLUMN_SPANS, false)
.set(TablesExtension.TRIM_CELL_WHITESPACE, trimCheck.isSelected())
.set(TablesExtension.APPEND_MISSING_COLUMNS, appendCheck.isSelected())
.set(TablesExtension.DISCARD_EXTRA_COLUMNS, discardCheck.isSelected())
.set(TablesExtension.APPEND_MISSING_COLUMNS, appendCheck.isSelected());
parser = Parser.builder(parserOptions).build();
renderer = HtmlRenderer.builder(parserOptions).build();
} catch (Exception e) {
logger.error(e.toString());
}
}
public String convert2text() {
try {
// https://github.com/vsch/flexmark-java/blob/master/flexmark-java-samples/src/com/vladsch/flexmark/samples/MarkdownToText.java
DataHolder OPTIONS = PegdownOptionsAdapter.flexmarkOptions(Extensions.ALL);
MutableDataSet FORMAT_OPTIONS = new MutableDataSet();
FORMAT_OPTIONS.set(Parser.EXTENSIONS, OPTIONS.get(Parser.EXTENSIONS));
Parser PARSER = Parser.builder(OPTIONS).build();
Node document = PARSER.parse(mainArea.getText());
TextCollectingVisitor textCollectingVisitor = new TextCollectingVisitor();
String text = textCollectingVisitor.collectAndGetText(document);
return text;
} catch (Exception e) {
return e.toString();
}
}
public String getInstructionsAsHTML() {
MutableDataSet options = new MutableDataSet();
// uncomment to set optional extensions
//options.set(Parser.EXTENSIONS, Arrays.asList(TablesExtension.create(), StrikethroughExtension.create()));
// uncomment to convert soft-breaks to hard breaks
options.set(HtmlRenderer.SOFT_BREAK, "<br />\n");
Parser parser = Parser.builder(options).build();
HtmlRenderer renderer = HtmlRenderer.builder(options).build();
String markdown = getInstructionsAsMarkdown();
// You can re-use parser and renderer instances
Node document = parser.parse(markdown);
return renderer.render(document);
}
private String parseBuildAndRender(String text) {
Parser parser = Parser.builder(OPTIONS)
.extensions(EXTENSIONS)
.build();
HtmlRenderer renderer = HtmlRenderer.builder(OPTIONS)
.escapeHtml(mEscapeHtml)
.attributeProviderFactory(new IndependentAttributeProviderFactory() {
@Override
public AttributeProvider create(NodeRendererContext context) {
return new CustomAttributeProvider();
}
})
.nodeRendererFactory(new NodeRendererFactoryImpl())
.extensions(EXTENSIONS)
.build();
return renderer.render(parser.parse(text));
}
private static String format(String input, int wrapLength) {
// parse markdown
Document document = Parser.builder().build().parse(input);
// format
List<Pair<Block, String>> formattedParagraphs = new SmartFormat(null, null)
.formatParagraphs(document, wrapLength, null, null);
// build result
StringBuilder output = new StringBuilder(input);
for (int i = formattedParagraphs.size() - 1; i >= 0; i--) {
Pair<Block, String> pair = formattedParagraphs.get(i);
Block paragraph = pair.getFirst();
String newText = pair.getSecond();
int startOffset = paragraph.getStartOffset();
int endOffset = paragraph.getEndOffset();
output.replace(startOffset, endOffset, newText);
}
return output.toString();
}
@Override
protected String load() {
String markDownValue = markDawnModel.getObject();
if (Strings.isEmpty(markDownValue)) {
return "";
}
try {
MutableDataSet options = new MutableDataSet();
options.set(Parser.EXTENSIONS, createExtensions());
Parser parser = Parser.builder(options).build();
HtmlRenderer renderer = HtmlRenderer.builder(options).build();
Node node = parser.parse(markDawnModel.getObject());
markDownValue = renderer.render(node);
} catch (Exception e) {
throw new WicketRuntimeException("Can't use flexmark-java for markups", e);
}
return markDownValue;
}
@Override
public void processBody(final ParserContext context) {
List<String> mdExts = context.getConfig().getMarkdownExtensions();
int extensions = PegdownExtensions.NONE;
for (String ext : mdExts) {
if (ext.startsWith("-")) {
ext = ext.substring(1);
extensions = removeExtension(extensions, extensionFor(ext));
} else {
if (ext.startsWith("+")) {
ext = ext.substring(1);
}
extensions = addExtension(extensions, extensionFor(ext));
}
}
DataHolder options = PegdownOptionsAdapter.flexmarkOptions(extensions);
Parser parser = Parser.builder(options).build();
HtmlRenderer renderer = HtmlRenderer.builder(options).build();
Document document = parser.parse(context.getBody());
context.setBody(renderer.render(document));
}
/**
* Convert markdown to html.
*
* @param content markdown contents
* @return html contents
*/
public static String toHtml(String content) {
MutableDataSet options = new MutableDataSet();
options.setFrom(ParserEmulationProfile.MARKDOWN);
// enable table parse!
options.set(Parser.EXTENSIONS, Arrays.asList(TablesExtension.create(), StrikethroughExtension.create()));
Parser parser = Parser.builder(options).build();
HtmlRenderer renderer = HtmlRenderer.builder(options).build();
Node document = parser.parse(content);
return renderer.render(document);
}
/**
* Markdown转Html
* @param markdown
* @return
*/
public static String markdownToHtml(String markdown) {
MutableDataSet options = new MutableDataSet();
Parser parser = Parser.builder(options).build();
HtmlRenderer renderer = HtmlRenderer.builder(options).build();
Node document = parser.parse(markdown);
String html = renderer.render(document);
return html;
}
/**
* 展示网页
*/
private void showHtml(String md) {
DataHolder OPTIONS = PegdownOptionsAdapter.flexmarkOptions(true,
Extensions.NONE);
Parser parser = Parser.builder(OPTIONS).build();
HtmlRenderer renderer = HtmlRenderer.builder(OPTIONS).build();
Node document = parser.parse(md);
String html = renderer.render(document);
// LogUtil.e(html);
mWebView.getSettings().setDefaultTextEncodingName("UTF-8");
mWebView.loadData(html, "text/html; charset=UTF-8", null);
}
/**
* Markdownz转为Html
* @param content
* @return
*/
public static String html(String content){
MutableDataSet options = new MutableDataSet();
options.setFrom(ParserEmulationProfile.MARKDOWN);
options.set(Parser.EXTENSIONS, Arrays.asList(new Extension[]{TablesExtension.create()}));
Parser parser = Parser.builder(options).build();
HtmlRenderer renderer = HtmlRenderer.builder(options).build();
Node document = parser.parse(content);
return renderer.render(document);
}
@Override
public boolean makeMoreParameters() {
try {
parserOptions = new MutableDataSet();
parserOptions.setFrom(ParserEmulationProfile.valueOf(emulationSelector.getValue()));
parserOptions.set(Parser.EXTENSIONS, Arrays.asList(
// AbbreviationExtension.create(),
// DefinitionExtension.create(),
// FootnoteExtension.create(),
// TypographicExtension.create(),
TablesExtension.create()
));
parserOptions.set(HtmlRenderer.INDENT_SIZE, indentSize)
// .set(HtmlRenderer.PERCENT_ENCODE_URLS, true)
// .set(TablesExtension.COLUMN_SPANS, false)
.set(TablesExtension.TRIM_CELL_WHITESPACE, trimCheck.isSelected())
.set(TablesExtension.APPEND_MISSING_COLUMNS, appendCheck.isSelected())
.set(TablesExtension.DISCARD_EXTRA_COLUMNS, discardCheck.isSelected())
.set(TablesExtension.APPEND_MISSING_COLUMNS, appendCheck.isSelected());
parser = Parser.builder(parserOptions).build();
renderer = HtmlRenderer.builder(parserOptions).build();
} catch (Exception e) {
logger.error(e.toString());
return false;
}
return super.makeMoreParameters();
}
@Override
public String render(String markdown) {
List<Extension> extensions = new ArrayList<>();
extensions.add(AnchorLinkExtension.create());
extensions.add(TablesExtension.create());
extensions.add(TaskListExtension.create());
extensions.add(DefinitionExtension.create());
extensions.add(TocExtension.create());
extensions.add(AutolinkExtension.create());
extensions.addAll(contributedExtensions);
MutableDataHolder options = new MutableDataSet()
.set(HtmlRenderer.GENERATE_HEADER_ID, true)
.set(AnchorLinkExtension.ANCHORLINKS_SET_NAME, true)
.set(AnchorLinkExtension.ANCHORLINKS_WRAP_TEXT, false)
.set(AnchorLinkExtension.ANCHORLINKS_TEXT_PREFIX, "<span class='header-anchor'></span>")
.set(Parser.SPACE_IN_LINK_URLS, true)
.setFrom(ParserEmulationProfile.GITHUB_DOC)
.set(TablesExtension.COLUMN_SPANS, false)
.set(TablesExtension.APPEND_MISSING_COLUMNS, true)
.set(TablesExtension.DISCARD_EXTRA_COLUMNS, true)
.set(TablesExtension.HEADER_SEPARATOR_COLUMN_MATCH, true)
.set(Parser.EXTENSIONS, extensions);
Parser parser = Parser.builder(options).build();
HtmlRenderer htmlRenderer = HtmlRenderer.builder(options).build();
Node document = parser.parse(markdown);
return htmlRenderer.render(document);
}
private List<String> transformFencedCodeBlockFromMarkdownToString(InputStream markdownContent) throws IOException {
ArrayList<String> results = new ArrayList<String>();
final MutableDataSet FORMAT_OPTIONS = new MutableDataSet();
FORMAT_OPTIONS.set(Parser.EXTENSIONS, OPTIONS.get(Parser.EXTENSIONS));
Reader targetReader = new InputStreamReader(markdownContent);
Node document = PARSER.parseReader(targetReader);
TextCollectingVisitor textCollectingVisitor = new TextCollectingVisitor();
Node fencedCodeBlock = document.getChildOfType(FencedCodeBlock.class);
while (fencedCodeBlock != null) {
results.add(textCollectingVisitor.collectAndGetText(fencedCodeBlock));
fencedCodeBlock = fencedCodeBlock.getNextAny(FencedCodeBlock.class);
}
return results;
}
private String markdownToHtml(Parser parser, HtmlRenderer renderer, String markdown) {
if (Strings.isNullOrEmpty(markdown)) {
return null;
}
Node document = parser.parse(markdown);
return renderer.render(document);
}
Node parseMarkdown(String text) {
if (parser == null) {
parser = Parser.builder()
.extensions(MarkdownExtensions.getFlexmarkExtensions(Options.getMarkdownRenderer()))
.build();
}
return parser.parse(text);
}
public FlexmarkParser() {
MutableDataSet options = new MutableDataSet();
options.set(Parser.EXTENSIONS, Arrays.asList(StrikethroughExtension.create(),
TablesExtension.create(),
UMLExtension.create(),
AutolinkExtension.create(),
WikiLinkExtension.create(),
TypographicExtension.create()));
options.set(HtmlRenderer.SOFT_BREAK, "<br />\n");
parser = Parser.builder(options).build();
renderer = HtmlRenderer.builder(options).build();
}
/** Apply link transformation on the Markdown links.
*
* @param content the original content.
* @param references the references into the document.
* @return the result of the transformation.
*/
protected String transformMardownLinks(String content, ReferenceContext references) {
if (!isMarkdownToHtmlReferenceTransformation()) {
return content;
}
// Prepare replacement data structures
final Map<BasedSequence, String> replacements = new TreeMap<>((cmp1, cmp2) -> {
final int cmp = Integer.compare(cmp2.getStartOffset(), cmp1.getStartOffset());
if (cmp != 0) {
return cmp;
}
return Integer.compare(cmp2.getEndOffset(), cmp1.getEndOffset());
});
// Visit the links and record the transformations
final MutableDataSet options = new MutableDataSet();
final Parser parser = Parser.builder(options).build();
final Node document = parser.parse(content);
final NodeVisitor visitor = new NodeVisitor(
new VisitHandler<>(Link.class, it -> {
URL url = FileSystem.convertStringToURL(it.getUrl().toString(), true);
url = transformURL(url, references);
if (url != null) {
replacements.put(it.getUrl(), convertURLToString(url));
}
}));
visitor.visitChildren(document);
// Apply the replacements
if (!replacements.isEmpty()) {
final StringBuilder buffer = new StringBuilder(content);
for (final Entry<BasedSequence, String> entry : replacements.entrySet()) {
final BasedSequence seq = entry.getKey();
buffer.replace(seq.getStartOffset(), seq.getEndOffset(), entry.getValue());
}
return buffer.toString();
}
return content;
}
private static MutableDataHolder getMarkdownOptions() {
return new MutableDataSet()
.set(HtmlRenderer.ESCAPE_HTML, true)
.set(EmojiExtension.USE_IMAGE_TYPE, EmojiImageType.UNICODE_FALLBACK_TO_IMAGE)
// for full GFM table compatibility add the following table extension options:
.set(TablesExtension.COLUMN_SPANS, false)
.set(TablesExtension.APPEND_MISSING_COLUMNS, true)
.set(TablesExtension.DISCARD_EXTRA_COLUMNS, true)
.set(TablesExtension.HEADER_SEPARATOR_COLUMN_MATCH, true)
.set(Parser.EXTENSIONS, Arrays.asList(TablesExtension.create(), EmojiExtension.create(),
StrikethroughExtension.create(), TaskListExtension.create()));
}
private String convertMarkdownToHTML(final String md) {
final MutableDataSet options = new MutableDataSet();
final Parser parser = Parser.builder(options).build();
final HtmlRenderer renderer = HtmlRenderer.builder(options).build();
final Node document = parser.parse(md);
return renderer.render(document);
}
public MutableDataSet getNativeOptions() {
MutableDataSet dataSet = new MutableDataSet();
dataSet.set(Parser.EXTENSIONS, parserExtensions);
for (Entry<DataKey, Object> entry : options.getAll().entrySet()) {
dataSet.set(entry.getKey(), entry.getValue());
}
return dataSet;
}
@Override
public void extend(Parser.Builder parserBuilder) {
parserBuilder.customDelimiterProcessor(new MarkDelimiterProcessor());
}
@Override
public void extend(Parser.Builder parserBuilder) {
parserBuilder.customDelimiterProcessor(new MathJaxDelimiterProcessor());
}
@Override
public void extend(Parser.Builder parserBuilder) {
parserBuilder.customDelimiterProcessor(new EmojiDelimiterProcessor());
}
@Override
public void extend(Parser.Builder parserBuilder) {
parserBuilder.postProcessorFactory(new TwitterNodePostProcessor.Factory(parserBuilder));
}
@Override
public void extend(Parser.Builder parserBuilder) {
parserBuilder.customDelimiterProcessor(new KeystrokeDelimiterProcessor());
}
@Override
public void extend(Parser.Builder parserBuilder) {
parserBuilder.customDelimiterProcessor(new MarkDelimiterProcessor());
}
@Override
public void extend(Parser.Builder parserBuilder) {
parserBuilder.customDelimiterProcessor(new MathJaxDelimiterProcessor());
}