@@ -157,14 +157,6 @@ func (kernel *Kernel) canAutoRender(data interface{}, typ xreflect.Type) bool {
157157}
158158
159159var autoRenderers = map [string ]func (Data , interface {}) Data {
160- "Data" : func (d Data , i interface {}) Data {
161- if x , ok := i .(Data ); ok {
162- d .Data = merge (d .Data , x .Data )
163- d .Metadata = merge (d .Metadata , x .Metadata )
164- d .Transient = merge (d .Transient , x .Transient )
165- }
166- return d
167- },
168160 "Renderer" : func (d Data , i interface {}) Data {
169161 if r , ok := i .(Renderer ); ok {
170162 x := r .Render ()
@@ -262,20 +254,24 @@ var autoRenderers = map[string]func(Data, interface{}) Data{
262254// detect and render data types that should be auto-rendered graphically
263255func (kernel * Kernel ) autoRender (mimeType string , arg interface {}, typ xreflect.Type ) Data {
264256 var data Data
265-
266- // try all autoRenderers
267- for _ , fun := range autoRenderers {
268- data = fun (data , arg )
257+ // try Data
258+ if x , ok := arg .(Data ); ok {
259+ data = x
269260 }
270261
271- if kernel != nil && typ != nil {
262+ if kernel == nil || typ == nil {
263+ // try all autoRenderers
264+ for _ , fun := range autoRenderers {
265+ data = fun (data , arg )
266+ }
267+ } else {
272268 // in gomacro, methods of interpreted types are emulated.
273269 // Thus type-asserting them to interface types as done by autoRenderer functions above cannot succeed.
274- // Manually check if emulated type "pretends" to implement one of the a above interfaces
270+ // Manually check if emulated type "pretends" to implement one or more of the above interfaces
275271 // and, in case, tell the interpreter to convert to them
276272 for name , xtyp := range kernel .render {
277273 fun := autoRenderers [name ]
278- if fun == nil || ! typ .Implements (xtyp ) || typ . ReflectType (). Implements ( xtyp . ReflectType ()) {
274+ if fun == nil || ! typ .Implements (xtyp ) {
279275 continue
280276 }
281277 conv := kernel .ir .Comp .Converter (typ , xtyp )
@@ -316,7 +312,6 @@ func fillDefaults(data Data, arg interface{}, s string, b []byte, mimeType strin
316312 data .Data [mimeType ] = b
317313 }
318314 }
319- fmt .Printf ("%+v\n " , data )
320315 return data
321316}
322317
0 commit comments