\ File: recode.spf \ Date: 03.07.2003 \ Modified: 26.Sep.2003 (WRONG-LAYOUT-TABLE was added) \ Author: Nicholas Nemtsev, Valery Kondakoff. \ Description: Recodes strings (replaces specified characters with \ other characters) using predefined recode-tables, \ which contain codes of 256 characters (0-255). \ This plugin can be used, for example, for changing \ characters case to lower/upper, for transliterating \ some text (replacing national characters with their Latin \ equivalents) or for changing the encoding of the text. \ You can create your own recode-tables. \ New words: RECODE ( a u table -- ) \ Predefined recode-tables: \ DEFAULT-TABLE \ TRANSLIT-TABLE \ LOWER-TABLE \ UPPER-TABLE \ KOI2WIN-TABLE \ WRONG-LAYOUT-TABLE \ Usage: COUNT RECODE 0 [IF] \ this is a comment string Examples: #( test_transliterate NoActive CREATE trans_buf 256 ALLOT Action: \ placing a string in trans_buf S" test: строка для транслитерации" trans_buf PLACE \ transliterating trans_buf COUNT TRANSLIT-TABLE RECODE \ displaying in a message MSG: "%trans_buf COUNT%" )# #( test_to_lower NoActive CREATE lower_buf 256 ALLOT Action: \ placing a string in lower_buf S" TEST: This sTring NEED to be in LOWER-case" lower_buf PLACE \ changing case to lower lower_buf COUNT LOWER-TABLE RECODE \ displaying in a message MSG: "%lower_buf COUNT%" )# [THEN] \ this is a comment string \ transliteration tables: CREATE DEFAULT-TABLE \ default table with no conversion \ (available as a good start point when creating new tables) 0 C, 1 C, 2 C, 3 C, 4 C, 5 C, 6 C, 7 C, 8 C, 9 C, 10 C, 11 C, 12 C, 13 C, 14 C, 15 C, 16 C, 17 C, 18 C, 19 C, 20 C, 21 C, 22 C, 23 C, 24 C, 25 C, 26 C, 27 C, 28 C, 29 C, 30 C, 31 C, 32 C, 33 C, 34 C, 35 C, 36 C, 37 C, 38 C, 39 C, 40 C, 41 C, 42 C, 43 C, 44 C, 45 C, 46 C, 47 C, 48 C, 49 C, 50 C, 51 C, 52 C, 53 C, 54 C, 55 C, 56 C, 57 C, 58 C, 59 C, 60 C, 61 C, 62 C, 63 C, 64 C, 65 C, 66 C, 67 C, 68 C, 69 C, 70 C, 71 C, 72 C, 73 C, 74 C, 75 C, 76 C, 77 C, 78 C, 79 C, 80 C, 81 C, 82 C, 83 C, 84 C, 85 C, 86 C, 87 C, 88 C, 89 C, 90 C, 91 C, 92 C, 93 C, 94 C, 95 C, 96 C, 97 C, 98 C, 99 C, 100 C, 101 C, 102 C, 103 C, 104 C, 105 C, 106 C, 107 C, 108 C, 109 C, 110 C, 111 C, 112 C, 113 C, 114 C, 115 C, 116 C, 117 C, 118 C, 119 C, 120 C, 121 C, 122 C, 123 C, 124 C, 125 C, 126 C, 127 C, 128 C, 129 C, 130 C, 131 C, 132 C, 133 C, 134 C, 135 C, 136 C, 137 C, 138 C, 139 C, 140 C, 141 C, 142 C, 143 C, 144 C, 145 C, 146 C, 147 C, 148 C, 149 C, 150 C, 151 C, 152 C, 153 C, 154 C, 155 C, 156 C, 157 C, 158 C, 159 C, 160 C, 161 C, 162 C, 163 C, 164 C, 165 C, 166 C, 167 C, 168 C, 169 C, 170 C, 171 C, 172 C, 173 C, 174 C, 175 C, 176 C, 177 C, 178 C, 179 C, 180 C, 181 C, 182 C, 183 C, 184 C, 185 C, 186 C, 187 C, 188 C, 189 C, 190 C, 191 C, 192 C, 193 C, 194 C, 195 C, 196 C, 197 C, 198 C, 199 C, 200 C, 201 C, 202 C, 203 C, 204 C, 205 C, 206 C, 207 C, 208 C, 209 C, 210 C, 211 C, 212 C, 213 C, 214 C, 215 C, 216 C, 217 C, 218 C, 219 C, 220 C, 221 C, 222 C, 223 C, 224 C, 225 C, 226 C, 227 C, 228 C, 229 C, 230 C, 231 C, 232 C, 233 C, 234 C, 235 C, 236 C, 237 C, 238 C, 239 C, 240 C, 241 C, 242 C, 243 C, 244 C, 245 C, 246 C, 247 C, 248 C, 249 C, 250 C, 251 C, 252 C, 253 C, 254 C, 255 C, CREATE TRANSLIT-TABLE \ this table was created for transliteration of Russian characters \ in Windows cp-1251 codepage into their Latin equivalents 0 C, 1 C, 2 C, 3 C, 4 C, 5 C, 6 C, 7 C, 8 C, 9 C, 10 C, 11 C, 12 C, 13 C, 14 C, 15 C, 16 C, 17 C, 18 C, 19 C, 20 C, 21 C, 22 C, 23 C, 24 C, 25 C, 26 C, 27 C, 28 C, 29 C, 30 C, 31 C, 32 C, 33 C, 34 C, 35 C, 36 C, 37 C, 38 C, 39 C, 40 C, 41 C, 42 C, 43 C, 44 C, 45 C, 46 C, 47 C, 48 C, 49 C, 50 C, 51 C, 52 C, 53 C, 54 C, 55 C, 56 C, 57 C, 58 C, 59 C, 60 C, 61 C, 62 C, 63 C, 64 C, 65 C, 66 C, 67 C, 68 C, 69 C, 70 C, 71 C, 72 C, 73 C, 74 C, 75 C, 76 C, 77 C, 78 C, 79 C, 80 C, 81 C, 82 C, 83 C, 84 C, 85 C, 86 C, 87 C, 88 C, 89 C, 90 C, 91 C, 92 C, 93 C, 94 C, 95 C, 96 C, 97 C, 98 C, 99 C, 100 C, 101 C, 102 C, 103 C, 104 C, 105 C, 106 C, 107 C, 108 C, 109 C, 110 C, 111 C, 112 C, 113 C, 114 C, 115 C, 116 C, 117 C, 118 C, 119 C, 120 C, 121 C, 122 C, 123 C, 124 C, 125 C, 126 C, 127 C, 128 C, 129 C, 130 C, 131 C, 132 C, 133 C, 134 C, 135 C, 136 C, 137 C, 138 C, 139 C, 140 C, 141 C, 142 C, 143 C, 144 C, 145 C, 146 C, 147 C, 148 C, 149 C, 150 C, 151 C, 152 C, 153 C, 154 C, 155 C, 156 C, 157 C, 158 C, 159 C, 160 C, 161 C, 162 C, 163 C, 164 C, 165 C, 166 C, 167 C, 168 C, 169 C, 170 C, 171 C, 172 C, 173 C, 174 C, 175 C, 176 C, 177 C, 178 C, 179 C, 180 C, 181 C, 182 C, 183 C, 184 C, 185 C, 186 C, 187 C, 188 C, 189 C, 190 C, 191 C, 65 C, 66 C, 86 C, 71 C, 68 C, 69 C, 74 C, 90 C, 73 C, 89 C, 75 C, 76 C, 77 C, 78 C, 79 C, 80 C, 82 C, 83 C, 84 C, 85 C, 70 C, 72 C, 67 C, 52 C, 35 C, 36 C, 39 C, 89 C, 39 C, 69 C, 85 C, 81 C, 97 C, 98 C, 118 C, 103 C, 100 C, 101 C, 106 C, 122 C, 105 C, 106 C, 107 C, 108 C, 109 C, 110 C, 111 C, 112 C, 114 C, 115 C, 116 C, 117 C, 102 C, 104 C, 99 C, 52 C, 35 C, 36 C, 39 C, 89 C, 39 C, 101 C, 117 C, 113 C, CREATE LOWER-TABLE \ table for converting all alphanumeric chars to the lower case 0 C, 1 C, 2 C, 3 C, 4 C, 5 C, 6 C, 7 C, 8 C, 9 C, 10 C, 11 C, 12 C, 13 C, 14 C, 15 C, 16 C, 17 C, 18 C, 19 C, 20 C, 21 C, 22 C, 23 C, 24 C, 25 C, 26 C, 27 C, 28 C, 29 C, 30 C, 31 C, 32 C, 33 C, 34 C, 35 C, 36 C, 37 C, 38 C, 39 C, 40 C, 41 C, 42 C, 43 C, 44 C, 45 C, 46 C, 47 C, 48 C, 49 C, 50 C, 51 C, 52 C, 53 C, 54 C, 55 C, 56 C, 57 C, 58 C, 59 C, 60 C, 61 C, 62 C, 63 C, 64 C, 97 C, 98 C, 99 C, 100 C, 101 C, 102 C, 103 C, 104 C, 105 C, 106 C, 107 C, 108 C, 109 C, 110 C, 111 C, 112 C, 113 C, 114 C, 115 C, 116 C, 117 C, 118 C, 119 C, 120 C, 121 C, 122 C, 91 C, 92 C, 93 C, 94 C, 95 C, 96 C, 97 C, 98 C, 99 C, 100 C, 101 C, 102 C, 103 C, 104 C, 105 C, 106 C, 107 C, 108 C, 109 C, 110 C, 111 C, 112 C, 113 C, 114 C, 115 C, 116 C, 117 C, 118 C, 119 C, 120 C, 121 C, 122 C, 123 C, 124 C, 125 C, 126 C, 127 C, 128 C, 129 C, 130 C, 131 C, 132 C, 133 C, 134 C, 135 C, 136 C, 137 C, 138 C, 139 C, 140 C, 141 C, 142 C, 143 C, 144 C, 145 C, 146 C, 147 C, 148 C, 149 C, 150 C, 151 C, 152 C, 153 C, 154 C, 155 C, 156 C, 157 C, 158 C, 159 C, 160 C, 161 C, 162 C, 163 C, 164 C, 165 C, 166 C, 167 C, 168 C, 169 C, 170 C, 171 C, 172 C, 173 C, 174 C, 175 C, 176 C, 177 C, 178 C, 179 C, 180 C, 181 C, 182 C, 183 C, 184 C, 185 C, 186 C, 187 C, 188 C, 189 C, 190 C, 191 C, 224 C, 225 C, 226 C, 227 C, 228 C, 229 C, 230 C, 231 C, 232 C, 233 C, 234 C, 235 C, 236 C, 237 C, 238 C, 239 C, 240 C, 241 C, 242 C, 243 C, 244 C, 245 C, 246 C, 247 C, 248 C, 249 C, 250 C, 251 C, 252 C, 253 C, 254 C, 255 C, 224 C, 225 C, 226 C, 227 C, 228 C, 229 C, 230 C, 231 C, 232 C, 233 C, 234 C, 235 C, 236 C, 237 C, 238 C, 239 C, 240 C, 241 C, 242 C, 243 C, 244 C, 245 C, 246 C, 247 C, 248 C, 249 C, 250 C, 251 C, 252 C, 253 C, 254 C, 255 C, CREATE UPPER-TABLE \ table for converting all alphanumeric chars to the upper case 0 C, 1 C, 2 C, 3 C, 4 C, 5 C, 6 C, 7 C, 8 C, 9 C, 10 C, 11 C, 12 C, 13 C, 14 C, 15 C, 16 C, 17 C, 18 C, 19 C, 20 C, 21 C, 22 C, 23 C, 24 C, 25 C, 26 C, 27 C, 28 C, 29 C, 30 C, 31 C, 32 C, 33 C, 34 C, 35 C, 36 C, 37 C, 38 C, 39 C, 40 C, 41 C, 42 C, 43 C, 44 C, 45 C, 46 C, 47 C, 48 C, 49 C, 50 C, 51 C, 52 C, 53 C, 54 C, 55 C, 56 C, 57 C, 58 C, 59 C, 60 C, 61 C, 62 C, 63 C, 64 C, 65 C, 66 C, 67 C, 68 C, 69 C, 70 C, 71 C, 72 C, 73 C, 74 C, 75 C, 76 C, 77 C, 78 C, 79 C, 80 C, 81 C, 82 C, 83 C, 84 C, 85 C, 86 C, 87 C, 88 C, 89 C, 90 C, 91 C, 92 C, 93 C, 94 C, 95 C, 96 C, 65 C, 66 C, 67 C, 68 C, 69 C, 70 C, 71 C, 72 C, 73 C, 74 C, 75 C, 76 C, 77 C, 78 C, 79 C, 80 C, 81 C, 82 C, 83 C, 84 C, 85 C, 86 C, 87 C, 88 C, 89 C, 90 C, 123 C, 124 C, 125 C, 126 C, 127 C, 128 C, 129 C, 130 C, 131 C, 132 C, 133 C, 134 C, 135 C, 136 C, 137 C, 138 C, 139 C, 140 C, 141 C, 142 C, 143 C, 144 C, 145 C, 146 C, 147 C, 148 C, 149 C, 150 C, 151 C, 152 C, 153 C, 154 C, 155 C, 156 C, 157 C, 158 C, 159 C, 160 C, 161 C, 162 C, 163 C, 164 C, 165 C, 166 C, 167 C, 168 C, 169 C, 170 C, 171 C, 172 C, 173 C, 174 C, 175 C, 176 C, 177 C, 178 C, 179 C, 180 C, 181 C, 182 C, 183 C, 184 C, 185 C, 186 C, 187 C, 188 C, 189 C, 190 C, 191 C, 192 C, 193 C, 194 C, 195 C, 196 C, 197 C, 198 C, 199 C, 200 C, 201 C, 202 C, 203 C, 204 C, 205 C, 206 C, 207 C, 208 C, 209 C, 210 C, 211 C, 212 C, 213 C, 214 C, 215 C, 216 C, 217 C, 218 C, 219 C, 220 C, 221 C, 222 C, 223 C, 192 C, 193 C, 194 C, 195 C, 196 C, 197 C, 198 C, 199 C, 200 C, 201 C, 202 C, 203 C, 204 C, 205 C, 206 C, 207 C, 208 C, 209 C, 210 C, 211 C, 212 C, 213 C, 214 C, 215 C, 216 C, 217 C, 218 C, 219 C, 220 C, 221 C, 222 C, 223 C, CREATE KOI2WIN-TABLE \ table for converting text from KOI8-R to cp1251 encoding 0 C, 1 C, 2 C, 3 C, 4 C, 5 C, 6 C, 7 C, 8 C, 9 C, 10 C, 11 C, 12 C, 13 C, 14 C, 15 C, 16 C, 17 C, 18 C, 19 C, 20 C, 21 C, 22 C, 23 C, 24 C, 25 C, 26 C, 27 C, 28 C, 29 C, 30 C, 31 C, 32 C, 33 C, 34 C, 35 C, 36 C, 37 C, 38 C, 39 C, 40 C, 41 C, 42 C, 43 C, 44 C, 45 C, 46 C, 47 C, 48 C, 49 C, 50 C, 51 C, 52 C, 53 C, 54 C, 55 C, 56 C, 57 C, 58 C, 59 C, 60 C, 61 C, 62 C, 63 C, 64 C, 65 C, 66 C, 67 C, 68 C, 69 C, 70 C, 71 C, 72 C, 73 C, 74 C, 75 C, 76 C, 77 C, 78 C, 79 C, 80 C, 81 C, 82 C, 83 C, 84 C, 85 C, 86 C, 87 C, 88 C, 89 C, 90 C, 91 C, 92 C, 93 C, 94 C, 95 C, 96 C, 97 C, 98 C, 99 C, 100 C, 101 C, 102 C, 103 C, 104 C, 105 C, 106 C, 107 C, 108 C, 109 C, 110 C, 111 C, 112 C, 113 C, 114 C, 115 C, 116 C, 117 C, 118 C, 119 C, 120 C, 121 C, 122 C, 123 C, 124 C, 125 C, 126 C, 127 C, 128 C, 129 C, 130 C, 131 C, 132 C, 133 C, 134 C, 135 C, 136 C, 137 C, 138 C, 139 C, 140 C, 141 C, 142 C, 143 C, 144 C, 145 C, 146 C, 147 C, 148 C, 149 C, 150 C, 151 C, 152 C, 153 C, 154 C, 155 C, 156 C, 157 C, 158 C, 159 C, 160 C, 161 C, 162 C, 184 C, 164 C, 165 C, 166 C, 167 C, 168 C, 169 C, 170 C, 171 C, 172 C, 173 C, 174 C, 175 C, 176 C, 177 C, 178 C, 168 C, 180 C, 181 C, 182 C, 183 C, 184 C, 185 C, 186 C, 187 C, 188 C, 189 C, 190 C, 191 C, 254 C, 224 C, 225 C, 246 C, 228 C, 229 C, 244 C, 227 C, 245 C, 232 C, 233 C, 234 C, 235 C, 236 C, 237 C, 238 C, 239 C, 255 C, 240 C, 241 C, 242 C, 243 C, 230 C, 226 C, 252 C, 251 C, 231 C, 248 C, 253 C, 249 C, 247 C, 250 C, 222 C, 192 C, 193 C, 214 C, 196 C, 197 C, 212 C, 195 C, 213 C, 200 C, 201 C, 202 C, 203 C, 204 C, 205 C, 206 C, 207 C, 223 C, 208 C, 209 C, 210 C, 211 C, 198 C, 194 C, 220 C, 219 C, 199 C, 216 C, 221 C, 217 C, 215 C, 218 C, CREATE WRONG-LAYOUT-TABLE \ table for converting text, which was typed using \ wrong keyboard layout (EN -> cp1251, cp1251 -> EN) 0 C, 1 C, 2 C, 3 C, 4 C, 5 C, 6 C, 7 C, 8 C, 9 C, 10 C, 11 C, 12 C, 13 C, 14 C, 15 C, 16 C, 17 C, 18 C, 19 C, 20 C, 21 C, 22 C, 23 C, 24 C, 25 C, 26 C, 27 C, 28 C, 29 C, 30 C, 31 C, 32 C, 33 C, 221 C, 185 C, 59 C, 37 C, 63 C, 253 C, 40 C, 41 C, 42 C, 43 C, 225 C, 45 C, 254 C, 46 C, 48 C, 49 C, 50 C, 51 C, 52 C, 53 C, 54 C, 55 C, 56 C, 57 C, 198 C, 230 C, 193 C, 61 C, 222 C, 38 C, 34 C, 212 C, 200 C, 209 C, 194 C, 211 C, 192 C, 207 C, 208 C, 216 C, 206 C, 203 C, 196 C, 220 C, 210 C, 217 C, 199 C, 201 C, 202 C, 219 C, 197 C, 195 C, 204 C, 214 C, 215 C, 205 C, 223 C, 245 C, 92 C, 250 C, 58 C, 95 C, 184 C, 244 C, 232 C, 241 C, 226 C, 243 C, 224 C, 239 C, 240 C, 248 C, 238 C, 235 C, 228 C, 252 C, 242 C, 249 C, 231 C, 233 C, 234 C, 251 C, 229 C, 227 C, 236 C, 246 C, 247 C, 237 C, 255 C, 213 C, 124 C, 218 C, 168 C, 127 C, 128 C, 129 C, 130 C, 131 C, 132 C, 133 C, 134 C, 135 C, 136 C, 137 C, 138 C, 139 C, 140 C, 141 C, 142 C, 143 C, 144 C, 145 C, 146 C, 147 C, 148 C, 149 C, 150 C, 151 C, 152 C, 153 C, 154 C, 155 C, 156 C, 157 C, 158 C, 159 C, 160 C, 161 C, 162 C, 163 C, 164 C, 165 C, 166 C, 167 C, 126 C, 169 C, 170 C, 171 C, 172 C, 173 C, 174 C, 175 C, 176 C, 177 C, 178 C, 179 C, 180 C, 181 C, 182 C, 183 C, 96 C, 35 C, 186 C, 187 C, 188 C, 189 C, 190 C, 191 C, 70 C, 60 C, 68 C, 85 C, 76 C, 84 C, 58 C, 80 C, 66 C, 81 C, 82 C, 75 C, 86 C, 89 C, 74 C, 71 C, 72 C, 67 C, 78 C, 69 C, 65 C, 123 C, 87 C, 88 C, 73 C, 79 C, 125 C, 83 C, 77 C, 34 C, 62 C, 90 C, 102 C, 44 C, 100 C, 117 C, 108 C, 116 C, 59 C, 112 C, 98 C, 113 C, 114 C, 107 C, 118 C, 121 C, 106 C, 103 C, 104 C, 99 C, 110 C, 101 C, 97 C, 91 C, 119 C, 120 C, 105 C, 111 C, 93 C, 115 C, 109 C, 39 C, 46 C, 122 C, USER-VALUE recode_table : recode-convert ( n1 -- n2) 0xFF AND recode_table + C@ ; : RECODE ( a u table -- ) TO recode_table OVER + SWAP ?DO I C@ recode-convert I C! LOOP ; \ you can create your own word like this: \ : TO-UPPER ( a u -- ) UPPER-TABLE RECODE ; \ : TO-LOWER ( a u -- ) LOWER-TABLE RECODE ;