Mercurial > gemma
view pkg/xlsx/handlebars.go @ 5655:ace5358e1527
Fix “Available fairway depth” button in BN popup.
author | Sascha Wilde <wilde@sha-bang.de> |
---|---|
date | Thu, 14 Sep 2023 18:52:18 +0200 |
parents | 0919946f624b |
children |
line wrap: on
line source
// This is Free Software under GNU Affero General Public License v >= 3.0 // without warranty, see README.md and license for details. // // SPDX-License-Identifier: AGPL-3.0-or-later // License-Filename: LICENSES/AGPL-3.0.txt // // Copyright (C) 2021 by via donau // – Österreichische Wasserstraßen-Gesellschaft mbH // Software engineering by Intevation GmbH // // Author(s): // * Sascha L. Teichmann <sascha.teichmann@intevation.de> package xlsx import "strings" func handlebars(s string, replace func(string) string) string { var ( out, repl strings.Builder mode int ) for _, c := range s { switch mode { case 0: if c == '{' { mode = 1 } else { out.WriteRune(c) } case 1: if c == '{' { mode = 2 } else { out.WriteByte('{') out.WriteRune(c) mode = 0 } case 2: switch c { case '\\': mode = 3 case '}': mode = 4 default: repl.WriteRune(c) } case 3: repl.WriteRune(c) mode = 2 case 4: if c == '}' { out.WriteString(replace(repl.String())) repl.Reset() mode = 0 } else { repl.WriteByte('}') repl.WriteRune(c) mode = 2 } } } switch mode { case 1: out.WriteByte('{') case 2: out.WriteString("{{") out.WriteString(repl.String()) case 3: out.WriteString("{{") out.WriteString(repl.String()) out.WriteByte('\\') case 4: out.WriteString("{{") out.WriteString(repl.String()) out.WriteByte('}') } return out.String() }