Syntax-Highlighting in Forenbeiträgen

Dirk

Administrator
Teammitglied
28. Jan. 2007
4.328
166
63
Mittelhessen, Giessen
Sprachen
  1. ANSI C
  2. C++
  3. C#
  4. Java
  5. Kotlin
  6. Pascal
  7. Assembler
  8. PHP
Syntax-Highlighting für Sourcecode in den Beiträgen


Ich bin gerade damit beschäftigt, im Forum Syntax-Highlighting für BascomAVR, C und Assembler zu realisieren. Für Bascom und Assembler muß ich noch die AVR-spezifischen Befehle bzw. Instuction-Codes im Highlighter berücksichtigen (hat jemand eine gut zu verarbeitende Liste der Befehle für Bascom oder Assembler und kann mir diese zur Verfügung stellen? Dies würde mir sehr weiterhelfen :)).

Syntax-Highlighting funktioniert bereits für allgemeine Basic- und Assembler-Befehle. Die Code-Zeilen werden am linken Rand automatisch fortlaufend nummeriert, so daß man sich leicht in Folgebeiträgen auf eine bestimmte Zeile des Codes beziehen kann, ohne nochmal den Code zitieren zu müssen.

Leider habe ich es noch nicht geschafft, daß man wie gewohnt komfortabel über einen "Code einfügen"-Button des Editors die notwendigen Anweisungen im Edit-Feld einfügen kann :rolleyes:. Das werde ich aber noch in Angriff nehmen. :moil:

Dirk
:ciao:

Anweisung für Syntax-Highlighting

Code:
[B]Wenn jemand Syntax-Highlighting nutzen möchte, dann bitte vorerst
die Anweisungen wie in folgenden Beispielen manuell eingeben.[/B]

[B][COLOR=RoyalBlue]BascomAVR[/COLOR][/B]
[noparse][highlight=Bascom]
  ... BascomAVR-Sourcecode ...
[/highlight]
[/noparse]
[B][COLOR=RoyalBlue]
C[/COLOR][/B]
[noparse][highlight=C]
  ... C-Sourcecode ...
[/highlight]
[/noparse]

[B][COLOR=RoyalBlue]Assembler[/COLOR][/B]
[noparse][highlight=ASM]
   ... Assembler-Sourcecode ...
[/highlight][/noparse]
Beispiele:



CodeBox Bascom

'##############################################################################
' Hauptprogramm
'##############################################################################
'Hier ist die Programmhauptschleife
Do
' Variante 1:
' Detektion der Taste über Interrupt, Signalisierung über globale Variable
' Auswertung der Tastenmatrix ausserhalb Interrupt und übergabe Tastencode
' über globale Variable.
#if Variante1
If Key_keypressed = True Then
' 50ms Zeit soll das Betätigen von zwei Tasten gleichzeitig vereinfachen
' -> wird benötigt für "Beschattung stopp" und "Licht aus"
' Außerdem dient die Zeit zum Entprellen der Tasten!!
Waitms Key_waiting
' Tastenmatrix auslesen (Achtung, gleichzeigiges Betätigen innerhalb Reihe problematisch)
Key_taste = Key_query_matrix() ' Abfrage der Tastaturmatrix
' Auswertung der Tastatur und Ausgabe
If Key_taste <> 0 Then
Print "Taste " ; Key_taste ' Anzeige der gelesenen Taste
End If

' globales Flag für Signalisierung zurücksetzen da Auswertung jetzt durchgeführt
Key_keypressed = False

' Nach Auswertung Tastatur für erneute Eingabe wieder freigeben
Gosub Key_enable_keyinterrupt

End If
#endif

' Variante 2:
' Detektion der Taste über Interrupt, Auswertung der Tastenmatrix innerhalb
' Interrupt, Signalisierung und Übergabe Tastencode über globale Variablen
#if Variante2
' Auswertung der Tastatur und Ausgabe
If Key_keypressed = True Then
If Key_taste <> 0 Then
Print "Taste " ; Key_taste ' Anzeige der gelesenen Taste
End If

' globales Flag für Signalisierung zurücksetzen da Auswertung jetzt durchgeführt
Key_keypressed = False

' Nach Auswertung Tastatur für erneute Eingabe wieder freigeben
Gosub Key_enable_keyinterrupt
End If
#endif

Loop
'## End Hauptprogramm #########################################################



