File: tutorial.ml

package info (click to toggle)
obrowser 1.1%2Bdfsg-4
  • links: PTS, VCS
  • area: main
  • in suites: squeeze
  • size: 3,216 kB
  • ctags: 3,498
  • sloc: ml: 13,505; makefile: 343; sh: 11
file content (58 lines) | stat: -rw-r--r-- 2,130 bytes parent folder | download | duplicates (2)
1
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
55
56
57
58
open Js ;;
open Html ;;
open Syntax_common ;;

let show_example mdiv name desc args =
  let cdiv = div [] in
    Node.set_attribute mdiv "style" "border-left: 2px #888 solid ; padding-left: 1em" ;
    Node.append mdiv (span ~style:"font-weight: bold" [string desc]) ;
    Node.append mdiv (string " ") ;
    Node.append mdiv (a ~onclick:(fun () -> colourise_file "ocaml" cdiv (name ^ ".ml"))
			[string "[show]"]) ;
    Node.append mdiv (string " or ") ;
    Node.append mdiv (a ~href:(name ^ ".ml") [string "[download]"]) ;
    Node.append mdiv (string " source code, ") ;
    Node.append mdiv (a ~onclick:(fun () ->
				    exec
				      (name ^ ".exe.uue")
				      (Array.append [| name ^ "_win" |] args))
			[string "[run]"]) ;
    Node.append mdiv cdiv ;
    Node.append mdiv (div ~attrs:["id", name ^ "_win"] [])
;;

let show_source mdiv name lang =
  let cdiv = div [] in
    Node.set_attribute mdiv "style" "border-left: 2px #888 solid ; padding-left: 1em" ;
    Node.append mdiv (span ~style:"font-weight: bold" [string name]) ;
    Node.append mdiv (string " ") ;
    Node.append mdiv (a ~onclick:(fun () -> colourise_file lang cdiv name) [string "[show]"]) ;
    Node.append mdiv (string " or ") ;
    Node.append mdiv (a ~href:name [string "[download]"]) ;
    Node.append mdiv cdiv
;;

let rec browse node =
  match try Node.get_attribute node "tagName" with _ -> "" with
    | "DIV" | "SPAN" ->
	(match decode_id (Node.get_attribute node "id") with
	   | id :: "example" :: name :: desc :: args ->
	       Node.set_attribute node "id" id ;
	       show_example node name desc (Array.of_list args)
	   | id :: "source" :: name :: lang :: [] ->
	       Node.set_attribute node "id" id ;
	       show_source node name lang
	   | id :: "inline-source" :: lang :: [] ->
	       Node.set_attribute node "id" id ;
	       let code = List.fold_left
		 (fun r n ->
		    if Node.get_attribute n "nodeName" = "#comment" then
		      r ^ Node.get_attribute n "data"
		    else r) "" (Node.children node)  in
		 colourise_source lang node code
	   | _ -> ())
      | _ ->
	  Node.iter browse node
;;

browse Node.document ;;