Htmlizer implementation
This commit is contained in:
parent
9c99732c24
commit
26cbb6d345
@ -5,8 +5,8 @@ SERVE_DIR="/Users/madeline/Code/gemini-bridge-rack/gemini"
|
|||||||
class SkeksisApp
|
class SkeksisApp
|
||||||
def call(env)
|
def call(env)
|
||||||
status = 200
|
status = 200
|
||||||
#headers = { "Content-Type" => "text/html" }
|
headers = { "content-type" => "text/html" }
|
||||||
headers = {}
|
#headers = {}
|
||||||
body = resolve_path(SERVE_DIR + env['PATH_INFO'])
|
body = resolve_path(SERVE_DIR + env['PATH_INFO'])
|
||||||
|
|
||||||
[status, headers, body]
|
[status, headers, body]
|
||||||
@ -18,8 +18,7 @@ class SkeksisApp
|
|||||||
elsif File.exist?(path)
|
elsif File.exist?(path)
|
||||||
file = File.open(path, 'r')
|
file = File.open(path, 'r')
|
||||||
data = file.readlines
|
data = file.readlines
|
||||||
Skeksis::Parser.parse(data)
|
[Skeksis.htmlize(data)]
|
||||||
data
|
|
||||||
else # path is invalid
|
else # path is invalid
|
||||||
return nil
|
return nil
|
||||||
end
|
end
|
||||||
|
@ -2,8 +2,15 @@
|
|||||||
|
|
||||||
require_relative "skeksis/version"
|
require_relative "skeksis/version"
|
||||||
require_relative "skeksis/parser"
|
require_relative "skeksis/parser"
|
||||||
|
require_relative "skeksis/htmlize"
|
||||||
|
|
||||||
module Skeksis
|
module Skeksis
|
||||||
class Error < StandardError; end
|
class Error < StandardError; end
|
||||||
# Your code goes here...
|
# Your code goes here...
|
||||||
|
extend self
|
||||||
|
|
||||||
|
def htmlize(data)
|
||||||
|
puts Skeksis::Parser.parse(data).htmlize
|
||||||
|
Skeksis::Parser.parse(data).htmlize
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
60
lib/skeksis/htmlize.rb
Normal file
60
lib/skeksis/htmlize.rb
Normal file
@ -0,0 +1,60 @@
|
|||||||
|
module Skeksis
|
||||||
|
class IR
|
||||||
|
Header = <<~HTML
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>Gembridge</title>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
HTML
|
||||||
|
|
||||||
|
Footer = <<~HTML
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
HTML
|
||||||
|
|
||||||
|
def htmlize
|
||||||
|
build_html_doc
|
||||||
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
def build_html_doc
|
||||||
|
content = self.parse_ir.join("\n")
|
||||||
|
Header + "#{content}\n" + Footer
|
||||||
|
end
|
||||||
|
|
||||||
|
def parse_ir
|
||||||
|
html = self.map do |entry|
|
||||||
|
content = lambda { |entry|
|
||||||
|
unless entry[:content].nil? then return entry[:content][0] end
|
||||||
|
}
|
||||||
|
|
||||||
|
text = content.call(entry)
|
||||||
|
|
||||||
|
case entry[:type]
|
||||||
|
when :blank
|
||||||
|
"<br/>"
|
||||||
|
when :header
|
||||||
|
level = entry[:level]
|
||||||
|
"<h#{level}>#{text}</h#{level}>"
|
||||||
|
when :list
|
||||||
|
# TODO: Does not handle lists properly, only one <ul> tag per group of lists needs to be
|
||||||
|
# created instead
|
||||||
|
"<ul><li>#{text}</li></ul>"
|
||||||
|
when :quote
|
||||||
|
"<pre>#{text}</pre>"
|
||||||
|
when :uri
|
||||||
|
uri = entry[:uri]
|
||||||
|
text = entry[:text]
|
||||||
|
"<a href=\"#{uri}\">#{text}</a>"
|
||||||
|
when :verbatim
|
||||||
|
"<pre>" + entry[:content].join("\n") + "</pre>"
|
||||||
|
when :text
|
||||||
|
"<p>#{text}</p>"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
html
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
@ -1,6 +1,16 @@
|
|||||||
# Code adapted from MIT-licensed gemini-rb project
|
# Code adapted from MIT-licensed gemini-rb project
|
||||||
# parser.rb hosted at
|
# parser.rb hosted at
|
||||||
# https://github.com/genenetwork/gemini-rb/blob/main/lib/gemini-rb/parser.rb
|
# https://github.com/genenetwork/gemini-rb/blob/main/lib/gemini-rb/parser.rb
|
||||||
|
#
|
||||||
|
# Internal Representation types
|
||||||
|
# :blank
|
||||||
|
# :header
|
||||||
|
# :list
|
||||||
|
# :quote
|
||||||
|
# :uri
|
||||||
|
# :verbatim
|
||||||
|
# :text
|
||||||
|
#
|
||||||
|
|
||||||
module Skeksis
|
module Skeksis
|
||||||
class IR < Array
|
class IR < Array
|
||||||
@ -49,7 +59,7 @@ module Skeksis
|
|||||||
extend self
|
extend self
|
||||||
|
|
||||||
def parse(input)
|
def parse(input)
|
||||||
puts("##### PARSING STARTED #####")
|
#puts("##### PARSING STARTED #####")
|
||||||
|
|
||||||
list = IR.new
|
list = IR.new
|
||||||
|
|
||||||
@ -78,9 +88,11 @@ module Skeksis
|
|||||||
end
|
end
|
||||||
|
|
||||||
list.strip_markers!
|
list.strip_markers!
|
||||||
puts list
|
#puts list
|
||||||
#puts strip_markers(list)
|
#puts strip_markers(list)
|
||||||
puts("##### PARSING FINISHED #####")
|
#puts("##### PARSING FINISHED #####")
|
||||||
|
|
||||||
|
list
|
||||||
end
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
Loading…
Reference in New Issue
Block a user