1
0
mirror of https://github.com/arduino/Arduino.git synced 2025-02-21 15:54:39 +01:00

URL right-clickable and underlined.

This commit is contained in:
Cristian Maglie 2011-08-23 19:21:42 +02:00
parent d60c42e5ed
commit f233861a4c
6 changed files with 49 additions and 20 deletions

View File

@ -2743,8 +2743,9 @@ public class Editor extends JFrame implements RunnerListener {
String[] parse = SyntaxUtilities.parseCommentUrls(line); String[] parse = SyntaxUtilities.parseCommentUrls(line);
if (parse==null) if (parse==null)
return false; return false;
int pos = parse[0].length()+parse[1].length(); int start = parse[0].length();
if (offset<pos || offset>pos+2) int stop = start + parse[1].length();
if (offset<start|| offset>stop+2)
return false; return false;
clickedURL = parse[1]; clickedURL = parse[1];
return true; return true;

View File

@ -772,8 +772,9 @@ public class Preferences {
s = st.nextToken(); s = st.nextToken();
boolean bold = (s.indexOf("bold") != -1); boolean bold = (s.indexOf("bold") != -1);
boolean italic = (s.indexOf("italic") != -1); boolean italic = (s.indexOf("italic") != -1);
boolean underlined = (s.indexOf("underlined") != -1);
//System.out.println(what + " = " + str + " " + bold + " " + italic); //System.out.println(what + " = " + str + " " + bold + " " + italic);
return new SyntaxStyle(color, italic, bold); return new SyntaxStyle(color, italic, bold, underlined);
} }
} }

View File

@ -196,7 +196,8 @@ public class Theme {
s = st.nextToken(); s = st.nextToken();
boolean bold = (s.indexOf("bold") != -1); boolean bold = (s.indexOf("bold") != -1);
boolean italic = (s.indexOf("italic") != -1); boolean italic = (s.indexOf("italic") != -1);
boolean underlined = (s.indexOf("underlined") != -1);
return new SyntaxStyle(color, italic, bold); return new SyntaxStyle(color, italic, bold, underlined);
} }
} }

View File

@ -10,6 +10,10 @@
package processing.app.syntax; package processing.app.syntax;
import java.awt.*; import java.awt.*;
import java.awt.font.TextAttribute;
import java.util.Hashtable;
import java.util.Map;
import javax.swing.JComponent; import javax.swing.JComponent;
@ -27,11 +31,12 @@ public class SyntaxStyle
* @param italic True if the text should be italics * @param italic True if the text should be italics
* @param bold True if the text should be bold * @param bold True if the text should be bold
*/ */
public SyntaxStyle(Color color, boolean italic, boolean bold) public SyntaxStyle(Color color, boolean italic, boolean bold, boolean underlined)
{ {
this.color = color; this.color = color;
this.italic = italic; this.italic = italic;
this.bold = bold; this.bold = bold;
this.underlined = underlined;
} }
/** /**
@ -47,7 +52,7 @@ public class SyntaxStyle
*/ */
public boolean isPlain() public boolean isPlain()
{ {
return !(bold || italic); return !(bold || italic || underlined);
} }
/** /**
@ -67,7 +72,14 @@ public class SyntaxStyle
} }
/** /**
* Returns the specified font, but with the style's bold and * @return true if underline is enabled for this style.
*/
public boolean isUnderlined() {
return underlined;
}
/**
* Returns the specified font, but with the style's bold, underline and
* italic flags applied. * italic flags applied.
*/ */
public Font getStyledFont(Font font) public Font getStyledFont(Font font)
@ -78,10 +90,16 @@ public class SyntaxStyle
if(font.equals(lastFont)) if(font.equals(lastFont))
return lastStyledFont; return lastStyledFont;
lastFont = font; lastFont = font;
lastStyledFont = new Font(font.getFamily(), lastStyledFont = new Font(font.getFamily(),
(bold ? Font.BOLD : 0) (bold ? Font.BOLD : 0)
| (italic ? Font.ITALIC : 0), | (italic ? Font.ITALIC : 0),
font.getSize()); font.getSize());
if (underlined) {
Map<TextAttribute, Object> attr = new Hashtable<TextAttribute, Object>();
attr.put(TextAttribute.UNDERLINE, TextAttribute.UNDERLINE_ON);
lastStyledFont = lastStyledFont.deriveFont(attr);
}
return lastStyledFont; return lastStyledFont;
} }
@ -100,6 +118,11 @@ public class SyntaxStyle
(bold ? Font.BOLD : 0) (bold ? Font.BOLD : 0)
| (italic ? Font.ITALIC : 0), | (italic ? Font.ITALIC : 0),
font.getSize()); font.getSize());
if (underlined) {
Map<TextAttribute, Object> attr = new Hashtable<TextAttribute, Object>();
attr.put(TextAttribute.UNDERLINE, TextAttribute.UNDERLINE_ON);
lastStyledFont = lastStyledFont.deriveFont(attr);
}
//fontMetrics = Toolkit.getDefaultToolkit().getFontMetrics(lastStyledFont); //fontMetrics = Toolkit.getDefaultToolkit().getFontMetrics(lastStyledFont);
fontMetrics = comp.getFontMetrics(lastStyledFont); fontMetrics = comp.getFontMetrics(lastStyledFont);
return fontMetrics; return fontMetrics;
@ -125,13 +148,16 @@ public class SyntaxStyle
{ {
return getClass().getName() + "[color=" + color + return getClass().getName() + "[color=" + color +
(italic ? ",italic" : "") + (italic ? ",italic" : "") +
(bold ? ",bold" : "") + "]"; (bold ? ",bold" : "") +
(underlined ? ",underlined" : "") +
"]";
} }
// private members // private members
private Color color; private Color color;
private boolean italic; private boolean italic;
private boolean bold; private boolean bold;
private boolean underlined;
private Font lastFont; private Font lastFont;
private Font lastStyledFont; private Font lastStyledFont;
private FontMetrics fontMetrics; private FontMetrics fontMetrics;

