# Style sheet for ada
# Copyright (c) 1988, 89, 90, 91, 92, 93 Miguel Santana
# Copyright (c) 1995, 96, 97, 98 Akim Demaille, Miguel Santana
# $Id: ada.ssh,v 1.13 1998/03/19 14:09:23 demaille Exp $
#

#
# This file is part of a2ps.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2, or (at your option)
# any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; see the file COPYING.  If not, write to
# the Free Software Foundation, 59 Temple Place - Suite 330,
# Boston, MA 02111-1307, USA.
#
## 1.1 Akim Demaille
# Adapted sequences to the new handling in a2ps
## 1.2 Akim Demaille
# Fixed handling of char litterals
## 1.3 Akim Demaille
# Fixed appearance of return is function declarations
## TODO
# Use more subtle regexps instead of brain dead sequences for
# functions/procedures


style Ada is
written by "Akim Demaille <akim@freefriends.org>"
version is 1.3
requires a2ps version 4.13

documentation is
  "This style sheets cover Ada 95.  If you feel the need for Ada 83,"
  "you'll have to design another style sheet."
end documentation

first alphabet is
   "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz_)"
second alphabet is
   "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz_\'"

keywords in Keyword_strong are
   abort, abs, abstract, accept, access, "access function",
   "access procedure", 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, renames, requeue, return, reverse, select, separate,
   subtype, tagged, task, terminate, then, type, until, use, when,
   while, with, xor
end keywords

optional operators are
   != \neq,
   == \equiv,
   <= \leq,
   >= \geq,
   => \Rightarrow
end operators

operators are
  # Handling of Ada character literals
  (/'(.)'/ "'" Plain, \1 String, "'" Plain)
end operators

sequences are
    -- Comment,
    "\"" Plain String "\"" Plain
       exceptions are
          "\"\""
       end exceptions,

    # Special highlighting of some declarations
    "package " Keyword_strong Label_strong
	closers are
	  " is" Keyword_strong,
          " renames" Keyword_strong
	end closers,

    "package body " Keyword_strong Label_strong " is" Keyword_strong,

    "procedure " Keyword_strong Label
	closers are
	  " renames" Keyword_strong,
	  " is" Keyword_strong,
	  " (" Plain,
	  "(" Plain,
	  /$/ Plain,
	  ; Plain
	end closers,

    "function " Keyword_strong Label
	closers are
	  " return" Keyword_strong,
	  " renames" Keyword_strong,
	  " is" Keyword_strong,
	  " (" Plain,
	  "(" Plain,
	  /$/ Plain,
	  ; Plain
	end closers
end sequences
end style
