home *** CD-ROM | disk | FTP | other *** search
/ Geek Gadgets 1 / ADE-1.bin / ade-dist / gnat-2.06-src.tgz / tar.out / fsf / gnat / ada / csets.adb < prev    next >
Text File  |  1996-09-28  |  34KB  |  1,022 lines

  1. ------------------------------------------------------------------------------
  2. --                                                                          --
  3. --                         GNAT COMPILER COMPONENTS                         --
  4. --                                                                          --
  5. --                                C S E T S                                 --
  6. --                                                                          --
  7. --                                 B o d y                                  --
  8. --                                                                          --
  9. --                            $Revision: 1.19 $                             --
  10. --                                                                          --
  11. --        Copyright (c) 1992,1993,1994,1995 NYU, All Rights Reserved        --
  12. --                                                                          --
  13. -- The GNAT library is free software; you can redistribute it and/or modify --
  14. -- it under terms of the GNU Library General Public License as published by --
  15. -- the Free Software  Foundation; either version 2, or (at your option) any --
  16. -- later version.  The GNAT library is distributed in the hope that it will --
  17. -- be useful, but WITHOUT ANY WARRANTY;  without even  the implied warranty --
  18. -- of MERCHANTABILITY  or  FITNESS FOR  A PARTICULAR PURPOSE.  See the  GNU --
  19. -- Library  General  Public  License for  more  details.  You  should  have --
  20. -- received  a copy of the GNU  Library  General Public License  along with --
  21. -- the GNAT library;  see the file  COPYING.LIB.  If not, write to the Free --
  22. -- Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.        --
  23. --                                                                          --
  24. ------------------------------------------------------------------------------
  25.  
  26. with Opt;   use Opt;
  27. with Types; use Types;
  28.  
  29. with System.WCh_Con; use System.WCh_Con;
  30.  
  31. package body Csets is
  32.  
  33.    X_80 : constant Character := Character'Val (16#80#);
  34.    X_81 : constant Character := Character'Val (16#81#);
  35.    X_82 : constant Character := Character'Val (16#82#);
  36.    X_83 : constant Character := Character'Val (16#83#);
  37.    X_84 : constant Character := Character'Val (16#84#);
  38.    X_85 : constant Character := Character'Val (16#85#);
  39.    X_86 : constant Character := Character'Val (16#86#);
  40.    X_87 : constant Character := Character'Val (16#87#);
  41.    X_88 : constant Character := Character'Val (16#88#);
  42.    X_89 : constant Character := Character'Val (16#89#);
  43.    X_8A : constant Character := Character'Val (16#8A#);
  44.    X_8B : constant Character := Character'Val (16#8B#);
  45.    X_8C : constant Character := Character'Val (16#8C#);
  46.    X_8D : constant Character := Character'Val (16#8D#);
  47.    X_8E : constant Character := Character'Val (16#8E#);
  48.    X_8F : constant Character := Character'Val (16#8F#);
  49.    X_90 : constant Character := Character'Val (16#90#);
  50.    X_91 : constant Character := Character'Val (16#91#);
  51.    X_92 : constant Character := Character'Val (16#92#);
  52.    X_93 : constant Character := Character'Val (16#93#);
  53.    X_94 : constant Character := Character'Val (16#94#);
  54.    X_95 : constant Character := Character'Val (16#95#);
  55.    X_96 : constant Character := Character'Val (16#96#);
  56.    X_97 : constant Character := Character'Val (16#97#);
  57.    X_98 : constant Character := Character'Val (16#98#);
  58.    X_99 : constant Character := Character'Val (16#99#);
  59.    X_9A : constant Character := Character'Val (16#9A#);
  60.    X_9B : constant Character := Character'Val (16#9B#);
  61.    X_9C : constant Character := Character'Val (16#9C#);
  62.    X_9D : constant Character := Character'Val (16#9D#);
  63.    X_9E : constant Character := Character'Val (16#9E#);
  64.    X_9F : constant Character := Character'Val (16#9F#);
  65.    X_A0 : constant Character := Character'Val (16#A0#);
  66.    X_A1 : constant Character := Character'Val (16#A1#);
  67.    X_A2 : constant Character := Character'Val (16#A2#);
  68.    X_A3 : constant Character := Character'Val (16#A3#);
  69.    X_A4 : constant Character := Character'Val (16#A4#);
  70.    X_A5 : constant Character := Character'Val (16#A5#);
  71.    X_A6 : constant Character := Character'Val (16#A6#);
  72.    X_A7 : constant Character := Character'Val (16#A7#);
  73.    X_A8 : constant Character := Character'Val (16#A8#);
  74.    X_A9 : constant Character := Character'Val (16#A9#);
  75.    X_AA : constant Character := Character'Val (16#AA#);
  76.    X_AB : constant Character := Character'Val (16#AB#);
  77.    X_AC : constant Character := Character'Val (16#AC#);
  78.    X_AD : constant Character := Character'Val (16#AD#);
  79.    X_AE : constant Character := Character'Val (16#AE#);
  80.    X_AF : constant Character := Character'Val (16#AF#);
  81.    X_B0 : constant Character := Character'Val (16#B0#);
  82.    X_B1 : constant Character := Character'Val (16#B1#);
  83.    X_B2 : constant Character := Character'Val (16#B2#);
  84.    X_B3 : constant Character := Character'Val (16#B3#);
  85.    X_B4 : constant Character := Character'Val (16#B4#);
  86.    X_B5 : constant Character := Character'Val (16#B5#);
  87.    X_B6 : constant Character := Character'Val (16#B6#);
  88.    X_B7 : constant Character := Character'Val (16#B7#);
  89.    X_B8 : constant Character := Character'Val (16#B8#);
  90.    X_B9 : constant Character := Character'Val (16#B9#);
  91.    X_BA : constant Character := Character'Val (16#BA#);
  92.    X_BB : constant Character := Character'Val (16#BB#);
  93.    X_BC : constant Character := Character'Val (16#BC#);
  94.    X_BD : constant Character := Character'Val (16#BD#);
  95.    X_BE : constant Character := Character'Val (16#BE#);
  96.    X_BF : constant Character := Character'Val (16#BF#);
  97.    X_C0 : constant Character := Character'Val (16#C0#);
  98.    X_C1 : constant Character := Character'Val (16#C1#);
  99.    X_C2 : constant Character := Character'Val (16#C2#);
  100.    X_C3 : constant Character := Character'Val (16#C3#);
  101.    X_C4 : constant Character := Character'Val (16#C4#);
  102.    X_C5 : constant Character := Character'Val (16#C5#);
  103.    X_C6 : constant Character := Character'Val (16#C6#);
  104.    X_C7 : constant Character := Character'Val (16#C7#);
  105.    X_C8 : constant Character := Character'Val (16#C8#);
  106.    X_C9 : constant Character := Character'Val (16#C9#);
  107.    X_CA : constant Character := Character'Val (16#CA#);
  108.    X_CB : constant Character := Character'Val (16#CB#);
  109.    X_CC : constant Character := Character'Val (16#CC#);
  110.    X_CD : constant Character := Character'Val (16#CD#);
  111.    X_CE : constant Character := Character'Val (16#CE#);
  112.    X_CF : constant Character := Character'Val (16#CF#);
  113.    X_D0 : constant Character := Character'Val (16#D0#);
  114.    X_D1 : constant Character := Character'Val (16#D1#);
  115.    X_D2 : constant Character := Character'Val (16#D2#);
  116.    X_D3 : constant Character := Character'Val (16#D3#);
  117.    X_D4 : constant Character := Character'Val (16#D4#);
  118.    X_D5 : constant Character := Character'Val (16#D5#);
  119.    X_D6 : constant Character := Character'Val (16#D6#);
  120.    X_D7 : constant Character := Character'Val (16#D7#);
  121.    X_D8 : constant Character := Character'Val (16#D8#);
  122.    X_D9 : constant Character := Character'Val (16#D9#);
  123.    X_DA : constant Character := Character'Val (16#DA#);
  124.    X_DB : constant Character := Character'Val (16#DB#);
  125.    X_DC : constant Character := Character'Val (16#DC#);
  126.    X_DD : constant Character := Character'Val (16#DD#);
  127.    X_DE : constant Character := Character'Val (16#DE#);
  128.    X_DF : constant Character := Character'Val (16#DF#);
  129.    X_E0 : constant Character := Character'Val (16#E0#);
  130.    X_E1 : constant Character := Character'Val (16#E1#);
  131.    X_E2 : constant Character := Character'Val (16#E2#);
  132.    X_E3 : constant Character := Character'Val (16#E3#);
  133.    X_E4 : constant Character := Character'Val (16#E4#);
  134.    X_E5 : constant Character := Character'Val (16#E5#);
  135.    X_E6 : constant Character := Character'Val (16#E6#);
  136.    X_E7 : constant Character := Character'Val (16#E7#);
  137.    X_E8 : constant Character := Character'Val (16#E8#);
  138.    X_E9 : constant Character := Character'Val (16#E9#);
  139.    X_EA : constant Character := Character'Val (16#EA#);
  140.    X_EB : constant Character := Character'Val (16#EB#);
  141.    X_EC : constant Character := Character'Val (16#EC#);
  142.    X_ED : constant Character := Character'Val (16#ED#);
  143.    X_EE : constant Character := Character'Val (16#EE#);
  144.    X_EF : constant Character := Character'Val (16#EF#);
  145.    X_F0 : constant Character := Character'Val (16#F0#);
  146.    X_F1 : constant Character := Character'Val (16#F1#);
  147.    X_F2 : constant Character := Character'Val (16#F2#);
  148.    X_F3 : constant Character := Character'Val (16#F3#);
  149.    X_F4 : constant Character := Character'Val (16#F4#);
  150.    X_F5 : constant Character := Character'Val (16#F5#);
  151.    X_F6 : constant Character := Character'Val (16#F6#);
  152.    X_F7 : constant Character := Character'Val (16#F7#);
  153.    X_F8 : constant Character := Character'Val (16#F8#);
  154.    X_F9 : constant Character := Character'Val (16#F9#);
  155.    X_FA : constant Character := Character'Val (16#FA#);
  156.    X_FB : constant Character := Character'Val (16#FB#);
  157.    X_FC : constant Character := Character'Val (16#FC#);
  158.    X_FD : constant Character := Character'Val (16#FD#);
  159.    X_FE : constant Character := Character'Val (16#FE#);
  160.    X_FF : constant Character := Character'Val (16#FF#);
  161.  
  162.    -----------------------------
  163.    -- Definitions for Latin-1 --
  164.    -----------------------------
  165.  
  166.    Fold_Latin_1 : Translate_Table := Translate_Table'(
  167.  
  168.       'a' => 'A',  X_E0 => X_C0,  X_F0 => X_D0,
  169.       'b' => 'B',  X_E1 => X_C1,  X_F1 => X_D1,
  170.       'c' => 'C',  X_E2 => X_C2,  X_F2 => X_D2,
  171.       'd' => 'D',  X_E3 => X_C3,  X_F3 => X_D3,
  172.       'e' => 'E',  X_E4 => X_C4,  X_F4 => X_D4,
  173.       'f' => 'F',  X_E5 => X_C5,  X_F5 => X_D5,
  174.       'g' => 'G',  X_E6 => X_C6,  X_F6 => X_D6,
  175.       'h' => 'H',  X_E7 => X_C7,
  176.       'i' => 'I',  X_E8 => X_C8,  X_F8 => X_D8,
  177.       'j' => 'J',  X_E9 => X_C9,  X_F9 => X_D9,
  178.       'k' => 'K',  X_EA => X_CA,  X_FA => X_DA,
  179.       'l' => 'L',  X_EB => X_CB,  X_FB => X_DB,
  180.       'm' => 'M',  X_EC => X_CC,  X_FC => X_DC,
  181.       'n' => 'N',  X_ED => X_CD,  X_FD => X_DD,
  182.       'o' => 'O',  X_EE => X_CE,  X_FE => X_DE,
  183.       'p' => 'P',  X_EF => X_CF,
  184.       'q' => 'Q',
  185.       'r' => 'R',
  186.       's' => 'S',
  187.       't' => 'T',
  188.       'u' => 'U',
  189.       'v' => 'V',
  190.       'w' => 'W',
  191.       'x' => 'X',
  192.       'y' => 'Y',
  193.       'z' => 'Z',
  194.  
  195.       'A' => 'A',  X_C0 => X_C0,  X_D0 => X_D0,
  196.       'B' => 'B',  X_C1 => X_C1,  X_D1 => X_D1,
  197.       'C' => 'C',  X_C2 => X_C2,  X_D2 => X_D2,
  198.       'D' => 'D',  X_C3 => X_C3,  X_D3 => X_D3,
  199.       'E' => 'E',  X_C4 => X_C4,  X_D4 => X_D4,
  200.       'F' => 'F',  X_C5 => X_C5,  X_D5 => X_D5,
  201.       'G' => 'G',  X_C6 => X_C6,  X_D6 => X_D6,
  202.       'H' => 'H',  X_C7 => X_C7,
  203.       'I' => 'I',  X_C8 => X_C8,  X_D8 => X_D8,
  204.       'J' => 'J',  X_C9 => X_C9,  X_D9 => X_D9,
  205.       'K' => 'K',  X_CA => X_CA,  X_DA => X_DA,
  206.       'L' => 'L',  X_CB => X_CB,  X_DB => X_DB,
  207.       'M' => 'M',  X_CC => X_CC,  X_DC => X_DC,
  208.       'N' => 'N',  X_CD => X_CD,  X_DD => X_DD,
  209.       'O' => 'O',  X_CE => X_CE,  X_DE => X_DE,
  210.       'P' => 'P',  X_CF => X_CF,  X_DF => X_DF,  X_FF => X_FF,
  211.       'Q' => 'Q',
  212.       'R' => 'R',
  213.       'S' => 'S',
  214.       'T' => 'T',
  215.       'U' => 'U',
  216.       'V' => 'V',
  217.       'W' => 'W',
  218.       'X' => 'X',
  219.       'Y' => 'Y',
  220.       'Z' => 'Z',
  221.  
  222.       '0' => '0',
  223.       '1' => '1',
  224.       '2' => '2',
  225.       '3' => '3',
  226.       '4' => '4',
  227.       '5' => '5',
  228.       '6' => '6',
  229.       '7' => '7',
  230.       '8' => '8',
  231.       '9' => '9',
  232.  
  233.       '_' => '_',
  234.  
  235.       others => ' ');
  236.  
  237.    -----------------------------
  238.    -- Definitions for Latin-2 --
  239.    -----------------------------
  240.  
  241.    Fold_Latin_2 : Translate_Table := Translate_Table'(
  242.  
  243.       'a' => 'A',  X_E0 => X_C0,  X_F0 => X_D0,
  244.       'b' => 'B',  X_E1 => X_C1,  X_F1 => X_D1,  X_B1 => X_A1,
  245.       'c' => 'C',  X_E2 => X_C2,  X_F2 => X_D2,
  246.       'd' => 'D',  X_E3 => X_C3,  X_F3 => X_D3,  X_B3 => X_A3,
  247.       'e' => 'E',  X_E4 => X_C4,  X_F4 => X_D4,
  248.       'f' => 'F',  X_E5 => X_C5,  X_F5 => X_D5,  X_B5 => X_A5,
  249.       'g' => 'G',  X_E6 => X_C6,  X_F6 => X_D6,  X_B6 => X_A6,
  250.       'h' => 'H',  X_E7 => X_C7,
  251.       'i' => 'I',  X_E8 => X_C8,  X_F8 => X_D8,
  252.       'j' => 'J',  X_E9 => X_C9,  X_F9 => X_D9,  X_B9 => X_A9,
  253.       'k' => 'K',  X_EA => X_CA,  X_FA => X_DA,  X_BA => X_AA,
  254.       'l' => 'L',  X_EB => X_CB,  X_FB => X_DB,  X_BB => X_AB,
  255.       'm' => 'M',  X_EC => X_CC,  X_FC => X_DC,  X_BC => X_AC,
  256.       'n' => 'N',  X_ED => X_CD,  X_FD => X_DD,
  257.       'o' => 'O',  X_EE => X_CE,  X_FE => X_DE,  X_BE => X_AE,
  258.       'p' => 'P',  X_EF => X_CF,  X_FF => X_DF,  X_BF => X_AF,
  259.       'q' => 'Q',
  260.       'r' => 'R',
  261.       's' => 'S',
  262.       't' => 'T',
  263.       'u' => 'U',
  264.       'v' => 'V',
  265.       'w' => 'W',
  266.       'x' => 'X',
  267.       'y' => 'Y',
  268.       'z' => 'Z',
  269.  
  270.       'A' => 'A',  X_C0 => X_C0,  X_D0 => X_D0,
  271.       'B' => 'B',  X_C1 => X_C1,  X_D1 => X_D1,  X_A1 => X_A1,
  272.       'C' => 'C',  X_C2 => X_C2,  X_D2 => X_D2,
  273.       'D' => 'D',  X_C3 => X_C3,  X_D3 => X_D3,  X_A3 => X_A3,
  274.       'E' => 'E',  X_C4 => X_C4,  X_D4 => X_D4,
  275.       'F' => 'F',  X_C5 => X_C5,  X_D5 => X_D5,  X_A5 => X_A5,
  276.       'G' => 'G',  X_C6 => X_C6,  X_D6 => X_D6,  X_A6 => X_A6,
  277.       'H' => 'H',  X_C7 => X_C7,
  278.       'I' => 'I',  X_C8 => X_C8,  X_D8 => X_D8,
  279.       'J' => 'J',  X_C9 => X_C9,  X_D9 => X_D9,  X_A9 => X_A9,
  280.       'K' => 'K',  X_CA => X_CA,  X_DA => X_DA,  X_AA => X_AA,
  281.       'L' => 'L',  X_CB => X_CB,  X_DB => X_DB,  X_AB => X_AB,
  282.       'M' => 'M',  X_CC => X_CC,  X_DC => X_DC,  X_AC => X_AC,
  283.       'N' => 'N',  X_CD => X_CD,  X_DD => X_DD,
  284.       'O' => 'O',  X_CE => X_CE,  X_DE => X_DE,  X_AE => X_AE,
  285.       'P' => 'P',  X_CF => X_CF,  X_DF => X_DF,  X_AF => X_AF,
  286.       'Q' => 'Q',
  287.       'R' => 'R',
  288.       'S' => 'S',
  289.       'T' => 'T',
  290.       'U' => 'U',
  291.       'V' => 'V',
  292.       'W' => 'W',
  293.       'X' => 'X',
  294.       'Y' => 'Y',
  295.       'Z' => 'Z',
  296.  
  297.       '0' => '0',
  298.       '1' => '1',
  299.       '2' => '2',
  300.       '3' => '3',
  301.       '4' => '4',
  302.       '5' => '5',
  303.       '6' => '6',
  304.       '7' => '7',
  305.       '8' => '8',
  306.       '9' => '9',
  307.  
  308.       '_' => '_',
  309.  
  310.       others => ' ');
  311.  
  312.    -----------------------------
  313.    -- Definitions for Latin-3 --
  314.    -----------------------------
  315.  
  316.    Fold_Latin_3 : Translate_Table := Translate_Table'(
  317.  
  318.       'a' => 'A',  X_E0 => X_C0,
  319.       'b' => 'B',  X_E1 => X_C1,  X_F1 => X_D1,  X_B1 => X_A1,
  320.       'c' => 'C',  X_E2 => X_C2,  X_F2 => X_D2,
  321.       'd' => 'D',                 X_F3 => X_D3,
  322.       'e' => 'E',  X_E4 => X_C4,  X_F4 => X_D4,
  323.       'f' => 'F',  X_E5 => X_C5,  X_F5 => X_D5,  X_B5 => X_A5,
  324.       'g' => 'G',  X_E6 => X_C6,  X_F6 => X_D6,  X_B6 => X_A6,
  325.       'h' => 'H',  X_E7 => X_C7,
  326.       'i' => 'I',  X_E8 => X_C8,  X_F8 => X_D8,
  327.       'j' => 'J',  X_E9 => X_C9,  X_F9 => X_D9,  X_B9 => X_A9,
  328.       'k' => 'K',  X_EA => X_CA,  X_FA => X_DA,  X_BA => X_AA,
  329.       'l' => 'L',  X_EB => X_CB,  X_FB => X_DB,  X_BB => X_AB,
  330.       'm' => 'M',  X_EC => X_CC,  X_FC => X_DC,  X_BC => X_AC,
  331.       'n' => 'N',  X_ED => X_CD,  X_FD => X_DD,
  332.       'o' => 'O',  X_EE => X_CE,  X_FE => X_DE,
  333.       'p' => 'P',  X_EF => X_CF,                 X_BF => X_AF,
  334.       'q' => 'Q',
  335.       'r' => 'R',
  336.       's' => 'S',
  337.       't' => 'T',
  338.       'u' => 'U',
  339.       'v' => 'V',
  340.       'w' => 'W',
  341.       'x' => 'X',
  342.       'y' => 'Y',
  343.       'z' => 'Z',
  344.  
  345.       'A' => 'A',  X_C0 => X_C0,
  346.       'B' => 'B',  X_C1 => X_C1,  X_D1 => X_D1,  X_A1 => X_A1,
  347.       'C' => 'C',  X_C2 => X_C2,  X_D2 => X_D2,
  348.       'D' => 'D',                 X_D3 => X_D3,
  349.       'E' => 'E',  X_C4 => X_C4,  X_D4 => X_D4,
  350.       'F' => 'F',  X_C5 => X_C5,  X_D5 => X_D5,  X_A5 => X_A5,
  351.       'G' => 'G',  X_C6 => X_C6,  X_D6 => X_D6,  X_A6 => X_A6,
  352.       'H' => 'H',  X_C7 => X_C7,
  353.       'I' => 'I',  X_C8 => X_C8,  X_D8 => X_D8,
  354.       'J' => 'J',  X_C9 => X_C9,  X_D9 => X_D9,  X_A9 => X_A9,
  355.       'K' => 'K',  X_CA => X_CA,  X_DA => X_DA,  X_AA => X_AA,
  356.       'L' => 'L',  X_CB => X_CB,  X_DB => X_DB,  X_AB => X_AB,
  357.       'M' => 'M',  X_CC => X_CC,  X_DC => X_DC,  X_AC => X_AC,
  358.       'N' => 'N',  X_CD => X_CD,  X_DD => X_DD,
  359.       'O' => 'O',  X_CE => X_CE,  X_DE => X_DE,
  360.       'P' => 'P',  X_CF => X_CF,                 X_AF => X_AF,
  361.       'Q' => 'Q',
  362.       'R' => 'R',
  363.       'S' => 'S',
  364.       'T' => 'T',
  365.       'U' => 'U',
  366.       'V' => 'V',
  367.       'W' => 'W',
  368.       'X' => 'X',
  369.       'Y' => 'Y',
  370.       'Z' => 'Z',
  371.  
  372.       '0' => '0',
  373.       '1' => '1',
  374.       '2' => '2',
  375.       '3' => '3',
  376.       '4' => '4',
  377.       '5' => '5',
  378.       '6' => '6',
  379.       '7' => '7',
  380.       '8' => '8',
  381.       '9' => '9',
  382.  
  383.       '_' => '_',
  384.  
  385.       others => ' ');
  386.  
  387.    -----------------------------
  388.    -- Definitions for Latin-4 --
  389.    -----------------------------
  390.  
  391.    Fold_Latin_4 : Translate_Table := Translate_Table'(
  392.  
  393.       'a' => 'A',  X_E0 => X_C0,  X_F0 => X_D0,
  394.       'b' => 'B',  X_E1 => X_C1,  X_F1 => X_D1,  X_B1 => X_A1,
  395.       'c' => 'C',  X_E2 => X_C2,  X_F2 => X_D2,
  396.       'd' => 'D',  X_E3 => X_C3,  X_F3 => X_D3,  X_B3 => X_A3,
  397.       'e' => 'E',  X_E4 => X_C4,  X_F4 => X_D4,
  398.       'f' => 'F',  X_E5 => X_C5,  X_F5 => X_D5,  X_B5 => X_A5,
  399.       'g' => 'G',  X_E6 => X_C6,  X_F6 => X_D6,  X_B6 => X_A6,
  400.       'h' => 'H',  X_E7 => X_C7,
  401.       'i' => 'I',  X_E8 => X_C8,  X_F8 => X_D8,
  402.       'j' => 'J',  X_E9 => X_C9,  X_F9 => X_D9,  X_B9 => X_A9,
  403.       'k' => 'K',  X_EA => X_CA,  X_FA => X_DA,  X_BA => X_AA,
  404.       'l' => 'L',  X_EB => X_CB,  X_FB => X_DB,  X_BB => X_AB,
  405.       'm' => 'M',  X_EC => X_CC,  X_FC => X_DC,  X_BC => X_AC,
  406.       'n' => 'N',  X_ED => X_CD,  X_FD => X_DD,
  407.       'o' => 'O',  X_EE => X_CE,  X_FE => X_DE,  X_BE => X_AE,
  408.       'p' => 'P',  X_EF => X_CF,
  409.       'q' => 'Q',
  410.       'r' => 'R',
  411.       's' => 'S',
  412.       't' => 'T',
  413.       'u' => 'U',
  414.       'v' => 'V',
  415.       'w' => 'W',
  416.       'x' => 'X',
  417.       'y' => 'Y',
  418.       'z' => 'Z',
  419.  
  420.       'A' => 'A',  X_C0 => X_C0,  X_D0 => X_D0,
  421.       'B' => 'B',  X_C1 => X_C1,  X_D1 => X_D1,  X_A1 => X_A1,
  422.       'C' => 'C',  X_C2 => X_C2,  X_D2 => X_D2,
  423.       'D' => 'D',  X_C3 => X_C3,  X_D3 => X_D3,  X_A3 => X_A3,
  424.       'E' => 'E',  X_C4 => X_C4,  X_D4 => X_D4,
  425.       'F' => 'F',  X_C5 => X_C5,  X_D5 => X_D5,  X_A5 => X_A5,
  426.       'G' => 'G',  X_C6 => X_C6,  X_D6 => X_D6,  X_A6 => X_A6,
  427.       'H' => 'H',  X_C7 => X_C7,
  428.       'I' => 'I',  X_C8 => X_C8,  X_D8 => X_D8,
  429.       'J' => 'J',  X_C9 => X_C9,  X_D9 => X_D9,  X_A9 => X_A9,
  430.       'K' => 'K',  X_CA => X_CA,  X_DA => X_DA,  X_AA => X_AA,
  431.       'L' => 'L',  X_CB => X_CB,  X_DB => X_DB,  X_AB => X_AB,
  432.       'M' => 'M',  X_CC => X_CC,  X_DC => X_DC,  X_AC => X_AC,
  433.       'N' => 'N',  X_CD => X_CD,  X_DD => X_DD,
  434.       'O' => 'O',  X_CE => X_CE,  X_DE => X_DE,  X_AE => X_AE,
  435.       'P' => 'P',  X_CF => X_CF,
  436.       'Q' => 'Q',
  437.       'R' => 'R',
  438.       'S' => 'S',
  439.       'T' => 'T',
  440.       'U' => 'U',
  441.       'V' => 'V',
  442.       'W' => 'W',
  443.       'X' => 'X',
  444.       'Y' => 'Y',
  445.       'Z' => 'Z',
  446.  
  447.       '0' => '0',
  448.       '1' => '1',
  449.       '2' => '2',
  450.       '3' => '3',
  451.       '4' => '4',
  452.       '5' => '5',
  453.       '6' => '6',
  454.       '7' => '7',
  455.       '8' => '8',
  456.       '9' => '9',
  457.  
  458.       '_' => '_',
  459.  
  460.       others => ' ');
  461.  
  462.    --------------------------------------------
  463.    -- Definitions for IBM PC (Code Page 437) --
  464.    --------------------------------------------
  465.  
  466.    --  Note: Code page 437 is the typical default in DOS, Windows and OS/2
  467.    --  for PC's in the US, it corresponds to the original PC character set.
  468.    --  See also the definitions for code page 850.
  469.  
  470.    Fold_IBM_PC_437 : Translate_Table := Translate_Table'(
  471.  
  472.       'a' => 'A',
  473.       'b' => 'B',
  474.       'c' => 'C',
  475.       'd' => 'D',
  476.       'e' => 'E',
  477.       'f' => 'F',
  478.       'g' => 'G',
  479.       'h' => 'H',
  480.       'i' => 'I',
  481.       'j' => 'J',
  482.       'k' => 'K',
  483.       'l' => 'L',
  484.       'm' => 'M',
  485.       'n' => 'N',
  486.       'o' => 'O',
  487.       'p' => 'P',
  488.       'q' => 'Q',
  489.       'r' => 'R',
  490.       's' => 'S',
  491.       't' => 'T',
  492.       'u' => 'U',
  493.       'v' => 'V',
  494.       'w' => 'W',
  495.       'x' => 'X',
  496.       'y' => 'Y',
  497.       'z' => 'Z',
  498.  
  499.       'A' => 'A',
  500.       'B' => 'B',
  501.       'C' => 'C',
  502.       'D' => 'D',
  503.       'E' => 'E',
  504.       'F' => 'F',
  505.       'G' => 'G',
  506.       'H' => 'H',
  507.       'I' => 'I',
  508.       'J' => 'J',
  509.       'K' => 'K',
  510.       'L' => 'L',
  511.       'M' => 'M',
  512.       'N' => 'N',
  513.       'O' => 'O',
  514.       'P' => 'P',
  515.       'Q' => 'Q',
  516.       'R' => 'R',
  517.       'S' => 'S',
  518.       'T' => 'T',
  519.       'U' => 'U',
  520.       'V' => 'V',
  521.       'W' => 'W',
  522.       'X' => 'X',
  523.       'Y' => 'Y',
  524.       'Z' => 'Z',
  525.  
  526.       X_80 => X_80,  -- C cedilla
  527.       X_81 => X_9A,  -- u umlaut
  528.       X_82 => X_90,  -- e acute
  529.       X_83 => X_83,  -- a circumflex
  530.       X_84 => X_8E,  -- a umlaut
  531.       X_85 => X_85,  -- a grave
  532.       X_86 => X_8F,  -- a ring
  533.       X_87 => X_80,  -- c cedilla
  534.       X_88 => X_88,  -- e circumflex
  535.       X_89 => X_89,  -- e umlaut
  536.       X_8A => X_8A,  -- e grave
  537.       X_8B => X_8B,  -- i umlaut
  538.       X_8C => X_8C,  -- i circumflex
  539.       X_8D => X_8D,  -- i grave
  540.       X_8E => X_8E,  -- A umlaut
  541.       X_8F => X_8F,  -- A ring
  542.  
  543.       X_90 => X_90,  -- E acute
  544.       X_91 => X_92,  -- ae
  545.       X_92 => X_92,  -- AE
  546.       X_93 => X_93,  -- o circumflex
  547.       X_94 => X_99,  -- o umlaut
  548.       X_95 => X_95,  -- o grave
  549.       X_96 => X_96,  -- u circumflex
  550.       X_97 => X_97,  -- u grave
  551.       X_98 => X_98,  -- y umlaut
  552.       X_99 => X_99,  -- O umlaut
  553.       X_9A => X_9A,  -- U umlaut
  554.  
  555.       X_A0 => X_A0,  -- a acute
  556.       X_A1 => X_A1,  -- i acute
  557.       X_A2 => X_A2,  -- o acute
  558.       X_A3 => X_A3,  -- u acute
  559.       X_A4 => X_A5,  -- n tilde
  560.       X_A5 => X_A5,  -- N tilde
  561.       X_A6 => X_A6,  -- a underline
  562.       X_A7 => X_A7,  -- o underline
  563.  
  564.       X_E0 => X_E0,  -- lower case alpha
  565.       X_E1 => X_E1,  -- lower case beta
  566.       X_E2 => X_E2,  -- upper case gamma
  567.       X_E3 => X_E3,  -- lower case pi
  568.       X_E4 => X_E4,  -- upper case sigma (lower/upper sigma not equivalent)
  569.       X_E5 => X_E5,  -- lower case sigma (lower/upper sigma not equivalent)
  570.       X_E6 => X_E6,  -- lower case mu
  571.       X_E7 => X_E7,  -- lower case tau
  572.       X_E8 => X_E8,  -- upper case phi   (lower/upper phi not equivalent)
  573.       X_E9 => X_E9,  -- lower case theta
  574.       X_EA => X_EA,  -- upper case omega
  575.       X_EB => X_EB,  -- lower case delta
  576.       X_ED => X_ED,  -- lower case phi   (lower/upper phi not equivalent)
  577.       X_EE => X_EE,  -- lower case epsilon
  578.  
  579.       X_FC => X_FC,  -- lower case eta
  580.  
  581.       '0' => '0',
  582.       '1' => '1',
  583.       '2' => '2',
  584.       '3' => '3',
  585.       '4' => '4',
  586.       '5' => '5',
  587.       '6' => '6',
  588.       '7' => '7',
  589.       '8' => '8',
  590.       '9' => '9',
  591.  
  592.       '_' => '_',
  593.  
  594.       others => ' ');
  595.  
  596.    --------------------------------------------
  597.    -- Definitions for IBM PC (Code Page 850) --
  598.    --------------------------------------------
  599.  
  600.    --  Note: Code page 850 is the typical default in DOS, Windows and OS/2
  601.    --  for PC's in Europe, it is an extension of the original PC character
  602.    --  set to include the additional characters defined in ISO Latin-1.
  603.    --  See also the definitions for code page 437.
  604.  
  605.    Fold_IBM_PC_850 : Translate_Table := Translate_Table'(
  606.  
  607.       'a' => 'A',
  608.       'b' => 'B',
  609.       'c' => 'C',
  610.       'd' => 'D',
  611.       'e' => 'E',
  612.       'f' => 'F',
  613.       'g' => 'G',
  614.       'h' => 'H',
  615.       'i' => 'I',
  616.       'j' => 'J',
  617.       'k' => 'K',
  618.       'l' => 'L',
  619.       'm' => 'M',
  620.       'n' => 'N',
  621.       'o' => 'O',
  622.       'p' => 'P',
  623.       'q' => 'Q',
  624.       'r' => 'R',
  625.       's' => 'S',
  626.       't' => 'T',
  627.       'u' => 'U',
  628.       'v' => 'V',
  629.       'w' => 'W',
  630.       'x' => 'X',
  631.       'y' => 'Y',
  632.       'z' => 'Z',
  633.  
  634.       'A' => 'A',
  635.       'B' => 'B',
  636.       'C' => 'C',
  637.       'D' => 'D',
  638.       'E' => 'E',
  639.       'F' => 'F',
  640.       'G' => 'G',
  641.       'H' => 'H',
  642.       'I' => 'I',
  643.       'J' => 'J',
  644.       'K' => 'K',
  645.       'L' => 'L',
  646.       'M' => 'M',
  647.       'N' => 'N',
  648.       'O' => 'O',
  649.       'P' => 'P',
  650.       'Q' => 'Q',
  651.       'R' => 'R',
  652.       'S' => 'S',
  653.       'T' => 'T',
  654.       'U' => 'U',
  655.       'V' => 'V',
  656.       'W' => 'W',
  657.       'X' => 'X',
  658.       'Y' => 'Y',
  659.       'Z' => 'Z',
  660.  
  661.       X_80 => X_80,  -- C cedilla
  662.       X_81 => X_9A,  -- u umlaut
  663.       X_82 => X_90,  -- e acute
  664.       X_83 => X_B6,  -- a circumflex
  665.       X_84 => X_8E,  -- a umlaut
  666.       X_85 => X_B7,  -- a grave
  667.       X_86 => X_8F,  -- a ring
  668.       X_87 => X_80,  -- c cedilla
  669.       X_88 => X_D2,  -- e circumflex
  670.       X_89 => X_D3,  -- e umlaut
  671.       X_8A => X_D4,  -- e grave
  672.       X_8B => X_D8,  -- i umlaut
  673.       X_8C => X_D7,  -- i circumflex
  674.       X_8D => X_DE,  -- i grave
  675.       X_8E => X_8E,  -- A umlaut
  676.       X_8F => X_8F,  -- A ring
  677.  
  678.       X_90 => X_90,  -- E acute
  679.       X_91 => X_92,  -- ae
  680.       X_92 => X_92,  -- AE
  681.       X_93 => X_E2,  -- o circumflex
  682.       X_94 => X_99,  -- o umlaut
  683.       X_95 => X_E3,  -- o grave
  684.       X_96 => X_EA,  -- u circumflex
  685.       X_97 => X_EB,  -- u grave
  686.       X_98 => X_98,  -- y umlaut
  687.       X_99 => X_99,  -- O umlaut
  688.       X_9A => X_9A,  -- U umlaut
  689.  
  690.       X_A0 => X_B5,  -- a acute
  691.       X_A1 => X_D6,  -- i acute
  692.       X_A2 => X_E0,  -- o acute
  693.       X_A3 => X_E9,  -- u acute
  694.       X_A4 => X_A5,  -- n tilde
  695.       X_A5 => X_A5,  -- N tilde
  696.       X_A6 => X_A6,  -- a underline
  697.       X_A7 => X_A7,  -- o underline
  698.  
  699.       X_B5 => X_B5,  -- A acute
  700.       X_B6 => X_B6,  -- A circumflex
  701.       X_B7 => X_B7,  -- A grave
  702.  
  703.       X_C6 => X_C7,  -- a tilde
  704.       X_C7 => X_C7,  -- A tilde
  705.  
  706.       X_D0 => X_D1,  -- eth
  707.       X_D1 => X_D1,  -- Eth
  708.       X_D2 => X_D2,  -- E circumflex
  709.       X_D3 => X_D3,  -- E umlaut
  710.       X_D4 => X_D4,  -- E grave
  711.       X_D5 => X_D5,  -- dotless i, no uppercase
  712.       X_D6 => X_D6,  -- I acute
  713.       X_D7 => X_D7,  -- I circumflex
  714.       X_D8 => X_D8,  -- I umlaut
  715.       X_DE => X_DE,  -- I grave
  716.  
  717.       X_E0 => X_E0,  -- O acute
  718.       X_E1 => X_E1,  -- german dbl s, no uppercase
  719.       X_E2 => X_E2,  -- O circumflex
  720.       X_E3 => X_E3,  -- O grave
  721.       X_E4 => X_E4,  -- o tilde
  722.       X_E5 => X_E5,  -- O tilde
  723.       X_E7 => X_E8,  -- thorn
  724.       X_E8 => X_E8,  -- Thorn
  725.       X_E9 => X_E9,  -- U acute
  726.       X_EA => X_EA,  -- U circumflex
  727.       X_EB => X_EB,  -- U grave
  728.       X_EC => X_ED,  -- y acute
  729.       X_ED => X_ED,  -- Y acute
  730.  
  731.       '0' => '0',
  732.       '1' => '1',
  733.       '2' => '2',
  734.       '3' => '3',
  735.       '4' => '4',
  736.       '5' => '5',
  737.       '6' => '6',
  738.       '7' => '7',
  739.       '8' => '8',
  740.       '9' => '9',
  741.  
  742.       '_' => '_',
  743.  
  744.       others => ' ');
  745.  
  746.    -----------------------------------------
  747.    -- Definitions for Full Upper Half Set --
  748.    -----------------------------------------
  749.  
  750.    --  The full upper half set allows all upper half characters as letters,
  751.    --  and does not recognize any upper/lower case equivalences in this half.
  752.  
  753.    Fold_Full_Upper_Half : Translate_Table := Translate_Table'(
  754.  
  755.       'a' => 'A',
  756.       'b' => 'B',
  757.       'c' => 'C',
  758.       'd' => 'D',
  759.       'e' => 'E',
  760.       'f' => 'F',
  761.       'g' => 'G',
  762.       'h' => 'H',
  763.       'i' => 'I',
  764.       'j' => 'J',
  765.       'k' => 'K',
  766.       'l' => 'L',
  767.       'm' => 'M',
  768.       'n' => 'N',
  769.       'o' => 'O',
  770.       'p' => 'P',
  771.       'q' => 'Q',
  772.       'r' => 'R',
  773.       's' => 'S',
  774.       't' => 'T',
  775.       'u' => 'U',
  776.       'v' => 'V',
  777.       'w' => 'W',
  778.       'x' => 'X',
  779.       'y' => 'Y',
  780.       'z' => 'Z',
  781.  
  782.       'A' => 'A',
  783.       'B' => 'B',
  784.       'C' => 'C',
  785.       'D' => 'D',
  786.       'E' => 'E',
  787.       'F' => 'F',
  788.       'G' => 'G',
  789.       'H' => 'H',
  790.       'I' => 'I',
  791.       'J' => 'J',
  792.       'K' => 'K',
  793.       'L' => 'L',
  794.       'M' => 'M',
  795.       'N' => 'N',
  796.       'O' => 'O',
  797.       'P' => 'P',
  798.       'Q' => 'Q',
  799.       'R' => 'R',
  800.       'S' => 'S',
  801.       'T' => 'T',
  802.       'U' => 'U',
  803.       'V' => 'V',
  804.       'W' => 'W',
  805.       'X' => 'X',
  806.       'Y' => 'Y',
  807.       'Z' => 'Z',
  808.  
  809.       X_80 => X_80,  X_90 => X_90,  X_A0 => X_A0,  X_B0 => X_B0,
  810.       X_81 => X_81,  X_91 => X_91,  X_A1 => X_A1,  X_B1 => X_B1,
  811.       X_82 => X_82,  X_92 => X_92,  X_A2 => X_A2,  X_B2 => X_B2,
  812.       X_83 => X_83,  X_93 => X_93,  X_A3 => X_A3,  X_B3 => X_B3,
  813.       X_84 => X_84,  X_94 => X_94,  X_A4 => X_A4,  X_B4 => X_B4,
  814.       X_85 => X_85,  X_95 => X_95,  X_A5 => X_A5,  X_B5 => X_B5,
  815.       X_86 => X_86,  X_96 => X_96,  X_A6 => X_A6,  X_B6 => X_B6,
  816.       X_87 => X_87,  X_97 => X_97,  X_A7 => X_A7,  X_B7 => X_B7,
  817.       X_88 => X_88,  X_98 => X_98,  X_A8 => X_A8,  X_B8 => X_B8,
  818.       X_89 => X_89,  X_99 => X_99,  X_A9 => X_A9,  X_B9 => X_B9,
  819.       X_8A => X_8A,  X_9A => X_9A,  X_AA => X_AA,  X_BA => X_BA,
  820.       X_8B => X_8B,  X_9B => X_9B,  X_AB => X_AB,  X_BB => X_BB,
  821.       X_8C => X_8C,  X_9C => X_9C,  X_AC => X_AC,  X_BC => X_BC,
  822.       X_8D => X_8D,  X_9D => X_9D,  X_AD => X_AD,  X_BD => X_BD,
  823.       X_8E => X_8E,  X_9E => X_9E,  X_AE => X_AE,  X_BE => X_BE,
  824.       X_8F => X_8F,  X_9F => X_9F,  X_AF => X_AF,  X_BF => X_BF,
  825.  
  826.       X_C0 => X_C0,  X_D0 => X_D0,  X_E0 => X_E0,  X_F0 => X_F0,
  827.       X_C1 => X_C1,  X_D1 => X_D1,  X_E1 => X_E1,  X_F1 => X_F1,
  828.       X_C2 => X_C2,  X_D2 => X_D2,  X_E2 => X_E2,  X_F2 => X_F2,
  829.       X_C3 => X_C3,  X_D3 => X_D3,  X_E3 => X_E3,  X_F3 => X_F3,
  830.       X_C4 => X_C4,  X_D4 => X_D4,  X_E4 => X_E4,  X_F4 => X_F4,
  831.       X_C5 => X_C5,  X_D5 => X_D5,  X_E5 => X_E5,  X_F5 => X_F5,
  832.       X_C6 => X_C6,  X_D6 => X_D6,  X_E6 => X_E6,  X_F6 => X_F6,
  833.       X_C7 => X_C7,  X_D7 => X_D7,  X_E7 => X_E7,  X_F7 => X_F7,
  834.       X_C8 => X_C8,  X_D8 => X_D8,  X_E8 => X_E8,  X_F8 => X_F8,
  835.       X_C9 => X_C9,  X_D9 => X_D9,  X_E9 => X_E9,  X_F9 => X_F9,
  836.       X_CA => X_CA,  X_DA => X_DA,  X_EA => X_EA,  X_FA => X_FA,
  837.       X_CB => X_CB,  X_DB => X_DB,  X_EB => X_EB,  X_FB => X_FB,
  838.       X_CC => X_CC,  X_DC => X_DC,  X_EC => X_EC,  X_FC => X_FC,
  839.       X_CD => X_CD,  X_DD => X_DD,  X_ED => X_ED,  X_FD => X_FD,
  840.       X_CE => X_CE,  X_DE => X_DE,  X_EE => X_EE,  X_FE => X_FE,
  841.       X_CF => X_CF,  X_DF => X_DF,  X_EF => X_EF,  X_FF => X_FF,
  842.  
  843.       '0' => '0',
  844.       '1' => '1',
  845.       '2' => '2',
  846.       '3' => '3',
  847.       '4' => '4',
  848.       '5' => '5',
  849.       '6' => '6',
  850.       '7' => '7',
  851.       '8' => '8',
  852.       '9' => '9',
  853.  
  854.       '_' => '_',
  855.  
  856.       others => ' ');
  857.  
  858.    ---------------------------------------
  859.    -- Definitions for No Upper Half Set --
  860.    ---------------------------------------
  861.  
  862.    --  The no upper half set allows no upper half characters as letters, and
  863.    --  thus there are no upper/lower case equivalences in this half. This set
  864.    --  corresponds to the Ada 83 rules.
  865.  
  866.    Fold_No_Upper_Half : Translate_Table := Translate_Table'(
  867.  
  868.       'a' => 'A',
  869.       'b' => 'B',
  870.       'c' => 'C',
  871.       'd' => 'D',
  872.       'e' => 'E',
  873.       'f' => 'F',
  874.       'g' => 'G',
  875.       'h' => 'H',
  876.       'i' => 'I',
  877.       'j' => 'J',
  878.       'k' => 'K',
  879.       'l' => 'L',
  880.       'm' => 'M',
  881.       'n' => 'N',
  882.       'o' => 'O',
  883.       'p' => 'P',
  884.       'q' => 'Q',
  885.       'r' => 'R',
  886.       's' => 'S',
  887.       't' => 'T',
  888.       'u' => 'U',
  889.       'v' => 'V',
  890.       'w' => 'W',
  891.       'x' => 'X',
  892.       'y' => 'Y',
  893.       'z' => 'Z',
  894.  
  895.       'A' => 'A',
  896.       'B' => 'B',
  897.       'C' => 'C',
  898.       'D' => 'D',
  899.       'E' => 'E',
  900.       'F' => 'F',
  901.       'G' => 'G',
  902.       'H' => 'H',
  903.       'I' => 'I',
  904.       'J' => 'J',
  905.       'K' => 'K',
  906.       'L' => 'L',
  907.       'M' => 'M',
  908.       'N' => 'N',
  909.       'O' => 'O',
  910.       'P' => 'P',
  911.       'Q' => 'Q',
  912.       'R' => 'R',
  913.       'S' => 'S',
  914.       'T' => 'T',
  915.       'U' => 'U',
  916.       'V' => 'V',
  917.       'W' => 'W',
  918.       'X' => 'X',
  919.       'Y' => 'Y',
  920.       'Z' => 'Z',
  921.  
  922.       '0' => '0',
  923.       '1' => '1',
  924.       '2' => '2',
  925.       '3' => '3',
  926.       '4' => '4',
  927.       '5' => '5',
  928.       '6' => '6',
  929.       '7' => '7',
  930.       '8' => '8',
  931.       '9' => '9',
  932.  
  933.       '_' => '_',
  934.  
  935.       others => ' ');
  936.  
  937.    ----------------
  938.    -- Initialize --
  939.    ----------------
  940.  
  941.    procedure Initialize is
  942.    begin
  943.  
  944.       --  Set Fold_Upper table from source code indication
  945.  
  946.       if Identifier_Character_Set = '1'
  947.         or else Identifier_Character_Set = 'w'
  948.       then
  949.          Fold_Upper := Fold_Latin_1;
  950.  
  951.       elsif Identifier_Character_Set = '2' then
  952.          Fold_Upper := Fold_Latin_2;
  953.  
  954.       elsif Identifier_Character_Set = '3' then
  955.          Fold_Upper := Fold_Latin_3;
  956.  
  957.       elsif Identifier_Character_Set = '4' then
  958.          Fold_Upper := Fold_Latin_4;
  959.  
  960.       elsif Identifier_Character_Set = 'p' then
  961.          Fold_Upper := Fold_IBM_PC_437;
  962.  
  963.       elsif Identifier_Character_Set = '8' then
  964.          Fold_Upper := Fold_IBM_PC_850;
  965.  
  966.       elsif Identifier_Character_Set = 'f' then
  967.          Fold_Upper := Fold_Full_Upper_Half;
  968.  
  969.       else -- Identifier_Character_Set = 'n'
  970.          Fold_Upper := Fold_No_Upper_Half;
  971.       end if;
  972.  
  973.       --  Use Fold_Upper table to compute Fold_Lower table
  974.  
  975.       Fold_Lower := Fold_Upper;
  976.  
  977.       for J in Character loop
  978.          if J /= Fold_Upper (J) then
  979.             Fold_Lower (Fold_Upper (J)) := J;
  980.             Fold_Lower (J) := J;
  981.          end if;
  982.       end loop;
  983.  
  984.       Fold_Lower (' ') := ' ';
  985.  
  986.       --  Build Identifier_Char table from used entries of Fold_Upper
  987.  
  988.       for J in Character loop
  989.          Identifier_Char (J) := (Fold_Upper (J) /= ' ');
  990.       end loop;
  991.  
  992.       --  Add entry for ESC if wide characters in use with a wide character
  993.       --  encoding method active that does not use upper half encoding.
  994.  
  995.       if Identifier_Character_Set = 'w'
  996.         and then Wide_Character_Encoding_Method /= WCEM_None
  997.         and then not Upper_Half_Encoding
  998.       then
  999.          Identifier_Char (Ascii.ESC) := True;
  1000.       end if;
  1001.    end Initialize;
  1002.  
  1003.    --------------------------
  1004.    -- Is_Upper_Case_Letter --
  1005.    --------------------------
  1006.  
  1007.    function Is_Upper_Case_Letter (C : Character) return Boolean is
  1008.    begin
  1009.       return C /= Fold_Lower (C);
  1010.    end Is_Upper_Case_Letter;
  1011.  
  1012.    --------------------------
  1013.    -- Is_Lower_Case_Letter --
  1014.    --------------------------
  1015.  
  1016.    function Is_Lower_Case_Letter (C : Character) return Boolean is
  1017.    begin
  1018.       return C /= Fold_Upper (C);
  1019.    end Is_Lower_Case_Letter;
  1020.  
  1021. end Csets;
  1022.