(* cduce --compile tiki_of_html.cd cduce --run tiki_of_html.cdo --arg http://digicosme.lri.fr/innovation.html *) type html_element = <_ ..>html_content type html_content = [ (Byte | html_element)* ] type space = ' ' | '\t' | '\n' type content = (Byte| html_element) \ space let repeat (s : Latin1) (n : Int) : Latin1 = if n = 0 then s else s @ repeat s (n - 1) let remove_spaces (l : html_content) : html_content = match l with | [ (x :: content | _ )* ] -> x let trim_spaces (l : html_content) : html_content = match l with [ space* (x::(Byte|html_element))*? space* ] -> x let tiki_of_html (level : Int) (h : html_content) : Latin1 = (* Applique le pattern a chaque element de la liste. l''expression de droite doit etre une liste, et le tout est reconcaténé: Équivalent de List.concat (List.map f l) où f est la transformation faite par le pattern *) transform h with (* on ignore le header et les balises de script *) <(`script|`head) ..>_ -> [] (* Le gras *) | <(`b|`strong) ..>l -> "__" @ tiki_of_html level l @ "__" (* L''italique *) | <(`em|`i) ..>l -> "''" @ tiki_of_html level l @ "''" (* Les tableaux *) |