From: Christos Chryssochoidis <C.Chryssochoidis@gmail.com>
Subject: Re: Range types
Date: Wed, 24 Oct 2007 15:57:28 +0300
Date: 2007-10-24T15:57:28+03:00 [thread overview]
Message-ID: <1193230655.568017@athprx04> (raw)
In-Reply-To: <uPvTi.264150$ax1.245670@bgtnsc05-news.ops.worldnet.att.net>
Thanks very much, for giving me in such detail the solution, anon!
Regards,
Christos Chryssochoidis
anon wrote:
> --
> -- Package example:
> --
> -- For non Greek keyboards use Wide_Character
> -- { ["<xxxx>"]["<yyyy>"] }
> -- where <xxxx> and <yyyy> are 4-hex-digits to represents
> -- the two Wide_Character values
> --
> -- Example is
> -- ["03d6"]["1eee"] -- valid Greek string
> -- ["03d6"]h -- is not valid because character "h" is not
> -- a valid Greek character.
> --
>
>
> with Ada.Wide_Text_IO ;
> use Ada.Wide_Text_IO ;
>
> procedure tst is
>
> --
> -- Internal Packages:
> --
> package Greek is
>
>
> function Is_Greek_Character ( GC : Wide_Character )
> return Boolean ;
>
>
> function Is_Greek_Character_2 ( GC : Wide_Character )
> return Boolean ;
>
> function Is_Greek_Character ( GS : Wide_String )
> return Boolean ;
>
> end Greek ;
>
> --
> -- Internal Body Package
> --
> package body Greek is
>
> -- --------------------------- --
> -- Use for Is_Greek_Character --
> -- --------------------------- --
>
> --
> -- creates a greek constraint type
> --
> subtype Greek_Base is Wide_Character
> range Wide_Character'Val ( 16#370# )
> .. Wide_Character'Val ( 16#1FFF# ) ;
>
> --
> -- creates an excluded type
> --
> subtype Greek_Exclude_Subtype is Greek_Base
> range Greek_Base'Val ( 16#03D8# )
> .. Greek_Base'Val ( 16#0FFF# ) ;
>
> -- ----------------------------- --
> -- Use for Is_Greek_Character_2 --
> -- ----------------------------- --
>
> --
> -- create lower greek characters type
> --
> subtype Lower_Greek_Character is Wide_Character
> range Wide_Character'Val ( 16#0370# )
> .. Wide_Character'Val ( 16#03D7# ) ;
> --
> -- create upper greek characters type
> --
> subtype Upper_Greek_Character is Wide_Character
> range Wide_Character 'Val ( 16#1000# )
> .. Wide_Character 'Val ( 16#1FFF# ) ;
>
>
>
>
> --
> -- Is_Greek_Character
> --
> function Is_Greek_Character ( GC : Wide_Character )
> return Boolean is
>
> begin
> --
> -- Is character within the Greek base
> --
> if GC in Greek_Base then
> --
> -- Is character apart of the the non-Greek sub type
> --
> if GC in Greek_Exclude_Subtype then
> return False ;
> else
> return True ;
> end if ;
> else
> return False ;
> end if ;
> end ;
>
>
> --
> -- Is_Greek_Character version number 2
> --
> function Is_Greek_Character_2 ( GC : Wide_Character )
> return Boolean is
>
> begin
> --
> -- Could use:
> --
> -- when Lower_Greek_Character | Upper_Greek_Character =>
> -- return True ;
> --
> case GC is
> when Lower_Greek_Character =>
> return True ;
> when Upper_Greek_Character =>
> return True ;
> when others =>
> return False ;
> end case ;
> end ;
>
>
> function Is_Greek_Character ( GS : Wide_String )
> return Boolean is
>
> begin
> --
> -- Could use:
> --
> --
> for Index in 1 .. GS'Length loop
> --
> -- if index-character of a string is not a Greek character
> --
> if not Is_Greek_Character_2 ( GS ( Index ) ) then
> return False ;
> end if ;
> end loop ;
> --
> -- String contains all Greek characters
> --
> return True ;
> end ;
>
> end Greek ;
>
>
> stz : wide_string ( 1..2 ) ;
>
> use Greek ;
>
> begin
> --
> put ( "Enter (2 character Greek string) => " ) ;
> get ( stz ) ;
> --
> put ( "Testing => " ) ;
> put ( stz ) ;
> new_line ;
> --
> if Is_Greek_Character ( stz ) then
> put_line ( "Greek String ? => Yes" ) ;
> else
> put_line ( "Greek String ? => No" ) ;
> --
> -- Char 1 ?
> --
> if Is_Greek_Character ( stz ( 1 ) ) then
> put_line ( "Character (1) Greek ? => Yes" ) ;
> else
> put_line ( "Character (1) Greek ? => No" ) ;
> end if ;
>
> --
> -- Char 2 ?
> --
> if Is_Greek_Character_2 ( stz ( 2 ) ) then
> put_line ( "Character (2) Greek ? => Yes" ) ;
> else
> put_line ( "Character (1) Greek ? => No" ) ;
> end if ;
> end if ;
> --
> end tst ;
>
>
>
> In <1193051690.350063@athprx04>, Christos Chryssochoidis <C.Chryssochoidis@gmail.com> writes:
>> Jacob Sparre Andersen wrote:
>>> Christos Chryssochoidis wrote:
>>>
>>>> I would like to define a subtype of Wide_Character for a program
>>>> that processes (unicode) text. This type would represent the Greek
>>>> letters.
>>> This sounds like what enumerated types are for. You could do it like
>>> this:
>>>
>>> type Faroese_Letter is ('a', 'A', 'b', 'B', 'd', 'D', 'ð', 'Ð',
>>> 'e', 'E', [...],
>>> 'y', 'Y', 'ý', 'Ý', 'æ', 'Æ', 'ø', 'Ø');
>>> -- optional representation clause
>>>
>>> function To_Wide_Wide_Character (Item : in Faroese_Letter)
>>> return Wide_Wide_Character;
>>>
>>> function To_Faroese_Letter (Item : in Wide_Wide_Character)
>>> return Faroese_Letter;
>>>
>>> The conversion functions could make use of representation clauses,
>>> "Image" and "Value" functions, or tables.
>>>
>>>> Greek letters in Unicode, with all their diacritics, are
>>>> located in two separate ranges: 0370 - 03D7 and 1F00 - 1FFF. That's
>>>> 360 characters to write in an enumeration... Since gaps are not
>>>> allowed in ranges, I 'm thinking instead of defining such a type, to
>>>> define a function that would accept a Wide_Character as argument and
>>>> return a boolean value indicating whether the given Wide_Character
>>>> falls in the ranges of the Greek characters.
>>> This could be done very simply using Ada.Strings.Maps.
>>>
>>> How you should do it depends strongly on what you actually need your
>>> Greek_Letter type for.
>>>
>>> Greetings,
>>>
>>> Jacob
>> Thanks! Ada.Strings.Wide_Maps seems very helpful for what I want to do.
>> Basically, what I would like to do is to write a program that given a
>> text file in utf8 encoding, which would contain ancient greek text,
>> which is written with all the diacritic marks on the letters, this
>> program would load the contents of the file in memory, strip the
>> in-memory text contents from all the diacritics except those used in
>> today's "modern" Greek, and write the modified contents to a new file of
>> the user's choosing. For this it would be nice if there were some
>> package for regular expressions for Ada. Then if I succeeded in the
>> mentioned task, I 'd like to do some natural language processing (NLP,
>> that is linguistics processing) with my program, but I don't know if Ada
>> would be an appropriate language for such a task (NLP). I've seen on the
>> web references to NLP applications with functional languages or logic
>> programming languages, but not many implemented with imperative
>> languages... (Sorry for getting of topic...)
>>
>> Thanks very much,
>> Christos
>
next prev parent reply other threads:[~2007-10-24 12:57 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-10-21 19:15 Range types Christos Chryssochoidis
2007-10-21 20:23 ` Niklas Holsti
2007-10-21 21:28 ` Christos Chryssochoidis
2007-10-22 0:06 ` Robert A Duff
2007-10-22 7:23 ` Jacob Sparre Andersen
2007-10-22 11:14 ` Christos Chryssochoidis
2007-10-22 12:33 ` Georg Bauhaus
2007-10-22 19:08 ` Christos Chryssochoidis
2007-10-23 23:52 ` anon
2007-10-24 12:57 ` Christos Chryssochoidis [this message]
2007-10-21 21:53 ` anon
2007-10-21 22:38 ` Christos Chryssochoidis
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox