#!/usr/local/dist/bin/perl # # **************************************************************** # LaTeX-Datei, die von latexdraw erzeugt, # zurueckwandeln in interne LaTeXdraw-Datei # **************************************************************** # Stand 23.5.1997 Siegert # 1. Parameter: Name der vorhandenen latex-Datei # 2. Parameter: Name der erzeugten latexdraw-Datei $zahl = "([0-9.+-]*)"; $xy = "\\($zahl,$zahl\\)"; $klzahl = "\\{$zahl\\}"; $optzahl = "\\[$zahl\\]"; $star = "\\*"; $fontbez = "\\\\(F[XVIbi]*pt) "; $unitlength = "\\\\setlength{\\\\unitlength}{$zahl"; $bdoc = "\\\\begin{document}"; $bpic = "\\\\begin{picture}$xy"; $ldlinew = "\\\\ldlinewidth$klzahl$klzahl"; $put = "\\\\put$xy"; $putc = "\\\\putc$xy$klzahl"; $rput = "\\\\rput$optzahl$xy"; $rputc = "\\\\rputc$optzahl$xy$klzahl"; $line = "\\\\ldline$xy$xy"; $line2 = "\\\\ldline$optzahl$xy$xy"; $line3 = "\\\\ldcpline$xy$xy"; $line4 = "\\\\ldcpline$optzahl$xy$xy"; $line5 = "\\\\LdpLine$klzahl\\{$xy\\}$optzahl"; $gefdreieck = "\\\\gefdreieck$xy$xy"; $gefviereck = "\\\\gefviereck$xy$xy$xy"; $circle = "\\\\circle$klzahl"; $circle2 = "\\\\circle$optzahl$klzahl"; $ell = "\\\\ellipse$klzahl$klzahl"; $ell2 = "\\\\ellipse$optzahl$klzahl$klzahl"; $gefcircle = "\\\\circle$star$klzahl"; $gefell = "\\\\ellipse$star$klzahl$klzahl"; $arc = "\\\\arc$klzahl$klzahl$klzahl"; $arc2 = "\\\\arc$optzahl$klzahl$klzahl$klzahl"; $arc3 = "\\\\LdpArc$klzahl$klzahl$klzahl$optzahl$klzahl"; $ellarc = "\\\\ellarc$klzahl$klzahl$klzahl$klzahl"; $ellarc2 = "\\\\ellarc$optzahl$klzahl$klzahl$klzahl$klzahl"; $ellarc3 = "\\\\LdpEllarc$klzahl$klzahl$klzahl$optzahl$klzahl$klzahl"; $pie = "\\\\pieslice$klzahl$klzahl$klzahl$klzahl"; $bezier = "\\\\bezier$xy$xy$xy"; $bezier2 = "\\\\bezier$optzahl$xy$xy$xy"; $bezier3 = "\\\\LdpBezier$klzahl$xy$xy$xy$optzahl"; $gefbezier = "\\\\beziergef$xy$xy$xy"; $text = "\\\\makebox\\(0,0\\)\\[([a-z]+)\\]{"; $textf = "\\\\makebox\\(0,0\\){"; $standardfont = 1; $textlage{'bl'} = 0; $textlage{'f'} = 1; $textlage{'br'} = 2; $textlage{'b'} = 3; $textlage{'tl'} = 4; $textlage{'tr'} = 5; $textlage{'t'} = 6; $textlage{'l'} = 7; $textlage{'r'} = 8; $font{'FVIpt'} = 0; $font{'FVIIIpt'} = 2; $font{'FXpt'} = 3; $font{'FXIIpt'} = 4; $font{'FXIVpt'} = 5; $font{'FXVIIIpt'} = 6; $font{'FVIbpt'} = 7; $font{'FVIIIbpt'} = 8; $font{'FXbpt'} = 9; $font{'FXIIbpt'} = 10; $font{'FXIVbpt'} = 11; $font{'FXVIIIbpt'} = 12; $font{'FVIipt'} = 13; $font{'FVIIIipt'} = 14; $font{'FXipt'} = 15; $font{'FXIIipt'} = 16; $font{'FXIVipt'} = 17; $font{'FXVIIIipt'} = 18; $ttext = 2; $tgerade = 3; $tkreis = 5; $tkreisgef = 6; $tkreisbogen = 7; $tell = 8; $tellgef = 9; $tellbogen = 10; $trechteckgef = 11; $tbezier = 12; $tdreieckgef = 13; $tviereckgef = 14; $tkreissektorgef= 15; $tellsektorgef = 16; $tbeziergef = 17; if ($#ARGV != 1) {die "number of arguments not 2 (file in, file out)";} sub grad { # texwinkel nach latexdraw-Winkel (math) $wi = @_[0]; $wi = (1-$wi/(2*3.1415926))*3600; if (($wi > 3599.9)&&($wi < 3600.1)) {$wi=3600;} if (($wi > -0.1) && ($wi < 0.1)) {$wi=0;} while ($wi > 3600) {$wi = $wi - 3600;} while ($wi < 0) {$wi = $wi + 3600;} $wi; } sub winkel { # Berechnung Anfangs - und Endwinkel $endwi = grad(@_[0]); $anfwi = grad(@_[1]); } sub vorspannpar { # vorspannparameter merken $xxmin =0; $yymin=0; $xxmax=$1; $yymax=$2; $dxpixel = $1; $dypixel = $2; $breite = $xxmax*$unitl; $hoehe = $yymax*$unitl; $querformat = 1; if ($anzpic == 2) {$querformat = 0;} } sub ausvorspann {# vorspann ausgeben print AUS "LaTeXdraw (Siegert, TUM, C15.13)\n"; print AUS $unitl, " (TEXFAKTOR)", "\n"; print AUS " 2.00000E+00 (TEXDASHLAENGE)", "\n"; print AUS " 1.80000E+00 (TEXDOTGAP)", "\n"; print AUS " 8.00000E-01 (TEXINTERDOTGAP)", "\n"; print AUS "16.667 16.667 525.2 294 1 0 0 1 (GITTERWERTE)\n"; print AUS "$xxmin $yymin $xxmax $yymax $dxpixel $dypixel ", "$breite $hoehe $mitdoc $querformat (AUSGABEOPTIONEN)\n"; $ausgegeben = 1; } sub zeileninit { $element = 0; # falls Zeichnungselement gefunden = 1 $rotwinkel = 0; $lende = 0; $ltype = 1; $anfwi = 0; $endwi = 0; $laenge1 = 0; $laenge2 = 0; $x2 = 0; $y2 = 0; $xb1 = 0; $yb1 = 0; $xb2 = 0; $yb2 = 0; } open (EIN, "<$ARGV[0]")|| die "can't open input file $ARGV[0]"; open (AUS, ">$ARGV[1]")|| die "can't open output file $ARGV[1]"; $lwidth = 1; $unitl = 1; $anzpic = 0; $ausgegeben = 0; $mitdoc = 0; while () { #zeilenweise Eingabe in $_ zeileninit(); if (/$bdoc/) {$mitdoc = 1;} if (/$unitlength/) {$unitl = $1;} if ((/$bpic/x)&&($ausgegeben ==0)) {$anzpic = $anzpic + 1; vorspannpar(); } if (/$ldlinew/) {$lwidth = $1;} if (/$put/) {$x1 = $1; $y1 = $2; $color = 0;} if (/$putc/) {$x1 = $1; $y1 = $2; $color = $3;} if (/$rput/) {$rotwinkel = grad($1); $x1 = $2; $y1 = $3; $color = 0;} if (/$rputc/){$rotwinkel = grad($1); $x1 = $2; $y1 = $3; $color = $4;} if (/$text/) { # Text mit Lageangabe $typ = $ttext; $laenge2 = $textlage{$1}; $ltype = $standardfont; $_ = $'; if (/$fontbez/) {$ltype = $font{$1};} $TEXT = substr($',0,length($')-3); $element = 1; } if (/$textf/) { # Text ohne Lageangabe $typ = $ttext; $laenge2 = $textlage{'f'}; $ltype = $standardfont; $_ = $'; if (/$fontbez/) {$ltype = $font{$1};} $TEXT = substr($',0,length($')-3); $element = 1; } if (/$line/) { $typ = $tgerade; $x2 = $x1+$3; $y2 = $y1+$4; $element = 1; } if (/$line2/) { $typ = $tgerade; $ltype = $1; $x2 = $x1+$4; $y2 = $y1+$5; $element = 1; } if (/$line3/) { # cap projecting $typ = $tgerade; $lende = 4; $x2 = $x1+$3; $y2 = $y1+$4; $element = 1; } if (/$line4/) { # cap projecting $typ = $tgerade; $lende = 4; $ltype = $1; $x2 = $x1+$4; $y2 = $y1+$5; $element = 1; } if (/$line5/) { # LdpLine $typ = $tgerade; $lende = $1; $x2 = $x1+$2; $y2 = $y1+$3; $ltype = $4; $element = 1; } if (/$circle/) { $typ = $tkreis; $laenge1 = $1/2; $laenge2 = $laenge1; $element = 1; } if (/$circle2/) { $typ = $tkreis; $ltype = $1; $laenge1 = $2/2; $laenge2 = $laenge1; $element = 1; } if (/$gefcircle/) { $typ = $tkreisgef; $laenge1 = $1/2; $laenge2 = $laenge1; $element = 1; } if (/$arc/) { $typ = $tkreisbogen; $laenge1 = $1/2; $laenge2 = $laenge1; winkel($2,$3); $element = 1; } if (/$arc2/) { $typ = $tkreisbogen; $ltype = $1; $laenge1 = $2/2; $laenge2 = $laenge1; winkel($3,$4); $element = 1; } if (/$arc3/) { $typ = $tkreisbogen; $lende = $1; winkel($2,$3); $ltype = $4; $laenge1 = $5/2; $laenge2 = $laenge1; $element = 1; } if (/$ell/) { $typ = $tell; $laenge1 = $1/2; $laenge2 = $2/2; $element = 1; } if (/$ell2/) { $typ = $tell; $ltype = $1; $laenge1 = $2/2; $laenge2 = $3/2; $element = 1; } if (/$gefell/) { $typ = $tellgef; $laenge1 = $1/2; $laenge2 = $2/2; $element = 1; } if (/$ellarc/) { $typ = $tellbogen; $laenge1 = $1/2; $laenge2 = $2/2; winkel($3,$4); $element = 1; } if (/$ellarc2/) { $typ = $tellbogen; $ltype = $1; $laenge1 = $2/2; $laenge2 = $3/2; winkel($4,$5); $element = 1; } if (/$ellarc3/) { $typ = $tellbogen; $lende = $1; winkel($2,$3); $ltype = $4; $laenge1 = $5/2; $laenge2 = $6/2; $element = 1; } if (/$gefdreieck/) { $typ = $tdreieckgef; $x2 = $x1+$1; $y2 = $y1+$2; $xb1 = $x1+$3; $yb1 = $y1+$4; $element = 1; } if (/$gefviereck/) { $typ = $tviereckgef; $xb1 = $x1+$1; $yb1 = $y1+$2; $x2 = $x1+$3; $y2 = $y1+$4; $xb2 = $x1+$5; $yb2 = $y1+$6; $element = 1; } if (/$pie/) { $typ = $tellsektorgef; $laenge1 = $1/2; $laenge2 = $2/2; if ($laenge1 == $laenge2) {$typ = $tkreissektorgef;} $anfwi = $3*10; $endwi = $4*10; $element = 1; } if (/$bezier/) { $typ = $tbezier; $xb1 = $x1+$1; $yb1 = $y1+$2; $xb2 = $x1+$3; $yb2 = $y1+$4; $x2 = $x1+$5; $y2 = $y1+$6; $element = 1; } if (/$bezier2/) { $typ = $tbezier; $ltype = $1; $xb1 = $x1+$2; $yb1 = $y1+$3; $xb2 = $x1+$4; $yb2 = $y1+$5; $x2 = $x1+$6; $y2 = $y1+$7; $element = 1; } if (/$bezier3/) { $typ = $tbezier; $lende = $1; $xb1 = $x1+$2; $yb1 = $y1+$3; $xb2 = $x1+$4; $yb2 = $y1+$5; $x2 = $x1+$6; $y2 = $y1+$7; $ltype = $8; $element = 1; } if (/$gefbezier/) { $typ = $tbeziergef; $xb1 = $x1+$1; $yb1 = $y1+$2; $xb2 = $x1+$3; $yb2 = $y1+$4; $x2 = $x1+$5; $y2 = $y1+$6; $element = 1; } if ($element) { if ($ausgegeben==0) {ausvorspann();} $tmp = 100 * $color + $lwidth; print AUS "$typ $x1 $y1 $x2 $y2 $xb1 $yb1 $xb2 $yb2 $anfwi $endwi ", "$tmp $lende $ltype $laenge1 $laenge2 $rotwinkel", "\n"; if ($typ == 2) {print AUS "$TEXT\n";} } } print AUS "0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n"; print AUS " 0 \n"; print AUS "0 0\n";