CodeBox C
void uart_init(void) {

// Baudrate einstellen (Normaler Modus)
UBRRH = (uint8_t) (UBRR_BAUD>>8);
UBRRL = (uint8_t) (UBRR_BAUD & 0x0ff);

// Aktivieren von receiver und transmitter
UCSRB = (1<<RXEN)|(1<<TXEN);

// Einstellen des Datenformats: 8 Datenbits, 1 Stoppbit
UCSRC = (1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);
}



CodeBox ASM

lcdws: ; WS-Befehl senden - Display Startadresse in r16
cbr r17,0b00011000
sbr r17,0b01100000
out portc,r17
out porta,r16
nop
nop
nop
rcall lcdex
rcall wait33u
ret
 
Hi Dirk!

(hat jemand eine gut zu verarbeitende Liste der Befehle für Bascom oder Assembler und kann mir diese zur Verfügung stellen? Dies würde mir sehr weiterhelfen :)).


Wie soll die Liste denn aussehen ?
Dann kann ich Dir evtl in ner Mußestunde eine Liste basteln :)
Einfach alle Befehle in einer Datei (mit 1 Befehl pro Zeile) oder wie?
Oder sollen da noch Optionen für die Befehle dran für die Befehlsoperanden
damit das Highlighting die Operanden der Befehle mit berücksichtigt?

Noch etwas: Befehle in Klein- oder Großbuchstaben ? Oder wird sowohl als auch erkannt ?
Wird auch noch ne Liste mit Registernamen benötigt ? Wäre dann ein Abwasch ;-)

Gruß
Dino
 
Assembler-Befehle ATmega128

Nochmal Hallo !

Ich hab mal in ner viertel Stunde schnell das Datenblatt von nem Mega128
geplündert, die Befehle extrahiert und über den Umweg von ner csv-Datei
und OpenOffice was Listenmäßiges draus gemacht ...

Anhang anzeigen Mega128_ASM.txt

Ich hoffe es hilft weiter :)
Wenn noch was fehlt ==> einfach melden

Gruß
Dino
 
Hallo Dino,

Dankeschön für die Liste, diese kann ich sehr gut verwenden. Ich werde mir die Liste noch in das notwendige Format (php string array) umschreiben.



Falls jemand noch weitere Listen erzeugen möchte, unten ein Beispiel wie dies für Assembler aussehen kann. Zumindest wäre es so optimal, ich bräuchte so keine weiteren Formatierungen mehr vornehmen. Aber unformatierte Listen reichen mir auch schon.

Wie man in dem Beispiel sieht, kann ich nicht nur Instruktionen farblich hervorheben, sondern auch Register, Direktiven und Operanden.

Folgende Listen sind vorhanden:
Assembler - Instruction
Bascom - Instructions
Bascom - Directives
Bascom - Operands


Noch fehlende Listen:
Assembler - Directives
Assembler - Operands
Bascom/C/Assembler/Pascal - Registers



Die Registerliste wäre für Bascom, Assembler und C die selbe.

Grüße,
Dirk
:ciao:

Code:
[B]Beispiel für das optimale Format der Highlighting-Liste anhand von Assembler[/B]

[B]Instructions:[/B]
'rjmp','jmp','ldi','add', ...

[B]Registers:[/B]
'r0','r1','r2',...,'PORTA','PORTB',...

[B]Directives:[/B]
'.org','.nolist','.equ',...

[B]Operands:[/B]
'high','low',...
 
Keyword overview BASCOM

Hallo Dirk,

super Idee die ich gleich Unterstützen möchte :)

Anbei findest Du eine Übersicht zu BASCOM auf Basis des Reference Manual Version 1.11.9.1. Ich habe mal alles was mir so eingefallen ist zusammengefasst, erhebe aber keinen Anspruch auf Vollständigkeit. Aber ich denke es ist mal ein Anfang und wenn etwas fehlt dann kan "mann" es ja jederzeit ergänzen.

Wenn Du Fragen hast melde Dich einfach bei mir. Ich habe mich bemüht den Wunsch des "speziellen Formats" in die Tat umzusetzen. Hoffe ich habe keinen Haken vergessen.

Liebe Grüße aus Lonsee,

Markus
 

Anhänge

  • BASCOM-Keywords.txt
    4,4 KB · Aufrufe: 15
Hallo Markus,

danke für die Bascom-Liste, diese ist genau in dem Format, wie ich sie benötige, ihr seid echt klasse. Ich werde mir die Listen heute Abend vornehmen und sie in der Software auf dem Server einpflegen, dann habe wir ein schönes Syntaxhighlighting speziell für AVR-Mikrocontroller.

Grüße,
Dirk
:ciao:

