@@ -16,7 +16,6 @@ const MARKDOWN_FILE_EXT = [".md", ".jl.md"]
16
16
17
17
const SUPPORTED_HTML_OUTPUT_FILE_FORMATS = [TEMPLATE_EXT]
18
18
19
- const HTMLString = String
20
19
const HTMLParser = EzXML
21
20
22
21
const NBSP_REPLACEMENT = (" " => " !!nbsp;;" )
@@ -45,7 +44,33 @@ const SVG_ELEMENTS = [:animate, :circle, :animateMotion, :animateTransform, :cli
45
44
const EMBEDDED_JULIA_PLACEHOLDER = " ~~~~~|~~~~~"
46
45
47
46
48
- export HTMLString, html, doc, doctype
47
+ # ParsedHTMLStrings
48
+ struct ParsedHTMLString <: AbstractString
49
+ data:: String
50
+ end
51
+
52
+ function ParsedHTMLString (v:: Vector{T} ) where {T}
53
+ join (v)
54
+ end
55
+
56
+ ParsedHTMLString (args... ) = ParsedHTMLString ([args... ])
57
+
58
+ Base. string (s:: ParsedHTMLString ) = s. data
59
+ Base. String (s:: ParsedHTMLString ) = string (s)
60
+
61
+ Base. iterate (s:: ParsedHTMLString ) = iterate (s. data)
62
+ Base. iterate (s:: ParsedHTMLString , x:: Int ) = iterate (s. data, x)
63
+
64
+ Base. convert (:: Type{ParsedHTMLString} , v:: Vector{T} ) where {T} = ParsedHTMLString (v)
65
+
66
+ import Base: (* )
67
+ (* )(s:: ParsedHTMLString , t:: ParsedHTMLString ) = string (s. data, t. data)
68
+
69
+ # end ParsedHTMLStrings
70
+
71
+ const HTMLString = String
72
+
73
+ export HTMLString, html, doc, doctype, ParsedHTMLString
49
74
export @yield , collection, view!, for_each
50
75
export partial, template
51
76
@@ -68,16 +93,16 @@ Generates a HTML element in the form <...></...>
68
93
function normal_element (f:: Function , elem:: Any , args:: Vector = [], attrs:: Vector{Pair{Symbol,Any}} = Pair{Symbol,Any}[]) :: HTMLString
69
94
normal_element (Base. invokelatest (f), string (elem), args, attrs... )
70
95
end
71
- function normal_element (children:: Union{String ,Vector{String }} , elem:: Any , args:: Vector , attrs:: Pair{Symbol,Any} ) :: HTMLString
96
+ function normal_element (children:: Union{T ,Vector{T }} , elem:: Any , args:: Vector , attrs:: Pair{Symbol,Any} ):: HTMLString where {T <: AbstractString }
72
97
normal_element (children, string (elem), args, Pair{Symbol,Any}[attrs])
73
98
end
74
99
function normal_element (children:: Tuple , elem:: Any , args:: Vector , attrs:: Pair{Symbol,Any} ) :: HTMLString
75
100
normal_element ([children... ], string (elem), args, Pair{Symbol,Any}[attrs])
76
101
end
77
- function normal_element (children:: Union{String ,Vector{String }} , elem:: Any , args:: Vector , attrs... ) :: HTMLString
102
+ function normal_element (children:: Union{T ,Vector{T }} , elem:: Any , args:: Vector , attrs... ):: HTMLString where {T <: AbstractString }
78
103
normal_element (children, string (elem), args, Pair{Symbol,Any}[attrs... ])
79
104
end
80
- function normal_element (children:: Union{String ,Vector{String }} , elem:: Any , args:: Vector = [], attrs:: Vector{Pair{Symbol,Any}} = Pair{Symbol,Any}[]) :: HTMLString
105
+ function normal_element (children:: Union{T ,Vector{T }} , elem:: Any , args:: Vector = [], attrs:: Vector{Pair{Symbol,Any}} = Pair{Symbol,Any}[]):: HTMLString where {T <: AbstractString }
81
106
content_args, args = contentargs (args... )
82
107
children = string (join (children), content_args)
83
108
@@ -301,10 +326,10 @@ end
301
326
"""
302
327
Outputs document's doctype.
303
328
"""
304
- function doc (html:: String ) :: HTMLString
329
+ function doc (html:: AbstractString ) :: HTMLString
305
330
string (doctype (), html)
306
331
end
307
- function doc (doctype:: Symbol , html:: String ) :: HTMLString
332
+ function doc (doctype:: Symbol , html:: AbstractString ) :: HTMLString
308
333
string (doctype (doctype), html)
309
334
end
310
335
@@ -445,11 +470,17 @@ function html(data::String; context::Module = @__MODULE__, status::Int = 200, he
445
470
if (occursin (raw " $" , data) || occursin (" <%" , data) || layout != = nothing || forceparse) && ! noparse
446
471
Genie. Renderer. WebRenderable (Genie. Renderer. render (MIME " text/html" , data; context = context, layout = layout, vars... ), status, headers) |> Genie. Renderer. respond
447
472
else
448
- Genie . Renderer . WebRenderable (body = data, status = status , headers = headers) |> Genie . Renderer . respond
473
+ html ( ParsedHTMLString ( data); context , status, headers, layout, vars ... )
449
474
end
450
475
end
451
476
452
477
478
+ function html (data:: ParsedHTMLString ; context:: Module = @__MODULE__ , status:: Int = 200 , headers:: Genie.Renderer.HTTPHeaders = Genie. Renderer. HTTPHeaders (),
479
+ layout:: Union{String,Nothing,Genie.Renderer.FilePath} = nothing , vars... ) :: Genie.Renderer.HTTP.Response
480
+ Genie. Renderer. WebRenderable (body = data. data, status = status, headers = headers) |> Genie. Renderer. respond
481
+ end
482
+
483
+
453
484
"""
454
485
html(md::Markdown.MD; context::Module = @__MODULE__, status::Int = 200, headers::Genie.Renderer.HTTPHeaders = Genie.Renderer.HTTPHeaders(), layout::Union{String,Nothing} = nothing, forceparse::Bool = false, vars...) :: Genie.Renderer.HTTP.Response
455
486
@@ -738,7 +769,7 @@ Converts an input file to Julia code
738
769
partial = true , f_name:: Union{Symbol,Nothing} = nothing , prepend:: String = " \n " , extension = TEMPLATE_EXT) :: String
739
770
f_name = (f_name === nothing ) ? Genie. Renderer. function_name (string (input, partial)) : f_name
740
771
741
- string (" function $(f_name) (; $(Genie. Renderer. injectkwvars ()) ) \n " ,
772
+ string (" function $(f_name) (; $(Genie. Renderer. injectkwvars ()) ) :: ParsedHTMLString \n " ,
742
773
"
743
774
[
744
775
" ,
0 commit comments