Add examples
This commit is contained in:
parent
37af17d870
commit
8ec0774613
15 changed files with 303 additions and 44 deletions
15
README.md
15
README.md
|
@ -2,3 +2,18 @@ Repubmark
|
||||||
=========
|
=========
|
||||||
|
|
||||||
A Markdown-inspired markup language that can be compiled into HTML and Gemtext.
|
A Markdown-inspired markup language that can be compiled into HTML and Gemtext.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Examples
|
||||||
|
--------
|
||||||
|
|
||||||
|
* `./exe/repubmark examples/config.yml word_count < examples/hello.repub`
|
||||||
|
* `./exe/repubmark examples/config.yml http < examples/hello.repub`
|
||||||
|
* `./exe/repubmark examples/config.yml gemini < examples/hello.repub`
|
||||||
|
* `./exe/repubmark examples/config.yml rss < examples/hello.repub`
|
||||||
|
|
||||||
|
* `./exe/repubmark examples/config.yml word_count < examples/full.repub`
|
||||||
|
* `./exe/repubmark examples/config.yml http < examples/full.repub`
|
||||||
|
* `./exe/repubmark examples/config.yml gemini < examples/full.repub`
|
||||||
|
* `./exe/repubmark examples/config.yml rss < examples/full.repub`
|
||||||
|
|
|
@ -1,7 +0,0 @@
|
||||||
---
|
|
||||||
format: gemtext
|
|
||||||
|
|
||||||
base_url: 'gemini://causa-arcana.com'
|
|
||||||
current_path: '/xx/blog/xxxx/xx/xx/xxxxx.xxx'
|
|
||||||
images_prefix: '/assets/images/blog'
|
|
||||||
relative_urls: true
|
|
|
@ -1,16 +0,0 @@
|
||||||
---
|
|
||||||
format: html
|
|
||||||
|
|
||||||
base_url: 'https://causa-arcana.com'
|
|
||||||
current_path: '/xx/blog/xxxx/xx/xx/xxxxx.xxx'
|
|
||||||
images_prefix: '/assets/images/blog'
|
|
||||||
relative_urls: true
|
|
||||||
|
|
||||||
css_class_annotation: 'nice-annotation'
|
|
||||||
css_class_blockquote_figure: 'nice-blockquote'
|
|
||||||
css_class_figure_self: 'nice-figure'
|
|
||||||
css_class_figure_wrap: 'd-flex justify-content-center'
|
|
||||||
css_class_figures_left: 'col-xl-6'
|
|
||||||
css_class_figures_right: 'col-xl-6'
|
|
||||||
css_class_figures_wrap: 'row'
|
|
||||||
css_class_iframe_wrap: 'ratio ratio-16x9'
|
|
|
@ -1,16 +0,0 @@
|
||||||
---
|
|
||||||
format: html
|
|
||||||
|
|
||||||
base_url: 'https://causa-arcana.com'
|
|
||||||
current_path: '/xx/blog/xxxx/xx/xx/xxxxx.xxx'
|
|
||||||
images_prefix: '/assets/images/blog'
|
|
||||||
relative_urls: false
|
|
||||||
|
|
||||||
css_class_annotation: 'nice-annotation'
|
|
||||||
css_class_blockquote_figure: 'nice-blockquote'
|
|
||||||
css_class_figure_self: 'nice-figure'
|
|
||||||
css_class_figure_wrap: 'd-flex justify-content-center'
|
|
||||||
css_class_figures_left: 'col-xl-6'
|
|
||||||
css_class_figures_right: 'col-xl-6'
|
|
||||||
css_class_figures_wrap: 'row'
|
|
||||||
css_class_iframe_wrap: 'ratio ratio-16x9'
|
|
|
@ -1,2 +0,0 @@
|
||||||
---
|
|
||||||
format: word_count
|
|
43
examples/config.yml
Normal file
43
examples/config.yml
Normal file
|
@ -0,0 +1,43 @@
|
||||||
|
---
|
||||||
|
##########
|
||||||
|
# Shared #
|
||||||
|
##########
|
||||||
|
|
||||||
|
paths: &paths
|
||||||
|
current_path: '/xxxxx.xxx'
|
||||||
|
images_prefix: '/assets/images'
|
||||||
|
|
||||||
|
css_classes: &css_classes
|
||||||
|
css_class_annotation: 'nice-annotation'
|
||||||
|
css_class_blockquote_figure: 'nice-blockquote'
|
||||||
|
css_class_figure_self: 'nice-figure'
|
||||||
|
css_class_figure_wrap: 'd-flex justify-content-center'
|
||||||
|
css_class_figures_left: 'col-xl-6'
|
||||||
|
css_class_figures_right: 'col-xl-6'
|
||||||
|
css_class_figures_wrap: 'row'
|
||||||
|
css_class_iframe_wrap: 'ratio ratio-16x9'
|
||||||
|
|
||||||
|
############
|
||||||
|
# Profiles #
|
||||||
|
############
|
||||||
|
|
||||||
|
word_count:
|
||||||
|
format: word_count
|
||||||
|
|
||||||
|
gemini:
|
||||||
|
<<: *paths
|
||||||
|
format: gemtext
|
||||||
|
relative_urls: true
|
||||||
|
|
||||||
|
http:
|
||||||
|
<<: *paths
|
||||||
|
<<: *css_classes
|
||||||
|
format: html
|
||||||
|
relative_urls: true
|
||||||
|
|
||||||
|
rss:
|
||||||
|
<<: *paths
|
||||||
|
<<: *css_classes
|
||||||
|
format: html
|
||||||
|
relative_urls: false
|
||||||
|
base_url: 'https://example.com'
|
36
examples/full.gmi
Normal file
36
examples/full.gmi
Normal file
|
@ -0,0 +1,36 @@
|
||||||
|
Gemtext prolofue
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Annotation paragraph text
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
> Blockquote paragraph text
|
||||||
|
Blockquote caption text
|
||||||
|
|
||||||
|
```
|
||||||
|
[[:foo, 1], [:bar, 2], [:car, 3]].each do |str, num|
|
||||||
|
puts str
|
||||||
|
puts num**2
|
||||||
|
end
|
||||||
|
```
|
||||||
|
|
||||||
|
=> https://example.com Example.com
|
||||||
|
|
||||||
|
=> assets/images/foo.jpg The Foo
|
||||||
|
|
||||||
|
=> assets/images/qwe.jpg The Qwe
|
||||||
|
=> assets/images/rty.jpg The Rty
|
||||||
|
|
||||||
|
## Chapter 1
|
||||||
|
|
||||||
|
Chapter 1 paragraph text
|
||||||
|
|
||||||
|
## Chapter 2
|
||||||
|
|
||||||
|
Chapter 2 paragraph text
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Gemtext epilogue
|
83
examples/full.html
Normal file
83
examples/full.html
Normal file
|
@ -0,0 +1,83 @@
|
||||||
|
<div>
|
||||||
|
HTTP prologue
|
||||||
|
</div>
|
||||||
|
<div class="nice-annotation">
|
||||||
|
<p>
|
||||||
|
<span>
|
||||||
|
Annotation paragraph text
|
||||||
|
</span>
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
<figure class="nice-blockquote">
|
||||||
|
<blockquote>
|
||||||
|
<p>
|
||||||
|
<span>
|
||||||
|
Blockquote paragraph text
|
||||||
|
</span>
|
||||||
|
</p>
|
||||||
|
</blockquote>
|
||||||
|
<figcaption>
|
||||||
|
<span>
|
||||||
|
Blockquote caption text
|
||||||
|
</span>
|
||||||
|
</figcaption>
|
||||||
|
</figure>
|
||||||
|
<pre><code><span class="hl lin"> 1 </span><span class="hl opt">[[</span><span class="hl kwc">:foo</span><span class="hl opt">,</span> <span class="hl num">1</span><span class="hl opt">], [</span><span class="hl kwc">:bar</span><span class="hl opt">,</span> <span class="hl num">2</span><span class="hl opt">], [</span><span class="hl kwc">:car</span><span class="hl opt">,</span> <span class="hl num">3</span><span class="hl opt">]].</span>each <span class="hl kwa">do</span> <span class="hl opt">|</span>str<span class="hl opt">,</span> num<span class="hl opt">|</span>
|
||||||
|
<span class="hl lin"> 2 </span> puts str
|
||||||
|
<span class="hl lin"> 3 </span> puts num<span class="hl opt">**</span><span class="hl num">2</span>
|
||||||
|
<span class="hl lin"> 4 </span><span class="hl kwa">end</span>
|
||||||
|
</code></pre>
|
||||||
|
<div class="ratio ratio-16x9">
|
||||||
|
<iframe
|
||||||
|
title="Example.com"
|
||||||
|
src="https://example.com"
|
||||||
|
allowfullscreen=""
|
||||||
|
frameborder="0"
|
||||||
|
sandbox="allow-same-origin allow-scripts allow-popups"
|
||||||
|
></iframe>
|
||||||
|
</div>
|
||||||
|
<div class="d-flex justify-content-center">
|
||||||
|
<figure class="nice-figure">
|
||||||
|
<img src="assets/images/foo.jpg" alt="The Foo"/>
|
||||||
|
<figcaption>
|
||||||
|
The Foo
|
||||||
|
</figcaption>
|
||||||
|
</figure>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-xl-6">
|
||||||
|
<div class="d-flex justify-content-center">
|
||||||
|
<figure class="nice-figure">
|
||||||
|
<img src="assets/images/qwe.jpg" alt="The Qwe"/>
|
||||||
|
<figcaption>
|
||||||
|
The Qwe
|
||||||
|
</figcaption>
|
||||||
|
</figure>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="col-xl-6">
|
||||||
|
<div class="d-flex justify-content-center">
|
||||||
|
<figure class="nice-figure">
|
||||||
|
<img src="assets/images/rty.jpg" alt="The Rty"/>
|
||||||
|
<figcaption>
|
||||||
|
The Rty
|
||||||
|
</figcaption>
|
||||||
|
</figure>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<h2>Chapter 1</h2>
|
||||||
|
<p>
|
||||||
|
<span>
|
||||||
|
Chapter 1 paragraph text
|
||||||
|
</span>
|
||||||
|
</p>
|
||||||
|
<h2>Chapter 2</h2>
|
||||||
|
<p>
|
||||||
|
<span>
|
||||||
|
Chapter 2 paragraph text
|
||||||
|
</span>
|
||||||
|
</p>
|
||||||
|
<div>
|
||||||
|
HTTP epilogue
|
||||||
|
</div>
|
60
examples/full.repub
Normal file
60
examples/full.repub
Normal file
|
@ -0,0 +1,60 @@
|
||||||
|
article.prologue do |custom|
|
||||||
|
custom.for :html, 'HTTP prologue'
|
||||||
|
custom.for :gemtext, 'Gemtext prolofue'
|
||||||
|
end
|
||||||
|
|
||||||
|
article.annotation do |annotation|
|
||||||
|
annotation.paragraph do |paragraph|
|
||||||
|
paragraph.text 'Annotation paragraph text'
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
article.blockquote do |blockquote|
|
||||||
|
blockquote.paragraph do |paragraph|
|
||||||
|
paragraph.text 'Blockquote paragraph text'
|
||||||
|
end
|
||||||
|
blockquote.caption do |caption|
|
||||||
|
caption.text 'Blockquote caption text'
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
article.code_block :ruby, <<~CODE
|
||||||
|
[[:foo, 1], [:bar, 2], [:car, 3]].each do |str, num|
|
||||||
|
puts str
|
||||||
|
puts num**2
|
||||||
|
end
|
||||||
|
CODE
|
||||||
|
|
||||||
|
article.iframe 'Example.com', 'https://example.com'
|
||||||
|
|
||||||
|
article.nice_figure 'foo.jpg', 'The Foo'
|
||||||
|
|
||||||
|
article.nice_figures do |figures|
|
||||||
|
figures.figure 'qwe.jpg', 'The Qwe'
|
||||||
|
figures.figure 'rty.jpg', 'The Rty'
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
article.chapter 'Chapter 1' do |chapter|
|
||||||
|
chapter.paragraph do |paragraph|
|
||||||
|
paragraph.text 'Chapter 1 paragraph text'
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
article.chapter 'Chapter 2' do |chapter|
|
||||||
|
chapter.paragraph do |paragraph|
|
||||||
|
paragraph.text 'Chapter 2 paragraph text'
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
article.epilogue do |custom|
|
||||||
|
custom.for :html, 'HTTP epilogue'
|
||||||
|
custom.for :gemtext, 'Gemtext epilogue'
|
||||||
|
end
|
1
examples/hello.gmi
Normal file
1
examples/hello.gmi
Normal file
|
@ -0,0 +1 @@
|
||||||
|
Hello, World!
|
5
examples/hello.html
Normal file
5
examples/hello.html
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
<p>
|
||||||
|
<span>
|
||||||
|
Hello, World!
|
||||||
|
</span>
|
||||||
|
</p>
|
3
examples/hello.repub
Normal file
3
examples/hello.repub
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
article.paragraph do |paragraph|
|
||||||
|
paragraph.text 'Hello, World!'
|
||||||
|
end
|
|
@ -8,7 +8,10 @@ require 'bundler/setup'
|
||||||
|
|
||||||
require 'repubmark'
|
require 'repubmark'
|
||||||
|
|
||||||
config = Repubmark::Config.load_file String ARGV[0]
|
config_filename = String(ARGV[0]).freeze
|
||||||
|
profile = String(ARGV[1]).freeze
|
||||||
|
|
||||||
|
config = Repubmark::Config.load_file config_filename, profile
|
||||||
$article = Repubmark::Elems::Article.new config
|
$article = Repubmark::Elems::Article.new config
|
||||||
|
|
||||||
template = $stdin.read.freeze
|
template = $stdin.read.freeze
|
||||||
|
|
|
@ -21,8 +21,12 @@ module Repubmark
|
||||||
|
|
||||||
attr_reader :format
|
attr_reader :format
|
||||||
|
|
||||||
def self.load_file(filename)
|
def self.load_file(filename, profile)
|
||||||
new(**YAML.safe_load_file(filename).transform_keys(&:to_sym))
|
config_data = YAML.safe_load_file filename, aliases: true
|
||||||
|
profile_data = config_data[profile]
|
||||||
|
raise 'Unknown profile' if profile_data.nil?
|
||||||
|
|
||||||
|
new(**profile_data.transform_keys(&:to_sym))
|
||||||
end
|
end
|
||||||
|
|
||||||
def initialize(format:, **kwargs)
|
def initialize(format:, **kwargs)
|
||||||
|
|
47
test.rb
Executable file
47
test.rb
Executable file
|
@ -0,0 +1,47 @@
|
||||||
|
#!/usr/bin/env ruby
|
||||||
|
# frozen_string_literal: true
|
||||||
|
|
||||||
|
require 'open3'
|
||||||
|
|
||||||
|
EXE = File.expand_path('exe/repubmark', __dir__).freeze
|
||||||
|
EXAMPLES = File.expand_path('examples', __dir__).freeze
|
||||||
|
EXAMPLES_GLOB = File.expand_path('examples/*.repub', __dir__).freeze
|
||||||
|
CONFIG = File.expand_path('examples/config.yml', __dir__).freeze
|
||||||
|
|
||||||
|
PROFILES = [
|
||||||
|
%w[http html],
|
||||||
|
%w[gemini gmi],
|
||||||
|
].map(&:freeze).freeze
|
||||||
|
|
||||||
|
Dir[EXAMPLES_GLOB].each do |example_filename|
|
||||||
|
example = File.read example_filename
|
||||||
|
PROFILES.each do |profile_name, expected_ext|
|
||||||
|
expected_filename = "#{example_filename[...-6]}.#{expected_ext}"
|
||||||
|
expected = File.read expected_filename
|
||||||
|
|
||||||
|
puts '=' * 80
|
||||||
|
puts "Config: #{CONFIG}"
|
||||||
|
puts "Example: #{example_filename}"
|
||||||
|
puts "Profile: #{profile_name}"
|
||||||
|
puts "Expected: #{expected_filename}"
|
||||||
|
puts '-' * 80
|
||||||
|
puts example.strip
|
||||||
|
puts '-' * 80
|
||||||
|
puts expected.strip
|
||||||
|
|
||||||
|
stdin, stdout, wait_thr = Open3.popen2 EXE, CONFIG, profile_name
|
||||||
|
stdin.puts example
|
||||||
|
stdin.close
|
||||||
|
result = stdout.read
|
||||||
|
stdout.close
|
||||||
|
raise 'Template engine error' unless wait_thr.value.success?
|
||||||
|
next if result == expected
|
||||||
|
|
||||||
|
puts '-' * 80
|
||||||
|
puts result.strip
|
||||||
|
puts '=' * 80
|
||||||
|
raise 'Invalid output'
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
puts '=' * 80
|
Loading…
Reference in a new issue