Forum: www.mikrocontroller.net Bug im Syntaxhighlighting?


von Stefan B. (Gast)


Lesenswert?

In den folgenden Zeilen eines Anhangs wird die if-Zeile fälschlich in 
der Farbe eines Kommentars angezeigt.

    // Auf ANSI ESCAPE SEQUENZ pr�fen
    if (byte == 0x1B) // ESC?

Beispiel aus Beitrag "Re: Daten vom UART am LCD ausgeben"

Verwirrt das Sonderzeichen in "pr�fen" den Syntaxparser?

von Flo (Gast)


Lesenswert?

mach halt mal aus dem ü n ue.

Außerdem sollten Umlaute in einem Softwareprogramm sowieso nicht 
vorkommen, da sie länderspezifisch sind und die Programmierumgebung das 
kennen muss.

von g457 (Gast)


Lesenswert?

Flo schrieb:
> Außerdem sollten Umlaute in einem Softwareprogramm sowieso nicht
> vorkommen, da sie länderspezifisch sind und die Programmierumgebung das
> kennen muss.

Dafür gibts erstens seit vielen Jahren einen gemeinsamen Standard 
(Unicode) und zweitens kann das jeder anständige(tm) Compiler (richtig) 
interpretieren. Wenn eine 'Programmierumgebung' das nicht kann, dann 
würde zumindest ich schwer über einen Wechsel selbiger nachdenken, das 
wäre ja sonst geradezu steinzeitlich.

Nix für ungut

von Uhu U. (uhu)


Lesenswert?

Und ändert das auch nur ein Jota daran, daß der Syntaxhighlighter hier 
im Forum Probleme deswegen bekommt?

Was bitte hat der mit der benutzten 'Programmierumgebung' zu tun?

von g457 (Gast)


Lesenswert?

Uhu Uhuhu schrieb:
> Und ändert das auch nur ein Jota daran, daß der Syntaxhighlighter hier
> im Forum Probleme deswegen bekommt?

Nope, nicht mal ein ε, brauchts auch nicht.

> Was bitte hat der mit der benutzten 'Programmierumgebung' zu tun?

Nix. Du hast den Kontext falsch verstanden (oder nicht gelesen). Dort 
ging es um die Frage, ob man in Quellcode überhaupt Sonderzeichen 
antreffen ★kann★ (respektive erwarten muss, dass welche kommen könnten) 
oder ob die dort grundsätzlich nix verloren haben, weil wir selbigen eh 
in 7bit-ASCII verfassen. Und da Sonderzeichen vorkommen ★können★ 
(Unicode sei Dank sogar plattformübergreifend einheitlich), heisst das 
automagisch auch, dass auch der Parser des Syntaxhighlighters damit 
umgehen können sollte.

..sofern obiges Problem überhaupt an jenem liegt. Könnte prinzipiell 
auch dessen Lexer oder Compiler sein, der die Grätsche macht. So oder 
so: es sollte nicht auftreten, und nur darum gehts :-)

von yalu (Gast)


Lesenswert?

> (Unicode sei Dank sogar plattformübergreifend einheitlich)

Leider nicht, wie das fragliche Programm beweist: Es scheint in der
Windows-üblichen Latin1-Codierung verfasst worden zu sein.

Das Sonderzeichen scheint aber nicht der Grund für den Fehler zu sein.
Weiter unten im Code gibt es eine ähnliche Konstellation, die richtig
gehighlightet wird:
1
      // ohne Kontrolle auf G�ltigkeit
2
      data |= byte;

von yalu (Gast)


Angehängte Dateien:

Lesenswert?

Wenn man das Windows-'ü' durch ein UTF-8-'ü' ersetzt, wird auch der 
andere Code-Abschnitt richtig dargestellt, s. Anhang.

von yalu (Gast)


Lesenswert?

Da die Windows-Umlaute auf einer UTF-8-codierten Webseite ohnehin falsch
dargestellt werden, wäre es evtl. sinnvoll, alle hochgeladenen Quell-
codedateien serverseitig in UTF-8 zu konvertieren. Mit dem file-Befehl
könnte festgestellt werden, wann eine Konvertierung erforderlich ist. Er
gibt eine der drei Meldungen

  ISO-8859 ... text ...
  UTF-8 ... text ...
  ASCII ... text ...

