[go-nuts] Customized Go template FuncMap example

2017-07-06 Thread Tong Sun
I'm trying my best to make the following Go template FuncMap example works:

https://play.golang.org/p/1-JYseLBUF

If I comment out line 55, 56 and un-comment line 54, it works just fine. 

What I was trying to do is to un-comment line 31, and use DefaultFuncs() or 
something alike to replace line 54. I.e., I'm trying to wrap the myFuncMap 
into a callable function. 

How can I do that? Thx

-- 
You received this message because you are subscribed to the Google Groups 
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to golang-nuts+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


Re: [go-nuts] Customized Go template FuncMap example

2017-07-09 Thread Matt Harden
Why are you trying to do that? It feels like you're trying to do
object-oriented programming in Go. Don't do that. What are you trying to
achieve that the *template.Template type doesn't allow?

If you just want a template with a FuncMap already applied, write a
function to do that:

func MyTemplate(name string) *template.Template {
return template.New(name).Funcs(map[string]interface{}{"title":
strings.Title})
}


On Thu, Jul 6, 2017 at 8:01 PM Tong Sun  wrote:

> I'm trying my best to make the following Go template FuncMap example works:
>
> https://play.golang.org/p/1-JYseLBUF
>
> If I comment out line 55, 56 and un-comment line 54, it works just fine.
>
> What I was trying to do is to un-comment line 31, and use DefaultFuncs()
> or something alike to replace line 54. I.e., I'm trying to wrap
> the myFuncMap into a callable function.
>
> How can I do that? Thx
>
> --
> You received this message because you are subscribed to the Google Groups
> "golang-nuts" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to golang-nuts+unsubscr...@googlegroups.com.
> For more options, visit https://groups.google.com/d/optout.
>

-- 
You received this message because you are subscribed to the Google Groups 
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to golang-nuts+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


Re: [go-nuts] Customized Go template FuncMap example

2017-07-09 Thread Tong Sun
Thanks Matt.

What I'm trying to do is to modulelize customized Go template functions,
say one module provide advanced regexp support, while another one
specialized in text formatting (vertical aligning, text folding in column,
etc), so on and so forth, *each of the module has a collection of their
own customized template functions*.

The goal is to define such modules separately, as a building block, provide
them as libraries, and the end user can pick and choose what what, and
chain the customized template functions together using a series of `.Funcs`
calls.

That's what I had in mind. Hope that I've express it clear enough. Thx.


On Sun, Jul 9, 2017 at 10:20 PM, Matt Harden  wrote:

> Why are you trying to do that? It feels like you're trying to do
> object-oriented programming in Go. Don't do that. What are you trying to
> achieve that the *template.Template type doesn't allow?
>
> If you just want a template with a FuncMap already applied, write a
> function to do that:
>
> func MyTemplate(name string) *template.Template {
> return template.New(name).Funcs(map[string]interface{}{"title":
> strings.Title})
> }
>
>
> On Thu, Jul 6, 2017 at 8:01 PM Tong Sun  wrote:
>
>> I'm trying my best to make the following Go template FuncMap example
>> works:
>>
>> https://play.golang.org/p/1-JYseLBUF
>>
>> If I comment out line 55, 56 and un-comment line 54, it works just fine.
>>
>> What I was trying to do is to un-comment line 31, and use DefaultFuncs()
>> or something alike to replace line 54. I.e., I'm trying to wrap
>> the myFuncMap into a callable function.
>>
>> How can I do that? Thx
>>
>>

-- 
You received this message because you are subscribed to the Google Groups 
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to golang-nuts+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


Re: [go-nuts] Customized Go template FuncMap example

2017-07-13 Thread Matt Harden
Can you do what you want just by building a number of template.FuncMap
values, and then to use them the user just calls
t.Funcs(module1.FuncMap).Funcs(module2.FuncMap), adding the function maps
they want that way?

I don't think you need your own custom version of the Template type.

On Sun, Jul 9, 2017 at 8:15 PM Tong Sun  wrote:

> Thanks Matt.
>
> What I'm trying to do is to modulelize customized Go template functions,
> say one module provide advanced regexp support, while another one
> specialized in text formatting (vertical aligning, text folding in column,
> etc), so on and so forth, *each of the module has a collection of their
> own customized template functions*.
>
> The goal is to define such modules separately, as a building block,
> provide them as libraries, and the end user can pick and choose what what,
> and chain the customized template functions together using a series of
> `.Funcs` calls.
>
> That's what I had in mind. Hope that I've express it clear enough. Thx.
>
>
> On Sun, Jul 9, 2017 at 10:20 PM, Matt Harden 
> wrote:
>
>> Why are you trying to do that? It feels like you're trying to do
>> object-oriented programming in Go. Don't do that. What are you trying to
>> achieve that the *template.Template type doesn't allow?
>>
>> If you just want a template with a FuncMap already applied, write a
>> function to do that:
>>
>> func MyTemplate(name string) *template.Template {
>> return template.New(name).Funcs(map[string]interface{}{"title":
>> strings.Title})
>> }
>>
>>
>> On Thu, Jul 6, 2017 at 8:01 PM Tong Sun  wrote:
>>
>>> I'm trying my best to make the following Go template FuncMap example
>>> works:
>>>
>>> https://play.golang.org/p/1-JYseLBUF
>>>
>>> If I comment out line 55, 56 and un-comment line 54, it works just fine.
>>>
>>> What I was trying to do is to un-comment line 31, and use DefaultFuncs()
>>> or something alike to replace line 54. I.e., I'm trying to wrap
>>> the myFuncMap into a callable function.
>>>
>>> How can I do that? Thx
>>>
>>>
>

