BalazsJako / ImGuiColorTextEdit

Colorizing text editor for ImGui
MIT License
1.42k stars 236 forks source link

Here is a Markdown LanguageDefinition I wrote #155

Open UnidayStudio opened 3 weeks ago

UnidayStudio commented 3 weeks ago

I needed Markdown code highlight to my Game Engine (Cave Engine), so I wrote this one and decided to share here in case anyone want to use it as well or to merge into master. Enjoy! 😃

const TextEditor::LanguageDefinition& TextEditor::LanguageDefinition::Markdown() {
    static bool inited = false;
    static LanguageDefinition langDef;
    if (!inited) {
        langDef.mName = "Markdown";

        // Headers
        langDef.mTokenRegexStrings.push_back(std::make_pair("#+.*", TextEditor::PaletteIndex::Keyword));

        // Emphasis
        langDef.mTokenRegexStrings.push_back(std::make_pair("\\*\\*[^\\*]+\\*\\*", TextEditor::PaletteIndex::Keyword)); // bold
        langDef.mTokenRegexStrings.push_back(std::make_pair("\\*[^\\*]+\\*", TextEditor::PaletteIndex::Keyword)); // italic
        langDef.mTokenRegexStrings.push_back(std::make_pair("~~[^~]+~~", TextEditor::PaletteIndex::Keyword)); // strikethrough

        // Links and Images
        langDef.mTokenRegexStrings.push_back(std::make_pair("\\!\\[.*\\]\\(.*\\)", TextEditor::PaletteIndex::String)); // image
        langDef.mTokenRegexStrings.push_back(std::make_pair("\\[.*\\]\\(.*\\)", TextEditor::PaletteIndex::String)); // link

        // Inline code
        langDef.mTokenRegexStrings.push_back(std::make_pair("`[^`]+`", TextEditor::PaletteIndex::Keyword));

        // Code blocks
        langDef.mTokenRegexStrings.push_back(std::make_pair("```.*```", TextEditor::PaletteIndex::Keyword));

        // Blockquotes
        langDef.mTokenRegexStrings.push_back(std::make_pair("^> .*", TextEditor::PaletteIndex::Comment));

        // Lists
        langDef.mTokenRegexStrings.push_back(std::make_pair("^- .*", TextEditor::PaletteIndex::Keyword));
        langDef.mTokenRegexStrings.push_back(std::make_pair("^\\* .*", TextEditor::PaletteIndex::Keyword));
        langDef.mTokenRegexStrings.push_back(std::make_pair("^\\d+\\. .*", TextEditor::PaletteIndex::Keyword));

        // Horizontal rules
        langDef.mTokenRegexStrings.push_back(std::make_pair("^(-{3,}|\\*{3,}|_{3,})$", TextEditor::PaletteIndex::Keyword));

        // Escaped characters
        langDef.mTokenRegexStrings.push_back(std::make_pair("\\\\.", TextEditor::PaletteIndex::Default));

        langDef.mCommentStart = "<!--";
        langDef.mCommentEnd = "-->";
        langDef.mSingleLineComment = "";

        langDef.mCaseSensitive = true;
        langDef.mAutoIndentation = false;

        langDef.mName = "Markdown";

        inited = true;
    }
    return langDef;
}