PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : listings: problem mit komma nach keyword



linuxusr
31-10-2010, 23:09
Hallo,

ich habe ein Problem mit dem listings Paket:
Ich habe einen Sprache definiert und hinzugefuegt (siehe unten). Ich habe die namen der Register als keywords hinzugefuegt. Ich moechte verschiedene Farben fuer z.B. Anweisungen und Register verwenden, was eig. auch geht.

Wenn ich das Dokument setze, werden alle Farben korrekt gesetzt, bis auf "r16" und "r17". Fuege ich ein Leerzeichen vor diesen Registernamen ein, dann werden auch diese richtig angezeigt. Ich denke somit, dass es an dem Komma liegt, dass ohne zusaetzliches Leerzeichen zum keyword hinzugezaehlt wird und dieses somit nicht mehr als solches erkannt wird.

Weiss jemand es eine Moeglichkeit das Problem zu beheben?
Schonmal vielen Dank!

hier noch meine Sprachdefinition:


\usepackage{listings}
\lstdefinelanguage[AVR]{Assembler}%
{morekeywords={%
% Arithmetic and Logic Instructions
add,adc,adiw,sub,subi,sbc,sbci,sbiw,and,andi,or,or i,eor,
com,neg,sbr,cbr,inc,dec,tst,clr,ser,mul,muls,mulsu ,fmul,
fmulsu,des,%
% Branch Instructions
rjmp,ijmp,eijmp,jmp,rcall,icall,eicall,call,ret,re ti,cpse,
cp,cpc,cpi,sbrc,sbrs,sbic,sbis,brbs,brbc,breq,brne ,brcs,
brcc,brsh,brlo,brmi,brpl,brge,brlt,brhs,brhc,brts, brtc,
brvs,brvc,brie,brid,%
% Data Transfer Instructions
mov,movw,ldi,lds,ld,ldd,sts,st,std,lpm,elpm,spm,in ,out,
push,pop,xch,las,lac,lat,lsl,lsr,rol,ror,asr,swap, bset,
bclr,sbi,cbi,bst,bld,sec,clc,sen,cln,sez,clz,sei,c li,
ses,cls,sev,clv,set,clt,seh,clh,%
% MCU Control Instructions
break,nop,sleep,wdr},%
morekeywords=[2]{%
% AVR Assembler Directives
.byte,.cseg,.db,.def,.device,.dseg,.dw,.endm,.endm acro,%
.equ,.eseg,.exit,.include,.list,.listmac,.macro,.n olist,%
.org,.set},%
alsoletter={.,0,1,2,3,4,5,6,7,8,9},%
alsodigit={x,X,b,B,\$},%
morekeywords=[3]{%
% AVR General Purpose Registers
r0,r1,r2,r3,r4,r5,r6,r7,r8,r9,r10,r11,r12,r13,r14, %
r15,r16,r17,r18,r19,r20,r21,r22,r23,r24,r25,r26,r2 7,%
r28,r29,r30,r31},%
sensitive=f,%
morestring=[b]",%
morestring=[b]',%
morecomment=[l];%
}[keywords,comments,strings]
\lstloadlanguages{[AVR]Assembler}
\lstset{%
language=[AVR]Assembler,%
frame=single,%
breaklines=true,%
basicstyle=\ttfamily,%
commentstyle=\itshape\color{avrcom},%
stringstyle=\color{avrstr},%
keywordstyle=[1]\bfseries\color{avrcmd},%
keywordstyle=[2]\bfseries\color{avrascmd},%
keywordstyle=[3]\color{avrreg}%
}


EDIT: und das ist das Beispiel, was ich setzen moechte:


\begin{lstlisting}
; void x(int myvar0, char* b) {}

; 16-bit addition
.include "HelloWorld.asm"
add r16, r0
adc r17, r1
\end{lstlisting}

linuxusr
31-10-2010, 23:18
Ich habe grad herausgefunden, dass das Problem bei z.B. C nicht besteht:


\lstset{language=[ANSI]C,alsoletter=0,morekeywords=myvar0}

