Private Sub ReadMap(Dir As String, FileName As String) As Map
Dim res As Map
res.Initialize
For Each Line As String In File.ReadList(Dir, FileName)
Dim m As Matcher = Regex.Matcher("(?<!\\)=", Line)
Log(Line)
If m.Find Then
Dim key As String = Line.SubString2(0, m.GetEnd(0) - 1)
key = key.Replace("\=", "=").Replace("\ ", " ")
Dim value As String = Line.SubString2(m.GetStart(0) + 1, Line.Length)
value = value.Replace("\=", "=")
res.Put(UnescapeUnicode(key), UnescapeUnicode(value))
End If
Next
Return res
End Sub
Sub UnescapeUnicode(s As String) As String
Dim sb As StringBuilder
sb.Initialize
Dim i As Int
Do While i < s.Length
Dim c As Char = s.CharAt(i)
If c = "\" And i < s.Length - 1 And s.CharAt(i + 1) = "u" Then
Dim unicode As StringBuilder
unicode.Initialize
i = i + 2
Do While i < s.Length
Dim cc As String = s.CharAt(i)
Dim n As Int = Asc(cc.ToLowerCase)
If (n >= Asc("0") And n <= Asc("9")) Or (n >= Asc("a") And n <= Asc("f")) Then
unicode.Append(s.CharAt(i))
Else
i = i - 1
Exit
End If
i = i + 1
Loop
sb.Append(Chr(Bit.ParseInt(unicode.ToString, 16)))
Else
sb.Append(c)
End If
i = i + 1
Loop
Return sb.ToString
End Sub