📄 syntaxhighlightingcolorscheme.java
字号:
/*
* 02/26/2004
*
* SyntaxHighlightingColorScheme.java - The set of colors and tokens used by
* an RSyntaxTextArea to color tokens.
* Copyright (C) 2004 Robert Futrell
* email@address.com
* www.website.com
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
package org.fife.ui.rsyntaxtextarea;
import java.awt.Color;
import java.awt.Font;
import org.fife.RUtilities;
/**
* The set of colors and styles used by an <code>RSyntaxTextArea</code> to
* color tokens.
*
* @author Robert Futrell
* @version 1.0
*/
public class SyntaxHighlightingColorScheme {
public SyntaxScheme[] syntaxSchemes;
/*****************************************************************************/
/**
* Creates a color scheme that either has all color values set to
* a default value or set to <code>null</code>.
*
* @param useDefaults If <code>true</code>, all color values will
* be set to default colors; if <code>false</code>,
* all colors will be initially <code>null</code>.
*/
public SyntaxHighlightingColorScheme(boolean useDefaults) {
syntaxSchemes = new SyntaxScheme[Token.NUM_TOKEN_TYPES];
if (useDefaults) {
// Colors used by tokens.
Color commentGreen = new Color(0, 128, 0);
Color literalNumberPurple = new Color(100, 0, 200);
Color literalStringPink = new Color(220, 0, 156);
Color errorYellow = new Color(148, 148, 0);
// Special fonts.
/*
Font commentFont = new Font("Comic Sans MS", Font.ITALIC, 13);
Font reservedWordFont = new Font("Arial", Font.BOLD, 13);
Font stringFont = new Font("Fat", Font.PLAIN, 13);
Font numberFont = new Font("Croobie", Font.PLAIN, 13);
*/
Font commentFont = new Font("Monospaced", Font.ITALIC, 13);
Font reservedWordFont = new Font("Monospaced", Font.BOLD, 13);
syntaxSchemes[Token.COMMENT] = null;
syntaxSchemes[Token.COMMENT_EOL] = new SyntaxScheme(commentGreen, null,
commentFont);
syntaxSchemes[Token.COMMENT_MULTILINE] = new SyntaxScheme(commentGreen, null,
commentFont);
syntaxSchemes[Token.COMMENT_DOCUMENTATION] = new SyntaxScheme(new Color(
164, 0, 0), null, commentFont);
syntaxSchemes[Token.RESERVED_WORD] = new SyntaxScheme(Color.BLUE, null,
reservedWordFont);
syntaxSchemes[Token.FUNCTION] = new SyntaxScheme(new Color(173, 128, 0), null);
syntaxSchemes[Token.LITERAL] = null;
syntaxSchemes[Token.LITERAL_BOOLEAN] = new SyntaxScheme(
literalNumberPurple, null);
syntaxSchemes[Token.LITERAL_NUMBER_DECIMAL_INT] = new SyntaxScheme(
literalNumberPurple, null); //, numberFont);
syntaxSchemes[Token.LITERAL_NUMBER_FLOAT] = new SyntaxScheme(
literalNumberPurple, null); //, numberFont);
syntaxSchemes[Token.LITERAL_NUMBER_HEXADECIMAL] = new SyntaxScheme(
literalNumberPurple, null); //, numberFont);
syntaxSchemes[Token.LITERAL_STRING_DOUBLE_QUOTE] = new SyntaxScheme(
literalStringPink, null); //, stringFont);
syntaxSchemes[Token.LITERAL_CHAR] = new SyntaxScheme(literalStringPink, null);
syntaxSchemes[Token.LITERAL_BACKQUOTE] = new SyntaxScheme(
literalStringPink, null);
syntaxSchemes[Token.DATA_TYPE] = new SyntaxScheme(new Color(0, 128, 128), null);
syntaxSchemes[Token.VARIABLE] = new SyntaxScheme(new Color(255, 153, 0), null);
syntaxSchemes[Token.IDENTIFIER] = new SyntaxScheme(Color.BLACK, null);
syntaxSchemes[Token.WHITESPACE] = new SyntaxScheme(Color.WHITE, null);
syntaxSchemes[Token.SEPARATOR] = new SyntaxScheme(Color.RED, null);
syntaxSchemes[Token.OPERATOR] = new SyntaxScheme(new Color(128, 64, 64), null);
syntaxSchemes[Token.PREPROCESSOR] = new SyntaxScheme(new Color(128, 128,
128), null);
syntaxSchemes[Token.ERROR] = null;
syntaxSchemes[Token.ERROR_IDENTIFIER] = new SyntaxScheme(errorYellow, null);
syntaxSchemes[Token.ERROR_NUMBER_FORMAT] = new SyntaxScheme(errorYellow, null);
syntaxSchemes[Token.ERROR_STRING_DOUBLE] = new SyntaxScheme(errorYellow, null);
syntaxSchemes[Token.ERROR_CHAR] = new SyntaxScheme(errorYellow, null);
}
}
/*****************************************************************************/
/**
* Creates a new syntax highlighting color scheme with the same colors
* as the one passed in. This will be a deep copy.
*
* @param colorScheme The color scheme to copy.
* @throws NullPointerException if <code>colorScheme</code>
* is <code>null</code>.
*/
public SyntaxHighlightingColorScheme(
SyntaxHighlightingColorScheme colorScheme) {
syntaxSchemes = new SyntaxScheme[Token.NUM_TOKEN_TYPES];
for (int i = 0; i < Token.NUM_TOKEN_TYPES; i++) {
SyntaxScheme s = colorScheme.syntaxSchemes[i];
if (s != null) {
syntaxSchemes[i] = new SyntaxScheme(s.foreground,
s.background,
s.font,
s.underline);
syntaxSchemes[i].fontMetrics = s.fontMetrics;
}
}
}
/*****************************************************************************/
/**
* Tests whether this color scheme is the same as another color scheme.
*
* @param otherScheme The color scheme to compare to.
* @return <code>true</code> if this color scheme and
* <code>otherScheme</code> are the same scheme;
* <code>false</code> otherwise.
*/
public boolean equals(Object otherScheme) {
if (! (otherScheme instanceof SyntaxHighlightingColorScheme) ||
otherScheme == null) {
return false;
}
SyntaxScheme[] otherSchemes =
( (SyntaxHighlightingColorScheme) otherScheme).syntaxSchemes;
int length = syntaxSchemes.length;
for (int i = 0; i < length; i++) {
if (syntaxSchemes[i] == null) {
if (otherSchemes[i] != null) {
return false;
}
}
else if (!syntaxSchemes[i].equals(otherSchemes[i])) {
return false;
}
}
return true;
}
/*****************************************************************************/
/**
* Loads a syntax highlighting color scheme from a string created from
* <code>toCommaSeparatedString</code>. This method is useful for saving
* and restoring color schemes.
*
* @param string A string generated from
* <code>toCommaSeparatedString</code>.
* @return A color scheme.
*/
public static SyntaxHighlightingColorScheme loadFromString(String string) {
SyntaxHighlightingColorScheme scheme =
new SyntaxHighlightingColorScheme(true);
try {
if (string != null) {
int tokenTypeCount = Token.NUM_TOKEN_TYPES;
int tokenCount = tokenTypeCount * 7;
String[] tokens = string.split(",");
if (tokens.length != tokenCount) {
throw new Exception(
"Not enough tokens in packed color scheme- expected " +
tokenCount + ", found " + tokens.length);
}
for (int i = 0; i < tokenTypeCount; i++) {
int integer = Integer.parseInt(tokens[i * 7]); // == i.
if (integer != i) {
throw new Exception("Expected " + (i * 7) + ", found " + integer);
}
Color fg = null;
String temp = tokens[i * 7 + 1];
fg = "-".equals(temp) ? null :
RUtilities.getColorFromPacked(Integer.parseInt(temp));
Color bg = null;
temp = tokens[i * 7 + 2];
bg = "-".equals(temp) ? null :
RUtilities.getColorFromPacked(Integer.parseInt(temp));
// Check for "true" or "false" since we don't want to
// accidentally suck in an int representing the next
// packed color, and any string != "true" means false.
temp = tokens[i * 7 + 3];
if (!"t".equals(temp) && !"f".equals(temp)) {
throw new Exception("Expected 't' or 'f', found " + temp);
}
boolean underline = "t".equals(temp) ? true : false;
Font font = new Font(
tokens[i * 7 + 4], // family
Integer.parseInt(tokens[i * 7 + 5]), // style
Integer.parseInt(tokens[i * 7 + 6])); // size
scheme.syntaxSchemes[i] = new SyntaxScheme(fg, bg, font, underline);
}
}
}
catch (Exception e) {
e.printStackTrace();
}
return scheme;
}
/*****************************************************************************/
/**
* Returns this syntax highlighting scheme as a comma-separated list of
* values as follows:
* <ul>
* <li>If a color is non-null, it is added as a 24-bit integer
* of the form <code>((r<<16) | (g<<8) | (b))</code>; if it is
* <code>null</code>, it is added as "<i>-,</i>".
* <li>The style (bold/italic) is added as an integer like so:
* "<i>family,</i> <i>style,</i> <i>size</i>".
* <li>The entire syntax highlighting scheme is thus one long string of
* color schemes of the format "<i>i,[fg],[bg],uline,[style]</i>,
* where:
* <ul>
* <li><code>i</code> is the index of the syntax scheme.
* <li><i>fg</i> and <i>bg</i> are the foreground and background
* colors for the scheme, and may be null (represented by
* <code>-</code>).
* <li><code>uline</code> is whether or not the font should be
* underlined, and is either <code>t</code> or <code>f</code>.
* <li><code>style</code> is the <code>family,style,size</code>
* triplet described above.
* </ul>
* </ul>
*
* @return A string representing the rgb values of the colors.
* @see org.fife.RUtilities#getPackedColor
*/
public String toCommaSeparatedString() {
String retVal = "";
for (int i = 0; i < Token.NUM_TOKEN_TYPES; i++) {
retVal += i + ",";
SyntaxScheme ss = syntaxSchemes[i];
if (ss == null) { // Only true for i==0 (NULL token)
retVal += "-,-,f,monospaced," + Font.PLAIN + "," + "13,";
continue;
}
Color c = ss.foreground;
retVal += c != null ? (RUtilities.getPackedColor(c) + ",") : "-,";
c = ss.background;
retVal += c != null ? (RUtilities.getPackedColor(c) + ",") : "-,";
retVal += ss.underline ? "t," : "f,";
Font font = ss.font;
retVal += font.getFamily() + "," + font.getStyle() + "," + font.getSize() +
",";
}
return retVal.substring(0, retVal.length() - 1); // Take off final ','.
}
/*****************************************************************************/
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -