ocaml/tools/sync_stdlib_docs

146 lines
6.2 KiB
Bash
Executable File

#!/usr/bin/env bash
#**************************************************************************
#* *
#* OCaml *
#* *
#* John Whitington *
#* *
#* Copyright 2020 Institut National de Recherche en Informatique et *
#* en automatique *
#* *
#* All rights reserved. This file is distributed under the terms of *
#* the GNU Lesser General Public License version 2.1, with the *
#* special exception on linking described in the file LICENSE. *
#* *
#**************************************************************************
#Allow to be run from outside tools/
cd $(dirname "$0")/..
if [[ ! -d stdlib || ! -d otherlibs ]] ; then
echo 'Cannot find the stdlib and otherlibs directories' >&2
exit 1
fi
#Removes a label, i.e a space, a variable name, followed by a colon followed by
#an alphabetic character or ( or '. This should avoid altering the contents of
#comments.
LABREGEX="s/ [a-z_]+:([a-z\('])/ \1/g"
#A second, slightly different round sometimes required to deal with f:(key:key
LABLABREGEX="s/\([a-z_]+:([a-z\('])/\(\1/g"
#Remove a tilde if it is followed by a label name and a space or closing
#OCamldoc code section with ]
TILDEREGEX="s/~([a-z_]+[ \]])/\1/g"
#Indent a non-blank line by two characters, for moreLabels templates
INDENTREGEX="s/^(.+)$/ \1/m"
#Stdlib
perl -p -e "$LABREGEX" stdlib/listLabels.mli > stdlib/list.temp.mli
perl -p -e "$LABREGEX" stdlib/arrayLabels.mli > stdlib/array.temp.mli
perl -p -e "$LABREGEX" stdlib/stringLabels.mli > stdlib/string.temp.mli
perl -p -e "$LABREGEX" stdlib/bytesLabels.mli > stdlib/bytes.temp.mli
#Stdlib tildes
perl -p -e "$TILDEREGEX" stdlib/list.temp.mli > stdlib/list.mli
perl -p -e "$TILDEREGEX" stdlib/array.temp.mli > stdlib/array.mli
perl -p -e "$TILDEREGEX" stdlib/string.temp.mli > stdlib/string.mli
perl -p -e "$TILDEREGEX" stdlib/bytes.temp.mli > stdlib/bytes.mli
#FloatArrayLabels
perl -p -e "$LABREGEX" \
stdlib/templates/floatarraylabeled.template.mli > \
stdlib/templates/floatarrayunlabeled.temp.mli
perl -p -e "$TILDEREGEX" stdlib/templates/floatarrayunlabeled.temp.mli > \
stdlib/templates/floatarrayunlabeled.2temp.mli
perl -p -e "$INDENTREGEX" stdlib/templates/floatarraylabeled.template.mli > \
stdlib/templates/fal.indented.temp.mli
perl -p -e "$INDENTREGEX" stdlib/templates/floatarrayunlabeled.2temp.mli > \
stdlib/templates/fau.indented.temp.mli
perl -p -e\
's/FLOATARRAYLAB/`tail -n +17 stdlib\/templates\/fal.indented.temp.mli`/e' \
stdlib/templates/float.template.mli > \
stdlib/templates/float.template.temp.mli
perl -p -e\
's/FLOATARRAY/`tail -n +17 stdlib\/templates\/fau.indented.temp.mli`/e' \
stdlib/templates/float.template.temp.mli > \
stdlib/float.mli
#MoreLabels
perl -p -e "$LABREGEX" \
stdlib/templates/hashtbl.template.mli > stdlib/hashtbl.temp.mli
perl -p -e "$LABLABREGEX" \
stdlib/hashtbl.temp.mli > stdlib/hashtbl.2temp.mli
perl -p -e "$LABREGEX" \
stdlib/templates/map.template.mli > stdlib/map.temp.mli
perl -p -e "$LABLABREGEX" \
stdlib/map.temp.mli > stdlib/map.2temp.mli
perl -p -e "$LABREGEX" \
stdlib/templates/set.template.mli > stdlib/set.temp.mli
perl -p -e "$LABLABREGEX" \
stdlib/set.temp.mli > stdlib/set.2temp.mli
#MoreLabels tildes
perl -p -e "$TILDEREGEX" stdlib/hashtbl.2temp.mli > stdlib/hashtbl.mli
perl -p -e "$TILDEREGEX" stdlib/map.2temp.mli > stdlib/map.mli
perl -p -e "$TILDEREGEX" stdlib/set.2temp.mli > stdlib/set.mli
#Indent the labeled modules
perl -p -e "$INDENTREGEX" stdlib/templates/hashtbl.template.mli > \
stdlib/templates/hashtbl.template.temp.mli
perl -p -e "$INDENTREGEX" stdlib/templates/map.template.mli > \
stdlib/templates/map.template.temp.mli
perl -p -e "$INDENTREGEX" stdlib/templates/set.template.mli > \
stdlib/templates/set.template.temp.mli
#Substitute the labeled modules in to moreLabels.mli
perl -p -e\
's/HASHTBL/`tail -n +19 stdlib\/templates\/hashtbl.template.temp.mli`/e' \
stdlib/templates/moreLabels.template.mli > stdlib/moreLabels.temp.mli
perl -p -e 's/MAP/`tail -n +19 stdlib\/templates\/map.template.temp.mli`/e' \
stdlib/moreLabels.temp.mli > stdlib/moreLabels.2temp.mli
perl -p -e 's/SET/`tail -n +19 stdlib\/templates\/set.template.temp.mli`/e' \
stdlib/moreLabels.2temp.mli > stdlib/moreLabels.mli
#Fix up with templates in tools/unlabel-patches
perl -p -e "s/type statistics =/type statistics = Hashtbl\.statistics =/" \
stdlib/moreLabels.mli > stdlib/moreLabels.temp.mli
perl -p -e "s/type \(!'a, !'b\) t/type \(!'a, !'b\) t = \('a, 'b) Hashtbl.t/" \
stdlib/moreLabels.temp.mli > stdlib/moreLabels.2temp.mli
perl -p -e\
"s/module Make \(H : HashedType\) : S with type key = H.t\
/`cat tools/unlabel-patches/1.mli`/" \
stdlib/moreLabels.2temp.mli > stdlib/moreLabels.3temp.mli
perl -p -e\
"s/module MakeSeeded \(H : SeededHashedType\) : SeededS with type key = H.t\
/`cat tools/unlabel-patches/2.mli`/" \
stdlib/moreLabels.3temp.mli > stdlib/moreLabels.4temp.mli
perl -p -e\
"s/module Make \(Ord : OrderedType\) : S with type key = Ord.t\
/`cat tools/unlabel-patches/3.mli`/" \
stdlib/moreLabels.4temp.mli > stdlib/moreLabels.5temp.mli
perl -p -e\
"s/module Make \(Ord : OrderedType\) : S with type elt = Ord.t\
/`cat tools/unlabel-patches/4.mli`/" \
stdlib/moreLabels.5temp.mli > stdlib/moreLabels.mli
#Unix
perl -p -e "$LABREGEX" \
otherlibs/unix/unixLabels.mli > otherlibs/unix/unix.temp.mli
#Tildes
perl -p -e "$TILDEREGEX" \
otherlibs/unix/unix.temp.mli > otherlibs/unix/unix.2temp.mli
#Remove type equivalences from unix.mli
perl -p -e 's/ = Unix.[a-z_]+//' \
otherlibs/unix/unix.2temp.mli > otherlibs/unix/unix.3temp.mli
perl -p -e 's/ = Unix.LargeFile.stats//' \
otherlibs/unix/unix.3temp.mli > otherlibs/unix/unix.mli
#Clean up
rm -f stdlib/*temp.mli
rm -f otherlibs/unix/*temp.mli
rm -f stdlib/templates/*temp.mli