heh. bug in pdfselect on compressed object streams. gc takes forever, no objects remain...

lazy nametree
lazy pagetree

builtin standard cmap files (?)
put unicode strings in text object, not font (a la metro)

xml parser
unicode normaliser

path stroke/dash/flatten work on real path struct
turn into gel as second step after stroke/flatten
add intersector for metro union/xor/difference stuff

image rescale to exact size instead of by integer quantas

public / private api

fix the shading code:
	3 levels of detail patch mesh (quad, patch, tensor)
	subdivide to triangles on the fly
	draw tris as before
	reuse more code in the parsing
	error cleanup

--- WORLD ---

the fitz world is:
	the set of resources:
		trees, fonts, images, shades, colorspaces
	the list of pages:
		references to tree resources
	opaque / transparent / invisible ?

input device drivers create a fitz world from a document
	readps -- use ghostscript
	readpdf -- use mupdf
	readmetro -- use samus

	the mapping from file -> pages and resources
		internal to the driver, nothing fitz cares or knows about
		should be lazy -- loaded on an as-needed basis
		should be reference counted -- can free and reload resources

	minimal api (that works for *all* input drivers)
		open(file)
		close()
		nextpage()

	extended api (that may or may not work optimally)
		countpages()
		loadpage(number)

output drivers take a fitz world and produce whatever
	raster
	writeps
	writepdf
	writemetro

--- WORLD API ---

Fitz World APIs

Trees:
	fz_tree

	fz_node with subclasses

		leafs:
			fz_solidnode
			fz_imagenode
			fz_shadenode
			fz_pathnode
			fz_textnode

		branches:
			fz_transformnode
			fz_overnode
			fz_masknode
			fz_blendnode		# for pdf 1.4 and pcl rops
			fz_linknode
			fz_metanode

	construction api
	navigation api

Colorspaces:
	fz_colorspace
		fz_devicecolor	(gray, rgb, cmyk)
		fz_iccprofile	(icc profile colorspace)
		fz_separation	(how do we do alternate tint functions?)

Images:
	fz_image
		fz_jpegimage	# jpeg-compressed
		fz_tileimage	# 1,8,16 bit image chopped into tiles

		...or...
		fz_monoimage	# 1-bit image
		fz_byteimage	# 8-bit image
		fz_wordimage	# 16-bit image

Shades:
	fz_shade
		mesh of quads, patches, tensors

Fonts:
	fz_font
		fz_fakefont	# substitute fonts
		fz_t3font	# sub-trees define glyphs
		fz_psfont	# cff postscript font
		fz_ttfont	# truetype font


--- OLD ---

immediate plan:

	* clean up and 'freeze' public api

	* get font bbox from fontdescriptor if available
	* refactor image loading
	* refactor xref loading/repair
	* restructure build.c and interpret.c (ftb vs csi)
	* fix the colorspace/pattern/shading material mess
	* font loading:
		- configuration... where to find system files (asian font archive?)
		- system fontfile + cmap store
		- embedded fontfile store
		- split type3 and ftfont malloc (dont waste t3 charprocs on ft fonts)
		- make ftfontfile separate struct w/ refcounting
		- refactor font loading more. simple/cid/type3 have too much in common.

	* structure low/high level stuff
		- rewrite outline parser
		- implement comments

	* clean high-level api

	- go through spec and check all features!
	- altivec optimize

transparency (v2)
	- everything!

colorspace conversions (v2)
	- fast color cubes
	- proper colorspace conversions
	- gamut compression
	- extended render intents

image rendering (v2)
	- tiles
	- dct case
	- better filter than box
	- lazy decoding

rendering
	- fix glyphcache evictlast
	- bbox culling per glyph
	- render cache (link-nodes and scaled images and colorspaced shades)

fz_optimizetree()
	- error & memory
	- concatenate chained transforms
	- remove identity transforms

for filters:
	validate ahxd pushback
	go through eof responsibility
	be more defensive of api user errors
	jbig2 rewrite
	dctencode params
	dctdecode app marker
	jpxd rewrite (or do special trick to load into image directly)

