#!/bin/bash # DEPENDS ON # Inkscape 0.46 (Jan 3 2009) # ImageMagick 6.3.7 11/16/10 Q16 TMPDIR=tmp; rm $TMPDIR/* OUTPUTDIR=tmp/io-make ; rm $OUTPUTDIR/* #--------------------------------------------# DICTFILE=/usr/share/dict/words cat $DICTFILE | grep -v "'" |\ strings > /tmp/words.txt DICTFILE=/tmp/words.txt #--------------------------------------------# EXCLUDEDIR="construct|construct" TMPTEX=`date +%s`.tex SVGDIR=i/free/svg COMBIDIR=$TMPDIR/combinations ; rm $COMBIDIR/*.* LAYERID=layerid ANIMATIONID=animationid GIFSIZE=100 CROP=11 CROPSIZE=`expr $GIFSIZE + $CROP \* 2` for SVGDIR in i/free/svg i/non-free/svg do rm $TMPDIR/*.* FREEDOMSTATUS=`echo $SVGDIR | cut -d "/" -f 2` GIFDIR=o/${FREEDOMSTATUS}/gif PDFDIR=o/${FREEDOMSTATUS}/pdf for FOLDER in `find $SVGDIR -mindepth 1 -maxdepth 1 -type d |\ egrep -v $EXCLUDEDIR` do SVGDIR=$FOLDER ; echo $SVGDIR # ------------------------------------------ # source i/free/bash/separateLayers.function source i/free/bash/mirrorPDF.function # ------------------------------------------ # SVGLIST=$TMPDIR/`date +%s`.list ls $SVGDIR/*.svg | rev | cut -d "/" -f 1 | rev > $SVGLIST separateLayers # =================================================================== # for IDENTIFIER in `ls ${SVGDIR}/ | \ grep .svg | cut -d "_" -f 1 | sort` do echo $IDENTIFIER SOURCELIST=$TMPDIR/source.list; rm $SOURCELIST ####################################### # WRITE LIST WITH POSSIBLE SOURCES # ####################################### ls $TMPDIR/*.layer | \ grep ${IDENTIFIER}_ > $SOURCELIST ####################################### if [ `cat $SOURCELIST | wc -l` -le 0 ];then exit 0; fi TICK=0 rm $COMBIDIR/*.list # COMMON WORDSTART FOR SVGS WITH MATCHING IDENTIFIER # # ----------------------------------------------------- # # COMPARE LAST CHARACTER OF IDENTIFIER OF PREVIOUS FILE # # (SHOULD MAKE SENSE BY COMBINATION WITH SORT?) # PREFIX=`echo $IDENTIFIER | cut -d "-" -f 1 | \ rev | cut -c 1` if [ ${PREFIX}X = ${PREPREFIX}X ] then WORDSTART=$WORDSTART else WORDSTART=`cat $DICTFILE | \ sed -n '/^.\{8\}/p' | \ shuf -n 1 | \ sed 's/[aueioAEIOU]/& \n/g' | head -2` FIRST=`echo $WORDSTART | \ cut -c 1 | \ tr '[a-z]' '[A-Z]'` REST=`echo $WORDSTART | \ sed 's/ //g' | cut -c 2-10 | \ tr '[A-Z]' '[a-z]'` WORDSTART=${FIRST}${REST} fi PREPREFIX=$PREFIX # ----------------------------------------------------- # ##################################################################### # WRITE LISTS WITH ANIMATIONS # ##################################################################### for UNIMATIONID in `grep $ANIMATIONID \`cat $SOURCELIST\` | \ cut -d "\"" -f 2 | cut -d "-" -f 1 | \ sort | uniq` do ANIMATIONLIST=$COMBIDIR/animation-`date +%s%N`.list for FRAME in `grep -h $UNIMATIONID \`cat $SOURCELIST\` | \ grep -v XX | sed 's/>//g' | cut -d "\"" -f 1-2 | \ sort | uniq` do SELECTFRAMEFILE=`grep -H $FRAME \`cat $SOURCELIST \` | \ cut -d : -f 1 | shuf -n 1` echo $SELECTFRAMEFILE >> $ANIMATIONLIST done done ##################################################################### #===================================================================# LONGESTANIMATION=`find $COMBIDIR -name "animation*" \ -type f -exec wc -l {} \; | \ sort -rn | \ head -1 | cut -d " " -f 2` #------------------------------------------------------------------# # MAKE SHORT ANIMATIONS LONGER # for OTHERANIMATION in `ls $COMBIDIR/animation*.list | \ grep -v $LONGESTANIMATION` do LONGER=0 while [ $LONGER -lt 100 ]; do LOOP=$TMPDIR/loop.list cat $OTHERANIMATION >> $LOOP LONGER=`expr $LONGER + 1` done mv $LOOP $OTHERANIMATION done #------------------------------------------------------------------# # RESET NAMECHECKER PATTERN # PREVFIRST=0 K=1 while [ $K -le 10 ]; do ##################################################################### # WRITE LIST WITH STILL LAYERS,SORT,UNIQ (LAYERID) # ##################################################################### LAYERLIST=$COMBIDIR/`date +%s%N`${TICK}${K}.list; for LAYER in `grep -h $LAYERID \`cat $SOURCELIST\` | \ grep -v XX | sed 's/>//g' | cut -d "\"" -f 1-2 | \ sort | uniq` do SELECTLAYERFILE=`grep -H $LAYER \`cat $SOURCELIST \` | \ cut -d : -f 1 | shuf -n 1` echo $SELECTLAYERFILE >> $LAYERLIST done ##################################################################### SVG=`ls $SVGDIR | grep $IDENTIFIER | head -1` DELAY=`grep animationdelay $SVGDIR/$SVG | cut -d "\"" -f 2` if [ -f $DELAY ]; then DELAY=0 ; fi HEADENDLINENUMBER=`cat -n $SVGDIR/$SVG | \ grep $HEADEND | \ cut -f 1 | \ head -1` if [ `fdupes $COMBIDIR | wc -l` -lt 1 ]; then ##################################################################### # WRITE STILL LAYERS + ANIMATION FRAMES TO A NEW SVG FILE # ##################################################################### if [ `echo $SVG | grep '\-R\+' | wc -l` -gt 0 ]; then ROTATOR='-R+' ; else ROTATOR= fi if [ `echo $SVG | grep '\-A\+' | wc -l` -gt 0 ]; then ANIMATABLE='-A+' ; else ANIMATABLE= ; fi BASENAME=`echo \`basename $SVG \` | cut -d "_" -f 1 | sed 's/-R+//g'` CONNECTS=`echo \`basename $SVG \` | cut -d "_" -f 2-10` MDNAME=`echo \`basename $SVG \` | \ md5sum | cut -c 1-15` NEWNAME=${MDNAME}`echo ${RANDOM} | \ md5sum | rev | \ cut -c 4-10``echo ${RANDOM} | cut -c 1-3` # ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: # if [ `find $COMBIDIR -name "animation*.list" | \ wc -l` -ge 1 ];then FCOUNT=1 for FRAMEFILE in `cat $LONGESTANIMATION | sort | uniq` do FNUMBER=`echo 0000${FCOUNT} | rev | cut -c 1-4 | rev` NEWSVG=$TMPDIR/${NEWNAME}${ROTATOR}_${CONNECTS} NEWPDF=$OUTPUTDIR/${NEWNAME}_${FNUMBER}.pdf # ------------------------------------------------------------------- # head -n $HEADENDLINENUMBER $SVGDIR/$SVG > $NEWSVG cat $LAYERLIST > $LAYERLIST.tmp echo $FRAMEFILE >> $LAYERLIST.tmp for OTHERANIMATION in `ls $COMBIDIR/animation*.list | \ grep -v $LONGESTANIMATION` do head -n $FCOUNT $OTHERANIMATION | tail -1 >> $LAYERLIST.tmp done for LAYERFILE in `cat $LAYERLIST.tmp | sort` do FILE=${LAYERFILE##*/} NAME=${FILE%%.*} ID=`grep $LAYERID $LAYERFILE | cut -d "\"" -f 2 | head -1` if [ `find $TMPDIR -name "${NAME}.svg" | \ wc -l` -lt 1 ]; then cat $LAYERFILE >> $NEWSVG fi done rm $LAYERLIST.tmp # ------------------------------------------------------------------- # echo "" >> $NEWSVG sed -i 's/style="display:none"//g' $NEWSVG # ---- 1pt -> 3pt ---------------------------------------------------- # # stroke-width:1; # sed -i 's/stroke-width:1;/stroke-width:3pt;/g' $NEWSVG sed -i 's/stroke-width:1pt;/stroke-width:3pt;/g' $NEWSVG sed -i 's/stroke-width:1px;/stroke-width:3px;/g' $NEWSVG # ------------------------------------------------------------------- # inkscape --export-pdf=$NEWPDF \ --export-text-to-path $NEWSVG FCOUNT=`expr $FCOUNT + 1` done # ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: # else NEWSVG=$TMPDIR/${NEWNAME}${ROTATOR}_${CONNECTS} NEWPDF=$OUTPUTDIR/${NEWNAME}.pdf # ------------------------------------------------------------------- # head -n $HEADENDLINENUMBER $SVGDIR/$SVG > $NEWSVG for LAYERFILE in `cat $LAYERLIST | sort` do FILE=${LAYERFILE##*/} NAME=${FILE%%.*} ID=`grep $LAYERID $LAYERFILE | cut -d "\"" -f 2 | head -1` if [ `find $TMPDIR -name "${NAME}.svg" | \ wc -l` -lt 1 ]; then cat $LAYERFILE >> $NEWSVG fi done echo "" >> $NEWSVG sed -i 's/style="display:none"//g' $NEWSVG # ---- 1pt -> 3pt ---------------------------------------------------- # # stroke-width:1; # # sed -i 's/stroke-width:1;/stroke-width:3pt;/g' $NEWSVG # sed -i 's/stroke-width:1pt;/stroke-width:3pt;/g' $NEWSVG # sed -i 's/stroke-width:1px;/stroke-width:3px;/g' $NEWSVG # ------------------------------------------------------------------- # # ---- 1pt -> 3pt ---------------------------------------------------- # # stroke-width:1; # sed -i 's/stroke-width:1;/stroke-width:3px;/g' $NEWSVG sed -i 's/stroke-width:1pt;/stroke-width:3px;/g' $NEWSVG sed -i 's/stroke-width:1px;/stroke-width:3px;/g' $NEWSVG # ------------------------------------------------------------------- # inkscape --export-pdf=$NEWPDF \ --export-text-to-path $NEWSVG fi # ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: # randomName () { FIRST=$WORDSTART REST=`cat $DICTFILE | \ sed -n '/^.\{5\}/p' | sed '/^.\{10\}/d' | \ shuf -n 1 |\ sed 's/[aueioAEIOU]/& \n/' | tail -1` GIFNAME=${FIRST}${REST} } SRCSVG=`ls $OUTPUTDIR/${NEWNAME}* | shuf -n 1` # BUG -> SRCSVG = PDF (WORKED WITH Inkscape 0.47 r22583) pdf2svg $SRCSVG $TMPDIR/${NEWNAME}.svg SRCSVG=$TMPDIR/${NEWNAME}.svg #----------------------------------------------------------# # MAKE (ANIMATED) GIF + PDF #----------------------------------------------------------# if [ `echo $RANDOM | rev | cut -c 1` -gt 2 ] || [ `echo $SVG | grep '\-M\-' | wc -l` -gt 0 ]; then PROPS=${ROTATOR}${ANIMATABLE} randomName convert -delay $DELAY \ -density 300 \ -resize $CROPSIZE \ -crop ${GIFSIZE}x${GIFSIZE}+${CROP}+${CROP}\! \ +repage \ $OUTPUTDIR/${NEWNAME}* \ $GIFDIR/${GIFNAME}${PROPS}_${CONNECTS%%.*}.gif # SRCSVG=`ls $OUTPUTDIR/${NEWNAME}* | shuf -n 1` # # BUG -> SRCSVG = PDF (WORKED WITH Inkscape 0.47 r22583) # pdf2svg $SRCSVG ${SRCSVG%%.*}.svg OUTPDF=$PDFDIR/${GIFNAME}${PROPS}_${CONNECTS%%.*}.pdf inkscape --export-pdf=$OUTPDF \ --export-area-canvas \ --export-text-to-path ${SRCSVG%%.*}.svg else REVNAME=`echo ${NEWNAME} | rev | cut -c 1-24`M F1=`echo $CONNECTS | cut -d "_" -f 1` F2=`echo $CONNECTS | cut -d "_" -f 4` F3=`echo $CONNECTS | cut -d "_" -f 3` F4=`echo $CONNECTS | cut -d "_" -f 2` NEWCONNECTS=${F1}_${F2}_${F3}_${F4}_ PROPS=${ROTATOR}${ANIMATABLE} randomName convert -delay $DELAY \ -density 300 \ -flop \ -resize $CROPSIZE \ -crop ${GIFSIZE}x${GIFSIZE}+${CROP}+${CROP}\! \ +repage \ $OUTPUTDIR/${NEWNAME}* \ $GIFDIR/${GIFNAME}${PROPS}_${NEWCONNECTS}.gif # SRCSVG=`ls $OUTPUTDIR/${NEWNAME}* | shuf -n 1` # # BUG -> SRCSVG = PDF # pdf2svg $SRCSVG ${SRCSVG%%.*}.svg MPDF=$TMPDIR/to_mirror.pdf OUTPDF=$PDFDIR/${GIFNAME}${PROPS}_${NEWCONNECTS}.pdf inkscape --export-pdf=$MPDF \ --export-area-canvas \ --export-text-to-path ${SRCSVG%%.*}.svg mirrorPDF $MPDF cp ${MPDF%%.*}_mirrored.pdf $OUTPDF fi if [ `echo $SVG | grep '\-R\+' | wc -l` -gt 0 ]; then REVNAME=`echo ${NEWNAME} | rev` F1=`echo $CONNECTS | cut -d "_" -f 3` F2=`echo $CONNECTS | cut -d "_" -f 4` F3=`echo $CONNECTS | cut -d "_" -f 1` F4=`echo $CONNECTS | cut -d "_" -f 2` NEWCONNECTS=${F1}_${F2}_${F3}_${F4}_ PROPS=${ROTATOR}${ANIMATABLE} randomName convert -delay $DELAY \ -density 300 \ -rotate 180 \ -resize $CROPSIZE \ -crop ${GIFSIZE}x${GIFSIZE}+${CROP}+${CROP}\! \ +repage \ $OUTPUTDIR/${NEWNAME}* \ $GIFDIR/${GIFNAME}${PROPS}_${NEWCONNECTS}.gif # SRCSVG=`ls $OUTPUTDIR/${NEWNAME}* | shuf -n 1` # # BUG -> SRCSVG = PDF # pdf2svg $SRCSVG ${SRCSVG%%.*}.svg OUTPDF=$PDFDIR/${GIFNAME}${PROPS}_${NEWCONNECTS}.pdf RPDF=$TMPDIR/rotated.pdf RONAME=`echo $RANDOM`.pdf inkscape --export-pdf=$RPDF \ --export-area-canvas \ --export-text-to-path ${SRCSVG%%.*}.svg pdftk $RPDF cat 1S output $TMPDIR/$RONAME pdf2ps $TMPDIR/$RONAME $TMPDIR/${RONAME%%.*}.ps ps2pdf $TMPDIR/${RONAME%%.*}.ps $OUTPDF rm $TMPDIR/${RONAME%%.*}.* fi if [ `echo $SVG | grep '\-R\+' | wc -l` -gt 0 ]; then REVNAME=`echo ${NEWNAME} | rev` F1=`echo $CONNECTS | cut -d "_" -f 2` F2=`echo $CONNECTS | cut -d "_" -f 3` F3=`echo $CONNECTS | cut -d "_" -f 4` F4=`echo $CONNECTS | cut -d "_" -f 1` NEWCONNECTS=${F1}_${F2}_${F3}_${F4}_ PROPS=${ROTATOR}${ANIMATABLE} randomName convert -delay $DELAY \ -density 300 \ -rotate -90 \ -resize $CROPSIZE \ -crop ${GIFSIZE}x${GIFSIZE}+${CROP}+${CROP}\! \ +repage \ $OUTPUTDIR/${NEWNAME}* \ $GIFDIR/${GIFNAME}${PROPS}_${NEWCONNECTS}.gif # SRCSVG=`ls $OUTPUTDIR/${NEWNAME}* | shuf -n 1` # # BUG -> SRCSVG = PDF # pdf2svg $SRCSVG ${SRCSVG%%.*}.svg OUTPDF=$PDFDIR/${GIFNAME}${PROPS}_${NEWCONNECTS}.pdf RPDF=$TMPDIR/rotated.pdf RONAME=`echo $RANDOM`.pdf inkscape --export-pdf=$RPDF \ --export-area-canvas \ --export-text-to-path ${SRCSVG%%.*}.svg pdftk $RPDF cat 1W output $TMPDIR/$RONAME pdf2ps $TMPDIR/$RONAME $TMPDIR/${RONAME%%.*}.ps ps2pdf $TMPDIR/${RONAME%%.*}.ps $OUTPDF rm $TMPDIR/${RONAME%%.*}.* fi if [ `echo $SVG | grep '\-R\+' | wc -l` -gt 0 ]; then REVNAME=`echo ${NEWNAME} | rev` F1=`echo $CONNECTS | cut -d "_" -f 4` F2=`echo $CONNECTS | cut -d "_" -f 1` F3=`echo $CONNECTS | cut -d "_" -f 2` F4=`echo $CONNECTS | cut -d "_" -f 3` NEWCONNECTS=${F1}_${F2}_${F3}_${F4}_ PROPS=${ROTATOR}${ANIMATABLE} randomName convert -delay $DELAY \ -density 300 \ -rotate 90 \ -resize $CROPSIZE \ -crop ${GIFSIZE}x${GIFSIZE}+${CROP}+${CROP}\! \ +repage \ $OUTPUTDIR/${NEWNAME}* \ $GIFDIR/${GIFNAME}${PROPS}_${NEWCONNECTS}.gif # SRCSVG=`ls $OUTPUTDIR/${NEWNAME}* | shuf -n 1` # # BUG -> SRCSVG = PDF # pdf2svg $SRCSVG ${SRCSVG%%.*}.svg OUTPDF=$PDFDIR/${GIFNAME}${PROPS}_${NEWCONNECTS}.pdf RPDF=$TMPDIR/rotated.pdf RONAME=`echo $RANDOM`.pdf inkscape --export-pdf=$RPDF \ --export-area-canvas \ --export-text-to-path ${SRCSVG%%.*}.svg pdftk $RPDF cat 1E output $TMPDIR/$RONAME pdf2ps $TMPDIR/$RONAME $TMPDIR/${RONAME%%.*}.ps ps2pdf $TMPDIR/${RONAME%%.*}.ps $OUTPDF rm $TMPDIR/${RONAME%%.*}.* fi #----------------------------------------------------------# # =================================================================== # K=`expr $K + 1` else echo "COMBINATION EXISTS" rm $LAYERLIST TICK=`expr $TICK + 1` if [ $TICK -gt 100 ]; then K=`expr $K + 100` fi fi done done done done exit 0;