-
Notifications
You must be signed in to change notification settings - Fork 0
/
main.tf
123 lines (117 loc) · 11.4 KB
/
main.tf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
// Inputs
variable "string" {
description = "String to normalize."
type = string
}
// Computations
// Adapted from http://web.archive.org/web/20120918093154/http://lehelk.com/2011/05/06/script-to-remove-diacritics/
locals {
latin_cap_A = replace(var.string, "/\u0041|\u24B6|\uFF21|\u00C0|\u00C1|\u00C2|\u1EA6|\u1EA4|\u1EAA|\u1EA8|\u00C3|\u0100|\u0102|\u1EB0|\u1EAE|\u1EB4|\u1EB2|\u0226|\u01E0|\u00C4|\u01DE|\u1EA2|\u00C5|\u01FA|\u01CD|\u0200|\u0202|\u1EA0|\u1EAC|\u1EB6|\u1E00|\u0104|\u023A|\u2C6F/", "A")
latin_cap_AA = replace(local.latin_cap_A, "/\uA732/", "AA")
latin_cap_AE = replace(local.latin_cap_AA, "/\u00C6|\u01FC|\u01E2/", "AE")
latin_cap_AO = replace(local.latin_cap_AE, "/\uA734/", "AO")
latin_cap_AU = replace(local.latin_cap_AO, "/\uA736/", "AU")
latin_cap_AV = replace(local.latin_cap_AU, "/\uA738|\uA73A/", "AV")
latin_cap_AY = replace(local.latin_cap_AV, "/\uA73C/", "AY")
latin_cap_B = replace(local.latin_cap_AY, "/\u0042|\u24B7|\uFF22|\u1E02|\u1E04|\u1E06|\u0243|\u0182|\u0181/", "B")
latin_cap_C = replace(local.latin_cap_B, "/\u0043|\u24B8|\uFF23|\u0106|\u0108|\u010A|\u010C|\u00C7|\u1E08|\u0187|\u023B|\uA73E/", "C")
latin_cap_D = replace(local.latin_cap_C, "/\u0044|\u24B9|\uFF24|\u1E0A|\u010E|\u1E0C|\u1E10|\u1E12|\u1E0E|\u0110|\u018B|\u018A|\u0189|\uA779|\u00D0/", "D")
latin_cap_DZ = replace(local.latin_cap_D, "/\u01F1|\u01C4/", "DZ")
latin_cap_D_z = replace(local.latin_cap_DZ, "/\u01F2|\u01C5/", "Dz")
latin_cap_E = replace(local.latin_cap_D_z, "/\u0045|\u24BA|\uFF25|\u00C8|\u00C9|\u00CA|\u1EC0|\u1EBE|\u1EC4|\u1EC2|\u1EBC|\u0112|\u1E14|\u1E16|\u0114|\u0116|\u00CB|\u1EBA|\u011A|\u0204|\u0206|\u1EB8|\u1EC6|\u0228|\u1E1C|\u0118|\u1E18|\u1E1A|\u0190|\u018E/", "E")
latin_cap_F = replace(local.latin_cap_E, "/\u0046|\u24BB|\uFF26|\u1E1E|\u0191|\uA77B/", "F")
latin_cap_G = replace(local.latin_cap_F, "/\u0047|\u24BC|\uFF27|\u01F4|\u011C|\u1E20|\u011E|\u0120|\u01E6|\u0122|\u01E4|\u0193|\uA7A0|\uA77D|\uA77E/", "G")
latin_cap_H = replace(local.latin_cap_G, "/\u0048|\u24BD|\uFF28|\u0124|\u1E22|\u1E26|\u021E|\u1E24|\u1E28|\u1E2A|\u0126|\u2C67|\u2C75|\uA78D/", "H")
latin_cap_I = replace(local.latin_cap_H, "/\u0049|\u24BE|\uFF29|\u00CC|\u00CD|\u00CE|\u0128|\u012A|\u012C|\u0130|\u00CF|\u1E2E|\u1EC8|\u01CF|\u0208|\u020A|\u1ECA|\u012E|\u1E2C|\u0197/", "I")
latin_cap_J = replace(local.latin_cap_I, "/\u004A|\u24BF|\uFF2A|\u0134|\u0248/", "J")
latin_cap_K = replace(local.latin_cap_J, "/\u004B|\u24C0|\uFF2B|\u1E30|\u01E8|\u1E32|\u0136|\u1E34|\u0198|\u2C69|\uA740|\uA742|\uA744|\uA7A2/", "K")
latin_cap_L = replace(local.latin_cap_K, "/\u004C|\u24C1|\uFF2C|\u013F|\u0139|\u013D|\u1E36|\u1E38|\u013B|\u1E3C|\u1E3A|\u0141|\u023D|\u2C62|\u2C60|\uA748|\uA746|\uA780/", "L")
latin_cap_LJ = replace(local.latin_cap_L, "/\u01C7/", "LJ")
latin_cap_L_j = replace(local.latin_cap_LJ, "/\u01C8/", "Lj")
latin_cap_M = replace(local.latin_cap_L_j, "/\u004D|\u24C2|\uFF2D|\u1E3E|\u1E40|\u1E42|\u2C6E|\u019C/", "M")
latin_cap_N = replace(local.latin_cap_M, "/\u004E|\u24C3|\uFF2E|\u01F8|\u0143|\u00D1|\u1E44|\u0147|\u1E46|\u0145|\u1E4A|\u1E48|\u0220|\u019D|\uA790|\uA7A4/", "N")
latin_cap_NJ = replace(local.latin_cap_N, "/\u01CA/", "NJ")
latin_cap_N_j = replace(local.latin_cap_NJ, "/\u01CB/", "Nj")
latin_cap_O = replace(local.latin_cap_N_j, "/\u004F|\u24C4|\uFF2F|\u00D2|\u00D3|\u00D4|\u1ED2|\u1ED0|\u1ED6|\u1ED4|\u00D5|\u1E4C|\u022C|\u1E4E|\u014C|\u1E50|\u1E52|\u014E|\u022E|\u0230|\u00D6|\u022A|\u1ECE|\u0150|\u01D1|\u020C|\u020E|\u01A0|\u1EDC|\u1EDA|\u1EE0|\u1EDE|\u1EE2|\u1ECC|\u1ED8|\u01EA|\u01EC|\u00D8|\u01FE|\u0186|\u019F|\uA74A|\uA74C/", "O")
latin_cap_OI = replace(local.latin_cap_O, "/\u01A2/", "OI")
latin_cap_OO = replace(local.latin_cap_OI, "/\uA74E/", "OO")
latin_cap_OU = replace(local.latin_cap_OO, "/\u0222/", "OU")
latin_cap_OE = replace(local.latin_cap_OU, "/\u008C|\u0152/", "OE")
latin_cap_P = replace(local.latin_cap_OE, "/\u0050|\u24C5|\uFF30|\u1E54|\u1E56|\u01A4|\u2C63|\uA750|\uA752|\uA754/", "P")
latin_cap_Q = replace(local.latin_cap_P, "/\u0051|\u24C6|\uFF31|\uA756|\uA758|\u024A/", "Q")
latin_cap_R = replace(local.latin_cap_Q, "/\u0052|\u24C7|\uFF32|\u0154|\u1E58|\u0158|\u0210|\u0212|\u1E5A|\u1E5C|\u0156|\u1E5E|\u024C|\u2C64|\uA75A|\uA7A6|\uA782/", "R")
latin_cap_S = replace(local.latin_cap_R, "/\u0053|\u24C8|\uFF33|\u1E9E|\u015A|\u1E64|\u015C|\u1E60|\u0160|\u1E66|\u1E62|\u1E68|\u0218|\u015E|\u2C7E|\uA7A8|\uA784/", "S")
latin_cap_T = replace(local.latin_cap_S, "/\u0054|\u24C9|\uFF34|\u1E6A|\u0164|\u1E6C|\u021A|\u0162|\u1E70|\u1E6E|\u0166|\u01AC|\u01AE|\u023E|\uA786/", "T")
latin_cap_TZ = replace(local.latin_cap_T, "/\uA728/", "TZ")
latin_cap_U = replace(local.latin_cap_TZ, "/\u0055|\u24CA|\uFF35|\u00D9|\u00DA|\u00DB|\u0168|\u1E78|\u016A|\u1E7A|\u016C|\u00DC|\u01DB|\u01D7|\u01D5|\u01D9|\u1EE6|\u016E|\u0170|\u01D3|\u0214|\u0216|\u01AF|\u1EEA|\u1EE8|\u1EEE|\u1EEC|\u1EF0|\u1EE4|\u1E72|\u0172|\u1E76|\u1E74|\u0244/", "U")
latin_cap_V = replace(local.latin_cap_U, "/\u0056|\u24CB|\uFF36|\u1E7C|\u1E7E|\u01B2|\uA75E|\u0245/", "V")
latin_cap_VY = replace(local.latin_cap_V, "/\uA760/", "VY")
latin_cap_W = replace(local.latin_cap_VY, "/\u0057|\u24CC|\uFF37|\u1E80|\u1E82|\u0174|\u1E86|\u1E84|\u1E88|\u2C72/", "W")
latin_cap_X = replace(local.latin_cap_W, "/\u0058|\u24CD|\uFF38|\u1E8A|\u1E8C/", "X")
latin_cap_Y = replace(local.latin_cap_X, "/\u0059|\u24CE|\uFF39|\u1EF2|\u00DD|\u0176|\u1EF8|\u0232|\u1E8E|\u0178|\u1EF6|\u1EF4|\u01B3|\u024E|\u1EFE/", "Y")
latin_cap_Z = replace(local.latin_cap_Y, "/\u005A|\u24CF|\uFF3A|\u0179|\u1E90|\u017B|\u017D|\u1E92|\u1E94|\u01B5|\u0224|\u2C7F|\u2C6B|\uA762/", "Z")
latin_a = replace(local.latin_cap_Z, "/\u0061|\u24D0|\uFF41|\u1E9A|\u00E0|\u00E1|\u00E2|\u1EA7|\u1EA5|\u1EAB|\u1EA9|\u00E3|\u0101|\u0103|\u1EB1|\u1EAF|\u1EB5|\u1EB3|\u0227|\u01E1|\u00E4|\u01DF|\u1EA3|\u00E5|\u01FB|\u01CE|\u0201|\u0203|\u1EA1|\u1EAD|\u1EB7|\u1E01|\u0105|\u2C65|\u0250/", "a")
latin_aa = replace(local.latin_a, "/\uA733/", "aa")
latin_ae = replace(local.latin_aa, "/\u00E6|\u01FD|\u01E3/", "ae")
latin_ao = replace(local.latin_ae, "/\uA735/", "ao")
latin_au = replace(local.latin_ao, "/\uA737/", "au")
latin_av = replace(local.latin_au, "/\uA739|\uA73B/", "av")
latin_ay = replace(local.latin_av, "/\uA73D/", "ay")
latin_b = replace(local.latin_ay, "/\u0062|\u24D1|\uFF42|\u1E03|\u1E05|\u1E07|\u0180|\u0183|\u0253/", "b")
latin_c = replace(local.latin_b, "/\u0063|\u24D2|\uFF43|\u0107|\u0109|\u010B|\u010D|\u00E7|\u1E09|\u0188|\u023C|\uA73F|\u2184/", "c")
latin_d = replace(local.latin_c, "/\u0064|\u24D3|\uFF44|\u1E0B|\u010F|\u1E0D|\u1E11|\u1E13|\u1E0F|\u0111|\u018C|\u0256|\u0257|\uA77A/", "d")
latin_dz = replace(local.latin_d, "/\u01F3|\u01C6/", "dz")
latin_e = replace(local.latin_dz, "/\u0065|\u24D4|\uFF45|\u00E8|\u00E9|\u00EA|\u1EC1|\u1EBF|\u1EC5|\u1EC3|\u1EBD|\u0113|\u1E15|\u1E17|\u0115|\u0117|\u00EB|\u1EBB|\u011B|\u0205|\u0207|\u1EB9|\u1EC7|\u0229|\u1E1D|\u0119|\u1E19|\u1E1B|\u0247|\u025B|\u01DD/", "e")
latin_f = replace(local.latin_e, "/\u0066|\u24D5|\uFF46|\u1E1F|\u0192|\uA77C/", "f")
latin_g = replace(local.latin_f, "/\u0067|\u24D6|\uFF47|\u01F5|\u011D|\u1E21|\u011F|\u0121|\u01E7|\u0123|\u01E5|\u0260|\uA7A1|\u1D79|\uA77F/", "g")
latin_h = replace(local.latin_g, "/\u0068|\u24D7|\uFF48|\u0125|\u1E23|\u1E27|\u021F|\u1E25|\u1E29|\u1E2B|\u1E96|\u0127|\u2C68|\u2C76|\u0265/", "h")
latin_hv = replace(local.latin_h, "/\u0195/", "hv")
latin_i = replace(local.latin_hv, "/\u0069|\u24D8|\uFF49|\u00EC|\u00ED|\u00EE|\u0129|\u012B|\u012D|\u00EF|\u1E2F|\u1EC9|\u01D0|\u0209|\u020B|\u1ECB|\u012F|\u1E2D|\u0268|\u0131/", "i")
latin_j = replace(local.latin_i, "/\u006A|\u24D9|\uFF4A|\u0135|\u01F0|\u0249/", "j")
latin_k = replace(local.latin_j, "/\u006B|\u24DA|\uFF4B|\u1E31|\u01E9|\u1E33|\u0137|\u1E35|\u0199|\u2C6A|\uA741|\uA743|\uA745|\uA7A3/", "k")
latin_l = replace(local.latin_k, "/\u006C|\u24DB|\uFF4C|\u0140|\u013A|\u013E|\u1E37|\u1E39|\u013C|\u1E3D|\u1E3B|\u017F|\u0142|\u019A|\u026B|\u2C61|\uA749|\uA781|\uA747/", "l")
latin_lj = replace(local.latin_l, "/\u01C9/", "lj")
latin_m = replace(local.latin_lj, "/\u006D|\u24DC|\uFF4D|\u1E3F|\u1E41|\u1E43|\u0271|\u026F/", "m")
latin_n = replace(local.latin_m, "/\u006E|\u24DD|\uFF4E|\u01F9|\u0144|\u00F1|\u1E45|\u0148|\u1E47|\u0146|\u1E4B|\u1E49|\u019E|\u0272|\u0149|\uA791|\uA7A5/", "n")
latin_nj = replace(local.latin_n, "/\u01CC/", "nj")
latin_o = replace(local.latin_nj, "/\u006F|\u24DE|\uFF4F|\u00F2|\u00F3|\u00F4|\u1ED3|\u1ED1|\u1ED7|\u1ED5|\u00F5|\u1E4D|\u022D|\u1E4F|\u014D|\u1E51|\u1E53|\u014F|\u022F|\u0231|\u00F6|\u022B|\u1ECF|\u0151|\u01D2|\u020D|\u020F|\u01A1|\u1EDD|\u1EDB|\u1EE1|\u1EDF|\u1EE3|\u1ECD|\u1ED9|\u01EB|\u01ED|\u00F8|\u01FF|\u0254|\uA74B|\uA74D|\u0275/", "o")
latin_oe = replace(local.latin_o, "/\u009C|\u0153/", "oe")
latin_oi = replace(local.latin_oe, "/\u01A3/", "oi")
latin_ou = replace(local.latin_oi, "/\u0223/", "ou")
latin_oo = replace(local.latin_ou, "/\uA74F/", "oo")
latin_p = replace(local.latin_oo, "/\u0070|\u24DF|\uFF50|\u1E55|\u1E57|\u01A5|\u1D7D|\uA751|\uA753|\uA755/", "p")
latin_q = replace(local.latin_p, "/\u0071|\u24E0|\uFF51|\u024B|\uA757|\uA759/", "q")
latin_r = replace(local.latin_q, "/\u0072|\u24E1|\uFF52|\u0155|\u1E59|\u0159|\u0211|\u0213|\u1E5B|\u1E5D|\u0157|\u1E5F|\u024D|\u027D|\uA75B|\uA7A7|\uA783/", "r")
latin_s = replace(local.latin_r, "/\u0073|\u24E2|\uFF53|\u00DF|\u015B|\u1E65|\u015D|\u1E61|\u0161|\u1E67|\u1E63|\u1E69|\u0219|\u015F|\u023F|\uA7A9|\uA785|\u1E9B/", "s")
latin_t = replace(local.latin_s, "/\u0074|\u24E3|\uFF54|\u1E6B|\u1E97|\u0165|\u1E6D|\u021B|\u0163|\u1E71|\u1E6F|\u0167|\u01AD|\u0288|\u2C66|\uA787/", "t")
latin_tz = replace(local.latin_t, "/\uA729/", "tz")
latin_u = replace(local.latin_tz, "/\u0075|\u24E4|\uFF55|\u00F9|\u00FA|\u00FB|\u0169|\u1E79|\u016B|\u1E7B|\u016D|\u00FC|\u01DC|\u01D8|\u01D6|\u01DA|\u1EE7|\u016F|\u0171|\u01D4|\u0215|\u0217|\u01B0|\u1EEB|\u1EE9|\u1EEF|\u1EED|\u1EF1|\u1EE5|\u1E73|\u0173|\u1E77|\u1E75|\u0289/", "u")
latin_v = replace(local.latin_u, "/\u0076|\u24E5|\uFF56|\u1E7D|\u1E7F|\u028B|\uA75F|\u028C/", "v")
latin_vy = replace(local.latin_v, "/\uA761/", "vy")
latin_w = replace(local.latin_vy, "/\u0077|\u24E6|\uFF57|\u1E81|\u1E83|\u0175|\u1E87|\u1E85|\u1E98|\u1E89|\u2C73/", "w")
latin_x = replace(local.latin_w, "/\u0078|\u24E7|\uFF58|\u1E8B|\u1E8D/", "x")
latin_y = replace(local.latin_x, "/\u0079|\u24E8|\uFF59|\u1EF3|\u00FD|\u0177|\u1EF9|\u0233|\u1E8F|\u00FF|\u1EF7|\u1E99|\u1EF5|\u01B4|\u024F|\u1EFF/", "y")
latinized = replace(local.latin_y, "/\u007A|\u24E9|\uFF5A|\u017A|\u1E91|\u017C|\u017E|\u1E93|\u1E95|\u01B6|\u0225|\u0240|\u2C6C|\uA763/", "z")
normalized = replace(local.latinized, "/[^a-zA-Z0-9-]/", "")
}
// Outputs
output "latinized" {
description = "Latinized string (only special letters have been replaced)."
value = local.latinized
}
output "normalized" {
description = "Normalized string (special letters replaced and trimmed of other symbold except numbers and '-')."
value = local.normalized
}
output "lower" {
description = "Normalized string in lower case."
value = lower(local.normalized)
}
output "upper" {
description = "Normalized string in upper case."
value = upper(local.normalized)
}
output "title" {
description = "Normalized string in title case."
value = title(local.normalized)
}