Seite 12 von 13

Re: UserScript • PB-SyntaxHighlighting für Codes im Forum

Verfasst: 14.08.2018 09:26
von TroaX
STARGÅTE hat geschrieben:@TroaX:
Es wäre aber auch eine Zumutung für den Traffic, wenn das Syntaxhighlighting auf der Serverseite erstellt wird, und Übertragen wird. Eine Client-seitige Lösung wäre da besser.
Sei mir nicht böse. Aber ich sehe das völlig anders. Für mich persönlich ist es eine Zumutung, wenn ich jemanden helfen möchte und dafür jedesmal den Code erst extrahieren und durch ein externes Tool Hightlighten muss. Ich würde es wenn sowieso per Copy und Paste machen und durch das Highlight-Tool von Andre Simon jagen. Es unterstützt den Import auch aus der Zwischenablage. Bezogen auf den Traffic ist das in der Summe kaum spürbar. Das sind pro Thread-Seite vielleicht zwischen 1 und 10 KB mehr. Ein Javascript, das dies nach dem Laden der Seite macht, ist meist größer.

Re: UserScript • PB-SyntaxHighlighting für Codes im Forum

Verfasst: 14.08.2018 10:36
von STARGÅTE
TroaX hat geschrieben:
STARGÅTE hat geschrieben:@TroaX:
Es wäre aber auch eine Zumutung für den Traffic, wenn das Syntaxhighlighting auf der Serverseite erstellt wird, und Übertragen wird. Eine Client-seitige Lösung wäre da besser.
Sei mir nicht böse. Aber ich sehe das völlig anders. Für mich persönlich ist es eine Zumutung, wenn ich jemanden helfen möchte und dafür jedesmal den Code erst extrahieren und durch ein externes Tool Hightlighten muss. Ich würde es wenn sowieso per Copy und Paste machen und durch das Highlight-Tool von Andre Simon jagen. Es unterstützt den Import auch aus der Zwischenablage. Bezogen auf den Traffic ist das in der Summe kaum spürbar. Das sind pro Thread-Seite vielleicht zwischen 1 und 10 KB mehr. Ein Javascript, das dies nach dem Laden der Seite macht, ist meist größer.
Ach so?
Als Beispiel nehme ich mal dein Beispielcode.
Ohne Formatierung ist er 764 Bytes.
Mit Formatierung ist er 3218 Bytes, also etwa 4 mal mehr Daten!
Gegenüber der Seitengröße von etwa 100kB mag das nicht auffallen, aber bei längeren Codes kann das schon anders aussehen.

Demgegenüber steht mein PureBasicSyntaxHighlighting_1-6b.user.js das nur 9kB groß ist, um im Cache landet, somit kein Traffic mehr erzeugt.

>> "Für mich persönlich ist es eine Zumutung, wenn ich jemanden helfen möchte und dafür jedesmal den Code erst extrahieren und durch ein externes Tool Hightlighten muss."
Wie kommst du darauf? Das ist ein UserScript, was du im Browser installieren kannst, dadurch werden alle Code-Blöcke automatisch formatiert.

Re: UserScript • PB-SyntaxHighlighting für Codes im Forum

Verfasst: 11.08.2019 12:53
von STARGÅTE
Hallo Leute,

ich habe mal das User Script auf den neusten Stand gebracht:
  • Verbesserter Regulärer Ausdruck für die Syntax-Suche
  • Unterstützung von Modulen (ModuleName::BlaBla)
  • Unterstützung von Maskierten Strings (~" \" ")
  • Ein paar Bug-Fixes: Zahlen mit e, Fehlende Schlüsselwörter, Labels uvm.
Hier der Direktdownload: PureBasicSyntaxHighlighting_1-8.user.js

Hier der Code zum auslesen der eigenen Syntaxfarben zum Einfügen ins Script:

Code: Alles auswählen

EnableExplicit

Procedure.s HTMLColor(Color)
  ProcedureReturn "#"+RSet(Hex(Red(Color)),2,"0")+RSet(Hex(Green(Color)),2,"0")+RSet(Hex(Blue(Color)),2,"0")
EndProcedure

