#
#             Name    : Ada
#             Purpose : Ada StrongEd Mode
#             Author  :  Philip Ludlam 1999
#             Licence : Freeware
#             Version : 0.51, Saturday the 6th of May, 2000
#

ID_FirstChar	A-Za-z
ID_Middle	A-Za-z_0-9
ID_LastChar	A-Za-z_0-9

SyntaxOptions
	SingleQuote	no
	DoubleQuote	yes
	QuoteQuote	no
	SplitString	no
	QuoteChar	"
	HexPrefix	#
	BinPrefix	:

#	Note : The last two options aren't technically correct.
#	The format Ada understands is :
#		'<base> : <number> :' or '<base> # <number> #'
End

SyntaxComment 1
	Type		OneLine
	StartWith	--
End

SyntaxWords Group1 nocase EndNonID
#	SyntaxWords Group1 nocase StartSpace EndNonID
	abort abs abstract accept access aliased all and array at
	begin body         
	case constant
	declare delay delta digits do
	else elsif end entry exception exit
	for function
	generic goto
	if in is
	limited loop
	mod
	new not null
	of or others out
	package pragma private procedure protected
	raise range record rem rename requeue return reverse
	select seperate subtype
	tagged task terminate
	then type
	until use
	when while with
	xor
End

SyntaxWords Group2 nocase EndNonID
	.Put	_IO	_IO.Put
	.Get		_IO.Get
End

SyntaxWords Group3 nocase EndOfID
	Ada.
End

SyntaxWords Group4 nocase EndNonID
	Boolean	Character	String
	Natural	Integer	Float	Positive
End

SyntaxWords Group5 nocase EndAlways
	Val	Pred	Succ	First	Last	Pos
End

Search

	functions	"function"
	procedures	"procedure"

	ada_put	* ".put"
	ada_get	* ".get"

#	Definitions for reformat operation

	abort_s		White @1 "abort" @8 White|";"
	abs_s		White @1 "abs" @8 White|";"
	abstract_s	White @1 "abstract" @8 White|";"
	accept_s	White @1 "accept" @8 White|";"
	access_s	White @1 "access" @8 White|";"
	aliased_s	White @1 "aliased" @8 White|";"
	all_s		White @1 "all" @8 White|";"
	and_s		White @1 "and" @8 White|";"
	array_s		White @1 "array" @8 White|";"
	at_s		White @1 "at" @8 White|";"

	begin_s		White @1 "begin" @8 White|";"
	body_s		White @1 "body" @8 White|";"

	case_s		White @1 "case" @8 White|";"
	constant_s	White @1 "constant" @8 White|";"

	declare_s	White @1 "declare" @8 White|";"
	delay_s		White @1 "delay" @8 White|";"
	delta_s		White @1 "delta" @8 White|";"
	digits_s	White @1 "digits" @8 White|";"
	do_s		White @1 "do" @8 White|";"

	else_s		White @1 "else" @8 White|";"
	elsif_s		White @1 "elsif" @8 White|";"
	end_s		White @1 "end" @8 White|";"
	entry_s		White @1 "entry" @8 White|";"
	exception_s	White @1 "exception" @8 White|";"
	exit_s		White @1 "exit" @8 White|";"

	for_s		White @1 "for" @8 White|";"
	func_s		White @1 "function" @8 White|";"

	generic_s	White @1 "generic" @8 White|";"
	goto_s		White @1 "goto" @8 White|";"

	if_s		White @1 "if" @8 White|";"
	in_s		White @1 "in" @8 White|";"
	is_s		White @1 "is" @8 White|";"

	limited_s	White @1 "limited" @8 White|";"
	loop_s		White @1 "loop" @8 White|";"

	mod_s		White @1 "mod" @8 White|";"

	new_s		White @1 "new" @8 White|";"
	not_s		White @1 "not" @8 White|";"
	null_s		White @1 "null" @8 White|";"

	of_s		White @1 "of" @8 White|";"
	or_s		White @1 "or" @8 White|";"
	others_s	White @1 "others" @8 White|";"
	out_s		White @1 "out" @8 White|";"

	package_s	White @1 "package" @8 White|";"
	pragma_s	White @1 "pragma" @8 White|";"
	private_s	White @1 "private" @8 White|";"
	procedure_s	White @1 "procedure" @8 White|";"
	protected_s	White @1 "protected" @8 White|";"

	raise_s		White @1 "raise" @8 White|";"
	range_s		White @1 "range" @8 White|";"
	record_s	White @1 "record" @8 White|";"
	rem_s		White @1 "rem" @8 White|";"
	rename_s	White @1 "rename" @8 White|";"
	requeue_s	White @1 "requeue" @8 White|";"
	return_s	White @1 "return" @8 White|";"
	reverse_s	White @1 "reverse" @8 White|";"

	select_s	White @1 "select" @8 White|";"
	separated_s	White @1 "seperate" @8 White|";"
	subtype_s	White @1 "subtype" @8 White|";"

	tagged_s	White @1 "tagged" @8 White|";"
	task_s		White @1 "task" @8 White|";"
	terminate_s	White @1 "terminate" @8 White|";"

	then_s		White @1 "then" @8 White|";"
	type_s		White @1 "type" @8 White|";"

	until_s		White @1 "until" @8 White|";"
	use_s		White @1 "use" @8 White|";"

	when_s		White @1 "when" @8 White|";"
	while_s		White @1 "while" @8 White|";"
	with_s		White @1 "with" @8 White|";"

	xor_s		White @1 "xor" @8 White|";"

