|
Autor |
Sourcecode-Highlighting |
|
matroid
Senior  Dabei seit: 12.03.2001 Mitteilungen: 14432
Wohnort: Solingen
 | Themenstart: 2007-04-12
|
Tino hat mich auf eine Software hingewiesen:
"GeSHi - Generic Syntax Highlighter":
Diese Software habe ich nun versuchsweise hier integriert.
Damit sieht ein Stück Software nun so aus:
\sourceon C
#include
#define MAXLENGTHSTR 255
int main(void)
{
/* Deklaration der Variablen */
int ein1, ein3, aus;
char ein2;
char s1[MAXLENGTHSTR];
/* Usereingabe */
printf("Eingabe: ");
flushall(); gets(s1);
/* Interne Verarbeitung des Input */
sscanf(s1, "%d %c %d", &ein1, &ein2, &ein3);
aus = 0;
/* Berechnung */
switch(ein2)
{
case '+': aus = ein1 + ein3; break; /* Addition */
case '-': aus = ein1 - ein3; break; /* Subtraktion */
case '*': aus = ein1 * ein3; break; /* Multiplikation */
case '/': aus = ein1 / ein3; break; /* Division */
case '%': aus = ein1 % ein3; break; /* Modulo */
default: printf(" Input error!\n"); break;
}
/* Ausgabe */
printf("Ergebnis: %d\n", aus);
/* Ende */
return 0;
}
\sourceoff calculator.c
Die andere Darstellung hat Vorteile, und im Prinzip werden viele Sprachen unterstützt. Wie gut die Unterstützung für eine Sprache ist, hängt von der Qualität der Sprachbeschreibungsdatei dafür ab. Dort gibt es doch noch einige Lücken. Es gibt auch Sprachen, für die bisher gar keine Sprachdatei vorhanden ist.
\sourceon(MATLAB)
D = imread('Pfadangabe.jpg');
imagesc(D)
%Header wird eingefügt
fid3 = fopen(['D:\\Cybex\\Header' file(i).name_new_R '_Header_63.asc'],'wt');
printf(fid3,'%s \t %s \t %s \t %s\n','#Time','#Trig','#Win','#Tor')
%speichert Time, Trigger, Winkel, Torque, Rate, MFs
fprintf(fid3,'%f \t %f \t %f \t %f \t %f \t %f \t %f \t %f\n',MF_60_30');
ft2 = [matlabroot '/work/emma/leitung/' fn2 '.txt'];
[X Y] = textread(ft2, '%d MHz - %f %*s');
X= X(1:end,1)*1000000;
P = interp1(X, Y, linspace(min(X),max(X)));
sz=size(fd);
for k=1:sz(1,1)-1
x = (fd(k,2)-fd((k+1),2));
y = (fd(k,3)-fd((k+1),3));
head(k,:) = (x,y)
end
panalyse = uicontrol(fh,'Style','PushButton',...
'Units','normalized',...
'Position',[X+j*AbstandX Y-k*AbstandY laenge hoehe],..
'String','Analysieren',...
'ToolTipString','Analysiert die simulierten Daten',...
'CallBack','analyse(par1,par2,...)',...
'Tag','Analyse');
X1=X(1);
X2=X(end);
X3=X1:X2;
X4=X1:.25:X2; % Denke hier kann ich die Genauigkeit angeben
% für Y sind ja soviele Werte eingelesen wie Zeilen vorhanden
\sourceoff
Haskell ist unbekannt:
\codeon ( Haskell )
binDiv m n =
if m < n then 0
else let d = (2*binDiv m (2*n)) in
if m - d*n < n then d else d + 1
\codeoff
\codeonJava
class ArrayTest {
public static void manipuliere(String[] s) {
if (s != null)
s[0] = "Hallo";
}
public static void manipuliere_nix(String[] s) {
String[] neu = { "HUHU", "IHR" };
s = neu;
}
public static void main(String[] args) {
String[] strings = { "hallo", "Welt" };
manipuliere(strings);
for (String s: strings)
System.out.println(s);
manipuliere_nix(strings);
for (String s: strings)
System.out.println(s);
}
}
\codeoff
\sourceon BASH
\numbersoff
#!/bin/bash
multiply () # multipliziert die uebergebenen Parameter
{ # Anzahl der Parameter ist variabel
local product=1
until [ -z "$1" ] # Until nutzt den ersten uebergebenen Parameter ...
do
let "product *= $1"
shift
done
echo $product # wird nicht auf STDOUT ausgegeben,
} # wenn es an eine Variable uebergeben wird
mult1=15383; mult2=25211
val1=`multiply $mult1 $mult2`
echo "$mult1 X $mult2 = $val1" # 387820813
\sourceoff
\sourceonFortran
REAL, DIMENSION(:,:) :: A
INTEGER :: i,k
DO i = 1, SIZE(A,1)
WRITE(*,*)(A(i,k), k = 1, SIZE(A,2)) ! oder: A(i,:) !
END DO
\sourceoff
Es gibt auch noch Fehler:
\codeonJavaScript
function so_sth(terms){
terms = terms.replace(/\"/g,"");
var terms_split = terms.split(' ');
var c = 0;
for(var i=0; i\sourceon oder \codeon.
Man beendet einen neuen Sourcecodebereich mit \sourceoff oder \codeoff.
Zeilennumerierung wird wie bisher mit \numberson verlangt. Wenn hinter dem \numberson eine Zahl steht, beginnt die Numerierung mit dieser Zahl (auch wie bisher)
Damit der Parser weiß, welche Sprache zu deuten ist, wird der Name der Sprache hinter \sourceon bzw. \codeon genannt. Die angesagte Sprache wird über dem formatierten Sourcecodebereich in blau angezeigt. Wenn eine Anzeige der Sprache nicht gewünscht ist, etwa weil man nur Beispiele in C schreibt, und eine immer wiederkehrende Nennung der Sprache nicht erforderlich ist, kann man den Namen der Sprache in Klammern setzen, also z.B. \codeon(C).
Dann wird "C" interpretiert, aber der Text "C" nicht ausgegeben.
Wenn ein neuer Sourcecodeblock ohne Ansage einer Sprache beginnt, aber zuvor schon ein Sourcecodeblock war, für den eine Sprache angegeben wurde, dann wird diese Sprache weiterverwendet. Dies erfolgt, damit man sich das (C) sparen kann, wenn man in einem Artikel über C den nächsten Sourcecodebereich beginnt.
Probiert es bitte aus, und ich schaue interessiert zu.
Schreibt mir, was euch auffällt.
Gruß
Matroid
[ Nachricht wurde editiert von matroid am 13.04.2007 00:06:55 ]
[ Nachricht wurde editiert von matroid am 15.04.2007 21:35:03 ]
|
Profil
|
cow_gone_mad
Senior  Dabei seit: 11.01.2004 Mitteilungen: 6651
 | Beitrag No.1, eingetragen 2007-04-12
|
Hallo Martin
Muss ich ja mal glatt ausprobieren, und sehe dabei, dass man \codeon(sprache) und nicht \codeon(Sprache) schreiben muss.
Ausserdem trage ich mal eine weitere Sprache zum Schatz bei.
\codeon(python)
#
# Extracting information from the file ...
#
paper = open(sys.argv[1]);
authorcount = 0;
author = {};
abstract = '';
for line in paper:
if len(re.compile('\\\\title').findall(line)) > 0:
title = re.compile('\\\\title\[[\s\S]*\]{([\s\S]*)}\n').sub('\\1', line);
if len(re.compile('\\\\keywords').findall(line)) > 0:
keywords = re.compile('\\\\keywords{([\s\S]*)}\n').sub('\\1', line);
if len(re.compile('\\\\subjclass').findall(line)) > 0:
msc = re.compile('\\\\subjclass\[2000\]{([\s\S]*)}\n').sub('\\1', line);
if len(re.compile('\\\\author').findall(line)) > 0:
author[authorcount] = re.compile('\\\\author\\[[\s\S]*\\]{([\s\S]*)}\n').sub('\\1', line);
author[authorcount] = re.compile('\\\\"u', re.VERBOSE).sub('ü', author[authorcount]);
authorcount = authorcount + 1;
if len(re.compile('\\\\begin{abstract}').findall(line)) > 0:
for line in paper:
if len(re.compile('\\\\end{abstract}').findall(line)) > 0:
break;
abstract = abstract + line;
paper.close();
\codeoff
Liebe Grüsse,
cow_
[Edit: 'New' entfernt]
[ Nachricht wurde editiert von matroid am 15.04.2007 21:36:02 ]
|
Profil
|
matroid
Senior  Dabei seit: 12.03.2001 Mitteilungen: 14432
Wohnort: Solingen
 | Beitrag No.2, vom Themenstarter, eingetragen 2007-04-13
|
@cow_: korrigiert +New
Noch ein Beispiel:
\sourceonLatex
\documentclass[a4paper, 12pt]{article}
\usepackage[T1]{fontenc}
\usepackage[latin1]{inputenc}
\usepackage{ngerman}
\setlength{\parindent}{0em}
\begin{document}
Die Simpsonregel ist auch unter dem Namen Keplersche Fassregel bekannt.
Johannes Kepler konnte damit eine sehr gute Näherung zur Berechnung des Volumens von Fässern angeben.
Dazu betrachtete er ein Fass als ein Rotationsparaboloid.
Dann ergibt sich dass Fassvolumen als
$$V = \pi \int_0^H \varphi(x) \, \textnormal{d}x$$
wobei $\varphi$ eine Parabel beschreibt, die die Fassdauben möglichst gut approximiert.
$H$ ist hier die Höhe des Fasses. Da die Keplersche Fassregel für Polynome 2. Grades exakt ist, gilt also
$$V = H \pi \left(\frac{1}{6}\varphi(0) + \frac{4}{6}\varphi(\frac{H}{2}) + \frac{1}{6}\varphi(H)\right)$$
\end{document}
\sourceoff
[ Nachricht wurde editiert von matroid am 15.04.2007 21:36:28 ]
|
Profil
|
matroid
Senior  Dabei seit: 12.03.2001 Mitteilungen: 14432
Wohnort: Solingen
 | Beitrag No.3, vom Themenstarter, eingetragen 2007-04-14
|
Negative Meinungen oder Erkenntnisse gab es keine.
Ich habe jetzt alles auf die neue Darstellung umgeschaltet.
Gruß
Matroid
|
Profil
|
matroid
Senior  Dabei seit: 12.03.2001 Mitteilungen: 14432
Wohnort: Solingen
 | Beitrag No.4, vom Themenstarter, eingetragen 2007-04-15
|
Folgende Sprachbezeichnungen werden verstanden:
\codeon(none)
\numberson
actionscript
ada
apache
applescript
asm
asp
autoit
bash Synonyme: sh shell ksh
blitzbasic
bnf
c
c_mac
caddcl
cadlisp
cfdg
cfm
cpp-qt
cpp Synonyme: c++
csharp Synonyme: c#
css
d
delphi
diff
div
dos
eiffel
fortran
freebasic
gml
groovy
haskell
html4strict Synonyme: html
idl
ini
inno
io
java5 Synonyme: java
javascript
latex
lisp
lua
matlab
mirc
mpasm
mysql
nsis
objc
ocaml-brief
ocaml
oobas
oracle8
pascal
perl
php-brief
php
plsql
python
qbasic Synonyme: basic
rails
reg
robots
ruby
sas
scheme
sdlbasic
smalltalk
smarty
sql
tcl
text
thinbasic
tsql
vb
vbnet
vhdl
visualfoxpro
winbatch
xml
xpp
z80
\codeoff
Ich weiß nicht bei allen Sprachen, was das ist.
Die Qualität der Sprachbeschreibungsdateien ist sehr unterschiedlich.
Ich könnte fehlende Schlüsselworte ergänzen.
Man kann den Sprachnamen groß oder klein schreiben, wie man es gewohnt ist.
Einen Quellcodebereich beginnt man am Zeilenanfang mit \sourceon oder \codeon.
Die oben beschriebenen Anhänge New sind nicht mehr erforderlich, sie dienten nur dazu, die neue Darstellung parallel zur alten zu testen.
Gruß
Matroid
[ Nachricht wurde editiert von matroid am 15.04.2007 15:03:25 ]
|
Profil
|
Wally
Senior  Dabei seit: 02.11.2004 Mitteilungen: 9498
Wohnort: Dortmund, Old Europe
 | Beitrag No.5, eingetragen 2007-04-15
|
Geht super, danke!
Vielleicht sollte der Klick auf [Quelltextbereich]
sourceon(Bitte hier Sprache angeben)
einfügen (natürlich mit backslash davor) . Wenn der Text dann so stehen bleibt, macht das ja nix.
Viele Grüße
Peter
|
Profil
|
viertel
Senior  Dabei seit: 04.03.2003 Mitteilungen: 27785
Wohnort: Hessen
 | Beitrag No.6, eingetragen 2007-04-15
|
Hi matroid,
echt ne feine Sache. So lassen sich die Quellcodes noch leichter lesen. Wenn denn der Quelltextbereich auch immer genutzt wird. Aber jetzt hat man ja noch einen schönen Grund, darauf zu drängen.
Daß die Farben Geschmackssache sind ist klar – deshalb fang gar nicht erst an, dran rumzuschrauben.
Gruß vom 1/4
|
Profil
|
matroid
Senior  Dabei seit: 12.03.2001 Mitteilungen: 14432
Wohnort: Solingen
 | Beitrag No.7, vom Themenstarter, eingetragen 2007-04-15
|
@Wally: Ok, jetzt wird das eingefügt:
\codeon(none)
\sourceon(nameDerSprache)
\codeoff
Gruß
Matroid
|
Profil
|
viertel
Senior  Dabei seit: 04.03.2003 Mitteilungen: 27785
Wohnort: Hessen
 | Beitrag No.8, eingetragen 2007-04-15
|
Finde ich nicht ganz gelungen. Denn die meisten werden nur den Text ersetzen und die Klammern stehen lassen. Und damit wird ja die Sprache über dem Kasten unterdrückt. Und die wäre manchmal schon hilfreich, zB C++ oder Java?
|
Profil
|
matroid
Senior  Dabei seit: 12.03.2001 Mitteilungen: 14432
Wohnort: Solingen
 | Beitrag No.9, vom Themenstarter, eingetragen 2007-04-15
|
@1/4: Darüber habe ich auch nachgedacht.
Wenn der Name aber nicht in Klammern steht, wird er wiedergegeben.
Nun gut, ich kann ein if spendieren.
|
Profil
|
matroid
Senior  Dabei seit: 12.03.2001 Mitteilungen: 14432
Wohnort: Solingen
 | Beitrag No.10, vom Themenstarter, eingetragen 2007-04-15
|
\codeon(none)
\sourceon nameDerSprache
\codeoff
Wird 'nameDerSprache' nicht durch eine unterstützte Programmiersprache ersetzt, so wird ein unbenannter Sourcecodebereich angelegt.
|
Profil
|
matroid
Senior  Dabei seit: 12.03.2001 Mitteilungen: 14432
Wohnort: Solingen
 | Beitrag No.11, vom Themenstarter, eingetragen 2007-04-15
|
matph hat ein haskell-File zur Verfügung gestellt. Vielen Dank!
|
Profil
|
viertel
Senior  Dabei seit: 04.03.2003 Mitteilungen: 27785
Wohnort: Hessen
 | Beitrag No.12, eingetragen 2007-04-15
|
\quoteon(2007-04-15 14:57 - matroid)
\codeon(none)
\sourceon nameDerSprache
\codeoff
Wird 'nameDerSprache' nicht durch eine unterstützte Programmiersprache ersetzt, so wird ein unbenannter Sourcecodebereich angelegt.
\quoteoff
Clever!
Aber was bitte passiert hier:
\sourceon
000 bis 111 : 7
0000 bis 1111 : 13
00000 bis 11111 : 24
000000 bis 111111 : 44
0000000 bis 1111111 : 81
00000000 bis 11111111 : 149
000000000 bis 111111111 : 274
0000000000 bis 1111111111 : 504
\sourceoff
Warum steht das alles in einer Zeile?
Wenn ich 'nameDerSprache' drin lasse, hab ich am Anfang eine Leerzeile, dafür aber ordentliche einzelne Zeilen:
\sourceon nameDerSprache
000 bis 111 : 7
0000 bis 1111 : 13
00000 bis 11111 : 24
000000 bis 111111 : 44
0000000 bis 1111111 : 81
00000000 bis 11111111 : 149
000000000 bis 111111111 : 274
0000000000 bis 1111111111 : 504
\sourceoff
|
Profil
|
matroid
Senior  Dabei seit: 12.03.2001 Mitteilungen: 14432
Wohnort: Solingen
 | Beitrag No.13, vom Themenstarter, eingetragen 2007-04-15
|
php ist manchmal schlimm.
Fragt man
\sourceon php
if($codestack[0])
$codestack .= "\n";
\sourceoff
und $codestack[0] ist '0', dann ist die Antwort false.
So frage ich jetzt:
\sourceon php
if($codestack[0]||$codestack[0]=="0")
$codestack .= "\n";
\sourceoff
Und das trifft dann auch Ausdrücke, deren erstes Zeichen eine 0 ist.
Gruß
Matroid
|
Profil
|
murmelbaerchen
Senior  Dabei seit: 03.02.2003 Mitteilungen: 4294
 | Beitrag No.14, eingetragen 2007-04-18
|
Hallo,
ich kannte GeSHi zwar, bin aber nie auf die Idee gekommen dies mal hier anzumerken....
Nunja, ich bin vom Java-Highlighting begeistert, da man direkt auf die API verlinkt.... Klasse!
Viele Grüße
geshibärchen
|
Profil
|
salzmann
Senior  Dabei seit: 31.12.2004 Mitteilungen: 801
Wohnort: Hannover, Niedersachsen, Deutschland
 | Beitrag No.15, eingetragen 2007-04-20
|
Hi!
Nummerierte Quelltextbereiche werden ca. 1pt größer gesetzt - das finde ich nicht so schön. Sonst topp!
Grüße
Stefan
|
Profil
|
kostja
Senior  Dabei seit: 29.12.2004 Mitteilungen: 5432
Wohnort: Stuttgart
 | Beitrag No.16, eingetragen 2007-04-20
|
Hallo Martin,
nach welchem Schema werden die Links auf die Referenzen erzeugt?
Die Referenz von cplusplus.com ist nämlich nicht besonders gut.
Dafür ist zum Beispiel die Referenz auf der Seite von Rogue Wave kaum zu toppen.
|
Profil
|
matroid
Senior  Dabei seit: 12.03.2001 Mitteilungen: 14432
Wohnort: Solingen
 | Beitrag No.17, vom Themenstarter, eingetragen 2007-04-20
|
Das ist eine Doku für die STL. Aber printf ist dort nicht zu finden, oder?
|
Profil
|
kostja
Senior  Dabei seit: 29.12.2004 Mitteilungen: 5432
Wohnort: Stuttgart
 | Beitrag No.18, eingetragen 2007-04-20
|
Nein, es ist reines C++. printf ist obsolete.
MfG Konstantin
|
Profil
|
matroid
Senior  Dabei seit: 12.03.2001 Mitteilungen: 14432
Wohnort: Solingen
 | Beitrag No.19, vom Themenstarter, eingetragen 2007-04-21
|
@salzmann: nun sind Zeichen in numerierte Zeilen gleich groß.
|
Profil
|
salzmann
Senior  Dabei seit: 31.12.2004 Mitteilungen: 801
Wohnort: Hannover, Niedersachsen, Deutschland
 | Beitrag No.20, eingetragen 2007-04-22
|
\sourceon nameDerSprache
ja, danke
\sourceoff
\sourceon nameDerSprache
\numberson
so ists besser
\sourceoff
Viele Grüße
Stefan
|
Profil
|
Ex_Mitglied_1753
 | Beitrag No.21, eingetragen 2007-05-07
|
Es gibt da anscheinend ein Problem mit URLs:
\sourceon
www.matheplanet.com
\sourceoff
Dabei steht im Quelltextbereich nur die http-Adresse.
|
Profil
|
viertel
Senior  Dabei seit: 04.03.2003 Mitteilungen: 27785
Wohnort: Hessen
 | Beitrag No.22, eingetragen 2007-05-07
|
\quoteon(2007-05-07 21:00 - Tino)
Es gibt da anscheinend ein Problem mit URLs:
\sourceon
htp://www.matheplanet.com
\sourceoff
Dabei steht im Quelltextbereich nur die http-Adresse.
\quoteoff
Du meinst so (fehlt jetzt ein t)?
Als http-Adressen erkannte Texte werden von der Forum-Software automatisch vom a-Tag eingerahmt. Das vereinfacht deren Angabe enorm.
Hat allerdings auch den von Dir beschriebenen Haken
Gruß vom 1/4
|
Profil
|
kostja
Senior  Dabei seit: 29.12.2004 Mitteilungen: 5432
Wohnort: Stuttgart
 | Beitrag No.23, eingetragen 2007-05-07
|
Das Problem tritt auch mit EMail at s auf
\sourceon bash-Prompt
kostja@deepthought ~ $
\sourceoff
Ich sehe, das tut es nicht mehr.
MfG Konstantin
[ Nachricht wurde editiert von kostja am 07.05.2007 22:31:06 ]
|
Profil
|
matroid
Senior  Dabei seit: 12.03.2001 Mitteilungen: 14432
Wohnort: Solingen
 | Beitrag No.24, vom Themenstarter, eingetragen 2007-05-08
|
... das ist soweit richtig analysiert.
Die Hyperlink-Ersetzung findet nämlich beim Speichern der Beiträge statt, das Sourcecode-highlighting findet beim Anzeigen des Beitrags statt. Zu diesem Zeitpunkt ist das a-Tag schon im Text drin.
Ich dürfte also keine Hyperlink-Ersetzung durchführen, wenn der Hyperlink in einem Sourcecode-Bereich steht. Allerdings wird zu diesem Zeitpunkt (wenn der Beitrag gespeichert wird) gar nicht von fed geparst, insofern ist der Speicherfunktion nicht bekannt, daß oder ob eine http-Adresse in einem Sourcecode-Bereich steht.
Bei den mail-Adressen habe ich eine workaround eingebaut (nachdem kostja schon früher einmal den Fehler gemeldet hatte): es wird das bereits eingebautet a-Tag wieder entfernt. Ähnlich könnte ich auch bei http-Adressen vorgehen. Es ist auf jeden Fall sehr unschön, erst etwas in den Text hineinzubringen, und es später wieder zu entfernen.
Ich müßte hier mehr tun, nämlich den Beitrag auch beim Speichern nach fed-Blöcken parsen. Auf diese Weise sollte dann sogar noch das Problem der Smilies in fed-Blöcken gelöst werden können.
Soweit für jetzt ...
Gruß
Matroid
[ Nachricht wurde editiert von matroid am 08.05.2007 07:16:12 ]
|
Profil
|
viertel
Senior  Dabei seit: 04.03.2003 Mitteilungen: 27785
Wohnort: Hessen
 | Beitrag No.25, eingetragen 2008-10-07
|
Hallo Martin
Aktuell auf qbnz.com/highlighter/
The latest stable version of GeSHi is 1.0.8, released on the 8th of August, 2008.
Ich weiß nicht, was für einen Aufwand es für Dich bedeutet, den Syntax-Highlighter zu aktualisieren. Aber er enthält auch Pov-Ray (keine Ahnung seit wann, aber in Deiner Liste oben ist es nicht dabei, wird aktuell auch nicht erkannt).
Viele Grüße
Dietmar
|
Profil
|
matroid
Senior  Dabei seit: 12.03.2001 Mitteilungen: 14432
Wohnort: Solingen
 | Beitrag No.26, vom Themenstarter, eingetragen 2008-11-15
|
@1/4: vielleicht schaue ich demnächst mal danach.
|
Profil
|
gaussmath
Senior  Dabei seit: 16.06.2007 Mitteilungen: 9044
Wohnort: Hannover
 | Beitrag No.27, eingetragen 2016-06-06
|
"var" für C# wird nicht unterstützt.
|
Profil
|
matroid hat die Antworten auf ihre/seine Frage gesehen. |
|
All logos and trademarks in this site are property of their respective owner. The comments are property of their posters, all the rest © 2001-2022 by Matroids Matheplanet
This web site was originally made with PHP-Nuke, a former web portal system written in PHP that seems no longer to be maintained nor supported. PHP-Nuke is Free Software released under the GNU/GPL license.
Ich distanziere mich von rechtswidrigen oder anstößigen Inhalten, die sich trotz aufmerksamer Prüfung hinter hier verwendeten Links verbergen mögen. Lesen Sie die
Nutzungsbedingungen,
die Distanzierung,
die Datenschutzerklärung und das Impressum.
[Seitenanfang]
|