glimmer-dsl-xml 1.3.2 → 1.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +5 -0
- data/README.md +95 -20
- data/VERSION +1 -1
- data/bin/html_to_glimmer +18 -0
- data/lib/glimmer/dsl/xml/dsl.rb +1 -0
- data/lib/glimmer/dsl/xml/p_expression.rb +46 -0
- data/lib/glimmer/xml/html_to_glimmer_converter.rb +127 -0
- metadata +8 -4
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 299589b2fe8ece942e67b330eaf32929870da8faa32b2ecf3dab2c92c3d28b13
|
|
4
|
+
data.tar.gz: dd4742f77cfe0e81299a80539069989e7315b04c276e07266403eac3d8758f91
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 96b1e96fed543c46ee0c04a4e3b0d2ffcc25d7b7691df64f7335eb12b80d770f5254e47ce711961e593a9ba21bb976197b0253912c38340e6bf324a126c072bc
|
|
7
|
+
data.tar.gz: 70af6db063691aeaa12342a4a4ada5eab28e016718cccdc41ab3b1cbb4916db83066c25353a01d9c6ff45eaa85a83387a1419aa61b7cbacee7a5247a66d16d13
|
data/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,10 @@
|
|
|
1
1
|
# Change Log
|
|
2
2
|
|
|
3
|
+
## 1.4.0
|
|
4
|
+
|
|
5
|
+
- `html_to_glimmer` converter command for automatically converting HTML to Glimmer DSL Ruby code
|
|
6
|
+
- Support `p` keyword directly (without having to use the custom `tag` keyword like `tag(:_name => "p")`)
|
|
7
|
+
|
|
3
8
|
## 1.3.2
|
|
4
9
|
|
|
5
10
|
- Relaxed glimmer dependency to between 2.4.1 and 3.0.0
|
data/README.md
CHANGED
|
@@ -1,29 +1,17 @@
|
|
|
1
|
-
# [<img src="https://raw.githubusercontent.com/AndyObtiva/glimmer/master/images/glimmer-logo-hi-res.png" height=85 />](https://github.com/AndyObtiva/glimmer) Glimmer DSL for XML & HTML 1.
|
|
1
|
+
# [<img src="https://raw.githubusercontent.com/AndyObtiva/glimmer/master/images/glimmer-logo-hi-res.png" height=85 />](https://github.com/AndyObtiva/glimmer) Glimmer DSL for XML & HTML 1.4.0
|
|
2
2
|
[](http://badge.fury.io/rb/glimmer-dsl-xml)
|
|
3
3
|
[](https://travis-ci.com/github/AndyObtiva/glimmer-dsl-xml)
|
|
4
4
|
[](https://coveralls.io/github/AndyObtiva/glimmer-dsl-xml?branch=master)
|
|
5
5
|
[](https://codeclimate.com/github/AndyObtiva/glimmer-dsl-xml/maintainability)
|
|
6
6
|
[](https://gitter.im/AndyObtiva/glimmer?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
|
|
7
7
|
|
|
8
|
-
[Glimmer](https://github.com/AndyObtiva/glimmer) DSL for XML provides Ruby syntax for building XML (eXtensible Markup Language) and HTML documents. It used to be part of the [Glimmer](https://github.com/AndyObtiva/glimmer) library (created in 2007), but eventually got extracted into its own project.
|
|
8
|
+
[Glimmer](https://github.com/AndyObtiva/glimmer) DSL for XML provides Ruby syntax for building XML (eXtensible Markup Language) and HTML documents, included in [Glimmer DSL for Web](https://github.com/AndyObtiva/glimmer-dsl-web) (Ruby in the Browser Web Frontend Framework) to use in Rails Frontend Development. It used to be part of the [Glimmer](https://github.com/AndyObtiva/glimmer) library (created in 2007), but eventually got extracted into its own project. The Ruby gem also includes an [HTML to Glimmer Converter](#html-to-glimmer-converter) (`html_to_glimmer`) to automatically convert legacy HTML code into Glimmer DSL syntax.
|
|
9
9
|
|
|
10
10
|
Within the context of desktop development, Glimmer DSL for XML is useful in providing XML data for the [SWT Browser widget](https://github.com/AndyObtiva/glimmer-dsl-swt/blob/master/docs/reference/GLIMMER_GUI_DSL_SYNTAX.md#browser-widget).
|
|
11
11
|
|
|
12
12
|
Otherwise, it is also used in the development of [Glimmer DSL for Opal](https://github.com/AndyObtiva/glimmer-dsl-opal).
|
|
13
13
|
|
|
14
|
-
|
|
15
|
-
DSL | Platforms | Native? | Vector Graphics? | Pros | Cons | Prereqs
|
|
16
|
-
----|-----------|---------|------------------|------|------|--------
|
|
17
|
-
[Glimmer DSL for SWT (JRuby Desktop Development GUI Framework)](https://github.com/AndyObtiva/glimmer-dsl-swt) | 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
|
|
18
|
-
[Glimmer DSL for Opal (Pure Ruby Web GUI and Auto-Webifier of Desktop Apps)](https://github.com/AndyObtiva/glimmer-dsl-opal) | 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
|
|
19
|
-
[Glimmer DSL for LibUI (Prerequisite-Free Ruby Desktop Development GUI Library)](https://github.com/AndyObtiva/glimmer-dsl-libui) | 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
|
|
20
|
-
[Glimmer DSL for Tk (MRI Ruby Desktop Development GUI Library)](https://github.com/AndyObtiva/glimmer-dsl-tk) | 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
|
|
21
|
-
[Glimmer DSL for GTK (Ruby-GNOME Desktop Development GUI Library)](https://github.com/AndyObtiva/glimmer-dsl-gtk) | 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
|
|
22
|
-
[Glimmer DSL for FX (FOX Toolkit Ruby Desktop Development GUI Library)](https://github.com/AndyObtiva/glimmer-dsl-fx) | 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
|
|
23
|
-
[Glimmer DSL for JFX (JRuby JavaFX Desktop Development GUI Library)](https://github.com/AndyObtiva/glimmer-dsl-jfx) | 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
|
|
24
|
-
[Glimmer DSL for Swing (JRuby Swing Desktop Development GUI Library)](https://github.com/AndyObtiva/glimmer-dsl-swing) | Mac / Windows / Linux | No | Yes (Java2D) | Very Mature | Slow JRuby Startup Time / Heavy Memory Footprint / Widgets Do Not Look Native | Java / JRuby
|
|
25
|
-
[Glimmer DSL for XML (& HTML)](https://github.com/AndyObtiva/glimmer-dsl-xml) | All Web Browsers | No | Yes (SVG) | Programmable / Lighter-weight Than Actual XML | XML Elements Are Sometimes Not Well-Named (Many Types of Input) | None
|
|
26
|
-
[Glimmer DSL for CSS](https://github.com/AndyObtiva/glimmer-dsl-css) | All Web Browsers | No | Yes | Programmable | CSS Is Over-Engineered / Too Many Features To Learn | None
|
|
14
|
+
Learn more about the differences between various [Glimmer](https://github.com/AndyObtiva/glimmer) DSLs by looking at the **[Glimmer DSL Comparison Table](https://github.com/AndyObtiva/glimmer#glimmer-dsl-comparison-table)**.
|
|
27
15
|
|
|
28
16
|
## Setup
|
|
29
17
|
|
|
@@ -33,7 +21,7 @@ Please follow these instructions to make the `glimmer` command available on your
|
|
|
33
21
|
|
|
34
22
|
Run this command to install directly:
|
|
35
23
|
```
|
|
36
|
-
gem install glimmer-dsl-xml -v 1.
|
|
24
|
+
gem install glimmer-dsl-xml -v 1.4.0
|
|
37
25
|
```
|
|
38
26
|
|
|
39
27
|
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 ...`
|
|
@@ -48,7 +36,7 @@ That's it! Requiring the gem activates the Glimmer XML DSL automatically.
|
|
|
48
36
|
|
|
49
37
|
Add the following to `Gemfile` (after `glimmer-dsl-swt` and/or `glimmer-dsl-opal` if included too):
|
|
50
38
|
```
|
|
51
|
-
gem 'glimmer-dsl-xml', '~> 1.
|
|
39
|
+
gem 'glimmer-dsl-xml', '~> 1.4.0'
|
|
52
40
|
```
|
|
53
41
|
|
|
54
42
|
And, then run:
|
|
@@ -73,7 +61,7 @@ Here are all the Glimmer XML DSL top-level keywords:
|
|
|
73
61
|
- `html`: renders partial HTML just like `xml` (not having body/head) or full HTML document (having body/head), automatically including doctype (`<!DOCTYPE html>`) and surrounding content by the `<html></html>` tag
|
|
74
62
|
- `xml`: renders XML/XHTML content (e.g. `xml {span {'Hello'}; br}.to_s` renders `<span>Hello</span><br />`)
|
|
75
63
|
- `name_space`: enables namespacing html tags
|
|
76
|
-
- `tag`: enables custom tag creation for exceptional cases (e.g. `
|
|
64
|
+
- `tag`: enables custom tag creation for exceptional cases (e.g. `acme:window` as reserved Ruby keyword) by passing tag name as '_name' attribute
|
|
77
65
|
|
|
78
66
|
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')` )
|
|
79
67
|
|
|
@@ -179,13 +167,100 @@ Output:
|
|
|
179
167
|
Example (custom tag):
|
|
180
168
|
|
|
181
169
|
```ruby
|
|
182
|
-
puts tag(:_name => "
|
|
170
|
+
puts tag(:_name => "acme:window") {"This is a window under acme inc."}
|
|
183
171
|
```
|
|
184
172
|
|
|
185
173
|
Output:
|
|
186
174
|
|
|
187
175
|
```
|
|
188
|
-
<
|
|
176
|
+
<acme:window>This is a window under acme inc.</acme:window>
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
### HTML to Glimmer Converter
|
|
180
|
+
|
|
181
|
+
The Ruby gem includes a HTML to Glimmer converter (`html_to_glimmer`) to automatically convert legacy HTML code into Glimmer DSL syntax.
|
|
182
|
+
|
|
183
|
+
Prerequisite: the `nokogiri` Ruby gem. If not already installed, run `gem install nokogiri` before using `html_to_glimmer`.
|
|
184
|
+
|
|
185
|
+
Script:
|
|
186
|
+
|
|
187
|
+
[bin/html_to_glimmer](/bin/html_to_glimmer)
|
|
188
|
+
|
|
189
|
+
Usage:
|
|
190
|
+
|
|
191
|
+
```
|
|
192
|
+
html_to_glimmer path_to_html_file
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
Example:
|
|
196
|
+
|
|
197
|
+
Suppose we have an HTML file called `input.html`:
|
|
198
|
+
|
|
199
|
+
```html
|
|
200
|
+
<html style='max-height: 100%'>
|
|
201
|
+
<body style="max-height: 100%; font: 'Times New Roman', Arial;">
|
|
202
|
+
<h1 id="top-header" class="header" data-owner='John "Bonham" Doe'>Welcome</h1>
|
|
203
|
+
<p>It is good to have <strong>you</strong> in our <strong><em>platform</em></strong>!</p>
|
|
204
|
+
<form action="/owner" method="post">
|
|
205
|
+
<input type="text" value="you" />
|
|
206
|
+
</form>
|
|
207
|
+
</body>
|
|
208
|
+
</html>
|
|
209
|
+
```
|
|
210
|
+
|
|
211
|
+
We can run this command:
|
|
212
|
+
|
|
213
|
+
```
|
|
214
|
+
html_to_glimmer input.html
|
|
215
|
+
```
|
|
216
|
+
|
|
217
|
+
Printout:
|
|
218
|
+
|
|
219
|
+
```
|
|
220
|
+
Converting from HTML syntax to Glimmer DSL Ruby syntax for input file: input.html
|
|
221
|
+
Converted output file: input.html.glimmer.rb
|
|
222
|
+
```
|
|
223
|
+
|
|
224
|
+
Output file (`input.html.glimmer.rb`) is a runnable Ruby file containing Glimmer DSL for XML & HTML syntax:
|
|
225
|
+
|
|
226
|
+
```rb
|
|
227
|
+
require 'glimmer-dsl-xml'
|
|
228
|
+
|
|
229
|
+
include Glimmer
|
|
230
|
+
|
|
231
|
+
html_document = xml {
|
|
232
|
+
html(style: 'max-height: 100%') {
|
|
233
|
+
body(style: "max-height: 100%; font: 'Times New Roman', Arial;") {
|
|
234
|
+
h1(id: 'top-header', class: 'header', 'data-owner': 'John "Bonham" Doe') {
|
|
235
|
+
"Welcome"
|
|
236
|
+
}
|
|
237
|
+
p {
|
|
238
|
+
span {
|
|
239
|
+
"It is good to have "
|
|
240
|
+
}
|
|
241
|
+
strong {
|
|
242
|
+
"you"
|
|
243
|
+
}
|
|
244
|
+
span {
|
|
245
|
+
" in our "
|
|
246
|
+
}
|
|
247
|
+
strong {
|
|
248
|
+
em {
|
|
249
|
+
"platform"
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
span {
|
|
253
|
+
"!"
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
form(action: '/owner', method: 'post') {
|
|
257
|
+
input(type: 'text', value: 'you')
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
puts html_document.to_s
|
|
189
264
|
```
|
|
190
265
|
|
|
191
266
|
## Glimmer Config
|
data/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
1.
|
|
1
|
+
1.4.0
|
data/bin/html_to_glimmer
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
|
|
3
|
+
require_relative '../lib/glimmer/xml/html_to_glimmer_converter'
|
|
4
|
+
|
|
5
|
+
usage = "***Glimmer DSL for XML & HTML - HTML to Glimmer Converter***\nPrerequisite: `nokogiri` gem (install by running: gem install nokogiri)\nUsage: html_to_glimmer path_to_html_file"
|
|
6
|
+
|
|
7
|
+
if ARGV.empty?
|
|
8
|
+
puts usage
|
|
9
|
+
else
|
|
10
|
+
html_file_path = ARGV.last
|
|
11
|
+
puts "Converting from HTML syntax to Glimmer DSL Ruby syntax for input file: #{html_file_path}"
|
|
12
|
+
html = File.read(html_file_path)
|
|
13
|
+
converter = Glimmer::XML::HTMLToGlimmerConverter.new
|
|
14
|
+
glimmer = converter.convert(html)
|
|
15
|
+
glimmer_file_path = "#{html_file_path}.glimmer.rb"
|
|
16
|
+
File.write(glimmer_file_path, glimmer)
|
|
17
|
+
puts "Converted output file: #{glimmer_file_path}"
|
|
18
|
+
end
|
data/lib/glimmer/dsl/xml/dsl.rb
CHANGED
|
@@ -27,6 +27,7 @@ require 'glimmer/dsl/xml/xml_node_expression'
|
|
|
27
27
|
require 'glimmer/dsl/xml/html_expression'
|
|
28
28
|
require 'glimmer/dsl/xml/meta_expression'
|
|
29
29
|
require 'glimmer/dsl/xml/name_space_expression'
|
|
30
|
+
require 'glimmer/dsl/xml/p_expression'
|
|
30
31
|
|
|
31
32
|
module Glimmer
|
|
32
33
|
module DSL
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# Copyright (c) 2020-2023 - Andy Maleh
|
|
2
|
+
#
|
|
3
|
+
# Permission is hereby granted, free of charge, to any person obtaining
|
|
4
|
+
# a copy of this software and associated documentation files (the
|
|
5
|
+
# "Software"), to deal in the Software without restriction, including
|
|
6
|
+
# without limitation the rights to use, copy, modify, merge, publish,
|
|
7
|
+
# distribute, sublicense, and/or sell copies of the Software, and to
|
|
8
|
+
# permit persons to whom the Software is furnished to do so, subject to
|
|
9
|
+
# the following conditions:
|
|
10
|
+
#
|
|
11
|
+
# The above copyright notice and this permission notice shall be
|
|
12
|
+
# included in all copies or substantial portions of the Software.
|
|
13
|
+
#
|
|
14
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
15
|
+
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
16
|
+
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
17
|
+
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
|
18
|
+
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
|
19
|
+
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
|
20
|
+
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
21
|
+
|
|
22
|
+
require 'glimmer/dsl/xml/node_parent_expression'
|
|
23
|
+
require 'glimmer/dsl/static_expression'
|
|
24
|
+
require 'glimmer/xml/node'
|
|
25
|
+
|
|
26
|
+
module Kernel
|
|
27
|
+
alias pi p
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
module Glimmer
|
|
31
|
+
module DSL
|
|
32
|
+
module XML
|
|
33
|
+
class PExpression < StaticExpression
|
|
34
|
+
include NodeParentExpression
|
|
35
|
+
|
|
36
|
+
def can_interpret?(parent, keyword, *args, &block)
|
|
37
|
+
keyword == 'p' && parent.is_a?(Glimmer::XML::Node)
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def interpret(parent, keyword, *args, &block)
|
|
41
|
+
Glimmer::XML::Node.new(parent, keyword.to_s, args, &block)
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
end
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
# Copyright (c) 2020-2024 - Andy Maleh
|
|
2
|
+
#
|
|
3
|
+
# Permission is hereby granted, free of charge, to any person obtaining
|
|
4
|
+
# a copy of this software and associated documentation files (the
|
|
5
|
+
# "Software"), to deal in the Software without restriction, including
|
|
6
|
+
# without limitation the rights to use, copy, modify, merge, publish,
|
|
7
|
+
# distribute, sublicense, and/or sell copies of the Software, and to
|
|
8
|
+
# permit persons to whom the Software is furnished to do so, subject to
|
|
9
|
+
# the following conditions:
|
|
10
|
+
#
|
|
11
|
+
# The above copyright notice and this permission notice shall be
|
|
12
|
+
# included in all copies or substantial portions of the Software.
|
|
13
|
+
#
|
|
14
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
15
|
+
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
16
|
+
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
17
|
+
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
|
18
|
+
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
|
19
|
+
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
|
20
|
+
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
21
|
+
|
|
22
|
+
begin
|
|
23
|
+
require 'nokogiri'
|
|
24
|
+
rescue LoadError
|
|
25
|
+
puts 'Please install the `nokogiri` gem by running: gem install nokogiri'
|
|
26
|
+
raise 'The `nokogiri` gem is not installed!'
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
module Glimmer
|
|
30
|
+
module XML
|
|
31
|
+
class HTMLToGlimmerConverter
|
|
32
|
+
def convert(html)
|
|
33
|
+
glimmer = ''
|
|
34
|
+
glimmer += "require 'glimmer-dsl-xml'\n\n"
|
|
35
|
+
glimmer += "include Glimmer\n\n"
|
|
36
|
+
glimmer += "html_document = xml {\n"
|
|
37
|
+
glimmer += indent_lines(convert_html(html))
|
|
38
|
+
glimmer += "}\n\n"
|
|
39
|
+
glimmer += "puts html_document.to_s\n"
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
private
|
|
43
|
+
|
|
44
|
+
def convert_html(html)
|
|
45
|
+
html_doc = Nokogiri::HTML(html)
|
|
46
|
+
glimmer = ''
|
|
47
|
+
html_doc.children.select(&:element?).each do |element|
|
|
48
|
+
glimmer += convert_element(element)
|
|
49
|
+
end
|
|
50
|
+
glimmer
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
def convert_element(element)
|
|
54
|
+
children_count = element.children.size
|
|
55
|
+
glimmer = ''
|
|
56
|
+
glimmer += "#{element.node_name}#{convert_attributes(element)}" if element.element?
|
|
57
|
+
glimmer += " {\n" if element.element? && children_count > 0
|
|
58
|
+
if element.children.size == 1 && element.children.first.text?
|
|
59
|
+
glimmer += indent_lines(convert_text(element.children.first))
|
|
60
|
+
else
|
|
61
|
+
element.children.each do |child|
|
|
62
|
+
if child.element?
|
|
63
|
+
glimmer += indent_lines(convert_element(child))
|
|
64
|
+
elsif child.text?
|
|
65
|
+
glimmer += indent_lines(convert_span(child))
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
glimmer += "}\n" if element.element? && children_count > 0
|
|
70
|
+
glimmer += "\n" if element.element? && children_count == 0
|
|
71
|
+
glimmer
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
def convert_span(text_element)
|
|
75
|
+
text_content = indent_lines(convert_text(text_element))
|
|
76
|
+
return '' if text_content.strip.empty?
|
|
77
|
+
glimmer = ''
|
|
78
|
+
glimmer += "span {\n"
|
|
79
|
+
glimmer += text_content
|
|
80
|
+
glimmer += "}\n"
|
|
81
|
+
glimmer
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
def convert_text(text_element)
|
|
85
|
+
text_content = text_element.to_s
|
|
86
|
+
if text_content.strip.empty?
|
|
87
|
+
''
|
|
88
|
+
else
|
|
89
|
+
"#{text_element.to_s.dump}\n"
|
|
90
|
+
end
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
def convert_attributes(element)
|
|
94
|
+
attributes_string = element.attributes.to_a.map do |attribute, value|
|
|
95
|
+
"#{normalize_attribute(attribute)}: #{normalize_value(value)}"
|
|
96
|
+
end.join(', ')
|
|
97
|
+
return '' if attributes_string.strip.empty?
|
|
98
|
+
glimmer = ''
|
|
99
|
+
glimmer += '('
|
|
100
|
+
glimmer += attributes_string
|
|
101
|
+
glimmer += ')'
|
|
102
|
+
glimmer
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
def normalize_attribute(attribute)
|
|
106
|
+
if attribute.include?('-')
|
|
107
|
+
"'#{attribute}'"
|
|
108
|
+
else
|
|
109
|
+
attribute
|
|
110
|
+
end
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
def normalize_value(value)
|
|
114
|
+
value = value.to_s
|
|
115
|
+
if value.include?("'")
|
|
116
|
+
"\"#{value}\""
|
|
117
|
+
else
|
|
118
|
+
"'#{value}'"
|
|
119
|
+
end
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
def indent_lines(multi_line_string)
|
|
123
|
+
multi_line_string.lines.map { |line| " #{line}" }.join
|
|
124
|
+
end
|
|
125
|
+
end
|
|
126
|
+
end
|
|
127
|
+
end
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: glimmer-dsl-xml
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.
|
|
4
|
+
version: 1.4.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- AndyMaleh
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date:
|
|
11
|
+
date: 2024-05-26 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: glimmer
|
|
@@ -190,7 +190,8 @@ dependencies:
|
|
|
190
190
|
version: '0'
|
|
191
191
|
description: Glimmer DSL for XML & HTML
|
|
192
192
|
email: andy.am@gmail.com
|
|
193
|
-
executables:
|
|
193
|
+
executables:
|
|
194
|
+
- html_to_glimmer
|
|
194
195
|
extensions: []
|
|
195
196
|
extra_rdoc_files:
|
|
196
197
|
- CHANGELOG.md
|
|
@@ -202,6 +203,7 @@ files:
|
|
|
202
203
|
- LICENSE.txt
|
|
203
204
|
- README.md
|
|
204
205
|
- VERSION
|
|
206
|
+
- bin/html_to_glimmer
|
|
205
207
|
- lib/glimmer-dsl-xml-ext/glimmer/config.rb
|
|
206
208
|
- lib/glimmer-dsl-xml.rb
|
|
207
209
|
- lib/glimmer/dsl/xml/dsl.rb
|
|
@@ -209,12 +211,14 @@ files:
|
|
|
209
211
|
- lib/glimmer/dsl/xml/meta_expression.rb
|
|
210
212
|
- lib/glimmer/dsl/xml/name_space_expression.rb
|
|
211
213
|
- lib/glimmer/dsl/xml/node_parent_expression.rb
|
|
214
|
+
- lib/glimmer/dsl/xml/p_expression.rb
|
|
212
215
|
- lib/glimmer/dsl/xml/tag_expression.rb
|
|
213
216
|
- lib/glimmer/dsl/xml/text_expression.rb
|
|
214
217
|
- lib/glimmer/dsl/xml/xml_expression.rb
|
|
215
218
|
- lib/glimmer/dsl/xml/xml_node_expression.rb
|
|
216
219
|
- lib/glimmer/xml/depth_first_search_iterator.rb
|
|
217
220
|
- lib/glimmer/xml/html_node.rb
|
|
221
|
+
- lib/glimmer/xml/html_to_glimmer_converter.rb
|
|
218
222
|
- lib/glimmer/xml/html_visitor.rb
|
|
219
223
|
- lib/glimmer/xml/name_space_visitor.rb
|
|
220
224
|
- lib/glimmer/xml/node.rb
|
|
@@ -239,7 +243,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
239
243
|
- !ruby/object:Gem::Version
|
|
240
244
|
version: '0'
|
|
241
245
|
requirements: []
|
|
242
|
-
rubygems_version: 3.
|
|
246
|
+
rubygems_version: 3.5.3
|
|
243
247
|
signing_key:
|
|
244
248
|
specification_version: 4
|
|
245
249
|
summary: Glimmer DSL for XML
|