ImGuiColorTextEdit icon indicating copy to clipboard operation
ImGuiColorTextEdit copied to clipboard

Here is a Markdown LanguageDefinition I wrote

Open UnidayStudio opened this issue 6 months ago • 0 comments

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;
}

UnidayStudio avatar Aug 25 '24 14:08 UnidayStudio