Folgende Listen sind vorhanden:
Assembler - Instruction
Bascom - Instructions
Bascom - Directives
Bascom - Operands


Noch fehlende Listen:
Assembler - Directives
Assembler - Operands
Bascom/C/Assembler/Pascal - Registers



Die Registerliste wäre für Bascom, Assembler, C und Pascal die selbe.

Code:
[B]Beispiel für das optimale Format der Highlighting-Liste anhand von Assembler[/B]

[B]Instructions:[/B]
'rjmp','jmp','ldi','add', ...

[B]Registers:[/B]
'r0','r1','r2',...,'PORTA','PORTB',...

[B]Directives:[/B]
'.org','.nolist','.equ',...

[B]Operands:[/B]
'high','low',...
 
Assembler-Direktiven

Moins !

Gerade mal das Internet geplündert. Ich hoffe es sind alle Direktiven :rolleyes:

Anhang anzeigen asm-directives.txt

Register könnte man am besten aus den Include-Dateien für Assembler ziehen
(mal heute abend zuhause machen - wenn ich dazu komme) und die Operands
muß ich mal sehen.

Es gibt ja auch noch die Sachen mit < , << , >> , > , && , ...
und die Label. Label könnte man noch evtl über Regex highliten (wenn man
möchte => fängt am Zeilenanfang an und endet mit Doppelpunkt ) aber
die < , > , ... ?? Da seh ich Probleme. Die Zeichen könnten sonst auch an
anderer Stelle (z.B. in Bemerkungen) gefunden und gehighlighted (wat fürn Wort)
werden.

Gruß
Dino
 
Hallo Dino,

danke für die Liste. :)

So, nun fehlen eigentlich "nur" noch die Register, bei Assembler-Operands muss ich mal probieren ... ist ja ähnlich wie in C.

Grüße,
Dirk
:ciao:

Folgende Listen sind vorhanden:
Assembler - Instruction
Assembler - Directives
Bascom - Instructions
Bascom - Directives
Bascom - Operands


Noch fehlende Listen:
Assembler - Operands
Bascom/C/Assembler/Pascal - Registers
 
Beinahe der gesamte Rest

Hi Dirk !

Ich hätte da was für dich :)

Anhang anzeigen AVR-Assembler.txt

Viel Spass damit.
Die Listen sind teilweise in Zeilen getrennt damit sie nicht sooooo irre laaaaannnnnngggg
werden :D

Ich habe versucht die neuen und die alten Atmels unterzubringen (also Mega128, Tinys und die alten 90S)

Gruß
Dino
 
Hi Dino,

danke für die Mühe, die du dir da gemacht hast. Ich werde alles heute abend in das Forum "einbauen".

Was machen wir damit ???

Symbol Description
! Logical Not
~ Bitwise Not
- Unary Minus
...
... muss ich mir nochmal genauer ansehen, das betrifft ja auch C. Ich denke mal, dass es aber auch nicht schlimm wäre, wenn man diese Anweisungen nicht highlighten (stimmt, schlimmes Wort :D) würde.

Grüße,
Dirk

Folgende Listen sind vorhanden:
Assembler - Instruction
Assembler - Directives
Assembler - Operands
Bascom - Instructions
Bascom - Directives
Bascom - Operands

Bascom/C/Assembler/Pascal - Registers

Noch fehlende Listen:
-
 
Register

Hallo Dirk,

beim durchflöhn der Listen von Dino ist mir aufgefallen, dass ich bei meinen BASCOM-Listen die Register übersehen habe die BASCOM als Konstanten unterstützt. Anbei also noch einige AVR interne Register als Liste.
Sie werden in BASCOM auch mit anderer Farbe hervorgehoben.

Grüße,
Markus
 

Anhänge

  • AVR-Register.txt
    390 Bytes · Aufrufe: 14
Hi Markus,

nochmals danke für die Register-Liste. Ich werde die Listen heute Abend doch noch nicht "einbauen", bin leider heute zu :boring:. Ich werde das aber morgen machen.

Grüße,
Dirk
 
Nochmals ein großes Dankeschön an Dino und Markus für die Assembler- und Bascom-Listen, diese haben mir sehr geholfen. :flowers:

Syntax-Highlighting funktioniert nun für Bascom, Assembler und C. Einige IO-Register fehlen mir noch und einige Highlighting-Regeln möchte ich noch überarbeiten. Als nächstes versuche ich im Editor Code-Buttons für die einzelnen Sprachen "einzubauen", so daß man das neue Feature komfortabler nutzen kann.

