| @@ -709,26 +709,19 @@ 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 = | 712 | let validatehcs v = |
| 713 | if String.length v > 1 && | 713 | let l = String.length v in |
| 714 | let module S = Set.Make ( | 714 | if l < 2 then failwith "set is too small, must be greater than one char"; |
| 715 | struct type t = char | 715 | let module S = Set.Make (struct type t = char let compare = compare end) in |
| 716 | let compare a b = Char.code a - Char.code b | 716 | let rec check s i = |
| 717 | end) | 717 | if i < l |
| 718 | in | 718 | then |
| 719 | let l = String.length v in | 719 | let e = String.get v i in |
| 720 | let rec fold s i = | 720 | if S.mem e s |
| 721 | if i = l | 721 | then failwith "has duplicates" |
| 722 | then true | 722 | else check (S.add e s) (i+1) |
| 723 | else | 723 | in |
| 724 | let e = String.get v i in | 724 | check (S.singleton (String.get v 0)) 1 |
| 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 | ;; | 725 | ;; |
| 733 | | 726 | |
| 734 | let config_of c attrs = | 727 | let config_of c attrs = |
| @@ -825,7 +818,7 @@ let config_of c attrs = · 90 unmodified lines |
| 825 | | "coarse-presentation-positioning" -> | 818 | | "coarse-presentation-positioning" -> |
| 826 | { c with coarseprespos = bool_of_string v } | 819 | { c with coarseprespos = bool_of_string v } |
| 827 | | "use-document-css" -> { c with usedoccss = bool_of_string v } | 820 | | "use-document-css" -> { c with usedoccss = bool_of_string v } |
| 828 | | "hint-charset" -> { c with hcs = validatehcs c.hcs v } | 821 | | "hint-charset" -> validatehcs v; { c with hcs = v } |
| 829 | | _ -> c | 822 | | _ -> c |
| 830 | with exn -> | 823 | with exn -> |
| 831 | dolog "error processing attribute (`%S' = `%S'): %s" k v @@ exntos exn; | 824 | dolog "error processing attribute (`%S' = `%S'): %s" k v @@ exntos exn; |