add string_suffixreplace type
parent
e30a94a934
commit
41990aefe4
|
@ -2,9 +2,12 @@ package mapping
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"errors"
|
"errors"
|
||||||
|
"fmt"
|
||||||
"goposm/element"
|
"goposm/element"
|
||||||
"log"
|
"log"
|
||||||
|
"regexp"
|
||||||
"strconv"
|
"strconv"
|
||||||
|
"strings"
|
||||||
)
|
)
|
||||||
|
|
||||||
var AvailableFieldTypes map[string]FieldType
|
var AvailableFieldTypes map[string]FieldType
|
||||||
|
@ -23,6 +26,7 @@ func init() {
|
||||||
"wayzorder": {"wayzorder", "int32", WayZOrder, nil},
|
"wayzorder": {"wayzorder", "int32", WayZOrder, nil},
|
||||||
"pseudoarea": {"pseudoarea", "float32", PseudoArea, nil},
|
"pseudoarea": {"pseudoarea", "float32", PseudoArea, nil},
|
||||||
"zorder": {"zorder", "int32", nil, MakeZOrder},
|
"zorder": {"zorder", "int32", nil, MakeZOrder},
|
||||||
|
"string_suffixreplace": {"string_suffixreplace", "string", nil, MakeSuffixReplace},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -194,7 +198,6 @@ func WayZOrder(val string, elem *element.OSMElem, match Match) interface{} {
|
||||||
}
|
}
|
||||||
|
|
||||||
func MakeZOrder(fieldName string, fieldType FieldType, field Field) (MakeValue, error) {
|
func MakeZOrder(fieldName string, fieldType FieldType, field Field) (MakeValue, error) {
|
||||||
ranks := make(map[string]int)
|
|
||||||
_rankList, ok := field.Args["ranks"]
|
_rankList, ok := field.Args["ranks"]
|
||||||
if !ok {
|
if !ok {
|
||||||
return nil, errors.New("missing ranks in args for zorder")
|
return nil, errors.New("missing ranks in args for zorder")
|
||||||
|
@ -205,6 +208,7 @@ func MakeZOrder(fieldName string, fieldType FieldType, field Field) (MakeValue,
|
||||||
return nil, errors.New("ranks in args for zorder not a list")
|
return nil, errors.New("ranks in args for zorder not a list")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ranks := make(map[string]int)
|
||||||
for i, rank := range rankList {
|
for i, rank := range rankList {
|
||||||
rankName, ok := rank.(string)
|
rankName, ok := rank.(string)
|
||||||
if !ok {
|
if !ok {
|
||||||
|
@ -222,3 +226,36 @@ func MakeZOrder(fieldName string, fieldType FieldType, field Field) (MakeValue,
|
||||||
|
|
||||||
return zOrder, nil
|
return zOrder, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func MakeSuffixReplace(fieldName string, fieldType FieldType, field Field) (MakeValue, error) {
|
||||||
|
_changes, ok := field.Args["suffixes"]
|
||||||
|
if !ok {
|
||||||
|
return nil, errors.New("missing suffixes in args for string_suffixreplace")
|
||||||
|
}
|
||||||
|
fmt.Printf("%#v\n", _changes)
|
||||||
|
|
||||||
|
changes, ok := _changes.(map[string]string)
|
||||||
|
if !ok {
|
||||||
|
return nil, errors.New("suffixes in args for string_suffixreplace not a list")
|
||||||
|
}
|
||||||
|
|
||||||
|
var suffixes []string
|
||||||
|
for k, _ := range changes {
|
||||||
|
suffixes = append(suffixes, k)
|
||||||
|
}
|
||||||
|
reStr := `(` + strings.Join(suffixes, "|") + `)\b`
|
||||||
|
re := regexp.MustCompile(reStr)
|
||||||
|
|
||||||
|
replFunc := func(match string) string {
|
||||||
|
return changes[match]
|
||||||
|
}
|
||||||
|
|
||||||
|
suffixReplace := func(val string, elem *element.OSMElem, match Match) interface{} {
|
||||||
|
if val != "" {
|
||||||
|
return re.ReplaceAllStringFunc(val, replFunc)
|
||||||
|
}
|
||||||
|
return val
|
||||||
|
}
|
||||||
|
|
||||||
|
return suffixReplace, nil
|
||||||
|
}
|
||||||
|
|
|
@ -35,3 +35,24 @@ func TestBool(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestMakeSuffixReplace(t *testing.T) {
|
||||||
|
field := Field{
|
||||||
|
"name", "name", "string_suffixreplace",
|
||||||
|
map[string]interface{}{"suffixes": map[string]string{"Straße": "Str.", "straße": "str."}}}
|
||||||
|
suffixReplace, err := MakeSuffixReplace("name", FieldType{}, field)
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
if result := suffixReplace("Hauptstraße", nil, Match{}); result != "Hauptstr." {
|
||||||
|
t.Fatal(result)
|
||||||
|
}
|
||||||
|
if result := suffixReplace("", nil, Match{}); result != "" {
|
||||||
|
t.Fatal(result)
|
||||||
|
}
|
||||||
|
if result := suffixReplace("Foostraßeee", nil, Match{}); result != "Foostraßeee" {
|
||||||
|
t.Fatal(result)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue