Lines Matching full:ms

58 func (ms *MakeString) Clone() (result *MakeString) {
59 clone := *ms
63 func (ms *MakeString) Pos() Pos {
64 return ms.StringPos
67 func (ms *MakeString) End() Pos {
68 pos := ms.StringPos
69 if len(ms.Strings) > 1 {
70 pos = ms.Variables[len(ms.Variables)-1].End()
72 return Pos(int(pos) + len(ms.Strings[len(ms.Strings)-1]))
75 func (ms *MakeString) appendString(s string) {
76 if len(ms.Strings) == 0 {
77 ms.Strings = []string{s}
80 ms.Strings[len(ms.Strings)-1] += s
84 func (ms *MakeString) appendVariable(v Variable) {
85 if len(ms.Strings) == 0 {
86 ms.Strings = []string{"", ""}
87 ms.Variables = []Variable{v}
89 ms.Strings = append(ms.Strings, "")
90 ms.Variables = append(ms.Variables, v)
94 func (ms *MakeString) appendMakeString(other *MakeString) {
95 last := len(ms.Strings) - 1
96 ms.Strings[last] += other.Strings[0]
97 ms.Strings = append(ms.Strings, other.Strings[1:]...)
98 ms.Variables = append(ms.Variables, other.Variables...)
101 func (ms *MakeString) Value(scope Scope) string {
102 if len(ms.Strings) == 0 {
105 ret := unescape(ms.Strings[0])
106 for i := range ms.Strings[1:] {
107 ret += ms.Variables[i].Value(scope)
108 ret += unescape(ms.Strings[i+1])
114 func (ms *MakeString) Dump() string {
115 if len(ms.Strings) == 0 {
118 ret := ms.Strings[0]
119 for i := range ms.Strings[1:] {
120 ret += ms.Variables[i].Dump()
121 ret += ms.Strings[i+1]
127 func (ms *MakeString) Const() bool {
128 return len(ms.Strings) <= 1
131 func (ms *MakeString) Empty() bool {
132 return len(ms.Strings) == 0 || (len(ms.Strings) == 1 && ms.Strings[0] == "")
135 func (ms *MakeString) Split(sep string) []*MakeString {
136 return ms.SplitN(sep, -1)
139 func (ms *MakeString) SplitN(sep string, n int) []*MakeString {
140 return ms.splitNFunc(n, func(s string, n int) []string {
148 func (ms *MakeString) Words() []*MakeString {
158 word := SimpleMakeString("", ms.Pos())
161 if iString >= len(ms.Strings) {
163 } else if iChar >= len(ms.Strings[iString]) {
169 ch, w = utf8.DecodeRuneInString(ms.Strings[iString][iChar:])
175 if iString-1 < len(ms.Variables) {
176 word.appendVariable(ms.Variables[iString-1])
198 ms.Dump(), word.Dump(), iString))
206 word = SimpleMakeString("", ms.Pos())
226 func (ms *MakeString) splitNFunc(n int, splitFunc func(s string, n int) []string) []*MakeString {
229 curMs := SimpleMakeString("", ms.Pos())
233 for i, s = range ms.Strings {
247 curMs = SimpleMakeString(r, ms.Pos())
253 if i < len(ms.Strings)-1 {
254 curMs.appendVariable(ms.Variables[i])
262 func (ms *MakeString) TrimLeftSpaces() {
263 l := len(ms.Strings[0])
264 ms.Strings[0] = strings.TrimLeftFunc(ms.Strings[0], unicode.IsSpace)
265 ms.StringPos += Pos(len(ms.Strings[0]) - l)
268 func (ms *MakeString) TrimRightSpaces() {
269 last := len(ms.Strings) - 1
270 ms.Strings[last] = strings.TrimRightFunc(ms.Strings[last], unicode.IsSpace)
273 func (ms *MakeString) TrimRightOne() {
274 last := len(ms.Strings) - 1
275 if len(ms.Strings[last]) > 1 {
276 ms.Strings[last] = ms.Strings[last][0 : len(ms.Strings[last])-1]
280 func (ms *MakeString) EndsWith(ch rune) bool {
281 s := ms.Strings[len(ms.Strings)-1]
285 func (ms *MakeString) ReplaceLiteral(input string, output string) {
286 for i := range ms.Strings {
287 ms.Strings[i] = strings.Replace(ms.Strings[i], input, output, -1)
292 func (ms *MakeString) SingleVariable() (*MakeString, bool) {
293 if len(ms.Strings) != 2 || strings.TrimSpace(ms.Strings[0]) != "" ||
294 strings.TrimSpace(ms.Strings[1]) != "" {
297 return ms.Variables[0].Name, true