1// Copyright 2013 by Dobrosław Żybort. All rights reserved.
  2// This Source Code Form is subject to the terms of the Mozilla Public
  3// License, v. 2.0. If a copy of the MPL was not distributed with this
  4// file, You can obtain one at http://mozilla.org/MPL/2.0/.
  5
  6package slug
  7
  8func init() {
  9	// Merge language subs with the default one.
 10	// TODO: Find better way so all langs are merged automatically and better
 11	// tested.
 12	for _, sub := range []*map[rune]string{
 13		&bgSub,
 14		&csSub,
 15		&deSub,
 16		&enSub,
 17		&esSub,
 18		&fiSub,
 19		&frSub,
 20		&grSub,
 21		&huSub,
 22		&idSub,
 23		&itSub,
 24		&kkSub,
 25		&nbSub,
 26		&nlSub,
 27		&nnSub,
 28		&plSub,
 29		&roSub,
 30		&slSub,
 31		&svSub,
 32		&trSub,
 33	} {
 34		for key, value := range defaultSub {
 35			(*sub)[key] = value
 36		}
 37	}
 38}
 39
 40var defaultSub = map[rune]string{
 41	'"':  "",
 42	'\'': "",
 43	'’':  "",
 44	'‒':  "-", // figure dash
 45	'–':  "-", // en dash
 46	'—':  "-", // em dash
 47	'―':  "-", // horizontal bar
 48}
 49
 50var csSub = map[rune]string{
 51	'&': "a",
 52	'@': "zavinac",
 53}
 54
 55var deSub = map[rune]string{
 56	'&': "und",
 57	'@': "an",
 58	'ä': "ae",
 59	'Ä': "Ae",
 60	'ö': "oe",
 61	'Ö': "Oe",
 62	'ü': "ue",
 63	'Ü': "Ue",
 64}
 65
 66var enSub = map[rune]string{
 67	'&': "and",
 68	'@': "at",
 69}
 70
 71var esSub = map[rune]string{
 72	'&': "y",
 73	'@': "en",
 74}
 75
 76var fiSub = map[rune]string{
 77	'&': "ja",
 78	'@': "at",
 79}
 80
 81var frSub = map[rune]string{
 82	'&': "et",
 83	'@': "arobase",
 84}
 85
 86var grSub = map[rune]string{
 87	'&': "kai",
 88	'β': "v",
 89	'Β': "V",
 90	'η': "i",
 91	'Η': "I",
 92	'ή': "i",
 93	'Ή': "I",
 94	'ι': "i",
 95	'Ι': "I",
 96	'ί': "i",
 97	'Ί': "I",
 98	'ϊ': "i",
 99	'Ϊ': "I",
100	'ΐ': "i",
101	'ξ': "x",
102	'Ξ': "X",
103	'υ': "y",
104	'Υ': "Y",
105	'ύ': "y",
106	'Ύ': "Y",
107	'ϋ': "y",
108	'Ϋ': "Y",
109	'ΰ': "y",
110	'φ': "f",
111	'Φ': "F",
112	'χ': "ch",
113	'Χ': "Ch",
114	'ω': "o",
115	'Ω': "O",
116	'ώ': "o",
117	'Ώ': "O",
118}
119
120var huSub = map[rune]string{
121	'á': "a",
122	'Á': "A",
123	'é': "e",
124	'É': "E",
125	'í': "i",
126	'Í': "I",
127	'ó': "o",
128	'Ó': "O",
129	'ö': "o",
130	'Ö': "O",
131	'ő': "o",
132	'Ő': "O",
133	'ú': "u",
134	'Ú': "U",
135	'ü': "u",
136	'Ü': "U",
137	'ű': "u",
138	'Ű': "U",
139}
140
141var idSub = map[rune]string{
142	'&': "dan",
143}
144
145var itSub = map[rune]string{
146	'&': "e",
147	'@': "chiocciola",
148}
149
150var kkSub = map[rune]string{
151	'&': "jane",
152	'ә': "a",
153	'ғ': "g",
154	'қ': "q",
155	'ң': "n",
156	'ө': "o",
157	'ұ': "u",
158	'Ә': "A",
159	'Ғ': "G",
160	'Қ': "Q",
161	'Ң': "N",
162	'Ө': "O",
163	'Ұ': "U",
164}
165
166var nbSub = map[rune]string{
167	'&': "og",
168	'@': "at",
169	'æ': "ae",
170	'ø': "oe",
171	'å': "aa",
172	'Æ': "Ae",
173	'Ø': "Oe",
174	'Å': "Aa",
175}
176
177// Norwegian Nynorsk has the same rules
178var nnSub = nbSub
179
180var nlSub = map[rune]string{
181	'&': "en",
182	'@': "at",
183}
184
185var plSub = map[rune]string{
186	'&': "i",
187	'@': "na",
188}
189
190var roSub = map[rune]string{
191	'&': "si",
192	'Ă': "A",
193	'ă': "a",
194	'Â': "A",
195	'â': "a",
196	'Î': "I",
197	'î': "i",
198	'Ș': "S",
199	'ș': "s",
200	'Ț': "T",
201	'ț': "t",
202}
203
204var slSub = map[rune]string{
205	'&': "in",
206	'Đ': "DZ",
207	'đ': "dz",
208}
209
210var svSub = map[rune]string{
211	'&': "och",
212	'@': "snabel a",
213}
214
215var trSub = map[rune]string{
216	'&': "ve",
217	'@': "et",
218	'ş': "s",
219	'Ş': "S",
220	'ü': "u",
221	'Ü': "U",
222	'ö': "o",
223	'Ö': "O",
224	'İ': "I",
225	'ı': "i",
226	'ğ': "g",
227	'Ğ': "G",
228	'ç': "c",
229	'Ç': "C",
230}
231
232var bgSub = map[rune]string{
233	'А': "A",
234	'Б': "B",
235	'В': "V",
236	'Г': "G",
237	'Д': "D",
238	'Е': "E",
239	'Ж': "Zh",
240	'З': "Z",
241	'И': "I",
242	'Й': "Y",
243	'К': "K",
244	'Л': "L",
245	'М': "M",
246	'Н': "N",
247	'О': "O",
248	'П': "P",
249	'Р': "R",
250	'С': "S",
251	'Т': "T",
252	'У': "U",
253	'Ф': "F",
254	'Х': "H",
255	'Ц': "Ts",
256	'Ч': "Ch",
257	'Ш': "Sh",
258	'Щ': "Sh",
259	'Ъ': "A",
260	'Ь': "Y",
261	'Ю': "Yu",
262	'Я': "Ya",
263	'а': "a",
264	'б': "b",
265	'в': "v",
266	'г': "g",
267	'д': "d",
268	'е': "e",
269	'ж': "zh",
270	'з': "z",
271	'и': "i",
272	'й': "y",
273	'к': "k",
274	'л': "l",
275	'м': "m",
276	'н': "n",
277	'о': "o",
278	'п': "p",
279	'р': "r",
280	'с': "s",
281	'т': "t",
282	'у': "u",
283	'ф': "f",
284	'х': "h",
285	'ц': "ts",
286	'ч': "ch",
287	'ш': "sh",
288	'щ': "sht",
289	'ъ': "a",
290	'ь': "y",
291	'ю': "yu",
292	'я': "ya",
293}