/*
* Copyright (c) 2011-2014 Julien Nicoulaud <julien.nicoulaud@gmail.com>
* Copyright (c) 2015 Vladimir Schneider <vladimir.schneider@gmail.com>
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package com.vladsch.idea.multimarkdown.highlighter;
import com.intellij.lexer.Lexer;
import com.intellij.openapi.editor.colors.TextAttributesKey;
import com.intellij.openapi.fileTypes.SyntaxHighlighterBase;
import com.intellij.psi.tree.IElementType;
import com.vladsch.idea.multimarkdown.parser.MultiMarkdownLexer;
import org.jetbrains.annotations.NotNull;
import java.util.HashMap;
import java.util.Map;
import static com.vladsch.idea.multimarkdown.psi.MultiMarkdownTokenTypeSets.*;
import static com.vladsch.idea.multimarkdown.highlighter.MultiMarkdownHighlighterColors.*;
import static org.pegdown.Extensions.*;
public class MultiMarkdownSyntaxHighlighter extends SyntaxHighlighterBase {
protected static final Map<IElementType, TextAttributesKey> ATTRIBUTES = new HashMap<IElementType, TextAttributesKey>();
protected final boolean forSampleDoc;
static {
fillMap(ATTRIBUTES, TEXT_SET, TEXT_ATTR_KEY);
fillMap(ATTRIBUTES, ABBREVIATION_SET, ABBREVIATION_ATTR_KEY);
fillMap(ATTRIBUTES, ABBREVIATED_TEXT_SET, ABBREVIATED_TEXT_ATTR_KEY);
fillMap(ATTRIBUTES, ANCHOR_LINK_SET, ANCHOR_LINK_ATTR_KEY);
fillMap(ATTRIBUTES, AUTO_LINK_SET, AUTO_LINK_ATTR_KEY);
fillMap(ATTRIBUTES, BLOCK_QUOTE_SET, BLOCK_QUOTE_ATTR_KEY);
fillMap(ATTRIBUTES, BOLD_MARKER_SET, BOLD_MARKER_ATTR_KEY);
fillMap(ATTRIBUTES, BOLD_SET, BOLD_ATTR_KEY);
fillMap(ATTRIBUTES, BOLDITALIC_SET, BOLDITALIC_ATTR_KEY);
fillMap(ATTRIBUTES, BULLET_LIST_SET, BULLET_LIST_ATTR_KEY);
fillMap(ATTRIBUTES, COMMENT_SET, COMMENT_ATTR_KEY);
fillMap(ATTRIBUTES, CODE_SET, CODE_ATTR_KEY);
fillMap(ATTRIBUTES, DEFINITION_LIST_SET, DEFINITION_LIST_ATTR_KEY);
fillMap(ATTRIBUTES, DEFINITION_SET, DEFINITION_ATTR_KEY);
fillMap(ATTRIBUTES, DEFINITION_TERM_SET, DEFINITION_TERM_ATTR_KEY);
fillMap(ATTRIBUTES, EXPLICIT_LINK_SET, EXPLICIT_LINK_ATTR_KEY);
fillMap(ATTRIBUTES, FOOTNOTE_SET, FOOTNOTE_ATTR_KEY);
fillMap(ATTRIBUTES, FOOTNOTE_REF_SET, FOOTNOTE_REF_ATTR_KEY);
fillMap(ATTRIBUTES, HEADER_LEVEL_1_SET, HEADER_LEVEL_1_ATTR_KEY);
fillMap(ATTRIBUTES, SETEXT_HEADER_LEVEL_1_SET, SETEXT_HEADER_LEVEL_1_ATTR_KEY);
fillMap(ATTRIBUTES, HEADER_LEVEL_2_SET, HEADER_LEVEL_2_ATTR_KEY);
fillMap(ATTRIBUTES, SETEXT_HEADER_LEVEL_2_SET, SETEXT_HEADER_LEVEL_2_ATTR_KEY);
fillMap(ATTRIBUTES, HEADER_LEVEL_3_SET, HEADER_LEVEL_3_ATTR_KEY);
fillMap(ATTRIBUTES, HEADER_LEVEL_4_SET, HEADER_LEVEL_4_ATTR_KEY);
fillMap(ATTRIBUTES, HEADER_LEVEL_5_SET, HEADER_LEVEL_5_ATTR_KEY);
fillMap(ATTRIBUTES, HEADER_LEVEL_6_SET, HEADER_LEVEL_6_ATTR_KEY);
fillMap(ATTRIBUTES, HRULE_SET, HRULE_ATTR_KEY);
fillMap(ATTRIBUTES, HTML_BLOCK_SET, HTML_BLOCK_ATTR_KEY);
fillMap(ATTRIBUTES, IMAGE_SET, IMAGE_ATTR_KEY);
fillMap(ATTRIBUTES, INLINE_HTML_SET, INLINE_HTML_ATTR_KEY);
fillMap(ATTRIBUTES, ITALIC_MARKER_SET, ITALIC_MARKER_ATTR_KEY);
fillMap(ATTRIBUTES, ITALIC_SET, ITALIC_ATTR_KEY);
fillMap(ATTRIBUTES, LIST_ITEM_SET, LIST_ITEM_ATTR_KEY);
fillMap(ATTRIBUTES, MAIL_LINK_SET, MAIL_LINK_ATTR_KEY);
fillMap(ATTRIBUTES, ORDERED_LIST_SET, ORDERED_LIST_ATTR_KEY);
fillMap(ATTRIBUTES, QUOTE_SET, QUOTE_ATTR_KEY);
fillMap(ATTRIBUTES, REFERENCE_IMAGE_SET, REFERENCE_IMAGE_ATTR_KEY);
fillMap(ATTRIBUTES, REFERENCE_LINK_SET, REFERENCE_LINK_ATTR_KEY);
fillMap(ATTRIBUTES, REFERENCE_SET, REFERENCE_ATTR_KEY);
fillMap(ATTRIBUTES, SMARTS_SET, SMARTS_ATTR_KEY);
fillMap(ATTRIBUTES, SPECIAL_TEXT_SET, SPECIAL_TEXT_ATTR_KEY);
fillMap(ATTRIBUTES, STRIKETHROUGH_MARKER_SET, STRIKETHROUGH_MARKER_ATTR_KEY);
fillMap(ATTRIBUTES, STRIKETHROUGH_SET, STRIKETHROUGH_ATTR_KEY);
fillMap(ATTRIBUTES, STRIKETHROUGH_BOLD_SET, STRIKETHROUGH_BOLD_ATTR_KEY);
fillMap(ATTRIBUTES, STRIKETHROUGH_ITALIC_SET, STRIKETHROUGH_ITALIC_ATTR_KEY);
fillMap(ATTRIBUTES, STRIKETHROUGH_BOLDITALIC_SET, STRIKETHROUGH_BOLDITALIC_ATTR_KEY);
fillMap(ATTRIBUTES, TABLE_BODY_SET, TABLE_BODY_ATTR_KEY);
fillMap(ATTRIBUTES, TABLE_CAPTION_SET, TABLE_CAPTION_ATTR_KEY);
fillMap(ATTRIBUTES, TABLE_CELL_REVEN_CEVEN_SET, TABLE_CELL_REVEN_CEVEN_ATTR_KEY);
fillMap(ATTRIBUTES, TABLE_CELL_REVEN_CODD_SET, TABLE_CELL_REVEN_CODD_ATTR_KEY);
fillMap(ATTRIBUTES, TABLE_CELL_RODD_CEVEN_SET, TABLE_CELL_RODD_CEVEN_ATTR_KEY);
fillMap(ATTRIBUTES, TABLE_CELL_RODD_CODD_SET, TABLE_CELL_RODD_CODD_ATTR_KEY);
fillMap(ATTRIBUTES, TABLE_COLUMN_SET, TABLE_COLUMN_ATTR_KEY);
fillMap(ATTRIBUTES, TABLE_HEADER_SET, TABLE_HEADER_ATTR_KEY);
fillMap(ATTRIBUTES, TABLE_ROW_EVEN_SET, TABLE_ROW_EVEN_ATTR_KEY);
fillMap(ATTRIBUTES, TABLE_ROW_ODD_SET, TABLE_ROW_ODD_ATTR_KEY);
fillMap(ATTRIBUTES, TABLE_SET, TABLE_ATTR_KEY);
fillMap(ATTRIBUTES, TASK_ITEM_SET, TASK_ITEM_ATTR_KEY);
fillMap(ATTRIBUTES, TASK_DONE_ITEM_SET, TASK_DONE_ITEM_ATTR_KEY);
fillMap(ATTRIBUTES, TASK_ITEM_MARKER_SET, TASK_ITEM_MARKER_ATTR_KEY);
fillMap(ATTRIBUTES, TASK_DONE_MARKER_ITEM_SET, TASK_DONE_ITEM_MARKER_ATTR_KEY);
fillMap(ATTRIBUTES, VERBATIM_SET, VERBATIM_ATTR_KEY);
fillMap(ATTRIBUTES, WIKI_LINK_SET, WIKI_LINK_ATTR_KEY);
fillMap(ATTRIBUTES, WIKI_LINK_SEPARATOR_SET, WIKI_LINK_SEPARATOR_ATTR_KEY);
fillMap(ATTRIBUTES, WIKI_LINK_REF_SET, WIKI_LINK_REF_ATTR_KEY);
fillMap(ATTRIBUTES, WIKI_LINK_REF_ANCHOR_SET, WIKI_LINK_REF_ANCHOR_ATTR_KEY);
fillMap(ATTRIBUTES, WIKI_LINK_REF_ANCHOR_MARKER_SET, WIKI_LINK_REF_ANCHOR_MARKER_ATTR_KEY);
fillMap(ATTRIBUTES, WIKI_LINK_TEXT_SET, WIKI_LINK_TEXT_ATTR_KEY);
}
public MultiMarkdownSyntaxHighlighter(boolean forSampleDoc) {
super();
this.forSampleDoc = forSampleDoc;
}
public MultiMarkdownSyntaxHighlighter() {
super();
this.forSampleDoc = false;
}
@NotNull
public Lexer getHighlightingLexer() {
return forSampleDoc ? new MultiMarkdownLexer(ALL | (ATXHEADERSPACE | RELAXEDHRULES | TASKLISTITEMS | FOOTNOTES)) : new MultiMarkdownLexer();
}
@NotNull
public TextAttributesKey[] getTokenHighlights(IElementType tokenType) {
return pack(ATTRIBUTES.get(tokenType));
}
}