-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtml2.ps1
119 lines (99 loc) · 2.29 KB
/
tml2.ps1
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
function slice
{
param ([String]$word);
$arr = New-Object System.Collections.Generic.List[System.String]
$i = 0;
while ($i -lt $word.Length)
{
if ($i -lt ($word.Length - 2) -and $word[$i + 1] -eq '~')
{
$arr.Add($word.Substring($i, 3));
$i += 3;
}
else
{
$arr.Add($word.Substring($i, 1));
$i++;
}
}
return $arr
}
function cutWord
{
param ($word, $of = "");
$fn = slice "cfhjsvxyzmn";
$c = slice "bdgklprtw";
$a = slice "d~zd~jt~st~c^";
$v = slice "aeiouq-`$?`'/";
$erassocs = @{
'"' = 'k';
'!' = 'p';
'*' = 'c';
'#' = 'm';
':' = 'x';
};
[System.Collections.Generic.List[System.String]]$w = slice $word;
$i = 0;
while ($i -lt $w.Count)
{
if ($erassocs.ContainsKey($w[$i]))
{
$w[$i] = $erassocs[$w[$i]];
}
$i++;
}
if ($w[0] -in $fn -or $w[0] -in $a)
{
$w.Insert(0, '?')
}
$li = $w.Count - 1;
if ($w[$li] -in $c)
{
$w.Add('?')
}
# schwas inplace
[System.Collections.Generic.List[System.String]]$res = New-Object System.Collections.Generic.List[System.String]
$i = 0;
$cur = "";
while ($i -lt $w.Count)
{
$cur += $w[$i];
if ($w[$i] -in $v)
{
if (!($w.Count -gt $i + 1 -and ($w[$i + 1] -in $fn -or $w[$i + 1] -in $a)))
{
$res.Add($cur);
$cur = "";
}
}
else
{
if ($w[$i] -in $fn -or $w[$i] -in $a)
{
$res.Add($cur);
$cur = "";
}
}
$i++;
}
if ($cur -ne "")
{
$res.Add($cur);
}
switch ($of)
{
"csv" { $res = [string]::Join(",", $res.ToArray()); break; }
}
return $res;
}
function cut
{
param($of = "");
[System.Collections.Generic.List[System.String]]$res = New-Object System.Collections.Generic.List[System.String]
$input | % { $_.Split(' ') | % -begin { $i = 0; } { if ($i -ne 0) { $res.Add(" ") }; cutWord $_ | % { $res.Add($_) }; $i++ } }
switch ($of)
{
"csv" { $res = [string]::Join(",", $res.ToArray()); break; }
}
return $res;
}