下面列出了org.eclipse.jface.text.TextAttribute#getStyle ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。
private TextAttribute merge(TextAttribute first, TextAttribute second) {
if (first == null)
return second;
if (second == null)
return first;
int style = first.getStyle() | second.getStyle();
Color fgColor = second.getForeground();
if (fgColor == null)
fgColor = first.getForeground();
Color bgColor = second.getBackground();
if (bgColor == null)
bgColor = first.getBackground();
Font font = second.getFont();
if (font == null)
font = first.getFont();
return new TextAttribute(fgColor, bgColor, style, font);
}
public List<StyleRange> getRanges(String expression) {
final List<StyleRange> ranges = Lists.newArrayList();
DocumentEvent event = new DocumentEvent();
event.fDocument = new DummyDocument(expression);
DocumentTokenSource tokenSource = tokenSourceProvider.get();
tokenSource.updateStructure(event);
Iterator<ILexerTokenRegion> iterator = tokenSource.getTokenInfos().iterator();
while (iterator.hasNext()) {
ILexerTokenRegion next = iterator.next();
TextAttribute attribute = attributeProvider.getAttribute(tokenTypeMapper.getId(next.getLexerTokenType()));
StyleRange range = new StyleRange(next.getOffset(), next.getLength(), attribute.getForeground(),
attribute.getBackground());
range.font = attribute.getFont();
range.fontStyle = attribute.getStyle();
ranges.add(range);
}
return merge(ranges);
}
/**
* Adds style information to the given text presentation.
*
* @param presentation the text presentation to be extended
* @param offset the offset of the range to be styled
* @param length the length of the range to be styled
* @param attr the attribute describing the style of the range to be styled
* @param wholeLine the boolean switch to declare that the whole line should be colored
*/
private void addRange(TextPresentation presentation, int offset, int length, TextAttribute attr, boolean wholeLine) {
if (attr != null) {
int style= attr.getStyle();
int fontStyle= style & (SWT.ITALIC | SWT.BOLD | SWT.NORMAL);
if(wholeLine) {
try {
int line = document.getLineOfOffset(offset);
int start = document.getLineOffset(line);
length = document.getLineLength(line);
offset = start;
} catch (BadLocationException e) {
}
}
StyleRange styleRange = new StyleRange(offset,length,attr.getForeground(),attr.getBackground(),fontStyle);
styleRange.strikeout = (style & TextAttribute.STRIKETHROUGH) != 0;
styleRange.underline = (style & TextAttribute.UNDERLINE) != 0;
presentation.addStyleRange(styleRange);
}
}
/**
* applyTheme
*
* @param name
* @param stream
* @param defaultColor
* @return
*/
private void applyTheme(String name, IOConsoleOutputStream stream, Color defaultColor)
{
Theme theme = ThemePlugin.getDefault().getThemeManager().getCurrentTheme();
Color color = defaultColor;
int style = SWT.NONE;
// grab theme values, if they exist
if (theme.hasEntry(name))
{
TextAttribute attr = theme.getTextAttribute(name);
color = theme.getForeground(name);
style = attr.getStyle();
}
// apply new values
stream.setColor(color);
stream.setFontStyle(style);
}
private void adaptToStyleChange(Token token, PropertyChangeEvent event, int styleAttribute) {
boolean eventValue= false;
Object value= event.getNewValue();
if (value instanceof Boolean)
eventValue= ((Boolean) value).booleanValue();
else if (IPreferenceStore.TRUE.equals(value))
eventValue= true;
Object data= token.getData();
if (data instanceof TextAttribute) {
TextAttribute oldAttr= (TextAttribute) data;
boolean activeValue= (oldAttr.getStyle() & styleAttribute) == styleAttribute;
if (activeValue != eventValue)
token.setData(new TextAttribute(oldAttr.getForeground(), oldAttr.getBackground(), eventValue ? oldAttr.getStyle() | styleAttribute : oldAttr.getStyle() & ~styleAttribute));
}
}
private void adaptToStyleChange(Token token, PropertyChangeEvent event, int styleAttribute) {
boolean eventValue = false;
Object value = event.getNewValue();
if (value instanceof Boolean)
eventValue = ((Boolean) value).booleanValue();
else if (IPreferenceStore.TRUE.equals(value))
eventValue = true;
Object data = token.getData();
if (data instanceof TextAttribute) {
TextAttribute oldAttr = (TextAttribute) data;
boolean activeValue = (oldAttr.getStyle() & styleAttribute) == styleAttribute;
if (activeValue != eventValue)
token.setData(new TextAttribute(oldAttr.getForeground(), oldAttr.getBackground(),
eventValue ? oldAttr.getStyle() | styleAttribute : oldAttr.getStyle() & ~styleAttribute));
}
}
/**
* Adds style information to the given text presentation.
*
* @param presentation
* the text presentation to be extended
* @param offset
* the offset of the range to be styled
* @param length
* the length of the range to be styled
* @param attr
* the attribute describing the style of the range to be styled
*/
protected void addRange( TextPresentation presentation, int offset,
int length, TextAttribute attr )
{
if ( attr != null )
{
int style= attr.getStyle();
int fontStyle= style & (SWT.ITALIC | SWT.BOLD | SWT.NORMAL);
StyleRange range = new StyleRange( offset,
length,
attr.getForeground( ),
attr.getBackground( ),
fontStyle );
range.strikeout = ( attr.getStyle( ) & TextAttribute.STRIKETHROUGH ) != 0;
range.underline = ( attr.getStyle( ) & TextAttribute.UNDERLINE ) != 0;
range.font= attr.getFont();
presentation.addStyleRange( range );
}
}
/**
* Creates the ranges from parsing the code with the PyCodeScanner.
*
* @param textPresentation this is the container of the style ranges.
* @param scanner the scanner used to parse the document.
* @param doc document to parse.
* @param partitionOffset the offset of the document we should parse.
* @param partitionLen the length to be parsed.
*/
private void createDefaultRanges(TextPresentation textPresentation, PyCodeScanner scanner, Document doc,
int partitionOffset, int partitionLen) {
scanner.setRange(doc, partitionOffset, partitionLen);
IToken nextToken = scanner.nextToken();
while (!nextToken.isEOF()) {
Object data = nextToken.getData();
if (data instanceof TextAttribute) {
TextAttribute textAttribute = (TextAttribute) data;
int offset = scanner.getTokenOffset();
int len = scanner.getTokenLength();
Color foreground = textAttribute.getForeground();
Color background = textAttribute.getBackground();
int style = textAttribute.getStyle();
textPresentation.addStyleRange(new StyleRange(offset, len, foreground, background, style));
}
nextToken = scanner.nextToken();
}
}
/**
* @return Returns a corresponding style range.
*/
public StyleRange createStyleRange() {
int len = getLength();
TextAttribute textAttribute = attribute;
int style = textAttribute.getStyle();
int fontStyle = style & (SWT.ITALIC | SWT.BOLD | SWT.NORMAL);
StyleRange styleRange = new StyleRange(getOffset(), len, textAttribute.getForeground(),
textAttribute.getBackground(), fontStyle);
styleRange.strikeout = (style & TextAttribute.STRIKETHROUGH) != 0;
styleRange.underline = (style & TextAttribute.UNDERLINE) != 0;
styleRange.font = textAttribute.getFont();
return styleRange;
}
protected void setWSTToken(IEclipsePreferences prefs, Theme theme, String ourEquivalentScope, String prefKey,
boolean revertToDefaults)
{
if (revertToDefaults)
{
prefs.remove(prefKey);
}
else
{
TextAttribute attr = theme.getTextAttribute(ourEquivalentScope);
boolean bold = (attr.getStyle() & SWT.BOLD) != 0;
boolean italic = (attr.getStyle() & SWT.ITALIC) != 0;
boolean strikethrough = (attr.getStyle() & TextAttribute.STRIKETHROUGH) != 0;
boolean underline = (attr.getStyle() & TextAttribute.UNDERLINE) != 0;
StringBuilder value = new StringBuilder();
value.append(Theme.toHex(attr.getForeground().getRGB()));
value.append('|');
value.append(Theme.toHex(attr.getBackground().getRGB()));
value.append('|');
value.append(bold);
value.append('|');
value.append(italic);
value.append('|');
value.append(strikethrough);
value.append('|');
value.append(underline);
prefs.put(prefKey, value.toString());
}
}
private boolean matchesDefaults(TextAttribute attr)
{
if (attr == null)
{
return false;
}
// Make sure font is just normal
int style = attr.getStyle();
int fontStyle = style & (SWT.ITALIC | SWT.BOLD | SWT.NORMAL);
if (fontStyle != SWT.NORMAL)
{
return false;
}
if ((style & TextAttribute.STRIKETHROUGH) != 0)
{
return false;
}
if ((style & TextAttribute.UNDERLINE) != 0)
{
return false;
}
// Is FG different?
Color fg = attr.getForeground();
if (fg != null && !fg.getRGB().equals(getCurrentTheme().getForeground()))
{
return false;
}
// Is BG different?
Color bg = attr.getBackground();
if (bg != null && !bg.getRGB().equals(getCurrentTheme().getBackground()))
{
return false;
}
return true;
}
/**
* @return Returns a corresponding style range.
*/
public StyleRange createStyleRange() {
int len= 0;
if (fStyle.isEnabled())
len= getLength();
TextAttribute textAttribute= fStyle.getTextAttribute();
int style= textAttribute.getStyle();
int fontStyle= style & (SWT.ITALIC | SWT.BOLD | SWT.NORMAL);
StyleRange styleRange= new StyleRange(getOffset(), len, textAttribute.getForeground(), textAttribute.getBackground(), fontStyle);
styleRange.strikeout= (style & TextAttribute.STRIKETHROUGH) != 0;
styleRange.underline= (style & TextAttribute.UNDERLINE) != 0;
return styleRange;
}
private void adaptToTextStyleChange(Highlighting highlighting, PropertyChangeEvent event, int styleAttribute) {
boolean eventValue= false;
Object value= event.getNewValue();
if (value instanceof Boolean)
eventValue= ((Boolean) value).booleanValue();
else if (IPreferenceStore.TRUE.equals(value))
eventValue= true;
TextAttribute oldAttr= highlighting.getTextAttribute();
boolean activeValue= (oldAttr.getStyle() & styleAttribute) == styleAttribute;
if (activeValue != eventValue)
highlighting.setTextAttribute(new TextAttribute(oldAttr.getForeground(), oldAttr.getBackground(), eventValue ? oldAttr.getStyle() | styleAttribute : oldAttr.getStyle() & ~styleAttribute));
}
/**
* Adds style information to the given text presentation.
*
* @param presentation the text presentation to be extended
* @param offset the offset of the range to be styled
* @param length the length of the range to be styled
* @param attr the attribute describing the style of the range to be styled
*/
protected void addRange(TextPresentation presentation, int offset, int length, TextAttribute attr) {
if (attr != null) {
int style = attr.getStyle();
int fontStyle = style & (SWT.ITALIC | SWT.BOLD | SWT.NORMAL);
StyleRange styleRange = new StyleRange(offset, length, attr.getForeground(), attr.getBackground(),
fontStyle);
styleRange.strikeout = (style & TextAttribute.STRIKETHROUGH) != 0;
styleRange.underline = (style & TextAttribute.UNDERLINE) != 0;
styleRange.font = attr.getFont();
presentation.addStyleRange(styleRange);
}
}
/**
* Color the text in the sample area according to the current preferences
*/
void applyStyles( )
{
if ( fText == null || fText.isDisposed( ) )
return;
try
{
ITypedRegion[] regions = TextUtilities.computePartitioning( fDocument,
IDocumentExtension3.DEFAULT_PARTITIONING,
0,
fDocument.getLength( ),
true );
if ( regions.length > 0 )
{
for ( int i = 0; i < regions.length; i++ )
{
ITypedRegion region = regions[i];
String namedStyle = (String) fContextToStyleMap.get( region.getType( ) );
if ( namedStyle == null )
continue;
TextAttribute attribute = getAttributeFor( namedStyle );
if ( attribute == null )
continue;
int fontStyle = attribute.getStyle( )
& ( SWT.ITALIC | SWT.BOLD | SWT.NORMAL );
StyleRange style = new StyleRange( region.getOffset( ),
region.getLength( ),
attribute.getForeground( ),
attribute.getBackground( ),
fontStyle );
style.strikeout = ( attribute.getStyle( ) & TextAttribute.STRIKETHROUGH ) != 0;
style.underline = ( attribute.getStyle( ) & TextAttribute.UNDERLINE ) != 0;
style.font = attribute.getFont( );
fText.setStyleRange( style );
}
}
}
catch ( BadLocationException e )
{
ExceptionHandler.handle( e );
}
}
private ScriptStyleRange getIt(String content, int offset, TextAttribute attr, int scriptStyle) {
//background is the default (already set)
Color background = attr.getBackground();
return new ScriptStyleRange(offset, content.length(), attr.getForeground(), background, scriptStyle,
attr.getStyle());
}
/**
* Adds style information to the given text presentation.
*
* @param presentation
* the text presentation to be extended
* @param offset
* the offset of the range to be styled
* @param length
* the length of the range to be styled
* @param attr
* the attribute describing the style of the range to be styled
* @param lastLineStyleRanges
*/
protected void addRange(TextPresentation presentation, int offset, int length, TextAttribute attr) {
if (attr != null) {
int style = attr.getStyle();
int fontStyle = style & (SWT.ITALIC | SWT.BOLD | SWT.NORMAL);
StyleRange styleRange = new StyleRange(offset, length, attr.getForeground(), attr.getBackground(),
fontStyle);
styleRange.strikeout = (style & TextAttribute.STRIKETHROUGH) != 0;
styleRange.underline = (style & TextAttribute.UNDERLINE) != 0;
styleRange.font = attr.getFont();
presentation.addStyleRange(styleRange);
}
}
/**
* Creates a {@link StyleRange} from the given parameters.
*
* @param offset
* the offset
* @param length
* the length of the range
* @param textAttribute
* the {@link TextAttribute}
* @return a {@link StyleRange} from the given parameters
*/
public static StyleRange createStyleRange(final int offset, final int length, final TextAttribute textAttribute) {
int style = textAttribute.getStyle();
int fontStyle = style & (SWT.ITALIC | SWT.BOLD | SWT.NORMAL);
StyleRange styleRange = new StyleRange(offset, length, textAttribute.getForeground(), textAttribute.getBackground(), fontStyle);
styleRange.strikeout = (style & TextAttribute.STRIKETHROUGH) != 0;
styleRange.underline = (style & TextAttribute.UNDERLINE) != 0;
styleRange.font = textAttribute.getFont();
return styleRange;
}