View File

@ -95,17 +95,17 @@ public class SyntaxUtilities
{ {
SyntaxStyle[] styles = new SyntaxStyle[Token.ID_COUNT]; SyntaxStyle[] styles = new SyntaxStyle[Token.ID_COUNT];
styles[Token.COMMENT1] = new SyntaxStyle(Color.black,true,false); styles[Token.COMMENT1] = new SyntaxStyle(Color.black,true,false,false);
styles[Token.COMMENT2] = new SyntaxStyle(new Color(0x990033),true,false); styles[Token.COMMENT2] = new SyntaxStyle(new Color(0x990033),true,false,false);
styles[Token.KEYWORD1] = new SyntaxStyle(Color.black,false,true); styles[Token.KEYWORD1] = new SyntaxStyle(Color.black,false,true,false);
styles[Token.KEYWORD2] = new SyntaxStyle(Color.magenta,false,false); styles[Token.KEYWORD2] = new SyntaxStyle(Color.magenta,false,false,false);
styles[Token.KEYWORD3] = new SyntaxStyle(new Color(0x009600),false,false); styles[Token.KEYWORD3] = new SyntaxStyle(new Color(0x009600),false,false,false);
styles[Token.LITERAL1] = new SyntaxStyle(new Color(0x650099),false,false); styles[Token.LITERAL1] = new SyntaxStyle(new Color(0x650099),false,false,false);
styles[Token.LITERAL2] = new SyntaxStyle(new Color(0x650099),false,true); styles[Token.LITERAL2] = new SyntaxStyle(new Color(0x650099),false,true,false);
styles[Token.LABEL] = new SyntaxStyle(new Color(0x990033),false,true); styles[Token.LABEL] = new SyntaxStyle(new Color(0x990033),false,true,false);
styles[Token.OPERATOR] = new SyntaxStyle(Color.black,false,true); styles[Token.OPERATOR] = new SyntaxStyle(Color.black,false,true,false);
styles[Token.URL] = new SyntaxStyle(Color.blue,true,false); styles[Token.URL] = new SyntaxStyle(Color.blue,true,false,false);
styles[Token.INVALID] = new SyntaxStyle(Color.red,false,true); styles[Token.INVALID] = new SyntaxStyle(Color.red,false,true,false);
return styles; return styles;
} }

View File

@ -84,7 +84,7 @@ editor.literal1.style = #006699,plain
editor.literal2.style = #006699,plain editor.literal2.style = #006699,plain
# http://arduino.cc/ # http://arduino.cc/
editor.url.style = #0000ff,italic editor.url.style = #0000ff,underlined
# e.g. + - = / # e.g. + - = /
editor.operator.style = #000000,plain editor.operator.style = #000000,plain