Also danke nochmal für die Listen,
Dirk
:ciao:
 
Hi Dirk,
Nochmals ein großes Dankeschön an Dino und Markus für die Assembler- und Bascom-Listen, diese haben mir sehr geholfen. :flowers:
Gern geschehen :flowers:

Einige IO-Register fehlen mir noch
Hab ich letztens auch bei einem Posting gemerkt. Das war bei einem
1281 oder 2561. Der hat noch die Port H, J, K, L und weitere 2 Pins bei G
also fehlen 34 IC-Pins mit den zugehörigen Registern.
Achja, die Timer/Counter 3-5 bei den Kisten könnten auch noch fehlen und
evtl noch die beiden zusätzlichen USARTs 2+3

Gruß
Dino
 
Code wird im Forum nicht richtig umgebrochen

Hi Dirk ,

mir ist aufgefallen das die Quelltexte im CODE-Tag nicht mehr richtig
umgebrochen werden. Der ganze Quelltext in einer Zeile. Die Anzahl
der Zeilen wird aber anscheinend richtig erkannt, da der Rahmen für
den Quelltext ja verschieden lang ist. Bei gehighlightetem Quelltext
scheint alles wunderbar zu sein. Da wird alles richtig umgebrochen
und man hat die Zeilen auch untereinander. Ist da durch das
Syntax-Highlighting was durcheinander ?

Gruß
Dino
 
Hi Dino,

bei mir sieht alles in Ordnung aus, zumindest finde ich kein Code Tag, was irgendwie komisch aussieht.

Kannst du mal einen Link eines Beitrages angeben, wo dies auftritt, oder sieht es bei dir bei allen Code Tags so aus?

Grüße,
Dirk
 
Hi Dirk,

Kannst du mal einen Link eines Beitrages angeben, wo dies auftritt, oder sieht es bei dir bei allen Code Tags so aus?
bin ich jetzt blöde oder was ? :banghead: :banghead: Jetzt ist bei mir auch wieder alles in Ordnung. :confused: :confused:

Ich benutze Firefox 3.0.5 über UMTS (T-Mobile). Der Firefox löscht beim
beenden alle Daten im Cache und anderes Zeugs. Ich hab das schon öfter
in den letzten Tagen gehabt und gerade wollte ich der Sache mal auf den
Grund gehen. Da waren die Bascom/C/Asm-gehighlighteten (Boah) Codes
alle ok. Nur die Codes ohne highlighting waren in einer Zeile. So als ob man
Linux-Texte (mit LF-Zeilenende) in nem Windows-Notepad (mit CR-LF-Ende)
ansieht. Auf der Arbeit im Labor (mit festem Internet-Anschluß) war es aber
glaube ich auch mit fehlendem Zeilenumbruch (auch Firefox 3.0.5).

Und nun ist wieder alles ok. So als ob mir Firefox nen Streich gespielt hat.
:hmmmm: :hmmmm: :hmmmm: Vergessen wir die ganze Sache am besten :D

EDV das unbekannte Wesen :D

Gruß
Dino
 
Hi Dino,

kann schon sein, dass sowas am Browser liegt. Ich nutze hier allerdings auch den Firefox 3.0.5. Wenn es öfters auftritt oder bei anderen Usern auch, dann bitte nochmal melden.

Grüße,
Dirk
 

Über uns

  • Makerconnect ist ein Forum, welches wir ausschließlich für einen Gedankenaustausch und als Diskussionsplattform für Interessierte bereitstellen, welche sich privat, durch das Studium oder beruflich mit Mikrocontroller- und Kleinstrechnersystemen beschäftigen wollen oder müssen ;-)
  • Dirk
  • Du bist noch kein Mitglied in unserer freundlichen Community? Werde Teil von uns und registriere dich in unserem Forum.
  •  Registriere dich

User Menu

 Kaffeezeit

  • Wir arbeiten hart daran sicherzustellen, dass unser Forum permanent online und schnell erreichbar ist, unsere Forensoftware auf dem aktuellsten Stand ist und der Server regelmäßig gewartet wird. Auch die Themen Datensicherheit und Datenschutz sind uns wichtig und hier sind wir auch ständig aktiv. Alles in allem, sorgen wir uns darum, dass alles Drumherum stimmt :-)

    Dir gefällt das Forum und unsere Arbeit und du möchtest uns unterstützen? Unterstütze uns durch deine Premium-Mitgliedschaft!
    Wir freuen uns auch über eine Spende für unsere Kaffeekasse :-)
    Vielen Dank! :ciao:


     Spende uns! (Paypal)