feat: toad.md v0.0.1
parent
9bac5ecb70
commit
c7d0d07c24
2
00001.md
2
00001.md
|
@ -4,13 +4,11 @@
|
||||||
(@)(@) {0,0}
|
(@)(@) {0,0}
|
||||||
(~~~~) ./)_)
|
(~~~~) ./)_)
|
||||||
(>vv<) " "
|
(>vv<) " "
|
||||||
|
|
||||||
\
|
\
|
||||||
ya see, some people go real fast
|
ya see, some people go real fast
|
||||||
and other people they go real slow
|
and other people they go real slow
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
```
|
```
|
||||||
(@)(@) {0,0} -- Hoo?
|
(@)(@) {0,0} -- Hoo?
|
||||||
(~~~~) ./)_)
|
(~~~~) ./)_)
|
||||||
|
|
|
@ -0,0 +1,18 @@
|
||||||
|
#bin/sh
|
||||||
|
echo "<rss version=\"2.0\"><channel><title>It's Pro Toad and Superb Owl</title>" > feed.xml
|
||||||
|
echo "<link>https://git.tilde.town/dozens/protoadandsuperbowl</link><description>It's Pro Toad and Superb Owl!</description><atom:link rel="self" type="application/rss+xml" href="https://git.tilde.town/dozens/protoadandsuperbowl/raw/branch/master/feed.xml"/><generator>/bin/sh</generator>" >> feed.xml
|
||||||
|
|
||||||
|
|
||||||
|
for f in $(find . -type f -iname '*.md' ! -name 'README.md' | sed 's/\.\///'); do
|
||||||
|
echo "<item>
|
||||||
|
<title>$f</title>
|
||||||
|
<link>https://git.tilde.town/dozens/protoadandsuperbowl/raw/branch/master/$f</link>
|
||||||
|
<pubDate>$(stat -f "%m%t%Sm %N" $f | cut -f2 | cut -f1-4 -d ' ')</pubDate>
|
||||||
|
<description><![CDATA[" >> feed.xml
|
||||||
|
pandoc $f >> feed.xml
|
||||||
|
echo "]]></description>
|
||||||
|
</item>" >> feed.xml
|
||||||
|
done
|
||||||
|
|
||||||
|
echo '</channel></rss>' >> feed.xml
|
||||||
|
|
|
@ -0,0 +1,191 @@
|
||||||
|
# toad.md
|
||||||
|
|
||||||
|
> the pro toad and superb owl comic generator
|
||||||
|
|
||||||
|
## about
|
||||||
|
|
||||||
|
This program reads a script file and interpolates its contents with some ascii art, and then writes the result to stdout.
|
||||||
|
|
||||||
|
The end goal is automating the creation of [Pro Toad and Superb Owl][ptso] comics.
|
||||||
|
|
||||||
|
[ptso]: https://git.tilde.town/dozens/protoadandsuperbowl
|
||||||
|
|
||||||
|
## usage
|
||||||
|
|
||||||
|
$ retro toad.md path/to/script.txt > comic.txt
|
||||||
|
|
||||||
|
## components
|
||||||
|
|
||||||
|
the components of the program are:
|
||||||
|
|
||||||
|
1. IO - open the text file, read it line by line, close the file, write to stdout
|
||||||
|
|
||||||
|
2. input parser - there are 2 line types in the script file:
|
||||||
|
|
||||||
|
- a text line, and
|
||||||
|
- a separator line: a special `---` line to separate panels.
|
||||||
|
|
||||||
|
3. comic builder - build the first panel, the second panel (no input needed, just output tanel 2), and the 3rd panel (repeat steps needed for 1st panel)
|
||||||
|
|
||||||
|
4. panel builder - for as long as art array has length, and as long as the current input line has length or until the input parser hits the separator line or the end of the file, call the line builder with the next line of the art array (if there is one) and the input line.
|
||||||
|
|
||||||
|
If the input line has no length, and the next line is not the separator, have the line builder insert a "blank line" and get a new input line.
|
||||||
|
|
||||||
|
5. line builder - given two strings, build a new string containing the first, and appending words from the second up to a total of ~80 cols.
|
||||||
|
|
||||||
|
## argument validation
|
||||||
|
|
||||||
|
print a helpful message if the script is called without an argument
|
||||||
|
|
||||||
|
TODO: is `script:get-argument` an array? check to see if length equal zero
|
||||||
|
|
||||||
|
'ARGS s:put nl
|
||||||
|
script:get-argument a:length n:put
|
||||||
|
|
||||||
|
## panels
|
||||||
|
|
||||||
|
okay let's go
|
||||||
|
|
||||||
|
There are two panels: one where toad speaks, and one where owl speaks. Let's save each to an array, one string per line.
|
||||||
|
|
||||||
|
Here's toad (panels 1 & 3):
|
||||||
|
|
||||||
|
~~~
|
||||||
|
'toad var
|
||||||
|
{
|
||||||
|
'_(@)(@)_____{0,0}__
|
||||||
|
'_(~~~~)____./)_)___
|
||||||
|
'_(>vv<)______"_"___
|
||||||
|
'___________________
|
||||||
|
'_____\_____________
|
||||||
|
} !toad
|
||||||
|
~~~
|
||||||
|
|
||||||
|
Here's owl (panel 2):
|
||||||
|
|
||||||
|
~~~
|
||||||
|
'owl var
|
||||||
|
{
|
||||||
|
'_(@)(@)_____{0,0}__--_Hoo?
|
||||||
|
'_(~~~~)____./)_)__________
|
||||||
|
'_(>vv<)______"_"__________
|
||||||
|
} !owl
|
||||||
|
~~~
|
||||||
|
|
||||||
|
Also here are some code fences, because we'll need those too:
|
||||||
|
|
||||||
|
~~~
|
||||||
|
:fences '``` s:put nl ;
|
||||||
|
~~~
|
||||||
|
|
||||||
|
## Input/output
|
||||||
|
|
||||||
|
open the file for reading and save the file handle to `file`
|
||||||
|
|
||||||
|
save the file fize. we'll use this to check for end of file.
|
||||||
|
|
||||||
|
~~~
|
||||||
|
'handle var
|
||||||
|
'size var
|
||||||
|
|
||||||
|
#0 script:get-argument
|
||||||
|
file:open-for-reading !handle !size
|
||||||
|
|
||||||
|
:get-line @handle file:read-line ;
|
||||||
|
~~~
|
||||||
|
|
||||||
|
## Input Parser
|
||||||
|
|
||||||
|
TODO: this isn't tested or used anywhere yet.
|
||||||
|
|
||||||
|
~~~
|
||||||
|
{{
|
||||||
|
:end-of-file? (-) @handle file:tell @size gteq? ;
|
||||||
|
:separator? (m-f) '--- eq? ;
|
||||||
|
---reveal---
|
||||||
|
:end-of-section? (-f) separator? end-of-file? or ;
|
||||||
|
}}
|
||||||
|
~~~
|
||||||
|
|
||||||
|
## Line wrapping
|
||||||
|
|
||||||
|
Here's a line wrapping module.
|
||||||
|
|
||||||
|
~~~
|
||||||
|
{{
|
||||||
|
#0 'displayed var-n
|
||||||
|
#40 'wrap-at var-n
|
||||||
|
:wrap? dup @displayed + @wrap-at gt? ;
|
||||||
|
:display [ nl !displayed ] [ displayed v:inc-by ] choose s:put sp ;
|
||||||
|
---reveal---
|
||||||
|
:s:put-wrapped (s-) ASCII:SPACE s:tokenize
|
||||||
|
[ dup s:length wrap? display ] a:for-each
|
||||||
|
#0 !displayed ;
|
||||||
|
}}
|
||||||
|
~~~
|
||||||
|
|
||||||
|
src:
|
||||||
|
|
||||||
|
<https://github.com/crcx/retroforth/blob/master/example/wordwrap.retro>
|
||||||
|
|
||||||
|
|
||||||
|
## Panel 1
|
||||||
|
|
||||||
|
print out the first panel
|
||||||
|
|
||||||
|
ascii art:
|
||||||
|
|
||||||
|
~~~
|
||||||
|
fences
|
||||||
|
@toad [ s:put nl ] a:for-each
|
||||||
|
~~~
|
||||||
|
|
||||||
|
text:
|
||||||
|
|
||||||
|
~~~
|
||||||
|
[
|
||||||
|
get-line
|
||||||
|
dup s:put-wrapped
|
||||||
|
'--- s:eq? not
|
||||||
|
dup [ nl nl ] if
|
||||||
|
] while
|
||||||
|
nl fences nl nl
|
||||||
|
~~~
|
||||||
|
|
||||||
|
TODO: don't print `---` line.
|
||||||
|
|
||||||
|
|
||||||
|
## Panel 2
|
||||||
|
|
||||||
|
~~~
|
||||||
|
fences
|
||||||
|
@owl [ s:put nl ] a:for-each
|
||||||
|
fences nl nl
|
||||||
|
~~~
|
||||||
|
|
||||||
|
## Panel 3
|
||||||
|
|
||||||
|
print the ascii:
|
||||||
|
|
||||||
|
~~~
|
||||||
|
fences
|
||||||
|
@toad [ s:put nl ] a:for-each
|
||||||
|
~~~
|
||||||
|
|
||||||
|
print the text:
|
||||||
|
|
||||||
|
~~~
|
||||||
|
[
|
||||||
|
get-line dup s:put-wrapped
|
||||||
|
#0
|
||||||
|
dup [ nl nl ] if
|
||||||
|
] while
|
||||||
|
nl fences
|
||||||
|
drop
|
||||||
|
~~~
|
||||||
|
|
||||||
|
TODO: loop till end of file
|
||||||
|
|
||||||
|
## Conclusion
|
||||||
|
|
||||||
|
That's all! That's the end
|
91
feed.xml
91
feed.xml
|
@ -1,9 +1,10 @@
|
||||||
<rss version="2.0"><channel><title>It's Pro Toad and Superb Owl</title>
|
<rss version="2.0"><channel><title>It's Pro Toad and Superb Owl</title>
|
||||||
|
<link>https://git.tilde.town/dozens/protoadandsuperbowl</link><description>It's Pro Toad and Superb Owl!</description><atom:link rel=self type=application/rss+xml href=https://git.tilde.town/dozens/protoadandsuperbowl/raw/branch/master/feed.xml/><generator>/bin/sh</generator>
|
||||||
<item>
|
<item>
|
||||||
<title>00004.md</title>
|
<title>00004.md</title>
|
||||||
<link>https://git.tilde.town/dozens/protoadandsuperbowl/raw/branch/master/00004.md</link>
|
<link>https://git.tilde.town/dozens/protoadandsuperbowl/raw/branch/master/00004.md</link>
|
||||||
<pubDate>Feb 11 17:48:03 2021</pubDate>
|
<pubDate>Feb 11 17:48:03 2021</pubDate>
|
||||||
<description><![CDATA[
|
<description><![CDATA[
|
||||||
<h1 id="pro-toad-and-superb-owl">Pro Toad and Superb Owl</h1>
|
<h1 id="pro-toad-and-superb-owl">Pro Toad and Superb Owl</h1>
|
||||||
<pre><code> (@)(@) {0,0}
|
<pre><code> (@)(@) {0,0}
|
||||||
(~~~~) ./)_)
|
(~~~~) ./)_)
|
||||||
|
@ -25,12 +26,12 @@
|
||||||
Yep! I guess you could say it
|
Yep! I guess you could say it
|
||||||
was a SUPER BOWL PROTO AD!</code></pre>
|
was a SUPER BOWL PROTO AD!</code></pre>
|
||||||
]]></description>
|
]]></description>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<title>00001.md</title>
|
<title>00001.md</title>
|
||||||
<link>https://git.tilde.town/dozens/protoadandsuperbowl/raw/branch/master/00001.md</link>
|
<link>https://git.tilde.town/dozens/protoadandsuperbowl/raw/branch/master/00001.md</link>
|
||||||
<pubDate>Feb 10 12:25:55 2021</pubDate>
|
<pubDate>Feb 10 12:25:55 2021</pubDate>
|
||||||
<description><![CDATA[
|
<description><![CDATA[
|
||||||
<h1 id="pro-toad-and-superb-owl">Pro Toad and Superb Owl</h1>
|
<h1 id="pro-toad-and-superb-owl">Pro Toad and Superb Owl</h1>
|
||||||
<pre><code> (@)(@) {0,0}
|
<pre><code> (@)(@) {0,0}
|
||||||
(~~~~) ./)_)
|
(~~~~) ./)_)
|
||||||
|
@ -50,12 +51,12 @@
|
||||||
yeah that's the real root cause
|
yeah that's the real root cause
|
||||||
of most workplace conflict</code></pre>
|
of most workplace conflict</code></pre>
|
||||||
]]></description>
|
]]></description>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<title>00005.md</title>
|
<title>00005.md</title>
|
||||||
<link>https://git.tilde.town/dozens/protoadandsuperbowl/raw/branch/master/00005.md</link>
|
<link>https://git.tilde.town/dozens/protoadandsuperbowl/raw/branch/master/00005.md</link>
|
||||||
<pubDate>Feb 12 10:34:52 2021</pubDate>
|
<pubDate>Feb 12 10:34:52 2021</pubDate>
|
||||||
<description><![CDATA[
|
<description><![CDATA[
|
||||||
<h1 id="pro-toad-and-superb-owl">Pro Toad and Superb Owl</h1>
|
<h1 id="pro-toad-and-superb-owl">Pro Toad and Superb Owl</h1>
|
||||||
<pre><code> (@)(@) {0,0}
|
<pre><code> (@)(@) {0,0}
|
||||||
(~~~~) ./)_)
|
(~~~~) ./)_)
|
||||||
|
@ -78,12 +79,12 @@
|
||||||
I can see some flowers and leaves
|
I can see some flowers and leaves
|
||||||
and listen to the birds and stuff.</code></pre>
|
and listen to the birds and stuff.</code></pre>
|
||||||
]]></description>
|
]]></description>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<title>00008.md</title>
|
<title>00008.md</title>
|
||||||
<link>https://git.tilde.town/dozens/protoadandsuperbowl/raw/branch/master/00008.md</link>
|
<link>https://git.tilde.town/dozens/protoadandsuperbowl/raw/branch/master/00008.md</link>
|
||||||
<pubDate>Feb 26 08:26:45 2021</pubDate>
|
<pubDate>Feb 26 08:26:45 2021</pubDate>
|
||||||
<description><![CDATA[
|
<description><![CDATA[
|
||||||
<h1 id="pro-toad-and-superb-owl">Pro Toad and Superb Owl</h1>
|
<h1 id="pro-toad-and-superb-owl">Pro Toad and Superb Owl</h1>
|
||||||
<pre><code> (@)(@) {0,0} There was a sense of euphoria
|
<pre><code> (@)(@) {0,0} There was a sense of euphoria
|
||||||
(~~~~) ./)_) while we were in flow, like we
|
(~~~~) ./)_) while we were in flow, like we
|
||||||
|
@ -108,12 +109,12 @@
|
||||||
bros invited me to "do some lines" and at this point I
|
bros invited me to "do some lines" and at this point I
|
||||||
can't remember if it was code or coke.</code></pre>
|
can't remember if it was code or coke.</code></pre>
|
||||||
]]></description>
|
]]></description>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<title>00009.md</title>
|
<title>00009.md</title>
|
||||||
<link>https://git.tilde.town/dozens/protoadandsuperbowl/raw/branch/master/00009.md</link>
|
<link>https://git.tilde.town/dozens/protoadandsuperbowl/raw/branch/master/00009.md</link>
|
||||||
<pubDate>Apr 17 11:44:45 2021</pubDate>
|
<pubDate>Apr 17 11:44:45 2021</pubDate>
|
||||||
<description><![CDATA[
|
<description><![CDATA[
|
||||||
<h1 id="pro-toad-and-superb-owl">Pro Toad and Superb Owl</h1>
|
<h1 id="pro-toad-and-superb-owl">Pro Toad and Superb Owl</h1>
|
||||||
<pre><code> (@)(@) {0,0} So I picked up a book in the
|
<pre><code> (@)(@) {0,0} So I picked up a book in the
|
||||||
(~~~~) ./)_) middle of this epic fantasy series.
|
(~~~~) ./)_) middle of this epic fantasy series.
|
||||||
|
@ -140,12 +141,12 @@
|
||||||
if there's one thing this world needs more of, it's mother
|
if there's one thing this world needs more of, it's mother
|
||||||
fucking dragons beating the shit out of nazis.</code></pre>
|
fucking dragons beating the shit out of nazis.</code></pre>
|
||||||
]]></description>
|
]]></description>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<title>00002.md</title>
|
<title>00002.md</title>
|
||||||
<link>https://git.tilde.town/dozens/protoadandsuperbowl/raw/branch/master/00002.md</link>
|
<link>https://git.tilde.town/dozens/protoadandsuperbowl/raw/branch/master/00002.md</link>
|
||||||
<pubDate>Feb 11 16:43:59 2021</pubDate>
|
<pubDate>Feb 11 16:43:59 2021</pubDate>
|
||||||
<description><![CDATA[
|
<description><![CDATA[
|
||||||
<h1 id="pro-toad-and-superb-owl">Pro Toad and Superb Owl</h1>
|
<h1 id="pro-toad-and-superb-owl">Pro Toad and Superb Owl</h1>
|
||||||
<pre><code> (@)(@) {0,0}
|
<pre><code> (@)(@) {0,0}
|
||||||
(~~~~) ./)_)
|
(~~~~) ./)_)
|
||||||
|
@ -166,12 +167,12 @@
|
||||||
job either. But they keep giving me
|
job either. But they keep giving me
|
||||||
YAML and I keep ENGINEERING it!</code></pre>
|
YAML and I keep ENGINEERING it!</code></pre>
|
||||||
]]></description>
|
]]></description>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<title>00006.md</title>
|
<title>00006.md</title>
|
||||||
<link>https://git.tilde.town/dozens/protoadandsuperbowl/raw/branch/master/00006.md</link>
|
<link>https://git.tilde.town/dozens/protoadandsuperbowl/raw/branch/master/00006.md</link>
|
||||||
<pubDate>Feb 13 14:11:29 2021</pubDate>
|
<pubDate>Feb 13 14:11:29 2021</pubDate>
|
||||||
<description><![CDATA[
|
<description><![CDATA[
|
||||||
<h1 id="pro-toad-and-superb-owl">Pro Toad and Superb Owl</h1>
|
<h1 id="pro-toad-and-superb-owl">Pro Toad and Superb Owl</h1>
|
||||||
<pre><code> (@)(@) {0,0} Is there even such a thing
|
<pre><code> (@)(@) {0,0} Is there even such a thing
|
||||||
(~~~~) ./)_) as "mainstream" anymore? I
|
(~~~~) ./)_) as "mainstream" anymore? I
|
||||||
|
@ -203,12 +204,12 @@
|
||||||
small STREAMS and countercultures as there
|
small STREAMS and countercultures as there
|
||||||
are individual people.</code></pre>
|
are individual people.</code></pre>
|
||||||
]]></description>
|
]]></description>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<title>00007.md</title>
|
<title>00007.md</title>
|
||||||
<link>https://git.tilde.town/dozens/protoadandsuperbowl/raw/branch/master/00007.md</link>
|
<link>https://git.tilde.town/dozens/protoadandsuperbowl/raw/branch/master/00007.md</link>
|
||||||
<pubDate>Feb 26 08:11:25 2021</pubDate>
|
<pubDate>Feb 26 08:11:25 2021</pubDate>
|
||||||
<description><![CDATA[
|
<description><![CDATA[
|
||||||
<h1 id="pro-toad-and-superb-owl">Pro Toad and Superb Owl</h1>
|
<h1 id="pro-toad-and-superb-owl">Pro Toad and Superb Owl</h1>
|
||||||
<pre><code> (@)(@) {0,0}
|
<pre><code> (@)(@) {0,0}
|
||||||
(~~~~) ./)_)
|
(~~~~) ./)_)
|
||||||
|
@ -224,12 +225,12 @@
|
||||||
(~~~~) ./)_)
|
(~~~~) ./)_)
|
||||||
(>vv<) " "</code></pre>
|
(>vv<) " "</code></pre>
|
||||||
]]></description>
|
]]></description>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<title>00003.md</title>
|
<title>00003.md</title>
|
||||||
<link>https://git.tilde.town/dozens/protoadandsuperbowl/raw/branch/master/00003.md</link>
|
<link>https://git.tilde.town/dozens/protoadandsuperbowl/raw/branch/master/00003.md</link>
|
||||||
<pubDate>Feb 11 17:01:15 2021</pubDate>
|
<pubDate>Feb 11 17:01:15 2021</pubDate>
|
||||||
<description><![CDATA[
|
<description><![CDATA[
|
||||||
<h1 id="pro-toad-and-superb-owl">Pro Toad and Superb Owl</h1>
|
<h1 id="pro-toad-and-superb-owl">Pro Toad and Superb Owl</h1>
|
||||||
<pre><code> (@)(@) {0,0}
|
<pre><code> (@)(@) {0,0}
|
||||||
(~~~~) ./)_)
|
(~~~~) ./)_)
|
||||||
|
@ -247,5 +248,5 @@
|
||||||
\
|
\
|
||||||
Yeah, me neither.</code></pre>
|
Yeah, me neither.</code></pre>
|
||||||
]]></description>
|
]]></description>
|
||||||
</item>
|
</item>
|
||||||
</channel></rss>
|
</channel></rss>
|
||||||
|
|
16
rss.sh
16
rss.sh
|
@ -1,16 +0,0 @@
|
||||||
#bin/sh
|
|
||||||
echo "<rss version=\"2.0\"><channel><title>It's Pro Toad and Superb Owl</title>" > feed.xml
|
|
||||||
|
|
||||||
for f in $(find . -type f -iname '*.md' ! -name 'README.md' | sed 's/\.\///'); do
|
|
||||||
echo "<item>" >> feed.xml
|
|
||||||
echo "<title>$f</title>" >> feed.xml
|
|
||||||
echo "<link>https://git.tilde.town/dozens/protoadandsuperbowl/raw/branch/master/$f</link>" >> feed.xml
|
|
||||||
echo "<pubDate>$(stat -f "%m%t%Sm %N" $f | cut -f2 | cut -f1-4 -d ' ')</pubDate>" >> feed.xml
|
|
||||||
echo "<description><![CDATA[" >> feed.xml
|
|
||||||
pandoc $f >> feed.xml
|
|
||||||
echo "]]></description>" >> feed.xml
|
|
||||||
echo "</item>" >> feed.xml
|
|
||||||
done
|
|
||||||
|
|
||||||
echo '</channel></rss>' >> feed.xml
|
|
||||||
|
|
|
@ -0,0 +1,5 @@
|
||||||
|
ya see, some people go real fast ya see, some people go real fast ya see, some people go real fast ya see, some people go real fast
|
||||||
|
and other people they go real slow
|
||||||
|
---
|
||||||
|
yeah that's the real root cause of most workplace conflict
|
||||||
|
ayup
|
Loading…
Reference in New Issue