PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Listings, Eigene Sprachdefinition: # bei Direktiven wird nicht erkannt



JohnnyJohnny
10-08-2011, 11:05
Hallo,

ich habe in meiner Bachelorarbeit relativ viele Listings mit einer Firmeneigenen Programmiersprache und ich bekomme deren Formatierung nicht richtig hin.

Das Problem liegt bei den Compilerdirektiven. Wie in C haben diese hier ein # vor dem Namen. Leider erkennt das Paket dieses nicht und es wird nicht eingefärbt.
Hier dazu ein Minibeispiel:


\documentclass[12pt,a4paper]{scrbook}
\usepackage[utf8]{inputenc}
\usepackage[ngerman]{babel}
\usepackage{caption} %
\usepackage{colortbl} %
\usepackage{listings}

\definecolor{azure}{rgb}{0.95,1,1}
\definecolor{colKeys}{rgb}{0,0,1}
\definecolor{colIdentifier}{rgb}{0,0,0}
\definecolor{purple}{rgb}{0.65, 0.12, 0.82}
\definecolor{flexgreen}{rgb}{0, 0.6, 0}
\definecolor{flexgray}{rgb}{0.25, 0.37, 0.75}

\lstset{%
float=hbp,%
basicstyle=\ttfamily\small, %
identifierstyle=\color{colIdentifier}, %
keywordstyle=\color{colKeys}, %
stringstyle=\color{flexgray}, %
commentstyle=\color{flexgreen}, %
columns=flexible, %
tabsize=2, %
frame=single, %
extendedchars=true, %
showspaces=false, %
showstringspaces=false, %
numbers=left, %
numberstyle=\tiny, %
numbersep=5pt,
breaklines=true, %
backgroundcolor=\color{azure}, %
breakautoindent=true, %
captionpos=b,%
escapeinside={/*@}{@*/}
}

\lstdefinelanguage{STX}
{
morecomment = [l]{//},
morecomment = [s]{(*}{*)},
string=[b]",
sensitive = false,
%delim=[l][\color{purple}\textbf]\#,
keywords = {var, end_var, pointer, to, array, of, at, task, end_task, autorun, loop, end_loop, when, continue },
keywords = [2]
{
\#include,
include, define, ifndef, else, endif
},
keywordstyle={[2]\color{purple}}
}

\begin{document}

\begin{lstlisting}[language=STX]
#include "Platforms.stxp"

var
Test_data : FrameData;
Test_data2 : FrameData;
err : array[10] of int at%vl 1000140;
Baudrate : int;
end_var;

task LIN autorun
Baudrate := 1000;
// Slave Test
ucTest_data[0] := 9; // bit 1-6 LED on, bit 7 all on
ucTest_data[1] := 3; // Duo LEDs

err[0] := LinSlaveAssignFrame(30,2,1,1,&Test_data);
err[1] := LinSlaveAssignFrame(31,2,1,0,&Test_data2);
err[2] := LinSlaveInit(Baudrate);
end_task;
\end{lstlisting}

\end{document}


Ich habe schon verschiedene Ansätze probiert.
Wenn ich das Zeichen über delim definiere wird die ganze Zeile Eingefärbt. Es soll aber wie C-Listings aussehen und nur die Direktive einfärben.
Wenn ich das Schlüsselwort mit \# in Keywords reinsetzte wird es auch nicht erkannt.


Kompiliert wurde auf Windows XP mit MiKTeX 2.9 (für die Versionen der einzelnen Pakete bin ich zu faul :P)

tral
10-08-2011, 11:17
Hallo,

du musst # zu einem Buchstaben machen:



\lstdefinelanguage{STX}
{
alsoletter={#},
...
}


Christian.

JohnnyJohnny
10-08-2011, 13:24
Es hat funktioniert.

Vielen Dank :)