Charles.Forsyth20060303a828770d19 years agoHistory
120 lines · 4.0 KB · Objective-C
RawDownload
 # the public interface to this looks like:#	Reader: module {#		PATH: con "/dis/ebook/reader.dis";#		init: fn(displ: ref Draw->Display);#		Datasource: adt {#			new:		fn(f: string, win: ref Tk->Toplevel, width: int, evch: string): (ref Datasource, string);#			copy:	fn(d: self ref Datasource): ref Datasource;#			mark:	fn(d: self ref Datasource): ref Mark;#			goto:	fn(d: self ref Datasource, m: ref Mark);#			atmark:	fn(d: self ref Datasource, m: ref Mark): int;#			next:		fn(d: self ref Datasource, linkch: chan of (string, string, string)): string;#	#			linestart:	fn(d: self ref Datasource, w: string, y: int): int;#			linkoffset:	fn(d: self ref Datasource, w: string, s: string): int;#		};#	};  Reader: module {	PATH: con "/dis/ebook/reader.dis";	init: fn(displ: ref Draw->Display);	Datasource: adt {		x:		ref Xml->Parser;		t:		ref Text;		title:		string;		win:		ref Tk->Toplevel;		evch:	string;			# tk channel on which to send events		tags:		list of ref Xml->Item.Tag;		width:	int;		filename:	string;		error:	string;		item:		ref Xml->Item;		imark:	ref Xml->Mark;		# mark at start of item		fontinfo:	list of ref Fontinfo;		styles:	list of ref Stylesheet->Style;		stylesheet:	ref Stylesheet->Sheet;		linkch:	chan of (string, string, string);		# (linkname, widgetname, internal reference)		warningch: chan of (Xml->Locator, string);		startmark:	ref Reader->Mark;	# mark start of body for copy()		fallbacks:	list of (string, string); 		# public interface consists solely of the following few methods, along with the Mark adt.		new:		fn(f: string, fallbacks: list of (string, string), win: ref Tk->Toplevel, width: int, evch: string, warningch: chan of (Xml->Locator, string)): (ref Datasource, string);		copy:	fn(d: self ref Datasource): ref Datasource;		mark:	fn(d: self ref Datasource): ref Mark;		str2mark:	fn(d: self ref Datasource, s: string): ref Mark;		mark2str:	fn(d: self ref Datasource, m: ref Mark): string;		goto:	fn(d: self ref Datasource, m: ref Mark);		atmark:	fn(d: self ref Datasource, m: ref Mark): int;		next:		fn(d: self ref Datasource, linkch: chan of (string, string, string)): (Block, string);		fileoffset:	fn(d: self ref Datasource): int; 		rectforfileoffset:	fn(t: self ref Datasource, w: string, fileoffset: int): (int, Draw->Rect);		fileoffsetnearyoffset:	fn(t: self ref Datasource, w: string, yoffset: int): int;		linestart:	fn(d: self ref Datasource, w: string, y: int): int;		linkoffset:	fn(d: self ref Datasource, w: string, s: string): int;		event:	fn(d: self ref Datasource, e: string): ref Event;	}; 	Block: adt {		w: string;		tmargin, bmargin: int;	}; 	Event: adt {		pick {		Link =>			url:	string;		Texthit =>			fileoffset:	int;		}	};			Mark: adt {		xmark:	ref Xml->Mark;		eq:	fn(m1: self ref Mark, m2: ref Mark): int;		fileoffset:	fn(m: self ref Mark): int;	}; 	Text: adt {		win:		ref Tk->Toplevel;		w:		string;		tags:		array of list of (string, int);	# hash of (attrs, tagnum); holds all currently used tags in widget		max:		int;			# max tagnum		href:		string;		margins:		list of Margin;		# margins of enclosing blocks		margin:		Margin;			# current margin values		outertmargin:	int;		outerbmargin:	int;		needspace:	int;			# vspace waiting		lastwhite:		int;			# did the last text hold trailing whitespace?		startofline:	int;		style:	ref Stylesheet->Style;		fontinfo:	ref Fontinfo;		evch:	string; 		new:		fn(win: ref Tk->Toplevel, w: string, width: int, evch: string): ref Text;		addtext:	fn(t: self ref Text, text: string, ws1, ws2: int, fileoffset: int);		gettag:	fn(t: self ref Text,  s: string): string;		linebreak:	fn(t: self ref Text);		addmark:	fn(t: self ref Text): string;		widgetname:	fn(t: self ref Text, t: int): string;		addwidget:	fn(t: self ref Text, w: string, fileoffset: int, invisible: int);		startblock:	fn(t: self ref Text);		endblock:		fn(t: self ref Text);		finalise:	fn(t: self ref Text, addvspace: int);		vspace:	fn(t: self ref Text, h: int);	}; 	Margin: adt {		l, r, b, textindent: int;	}; 	Fontinfo: adt {		path:		string;		em:		int;		ex:		int;	};};