#!/bin/sh

# Miriam Ruiz <little_miry@yahoo.es>, Version 0.6, 2007.04.21
# You can do whatever you want with ths script, it's in the public domain

export LANG="C"
export ARCH="amd64"

rm -rf dat tmp web

echo "Generating list of packages with TrueType fonts for ${ARCH}"

# Thanks to Tincho for this information
#http://beta.howtorecognise.mine.nu/blog/How_to_have_a_private_APT_configuration.html
mkdir -p lists/partial
aptitude update -q=0 -y \
	-o "Dir::Etc::SourceList=`pwd`/sources.list" \
	-o "Dir::State::Lists=`pwd`/lists" \
	-o "Debug::NoLocking=1" -o "Debug::pkgDPkgPM=1"
	
# aptitude install wget
test -e Contents-${ARCH}.gz || wget http://ftp2.de.debian.org/debian/dists/sid/Contents-${ARCH}.gz

# lots of thanks, jacobo, I love you! :)
if [ ! -e pkg.list ]; then
	zcat Contents-${ARCH}.gz | awk '/\.[tT][tT][fF][\t ]/{print $2}' | sed 's/,/\n/g' | grep -v non-free | sed 's/.*\///g' | sort --unique > pkg.list
fi

if [ ! -e pkgs ]; then
	echo "Filling pkgs with packages"
	mkdir -p pkgs
	cd pkgs
	aptitude download $(cat ../pkg.list) -q=0 --show-versions -y \
		-o "Dir::Etc::SourceList=`pwd`/../sources.list" \
		-o "Dir::State::Lists=`pwd`/../lists" \
		-o "Debug::NoLocking=1" -o "Debug::pkgDPkgPM=1"
	cd ..
fi

for i in $(cat pkg.list); do
	if [ ! -e pkgs/${i}_*.deb ]; then
		echo "Package $i is missing"
		cd pkgs
		aptitude download "$i" -q=0 --show-versions -y \
			-o "Dir::Etc::SourceList=`pwd`/../sources.list" \
			-o "Dir::State::Lists=`pwd`/../lists" \
			-o "Debug::NoLocking=1" -o "Debug::pkgDPkgPM=1"
		cd ..
	fi
done

rm -rf web tmp dat
mkdir -p tmp
mkdir -p web
mkdir -p dat

printf "<html>\n<header>\n<title>Fonts in Debian</title>\n</header>\n<body>\n" > web/index.html

# aptitude install imagemagick
for i in pkgs/*.deb; do
	pkgid=$(echo $i | sed 's!^pkgs/!!' |  sed 's!.deb!!')
	pkgname=$(dpkg-deb --field $i Package)
	echo "Package: $pkgname ($pkgid.deb)"
	rm -rf tmp
	mkdir -p tmp
	dpkg -x $i tmp

	for f in $(find tmp -iname "*.ttf" -a -not -type l); do

		if [ "$pkgfile" = "" ]; then
			pkgfile="pkg-$pkgname.html"
			printf "<a href="$pkgfile">$pkgid</a><br />\n" >> web/index.html
			printf "<html>\n<header>\n<title>$pkgid</title>\n</header>\n<body>\n" > web/$pkgfile
		fi

		if [ -f $f ]; then
			fontpath=$(echo $f | sed 's!^tmp/!!')
			fontname=$(echo $f | sed 's%.*/\([^/]\+\)$%\1%g' |  sed 's/.ttf//')
			md5=$(md5sum $f | awk '{print $1}')
			sha1=$(sha1sum $f | awk '{print $1}')
			webpath=$fontpath.png
			echo "  Font: $fontname"
			echo "    TTF:  $fontpath"
			echo "    MD5:  $md5"
			echo "    SHA1: $sha1"
			echo "    SIZE: $(stat -c %s $f)"
			echo "    PNG:  $webpath"
			rm -rf web/$md5.png

			test -e "web/$md5.png" || convert "$f" "web/$md5.png"
			test -e "web/$md5.ttf" || cp "$f" "web/$md5.ttf"
			if [ -e "web/$md5.png" ]; then
				printf "<br /><center>$fontpath</center><br />&nbsp;<br />\n" >> web/$pkgfile
				printf "<a href=\"fnt-$md5.html\"><img src=\"$md5.png\" /></a><br /><hr /><br />\n" >> web/$pkgfile
				echo "$fontname:$pkgname:$fontpath:$md5:$sha1" >> "dat/$md5".data
				# aptitude install fttools
				test -e "dat/$md5".info || ftinfo -a "$f" | sed 's/^.*.ttf: //g' > "dat/$md5".info
			fi
			echo ""
		fi
	done

	if [ ! "$pkgfile" = "" ]; then
		printf "</body>\n</html>\n" >> "web/$pkgfile"
		pkgfile=""
	else
		echo "  Skipping package $pkgname: Only symbolic links"
		echo ""
	fi
done

printf "</body>\n</html>\n" >> web/index.html

# Generate a page with all the fonts

rm -rf tmp
mkdir -p tmp

for i in dat/*.data; do
	fontid=$(echo $i | sed 's!^dat/!!' | sed 's!.data!!')
	fontname=$(cat $i | awk -F: '{print $1}' | sort | uniq -c | sort -n | tail -1 | awk '{print $2}')
	echo "$fontid: $fontname"
	printf "<center>$fontname</center><br />\n" > "tmp/$fontname.inc"
	printf "<img src=\"$fontid.png\" /><br />\n" >> "tmp/$fontname.inc"
	cat $i | awk -F: '{print "  " $2 ": " $3}'
	printf "In packages:\n<ul>\n" >> "tmp/$fontname.inc"
	cat $i | awk -F: '{print " <li><a href=\"pkg-" $2 ".html\">" $2 "</a>: " $3 "</li>"}' >> "tmp/$fontname.inc"
	printf "</ul>\n" >> "tmp/$fontname.inc"

	fontfile="fnt-$fontid.html"
	printf "<html>\n<header>\n<title>$fontname</title>\n</header>\n<body>\n" > web/$fontfile
	printf "<img src=\"$fontid.png\" /><br />&nbsp;<br />\n" >> web/$fontfile
	printf "In packages:\n<ul>\n" >> web/$fontfile
	cat $i | awk -F: '{print " <li><a href=\"pkg-" $2 ".html\">" $2 "</a>: " $3 "</li>"}' >> web/$fontfile
	printf "</ul>\n" >> web/$fontfile
	if [ -e dat/$fontid.info ]; then
			printf "<br />\n<pre>\n" >> web/$fontfile
			cat "dat/${fontid}.info" >> web/$fontfile
			printf "</pre><br />\n" >> web/$fontfile
	fi
	printf "</body>\n</html>\n" >> web/$fontfile

	printf "Font $fontname:\n" >> web/fonts.txt
	cat $i | awk -F: '{print "  Package: " $2 ", File: " $3 "\n      MD5: " $4 ", SHA1: " $5 ""}' >> web/fonts.txt
done

printf "<html>\n<header>\n<title>Fonts in Debian</title>\n</header>\n<body>\n" > web/all.html

prev=""
for i in $(ls tmp/*.inc | sort); do
	if [ "$prev" != "" ]; then
		printf "<br /><hr /><br />&nbsp;<br />\n" >> web/all.html
	fi
	cat $i >> web/all.html
	prev=$i
done;

printf "</body>\n</html>\n" >> web/all.html

# Compress it

cd web
tar cvfj ../fonts.tar.bz2 .
