@@ -48,6 +48,7 @@ type RenderContext struct {
48
48
type Renderer interface {
49
49
Name () string // markup format name
50
50
Extensions () []string
51
+ NeedPostProcess () bool
51
52
Render (ctx * RenderContext , input io.Reader , output io.Writer ) error
52
53
}
53
54
@@ -94,7 +95,7 @@ func RenderString(ctx *RenderContext, content string) (string, error) {
94
95
return buf .String (), nil
95
96
}
96
97
97
- func render (ctx * RenderContext , parser Renderer , input io.Reader , output io.Writer ) error {
98
+ func render (ctx * RenderContext , renderer Renderer , input io.Reader , output io.Writer ) error {
98
99
var wg sync.WaitGroup
99
100
var err error
100
101
pr , pw := io .Pipe ()
@@ -103,29 +104,38 @@ func render(ctx *RenderContext, parser Renderer, input io.Reader, output io.Writ
103
104
_ = pw .Close ()
104
105
}()
105
106
106
- pr2 , pw2 := io .Pipe ()
107
- defer func () {
108
- _ = pr2 .Close ()
109
- _ = pw2 .Close ()
110
- }()
111
-
112
- wg .Add (1 )
113
- go func () {
114
- buf := SanitizeReader (pr2 )
115
- _ , err = io .Copy (output , buf )
116
- _ = pr2 .Close ()
117
- wg .Done ()
118
- }()
119
-
120
- wg .Add (1 )
121
- go func () {
122
- err = PostProcess (ctx , pr , pw2 )
123
- _ = pr .Close ()
124
- _ = pw2 .Close ()
125
- wg .Done ()
126
- }()
127
-
128
- if err1 := parser .Render (ctx , input , pw ); err1 != nil {
107
+ if renderer .NeedPostProcess () {
108
+ pr2 , pw2 := io .Pipe ()
109
+ defer func () {
110
+ _ = pr2 .Close ()
111
+ _ = pw2 .Close ()
112
+ }()
113
+
114
+ wg .Add (1 )
115
+ go func () {
116
+ buf := SanitizeReader (pr2 )
117
+ _ , err = io .Copy (output , buf )
118
+ _ = pr2 .Close ()
119
+ wg .Done ()
120
+ }()
121
+
122
+ wg .Add (1 )
123
+ go func () {
124
+ err = PostProcess (ctx , pr , pw2 )
125
+ _ = pr .Close ()
126
+ _ = pw2 .Close ()
127
+ wg .Done ()
128
+ }()
129
+ } else {
130
+ wg .Add (1 )
131
+ go func () {
132
+ buf := SanitizeReader (pr )
133
+ _ , err = io .Copy (output , buf )
134
+ _ = pr .Close ()
135
+ wg .Done ()
136
+ }()
137
+ }
138
+ if err1 := renderer .Render (ctx , input , pw ); err1 != nil {
129
139
return err1
130
140
}
131
141
_ = pw .Close ()
0 commit comments