Moin
Also, ich programmiere an einem Editor (wie könnte es anders sein - ist ja eines der häufigsten Projekte) mit Syntax-Highlighting, um ihn an meine Bedürfnisse anpassen zu können und einen Overload wie bei Eclipse / NetBeans IDE zu vermeiden.
Mein Ziel ist in erster Linie Unterstützung für die JAVA- und die PHP-Syntax. Im Forum habe ich einen Link auf http://www.discoverteenergy.com/files/SyntaxDocument.java gefunden und mir die Klasse mal geborgt
Der Editor selbst läuft soweit bisher mit Java-Syntax-Highlighting in einem JEditorPane.
Nun habe ich aber ein paar kleine Fragen:
1) Die Klasse besitzt nun JAVA-Keywords. Es wäre natürlich einfach, den Konstruktor mit dem ContentType aufzurufen und dementsprechend die Keywords einzubinden. Da ich aber eventuell auch noch andere Sprachen berücksichtige möchte (auch wenn es momentan nicht geplant ist) suche ich eine saubere Möglichkeit, die Sprachen/den ContentType von ausserhalb ändern zu können. Sprich, wenn ich mal C#-Syntax einbinden möchte, erstelle ich eine Datei mit den Hinweisen zum Umgang (Keywords, Quotes etc.) - da ich auch verschiedene Farben nutzen möchte, sollen diese ebenfalls parametrisiert werden können.
Da habe ich mir zur Lösung so meine Gedanken gemacht:
- für jede Sprache eine eigene Klasse?
- ein eigenes Format zur Beschreibung?
- oder ist XML ein adäquates Mittel?
2) Wie kann ich, nachdem ich (ich habe die Original-Methode addMatchingBrace abgeändert) einen Klammern-Block eingefügt habe den Cursor in die Mitte setzen? Ich habe da ja einzeilige Klammern () + [] und mehrzeilige { .. }. Öffne ich eine Klammer, fügt er automatisch den gegenüberliegenden Part ein. Hier mal der Code:
Nun würde ich gerne den Cursor versetzen können, so dass ich direkt weiterarbeite.
3) Bietet sich das DefaultStyledDocument überhaupt an - oder sollte man SyntaxHighlighting doch über Scanner realisieren?
4) Ist es möglich, den Default-\t-Wert für einen Tabulator zu ändern? Mit 10 Zeichen ist es doch recht viel.
5) Wenn ein Tabulator eingefügt wurde und ich space 10 Stellen nach vorne komme ich nicht exakt unter dem Start der Tab-Zeile aus. Woran liegt das? Als Font habe ich
6) Wenn ich eine Datei lade, haben die Zeilenhöhen nicht die Höhe, die size=14 ergibt. Somit passt leider die Zeilennummerierung nicht mehr. Kann man die Zeilenhöhe festlegen? Oder gibt es da einen anderen Trick?
Über Hinweise würde ich mich sehr freuen
Beste Grüße aus dem Ruhrpott,
JasonV
Also, ich programmiere an einem Editor (wie könnte es anders sein - ist ja eines der häufigsten Projekte) mit Syntax-Highlighting, um ihn an meine Bedürfnisse anpassen zu können und einen Overload wie bei Eclipse / NetBeans IDE zu vermeiden.
Mein Ziel ist in erster Linie Unterstützung für die JAVA- und die PHP-Syntax. Im Forum habe ich einen Link auf http://www.discoverteenergy.com/files/SyntaxDocument.java gefunden und mir die Klasse mal geborgt
Der Editor selbst läuft soweit bisher mit Java-Syntax-Highlighting in einem JEditorPane.
Nun habe ich aber ein paar kleine Fragen:
1) Die Klasse besitzt nun JAVA-Keywords. Es wäre natürlich einfach, den Konstruktor mit dem ContentType aufzurufen und dementsprechend die Keywords einzubinden. Da ich aber eventuell auch noch andere Sprachen berücksichtige möchte (auch wenn es momentan nicht geplant ist) suche ich eine saubere Möglichkeit, die Sprachen/den ContentType von ausserhalb ändern zu können. Sprich, wenn ich mal C#-Syntax einbinden möchte, erstelle ich eine Datei mit den Hinweisen zum Umgang (Keywords, Quotes etc.) - da ich auch verschiedene Farben nutzen möchte, sollen diese ebenfalls parametrisiert werden können.
Da habe ich mir zur Lösung so meine Gedanken gemacht:
- für jede Sprache eine eigene Klasse?
- ein eigenes Format zur Beschreibung?
- oder ist XML ein adäquates Mittel?
2) Wie kann ich, nachdem ich (ich habe die Original-Methode addMatchingBrace abgeändert) einen Klammern-Block eingefügt habe den Cursor in die Mitte setzen? Ich habe da ja einzeilige Klammern () + [] und mehrzeilige { .. }. Öffne ich eine Klammer, fügt er automatisch den gegenüberliegenden Part ein. Hier mal der Code:
Code:
protected String addMatchingBrace(int offset, String brace) throws BadLocationException {
String retStr = "";
if(brace.equals("{")) {
StringBuffer whiteSpace = new StringBuffer();
int line = rootElement.getElementIndex(offset);
int i = rootElement.getElement(line).getStartOffset();
while (true) {
String temp = doc.getText(i, 1);
if (temp.equals(" ") || temp.equals("\t")) {
whiteSpace.append(temp);
i++;
} else
break;
}
retStr = "{\n" + whiteSpace.toString() + "\t\n" + whiteSpace.toString() + "}";
}
else if(brace.equals("("))
retStr = "()";
else if(brace.equals("["))
retStr = "[]";
return retStr;
}
3) Bietet sich das DefaultStyledDocument überhaupt an - oder sollte man SyntaxHighlighting doch über Scanner realisieren?
4) Ist es möglich, den Default-\t-Wert für einen Tabulator zu ändern? Mit 10 Zeichen ist es doch recht viel.
5) Wenn ein Tabulator eingefügt wurde und ich space 10 Stellen nach vorne komme ich nicht exakt unter dem Start der Tab-Zeile aus. Woran liegt das? Als Font habe ich
Code:
DEFAULT_FONT = new Font("monospaced", Font.PLAIN, 14);
6) Wenn ich eine Datei lade, haben die Zeilenhöhen nicht die Höhe, die size=14 ergibt. Somit passt leider die Zeilennummerierung nicht mehr. Kann man die Zeilenhöhe festlegen? Oder gibt es da einen anderen Trick?
Über Hinweise würde ich mich sehr freuen
Beste Grüße aus dem Ruhrpott,
JasonV