Skip to content

Commit 82ad366

Browse files
committed
Added debugging to ExpandPropsInString
1 parent b3e0015 commit 82ad366

File tree

2 files changed

+76
-21
lines changed

2 files changed

+76
-21
lines changed

Diff for: debug.go

+72
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
/*
2+
* This file is part of PropertiesOrderedMap library.
3+
*
4+
* Copyright 2017-2018 Arduino AG (http://www.arduino.cc/)
5+
*
6+
* PropertiesMap library is free software; you can redistribute it and/or modify
7+
* it under the terms of the GNU General Public License as published by
8+
* the Free Software Foundation; either version 2 of the License, or
9+
* (at your option) any later version.
10+
*
11+
* This program is distributed in the hope that it will be useful,
12+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
13+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14+
* GNU General Public License for more details.
15+
*
16+
* You should have received a copy of the GNU General Public License
17+
* along with this program; if not, write to the Free Software
18+
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
19+
*
20+
* As a special exception, you may use this file as part of a free software
21+
* library without restriction. Specifically, if other files instantiate
22+
* templates or use macros or inline functions from this file, or you compile
23+
* this file and link it with other files to produce an executable, this
24+
* file does not by itself cause the resulting executable to be covered by
25+
* the GNU General Public License. This exception does not however
26+
* invalidate any other reasons why the executable file might be covered by
27+
* the GNU General Public License.
28+
*/
29+
30+
package properties
31+
32+
import (
33+
"fmt"
34+
"strings"
35+
)
36+
37+
// DebugExpandPropsInString output the substitutions made by
38+
// ExpandPropsInString for debugging purposes.
39+
func (m *Map) DebugExpandPropsInString(str string) string {
40+
return m.expandProps(str, true)
41+
}
42+
43+
func (m *Map) expandProps(str string, debug bool) string {
44+
debug = debug || m.Debug
45+
for i := 0; i < 10; i++ {
46+
if debug {
47+
fmt.Printf("pass %d: %s\n", i, str)
48+
}
49+
newStr := str
50+
for key, value := range m.kv {
51+
if debug && strings.Contains(newStr, "{"+key+"}") {
52+
fmt.Printf(" Replacing %s -> %s\n", key, value)
53+
}
54+
newStr = strings.Replace(newStr, "{"+key+"}", value, -1)
55+
}
56+
if str == newStr {
57+
break
58+
}
59+
str = newStr
60+
}
61+
return str
62+
}
63+
64+
// Dump returns a representation of the map in golang source format
65+
func (m *Map) Dump() string {
66+
res := "properties.Map{\n"
67+
for _, k := range m.o {
68+
res += fmt.Sprintf(" \"%s\": \"%s\",\n", strings.Replace(k, `"`, `\"`, -1), strings.Replace(m.Get(k), `"`, `\"`, -1))
69+
}
70+
res += "}"
71+
return res
72+
}

Diff for: properties.go

+4-21
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,9 @@ import (
8484
type Map struct {
8585
kv map[string]string
8686
o []string
87+
88+
// Debug if set to true ExpandPropsInString will always output debugging information
89+
Debug bool
8790
}
8891

8992
var osSuffix string
@@ -379,17 +382,7 @@ func (m *Map) SubTree(rootKey string) *Map {
379382
// The values in the Map may contains other markers, they are evaluated
380383
// recursively up to 10 times.
381384
func (m *Map) ExpandPropsInString(str string) string {
382-
for i := 0; i < 10; i++ {
383-
newStr := str
384-
for key, value := range m.kv {
385-
newStr = strings.Replace(newStr, "{"+key+"}", value, -1)
386-
}
387-
if str == newStr {
388-
break
389-
}
390-
str = newStr
391-
}
392-
return str
385+
return m.expandProps(str, false)
393386
}
394387

395388
// Merge merges other Maps into this one. Each key/value of the merged Maps replaces
@@ -463,13 +456,3 @@ func DeleteUnexpandedPropsFromString(str string) string {
463456
rxp := regexp.MustCompile("\\{.+?\\}")
464457
return rxp.ReplaceAllString(str, "")
465458
}
466-
467-
// Dump returns a representation of the map in golang source format
468-
func (m *Map) Dump() string {
469-
res := "properties.Map{\n"
470-
for _, k := range m.o {
471-
res += fmt.Sprintf(" \"%s\": \"%s\",\n", strings.Replace(k, `"`, `\"`, -1), strings.Replace(m.Get(k), `"`, `\"`, -1))
472-
}
473-
res += "}"
474-
return res
475-
}

0 commit comments

Comments
 (0)