-- 
You received this message because you are subscribed to the Google Groups 
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to golang-nuts+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


Re: [go-nuts] Customized Go template FuncMap example

2017-07-14 Thread Tong Sun
On Thu, Jul 13, 2017 at 10:10 PM, Matt Harden  wrote:

> Can you do what you want just by building a number of template.FuncMap
> values, and then to use them the user just calls 
> t.Funcs(module1.FuncMap).Funcs(module2.FuncMap),
> adding the function maps they want that way?
>

 Yeah, sure, but for writing a library, it'll not be that quite easy,
because,

I don't think you need your own custom version of the Template type.
>

Yes I do, please take a look at
https://github.com/go-easygen/easygen/blob/afba5260a6b0281d49df0ebefd4439159317c411/EasyGen.go#L102-L111
(i.e.,
https://github.com/go-easygen/easygen/commit/afba5260a6b0281d49df0ebefd4439159317c411
)

I.e., I want the library works for both text and html templates, building a
number of template.FuncMap values would be troublesome in this case,
because in my mind the template.FuncMap can be either a text or html
template, but not both.


On Sun, Jul 9, 2017 at 8:15 PM Tong Sun wrote:
>
>> Thanks Matt.
>>
>> What I'm trying to do is to modulelize customized Go template functions,
>> say one module provide advanced regexp support, while another one
>> specialized in text formatting (vertical aligning, text folding in column,
>> etc), so on and so forth, *each of the module has a collection of their
>> own customized template functions*.
>>
>> The goal is to define such modules separately, as a building block,
>> provide them as libraries, and the end user can pick and choose what what,
>> and chain the customized template functions together using a series of
>> `.Funcs` calls.
>>
>> That's what I had in mind. Hope that I've express it clear enough. Thx.
>>
>>
>> On Sun, Jul 9, 2017 at 10:20 PM, Matt Harden 
>> wrote:
>>
>>> Why are you trying to do that? It feels like you're trying to do
>>> object-oriented programming in Go. Don't do that. What are you trying to
>>> achieve that the *template.Template type doesn't allow?
>>>
>>> If you just want a template with a FuncMap already applied, write a
>>> function to do that:
>>>
>>> func MyTemplate(name string) *template.Template {
>>> return template.New(name).Funcs(map[string]interface{}{"title":
>>> strings.Title})
>>> }
>>>
>>>
>>> On Thu, Jul 6, 2017 at 8:01 PM Tong Sun  wrote:
>>>
 I'm trying my best to make the following Go template FuncMap example
 works:

 https://play.golang.org/p/1-JYseLBUF

 If I comment out line 55, 56 and un-comment line 54, it works just
 fine.

 What I was trying to do is to un-comment line 31, and
 use DefaultFuncs() or something alike to replace line 54. I.e., I'm trying
 to wrap the myFuncMap into a callable function.

 How can I do that? Thx


>>

-- 
You received this message because you are subscribed to the Google Groups 
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to golang-nuts+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


Re: [go-nuts] Customized Go template FuncMap example

2017-07-14 Thread Matt Harden
If the type of the map is map[string]interface{}, it can be used with
either type of template. https://play.golang.org/p/-sFMhKOtNN

If you create your own template type, then you can also create your own
FuncMap type, and in your own Funcs method, pass it on to the underlying
template:

type FuncMap map[string]interface{}

type Template struct{
tmpl interface{}
}

