matroid
Senior Dabei seit: 12.03.2001 Mitteilungen: 14343
Herkunft: Solingen
Themenstart: 2007-04-12
\(\begingroup\)\(\newcommand{\IX}{\mathbb{X}}
\newcommand{\IW}{\mathbb{M}}
\newcommand{\politician}[1]{\text{Ich habe die Frage nicht verstanden. #1}} \)
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:
C
#include <stdio.h> #define MAXLENGTHSTR 255int 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 */return0;}
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.
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
Haskell ist unbekannt:
binDiv m n =if m < n then0elselet d =(2*binDiv m (2*n))inif m - d*n < n then d else d +1
#!/bin/bash
multiply ()# multipliziert die uebergebenen Parameter{# Anzahl der Parameter ist variabellocalproduct=1until[-z"$1"]# Until nutzt den ersten uebergebenen Parameter ...dolet"product *= $1"shiftdoneecho$product# wird nicht auf STDOUT ausgegeben,}# wenn es an eine Variable uebergeben wirdmult1=15383; mult2=25211val1=`multiply $mult1$mult2`echo"$mult1 X $mult2 = $val1"# 387820813
Fortran
REAL, DIMENSION(:,:)::AINTEGER::i,k
DO i =1, SIZE(A,1)
WRITE(*,*)(A(i,k), k =1, SIZE(A,2))! oder: A(i,:) ! ENDDO
Es gibt auch noch Fehler:
JavaScript
function so_sth(terms){
terms = terms.replace(/\"/g,"");var terms_split = terms.split(' ');var c =0;for(var i=0; i<terms_split.length; i++){
term = terms_split[i];if(term=='') continue;
term = term.replace(/\$/g," ");}}
Außerdem muß man die Zeit für die Aufbereitung durch den Parser bewerten. Die Software will schnell sein, sie ist aber viel langsamer als die bisherige Schwarz-Weiß-Lösung.
Um weitere Erkenntnisse zu gewinnen, stelle ich das neue Syntax-Highlighting hier zum Test zur Verfügung.
Die neue Funktion wird begonnen mit \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 ]
\(\endgroup\)
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.
## Extracting information from the file ...#
paper =open(sys.argv[1]);
authorcount =0;
author ={};
abstract ='';for line in paper:
iflen(re.compile('\\\\title').findall(line))>0:
title =re.compile('\\\\title\[[\s\S]*\]{([\s\S]*)}\n').sub('\\1', line);iflen(re.compile('\\\\keywords').findall(line))>0:
keywords =re.compile('\\\\keywords{([\s\S]*)}\n').sub('\\1', line);iflen(re.compile('\\\\subjclass').findall(line))>0:
msc =re.compile('\\\\subjclass\[2000\]{([\s\S]*)}\n').sub('\\1', line);iflen(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;iflen(re.compile('\\\\begin{abstract}').findall(line))>0:
for line in paper:
iflen(re.compile('\\\\end{abstract}').findall(line))>0:
break;
abstract = abstract + line;
paper.close();
Liebe Grüsse,
cow_
[Edit: 'New' entfernt]
[ Nachricht wurde editiert von matroid am 15.04.2007 21:36:02 ]
matroid
Senior Dabei seit: 12.03.2001 Mitteilungen: 14343
Herkunft: Solingen
Beitrag No.2, vom Themenstarter, eingetragen 2007-04-13
\(\begingroup\)\(\newcommand{\IX}{\mathbb{X}}
\newcommand{\IW}{\mathbb{M}}
\newcommand{\politician}[1]{\text{Ich habe die Frage nicht verstanden. #1}} \)
@cow_: korrigiert +New
Noch ein Beispiel:
Latex
\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}
[ Nachricht wurde editiert von matroid am 15.04.2007 21:36:28 ]
\(\endgroup\)
matroid
Senior Dabei seit: 12.03.2001 Mitteilungen: 14343
Herkunft: Solingen
Beitrag No.4, vom Themenstarter, eingetragen 2007-04-15
Folgende Sprachbezeichnungen werden verstanden:
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
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 ]
viertel
Senior Dabei seit: 04.03.2003 Mitteilungen: 27762
Herkunft: 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.
viertel
Senior Dabei seit: 04.03.2003 Mitteilungen: 27762
Herkunft: 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?
viertel
Senior Dabei seit: 04.03.2003 Mitteilungen: 27762
Herkunft: Hessen
Beitrag No.12, eingetragen 2007-04-15
2007-04-15 14:57 - matroid schreibt:
Wird 'nameDerSprache' nicht durch eine unterstützte Programmiersprache ersetzt, so wird ein unbenannter Sourcecodebereich angelegt.
\quoteoff
Clever!
Aber was bitte passiert hier:
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
Warum steht das alles in einer Zeile?
Wenn ich 'nameDerSprache' drin lasse, hab ich am Anfang eine Leerzeile, dafür aber ordentliche einzelne Zeilen:
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
matroid
Senior Dabei seit: 12.03.2001 Mitteilungen: 14343
Herkunft: Solingen
Beitrag No.13, vom Themenstarter, eingetragen 2007-04-15
\(\begingroup\)\(\newcommand{\IX}{\mathbb{X}}
\newcommand{\IW}{\mathbb{M}}
\newcommand{\politician}[1]{\text{Ich habe die Frage nicht verstanden. #1}} \)
php ist manchmal schlimm.
Fragt man
php
if($codestack[0])$codestack.="\n";
und $codestack[0] ist '0', dann ist die Antwort false.
So frage ich jetzt:
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!
matroid
Senior Dabei seit: 12.03.2001 Mitteilungen: 14343
Herkunft: 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 ]
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).