Procedure Export(PreferencesFileName.s)
  Protected Keyword.s, String.s
  If OpenPreferences(PreferencesFileName)
    PreferenceGroup("Global")
    Debug "PBSH_Highlight['EnableKeywordBolding'] = "+ReadPreferenceString("EnableKeywordBolding", "1")+";"
    PreferenceGroup("Editor")
    Restore PreferenceKeys
    Repeat
      Read.s Keyword
      If Keyword
        String = ReplaceString(ReadPreferenceString(Keyword, ""), ",", " ")
        If Right(Keyword, 5) = "Color" : String = HTMLColor(Val(String)) : EndIf
        If ReadPreferenceInteger(Keyword+"_Disabled", 0)
          Debug "//PBSH_Highlight['"+Keyword+"'] = '"+String+"';"
        Else
          Debug "PBSH_Highlight['"+Keyword+"'] = '"+String+"';"
        EndIf
      EndIf  
    Until Keyword = ""
    ProcedureReturn #True
  EndIf
EndProcedure

Define PreferencesFileName.s

If Not Export(GetUserDirectory(#PB_Directory_ProgramData)+"PureBasic\PureBasic.prefs")
  PreferencesFileName = OpenFileRequester("Preference File", GetHomeDirectory(), "PureBasic.prefs", 0)
  Export(PreferencesFileName)
EndIf

DataSection
  PreferenceKeys:
  Data.s "EditorFontName", "EditorFontSize", "EditorFontStyle", "BackgroundColor", "NormalTextColor"
  Data.s "BasicKeywordColor", "CommentColor", "ConstantColor", "StringColor", "PureKeywordColor"
  Data.s "ASMKeywordColor", "PointerColor", "NumberColor", "StructureColor", "LabelColor", "ModuleColor"
  Data.s "OperatorColor", "SeparatorColor", ""
EndDataSection
Wäre nett wenn ihr testen könntet, ob alle möglichen Codes richtig gefärbt werden.

Edit: Und gleich noch zwei Keywords gefunden die nicht drin waren ^^

Re: UserScript • PB-SyntaxHighlighting für Codes im Forum

Verfasst: 11.08.2019 15:16
von Sicro
Hallo STARGÅTE,

vielen Dank für dein Update.

Diese Version funktioniert bei mir aber leider nicht mehr. Die Firefox-Web-Konsole (in Web-Entwickler) meldet:
SyntaxError: invalid regexp group viewtopic.php:1:1091
Zwei fehlende Keywords sind mir noch aufgefallen:

Code: Alles auswählen

CompilerWarning
DeclareC
Bezüglich der RegEx kannst du mal einen Blick auf meinen PBLexer werfen. Dort sind die RegEx ziemlich ausgereift und unterstützen auch einige Feinheiten. Bei Konstanten können z. B. nach dem "#"-Zeichen noch Tabs und Leerzeichen existieren, bevor der eigentliche Name folgt.

Re: UserScript • PB-SyntaxHighlighting für Codes im Forum

Verfasst: 11.08.2019 16:31
von STARGÅTE
@Sicro:

Kannst du mir den Link geben, wo der Fehler auftauch?
Die beiden Keywords habe ich hinzugefügt.

> "Bei Konstanten können z. B. nach dem "#"-Zeichen noch Tabs und Leerzeichen existieren, bevor der eigentliche Name folgt."
Sehr interessant, wusste nicht das PB sowas kompiliert ^^:

Code: Alles auswählen

#  Test = 6
Debug#  Test
Da ich den Code hier aus dem Forum aber nicht parsen will, sondern nur Einfärben, mache ich das wie PB und erlaube keine Leerzeichen (beim Einfärben!).

Danke für den Link zu deinem Lexer, werde es mal abgleichen, aber was ich bei dir gerade sehen habe ist:

Code: Alles auswählen

regEx$ = "[0-9]+(?:\.[0-9]+)?(?:e(?:[ \t]*[+\-][ \t]*)?[0-9]+)?" + ; Integers, decimal numbers and binary numbers
Wie soll der Ausdruck Binärzahlen erkenne, die mit % anfangen und nur 0 und 1 erlauben?
Außerdem ist in PureBasic auch keine Ziffer nach dem Dezimalpunkt erlaubt:

Code: Alles auswählen

Debug 1.
Debug 2.e-2

Re: UserScript • PB-SyntaxHighlighting für Codes im Forum

Verfasst: 11.08.2019 18:59
von Bisonte
Habe die 1.8 gerade eingetragen und unverändert aktiviert. Es wird nichts eingefärbt.
(die version 1.6b natürlich vorher deaktiviert)

Danach versucht die Farben gemäss deinem Code eingestellt, nichts wird eingefärbt.
Version 1.8 deaktiviert und 1.6b wieder aktiviert und es wird wieder eingefärbt.

Allerdings habe ich nirgendwo eine Fehlermeldung oder sonstiges gesehen.
FF68.0.1 und GreaseMonkey 4.9

Re: UserScript • PB-SyntaxHighlighting für Codes im Forum

Verfasst: 11.08.2019 19:50
von STARGÅTE
@Bisonte:

Welches Theme nutzt du fürs Forum? Liegt es vielleicht daran?
https://www.purebasic.fr/english/viewto ... 29#p406129

Re: UserScript • PB-SyntaxHighlighting für Codes im Forum

Verfasst: 11.08.2019 20:42
von Bisonte
subsilver2.
Aber wie gesagt, 1.6b funktioniert. Oder ist 1.8 nur für eines der anderen beiden ?

Re: UserScript • PB-SyntaxHighlighting für Codes im Forum

Verfasst: 11.08.2019 20:47
von Sicro
STARGÅTE hat geschrieben:Kannst du mir den Link geben, wo der Fehler auftauch?
Ich habe die letzte Seite von diesem Thread verwendet, also:
viewtopic.php?f=13&t=21089&start=110

Ich habe gerade deinen langen RegEx bei der Internetseite https://regexr.com/ prüfen lassen und bekam folgende Warnungen angezeigt:
(?<=) Warning: The "positive lookbehind" feature may not be supported in all browsers.
(?<!) Warning: The "negative lookbehind" feature may not be supported in all browsers.
Entferne ich die problematischen Teilausdrücke aus deinem RegEx funktioniert der Syntax-Highlighter wieder.
STARGÅTE hat geschrieben:Da ich den Code hier aus dem Forum aber nicht parsen will, sondern nur Einfärben, mache ich das wie PB und erlaube keine Leerzeichen (beim Einfärben!).
Ja, in dem Fall muss es nicht so genau sein. Das ist nur eine beispielhafte Feinheit, die mir auf die Schnelle eingefallen ist.
STARGÅTE hat geschrieben:

Code: Alles auswählen

regEx$ = "[0-9]+(?:\.[0-9]+)?(?:e(?:[ \t]*[+\-][ \t]*)?[0-9]+)?" + ; Integers, decimal numbers and binary numbers
Wie soll der Ausdruck Binärzahlen erkenne, die mit % anfangen und nur 0 und 1 erlauben?
Der Lexer erstellt bei Binärzahlen zwei Tokens: [%] und [101010], weil nicht eindeutig bestimmt werden kann, ob das %-Zeichen im aktuellen Fall ein Operator oder ein Präfix der Binärzahl ist. Der Parser kann das später genau bestimmen, indem er die Token-Sequenz prüft. Das gleiche Problem gibt es auch mit dem *-Zeichen: Pointer-Variable-Präfix oder Multiplikationszeichen.
Hier noch ein Wikipedia-Artikel: https://en.wikipedia.org/wiki/The_lexer_hack

Der Syntax-Highlighter muss aber nicht so genau sein, wie du oben schon geschrieben hast. In der PureBasic-IDE wird das %-Zeichen auch nicht immer korrekt eingefärbt:
value = 10 % 10
value = 10% 10
value = 10 %10
value = 10%10
Außerdem ist in PureBasic auch keine Ziffer nach dem Dezimalpunkt erlaubt
Nicht immer:

Code: Alles auswählen

value.f = 1. + 1.5
ergibt
[COMPILER] Line 1: Syntax error.

Re: UserScript • PB-SyntaxHighlighting für Codes im Forum

Verfasst: 11.08.2019 21:12
von STARGÅTE
(?<=) Warning: The "positive lookbehind" feature may not be supported in all browsers.
(?<!) Warning: The "negative lookbehind" feature may not be supported in all browsers.
Jetzt ist mir auch klar, warum ich damals (vor 10 Jahren) so viel tricksen musste, was ich in der neuen Version wieder rausgeworfen hatte, weil ich es als umständlich einstufte^^

Hm muss ich mir noch mal angucken.
Deswegen gehts auch nicht bei Bisonte ...