001package org.hl7.fhir.utilities;
002
003/*-
004 * #%L
005 * org.hl7.fhir.utilities
006 * %%
007 * Copyright (C) 2014 - 2019 Health Level 7
008 * %%
009 * Licensed under the Apache License, Version 2.0 (the "License");
010 * you may not use this file except in compliance with the License.
011 * You may obtain a copy of the License at
012 * 
013 *      http://www.apache.org/licenses/LICENSE-2.0
014 * 
015 * Unless required by applicable law or agreed to in writing, software
016 * distributed under the License is distributed on an "AS IS" BASIS,
017 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
018 * See the License for the specific language governing permissions and
019 * limitations under the License.
020 * #L%
021 */
022
023
024import java.util.Collections;
025import java.util.Set;
026
027import org.commonmark.Extension;
028import org.commonmark.ext.gfm.tables.TablesExtension;
029import org.commonmark.node.Node;
030import org.commonmark.parser.Parser;
031import org.commonmark.renderer.html.HtmlRenderer;
032
033import com.github.rjeschke.txtmark.Processor;
034
035public class MarkDownProcessor {
036
037  public enum Dialect {DARING_FIREBALL, COMMON_MARK};
038  
039  private Dialect dialect;
040  
041  
042  public MarkDownProcessor(Dialect dialect) {
043    super();
044    this.dialect = dialect;
045  }
046
047
048  public String process(String source, String context) {
049    switch (dialect) {
050    case DARING_FIREBALL : return Processor.process(source); 
051    case COMMON_MARK : return processCommonMark(source); 
052    default: throw new Error("Unknown Markdown Dialect: "+dialect.toString()+" at "+context); 
053    }
054  }
055
056  private String processCommonMark(String source) {
057    Set<Extension> extensions = Collections.singleton(TablesExtension.create());
058    Parser parser = Parser.builder().extensions(extensions).build();
059    Node document = parser.parse(source);
060    HtmlRenderer renderer = HtmlRenderer.builder().extensions(extensions).build();
061    String html = renderer.render(document);
062    html = html.replace("<table>", "<table class=\"grid\">");
063    return html;  
064  }
065  
066}