aus, je nachdem, ob die Datei Windows-Umlaute, UTF-8-Umlaute oder nur
ASCII-Zeichen enthält.

Damit wäre gleich beide Probleme gelöst.

von Stefan B. (Gast)


Lesenswert?

Der Quellcode im genannten Anhang hat das ? drin, weil ich den Text aus 
Beitrag "Re: Daten vom UART am LCD ausgeben" per Copy&Paste ins 
AVR Studio übertragen hatte. Dabei entstanden die ? aus den Umlauten. 
Dann in AVR Studio die Quelldatei gespeichert hatte. Dann die Quelldatei 
hochgeladen hatte. In meinem Browser (Seamonkey) ist Zeichensatz Unicode 
(UTF-8) eingestellt, falls das beim Copy&Paste oder Hochladen relevant 
ist.

von Uhu U. (uhu)


Lesenswert?

g457 schrieb:
>> Was bitte hat der mit der benutzten 'Programmierumgebung' zu tun?
>
> Nix. Du hast den Kontext falsch verstanden (oder nicht gelesen). Dort
> ging es um die Frage, ob man in Quellcode überhaupt Sonderzeichen
> antreffen ★kann★

Und was bitte hat das mit dem Thema dieses Threads zu tun?

von Stefan B. (Gast)


Lesenswert?

Muss mich korrigieren (man darf ab einem gewissen Alter nicht aus dem 
Gedächnis schreiben). Die Umlaute des Copy&Paste-Textes sind im AVR 
Studio immer noch vorhanden und noch nicht in ? gewandelt.

von Sven P. (Gast)


Lesenswert?

yalu schrieb:
> Da die Windows-Umlaute auf einer UTF-8-codierten Webseite ohnehin falsch
> dargestellt werden, wäre es evtl. sinnvoll, alle hochgeladenen Quell-
> codedateien serverseitig in UTF-8 zu konvertieren.

Dazu müsste man aber angeben, aus welcher Kodierung die Originaldaten 
kommen. latin1 (iso8859-1) z.B. sieht im Wesentlichen genauso aus, wie 
latin9 (iso8859-15), nur statt ¤ ist da ein €.
Es unterscheiden sich ja nur die Zeichenzuordnungen.

von yalu (Gast)


Lesenswert?

Sven P. schrieb:
> Dazu müsste man aber angeben, aus welcher Kodierung die Originaldaten
> kommen.

Das geht leider nicht. Einmal davon abgesehen, dass es etwas nervig ist,
jedesmal die Zeichenkodierung mit anzugeben, wissen insbesondere die
Benutzer der Zeichenkodierung *-1252 oft gar nicht, dass sie selbige
benutzen (Wer weiß, wofür der Stern steht, braucht sich übrigens nicht
angesprochen und damit auch nicht gekränkt zu fühlen).

Aber eine automatische Erkennung der Kodierung ist doch ok. Auch wenn
sie nicht 100%ig zuverlässig ist, funktioniert sie bei gewöhnlichem
Text, wie er auch in C-Kommentaren zu finden ist, fast immer. Und wenn
sie einmal versagt, ist das auch nicht tragisch.

> latin1 (iso8859-1) z.B. sieht im Wesentlichen genauso aus, wie latin9
> (iso8859-15), nur statt ¤ ist da ein €.

Man macht beim Auftreten dieses Zeichencodes in den allerseltensten
Fällen einen Fehler, wenn man ihn als '€' interpretiert.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

yalu schrieb:

> Man macht beim Auftreten dieses Zeichencodes in den allerseltensten
> Fällen einen Fehler, wenn man ihn als '€' interpretiert.

Man macht noch weniger einen Fehler, wenn man ihn als ¤ interpretiert,
denn das ist das generische Währungssymbol. :-)

von Andreas S. (andreas) (Admin) Benutzerseite


Lesenswert?

Problem ist behoben. Wenn der Zeichensatz kein gültiges UTF-8 ist, dann 
wird angenommen dass er ISO-8859-15 ist und nach UTF-8 konvertiert.
1
begin
2
  Iconv.conv('utf-8', 'utf-8', s)
3
rescue Iconv::IllegalSequence
4
  Iconv.conv('utf-8', 'iso-8859-15', s)
5
end

: Wiederhergestellt durch Admin
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.