1:- module(st_escape, [
    2    st_write_escape/2 % +Stream, +Text
    3]).

HTML escaping

Escapes symbols that have special meaning in HTML. */

 st_write_escape(+Stream, +Text) is det
Writes text into Stream by escaping some of the symbols that cause problem in HTML.
   15st_write_escape(Stream, Text):-
   16    string(Text), !,
   17    string_codes(Text, Codes),
   18    st_write_codes(Codes, Stream).
   19
   20st_write_escape(Stream, Text):-
   21    atom(Text), !,
   22    atom_codes(Text, Codes),
   23    st_write_codes(Codes, Stream).
   24
   25st_write_escape(Stream, Text):-
   26    number(Text), !,
   27    write(Stream, Text).
   28
   29% Convert other terms into strings
   30% and output them.
   31
   32st_write_escape(Stream, Text):-
   33    term_string(Text, String),
   34    string_codes(String, Codes),
   35    st_write_codes(Stream, Codes).
   36
   37st_write_codes([0'<|Codes], Stream):- !,
   38    write(Stream, '&lt;'),
   39    st_write_codes(Codes, Stream).
   40
   41st_write_codes([0'>|Codes], Stream):- !,
   42    write(Stream, '&gt;'),
   43    st_write_codes(Codes, Stream).
   44
   45st_write_codes([0'&|Codes], Stream):- !,
   46    write(Stream, '&amp;'),
   47    st_write_codes(Codes, Stream).
   48
   49st_write_codes([0'\'|Codes], Stream):- !,
   50    write(Stream, '&#39;'),
   51    st_write_codes(Codes, Stream).
   52
   53st_write_codes([0'"|Codes], Stream):- !,
   54    write(Stream, '&quot;'),
   55    st_write_codes(Codes, Stream).
   56
   57st_write_codes([Code|Codes], Stream):- !,
   58    put_code(Stream, Code),
   59    st_write_codes(Codes, Stream).
   60
   61st_write_codes([], _)