UserScript • PB-SyntaxHighlighting für Codes im Forum

Fragen und Anregungen zum Forum.
Beiträge die Community betreffend
Benutzeravatar
TroaX
Beiträge: 659
Registriert: 08.03.2013 14:27
Computerausstattung: PC: Ryzen 9 3950X, 96 GB RAM, RX6800XT, 2.5 TB SSD, 21:9 Display, Pop_OS! | Lappi: Ryzen 7 5800H, 16 GB RAM, 1 TB SSD, Pop_OS!
Wohnort: NRW
Kontaktdaten:

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

Beitrag 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.
PC: Ryzen 9 3950X | 96 GB RAM | RX6800XT | 2,5 TB NVMe | Pop_OS!
Notebook: 16" 3:2 | Ryzen 7 5800H | 16 GB RAM | Radeon Vega | 1TB NVMe | Pop_OS!
NAS: Fritz.Box :lol:
Coding: Purebasic 6.04 | PHP | HTML | CSS | Javascript
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 6996
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

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

Beitrag 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.
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 6996
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

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

Beitrag 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 ^^
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
Sicro
Beiträge: 955
Registriert: 11.08.2005 19:08
Kontaktdaten:

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

Beitrag 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.
Bild
Warum OpenSource eine Lizenz haben sollte :: PB-CodeArchiv-Rebirth :: Pleasant-Dark (Syntax-Farbschema) :: RegEx-Engine (kompiliert RegExes zu NFA/DFA)
Manjaro Xfce x64 (Hauptsystem) :: Windows 10 Home (VirtualBox) :: Neueste PureBasic-Version
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 6996
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

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

Beitrag 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
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
Bisonte
Beiträge: 2427
Registriert: 01.04.2007 20:18

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

Beitrag 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
PureBasic 6.04 LTS (Windows x86/x64) | Windows10 Pro x64 | Asus TUF X570 Gaming Plus | R9 5900X | 64GB RAM | GeForce RTX 3080 TI iChill X4 | HAF XF Evo | build by vannicom​​
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 6996
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

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

Beitrag von STARGÅTE »

@Bisonte:

Welches Theme nutzt du fürs Forum? Liegt es vielleicht daran?
https://www.purebasic.fr/english/viewto ... 29#p406129
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
Bisonte
Beiträge: 2427
Registriert: 01.04.2007 20:18

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

Beitrag von Bisonte »

subsilver2.
Aber wie gesagt, 1.6b funktioniert. Oder ist 1.8 nur für eines der anderen beiden ?
PureBasic 6.04 LTS (Windows x86/x64) | Windows10 Pro x64 | Asus TUF X570 Gaming Plus | R9 5900X | 64GB RAM | GeForce RTX 3080 TI iChill X4 | HAF XF Evo | build by vannicom​​
Benutzeravatar
Sicro
Beiträge: 955
Registriert: 11.08.2005 19:08
Kontaktdaten:

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

Beitrag 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.
Bild
Warum OpenSource eine Lizenz haben sollte :: PB-CodeArchiv-Rebirth :: Pleasant-Dark (Syntax-Farbschema) :: RegEx-Engine (kompiliert RegExes zu NFA/DFA)
Manjaro Xfce x64 (Hauptsystem) :: Windows 10 Home (VirtualBox) :: Neueste PureBasic-Version
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 6996
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

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

Beitrag 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 ...
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Antworten