# assert "\na\nb\tc\t".trim == "a\nb\tc"
fun trim: SELFTYPE do return (self.l_trim).r_trim
+ # Returns `self` removed from its last `\n` (if any).
+ #
+ # assert "Hello\n".chomp == "Hello"
+ # assert "Hello".chomp == "Hello"
+ # assert "\n\n\n".chomp == "\n\n"
+ #
+ # This method is mainly used to remove the LINE_FEED character from lines of text.
+ fun chomp: SELFTYPE
+ do
+ if self.chars.last != '\n' then return self
+ return substring(0, length-1)
+ end
+
# Justify a self in a space of `length`
#
# `left` is the space ratio on the left side.
return buf.to_s
end
- # Escape the four characters `<`, `>`, `&`, and `"` with their html counterpart
+ # Escape the characters `<`, `>`, `&`, `"`, `'` and `/` as HTML/XML entity references.
+ #
+ # assert "a&b-<>\"x\"/'".html_escape == "a&b-<>"x"/'"
#
- # assert "a&b->\"x\"".html_escape == "a&b->"x""
+ # SEE: <https://www.owasp.org/index.php/XSS_%28Cross_Site_Scripting%29_Prevention_Cheat_Sheet#RULE_.231_-_HTML_Escape_Before_Inserting_Untrusted_Data_into_HTML_Element_Content>
fun html_escape: SELFTYPE
do
var buf = new FlatBuffer
else if c == '>' then
buf.append ">"
else if c == '"' then
- buf.append """
+ buf.append """
+ else if c == '\'' then
+ buf.append "'"
+ else if c == '/' then
+ buf.append "/"
else buf.add c
end