| @@ -709,6 +709,28 @@ let keys_of_string s = · 708 unmodified lines |
| 709 | List.map (key_of_string (Str.regexp "-")) elems | 709 | List.map (key_of_string (Str.regexp "-")) elems |
| 710 | ;; | 710 | ;; |
| 711 | | 711 | |
| | 712 | let validatehcs d v = |
| | 713 | if String.length v > 1 && |
| | 714 | let module S = Set.Make ( |
| | 715 | struct type t = char |
| | 716 | let compare a b = Char.code a - Char.code b |
| | 717 | end) |
| | 718 | in |
| | 719 | let l = String.length v in |
| | 720 | let rec fold s i = |
| | 721 | if i = l |
| | 722 | then true |
| | 723 | else |
| | 724 | let e = String.get v i in |
| | 725 | if S.mem e s |
| | 726 | then false |
| | 727 | else fold (S.add e s) (i+1) |
| | 728 | in |
| | 729 | fold (S.singleton (String.get v 0)) 1 |
| | 730 | then v |
| | 731 | else (Format.eprintf "invalid hint charset %S@." v; d) |
| | 732 | ;; |
| | 733 | |
| 712 | let config_of c attrs = | 734 | let config_of c attrs = |
| 713 | let maxv ?(f=int_of_string) u s = max u @@ f s in | 735 | let maxv ?(f=int_of_string) u s = max u @@ f s in |
| 714 | let apply c k v = | 736 | let apply c k v = |
| @@ -803,7 +825,7 @@ let config_of c attrs = · 88 unmodified lines |
| 803 | | "coarse-presentation-positioning" -> | 825 | | "coarse-presentation-positioning" -> |
| 804 | { c with coarseprespos = bool_of_string v } | 826 | { c with coarseprespos = bool_of_string v } |
| 805 | | "use-document-css" -> { c with usedoccss = bool_of_string v } | 827 | | "use-document-css" -> { c with usedoccss = bool_of_string v } |
| 806 | | "hint-charset" -> { c with hcs = v } | 828 | | "hint-charset" -> { c with hcs = validatehcs c.hcs v } |
| 807 | | _ -> c | 829 | | _ -> c |
| 808 | with exn -> | 830 | with exn -> |
| 809 | dolog "error processing attribute (`%S' = `%S'): %s" k v @@ exntos exn; | 831 | dolog "error processing attribute (`%S' = `%S'): %s" k v @@ exntos exn; |