Template language similar to examples...

E

Edgard Riba

Hi,

I would like to process a text file which contains property-tokens which
are replaced appropiately by the template processing library.
Property-tokens can be single value, or can be collection of values.

The format I would like to use is something like this (the specific
characters used to signal might be different):

#!This is a comment
#DECLARE(%myProperty) #!Here I declare a property (variable) for
#!use within the template
#DECLARE(%myCollection),MULTI #!This would be an array collection
#SET(%mySymbol,1) #!assign a value of 1
#ADD(%myCollection,'A') #!add something to the collection
#ADD(%myCollection,'B') #!add something to the collection
#ADD(%myCollection,'C') #!add something to the collection

#!The code that goes below goes straight into the output,
#!except that it takes into account how the #IF is evaluated.
class myTestClass
def initialize
#IF(%mySymbol = 1)
@msg = 'Test1'
#ELSE
@msg = 'Test2'
#ENDIF
#INSERT(%myTemplateProcedure,%myCollection)
end
end

#GROUP(%myTemplateProcedure,%pCollection)
#!For this example, the code below generates:
#! @msgA = 'A'
#! @msgB = 'B'
#! @msgC = 'C'
#!Not very useful, but serves as an example of the things I'm looking
for.
#FOR(%myCollection)
@msg%myCollection = '%myCollection'
#ENDFOR


The output would be:

class myTestClass
def initialize
@msg = 'Test1'
@msgA = 'A'
@msgB = 'B'
@msgC = 'C'
end
end

Are any of you guys familiar with a library that will do something
similar to the above?

Thanks,
Edgard
 
R

Ross Bamford

(Apologies if this is a dupe, messages that cross the gateway seem to
have messed up headers - replies don't go to the list?)

#!This is a comment
#DECLARE(%myProperty) #!Here I declare a property (variable) for
#!use within the template
#DECLARE(%myCollection),MULTI #!This would be an array collection
#SET(%mySymbol,1) #!assign a value of 1
#ADD(%myCollection,'A') #!add something to the collection
#ADD(%myCollection,'B') #!add something to the collection
#ADD(%myCollection,'C') #!add something to the collection

#!The code that goes below goes straight into the output,
#!except that it takes into account how the #IF is evaluated.
class myTestClass
def initialize
#IF(%mySymbol = 1)
@msg = 'Test1'
#ELSE
@msg = 'Test2'
#ENDIF
#INSERT(%myTemplateProcedure,%myCollection)
end
end

#GROUP(%myTemplateProcedure,%pCollection)
#!For this example, the code below generates:
#! @msgA = 'A'
#! @msgB = 'B'
#! @msgC = 'C'
#!Not very useful, but serves as an example of the things I'm looking
for.
#FOR(%myCollection)
@msg%myCollection = '%myCollection'
#ENDFOR


The output would be:

class myTestClass
def initialize
@msg = 'Test1'
@msgA = 'A'
@msgB = 'B'
@msgC = 'C'
end
end

Are any of you guys familiar with a library that will do something
similar to the above?

Wow. Couldn't you just use ERB?

require 'erb'

my_symbol = 1
my_collection = ['A', 'B', 'C']
my_template_proc = lambda do |coll|
coll.map { |a| "@msg#{a}" }.join(', ') + " = #{coll.inspect}"
end

e = ERB.new <<-EOF
class MyTestClass
def initialize
<% if my_symbol %>
@msg = 'Test1'
<% else %>
@msg = 'Test2'
<% end %>
<%= my_template_proc.call(my_collection) %>
end
end
EOF

puts e.result
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,755
Messages
2,569,536
Members
45,007
Latest member
obedient dusk

Latest Threads

Top