]> matita.cs.unibo.it Git - helm.git/commitdiff
mechanizing the generation of index files for λδ web site
authorFerruccio Guidi <ferruccio.guidi@unibo.it>
Mon, 9 Dec 2019 23:24:30 +0000 (00:24 +0100)
committerFerruccio Guidi <ferruccio.guidi@unibo.it>
Mon, 9 Dec 2019 23:24:30 +0000 (00:24 +0100)
+ initial commit

helm/www/lambdadelta/bin/index/Makefile [new file with mode: 0644]
helm/www/lambdadelta/bin/index/index.ml [new file with mode: 0644]

diff --git a/helm/www/lambdadelta/bin/index/Makefile b/helm/www/lambdadelta/bin/index/Makefile
new file mode 100644 (file)
index 0000000..faf8860
--- /dev/null
@@ -0,0 +1,10 @@
+EXECS = index
+
+REQUIRES = unix
+
+include ../Makefile.common
+
+test:
+#      @$(MAKE) --no-print-directory -C ../../ www
+
+.PHONY: test
diff --git a/helm/www/lambdadelta/bin/index/index.ml b/helm/www/lambdadelta/bin/index/index.ml
new file mode 100644 (file)
index 0000000..c7fd48d
--- /dev/null
@@ -0,0 +1,49 @@
+module KF = Filename
+module KP = Printf
+module KU = Unix
+
+let out_entry dname och dirs name =
+  let fname = KF.concat dname name in
+  let stats = KU.lstat fname in
+  match stats.KU.st_kind with
+  | KU.S_REG -> 
+    KP.fprintf och "    <rlink to=\"%s\">%s</rlink>\n" fname name;
+    dirs
+  | KU.S_DIR -> name :: dirs
+  | _        -> dirs
+
+let list_dir dname och =
+  let dir = Sys.readdir dname in
+  Array.sort String.compare dir;
+  Array.fold_left (out_entry dname och) [] dir
+
+let out_index dname och =
+  KP.fprintf och "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n\n";
+  KP.fprintf och "<page description=\"\\lambda\\delta home page\"\n";
+  KP.fprintf och "      title=\"\\lambda\\delta home page\"\n";
+  KP.fprintf och "      head=\"λδ digital library (LDDL)\"\n";
+  KP.fprintf och ">\n";
+  KP.fprintf och "  <sitemap name=\"sitemap\"/>\n";
+  KP.fprintf och "  <section5 name=\"index\">Index</section5>\n";
+  KP.fprintf och "  <subsection name=\"current\">\n";
+
+  KP.fprintf och "  </subsection>\n";
+  KP.fprintf och "  <body>\n";
+  let dirs = list_dir dname och in
+  KP.fprintf och "  </body>\n";
+  KP.fprintf och "  <footer><helena-label/></footer>\n";
+  KP.fprintf och "</page>\n";
+  dirs
+
+let rec out_dir dname =
+  let och = open_out (KF.concat dname "index.ldw.xml") in
+  let dirs = out_index dname och in
+  close_out och;
+  let map name = out_dir (KF.concat dname name) in
+  List.iter map dirs
+
+let help = "Usage: index [ <dir> ]*"
+
+let main =
+  Arg.parse [
+  ] out_dir help