Entwickler-Ecke

Sonstiges (.NET) - Scintillanet Script wird anders dargestellt


Csharp-programmierer - So 19.03.17 12:34
Titel: Scintillanet Script wird anders dargestellt
Hallo ihr Entwickler,
ich habe ein kleines Problem.

Uns zwar bin ich gerade dabei einen kleiner Editor für HTML zu schreiben. Dafür benutze ich das ScintillaNET mit Syntax Highlighting. Alles funktioniert super, aber wenn ich in einer HTML Datei einen JavaScript Code stehen habe, wird dieser mit einem weißen Hintergrund dargestellt. Alle anderen Elemente werden richtig mit der ausgewählten Farbe dargestellt. Woran liegt das?

1

Hier ist der Code:

C#-Quelltext
1:
2:
3:
  scintilla.Styles[Style.Html.Script].ForeColor = Color.White;
                scintilla.Styles[Style.Html.Script].FillLine = true;
                scintilla.Styles[Style.Html.Script].BackColor = BackgroundColor;


Das selbe habe ich auch mit allen anderen Membern von Style.Html gemacht, aber nichts funktioniert. Woran liegt das?


Delete - So 19.03.17 14:44

- Nachträglich durch die Entwickler-Ecke gelöscht -


Csharp-programmierer - So 19.03.17 18:00

So ganz verstehe ich das jetzt nicht. Ich habe jetzt noch folgende Zeile ergänzt:


C#-Quelltext
1:
scintilla.SetKeywords(14"function document getElementById");                    


Aber es funktioniert immer noch nicht


Delete - So 19.03.17 18:50

- Nachträglich durch die Entwickler-Ecke gelöscht -


Csharp-programmierer - So 19.03.17 19:46

Ich habe es jetzt so verstanden, dass diese Methode Schlüsselwörter an eine Variable (Style.Html.Script = 14) dranhängt?


Delete - So 19.03.17 19:53

- Nachträglich durch die Entwickler-Ecke gelöscht -


Th69 - So 19.03.17 20:27

Hallo Csharp-programmierer,

welchen Lexer hast du denn eingestellt? Ich nehme mal an Lexer.Html. Funktioniert denn die Quellcodehervorhebung, wenn du explizit Lexer.JavaScript einstellst (zumindestens für den script-Bereich)? Wenn ja, dann mußt du mal nachforschen, wie man "embedded"-Bereiche in Scintilla definieren kann.

