/*
* Copyright 2010 Jon S Akhtar (Sylvanaar)
*
* Licensed 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.sylvanaar.idea.Lua.editor.highlighter;
import com.intellij.openapi.editor.colors.TextAttributesKey;
import com.intellij.openapi.fileTypes.SyntaxHighlighter;
import com.intellij.openapi.options.colors.AttributesDescriptor;
import com.intellij.openapi.options.colors.ColorDescriptor;
import com.intellij.openapi.options.colors.ColorSettingsPage;
import com.sylvanaar.idea.Lua.LuaBundle;
import com.sylvanaar.idea.Lua.LuaIcons;
import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import javax.swing.*;
import java.util.HashMap;
import java.util.Map;
/**
* Created by IntelliJ IDEA.
* User: jon
* Date: Apr 3, 2010
* Time: 1:52:31 AM
*/
public class LuaColorsPage implements ColorSettingsPage {
final String DEMO_TEXT = "<global>a</global> = { <global>foo</global>.<field>bar</field>, <global>foo</global>.<field>bar</field>(), <global>fx</global>(), <global>f</global> = <global>a</global>, 1, <global>FOO</global> } -- url http://www.url.com \n" +
"local <local>x</local>,<local>y</local> = 20,nil\n" +
"for <local>i</local>=1,10 do\n" +
" local <local>y</local> = 0\n" +
" <global>a</global>[<local>i</local>] = function() <local>y</local>=<local>y</local>+1; return <local>x</local>+<local>y</local> end\n" +
"end\n" +
"\n" +
"--[[ " +
" Multiline\n" +
" Comment\n" +
"]]\n" +
"\n" +
"<luadoc>--- External Documentation URL (shift-F1)</luadoc>\n" +
"<luadoc>-- This is called by shift-F1 on the symbol, or by the</luadoc>\n" +
"<luadoc>-- external documentation button on the quick help panel</luadoc>\n" +
"<luadoc>-- <luadoc-tag>@class</luadoc-tag> <luadoc-value>tag-name</luadoc-value> The name to get documentation for.</luadoc>\n" +
"<luadoc>-- <luadoc-tag>@param</luadoc-tag> <parameter>name</parameter> The name to get documentation for.</luadoc>\n" +
"<luadoc>-- <luadoc-tag>@return</luadoc-tag> the URL of the external documentation</luadoc>\n" +
"function <global>getDocumentationUrl</global>(<parameter>name</parameter>) \n" +
" local <local>p1</local>, <local>p2</local> = <global>string</global>.<field>match</field>(<parameter>name</parameter>, \"(%a+)\\.?(%a*)\")\n" +
" local <local>url</local> = <global>BASE_URL</global> .. \"/docs/api/\" .. <local>p1</local> .. [[long string]]\n" +
"\n" +
" if <local>p2</local> and true then <local>url</local> = <local>url</local> .. <local>p2</local> end\n" +
"\n" +
" return <local>url</local>\n" +
"end\n" +
"\n" +
"<global>a</global> = \"BAD\n";
private static final AttributesDescriptor[] ATTRS = new AttributesDescriptor[]{
new AttributesDescriptor(LuaBundle.message("color.settings.number"), LuaHighlightingData.NUMBER),
new AttributesDescriptor(LuaBundle.message("color.settings.string"), LuaHighlightingData.STRING),
new AttributesDescriptor(LuaBundle.message("color.settings.longstring"), LuaHighlightingData.LONGSTRING),
new AttributesDescriptor(LuaBundle.message("color.settings.keyword"), LuaHighlightingData.KEYWORD),
new AttributesDescriptor(LuaBundle.message("color.settings.constant.keywords"), LuaHighlightingData.DEFINED_CONSTANTS),
new AttributesDescriptor(LuaBundle.message("color.settings.globals"), LuaHighlightingData.GLOBAL_VAR),
new AttributesDescriptor(LuaBundle.message("color.settings.locals"), LuaHighlightingData.LOCAL_VAR),
new AttributesDescriptor(LuaBundle.message("color.settings.field"), LuaHighlightingData.FIELD),
new AttributesDescriptor(LuaBundle.message("color.settings.parameter"), LuaHighlightingData.PARAMETER),
new AttributesDescriptor(LuaBundle.message("color.settings.comment"), LuaHighlightingData.COMMENT),
new AttributesDescriptor(LuaBundle.message("color.settings.longcomment"), LuaHighlightingData.LONGCOMMENT),
new AttributesDescriptor(LuaBundle.message("color.settings.luadoc"), LuaHighlightingData.LUADOC),
new AttributesDescriptor(LuaBundle.message("color.settings.luadoc.tag"), LuaHighlightingData.LUADOC_TAG),
new AttributesDescriptor(LuaBundle.message("color.settings.luadoc.value"), LuaHighlightingData.LUADOC_VALUE),
new AttributesDescriptor(LuaBundle.message("color.settings.longstring.braces"), LuaHighlightingData.LONGSTRING_BRACES),
new AttributesDescriptor(LuaBundle.message("color.settings.longcomment.braces"), LuaHighlightingData.LONGCOMMENT_BRACES),
new AttributesDescriptor(LuaBundle.message("color.settings.brackets"), LuaHighlightingData.BRACKETS),
new AttributesDescriptor(LuaBundle.message("color.settings.parenths"), LuaHighlightingData.PARENTHS),
new AttributesDescriptor(LuaBundle.message("color.settings.braces"), LuaHighlightingData.BRACES),
new AttributesDescriptor(LuaBundle.message("color.settings.comma"), LuaHighlightingData.COMMA),
new AttributesDescriptor(LuaBundle.message("color.settings.bad_character"), LuaHighlightingData.BAD_CHARACTER),
};
private static final Map<String, TextAttributesKey> ATTR_MAP = new HashMap<String, TextAttributesKey> ();
static {
ATTR_MAP.put("local", LuaHighlightingData.LOCAL_VAR);
ATTR_MAP.put("global", LuaHighlightingData.GLOBAL_VAR);
ATTR_MAP.put("field", LuaHighlightingData.FIELD);
ATTR_MAP.put("parameter", LuaHighlightingData.PARAMETER);
ATTR_MAP.put("luadoc", LuaHighlightingData.LUADOC);
ATTR_MAP.put("luadoc-tag", LuaHighlightingData.LUADOC_TAG);
ATTR_MAP.put("luadoc-value", LuaHighlightingData.LUADOC_VALUE);
}
@NotNull
public String getDisplayName() {
return LuaBundle.message("color.settings.name");
}
@Nullable
public Icon getIcon() {
return LuaIcons.LUA_ICON;
}
@NotNull
public AttributesDescriptor[] getAttributeDescriptors() {
return ATTRS;
}
@NotNull
public ColorDescriptor[] getColorDescriptors() {
return new ColorDescriptor[0];
}
@NotNull
public SyntaxHighlighter getHighlighter() {
return new LuaSyntaxHighlighter();
}
@NonNls
@NotNull
public String getDemoText() {
return DEMO_TEXT;
}
@Nullable
public Map<String, TextAttributesKey> getAdditionalHighlightingTagToDescriptorMap() {
return ATTR_MAP;
}
}