SciTE4AutoIt - Erweitern um FreeBasic, Lexer Probleme...

  • Hy Community,
    ich mache gerade einen Seitensprung in FreeBasic und versuche schon seit einer Ewigkeit SciTE4AutoIt3 dazu zu bringen das auch FB-Code in einem ähnlichen Style wie Au3 erstrahlt.

    Habe schon zig mal die 'freebasic.properties' geändert oder angepasst - immer ohne Erfolg... Habe mich auch durch die (leider englische) SciTE Hilfedatei gelesen und dort einige Punkte erhascht worin beschrieben wird wie der Lexer umgebaut werden kann. Nur liegt nicht der Source des Lexer´s vor und eine neuere Version dessen bringt SciTE direkt zum Absturz.

    Ich las auch was davon das ich ein LUA-Skript verwenden könnte, nur wo finde ich eine Vorlage und wo binde ich diese ein?
    Habt ihr schon Versuche mit dem SciTE-Lexer unternommen? Oder könnt ihr mir (verständliche) Info´s über dieses Thema zukommen lassen ^^

    Um es auf dem Punkt zu bringen, es werden mir Farben angezeigt welche ich garnicht deklariert habe und auch das Folding stimmt gar nicht. Da ich nicht in Erfahrung bringen kann wie ich die Keywords zuordnen muss, kann ich diese nicht entsprechend einfärben... Und das Folding von Kommentar-Blöcken soll in FB mit dem Lexer nicht möglich sein, entweder baue ich diesen um oder vielleicht kann ich auch dem Lexer erzählen das er eine Sprache vor sich hat?!

    freebasic.properties

    Da ich die Keywords nicht Posten kann (mein Firefox hängt sich immer auf) habe ich beide Dateien noch gezippt.

    Grüsse!

    • Offizieller Beitrag

    Mit der Lexxer.dll musst du leider leben, wie sie ist. Da gibt es nix anzupassen.
    Die von dir bereits erwähnte Alternative eines Lexxers als Lua-Skript kannst du mit SciTE4AutoIt nicht vernünftig realisieren. Dazu brauchst du schon ein SciTE, das auch aktuell ist. MIt Au3SciTE kannst du z.B. kein Folding realisieren (per Lua-Skript), weil die entsprechenden User-Funktionen zum Setzen und Abfragen des Folding-Levels in dieser Version noch nicht verfügbar sind.
    Ich hatte mal angefangen einen Au3-Lexxer in Lua zu schreiben, der funktionierte auch -- bis auf das Folding, und somit war er dann doch doch nicht brauchbar. Falls ich das Skript noch finde, kann ich es dir gern zur Verfügung stellen, damit du weißt, wie das gehandelt wird.
    Aber ich hatte mich dabei auch nur an dem Scintilla-Bsp. orientiert: http://www.scintilla.org/ScriptLexer.html

  • Hy,
    den Link hatte ich schon gefunden bin mir aber nicht ganz im klaren wie/wo ich in LUA die Positionen für die entsprechenden Keywords hinterlegen könnte.

    Das nervigste Problem sind die Farbzuweisungen
    Bsp.

    Code
    keywords.$(fb)=$(keywords)
    ...
    # Keyword1    - Keywords&Datatypes
    style.freebasic.3=fore:$(Col_Keyword)


    Woher weiß ich welche "Keyword-ID" zu welchem Style gehört? Ich finde nichts darüber zum nachlesen, und diese ewige Testerei mit den ganzen möglichen Style-ID´s ist eine Zeitschindung... Jedenfalls ist es so nicht richtig.

    Was hällst du von der Idee SciTE zu vermitteln das es sich nicht um FB sondern um Au3 geht? Das wollte ich als nächstes testen - wenn der FB-Lexer unverändert bleiben muss.

    Grüsse!

    • Offizieller Beitrag

    Woher weiß ich welche "Keyword-ID" zu welchem Style gehört?

    Kannst du in diesem Bsp. ab Zeile 734 nachlesen. Das ist ein dynamischer Lua basierter Lexer unter Verwendung von LPeg (in etwa mit RegExp vergleichbar). Funktioniert aber, wie bereits erwähnt, wegen der Folding-Funktionen nicht in SciTE4AutoIt.

    Was hällst du von der Idee SciTE zu vermitteln das es sich nicht um FB sondern um Au3 geht?

    Ich befürchte das geht in die Hose. Auf jeden Fall kannst du anschließend die Darstellung in Au3 vergessen.

  • Super Link, endlich mal etwas Einblick in den ganzen Lexer Krams - Danke ^^

    Ich habe jetzt einfach eine Version mit Au3 Lexer erstellt - und das Highlighting ist jetzt in Bunt und ähnelt schon eher dem gewohnten Bild ;) stimmt aber noch nicht 100%. Auch ist das Folding jetzt besser als zuvor, es gehen bloß keinerlei Kommentare. Auch wird Au3 nicht groß davon beinträchtigt, ich verwende ja nur den Lexer mit einem anderen File-Pattern und anderen Keywords. Lediglich die FreeBasic-API scheint bei mir in Au3 aktiv zu sein :whistling:

    Ausserdem hatte ich die FB-Keywords mit einem Skript erstellt und auch die Ext-Lib mit einbezogen, aber leider ist das Skript verloren und die Keywords sind auf dem Stand von 2013 - daher weiß ich nicht in wie weit diese überhaupt zur aktuellen FB-Version kompitabel sind! Ich hatte mit dem Skript auch eine FB-Api erstellt, diese ist ebenso nicht akuell - aber ich füge diese noch dem Archiv bei. <- Muss in "*\AutoIt3\SciTE\api" abgelegt werden, die freebasic.properties verwendet diese Api.

    Ind der freebasic.properties wird ein Skript angesprochen welches das Kompilieren und ähnliches ermöglichen soll. Ich schreibe dieses noch neu damit auch *.bi Dateien kompiliert werden können...

    Jetzt ist mir etwas aufgefallen, kann es sein das innerhalb der *.properties das Zeichen '/' genauso wie '\' intern reserviert sind? Habe es zwar auch schon geändert getestet - und es gab keine Besserung, aber jetzt grundsätzlich: In FB soll ich ja für eine Kommentar-Box /' und '/ verwenden, wenn dieses Zeichen aber reserviert ist wie könnte ich dieses trotzdem verwenden?
    Der einfache Kommentar-Block (Taste -) lässt sich ja auch verwenden.

    freebasic.properties

    Grüsse!

    [EDIT]
    Eines der Probleme bei dem Folding konnte ich auffinden, die FB Befehle Select, Function, Sub, ... enden nicht wie in Au3 mit z.B. EndSelect sondern mit End Select. Wie könnte ich jetzt folgende Zeilen darauf anpassen:

    Spoiler anzeigen
    Code
    block.start.$(fb)=5 \
        asm if else elseif for case select switch do while with function sub \
        Asm If Else ElseIf For Case Select Switch Do While With Function Sub \
        ASM IF ELSE ELSEIF FOR CASE SELECT SWITCH DO WHILE WITH FUNCTION SUB
    block.end.$(fb)=5 \
        next until loop wend end \
        Next Until Loop Wend End \
        NEXT UNTIL LOOP WEND END


    Das Problem ist eine der End XXX Anweisungen, der zweite Befehl besagt SciTE das direkt nach End der nächste Block geöffnet werden soll. Wie kann ich SciTE beibringen das End Select als eine einzelne Anweisung gilt??
    Habe auch schon soetwas erfolglos probiert: Next Until Loop Wend EndIf "End If" "End Select" "End Function"

    3 Mal editiert, zuletzt von Techmix (17. Februar 2015 um 00:06)

    • Offizieller Beitrag

    Warum schlägst du dich mit dem Scite4Autoit rum und installierst nicht eine neues Scite parallel dazu?
    Da kannst du auch den Lexxer im Source ändern und alles kollidiert nicht mit dem au3 Kram.
    Ich benutze z.B. SciTE Ru mit einem erweiterten Lexxer, der 2 zusätzliche Farben für UserUDFs hat :D
    1 wird direkt aus dem UserUDF Keywords gebildet und die 2. soll mal direkt Funktionen aus dem Script hervorheben.
    Aber das geht erst, wenn ich die passende LUA Datei dazu geschrieben habe. :whistling:

    Btw, benutze ich 3 SciTE4AutoIt paralell , 1 SciTE-Ru und zusätzlich hab ich das SciTE-Lua auf dem Rechner.

    • Offizieller Beitrag

    kann es sein das innerhalb der *.properties das Zeichen '/' genauso wie '\' intern reserviert sind?


    Der Slash ist m.W. nicht reserviert. Nur der Backslash wird in den *.properties als Zeichen für Zeilenfortschreibung genutzt, wenn du ihn an ein Zeilenende setzt.

    Falls du noch keine Style-Definitionen für die properties selbst benutzt, poste ich die mal hier. Alles ohne Highlighting liest sich einfach blöd :D

    Einfügen in SciTEUser.properties
  • Hy!

    Raupi : Ist ne gute Frage ^^ Ich tippe mal auf Gewohnheit! Ich mage es nicht das ich für unterschiedliche Sprachen andauernd den Editor wechseln muss - deshalb mein Anliegen die AutoIt-Version von SciTE anzupassen. Nur wusste ich nicht das diese offensichtlich stärker verändert wurde als das nur andere *.properties verwendet werden. Ich werde mir heute Abend mal SciTE-RU anschauen und auch nochmals die offizielle Scintilla.

    BugFix : Super Sache das mit dem Highlighting :thumbup: Wusste nicht das dieses auch an den Properties angewand werden kann.

    Im allgemeinen würde ich schon gerne bei SciTE bleiben, ich liebe den minimalismus ^^ Mit IDE´s tue ich mich meißtens schwer und verwende dann fast auschließlich nur den Editorteil :D Auch für C verwende ich SciTE, hab nur Keywords editiert und eben Hilfedateien includiert sowie nötige Compiler - dann noch etwas Farbe, und schon Code ich gemütlich in C.

    Einmal editiert, zuletzt von Techmix (17. Februar 2015 um 12:10)

  • Räusper...
    Ihr hattet recht, wenn man in SciTE4Au3 den Au3-Lexer für andere Sprachen verwendet - werden diese Einstellungen auch in Au3 aktiv... So ein Mist ^^

    Habe mir gestern WScite geladen, aber noch keine Hand angesetzt... SciTE-RU kann ich nicht runterladen, die Google-Code Seite ist Down - und es ist von 2007... ?!?

    Und ich hatte so darauf gehofft das SciTE4AutoIt "schnell" angepasst werden kann :whistling: Ich will doch "nur" den grafischen Stil und das Folding von Au3 in FB haben (und noch ein paar andere Extras) aber der Lexer wurde anscheinend schwer verändert - und kein Source ist verfügbar... Sonst könnte man dort wenigstens einige Anpassungen durchführen damit sich dieser nicht so stur auf Au3 fixiert.

    • Offizieller Beitrag

    Gibt ne neue Projektseite https://code.google.com/p/scite-ru-board/
    Link zu RU-Board : http://forum.ru-board.com/topic.cgi?forum=5&topic=35160&glp

    Z.Z. wird aber nicht an der RU-Version gearbeitet. Denen fehlt es an C++ Programmierern, die den Ru Code mit dem Original SciTe zusammenführen.
    Mach aber fast nix, weil die alte Version auch läuft. Hatte sogar einige Fehler im Ru-SciTE beseitigt, mein SVN ist aber abgekackt un die Daten geistern irgendwo rum.
    Hauptfehler an der RU ist, das z.B. Keywords usw nicht länger als 64 KB lang sein dürfen. Man muß die Properties halt aufteilen.


    Hier der Link für die Fehlerbereinigte SciTe.exe und SciLexer.dll incl. AU3Lexxer mit zusätzlichem Style für die USer UDFS https://autoit.de/index.php/Atta…aupi-Patch-rar/

    Einstellungen für die User.Properties oder au3.Properties:

    Code
    #User UDFS
    keywords9.$(file.patterns.au3)=$(au3.keywords.user.udfs)
    #Neuer Style für User UDF
    style.au3.16=fore:#CA3EE0,italics,bold
    • Offizieller Beitrag

    Na dann lade ich es mal neu hoch.

  • Wow, sieht schonmal gut aus dein Link 8o
    Hat sich zufällig jemand diese russischen *.properties übersetzt - Google Translate spuckt teilweise wirren Kram aus...

    Und ich kann kein russisch :D

    Aber da haben die echt ne Menge aus Scintilla gemacht! Auch die Sidebar und Tools können sich sehen lassen :thumbup: Werde mich die Tage damit mal intensiv beschäftigen.

    Grüsse!

    • Offizieller Beitrag

    Habe keine deutsche Properties, die war auf dem SVN und ist nu futsch.
    Im großen und ganzen kann man aber die Bechreibung mit dem Online Übersetzer schon verstehen.
    Muß ja nicht der Google TRanslator sein, der spuckt echten Kack aus.

    Die allermeisten Parameter sind die selben wie im Original SciTE, die bekommst du auf der Homepage.
    Den Rest kannst du ja durch den Translator herausfinden.
    Wenn du irgendwo nicht klar kommst, könne wir das am WE auch im IRC Chat klären.


    Edit: Ich hänge mal die deutsche locale.properties an, die hat BugFix erstellt.
    Edit2: Die Datei muß ins SciTE Hauptverzeichnis