PS: Und der erste Parameter bei SetKeywords bestimmt wohl verschiedene Keyword-Sets, s. SCI_SETKEYWORDS(int keyWordSet, const char *keyWords) [http://www.scintilla.org/ScintillaDoc.html#SCI_SETKEYWORDS] - aber wenn ich die Beschreibung richtig verstehe, dann sollte bei HMTL schon JavaScript als "embedded language" eingetragen sein.


Delete - So 19.03.17 20:58

- Nachträglich durch die Entwickler-Ecke gelöscht -


Csharp-programmierer - Di 21.03.17 19:40

So ganz verstehe ich das nicht


Csharp-programmierer - Mi 22.03.17 16:58

Also wie kann ich Schlüsselwörter in die JavaScript Liste hinzufügen, dass das Scintilla diese farblich markiert?


Th69 - Mi 22.03.17 18:44

Ich würde dir gerne helfen, weiß aber auch nicht, worauf user profile iconFrühlingsrolle hinaus will. :nixweiss:


Delete - Mi 22.03.17 21:23

- Nachträglich durch die Entwickler-Ecke gelöscht -


Csharp-programmierer - Do 23.03.17 20:55

Ich habe mir doch die Website auf deinen Link angeguckt und durchgelesen, aber dort steht nicht verständlich beschrieben, wie ich KeyWords adde...


Delete - Do 23.03.17 22:19

- Nachträglich durch die Entwickler-Ecke gelöscht -


Christian S. - Do 23.03.17 23:11

@Frühlingsrolle: Du hast Deinen Standpunkt hier deutlich gemacht und ich kann ihn verstehen. Ich würde Dich trotzdem bitten, die Beiträge wieder etwas mehr ins fachlich hilfreiche und verständliche gehen zu lassen, damit dieser Thread irgendwie sinnvoll bleibt.


Delete - Do 23.03.17 23:25

- Nachträglich durch die Entwickler-Ecke gelöscht -


Csharp-programmierer - Sa 25.03.17 00:06

Ich habe mir die Lexer Werte des Scintillas ausgeben lassen:

1

Da steht ja JavaScript in der zweiten Zeile, also hat es den Index 1. Nun habe ich in dem Scintilla:

C#-Quelltext
1:
scintilla.SetKeywords(1"function alert");                    


Aber trotzdem passiert nichts :/


Delete - Sa 25.03.17 00:41

- Nachträglich durch die Entwickler-Ecke gelöscht -


Csharp-programmierer - Sa 25.03.17 00:59

Vielen Dank für die Antwort, ich finde aber die Version 3.6.3 nirgendwo, also nirgendwo als DLL, wo ich sie in VS laden kann :(


Delete - Sa 25.03.17 05:21

- Nachträglich durch die Entwickler-Ecke gelöscht -


Csharp-programmierer - Sa 25.03.17 10:56

Achsoo, vielen Dank. Ich habe jetzt eine DLL erzeugt, aber da ich in dem Projekt bereits die alte Version des ScintillaNETs habe, weigert sich VS die neue Version aufzunehmen, weil die bereits existiert. Wie kann ich die alte Version (den alten Verweis) löschen?


Delete - Sa 25.03.17 11:28

- Nachträglich durch die Entwickler-Ecke gelöscht -


Csharp-programmierer - Sa 25.03.17 11:41

Vielen Dank, jetzt habe ich die neue Version. Jetzt habe ich auch als Lexer Jason. Hier ist der Quelltext zum Konstruieren des Scintillas:


C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
// Scintilla Instanzieren und Grundeinstellungen anpassen
                Scintilla scintilla = new Scintilla();
                scintilla.Lexer = Lexer.Html;
                scintilla.Dock = DockStyle.Fill;
                scintilla.BorderStyle = BorderStyle.None;

                scintilla.SetKeywords(1"function alert");

                // Font Anpassung
                scintilla.StyleResetDefault();
                scintilla.Styles[Style.Default].Font = Programmeinstellungen.Editor_Font.Name;
                scintilla.Styles[Style.Default].Size = (int)Programmeinstellungen.Editor_Font.Size;
                scintilla.StyleClearAll();

                // Syntax Highlighting
                scintilla.Styles[Style.Html.Default].ForeColor = Color.White;
                scintilla.Styles[Style.Html.Default].BackColor = BackgroundColor;
                scintilla.Styles[Style.Html.Default].FillLine = true;

                scintilla.Styles[Style.Json.Keyword].ForeColor = Color.Blue;
                scintilla.Styles[Style.Json.Keyword].BackColor = BackgroundColor;
                scintilla.Styles[Style.Json.LdKeyword].Bold = true;

                // Sonstige Angaben
                scintilla.Styles[Style.Default].BackColor = BackgroundColor;


Es funktioniert aber immer noch nicht :/


Delete - So 26.03.17 00:40

- Nachträglich durch die Entwickler-Ecke gelöscht -


Csharp-programmierer - So 26.03.17 09:01

Oh man, so langsam fange ich an zu verzweifeln. Ich habe es jetzt so gemacht, wie du gesagt hast


C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
Scintilla scintilla = new Scintilla();
                scintilla.Dock = DockStyle.Fill;
                scintilla.Tag = (string)file;
                scintilla.CaretForeColor = Color.White;
                scintilla.BorderStyle = BorderStyle.None;

                // Font Anpassung
                scintilla.StyleResetDefault();
                scintilla.Styles[Style.Default].Font = Programmeinstellungen.Editor_Font.Name;
                scintilla.Styles[Style.Default].Size = (int)Programmeinstellungen.Editor_Font.Size;
                scintilla.StyleClearAll();

                // Syntax Highlighting
                scintilla.Styles[Style.Html.Script].BackColor = BackColor;
                scintilla.Styles[Style.Html.Script].FillLine = true;
                scintilla.Styles[Style.Html.Script].ForeColor = Color.White;

                using (StreamReader reader = new StreamReader(file))
                {
                    scintilla.Text = reader.ReadToEnd();
                    reader.Close();
                }

                scintilla.Lexer = Lexer.Html;
                scintilla.SetKeywords(1"function alert { } var");

                Scintillas.Add(file, scintilla);


Aber es will einfach nicht funktionieren :(


Delete - So 26.03.17 09:25

- Nachträglich durch die Entwickler-Ecke gelöscht -


Csharp-programmierer - So 26.03.17 09:43

Ich setze jetzt ersten die Lexer und dann die Keywords, den Text lese ich zum Schluss ein. Es passiert aber immer noch nichts


Th69 - So 26.03.17 09:52

Hallo,

am besten du probierst ersteinmal die ScintillaNET.Demo [https://github.com/hgupta9/ScintillaNET.Demo] aus, ob diese bei dir funktioniert. Und dann schaust du dir die Unterschiede zu deinem Programmcode an (sonst wird das wohl hier noch ein Endlos-Thema).

Als weitere Alternative entferne (bzw. auskommentiere) ersteinmal deine ganzen eigenen Style-Anpassungen und schau, was der Lexer.Html standardmäßig schon anzeigt (jetzt, wo du ja eine neuere Version hast).


Csharp-programmierer - So 26.03.17 18:09

Vielen Dank, der JavaScript Code wird in der HTML Datei jetzt richtig dargestellt. Nun brauch ich aber ein Scintilla für PHP. Dieses Scintilla muss HTML und PHP "können". Als Lexer lege ich HTML fest, definiere aber Styles auch für PHP, dann setze ich die Lexer auf HTML und zum Schluss setze ich die Keywords


C#-Quelltext
1:
scintilla.SetKeywords(4"$_GET $_POST <?php ?>");                    


Aber er färbt die eingegebenen Keywords nicht :/

EDIT: An sich funktioniert es jetzt schon mit den Styles von PHP, aber nur dann, wenn das Scintilla erstellt wird. Wenn ich eine neue Variable bsp. eingebe, wird diese noch nicht gefärbt. Wenn ich dies aber speichere und neu öffne, wird sie gefärbt. Also jetzt funktioniert es, aber nicht automatisch. Woran liegt das?


Csharp-programmierer - So 26.03.17 18:17

Danke an alle Helfer, jetzt funktioniert es


Th69 - Mo 27.03.17 09:04

Es wäre schön, wenn du dann den betreffenden Code hier posten würdest, damit andere auch etwas von der Lösung haben.