# Definitions for the space/tabs conversion

	spaces_s	NL @1 { &09 } @8 "    "
	tabs_s		&09

	fold_start	("function" | "procedure") * "is"
	fold_end	(NL "end") * ";" NL

End

#	FoldParm2 (fold_start, fold_end,startofline,nocase)

Replace

#	Definitions for reformat operation

	abort_r		@01 "abort" @89
	abs_r		@01 "abs" @89
	abstract_r	@01 "abstract" @89
	accept_r	@01 "accept" @89
	access_r	@01 "access" @89
	aliased_r	@01 "aliased" @89
	all_r		@01 "all" @89
	and_r		@01 "and" @89
	array_r		@01 "array" @89
	at_r		@01 "at" @89

	begin_r		@01 "begin" @89
	body_r		@01 "body" @89

	case_r		@01 "case" @89
	constant_r	@01 "constant" @89

	declare_r	@01 "declare" @89
	delay_r		@01 "delay" @89
	delta_r		@01 "delta" @89
	digits_r	@01 "digits" @89
	do_r		@01 "do" @89

	else_r		@01 "else" @89
	elsif_r		@01 "elsif" @89
	end_r		@01 "end" @89
	entry_r		@01 "entry" @89
	exception_r	@01 "exception" @89
	exit_r		@01 "exit" @89

	for_r		@01 "for" @89
	func_r		@01 "function" @89

	generic_r	@01 "generic" @89
	goto_r		@01 "goto" @89

	if_r		@01 "if" @89
	in_r		@01 "in" @89
	is_r		@01 "is" @89

	limited_r	@01 "limited" @89
	loop_r		@01 "loop" @89

	mod_r		@01 "mod" @89

	new_r		@01 "new" @89
	not_r		@01 "not" @89
	null_r		@01 "null" @89

	of_r		@01 "of" @89
	or_r		@01 "or" @89
	others_r	@01 "others" @89
	out_r		@01 "out" @89

	package_r	@01 "package" @89
	pragma_r	@01 "pragma" @89
	private_r	@01 "private" @89
	procedure_r	@01 "procedure" @89
	protected_r	@01 "protected" @89

	raise_r		@01 "raise" @89
	range_r		@01 "range" @89
	record_r	@01 "record" @89
	rem_r		@01 "rem" @89
	rename_r	@01 "rename" @89
	requeue_r	@01 "requeue" @89
	return_r	@01 "return" @89
	reverse_r	@01 "reverse" @89

	select_r	@01 "select" @89
	separated_r	@01 "seperate" @89
	subtype_r	@01 "subtype" @89

	tagged_r	@01 "tagged" @89
	task_r		@01 "task" @89
	terminate_r	@01 "terminate" @89

	then_r		@01 "then" @89
	type_r		@01 "type" @89

	until_r		@01 "until" @89
	use_r		@01 "use" @89

	when_r		@01 "when" @89
	while_r		@01 "while" @89
	with_r		@01 "with" @89

	xor_r		@01 "xor" @89

# Definitions for the spaces/tabs conversion

	spaces_r	NL @18 &09
	tabs_r		"    "

End

Functions

#	Icon	lof
#	Select	ListOfFound (functions,All,noline,nocase)
#	Menu	List of functions
#	Help	List of functions

#	Adjust	ListOfFound (procedures,All,noline,nocase)

#	Icon	brick
#	Select	ListOfFound (ada_put,text,noline,nocase)
#	Menu	List all PUT calls

#	Adjust	ListOfFound (ada_get,text,noline,nocase)
#	Menu	List all GET calls

