% Convert AmigaGuide database to ASCII Text with ANSI Control Sequences
% (c) 1994 Martin Mares, MJSoft System Software

begin:	'@' clr gatcmd		% Waiting for @node
	'\n' begin
	else midx
midx:	'\n' begin
	else midx
gatcmd:	' ' maycmd
	'\n' begin
	else add gatcmd
maycmd:	switch "NODE" gotnode
	else midx

gotnode:	'"' nodehd	% Print node name
	'\n' begin
	else gotnode
nodehd:	'"' nodeig
	'\n' begin
nodeig:	'\n' copy nodei		% Ignore rest of line
	else nodeig

nodei:	'@' clr gatnc		% Inside the node
	'\n' copy nodei
	else copy nodej

nodej:	'@' mayz
	'\\' backs
	'\n' copy nodei

gatnc2:	'\n' gatnev		% Command found
	' ' gatnes
	else add
gatnes:	'\n' gatnev
	else
gatnev:	switch "ENDNODE" begin
	else nodei
gatnc:	use gatnc2 '{' clr ctrl

mayz:	'{' clr ctrl
	else put '@' copy nodej

backs:	'\\' '@' copy nodej	% Backslash found
	'\n' put '\\' copy nodei
	else put '\\' copy nodej

ctrl2:	'}' back cend		% Control characters
	' ' spac
	else add
ctrl:	use ctrl2 '"' ref
spac:	' '
	else back cend
cend:	switch
		"b" bold ; "ub" unbold
		"i" italic ; "ui" unital
		"u" underl ; "uu" unund
		"bg" backg ; "fg" foreg
	else cign
cign:	'}' nodej		% Ignore rest of ctrl sequence
	else cign

bold:	put "\e[1m" cign	% ANSI sequences
unbold:	put "\e[22m" cign
italic:	put "\e[3m" cign
unital:	put "\e[23m" cign
underl:	put "\e[4m" cign
unund:	put "\e[24m" cign
backg:	put "\e[4" clr ccolor
foreg:	put "\e[3" clr ccolor

ccolor:	' ' ccole		% Color switches
	'}' back ccole
	else add
ccole:	switch
		"text" cc1
		"shine" cc2
		"shadow" cc1
		"fill" cc3
		"filltext" cc1
		"back" cc0
		"highlight" cc2
	else cign
cc0:	put "0m" cign
cc1:	put "1m" cign
cc2:	put "2m" cign
cc3:	put "3m" cign

ref:	put "\e[7m" refloop	% Link - displayed in inverse video
refloop: '"' put "\e[27m" cign
