#! /usr/bin/env python
# encoding: utf-8
# Thomas Nagy, 2006-2010 (ita)

"""
call 'waf --targets=waf.pdf' or use 'waf list' to see the targets available
"""

VERSION='0.0.1'
APPNAME='wafdocs'

import os, re, shutil

top = '.'
out = 'build'

re_xi = re.compile('''^(include|image)::([^.]*.(txt|\\{PIC\\}))\[''', re.M)
def ascii_doc_scan(self):
	p = self.inputs[0].parent
	node_lst = [self.inputs[0]]
	seen = []
	depnodes = []
	while node_lst:
		nd = node_lst.pop(0)
		if nd in seen: continue
		seen.append(nd)

		code = nd.read()
		for m in re_xi.finditer(code):
			name = m.group(2)
			if m.group(3) == '{PIC}':

				ext = '.eps'
				if self.generator.rule.rfind('A2X') > 0:
					ext = '.png'

				k = p.find_resource(name.replace('{PIC}', ext))
				if k:
					depnodes.append(k)
			else:
				k = p.find_resource(name)
				if k:
					depnodes.append(k)
					node_lst.append(k)
	return [depnodes, ()]

import re
def scansize(self):
	name = 'image::%s\\{PIC\\}\\[.*,(width|height)=(\\d+)' % self.inputs[0].name[:-4]
	re_src = re.compile(name)
	lst = self.inputs[0].parent.get_src().ant_glob('*.txt')
	for x in lst:
		m = re_src.search(x.read())
		if m:
			val = str(int(1.6 * int(m.group(2))))
			if m.group(1) == 'width':
				w = val
				h = "800"
			else:
				w = "800"
				h = val

			ext = self.inputs[0].name[-3:]
			if ext == 'eps':
				code = '-geometry %sx%s' % (w, h)
			elif ext == 'dia':
				if m.group(1) == 'width':
					h = ''
				else:
					w = ''
				code = '--size %sx%s' % (w, h)
			else:
				code = '-Gsize="%s,%s"' % (w, h)
			break
	else:
		return ([], '')

	return ([], code)

def options(opt):
	opt.add_option('--exe', action='store_true', default=False, help='Execute the program after it is compiled')

def configure(conf):
	conf.find_program('a2x', var='A2X')
	conf.find_program('asciidoc', var='ADOC')
	conf.find_program('dia', var='DIA')
	conf.find_program('convert', var='CONVERT')
	conf.find_program('source-highlight', var='SOURCE_HIGHLIGHT')

def build(bld):


	for x in bld.path.ant_glob('*.eps'):
		nd = bld.path.get_bld().make_node(x.name)
		bld(rule='cp ${SRC} ${TGT}', source=x, target=nd)
		bld(rule='${CONVERT} ${bld.raw_deps[tsk.uid()]} -density 600 ${SRC} ${TGT}', source=x, target=x.change_ext('.png'), scan=scansize)

	for x in bld.path.ant_glob('*.dot'):
		tg = bld(rule='dot -Teps -o${TGT} ${SRC}', source=x, target=x.change_ext('.eps'))
		tg = bld(rule='dot -Tpng -o${TGT} ${SRC}', source=x, target=x.change_ext('.png'), scan=scansize)
		#tg = bld(rule='${CONVERT} ${bld.raw_deps[tsk.uid()]} ${SRC} ${TGT}', source=x.change_ext('.eps'), target=x.change_ext('.png'), scan=scansize)

	for x in bld.path.ant_glob('*.dia'):
		tg = bld(rule='${DIA} -t eps ${SRC} -e ${TGT}', source=x, target=x.change_ext('.eps'))
		tg = bld(rule='${DIA} -t png ${SRC} -e ${TGT}', source=x, target=x.change_ext('.png'), scan=scansize)
		#bld(rule='${CONVERT} ${bld.raw_deps[tsk.uid()]} ${SRC} ${TGT}', source=tg.target, target=tg.target.change_ext('.png'), scan=scansize)

	for x in bld.path.ant_glob('pics/*.png'):
		bld(rule='cp ${SRC} ${TGT}', source=x, target=x.name)

	bld(rule='mkdir -p ${SRC[0].parent.get_bld().abspath()} && cp ${SRC} ${SRC[0].parent.get_bld().abspath()}',
		source=bld.path.ant_glob('callouts/*.png'))

	bld(rule='cp ${SRC} ${bld.bldnode.abspath()}', source='shishell.lang symbols.lang default.style lang.map waf.css')

	bld.add_group() # separator, the documents may require any of the pictures from above

	bld(rule='${ADOC} -a icons=true -a stylesheet=${SRC[1].abspath()} -a iconsdir=. -a toc -d book -o ${TGT} ${SRC[0].abspath()}',
		source='waf.txt waf.css', target='single.html', scan=ascii_doc_scan)

	bld(rule='${A2X} -L -a toc --icons-dir=. --icons -D ${gen.path.get_bld().abspath()} -d book -f pdf ${SRC}',
		source='waf.txt', target='waf.pdf', scan=ascii_doc_scan)

	bld(rule='${A2X} -L -a toc --icons-dir=. --icons -D ${gen.path.get_bld().abspath()} -d article -f pdf ${SRC}',
		source='intro_waf_1.6.txt', target='intro_waf_1.6.pdf', scan=ascii_doc_scan)

	bld(rule='ln -sf single.html index.html', shell=True)

	if bld.options.exe:
		def exe(ctx):
			bld.exec_command('firefox build/single.html')
		bld.add_post_fun(exe)

"""
Add the following to asciidoc/dblatex/asciidoc-dblatex.sty

\\usepackage{color}
\\usepackage{listings}
\definecolor{gray}{gray}{0.5}
\definecolor{plum}{rgb}{0.55078125,0.09765625,0.55859375}
\lstset{commentstyle=\color{plum}}
\lstdefinelanguage{shishell} {
  morekeywords={},
  sensitive=false,
  morecomment=[l]{\$}
}

Set the following values in asciidoc-dblatex.xsl:
  <xsl:param name="doc.publisher.show">0</xsl:param>
  ...
  <xsl:param name="latex.output.revhistory">0</xsl:param>

And for vim highlighting:
cp vim/syntax/asciidoc.vim /usr/share/vim/site/syntax/
cp vim/ftdetect/asciidoc_filetype.vim /usr/share/vim/site/ftdetect/

When adding an eps from a svg file, convert it with inscape first
convert (imagemagick) does not process svg files too well

colors:
 yellow fffea6
 green  aef9a5
 blue   d2d5ff
"""

