/*
* The MIT License (MIT)
*
* Copyright (c) 2016 hsz Jakub Chrzanowski <jakub@hsz.mobi>
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
package mobi.hsz.idea.latex.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 mobi.hsz.idea.latex.LatexBundle;
import mobi.hsz.idea.latex.util.Icons;
import mobi.hsz.idea.latex.util.Resources;
import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import javax.swing.*;
import java.util.Map;
/**
* {@link ColorSettingsPage} that allows to modify color scheme.
*
* @author Jakub Chrzanowski <jakub@hsz.mobi>
* @since 0.2
*/
public class LatexColorSettingsPage implements ColorSettingsPage {
/** The path to the sample LaTeX file. */
@NonNls
private static final String SAMPLE_LATEX_PATH = "/sample.tex";
/** Display name for Color Settings Page. */
@NonNls
private static final String DISPLAY_NAME = LatexBundle.message("colorSettings.displayName");
/**
* The sample LaTeX document shown in the colors settings dialog.
*
* @see #loadSampleLatex()
*/
private static final String SAMPLE_LATEX = loadSampleLatex();
/** Attributes descriptor list. */
private static final AttributesDescriptor[] DESCRIPTORS = new AttributesDescriptor[]{
new AttributesDescriptor(LatexBundle.message("highlighter.instruction"), LatexHighlighterColors.INSTRUCTION),
new AttributesDescriptor(LatexBundle.message("highlighter.argument"), LatexHighlighterColors.ARGUMENT),
new AttributesDescriptor(LatexBundle.message("highlighter.bracket"), LatexHighlighterColors.BRACKET),
new AttributesDescriptor(LatexBundle.message("highlighter.comment"), LatexHighlighterColors.COMMENT),
};
/**
* Returns the icon for the page, shown in the dialog tab.
*
* @return the icon for the page, or null if the page does not have a custom icon.
*/
@Nullable
@Override
public Icon getIcon() {
return Icons.FILE;
}
/**
* Returns the syntax highlighter which is used to highlight the text shown in the preview
* pane of the page.
*
* @return the syntax highlighter instance.
*/
@NotNull
@Override
public SyntaxHighlighter getHighlighter() {
return new LatexHighlighter(null, null);
}
/**
* Returns the text shown in the preview pane.
*
* @return demo text
*/
@NotNull
@Override
public String getDemoText() {
return SAMPLE_LATEX;
}
/**
* Returns the mapping from special tag names surrounding the regions to be highlighted
* in the preview text.
*
* @return <code>null</code>
*/
@Nullable
@Override
public Map<String, TextAttributesKey> getAdditionalHighlightingTagToDescriptorMap() {
return null;
}
/**
* Returns the list of descriptors specifying the {@link TextAttributesKey} instances
* for which colors are specified in the page. For such attribute keys, the user can choose
* all highlighting attributes (font type, background color, foreground color, error stripe color and
* effects).
*
* @return the list of attribute descriptors.
*/
@NotNull
@Override
public AttributesDescriptor[] getAttributeDescriptors() {
return DESCRIPTORS;
}
/**
* Returns the list of descriptors specifying the {@link com.intellij.openapi.editor.colors.ColorKey}
* instances for which colors are specified in the page. For such color keys, the user can
* choose only the background or foreground color.
*
* @return the list of color descriptors.
*/
@NotNull
@Override
public ColorDescriptor[] getColorDescriptors() {
return ColorDescriptor.EMPTY_ARRAY;
}
/**
* Returns the title of the page, shown as text in the dialog tab.
*
* @return the title of the custom page.
*/
@NotNull
@Override
public String getDisplayName() {
return DISPLAY_NAME;
}
/**
* Loads sample .gitignore file
*
* @return the text loaded from {@link #SAMPLE_LATEX_PATH}
* @see #getDemoText()
* @see #SAMPLE_LATEX_PATH
* @see #SAMPLE_LATEX
*/
private static String loadSampleLatex() {
return Resources.getResourceContent(SAMPLE_LATEX_PATH);
}
}