Glimmer DSL for XML & HTML 1.3.2
Glimmer DSL for XML provides Ruby syntax for building XML (eXtensible Markup Language) and HTML documents. It used to be part of the Glimmer library (created in 2007), but eventually got extracted into its own project.
Within the context of desktop development, Glimmer DSL for XML is useful in providing XML data for the SWT Browser widget.
Otherwise, it is also used in the development of Glimmer DSL for Opal.
Glimmer DSL Comparison Table: DSL | Platforms | Native? | Vector Graphics? | Pros | Cons | Prereqs ----|-----------|---------|------------------|------|------|-------- Glimmer DSL for SWT (JRuby Desktop Development GUI Framework) | Mac / Windows / Linux | Yes | Yes (Canvas Shape DSL) | Very Mature / Scaffolding / Native Executable Packaging / Custom Widgets | Slow JRuby Startup Time / Heavy Memory Footprint | Java / JRuby Glimmer DSL for Opal (Pure Ruby Web GUI and Auto-Webifier of Desktop Apps) | All Web Browsers | No | Yes (Canvas Shape DSL) | Simpler than All JavaScript Technologies / Auto-Webify Desktop Apps | Setup Process / Only Rails 5 Support for Now | Rails Glimmer DSL for LibUI (Prerequisite-Free Ruby Desktop Development GUI Library) | Mac / Windows / Linux | Yes | Yes (Area API) | Fast Startup Time / Light Memory Footprint | LibUI is an Incomplete Mid-Alpha Only | None Other Than MRI Ruby Glimmer DSL for Tk (MRI Ruby Desktop Development GUI Library) | Mac / Windows / Linux | Some Native-Themed Widgets (Not Truly Native) | Yes (Canvas) | Fast Startup Time / Light Memory Footprint | Widgets Do Not Look Truly Native, Espcially on Linux | ActiveTcl / MRI Ruby Glimmer DSL for GTK (Ruby-GNOME Desktop Development GUI Library) | Mac / Windows / Linux | Only on Linux | Yes (Cairo) | Complete Access to GNOME Features on Linux (Forte) | Not Native on Mac and Windows | None Other Than MRI Ruby on Linux / Brew Packages on Mac / MSYS & MING Toolchains on Windows / MRI Ruby Glimmer DSL for FX (FOX Toolkit Ruby Desktop Development GUI Library) | Mac (requires XQuartz) / Windows / Linux | No | Yes (Canvas) | No Prerequisites on Windows (Forte Since Binaries Are Included Out of The Box) | Widgets Do Not Look Native / Mac Usage Obtrusively Starts XQuartz | None Other Than MRI Ruby on Windows / XQuarts on Mac / MRI Ruby Glimmer DSL for JFX (JRuby JavaFX Desktop Development GUI Library) | Mac / Windows / Linux | No | Yes (javafx.scene.shape and javafx.scene.canvas) | Rich in Custom Widgets | Slow JRuby Startup Time / Heavy Memory Footprint / Widgets Do Not Look Native | Java / JRuby / JavaFX SDK Glimmer DSL for Swing (JRuby Swing Desktop Development GUI Library) | Mac / Windows / Linux | No | Yes (Java2D) | Very Mature | Slow JRuby Startup Time / Heavy Memory Footprint / Widgets Do Not Look Native | Java / JRuby Glimmer DSL for XML (& HTML) | All Web Browsers | No | Yes (SVG) | Programmable / Lighter-weight Than Actual XML | XML Elements Are Sometimes Not Well-Named (Many Types of Input) | None Glimmer DSL for CSS | All Web Browsers | No | Yes | Programmable | CSS Is Over-Engineered / Too Many Features To Learn | None
Setup
Please follow these instructions to make the glimmer
command available on your system.
Option 1: Direct Install
Run this command to install directly:
gem install glimmer-dsl-xml -v 1.3.2
Note: When using JRuby, jgem
is JRuby's version of gem
command. RVM allows running gem
as an alias in JRuby. Otherwise, you may also run jruby -S gem install ...
Add require 'glimmer-dsl-xml'
to your code.
When using with Glimmer DSL for SWT or Glimmer DSL for Opal, make sure it is added after require glimmer-dsl-swt
and require glimmer-dsl-opal
to give it a lower precedence than them when processed by the Glimmer DSL engine.
That's it! Requiring the gem activates the Glimmer XML DSL automatically.
Option 2: Bundler
Add the following to Gemfile
(after glimmer-dsl-swt
and/or glimmer-dsl-opal
if included too):
gem 'glimmer-dsl-xml', '~> 1.3.2'
And, then run:
bundle install
Note: When using JRuby, prefix with jruby -S
Require in your code via Bundler (e.g. require 'bundler'; Bundler.require
) or add require 'glimmer-dsl-xml'
to your code.
When using with Glimmer DSL for SWT or Glimmer DSL for Opal, make sure it is loaded after glimmer-dsl-swt
and glimmer-dsl-opal
to give it a lower precedence than them when processed by the Glimmer DSL engine.
That's it! Requiring the gem activates the Glimmer XML DSL automatically.
XML DSL
Simply start with the html
, xml
, name_space
, or tag
keyword and add XML/HTML inside its block using Glimmer DSL for XML syntax.
Once done, you may call to_s
, to_xml
, or to_html
to get the formatted XML/HTML output.
Here are all the Glimmer XML DSL top-level keywords:
html
: renders partial HTML just likexml
(not having body/head) or full HTML document (having body/head), automatically including doctype (<!DOCTYPE html>
) and surrounding content by the<html></html>
tagxml
: renders XML/XHTML content (e.g.xml {span {'Hello'}; br}.to_s
renders<span>Hello</span><br />
)name_space
: enables namespacing html tagstag
: enables custom tag creation for exceptional cases (e.g.p
as reserved Ruby keyword) by passing tag name as '_name' attribute
Element properties are typically passed as a key/value hash (e.g. section(id: 'main', class: 'accordion')
) . However, for properties like "selected" or "checked", you must leave value nil
or otherwise pass in front of the hash (e.g. input(:checked, type: 'checkbox')
)
You may try the following examples in IRB after installing the glimmer-dsl-xml gem.
Just make sure to require the library and include Glimmer first:
require 'glimmer-dsl-xml'
include Glimmer
Example (full HTML document):
@html = html {
head {
(name: "viewport", content: "width=device-width, initial-scale=2.0")
}
body {
h1 { "Hello, World!" }
}
}
puts @html
Output:
<!DOCTYPE html><html><head><meta name="viewport" content="width=device-width, initial-scale=2.0" /></head><body><h1>Hello, World!</h1></body></html>
Example (partial HTML fragment):
@html = html {
h1 { "Hello, World!" }
}
puts @html
Output:
<h1>Hello, World!</h1>
Example (basic XML):
@xml = xml {
greeting { "Hello, World!" }
}
puts @xml
Output:
<greeting>Hello, World!</greeting>
Example (XML namespaces using name_space
keyword):
@xml = name_space(:acme) {
product(:id => "thesis", :class => "document") {
component(:id => "main") {
}
}
}
puts @xml
Output:
<acme:product id="thesis" class="document"><acme:component id="main"></acme:component></acme:product>
Example (XML namespaces using dot operator):
@xml = xml {
document.body(document.id => "main") {
}
}
puts @xml
Output:
<document:body document:id="main"></document:body>
Example (custom tag):
puts tag(:_name => "p") {"p is a reserved keyword in Ruby"}
Output:
<p>p is a reserved keyword in Ruby</p>
Glimmer Config
xml_attribute_underscore
(default value: '_'
)
Calling the following code enables auto-conversion of xml attribute underscores into dashes in Symbol
attribute names (but not String
attribute names):
Glimmer::Config.xml_attribute_underscore = '-'
Example:
require 'glimmer-dsl-xml'
Glimmer::Config.xml_attribute_underscore = '-'
include Glimmer
document = html {
body {
video(:data_loop, data_src: "http://videos.org/1.mp4")
}
}
puts document
<!DOCTYPE html><html><body><video data-src="http://videos.org/1.mp4" data-loop /></body></html>
Note that strings are intentionally ignored to enable using underscores when needed.
Example:
require 'glimmer-dsl-xml'
Glimmer::Config.xml_attribute_underscore = '-'
include Glimmer
document = html {
body {
video('data_loop', 'data_src' => "http://videos.org/1.mp4")
}
}
puts document
<!DOCTYPE html><html><body><video data_src="http://videos.org/1.mp4" data_loop /></body></html>
Multi-DSL Support
Learn more about how to use this DSL alongside other Glimmer DSLs:
Help
Issues
You may submit issues on GitHub.
Click here to submit an issue.
Chat
Feature Suggestions
These features have been suggested. You might see them in a future version of Glimmer. You are welcome to contribute more feature suggestions.
Change Log
Contributing
Contributors
- Andy Maleh (Founder)
Click here to view contributor commits.
License
Copyright (c) 2020-2023 - Andy Maleh.
--
Built for Glimmer (Ruby Desktop Development GUI Library).