func (t *Template) Funcs(fm FuncMap) *Template {
fmBase := map[string]interface{}(fm)
switch tt := t.tmpl.(type) {
case *htmltemplate.Template:
return Template{tmpl: tt.Funcs(fmBase)}
case *texttemplate.Template:
return Template{tmpl: tt.Funcs(fmBase)}
default:
// this shouldn't happen
panic("unrecognized template type")
}


But you also then have no choice but to wrap every single method that (that
you want to also have) returns a *Template, so that it returns your own
template type instead. That's why I don't think it's a good idea to create
your own Template type.

On Fri, Jul 14, 2017 at 7:29 AM Tong Sun  wrote:

> On Thu, Jul 13, 2017 at 10:10 PM, Matt Harden  wrote:
>
>> Can you do what you want just by building a number of template.FuncMap
>> values, and then to use them the user just calls
>> t.Funcs(module1.FuncMap).Funcs(module2.FuncMap), adding the function maps
>> they want that way?
>>
>
>  Yeah, sure, but for writing a library, it'll not be that quite easy,
> because,
>
> I don't think you need your own custom version of the Template type.
>>
>
> Yes I do, please take a look at
>
> https://github.com/go-easygen/easygen/blob/afba5260a6b0281d49df0ebefd4439159317c411/EasyGen.go#L102-L111
> (i.e.,
> https://github.com/go-easygen/easygen/commit/afba5260a6b0281d49df0ebefd4439159317c411
> )
>
> I.e., I want the library works for both text and html templates, building
> a number of template.FuncMap values would be troublesome in this case,
> because in my mind the template.FuncMap can be either a text or html
> template, but not both.
>
>
> On Sun, Jul 9, 2017 at 8:15 PM Tong Sun wrote:
>>
>>> Thanks Matt.
>>>
>>> What I'm trying to do is to modulelize customized Go template functions,
>>> say one module provide advanced regexp support, while another one
>>> specialized in text formatting (vertical aligning, text folding in column,
>>> etc), so on and so forth, *each of the module has a collection of their
>>> own customized template functions*.
>>>
>>> The goal is to define such modules separately, as a building block,
>>> provide them as libraries, and the end user can pick and choose what what,
>>> and chain the customized template functions together using a series of
>>> `.Funcs` calls.
>>>
>>> That's what I had in mind. Hope that I've express it clear enough. Thx.
>>>
>>>
>>> On Sun, Jul 9, 2017 at 10:20 PM, Matt Harden 
>>> wrote:
>>>
 Why are you trying to do that? It feels like you're trying to do
 object-oriented programming in Go. Don't do that. What are you trying to
 achieve that the *template.Template type doesn't allow?

 If you just want a template with a FuncMap already applied, write a
 function to do that:

 func MyTemplate(name string) *template.Template {
 return template.New(name).Funcs(map[string]interface{}{"title":
 strings.Title})
 }


 On Thu, Jul 6, 2017 at 8:01 PM Tong Sun  wrote:

> I'm trying my best to make the following Go template FuncMap example
> works:
>
> https://play.golang.org/p/1-JYseLBUF
>
> If I comment out line 55, 56 and un-comment line 54, it works just
> fine.
>
> What I was trying to do is to un-comment line 31, and
> use DefaultFuncs() or something alike to replace line 54. I.e., I'm trying
> to wrap the myFuncMap into a callable function.
>
> How can I do that? Thx
>
>
>>>

-- 
You received this message because you are subscribed to the Google Groups 
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to golang-nuts+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


Re: [go-nuts] Customized Go template FuncMap example

2017-07-14 Thread Tong Sun
Gotya. Thanks for all the helps!

On Fri, Jul 14, 2017 at 9:27 PM, Matt Harden wrote:


> But you also then have no choice but to wrap every single method that
> (that you want to also have) returns a *Template, so that it returns your
> own template type instead. That's why I don't think it's a good idea to
> create your own Template type.
>

-- 
You received this message because you are subscribed to the Google Groups 
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to golang-nuts+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


Re: [go-nuts] Customized Go template FuncMap example

2017-07-15 Thread Matt Ho
Given that text and html templates are separate calls anyways, why not just 
make separate calls for your custom funcmap?  For example:

package template

import (
  html "html/template"
  text "text/template"
)

func Html(name string, fm html.FuncMap) *html.Template {
  return html.New(name).Funcs(fm)
}

func Text(name string, fm text.FuncMap) *text.Template {
  return text.New(name).Funcs(fm)
}

-- 
You received this message because you are subscribed to the Google Groups 
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to golang-nuts+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


Re: [go-nuts] Customized Go template FuncMap example

2017-07-15 Thread Tong Sun
Thanks.

I don't know what kind of goals you are trying to achieve, but here are
mine:

What I'm trying to do is to modulelize customized Go template functions,
say one module provide advanced regexp support, while another one
specialized in text formatting (vertical aligning, text folding in column,
etc), so on and so forth, *each of the module has a collection of their
own customized template functions*.

The goal is to define such modules separately, as a building block, provide
them as libraries, and the end user can pick and choose what what, and
chain the customized template functions together using a series of `.Funcs`
calls.

Thus, I was trying to wrap the myFuncMap into a callable function, so
that the library works for both text and html templates.

So how is the following fitting into the above goals? Thx.

On Sat, Jul 15, 2017 at 12:51 PM, Matt Ho  wrote:

> Given that text and html templates are separate calls anyways, why not
> just make separate calls for your custom funcmap?  For example:
>
> package template
>
> import (
>   html "html/template"
>   text "text/template"
> )
>
> func Html(name string, fm html.FuncMap) *html.Template {
>   return html.New(name).Funcs(fm)
> }
>
> func Text(name string, fm text.FuncMap) *text.Template {
>   return text.New(name).Funcs(fm)
> }
>
>

-- 
You received this message because you are subscribed to the Google Groups 
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to golang-nuts+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.