Commit fa876ec4d44a8d7e83df544f81449fba0bbdfc88

Authored by David RENÉ
1 parent cebdf6b7

add encode_HTML_quote

Showing 1 changed file with 53 additions and 4 deletions   Show diff stats
web/making_a_web_site.anubis
@@ -120,6 +120,50 @@ public define String @@ -120,6 +120,50 @@ public define String
120 _HTML_encode_entities(explode(source), []) 120 _HTML_encode_entities(explode(source), [])
121 . 121 .
122 122
  123 +define List(Word8)
  124 +/** Test for HTML entity which must be encoded
  125 + * and return the encoded entity if needed
  126 + */
  127 + get_entity_quote
  128 + (
  129 + Word8 _char,
  130 + List(Word8) tail
  131 + )=
  132 + //test for the ampersand
  133 + if _char = '&' then
  134 + //test if it's already an encoded string like & < etc. In that case we do nothing
  135 + if insensitive_equal(['&','a','m','p',';'], tail, 0) then [_char]
  136 + else if insensitive_equal(['&','l','t',';'], tail, 0) then [_char]
  137 + else if insensitive_equal(['&','g','t',';'], tail, 0) then [_char]
  138 + else if insensitive_equal(['&','q','u','o','t',';'], tail, 0) then [_char]
  139 + else
  140 + [';','p','m','a','&']
  141 + //test for '"' only.
  142 + else if _char = '\"' then [';','t','o','u','q','&']
  143 + else [_char]
  144 +.
  145 +
  146 +define String
  147 + _HTML_encode_quote
  148 + (
  149 + List(Word8) source,
  150 + List(Word8) current
  151 + )=
  152 + if source is
  153 + {
  154 + [] then implode(reverse(current)),
  155 + [c . t] then
  156 + _HTML_encode_quote(t, get_entity_quote(c, t) + current)
  157 + }
  158 +.
  159 +
  160 +public define String
  161 + encode_HTML_quote
  162 + (
  163 + String source
  164 + )=
  165 + _HTML_encode_quote(explode(source), [])
  166 +.
123 167
124 * (1) Structure of a web site. 168 * (1) Structure of a web site.
125 169
@@ -1562,6 +1606,7 @@ public define HTML_Off_Form label(List(CoreAttrs) attrs, String string) @@ -1562,6 +1606,7 @@ public define HTML_Off_Form label(List(CoreAttrs) attrs, String string)
1562 // <li> 1606 // <li>
1563 public define HTML_Off_Form li(List(CoreAttrs) attrs, List(HTML_Off_Form) content) = html_tag("li", attrs, content). 1607 public define HTML_Off_Form li(List(CoreAttrs) attrs, List(HTML_Off_Form) content) = html_tag("li", attrs, content).
1564 public define HTML_Off_Form li(List(CoreAttrs) attrs, HTML_Off_Form content) = html_tag("li", attrs, [content]). 1608 public define HTML_Off_Form li(List(CoreAttrs) attrs, HTML_Off_Form content) = html_tag("li", attrs, [content]).
  1609 +public define HTML_Off_Form li(CoreAttrs attr, List(HTML_Off_Form) content) = html_tag("li", [attr], content).
1565 public define HTML_Off_Form li(CoreAttrs attr, HTML_Off_Form content) = html_tag("li", [attr], [content]). 1610 public define HTML_Off_Form li(CoreAttrs attr, HTML_Off_Form content) = html_tag("li", [attr], [content]).
1566 public define HTML_Off_Form li(List(HTML_Off_Form) content) = html_tag("li", [], content). 1611 public define HTML_Off_Form li(List(HTML_Off_Form) content) = html_tag("li", [], content).
1567 public define HTML_Off_Form li(HTML_Off_Form content) = html_tag("li", [], [content]). 1612 public define HTML_Off_Form li(HTML_Off_Form content) = html_tag("li", [], [content]).
@@ -5254,9 +5299,12 @@ define Printable_tree @@ -5254,9 +5299,12 @@ define Printable_tree
5254 format(cinfo, ic_v, any_div(options, html_elements), format_element, is_https, action_count, head_tags), 5299 format(cinfo, ic_v, any_div(options, html_elements), format_element, is_https, action_count, head_tags),
5255 // div_empty(options) then 5300 // div_empty(options) then
5256 // format(cinfo, ic_v, any_div_empty(options), format_element, is_https, action_count, head_tags), 5301 // format(cinfo, ic_v, any_div_empty(options), format_element, is_https, action_count, head_tags),
5257 - iframe(options, css_styles, css_files, js_files, body) then 5302 + iframe(options, css_styles, css_files, js_files, body) then
  5303 + println("formating iframe");
5258 if body is body(body_options,elem) then 5304 if body is body(body_options,elem) then
5259 - [ "<iframe", format_attrs(options), ">\n", 5305 + [ "<iframe", format_attrs(options), " srcdoc=\"\n",
  5306 +
  5307 + encode_HTML_quote(to_String([
5260 "<html style=\"margin: 0pt; padding: 0pt;\">\n", 5308 "<html style=\"margin: 0pt; padding: 0pt;\">\n",
5261 "<head>\n", 5309 "<head>\n",
5262 add_css_styles(css_styles), 5310 add_css_styles(css_styles),
@@ -5266,8 +5314,9 @@ define Printable_tree @@ -5266,8 +5314,9 @@ define Printable_tree
5266 "<body ", format(body_options), ">\n", // format body options 5314 "<body ", format(body_options), ">\n", // format body options
5267 format(cinfo,ic_v,elem,is_https, action_count, head_tags), 5315 format(cinfo,ic_v,elem,is_https, action_count, head_tags),
5268 "</body>\n", 5316 "</body>\n",
5269 - "</html>\n",  
5270 - "</iframe>\n", 5317 + "</html>\n",])),
  5318 +
  5319 + "\"></iframe>\n",
5271 ], 5320 ],
5272 partial(p_content) then 5321 partial(p_content) then
5273 if p_content is partial_content(tags, html_elements) then 5322 if p_content is partial_content(tags, html_elements) then