Hi, Geza,

The Czech sorter was alpha, and never moved beyond to a more generic
solution due to apparent lack of general interest and time.  I was trying to
remember how I had mapped the character, and one thing led to another, and I
suddenly had a Hungarian Alphabet sorter!  Strange how that happens.

It was a bit of a puzzle, because my neurofibrillary tangles have been
getting worse and worse (warning for the non-medical types: medical
internist humor alert).

Here is my alpha release of the Hungarian sorter.  Watch for line breaks.
The one thing that I was unable to be certain about was the sort order for
the "diaresis" versus "double acute" forms of "o" and "u".  If I have
selected the wrong order, it is a very simple matter for me to fix this.

Let me know how it works!

--Scott Jones

################################################

REBOL [
    Title: "Hungarian Language Sort Function"
    Date: 12-May-2002
    Version: 0.0.1
    Author: "G. Scott Jones, M.D."
    File: %hungarian-sort.r
    Purpose: {Sort support for Hungarian alphabet}
    Comment: {This is the first alpha release for the Hungarian
        language sort. It is based on the alpha of my Czech Sort
        of 2001.  For these early versions, I've rolled the
        character sort list into this file for convenience.  The
        routine is currently hard coded for Hungarian language
        only, but will readily be made more generic for other
        languages.  The code is heavily commented for easy
        interpretation by others.  The routine could also be
        rewritten to be a wrapper for REBOL 'sort, with a path
        refinement allowing for alternative language support.
        The to-do list is so long as to make it pointless for me
        to list at this stage. ;-)   Now, I'll post to the list
        for review.

     USAGE: hungarian-sort series /case /reverse
     }
    History: [
        0.0.1 [12-May-2002 {First released for alpha review} "GSJ"]
    ]
]

