normalizespaceFunc is XPath functions normalize-space(string?)
(arg1 query)
| 410 | |
| 411 | // normalizespaceFunc is XPath functions normalize-space(string?) |
| 412 | func normalizespaceFunc(arg1 query) func(query, iterator) interface{} { |
| 413 | return func(_ query, t iterator) interface{} { |
| 414 | var m string |
| 415 | switch typ := functionArgs(arg1).Evaluate(t).(type) { |
| 416 | case string: |
| 417 | m = typ |
| 418 | case query: |
| 419 | node := typ.Select(t) |
| 420 | if node == nil { |
| 421 | return "" |
| 422 | } |
| 423 | m = node.Value() |
| 424 | } |
| 425 | var b = builderPool.Get().(stringBuilder) |
| 426 | b.Grow(len(m)) |
| 427 | |
| 428 | runeStr := []rune(strings.TrimSpace(m)) |
| 429 | l := len(runeStr) |
| 430 | for i := range runeStr { |
| 431 | r := runeStr[i] |
| 432 | isSpace := unicode.IsSpace(r) |
| 433 | if !(isSpace && (i+1 < l && unicode.IsSpace(runeStr[i+1]))) { |
| 434 | if isSpace { |
| 435 | r = ' ' |
| 436 | } |
| 437 | b.WriteRune(r) |
| 438 | } |
| 439 | } |
| 440 | result := b.String() |
| 441 | b.Reset() |
| 442 | builderPool.Put(b) |
| 443 | |
| 444 | return result |
| 445 | } |
| 446 | } |
| 447 | |
| 448 | // substringFunc is XPath functions substring function returns a part of a given string. |
| 449 | func substringFunc(arg1, arg2, arg3 query) func(query, iterator) interface{} { |
searching dependent graphs…