
Company News
Socket Has Acquired Secure Annex
Socket has acquired Secure Annex to expand extension security across browsers, IDEs, and AI tools.
wlang
Advanced tools
WLang is a powerful code generation and templating engine, implemented on top o temple and much inspired by the excellent mustache.
WLang 3.0 also has a few remaining issues.
WLang is a templating engine, written in ruby. In that, it is similar to ERB, Mustache and the like:
WLang::Html.render 'Hello to ${who}!', who: 'you & the world'
# => "Hello to you & the world!"
To output HTML pages, WLang does not provides you with killer features or extraordinary shortcus. It supports escaping, as shown above, but many other templating engines do. For such HTML tasks, WLang does a pretty good job but many other engines perform faster and have nicer features. See the examples folder that documents WLang::Html.
WLang is designed to help you for other uses cases, user-defined ones in particular, such as generating code or whatever text generation task for which other engines quickly become inappropriate. WLang helps there because it allows you to create your own dialect, that is, you can define your own tags and their behavior. For instance,
class Highlighter < WLang::Dialect
def highlight(buf, fn)
var_name = render(fn)
var_value = evaluate(var_name)
buf << var_value.to_s.upcase
end
tag '$', :highlight
end
Highlighter.render('Hello ${who}!', who: 'you & the world')
# => "Hello YOU & THE WORLD !"
WLang already provides a few useful dialects, such as WLang::Html (inspired by Mustache but a bit more powerful in my opinion). If they don't match your needs, it is up to you to define you own dialect for making your generation task easy. Have a look at the implementation of WLang's ones, it's pretty simple to get started!
WLang has built-in support for Tilt facade to templating engines. In order to use that API:
require 'tilt' # needed in your bundle, not a wlang dependency
require 'wlang' # loads Tilt support provided Tilt has already been required
template = Tilt.new("path/to/a/template.wlang") # suppose 'Hello ${who}!'
template.render(:who => "world")
# => Hello world!
template = Tilt.new("path/to/a/template.wlang", :dialect => Highlighter)
template.render(:who => "world")
# => Hello WORLD!
Please note that you should require tilt first, then wlang. Otherwise, you'll have to require wlang/tilt explicitely.
WLang comes bundled with built-in support for Sinatra >= 1.4 (release still in progress). As usual in Sinatra, you can simply invoke wlang as follows:
get '/' do
wlang :index, :locals => { ... }
end
As wlang encourages logic-less templates, you should always use locals. However, there is specific support for layouts and partials, as the following example demonstrates:
get '/' do
wlang :index, :locals => {:who => "world"}
end
__END__
@@layout
<html>
>{yield}
</html>
@@index
Hello from a partial: >{partial}
@@partial
yeah, a partial saying hello to '${who}'!
Returned body will be (ignoring carriage returns):
<html>Hello from a partial: yeah, a partial saying hello to 'world'!</html>
FAQs
Unknown package
We found that wlang demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 2 open source maintainers collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Company News
Socket has acquired Secure Annex to expand extension security across browsers, IDEs, and AI tools.

Research
/Security News
Socket is tracking cloned Open VSX extensions tied to GlassWorm, with several updated from benign-looking sleepers into malware delivery vehicles.

Product
Reachability analysis for PHP is now available in experimental, helping teams identify which vulnerabilities are actually exploitable.