#!/usr/bin/perl # # convert (a subset) of fractint l-systems into # lsys-lsystems # # version 1.0 # while (<>) { chomp; my $comment=$1 if s/\s*;+\s*(.*)$//; my $o; s/"/%/g; if (/^\s*(\S+)\s+{\s*$/i) { $lsys=$1; $lsys=~s/[^A-Za-z_]/_/g; $lsys=~s/([_a-z])([A-Z])/$1_@{[lc($2)]}/g; $lsys=~s/__/_/g; $lsys=~s/^_//; $lsys=~s/_$//; $s=$lsys{$lsys}; $lsys{$lsys}++; $lsys.=$s; $o="ruleset ("; } elsif (/Angle (\d+)/i) { $angle=$1; } elsif (/Axiom (\S+)/i) { $o=" $lsys(n) => attr (delta, 360/$angle) ".mangle($1).", n;"; } elsif (/^\s*(\S+)\s*=(.*)$/) { my($f,$g)=($1,$2); $f=~y/a-z/A-Z/; $f=~y/FGDM/FfFfFfFf/; $o=" $f => ".mangle($g).";"; } elsif(/^\s*}\s*$/i) { undef $lsys; $o=")"; } print $o,($comment ? " // $comment" : ""),"\n"; } sub mangle { $_=$_[0]; s/([a-zA-Z])([a-z])/$1 $2/g; y/a-z/A-Z/; y/FGDM/FfFfFfFf/; s/\/([0-9.]+)/ +($1) /g; s/\\([0-9.]+)/ -($1) /g; s/\@q\s*i([0-9.]+)/ attr (distance, distance\/0$1^0.5) /ig; s/\@i\s*q([0-9.]+)/ attr (distance, distance\/0$1^0.5) /ig; s/\@q([0-9.]+)/ attr (distance, distance*0$1^0.5) /ig; s/\@i([0-9.]+)/ attr (distance, distance\/0$1) /ig; s/\@([0-9.]+)/ attr (distance, distance*0$1) /ig; s/c([0-9]+)//ig; # ignore all s/<([0-9]+)//g; # kinds of s/>([0-9]+)//g; # colours s/ / /g; s/^ //g; s/ $//g; $_; }