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.