#	Icon	brick
	Menu	Reformat
	Select	Replace (abort_s,abort_r,text,noline,nocase)            Replace (abs_s,abs_r,text,noline,nocase)                        Replace (abstract_s,abstract_r,text,noline,nocase)              Replace (accept_s,accept_r,text,noline,nocase)                  Replace (access_s,access_r,text,noline,nocase)                  Replace (aliased_s,aliased_r,text,noline,nocase)                Replace (all_s,all_r,text,noline,nocase)                        Replace (and_s,and_r,text,noline,nocase)                        Replace (array_s,array_r,text,noline,nocase)                    Replace (at_s,at_r,text,noline,nocase)                          Replace (begin_s,begin_r,text,noline,nocase)                    Replace (body_s,body_r,text,noline,nocase)                      Replace (case_s,case_r,text,noline,nocase)                      Replace (constant_s,constant_r,text,noline,nocase)              Replace (declare_s,declare_r,text,noline,nocase)                Replace (delay_s,delay_r,text,noline,nocase)                    Replace (delta_s,delta_r,text,noline,nocase)                    Replace (digits_s,digits_r,text,noline,nocase)                  Replace (do_s,do_r,text,noline,nocase)                          Replace (else_s,else_r,text,noline,nocase)                      Replace (elsif_s,elsif_r,text,noline,nocase)                    Replace (end_s,end_r,text,noline,nocase)                        Replace (entry_s,entry_r,text,noline,nocase)                    Replace (exception_s,exception_r,text,noline,nocase)            Replace (exit_s,exit_r,text,noline,nocase)                      Replace (for_s,for_r,text,noline,nocase)                        Replace (func_s,func_r,text,noline,nocase)                      Replace (generic_s,generic_r,text,noline,nocase)                Replace (goto_s,goto_r,text,noline,nocase)                      Replace (if_s,if_r,text,noline,nocase)                          Replace (in_s,in_r,text,noline,nocase)                          Replace (is_s,is_r,text,noline,nocase)                          Replace (limited_s,limited_r,text,noline,nocase)                Replace (loop_s,loop_r,text,noline,nocase)                      Replace (mod_s,mod_r,text,noline,nocase)                        Replace (new_s,new_r,text,noline,nocase)                        Replace (not_s,not_r,text,noline,nocase)                        Replace (null_s,null_r,text,noline,nocase)                      Replace (of_s,of_r,text,noline,nocase)                          Replace (or_s,or_r,text,noline,nocase)                          Replace (others_s,others_r,text,noline,nocase)                  Replace (out_s,out_r,text,noline,nocase)                        Replace (package_s,package_r,text,noline,nocase)                Replace (pragma_s,pragma_r,text,noline,nocase)                  Replace (private_s,private_r,text,noline,nocase)                Replace (procedure_s,procedure_r,text,noline,nocase)            Replace (protected_s,protected_r,text,noline,nocase)            Replace (raise_s,raise_r,text,noline,nocase)                    Replace (range_s,range_r,text,noline,nocase)                    Replace (record_s,record_r,text,noline,nocase)                  Replace (rem_s,rem_r,text,noline,nocase)                        Replace (rename_s,rename_r,text,noline,nocase)                  Replace (requeue_s,requeue_r,text,noline,nocase)                Replace (return_s,return_r,text,noline,nocase)                  Replace (reverse_s,reverse_r,text,noline,nocase)                Replace (select_s,select_r,text,noline,nocase)                  Replace (separated_s,separated_r,text,noline,nocase)            Replace (subtype_s,subtype_r,text,noline,nocase)                Replace (tagged_s,tagged_r,text,noline,nocase)                  Replace (task_s,task_r,text,noline,nocase)                      Replace (terminate_s,terminate_r,text,noline,nocase)            Replace (then_s,then_r,text,noline,nocase)                      Replace (type_s,type_r,text,noline,nocase)                      Replace (until_s,until_r,text,noline,nocase)                    Replace (use_s,use_r,text,noline,nocase)                        Replace (when_s,when_r,text,noline,nocase)                      Replace (while_s,while_r,text,noline,nocase)                    Replace (with_s,with_r,text,noline,nocase)                      Replace (xor_s,xor_r,text,noline,nocase)
	Help	Converts old-stype UPPER case code to new-style lower case 

#		Replace (_s,_r,text,noline,nocase)

	Menu	Spaces to TABs
	Select	Replace (spaces_s,spaces_r,text,noline,nocase)
	Help	Converts a group of four spaces to a tab (needs to be run repetitively)

	Menu	TABs to spaces
	Select	Replace (tabs_s,tabs_r,text,noline,nocase)
	Help	Converts a tab to four spaces. 


End

Shortcuts

# IO Routines

	``IO	_IO.\@ (Item => \@);
	``Put	_IO.Put (Item => \@);
	``Get	_IO.Get (Item => \@);

	``w	with \@;
	``proc	procedure \@ is
	``func

	``type	type \@ is (\@);
	``pack	package \@ is new Ada.Text_IO.Enumeration_IO (Enum => \@);

	``/	---//--- ---//--- ---//--- ---//---  ---//--- ---//--- ---//--- ---//---

End