\begin{lstlisting}
void x(int myvar0, char* b) {}

; 16-bit addition
.include "HelloWorld.asm"
add r16, r0
adc r17, r1
\end{lstlisting}


Hier wird "myvar0" korrekt farbig gesetzt.
Ich kann aber in den Definitionsdateien (lstlang1.sty), wo auch C drinnen ist, nichts finden :(

voss
01-11-2010, 08:00
Wenn ich das Dokument setze, werden alle Farben korrekt gesetzt, bis auf "r16" und "r17". Fuege ich ein Leerzeichen vor diesen Registernamen ein, dann werden auch diese richtig angezeigt. Ich denke somit, dass es an dem Komma liegt, dass ohne zusaetzliches Leerzeichen zum keyword hinzugezaehlt wird und dieses somit nicht mehr als solches erkannt wird.

Weiss jemand es eine Moeglichkeit das Problem zu beheben?




\lstset{%
language=[AVR]Assembler,
frame=single,
breaklines=true,
basicstyle=\ttfamily,
commentstyle=\itshape\color{avrcom},
stringstyle=\color{avrstr},
keywordstyle=[1]\bfseries\color{avrcmd},
keywordstyle=[2]\bfseries\color{avrascmd},
keywordstyle=[3]\color{avrreg},
literate={,}{,}1}}


Herbert

linuxusr
01-11-2010, 09:14
\lstset{%
language=[AVR]Assembler,
frame=single,
breaklines=true,
basicstyle=\ttfamily,
commentstyle=\itshape\color{avrcom},
stringstyle=\color{avrstr},
keywordstyle=[1]\bfseries\color{avrcmd},
keywordstyle=[2]\bfseries\color{avrascmd},
keywordstyle=[3]\color{avrreg},
literate={,}{,}1}}


Herbert

Vielen Dank! Jetzt funktioniert's :)

linuxusr
05-11-2010, 21:34
Hallo,

das Problem ist jetzt doch noch nicht ganz geloest:
Einige der Schluesselwoerter werden nicht korrekt gesetzt(Farbe)/erkannt. :confused:

Man sieht das ganz gut, wenn man das eingibt:


\begin{lstlisting}
add,adc,adiw,sub,subi,sbc,sbci,sbiw,and,andi,or,or i,eor,
com,neg,sbr,cbr,inc,dec,tst,clr,ser,mul,muls,mulsu ,fmul,
fmulsu,des,

rjmp,ijmp,eijmp,jmp,rcall,icall,eicall,call,ret,re ti,cpse,
cp,cpc,cpi,sbrc,sbrs,sbic,sbis,brbs,brbc,breq,brne ,brcs,
brcc,brsh,brlo,brmi,brpl,brge,brlt,brhs,brhc,brts, brtc,
brvs,brvc,brie,brid,

mov,movw,ldi,lds,ld,ldd,sts,st,std,lpm,elpm,spm,in ,out,
push,pop,xch,las,lac,lat,lsl,lsr,rol,ror,asr,swap, bset,
bclr,sbi,cbi,bst,bld,sec,clc,sen,cln,sez,clz,sei,c li,
ses,cls,sev,clv,set,clt,seh,clh,

break,nop,sleep,wdr

.byte,.cseg,.db,.def,.device,.dseg,.dw,.endm,.endm acro,
.equ,.eseg,.exit,.include,.list,.listmac,.macro,.n olist,
.org,.set

r0,r1,r2,r3,r4,r5,r6,r7,r8,r9,r10,r11,r12,r13,r14,
r15,r16,r17,r18,r19,r20,r21,r22,r23,r24,r25,r26,r2 7,
r28,r29,r30,r31,x,y,z,xl,xh,yl,yh,zl,zh
\end{lstlisting}


keines der br* instructions wird in der richtigen Farbe gesetzt. :confused:

Bitte helft mir...
Danke!

linuxusr
06-11-2010, 01:24
das Problem liegt in



alsodigit={x,b,\$}


kann ich ein Zeichen sowohl als letter als auch als digit definieren?