Mailing List Archive: 49091 messages
  • Home
  • Script library
  • AltME Archive
  • Mailing list
  • Articles Index
  • Site search
 

[REBOL] Hungarian Alphabet Sort (was Re: Collation sequence - proper and efficie

From: gscottjones::mchsi::com at: 12-May-2002 14:55

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]