char-list: {32  1   32
33  2   33  !
34  3   34  "
35  4   35  #
36  5   36  $
37  6   37  %
38  7   38  &
39  8   39  '
40  9   40  (
41  10  41  )
42  11  42  *
43  12  43  +
44  13  44  ,
45  14  45  -
46  15  46  .
47  16  47  /
48  17  48  0
49  18  49  1
50  19  50  2
51  20  51  3
52  21  52  4
53  22  53  5
54  23  54  6
55  24  55  7
56  25  56  8
57  26  57  9
58  27  58  :
59  28  59  ;
60  29  60  <
61  30  61  =
62  31  62  >
63  32  63  ?
64  33  64  @
97  34  97  a  0061 LATIN SMALL LETTER A
225 35  225 a' 00e1 LATIN SMALL LETTER A WITH ACUTE
65  69  65  A  0041 LATIN CAPITAL LETTER A
193 70  193 A' 00c1 LATIN CAPITAL LETTER A WITH ACUTE
98  36  98  b  0062 LATIN SMALL LETTER B
66  71  66  B  0042 LATIN CAPITAL LETTER B
99  37  99  c  0063 LATIN SMALL LETTER C
67  72  67  C  0043 LATIN CAPITAL LETTER C
100 38  100 d  0064 LATIN SMALL LETTER D
68  73  68  D  0044 LATIN CAPITAL LETTER D
101 39  101 e  0065 LATIN SMALL LETTER E
233 40  233 e' 00e9 LATIN SMALL LETTER E WITH ACUTE
69  74  69  E  0045 LATIN CAPITAL LETTER E
201 75  201 E' 00c9 LATIN CAPITAL LETTER E WITH ACUTE
102 41  102 f  0066 LATIN SMALL LETTER F
70  76  70  F  0046 LATIN CAPITAL LETTER F
103 42  103 g  0067 LATIN SMALL LETTER G
71  77  71  G  0047 LATIN CAPITAL LETTER G
104 43  104 h  0068 LATIN SMALL LETTER H
72  78  72  H  0048 LATIN CAPITAL LETTER H
105 44  105 i  0069 LATIN SMALL LETTER I
237 45  237 i' 00ed LATIN SMALL LETTER I WITH ACUTE
73  79  73  I  0049 LATIN CAPITAL LETTER I
205 80  205 I' 00cd LATIN CAPITAL LETTER I WITH ACUTE
106 46  106 j  006a LATIN SMALL LETTER J
74  81  74  J  004a LATIN CAPITAL LETTER J
107 47  107 k  006b LATIN SMALL LETTER K
75  82  75  K  004b LATIN CAPITAL LETTER K
108 48  108 l  006c LATIN SMALL LETTER L
76  83  76  L  004c LATIN CAPITAL LETTER L
109 49  109 m  006d LATIN SMALL LETTER M
77  84  77  M  004d LATIN CAPITAL LETTER M
110 50  110 n  006e LATIN SMALL LETTER N
78  85  78  N  004e LATIN CAPITAL LETTER N
111 51  111 o  006f LATIN SMALL LETTER O
243 52  243 o' 00f3 LATIN SMALL LETTER O WITH ACUTE
245 53    245 o' 00f3 LATIN SMALL LETTER O WITH DOUBLE ACUTE
246 54  246 o: 00f6 LATIN SMALL LETTER O WITH DIAERESIS
79  86  79  O  004f LATIN CAPITAL LETTER O
211 87  211 O' 00d3 LATIN CAPITAL LETTER O WITH ACUTE
213 88  213 O" 0150 LATIN CAPITAL LETTER O WITH DOUBLE ACUTE
214 89  214 O: 00d6 LATIN CAPITAL LETTER O WITH DIAERESIS
112 55  112 p  0070 LATIN SMALL LETTER P
80  90  80  P  0050 LATIN CAPITAL LETTER P
113 56  113 q  0071 LATIN SMALL LETTER Q
81  91  81  Q  0051 LATIN CAPITAL LETTER Q
114 57  114 r  0072 LATIN SMALL LETTER R
82  92  82  R  0052 LATIN CAPITAL LETTER R
115 58  115 s  0073 LATIN SMALL LETTER S
83  93 83  S  0053 LATIN CAPITAL LETTER S
116 59  116 t  0074 LATIN SMALL LETTER T
84  94  84  T  0054 LATIN CAPITAL LETTER T
117 60  117 u  0075 LATIN SMALL LETTER U
250 61  250 u' 00fa LATIN SMALL LETTER U WITH ACUTE
251 62  251 u' 00fa LATIN SMALL LETTER U WITH DOUBLE ACUTE
252 63  252 u: 00fc LATIN SMALL LETTER U WITH DIAERESIS
85  95  85  U  0055 LATIN CAPITAL LETTER U
218 96  218 U' 00da LATIN CAPITAL LETTER U WITH ACUTE
219 97  219 U" 0170 LATIN CAPITAL LETTER U WITH DOUBLE ACUTE
220 98  220 U: 00dc LATIN CAPITAL LETTER U WITH DIAERESIS
118 64  118 v  0076 LATIN SMALL LETTER V
86  99  86  V  0056 LATIN CAPITAL LETTER V
119 65  119 w  0077 LATIN SMALL LETTER W
87  100  87  W  0057 LATIN CAPITAL LETTER W
120 66  120 x  0078 LATIN SMALL LETTER X
88  101  88  X  0058 LATIN CAPITAL LETTER X
121 67  121 y  0079 LATIN SMALL LETTER Y
89  102 89  Y  0059 LATIN CAPITAL LETTER Y
122 68  122 z  007a LATIN SMALL LETTER Z
90  103 90  Z  005a LATIN CAPITAL LETTER Z
91  104 91  [
92  105 92  \
93  106 93  ]
94  107 94  ^
95  108 95  _
96  109 96  `
123 110 123 {
124 111 124 |
125 112 125 }
126 113 126 ~
133 114 133 a}

;;;;set up sort data structures
data: copy []
data: parse/all char-list "^/"

;make regular sort map
hu-reg: copy data
forall hu-reg [hu-reg/1: to-integer first parse hu-reg/1 none]
hu-reg: head hu-reg

;make case-sensitive sort map
hu-case: copy data
mysort: func [a b] [
 (to-integer pick parse a none 2) < (to-integer pick parse b none 2)
]
;rearrange the list based on second field
sort/compare hu-case :mysort
forall hu-case [hu-case/1: to-integer first parse hu-case/1 none]
hu-case: head hu-case

;;;;new sort function
;not all 'sort refinements yet supported
;local words have not been specified
;error condition roll-back of block to original not yet added
hungarian-sort: func [:blk /case /reverse][
    either case [order: hu-case][order: hu-reg]
    ;backup for future error checking and roll-back
    blk-backup: copy blk
    forall blk [
        ;swap index position for characters
        temp: copy []
        foreach b blk/1 [
            t: find order to-integer b
            append temp index? t
        ]
        blk/1: temp
    ]
    blk: head blk
    ;sort through REBOL 'sort
    either reverse [
        sort/reverse blk
    ][
        sort blk
    ]
    forall blk [
        temp: copy []
        ;change index integer back to characters
        foreach b blk/1 [append temp to-char order/:b]
        ;make a word out of characters
        blk/1: copy rejoin temp
    ]
    ;reset head and block returns changed
    blk: head blk
]

;;;;now for some testing

;these may not be official spellings - it is just what I had available
months: ["január" "február" "március" "április" "május" "június"
"július" "augusztus" "szeptember" "október" "november" "december"]

hungarian-sort months
print ["Check month sort/case: " equal? months  ["augusztus" "április"
"december" "február" "január" "július" "június" "május" "március"
"november" "október" "szeptember"]]
;foreach m months [print m]

hungarian-sort/case months
print ["Check month sort/case: " equal? months ["augusztus" "április"
"december" "február" "január" "július" "június" "május" "március"
"november" "október" "szeptember"]]
;foreach m months [print m]

hungarian-sort/reverse months
print ["Check month sort/case: " equal? months ["szeptember" "október"
"november" "március" "május" "június" "július" "január" "február"
"december" "április" "augusztus"]]
;foreach m months [print m]

days: ["hétfo" "kedd" "szerda" "csütörtök" "péntek" "szombat" "vasárnap"]

hungarian-sort days
print ["Check day sort: " equal? days ["csütörtök" "hétfo" "kedd"
"péntek" "szerda" "szombat" "vasárnap"]]
;foreach d days [print d]

hungarian-sort/case days
print ["Check day sort/case: " equal? days ["csütörtök" "hétfo" "kedd"
"péntek" "szerda" "szombat" "vasárnap"]]
;foreach d days [print d]

hungarian-sort/reverse days
print ["Check day sort/case: " equal? days ["vasárnap" "szombat"
"szerda" "péntek" "kedd" "hétfo" "csütörtök"]]
;foreach d days [print d]

word-sample: ["január" "február" "március" "április" "május"
"június" "július" "augusztus" "szeptember" "október" "november"
"december" "hétfo" "kedd" "szerda" "csütörtök" "péntek"
"szombat" "vasárnap" "nulla" "egy" "kettő" "három" "négy"
"öt" "hat" "hét" "nyolc" "kilenc" "tíz" "tizenegy" "húsz"
"huszonegy" "harmincegy" "negyvenegy" "ötvenegy" "hatvanegy"
"hetvenegy" "nyolcvanegy" "kilencvenegy" "száz" "ezer"
"ezeregyszáz" "tízezer" "ötvenezer" "százezer" "millió"
"milliárd" "Igen" "Nem" "Kérem" "Köszönöm" "Szervusz"
"Viszontlátásra" "Magyar" "Magyarország" "Hogy" "van"
"vagy" "Mit" "csinálsz" "Bocsánat" "vagyok" "Hol" "szép"
"ország" "Segítene" "Fáradt" "Segítség" "a" "Kanadai"
"Amerikai" "Hany" "óra" "Merre" "kell" "menni" "Az"
"EMERGE" "Európai" "Unió" "Információs" "Társadalom"
"Technológiájával" "foglalkozó" "projektje" "amely"
"aktívan" "támogatja" "és" "más" "közép" "kelet" "országok"
"részvételét" "EU" "által" "finanszírozott" "IST"
"projektekben" "Informál" "keretprogram" "műszaki"
"megoldásaival" "projektjeiről" "tájékoztat" "ben" "induló"
"keretprogramról" "Tanszékünk" "Budapesti"
"Gazdaságtudományi" "Egyetem" "Távközlési" "Telematikai"
"Tanszéke" "projekt" "hazai" "partnere" "vonatkozása" "fő"
"fázisból" "áll" "konferencia" "megszervezése" "Budapesten"
"melynek" "során" "munkája" "iránt" "érdeklődők"
"személyesen" "is" "bemutatkozhatnak" "egymásnak"
"nyújtása" "intézményeknek" "ahhoz" "csatlakozhassanak"
"jelenleg" "futó" "projektekhez" "abban" "partnereket"
"találjanak" "jövőbeliekhez" "Tájékoztatás" "arról"
"milyen" "gazdasági" "helyzet" "projektben" "résztvevő"
"úgynevezett" "iparában" "ezek" "javarészt" "ezen" "belül"
"Magyarországon" "itt" "olvasható" "információk"
"frissített" "változata" "elejére" "várható" "Szintén"
"ehhez" "fázishoz" "tartozik" "elkövetkező" "évre"
"vonatkozó" "Uniós" "kutatási" "programról" "első" "fázisa"
"októberében" "második" "pedig" "befejeződött" "Mindezekről"
"bővebb" "információt" "Archívum" "pont" "alatt" "találhat"
"bal" "oldali" "menüben" "harmadik" "fázis" "erről" "többet"
"távközlés" "helyzete" "országokban" "pontok" "tudhat" "meg"
"Újdonság" "Híradástechnika" "című" "folyóiratban" "hamarosan"
"megjelenik" "fázisban" "megrendezett" "konferencián"
"elhangzott" "előadásokból" "háromnak" "nyelvű" "írott"]

hungarian-sort word-sample
;foreach d word-sample [print d]
hungarian-sort/reverse word-sample
;foreach d word-sample [print d]
hungarian-sort/case word-sample
;foreach d word-sample [print d]


-- 
To unsubscribe from this list, please send an email to
[EMAIL PROTECTED] with "unsubscribe" in the 
subject, without the quotes.

Reply via email to