diff options
author | John Whitington <john@coherentgraphics.co.uk> | 2020-09-10 19:17:43 +0100 |
---|---|---|
committer | John Whitington <john@coherentgraphics.co.uk> | 2020-09-10 19:17:43 +0100 |
commit | fc101ae84934b5c145dd0d79c70af2d3141ad6e6 (patch) | |
tree | 7ddd32fe5f499f75957d29e5bc5cd73c3bbde7e2 /tools/sync_stdlib_docs | |
parent | 5fd8236343d7bbf6d1a963771b0c5e5ae5e9f06a (diff) | |
download | ocaml-fc101ae84934b5c145dd0d79c70af2d3141ad6e6.tar.gz |
Rename tools/unlabel --> tools/sync_stdlib_docs
Diffstat (limited to 'tools/sync_stdlib_docs')
-rwxr-xr-x | tools/sync_stdlib_docs | 145 |
1 files changed, 145 insertions, 0 deletions
diff --git a/tools/sync_stdlib_docs b/tools/sync_stdlib_docs new file mode 100755 index 0000000000..edf50a2aed --- /dev/null +++ b/tools/sync_stdlib_docs @@ -0,0 +1,145 @@ +#!/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 |