Skip to content

Commit f4e54be

Browse files
authored
Merge pull request #5 from liamg/liamg-add-disable-option
Add func to disable all formatting output
2 parents 9825b59 + b3edfef commit f4e54be

File tree

3 files changed

+57
-8
lines changed

3 files changed

+57
-8
lines changed

disable.go

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package tml
2+
3+
import "sync"
4+
5+
var disableFormatting bool
6+
var formattingLock sync.RWMutex
7+
8+
func DisableFormatting() {
9+
formattingLock.Lock()
10+
defer formattingLock.Unlock()
11+
disableFormatting = true
12+
}
13+
14+
func EnableFormatting() {
15+
formattingLock.Lock()
16+
defer formattingLock.Unlock()
17+
disableFormatting = false
18+
}

disable_test.go

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package tml
2+
3+
import (
4+
"testing"
5+
6+
"github.com/stretchr/testify/assert"
7+
"github.com/stretchr/testify/require"
8+
)
9+
10+
func TestParseWithFormattingDisabled(t *testing.T) {
11+
DisableFormatting()
12+
defer EnableFormatting()
13+
output, err := Parse("plain <red>red <bold>bold red</bold></red> plain <green>green</green> plain")
14+
require.Nil(t, err)
15+
assert.Equal(t, "plain red bold red plain green plain", output)
16+
}

parser.go

Lines changed: 23 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -93,30 +93,42 @@ func (p *Parser) handleTag(name string) bool {
9393
if strings.HasPrefix(name, "/") {
9494
name = name[1:]
9595
if _, isFg := fgTags[name]; isFg {
96-
p.writer.Write([]byte(p.state.setFg(resetFg)))
96+
if !disableFormatting {
97+
p.writer.Write([]byte(p.state.setFg(resetFg)))
98+
}
9799
return true
98100
} else if _, isBg := bgTags[name]; isBg {
99-
p.writer.Write([]byte(p.state.setBg(resetBg)))
101+
if !disableFormatting {
102+
p.writer.Write([]byte(p.state.setBg(resetBg)))
103+
}
100104
return true
101105
} else if attr, isAttr := attrTags[name]; isAttr {
102-
p.writer.Write([]byte(p.state.setAttr(-int8(attr))))
106+
if !disableFormatting {
107+
p.writer.Write([]byte(p.state.setAttr(-int8(attr))))
108+
}
103109
return true
104110
}
105111
return false
106112
}
107113

108114
if esc, ok := fgTags[name]; ok {
109-
p.writer.Write([]byte(p.state.setFg(esc)))
115+
if !disableFormatting {
116+
p.writer.Write([]byte(p.state.setFg(esc)))
117+
}
110118
return true
111119
}
112120

113121
if esc, ok := bgTags[name]; ok {
114-
p.writer.Write([]byte(p.state.setBg(esc)))
122+
if !disableFormatting {
123+
p.writer.Write([]byte(p.state.setBg(esc)))
124+
}
115125
return true
116126
}
117127

118128
if attr, ok := attrTags[name]; ok {
119-
p.writer.Write([]byte(p.state.setAttr(int8(attr))))
129+
if !disableFormatting {
130+
p.writer.Write([]byte(p.state.setAttr(int8(attr))))
131+
}
120132
return true
121133
}
122134

@@ -126,9 +138,12 @@ func (p *Parser) handleTag(name string) bool {
126138
// Parse takes input from the reader and converts any provided tags to the relevant ANSI escape codes for output to parser's writer.
127139
func (p *Parser) Parse(reader io.Reader) error {
128140

141+
formattingLock.RLock()
142+
defer formattingLock.RUnlock()
143+
129144
buffer := make([]byte, 1024)
130145

131-
if p.IncludeLeadingResets {
146+
if p.IncludeLeadingResets && !disableFormatting {
132147
if _, err := p.writer.Write([]byte(resetAll)); err != nil {
133148
return err
134149
}
@@ -169,7 +184,7 @@ func (p *Parser) Parse(reader io.Reader) error {
169184
}
170185
}
171186

172-
if p.IncludeTrailingResets {
187+
if p.IncludeTrailingResets && !disableFormatting {
173188
p.writer.Write([]byte(resetAll))
174189
}
175190

0 commit comments

Comments
 (0)