html5.ml1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54(*********************************************************************************) (* Stog *) (* *) (* Copyright (C) 2012-2024 INRIA All rights reserved. *) (* Author: Maxence Guesdon, INRIA Saclay *) (* *) (* This program is free software; you can redistribute it and/or modify *) (* it under the terms of the GNU General Public License as *) (* published by the Free Software Foundation, version 3 of the License. *) (* *) (* This program is distributed in the hope that it will be useful, *) (* but WITHOUT ANY WARRANTY; without even the implied warranty of *) (* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *) (* GNU General Public License for more details. *) (* *) (* You should have received a copy of the GNU General Public *) (* License along with this program; if not, write to the Free Software *) (* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA *) (* 02111-1307 USA *) (* *) (* As a special exception, you have permission to link this program *) (* with the OCaml compiler and distribute executables, as long as you *) (* follow the requirements of the GNU GPL in regard to all of the *) (* software in the executable aside from the OCaml compiler. *) (* *) (* Contact: Maxence.Guesdon@inria.fr *) (* *) (*********************************************************************************) module XR = Xtmpl.Rewrite let = List.fold_right Types.Str_set.add [ "area" ; "base" ; "br" ; "col" ; "embed" ; "hr" ; "img" ; "input" ; "keygen" ; "link" ; "meta" ; "param" ; "source" ; "track" ; "wbr" ; ] Types.Str_set.empty ;; let is_void_tag t = Types.Str_set.mem t void_tags;; let hack_self_closed = let rec iter xml = match xml with XR.D _ -> xml | XR.E ({ XR.name = ("", tag) ; atts ; subs = [] } as node) when not (is_void_tag tag) -> XR.E { node with XR.subs = [XR.cdata ""] } | XR.E node -> XR.E { node with XR.subs = List.map iter node.XR.subs } | XR.PI _ | XR.C _ -> xml in iter ;;