This commit is contained in:
c-cube 2024-02-20 18:15:51 +00:00
parent bc58c16c36
commit 66508f8de1
1829 changed files with 40517 additions and 863 deletions

View file

@ -1 +0,0 @@
theme: jekyll-theme-minimal

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View file

@ -0,0 +1,59 @@
@charset "UTF-8";
/* PT Sans */
@font-face
{ font-family: 'PT-Sans';
src: url('PTS55F.woff2') format('woff2');
font-weight: 400; font-style: normal; }
@font-face
{ font-family: 'PT-Sans';
src: url('PTS75F.woff2') format('woff2');
font-weight: 700; font-style: normal; }
@font-face
{ font-family: 'PT-Sans';
src: url('PTS56F.woff2') format('woff2');
font-weight: 400; font-style: italic; }
@font-face
{ font-family: 'PT-Sans';
src: url('PTS76F.woff2') format('woff2');
font-weight: 700; font-style: italic; }
/* PT Sans caption */
@font-face
{ font-family: 'PT-Sans-Caption';
src: url('PTC55F.woff2') format('woff2');
font-weight: 400; font-style: normal; }
@font-face
{ font-family: 'PT-Sans-Caption';
src: url('PTC75F.woff2') format('woff2');
font-weight: 700; font-style: normal; }
/* DejaVu 400 */
@font-face
{ font-family: 'DejaVu-SansMono';
src: url('DejaVuSansMono.woff2') format('woff2');
font-weight: 400; font-style: normal; }
@font-face
{ font-family: 'DejaVu-SansMono';
src: url('DejaVuSansMono-Oblique.woff2') format('woff2');
font-weight: 400; font-style: oblique; }
/* DejaVu 700 */
@font-face
{ font-family: 'DejaVu-SansMono';
src: url('DejaVuSansMono-Bold.woff2') format('woff2');
font-weight: 700; font-style: normal; }
@font-face
{ font-family: 'DejaVu-SansMono';
src: url('DejaVuSansMono-BoldOblique.woff2') format('woff2');
font-weight: 700; font-style: oblique; }

376
_odoc-theme/manual.css Normal file
View file

@ -0,0 +1,376 @@
@charset "UTF-8";
@import url("fonts/fonts.css");
@import url("theme.css");
/* Copyright (c) 2019 The odig programmers. All rights reserved.
Distributed under the ISC license, see terms at the end of the file.
odig v0.0.9 */
:root { --font-headings: "PT-Sans-Caption";
--font-body: "PT-Sans";
--font-mono: "DejaVu-SansMono";
--size-font: 0.96875rem;
--size-font-micro: calc(0.675 * var(--size-font));
--size-font-tiny-ratio: 0.75;
--size-font-tiny: calc(var(--size-font-tiny-ratio) * var(--size-font));
--size-font-small: calc(0.875 * var(--size-font));
--size-font-large: calc(1.25 * var(--size-font));
--size-font-big: calc(1.5 * var(--size-font));
--size-font-huge: calc(1.75 * var(--size-font));
--size-font-mono-ratio: 0.87097;
--size-line-ratio: 1.5;
--size-line: calc(var(--size-line-ratio) * var(--size-font));
--size-half-line: calc(0.5 * var(--size-line)); }
/* Reset a few things. */
html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,
a,abbr,acronym,address,big,cite,code,del,dfn,em,img,ins,kbd,q,s,samp,select,
small,strike,strong,sub,sup,tt,var,b,u,i,center,dl,dt,dd,ol,ul,li,
fieldset,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td,
article,aside,canvas,details,embed,figure,figcaption,footer,header,hgroup,
menu,nav,output,ruby,section,summary,time,mark,audio,video,button,input
{ margin: 0; padding: 0; border: 0; /* outline: 0; */
font-size: inherit; font: inherit; font-weight: inherit;
line-height: inherit; vertical-align: baseline;
text-align: inherit; color: inherit; background: transparent; }
table { border-collapse: collapse; border-spacing: 0; }
*, *:before, *:After { box-sizing: border-box; }
/* Note the stylesheet has quite hackish CSS selectors as the markup's
classification is sometimes a bit lacking. */
/* Geometry.
See also media adjustements at the end of the stylesheet. */
body { background-color: var(--color-bg);
color: var(--color-fg);
font-size: var(--size-font);
font-family: var(--font-body), sans-serif;
font-weight: 400;
line-height: var(--size-line);
text-align: left;
position: relative;
max-width: 120ch;
margin: 0 auto;
padding: calc(1.5 * var(--size-line));
padding-top: calc(0.5 * var(--size-line)); }
body > * { max-width: 80ch; width: 75% }
body > ul:first-of-type:not(.itemize):not(.ftoc2) /* toc */
{ position: absolute;
top: 0px; right: 0px;
width: 20%;
margin-left: var(--size-line);
margin-top: calc(2 * var(--size-line));
margin-right: var(--size-line);
border-top: solid thin var(--color-rule); }
/* Rules
We remove the top one, keep the last one and add one over h1 and h2 */
body > hr:last-of-type {
margin-top: var(--size-line);
border-style: none;
width: 100%;
max-width: 100%;
text-align: right;
border-top: solid thin var(--color-rule); }
body > hr:first-of-type { display: none } /* order with last-of-type imporant */
h1, h2 { border-top: solid thin var(--color-rule) }
/* Hacks */
body > a > img /* Navigation arrows, a bit problematic for dark themes */
{ display: inline-block; margin:0;
background-color: var(--color-code-block-bg); /* bof */ }
body > p br, h1 br { display: none; } /* brs should die */
/* Basic markup */
h1, h2, h3, h4, h5, h6
{ font-family: var(--font-headings), sans-serif;
font-weight: 400;
text-transform: uppercase;
margin-top: var(--size-line); }
h1, h2 { line-height: calc(1.5 * var(--size-line));
padding-top: calc(0.75 * var(--size-line)); }
hr + h1, hr + h2 { margin-top: calc(0.25 * var(--size-line)) }
h1 { font-size: var(--size-font-huge); }
h2 { font-size: var(--size-font-big); }
h3 { font-size: var(--size-font-large); }
div, nav, p, ol, ul, dl, pre, table, blockquote
{ margin-top: var(--size-half-line); }
ul, ol { list-style-position: outside }
ul { list-style-type: square }
ul > li { margin-left: 2.25ch; }
ol > li { margin-left: 2ch; }
em { font-style: italic }
b, strong { font-weight: 700 }
small { font-size: var(--size-font-small); }
sup { vertical-align: super; }
sub { vertical-align: sub; }
sup, sub { font-size : calc(1em * var(--size-font-tiny-ratio));
line-height: 0; margin-left: 0.2ex; }
img { display: block;
margin-top: var(--size-half-line); margin-bottom: var(--size-half-line); }
blockquote { margin-left: var(--size-half-line); }
/* Links and anchors. Note anchors need to be refined a bit further down
in certain cases. */
a { text-decoration:none; color: var(--color-link); }
a:hover { box-shadow:0 1px 0 0 var(--color-link); }
a.anchor:before { content: "#" }
a.anchor:hover { box-shadow: none; text-decoration: underline; }
*:hover > a.anchor { visibility: visible }
a.anchor
{ visibility: hidden; position: absolute;
font-weight: normal;
font-style: normal;
margin-left: -2.5ch;
padding-right: 1ch; padding-left: 1ch; /* To remain selectable */
color: var(--color-link);
text-align: right;
}
*:target /* Linked highlight */
{ background-color: var(--color-bg-highlight);
box-shadow: 0 0 0 3px var(--color-bg-highlight) }
/* Code and code highlighting */
.c003, .c004, .c005, .c006, .c015,
code, pre
{ font-family: var(--font-mono), monospace;
font-weight: 400;
font-size: calc(1em * var(--size-font-mono-ratio));
color: var(--color-code-fg); }
.c004, .c002 { color: var(--color-code-type-id); }
.c005 { font-style: oblique }
.c006 { font-weight: 700 }
.c015 { text-align: left }
pre .c003, pre .c004, pre .c005, pre .c006,
pre code { font-size: inherit } /* don't apply transform twice... */
a code { color: inherit }
h1 code, h2 code, h3 code, h4 code, h5 code, h6 code { text-transform: none; }
pre { background: var(--color-code-block-bg);
padding-left: 0.8ch; padding-right: 0.8ch;
margin-left: -0.8ch; margin-right: -0.8ch;
padding-top: 1ch; padding-bottom: 1ch;
white-space: pre-wrap;
word-wrap: break-word; }
/* Table of contents, like in odoc.css except we don't have a class */
body > ul:first-of-type:not(.itemize):not(.ftoc2)
{ font-size: var(--size-font-small); }
body > ul:first-of-type:not(.itemize):not(.ftoc2) a
{ color : var(--color-fg); }
body > ul:first-of-type:not(.itemize):not(.ftoc2) a:hover
{ color : var(--color-link); }
body > ul:first-of-type:not(.itemize):not(.ftoc2)
{ font-family: var(--font-headings); text-transform: uppercase;
list-style-type: none; padding-top: var(--size-line) }
body > ul:first-of-type:not(.itemize):not(.ftoc2) li
{ margin-left: 0; padding-left: 3.25ch; text-indent: -3.25ch; }
body > ul:first-of-type:not(.itemize):not(.ftoc2) ul
{ font-family: var(--font-body);
text-transform: none;
margin-top:0; }
/* toplevel examples */
div.caml-example.toplevel div.caml-input::before { content: "#" }
div.caml-input, div.caml-output { margin-top: 0; }
.caml-input {}
.caml-output { color: var(--color-code-string) /* why not */ }
/* Other HeVeA classes */
.c000 { border-spacing: 2ch; border-collapse: separate; margin: 0 auto; }
.c001 { border-spacing: 1ch; border-collapse: separate }
.c008 { font-size: var(--size-font-small) }
.c009 { font-style:italic }
.c010 { font-style:italic; color:var(--color-link) }
.c011 { font-style:italic; font-weight:700 }
.c012 { font-style:italic }
.c013 { font-style:italic }
.c018 { text-align: right }
.c019 { text-align: left}
.dcenter { margin: 0 auto; }
.description { margin-left: var(--size-line) }
.dd-description br { display: none }
dd + dt { margin-top: var(--size-half-line) }
dt .c003 { font-style:normal; font-weight:700 } /* options */
.indexenv { list-style-type: none }
.indexenv li { margin-left: 0 }
/* Page specific */
/* Cover page */
div.maintitle > span > span
{ text-transform: uppercase;
font-family: var(--font-headings);
line-height: var(--size-line-ratio);
font-size: calc(2.25 * var(--size-font)) !important;
margin-left: -0.25ch; /* compensate nbsp */ }
div.maintitle > span > span > br { display: none }
div.maintitle > span > span > span
{ display: block;
text-transform: none;
font-style: italic;
font-family: var(--font-body);
font-size: var(--size-font-big) !important; }
div.maintitle > span > span > span > span /* ugh */
{ font-style: normal;
line-height: var(--size-line);
font-size: var(--size-font) !important; }
div.maintitle > span > span > span > span > span /* ugh bis */
{ font-size: var(--size-font-small) !important;
font-style: italic;
margin-left: -1.25ch; }
div.maintitle + blockquote hr { display : none }
div.maintitle + blockquote
{ margin: 0;
/* margin-top: calc(-1 * var(--size-line)); chrome but not FF, bah... */
font-size: var(--size-font-small);
border-bottom: solid thin var(--color-rule);
padding-bottom: var(--size-half-line); }
div.maintitle ~ blockquote:last-of-type { display: none } /* remove branding */
div.maintitle ~ ul:first-of-type:not(.itemize):not(.ftoc2) /* undo side toc */
{ position: static;
padding: 0;
margin: 0; margin-top: var(--size-line);
width: 100%; }
div.maintitle ~ br { display: none }
div.maintitle ~ ul:first-of-type:not(.itemize):not(.ftoc2) > li { margin: 0; }
div.maintitle ~ ul:first-of-type:not(.itemize):not(.ftoc2) a
{ color: var(--color-link) }
div.maintitle ~ table { margin-top: 0 }
div.maintitle ~ ul:first-of-type:not(.itemize):not(.ftoc2)
{ list-style-type: none;
font-family: inherit; text-transform: inherit;
font-size: inherit;
margin-top: var(--size-half-line);
border: none; }
div.maintitle ~ ul { list-style-type: none }
div.maintitle ~ ul li { margin-left: 0 }
/* Contents page */
h1#sec1 + ul:first-of-type /* undo side toc */
{ position: static;
list-style-type: none;
margin: 0; margin-top: var(--size-half-line);
width: 100%; border: none; padding: 0;
font-size: var(--size-font-big); }
h1#sec1 + ul:first-of-type li
{ margin-left: 0; padding-left: 0; text-indent: 0 }
h1#sec1 ~ ul ul
{ list-style-type: none; font-size: var(--size-font-large); font-style: italic;}
h1#sec1 ~ ul ul ul
{ font-size: var(--size-font); font-style: normal;
margin-top: var(--size-half-line); }
h1#sec1 ~ ul ul ul ul { margin-left: 2.5ch; margin-top: 0;}
h1#sec1 ~ ul > li { margin-top: var(--size-line); }
h1#sec1 ~ ul > li > ul > li { margin-top: var(--size-half-line); }
/* Media adjustments */
@media only screen and (min-width:160ch) /* and (min-height: 60rem) */
{
:root { --size-font: 1.125rem; } /* consider using vmin units */
}
@media only screen and (max-width:80ch)
{
body { padding: var(--size-line); }
body > * { width: 100%; }
body > ul:first-of-type:not(.itemize):not(.ftoc2)
{ position: static;
margin: 0; margin-top: var(--size-line);
width: 100%; }
pre { font-size: var(--size-font-tiny); }
}
@media print
{
* { -webkit-print-color-adjust: exact; }
.content nav:first-child { visibility: hidden }
body > * { width: 100%; }
body > ul:first-of-type:not(.itemize):not(.ftoc2)
{ position: static; width: 100%;
margin: 0; margin-top: var(--size-line); }
/* odig.light with slight adjustements */
:root
{ --color-bg: white;
--color-bg-highlight: #CAD7EF;
--color-fg: black;
--color-rule: #DADBDB;
--color-code-block-bg: #E8E8E8;
--color-code-fg: #16191D;
--color-code-comment: #747679;
--color-code-keyword: #874aa9;
--color-code-type-id: #a9874a;
--color-code-string: #4aa987;
--color-link: #557dcc;
--color-broken-link: #f71414; }
}
/*
Copyright (c) 2019 The odig programmers
Permission to use, copy, modify, and/or distribute this software for any
purpose with or without fee is hereby granted, provided that the above
copyright notice and this permission notice appear in all copies.
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/

334
_odoc-theme/odoc.css Normal file
View file

@ -0,0 +1,334 @@
@charset "UTF-8";
@import url("fonts/fonts.css");
@import url("theme.css");
/* Copyright (c) 2019 The odig programmers. All rights reserved.
Distributed under the ISC license, see terms at the end of the file. */
/* Reset a few things. */
html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,
a,abbr,acronym,address,big,cite,code,del,dfn,em,img,ins,kbd,q,s,samp,select,
small,strike,strong,sub,sup,tt,var,b,u,i,center,dl,dt,dd,ol,ul,li,
fieldset,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td,
article,aside,canvas,details,embed,figure,figcaption,footer,header,hgroup,
menu,nav,output,ruby,section,summary,time,mark,audio,video,button,input
{ margin: 0; padding: 0; border: 0; /* outline: 0; */
font-size: inherit; font: inherit; font-weight: inherit;
line-height: inherit; vertical-align: baseline;
text-align: inherit; color: inherit; background: transparent; }
table { border-collapse: collapse; border-spacing: 0; }
*, *:before, *:after { box-sizing: border-box; }
/* Basic geometry */
:root { --font-headings: "PT-Sans-Caption";
--font-body: "PT-Sans";
--font-mono: "DejaVu-SansMono";
--size-font: 0.96875rem;
--size-font-micro: calc(0.675 * var(--size-font));
--size-font-tiny-ratio: 0.75;
--size-font-tiny: calc(var(--size-font-tiny-ratio) * var(--size-font));
--size-font-small: calc(0.875 * var(--size-font));
--size-font-large: calc(1.25 * var(--size-font));
--size-font-big: calc(1.5 * var(--size-font));
--size-font-huge: calc(1.75 * var(--size-font));
--size-font-mono-ratio: 0.87097;
--size-font-mono-ratio: 0.865;
--size-line-ratio: 1.5;
--size-line: calc(var(--size-line-ratio) * var(--size-font));
--size-half-line: calc(0.5 * var(--size-line));
--size-fourth-line: calc(0.25 * var(--size-line)); }
.odoc { background-color: var(--color-bg);
color: var(--color-fg);
font-size: var(--size-font);
font-family: var(--font-body), sans-serif;
font-weight: 400;
line-height: var(--size-line);
text-align: left;
display: grid;
margin: 0 auto;
max-width: 130ch;
grid-template-columns: minmax(50ch,76ch) minmax(23ch,1fr);
grid-column-gap: calc(2 * var(--size-line));
grid-template-areas: "nav nav"
"header toc"
"content toc";
padding: calc(1.5 * var(--size-line));
padding-top: calc(0.5 * var(--size-line)); }
.odoc-nav { grid-area: nav; }
.odoc-preamble { grid-area: header; }
.odoc-content { grid-area: content; margin: 0 }
.odoc-toc
{ grid-area: toc;
margin-top: var(--size-line);
border-top: solid thin var(--color-rule); }
/* Media adjustments */
@media only screen and (min-width:160ch) /* and (min-height: 60rem) */
{
:root { --size-font: 1.125rem; } /* consider using vmin units */
}
@media only screen and (max-width:80ch) /* Basically mobile */
{
.odoc
{ padding: var(--size-line);
grid-template-columns: auto;
grid-template-rows: none;
grid-template-areas: "nav"
"header"
"toc"
"content"; }
.odoc-toc { margin: 0; margin-top: var(--size-line); }
pre { font-size: var(--size-font-tiny); }
}
@media print
{
* { -webkit-print-color-adjust: exact; }
.odoc-nav { visibility: hidden }
.odoc-toc { margin: 0; margin-top: var(--size-line); }
/* odig.light with slight adjustements */
:root
{ --color-bg: white;
--color-bg-highlight: #CAD7EF;
--color-fg: black;
--color-rule: #DADBDB;
--color-code-block-bg: #E8E8E8;
--color-code-fg: #16191D;
--color-code-comment: #747679;
--color-code-keyword: #874aa9;
--color-code-type-id: #a9874a;
--color-code-string: #4aa987;
--color-link: #557dcc;
--color-broken-link: #f71414; }
}
/* Block level markup */
header > * + *, div > * + *, details > * + *
{ margin-top: var(--size-half-line); }
ul + * , ol + * { margin-top: 0; }
ul, ol { margin-top: var(--size-fourth-line);
margin-bottom: var(--size-fourth-line);
list-style-position: outside; }
li *:first-child, li ol, li ul { margin-top: 0; }
ul { list-style-type: square; }
ul > li { margin-left: 2.25ch; }
ol > li { margin-left: 2ch; }
ol li::marker
{ font-family: var(--font-headings), sans-serif;
font-size: var(--size-font-small); }
img
{ display: block;
margin-top: var(--size-half-line);
margin-bottom: var(--size-half-line); }
/* Headings and horizontal rulers */
h1, h2, .odoc-content > *:first-child
{ border-top: solid thin var(--color-rule);
padding-top: calc(0.75 * var(--size-line));
margin-top: var(--size-line); }
h1, h2, h3, h4, h5, h6
{ font-family: var(--font-headings), sans-serif;
font-weight: 400;
text-transform: uppercase;
margin-top: var(--size-line); }
h1, h2 { line-height: calc(1.5 * var(--size-line)); }
h1 { font-size: var(--size-font-huge); }
h2 { font-size: var(--size-font-big); }
h3 { font-size: var(--size-font-large); }
/* Phrasing content */
em { font-style: italic }
b, strong { font-weight: 700 }
small { font-size: var(--size-font-small); }
sup { vertical-align: super; }
sub { vertical-align: sub; }
sup, sub
{ font-size : calc(1em * var(--size-font-tiny-ratio));
line-height: 0; margin-left: 0.2ex; }
/* Code and code highlighting */
code, pre
{ font-family: var(--font-mono), monospace;
font-weight: 400;
font-size: calc(1em * var(--size-font-mono-ratio));
color: var(--color-code-fg);
overflow-wrap: anywhere; }
code span span { white-space: nowrap } /* Do not break these units */
pre code { font-size: inherit } /* don't apply transform twice... */
a code { color: inherit }
h1 code, h2 code, h3 code, h4 code, h5 code, h6 code { text-transform: none; }
pre
{ background: var(--color-code-block-bg);
padding-left: 0.8ch; padding-right: 0.8ch;
margin-left: -0.8ch; margin-right: -0.8ch;
padding-top: 1ch; padding-bottom: 1ch;
white-space: pre-wrap;
overflow-wrap: break-word; }
.arrow { white-space: nowrap }
.keyword , .hljs-keyword { color : var(--color-code-keyword); }
.hljs-type { color : var(--color-code-type-id); }
.hljs-string { color : var(--color-code-string); }
.hljs-comment { color : var(--color-code-comment); font-style: italic; }
/* Links and anchors. Note anchors need to be refined a bit further down
in certain cases. */
a { text-decoration:none; color: var(--color-link); }
a:hover { box-shadow:0 1px 0 0 var(--color-link); }
a.anchor:before { content: "#" }
a.anchor:hover { box-shadow: none; text-decoration: underline; }
*:hover > a.anchor { visibility: visible }
a.anchor
{ visibility: hidden; position: absolute;
font-weight: normal;
font-style: normal;
margin-left: -2.5ch;
padding-right: 1ch; padding-left: 1ch; /* To remain selectable */
color: var(--color-link);
text-align: right; }
*:target /* Linked highlight */
{ background-color: var(--color-bg-highlight);
box-shadow: 0 0 0 3px var(--color-bg-highlight) }
.xref-unresolved { box-shadow:0 1px 0 0 var(--color-broken-link)}
/* Table of contents */
.odoc-toc { font-size: var(--size-font-small); }
.odoc-toc a { color : var(--color-fg); }
.odoc-toc a:hover { color : var(--color-link) }
.odoc-toc ul
{ font-family: var(--font-headings); text-transform: uppercase;
margin-top: var(--size-line);
list-style-type: none; }
.odoc-toc ul ul
{ font-family: var(--font-body); text-transform: none; margin-top:0; }
.odoc-toc ul ul ul { margin-left:1.5ch }
.odoc-toc li { margin-left: 0; padding-left: 1ch; text-indent: -1ch; }
.odoc-toc > ul > li { margin-top: calc(0.25 * var(--size-half-line)) }
.odoc-toc > ul > li > ul > li:last-child
{ margin-bottom: var(--size-half-line) }
.odoc-toc ul ul li { margin-left: 0; padding-left: 0; }
/* Module structure items */
.odoc-spec { padding-bottom: var(--size-fourth-line); }
.spec { margin-top: 0; }
.spec-doc { margin-top:0; padding-left: 1ch; }
.spec-doc > *:first-child { margin-top: 0 }
/* Indent on wrap */
.spec, .spec td:first-child { padding-left: 4ch; text-indent: -4ch }
.spec td.field { padding-left: 6ch }
.spec .def-doc .comment-delim + * { margin-top: 0 }
.spec .def-doc .comment-delim /* make them invisible yet copy-pastable */
{ position: absolute; width: 1px; height: 1px; overflow: hidden; }
/* But we don't do it for types for now because of variants and
records. This makes :target highlight be off. And poses
other problems (e.g. need to indent back the last ] or }.
A better markup strategy should be found here. */
.spec.type { padding-left: 0; text-indent: 0 }
.spec.type > a.anchor
{ padding-left: 1ch; padding-right: 1ch; /* values from a.anchor */ }
.spec li > a.anchor, .spec > a.anchor
{ padding-right: 0.5ch; padding-left: 2ch; }
.spec ol { margin:0; list-style-type: none; }
.spec li { margin-left: 0; padding-left: 4ch; text-indent: -4ch }
.spec li.record.field { margin-left: 2ch }
.spec .def-doc { display: inline-block }
.spec .def-doc { padding-left: /* 4 + 3 */ 7ch; }
.spec .def-doc p { margin-left: -4ch; text-indent: 0 }
.odoc-include summary { cursor: pointer }
/* Package, module and @tag lists
Allowing indent on wrap with the anchor makes all this quite convoluted.
Is there a better way ? */
.packages, .modules, .at-tags { list-style-type: none; margin-left: -2ch; }
.packages li, .modules li, .at-tags li { padding-left: 2ch; text-indent: -2ch; }
.modules li a.anchor, .packages li a.anchor
{ padding-right: 0.5ch; padding-left: 2ch; }
.synopsis { padding-left: 1ch; }
.version { font-size: var(--size-font-micro); }
.at-tag { text-transform : capitalize }
/* Package page */
h1 .version, h1 nav { font-size: var(--size-font); line-height:0 }
h1 nav
{ display: inline-block;
font-family: var(--font-body);
text-transform: capitalize; }
.package.info td:first-child { padding-right: 2ch; min-width: 13ch}
.package.info ul { list-style-type: none; display: inline; margin:0; padding:0}
.package.info li { display: inline-block; margin:0; margin-right:1ex; }
#info-authors li, #info-maintainers li { display: block; }
/* Package index page */
.by-name nav a
{ font-family: var(--font-headings);
font-size: var(--size-font-large);
text-transform: uppercase;
margin-right: 1ch;
display: inline-block; }
.by-tag ol { list-style-type: none; }
.by-tag ol.tags li { margin-left: 1ch; display: inline-block }
.by-tag td:first-child
{ font-family: var(--font-headings);
font-size: var(--size-font-large);
text-transform: uppercase; }
/*
Copyright (c) 2019 The odig programmers
Permission to use, copy, modify, and/or distribute this software for any
purpose with or without fee is hereby granted, provided that the above
copyright notice and this permission notice appear in all copies.
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/

34
_odoc-theme/theme.css Normal file
View file

@ -0,0 +1,34 @@
:root
{ --color-bg: #F6F6F6;
--color-bg-highlight: #CAD7EF;
--color-fg: #1F2227;
--color-rule: #DADBDB;
--color-code-block-bg: #E8E8E8;
--color-code-fg: #16191D;
--color-code-comment: #747679;
--color-code-keyword: #874aa9;
--color-code-type-id: #a9874a;
--color-code-string: #4aa987;
--color-link: #557dcc;
--color-broken-link: #f71414; }
@media (prefers-color-scheme: dark)
{
:root
{ --color-bg: #181B20;
--color-bg-highlight: #303644;
--color-fg: #8C8D90;
--color-rule: #2F3236;
--color-code-block-bg: #24272A;
--color-code-fg: #A3A4A6;
--color-code-comment: #747679;
--color-code-keyword: #7F668D;
--color-code-type-id: #8D7F66;
--color-code-string: #668d7f;
--color-link: #7788AA;
--color-broken-link: #900505; }
}

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1,2 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Env (cmdliner.Cmdliner.Cmd.Env)</title><meta charset="utf-8"/><link rel="stylesheet" href="../../../../_odoc-theme/odoc.css"/><meta name="generator" content="odoc 2.4.1"/><meta name="viewport" content="width=device-width,initial-scale=1.0"/><script src="../../../../highlight.pack.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body class="odoc"><nav class="odoc-nav"><a href="../index.html">Up</a> <a href="../../../index.html">cmdliner</a> &#x00BB; <a href="../../index.html">Cmdliner</a> &#x00BB; <a href="../index.html">Cmd</a> &#x00BB; Env</nav><header class="odoc-preamble"><h1>Module <code><span>Cmd.Env</span></code></h1><p>Environment variable and their information.</p></header><nav class="odoc-toc"><ul><li><a href="#envvars">Environment variables</a></li><li><a href="#info">Environment variable information</a></li></ul></nav><div class="odoc-content"><h2 id="envvars"><a href="#envvars" class="anchor"></a>Environment variables</h2><div class="odoc-spec"><div class="spec type anchored" id="type-var"><a href="#type-var" class="anchor"></a><code><span><span class="keyword">type</span> var</span><span> = string</span></code></div><div class="spec-doc"><p>The type for environment names.</p></div></div><h2 id="info"><a href="#info" class="anchor"></a>Environment variable information</h2><div class="odoc-spec"><div class="spec type anchored" id="type-info"><a href="#type-info" class="anchor"></a><code><span><span class="keyword">type</span> info</span><span> = <a href="../../Term/index.html#type-env_info">Term.env_info</a></span></code></div><div class="spec-doc"><p>The type for environment variable information.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-info"><a href="#val-info" class="anchor"></a><code><span><span class="keyword">val</span> info : <span><span class="optlabel">?deprecated</span>:string <span class="arrow">&#45;&gt;</span></span> <span><span class="optlabel">?docs</span>:string <span class="arrow">&#45;&gt;</span></span> <span><span class="optlabel">?doc</span>:string <span class="arrow">&#45;&gt;</span></span> <span><a href="#type-var">var</a> <span class="arrow">&#45;&gt;</span></span> <a href="#type-info">info</a></span></code></div><div class="spec-doc"><p><code>info ~docs ~doc var</code> describes an environment variable <code>var</code> such that:</p><ul><li><code>doc</code> is the man page information of the environment variable, defaults to <code>&quot;undocumented&quot;</code>.</li><li><code>docs</code> is the title of the man page section in which the environment variable will be listed, it defaults to <a href="../../Manpage/index.html#val-s_environment"><code>Cmdliner.Manpage.s_environment</code></a>.</li><li><code>deprecated</code>, if specified the environment is deprecated and the string is a message output on standard error when the environment variable gets used to lookup the default value of an argument.</li></ul><p>In <code>doc</code> the <a href="../../../tool_man.html#doclang" title="doclang">documentation markup language</a> can be used with following variables:</p><ul><li><code>$(env)</code>, the value of <code>var</code>.</li><li>The variables mentioned in <a href="#val-info"><code>info</code></a>.</li></ul></div></div></div></body></html>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1,2 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Cmdliner (cmdliner.Cmdliner)</title><meta charset="utf-8"/><link rel="stylesheet" href="../../_odoc-theme/odoc.css"/><meta name="generator" content="odoc 2.4.1"/><meta name="viewport" content="width=device-width,initial-scale=1.0"/><script src="../../highlight.pack.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body class="odoc"><nav class="odoc-nav"><a href="../index.html">Up</a> <a href="../index.html">cmdliner</a> &#x00BB; Cmdliner</nav><header class="odoc-preamble"><h1>Module <code><span>Cmdliner</span></code></h1><p>Declarative definition of command line interfaces.</p><p>Consult the <a href="../tutorial.html" title="tutorial">tutorial</a>, details about the supported <a href="../cli.html" title="cli">command line syntax</a> and <a href="../examples.html" title="examples">examples</a> of use.</p><p>Open the module to use it, it defines only three modules in your scope.</p></header><div class="odoc-content"><div class="odoc-spec"><div class="spec module anchored" id="module-Manpage"><a href="#module-Manpage" class="anchor"></a><code><span><span class="keyword">module</span> <a href="Manpage/index.html">Manpage</a></span><span> : <span class="keyword">sig</span> ... <span class="keyword">end</span></span></code></div><div class="spec-doc"><p>Man page specification.</p></div></div><div class="odoc-spec"><div class="spec module anchored" id="module-Term"><a href="#module-Term" class="anchor"></a><code><span><span class="keyword">module</span> <a href="Term/index.html">Term</a></span><span> : <span class="keyword">sig</span> ... <span class="keyword">end</span></span></code></div><div class="spec-doc"><p>Terms.</p></div></div><div class="odoc-spec"><div class="spec module anchored" id="module-Cmd"><a href="#module-Cmd" class="anchor"></a><code><span><span class="keyword">module</span> <a href="Cmd/index.html">Cmd</a></span><span> : <span class="keyword">sig</span> ... <span class="keyword">end</span></span></code></div><div class="spec-doc"><p>Commands.</p></div></div><div class="odoc-spec"><div class="spec module anchored" id="module-Arg"><a href="#module-Arg" class="anchor"></a><code><span><span class="keyword">module</span> <a href="Arg/index.html">Arg</a></span><span> : <span class="keyword">sig</span> ... <span class="keyword">end</span></span></code></div><div class="spec-doc"><p>Terms for command line arguments.</p></div></div></div></body></html>

421
cmdliner/_doc-dir/CHANGES.md Executable file
View file

@ -0,0 +1,421 @@
v1.2.0 2023-04-10 La Forclaz (VS)
---------------------------------
- In manpage specification the new variable `$(iname)` substitutes the
command invocation (from program name to subcommand) in bold (#168).
This variable is now used in the default introduction of the `EXIT STATUS`
section. Thanks to Ali Caglayan for suggesting.
- Fix manpage rendering when `PAGER=less` is set (#167).
- Plain text manpage rendering: fix broken handling of `` `Noblank ``.
Thanks to Michael Richards and Reynir Björnsson for the report (#176).
- Fix install to directory with spaces (#172). Thanks to
@ZSFactory for reporting and suggesting the fix.
- Fix manpage paging on Windows (#166). Thanks to Nicolás Ojeda Bär
for the report and the solution.
v1.1.1 2022-03-23 La Forclaz (VS)
---------------------------------
- General documentation fixes, tweaks and improvements.
- Docgen: suppress trailing whitespace in synopsis rendering.
- Docgen: fix duplicate rendering of standard options when using `Term.ret` (#135).
- Docgen: fix duplicate rendering of command name on ``Term.ret (`Help (fmt, None)``
(#135).
v1.1.0 2022-02-06 La Forclaz (VS)
---------------------------------
- Require OCaml 4.08.
- Support for deprecating commands, arguments and environment variables (#66).
See the `?deprecated` argument of `Cmd.info`, `Cmd.Env.info` and `Arg.info`.
- Add `Manpage.s_none` a special section name to use whenever you
want something not to be listed in a command's manpage.
- Add `Arg.conv'` like `Arg.conv` but with a parser signature that returns
untagged string errors.
- Add `Term.{term,cli_parse}_result'` functions.
- Add deprecation alerts on what is already deprecated.
- On unices, use `command -v` rather than `type` to find commands.
- Stop using backticks for left quotes. Use apostrophes everywhere.
Thanks to Ryan Moore for reporting a typo that prompted the change (#128).
- Rework documentation structure. Move out tutorial, examples and
reference doc from the `.mli` to multiple `.mld` pages.
- `Arg.doc_alts` and `Arg.doc_alts_enum`, change the default rendering
to match the manpage convention which is to render these tokens in
bold. If you want to recover the previous rendering or were using
these functions outside man page rendering use an explicit
`~quoted:true` (the optional argument is available on earlier
versions).
- The deprecated `Term.exit` and `Term.exit_status_of_result` now
require a `unit` result. This avoids various errors to go undetected.
Thanks to Thomas Leonard for the patch (#124).
- Fix absent and default option values (`?none` string argument of `Arg.some`)
rendering in manpages:
1. They were not escaped, they now are.
2. They where not rendered in bold, they now are.
3. The documentation language was interpreted, it is no longer the case.
If you were relying on the third point via `?none` of `Arg.some`, use the new
`?absent` optional argument of `Arg.info` instead. Besides a new
`Arg.some'` function is added to specify a value for `?none` instead
of a string. Thanks to David Allsopp for the patch (#111).
- Documentation generation use: `…` (U+2026) instead of `...` for
ellipsis. See also UTF-8 manpage support below.
- Documentation generation, improve command synopsis rendering on
commands with few options (i.e. mention them).
- Documentation generation, drop section heading in the output if the section
is empty.
### New `Cmd` module and deprecation of the `Term` evaluation interface
This version of cmdliner deprecates the `Term.eval*` evaluation
functions and `Term.info` information values in favor of the new
`Cmdliner.Cmd` module.
The `Cmd` module generalizes the existing sub command support to allow
arbitrarily nested sub commands each with its own man page and command
line syntax represented by a `Term.t` value.
The mapping between the old interface and the new one should be rather
straightforward. In particular `Term.info` and `Cmd.info` have exactly
the same semantics and fields and a command value simply pairs a
command information with a term.
However in this transition the following things are changed or added:
* All default values of `Cmd.info` match those of `Term.info` except
for:
* The `?exits` argument which defaults to `Cmd.Exit.defaults`
rather than the empty list.
* The `?man_xrefs` which defaults to the list ``[`Main]`` rather
than the empty list (this means that by default sub commands
at any level automatically cross-reference the main command).
* The `?sdocs` argument which defaults to `Manpage.s_common_options`
rather than `Manpage.s_options`.
* The `Cmd.Exit.some_error` code is added to `Cmd.Exit.defaults`
(which in turn is the default for `Cmd.info` see above). This is an
error code clients can use when they don't want to bother about
having precise exit codes. It is high so that low, meaningful,
codes can later be added without breaking a tool's compatibility. In
particular the convenience evaluation functions `Cmd.eval_result*`
use this code when they evaluate to an error.
* If you relied on `?term_err` defaulting to `1` in the various
`Term.exit*` function, note that the new `Cmd.eval*` function use
`Exit.cli_error` as a default. You may want to explicitly specify
`1` instead if you use `Term.ret` with the `` `Error`` case
or `Term.term_result`.
Finally be aware that if you replace, in an existing tool, an encoding
of sub commands as positional arguments you will effectively break the
command line compatibility of your tool since options can no longer be
specified before the sub commands, i.e. your tool synopsis moves from:
```
tool cmd [OPTION]… SUBCMD [ARG]…
```
to
```
tool cmd SUBCMD [OPTION]… [ARG]…
```
Thanks to Rudi Grinberg for prototyping the feature in #123.
### UTF-8 manpage support
It is now possible to write UTF-8 encoded text in your doc strings and
man pages.
The man page renderer used on `--help` defaults to `mandoc` if
available, then uses `groff` and then defaults to `nroff`. Starting
with `mandoc` catches macOS whose `groff` as of 11.6 still doesn't
support UTF-8 input and struggles to render some Unicode characters.
The invocations were also tweaked to remove the `-P-c` option which
entails that the default pager `less` is now invoked with the `-R` option.
If you install UTF-8 encoded man pages output via `--help=groff`, in
`man` directories bear in mind that these pages will look garbled on
stock macOS (at least until 11.6). One way to work around is to
instruct your users to change the `NROFF` definition in
`/private/etc/man.conf` from:
NROFF /usr/bin/groff -Wall -mtty-char -Tascii -mandoc -c
to:
NROFF /usr/bin/mandoc -Tutf8 -c
Thanks to Antonin Décimo for his knowledge and helping with these
`man`gnificent intricacies (#27).
v1.0.4 2019-06-14 Zagreb
------------------------
- Change the way `Error (_, e)` term evaluation results
are formatted. Instead of treating `e` as text, treat
it as formatted lines.
- Fix 4.08 `Pervasives` deprecation.
- Fix 4.03 String deprecations.
- Fix bootstrap build in absence of dynlink.
- Make the `Makefile` bootstrap build reproducible.
Thanks to Thomas Leonard for the patch.
v1.0.3 2018-11-26 Zagreb
------------------------
- Add `Term.with_used_args`. Thanks to Jeremie Dimino for
the patch.
- Use `Makefile` bootstrap build in opam file.
- Drop ocamlbuild requirement for `Makefile` bootstrap build.
- Drop support for ocaml < 4.03.0
- Dune build support.
v1.0.2 2017-08-07 Zagreb
------------------------
- Don't remove the `Makefile` from the distribution.
v1.0.1 2017-08-03 Zagreb
------------------------
- Add a `Makefile` to build and install cmdliner without `topkg` and
opam `.install` files. Helps bootstraping opam in OS package
managers. Thanks to Hendrik Tews for the patches.
v1.0.0 2017-03-02 La Forclaz (VS)
---------------------------------
**IMPORTANT** The `Arg.converter` type is deprecated in favor of the
`Arg.conv` type. For this release both types are equal but the next
major release will drop the former and make the latter abstract. All
users are kindly requested to migrate to use the new type and **only**
via the new `Arg.[p]conv` and `Arg.conv_{parser,printer}` functions.
- Allow terms to be used more than once in terms without tripping out
documentation generation (#77). Thanks to François Bobot and Gabriel
Radanne.
- Disallow defining the same option (resp. command) name twice via two
different arguments (resp. terms). Raises Invalid_argument, used
to be undefined behaviour (in practice, an arbitrary one would be
ignored).
- Improve converter API (see important message above).
- Add `Term.exit[_status]` and `Term.exit_status_of[_status]_result`.
improves composition with `Pervasives.exit`.
- Add `Term.term_result` and `Term.cli_parse_result` improves composition
with terms evaluating to `result` types.
- Add `Arg.parser_of_kind_of_string`.
- Change semantics of `Arg.pos_left` (see #76 for details).
- Deprecate `Term.man_format` in favor of `Arg.man_format`.
- Reserve the `--cmdliner` option for library use. This is unused for now
but will be in the future.
- Relicense from BSD3 to ISC.
- Safe-string support.
- Build depend on topkg.
### End-user visible changes
The following changes affect the end-user behaviour of all binaries using
cmdliner.
- Required positional arguments. All missing required position
arguments are now reported to the end-user, in the correct
order (#39). Thanks to Dmitrii Kashin for the report.
- Optional arguments. All unknown and ambiguous optional argument
arguments are now reported to the end-user (instead of only
the first one).
- Change default behaviour of `--help[=FMT]` option. `FMT` no longer
defaults to `pager` if unspecified. It defaults to the new value
`auto` which prints the help as `pager` or `plain` whenever the
`TERM` environment variable is `dumb` or undefined (#43). At the API
level this changes the signature of the type `Term.ret` and values
`Term.ret`, `Term.man_format` (deprecated) and `Manpage.print` to add the
new `` `Auto`` case to manual formats. These are now represented by the
`Manpage.format` type rather than inlined polyvars.
### Doc specification improvements and fixes
- Add `?envs` optional argument to `Term.info`. Documents environment
variables that influence a term's evaluation and automatically
integrate them in the manual.
- Add `?exits` optional argument to `Term.info`. Documents exit statuses of
the program. Use `Term.default_exits` if you are using the new `Term.exit`
functions.
- Add `?man_xrefs` optional argument to `Term.info`. Documents
references to other manpages. Automatically formats a `SEE ALSO` section
in the manual.
- Add `Manpage.escape` to escape a string from the documentation markup
language.
- Add `Manpage.s_*` constants for standard man page section names.
- Add a `` `Blocks`` case to `Manpage.blocks` to allow block splicing
(#69). This avoids having to concatenate block lists at the
toplevel of your program.
- `Arg.env_var`, change default environment variable section to the
standard `ENVIRONMENT` manual section rather than `ENVIRONMENT
VARIABLES`. If you previously manually positioned that section in
your man page you will have to change the name. See also next point.
- Fix automatic placement of default environment variable section (#44)
whenever unspecified in the man page.
- Better automatic insertions of man page sections (#73). See the API
docs about manual specification. As a side effect the `NAME` section
can now also be overridden manually.
- Fix repeated environment variable printing for flags (#64). Thanks to
Thomas Gazagnaire for the report.
- Fix rendering of env vars in man pages, bold is standard (#71).
- Fix plain help formatting for commands with empty
description. Thanks to Maciek Starzyk for the patch.
- Fix (implement really) groff man page escaping (#48).
- Request `an` macros directly in the man page via `.mso` this
makes man pages self-describing and avoids having to call `groff` with
the `-man` option.
- Document required optional arguments as such (#82). Thanks to Isaac Hodes
for the report.
### Doc language sanitization
This release tries to bring sanity to the doc language. This may break
the rendering of some of your man pages. Thanks to Gabriel Scherer,
Ivan Gotovchits and Nicolás Ojeda Bär for the feedback.
- It is only allowed to use the variables `$(var)` that are mentioned in
the docs (`$(docv)`, `$(opt)`, etc.) and the markup directives
`$({i,b},text)`. Any other unknown `$(var)` will generate errors
on standard error during documentation generation.
- Markup directives `$({i,b},text)` treat `text` as is, modulo escapes;
see next point.
- Characters `$`, `(`, `)` and `\` can respectively be escaped by `\$`,
`\(`, `\)` and `\\`. Escaping `$` and `\` is mandatory everywhere.
Escaping `)` is mandatory only in markup directives. Escaping `(`
is only here for your symmetric pleasure. Any other sequence of
character starting with a `\` is an illegal sequence.
- Variables `$(mname)` and `$(tname)` are now marked up with bold when
substituted. If you used to write `$(b,$(tname))` this will generate
an error on standard output, since `$` is not escaped in the markup
directive. Simply replace these by `$(tname)`.
v0.9.8 2015-10-11 Cambridge (UK)
--------------------------------
- Bring back support for OCaml 3.12.0
- Support for pre-formatted paragraphs in man pages. This adds a
```Pre`` case to the `Manpage.block` type which can break existing
programs. Thanks to Guillaume Bury for suggesting and help.
- Support for environment variables. If an argument is absent from the
command line, its value can be read and parsed from an environment
variable. This adds an `env` optional argument to the `Arg.info`
function which can break existing programs.
- Support for new variables in option documentation strings. `$(opt)`
can be used to refer to the name of the option being documented and
`$(env)` for the name of the option's the environment variable.
- Deprecate `Term.pure` in favor of `Term.const`.
- Man page generation. Keep undefined variables untouched. Previously
a `$(undef)` would be turned into `undef`.
- Turn a few mysterious and spurious `Not_found` exceptions into
`Invalid_arg`. These can be triggered by client programming errors
(e.g. an unclosed variable in a documentation string).
- Positional arguments. Invoke the printer on the default (absent)
value only if needed. See Optional arguments in the release notes of
v0.9.6.
v0.9.7 2015-02-06 La Forclaz (VS)
---------------------------------
- Build system, don't depend on `ocamlfind`. The package no longer
depends on ocamlfind. Thanks to Louis Gesbert for the patch.
v0.9.6 2014-11-18 La Forclaz (VS)
---------------------------------
- Optional arguments. Invoke the printer on the default (absent) value
only if needed, i.e. if help is shown. Strictly speaking an
interface breaking change for example if the absent value was lazy
it would be forced on each run. This is no longer the case.
- Parsed command line syntax: allow short flags to be specified
together under a single dash, possibly ending with a short option.
This allows to specify e.g. `tar -xvzf archive.tgz` or `tar
-xvzfarchive.tgz`. Previously this resulted in an error, all the
short flags had to be specified separately. Backward compatible in
the sense that only more command lines are parsed. Thanks to Hugo
Heuzard for the patch.
- End user error message improvements using heuristics and edit
distance search in the optional argument and sub command name
spaces. Thanks to Hugo Heuzard for the patch.
- Adds `Arg.doc_{quote,alts,alts_enum}`, documentation string
helpers.
- Adds the `Term.eval_peek_opts` function for advanced usage scenarios.
- The function `Arg.enum` now raises `Invalid_argument` if the
enumeration is empty.
- Improves help paging behaviour on Windows. Thanks to Romain Bardou
for the help.
v0.9.5 2014-07-04 Cambridge (UK)
--------------------------------
- Add variance annotation to Term.t. Thanks to Peter Zotov for suggesting.
- Fix section name formatting in plain text output. Thanks to Mikhail
Sobolev for reporting.
v0.9.4 2014-02-09 La Forclaz (VS)
---------------------------------
- Remove temporary files created for paged help. Thanks to Kaustuv Chaudhuri
for the suggestion.
- Avoid linking against `Oo` (was used to get program uuid).
- Check the environment for `$MANPAGER` as well. Thanks to Raphaël Proust
for the patch.
- OPAM friendly workflow and drop OASIS support.
v0.9.3 2013-01-04 La Forclaz (VS)
---------------------------------
- Allow user specified `SYNOPSIS` sections.
v0.9.2 2012-08-05 Lausanne
--------------------------
- OASIS 0.3.0 support.
v0.9.1 2012-03-17 La Forclaz (VS)
---------------------------------
- OASIS support.
- Fixed broken `Arg.pos_right`.
- Variables `$(tname)` and `$(mname)` can be used in a term's man
page to respectively refer to the term's name and the main term
name.
- Support for custom variable substitution in `Manpage.print`.
- Adds `Term.man_format`, to facilitate the definition of help commands.
- Rewrote the examples with a better and consistent style.
Incompatible API changes:
- The signature of `Term.eval` and `Term.eval_choice` changed to make
it more regular: the given term and its info must be tupled together
even for the main term and the tuple order was swapped to make it
consistent with the one used for arguments.
v0.9.0 2011-05-27 Lausanne
--------------------------
- First release.

13
cmdliner/_doc-dir/LICENSE.md Executable file
View file

@ -0,0 +1,13 @@
Copyright (c) 2011 The cmdliner programmers
Permission to use, copy, modify, and/or distribute this software for any
purpose with or without fee is hereby granted, provided that the above
copyright notice and this permission notice appear in all copies.
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.

49
cmdliner/_doc-dir/README.md Executable file
View file

@ -0,0 +1,49 @@
Cmdliner — Declarative definition of command line interfaces for OCaml
-------------------------------------------------------------------------------
v1.2.0
Cmdliner allows the declarative definition of command line interfaces
for OCaml.
It provides a simple and compositional mechanism to convert command
line arguments to OCaml values and pass them to your functions. The
module automatically handles syntax errors, help messages and UNIX man
page generation. It supports programs with single or multiple commands
and respects most of the [POSIX][1] and [GNU][2] conventions.
Cmdliner has no dependencies and is distributed under the ISC license.
[1]: http://pubs.opengroup.org/onlinepubs/009695399/basedefs/xbd_chap12.html
[2]: http://www.gnu.org/software/libc/manual/html_node/Argument-Syntax.html
Home page: http://erratique.ch/software/cmdliner
## Installation
Cmdliner can be installed with `opam`:
opam install cmdliner
If you don't use `opam` consult the [`opam`](opam) file for build
instructions.
## Documentation
The documentation and API reference is automatically generated by from
the source interfaces. It can be consulted [online][doc] or via
`odig doc cmdliner`.
[doc]: http://erratique.ch/software/cmdliner/doc/Cmdliner
## Sample programs
If you installed Cmdliner with `opam` sample programs are located in
the directory `opam config var cmdliner:doc`. These programs define
the command line of some classic programs.
In the distribution sample programs are located in the `test`
directory of the distribution. They can be built and run with:
topkg build --tests true && topkg test

View file

@ -0,0 +1,121 @@
{0:cmdline Command line interface}
For tools evaluating a command without sub commands the most general
form of invocation is:
{[
tool [OPTION]… [ARG]…
]}
The tool automatically reponds to the [--help] option by printing the
help. If a version string is provided in the
{{!Cmdliner.Cmd.val-info}command information}, it also automatically
responds to the [--version] option by printing this string on standard
output.
Command line arguments are either {{!optargs}{e optional}} or
{{!posargs}{e positional}}. Both can be freely interleaved but since
[Cmdliner] accepts many optional forms this may result in
ambiguities. The special {{!posargs} token [--]} can be used to
resolve them; anything that follows it is treated as a positional
argument.
Tools evaluating commands with sub commands have this form of invocation
{[
tool [COMMAND]… [OPTION]… [ARG]…
]}
Commands automatically respond to the [--help] option by printing
their help. The sequence of [COMMAND] strings must be the first
strings following the tool name as soon as an optional argument is
seen the search for a sub command stops. Command names may be specified by
a prefixe as long as they are not ambiguous.
{1:optargs Optional arguments}
An optional argument is specified on the command line by a {e name}
possibly followed by a {e value}.
The name of an option can be short or long.
{ul
{- A {e short} name is a dash followed by a single alphanumeric
character: [-h], [-q], [-I].}
{- A {e long} name is two dashes followed by alphanumeric
characters and dashes: [--help], [--silent], [--ignore-case].}}
More than one name may refer to the same optional argument. For
example in a given program the names [-q], [--quiet] and [--silent]
may all stand for the same boolean argument indicating the program to
be quiet. Long names can be specified by any non ambiguous prefix.
The value of an option can be specified in three different ways.
{ul
{- As the next token on the command line: [-o a.out], [--output a.out].}
{- Glued to a short name: [-oa.out].}
{- Glued to a long name after an equal character: [--output=a.out].}}
Glued forms are especially useful if the value itself starts with a
dash as is the case for negative numbers, [--min=-10].
An optional argument without a value is either a {e flag} (see
{!Cmdliner.Arg.flag}, {!Cmdliner.Arg.vflag}) or an optional argument with
an optional value (see the [~vopt] argument of {!Cmdliner.Arg.opt}).
Short flags can be grouped together to share a single dash and the
group can end with a short option. For example assuming [-v] and
[-x] are flags and [-f] is a short option:
{ul
{- [-vx] will be parsed as [-v -x].}
{- [-vxfopt] will be parsed as [-v -x -fopt].}
{- [-vxf opt] will be parsed as [-v -x -fopt].}
{- [-fvx] will be parsed as [-f=vx].}}
{1:posargs Positional arguments}
Positional arguments are tokens on the command line that are not
option names and are not the value of an optional argument. They are
numbered from left to right starting with zero.
Since positional arguments may be mistaken as the optional value of an
optional argument or they may need to look like option names, anything
that follows the special token ["--"] on the command line is
considered to be a positional argument:
{[
tool --option -- we -are --all positional --argu=ments
]}
{1:envlookup Environment variables}
Non-required command line arguments can be backed up by an environment
variable. If the argument is absent from the command line and that
the environment variable is defined, its value is parsed using the
argument converter and defines the value of the argument.
For {!Cmdliner.Arg.flag} and {!Cmdliner.Arg.flag_all} that do not have an
argument converter a boolean is parsed from the lowercased variable value
as follows:
{ul
{- [""], ["false"], ["no"], ["n"] or ["0"] is [false].}
{- ["true"], ["yes"], ["y"] or ["1"] is [true].}
{- Any other string is an error.}}
Note that environment variables are not supported for {!Cmdliner.Arg.vflag} and
{!Cmdliner.Arg.vflag_all}.
{1:reserved Reserved option names}
Using the cmdliner library puts the following constraints o
{ul
{- The option name [--cmdliner] is reserved by the library.}
{- The option name [--help], (and [--version] if you specify a version
string) is reserved by the library. Using it as a term or option
name may result in undefined behaviour.}
{- Defining the same option or command name via two different
arguments or terms is illegal and raises [Invalid_argument].}}

View file

@ -0,0 +1,443 @@
{0 Examples}
The examples are self-contained, cut and paste them in a file to play
with them.
{1:exrm A [rm] command}
We define the command line interface of an [rm] command with the
synopsis:
{v
rm [OPTION]… FILE…
v}
The [-f], [-i] and [-I] flags define the prompt behaviour of [rm]. It
is represented in our program by the [prompt] type. If more than one
of these flags is present on the command line the last one takes
precedence.
To implement this behaviour we map the presence of these flags to
values of the [prompt] type by using {!Cmdliner.Arg.vflag_all}.
This argument will contain all occurrences of the flag on the command
line and we just take the {!Cmdliner.Arg.last} one to define our term
value. If there is no occurrence the last value of the default list
[[Always]] is taken. This means the default prompt behaviour is [Always].
{[
(* Implementation of the command, we just print the args. *)
type prompt = Always | Once | Never
let prompt_str = function
| Always -> "always" | Once -> "once" | Never -> "never"
let rm prompt recurse files =
Printf.printf "prompt = %s\nrecurse = %B\nfiles = %s\n"
(prompt_str prompt) recurse (String.concat ", " files)
(* Command line interface *)
open Cmdliner
let files = Arg.(non_empty & pos_all file [] & info [] ~docv:"FILE")
let prompt =
let always =
let doc = "Prompt before every removal." in
Always, Arg.info ["i"] ~doc
in
let never =
let doc = "Ignore nonexistent files and never prompt." in
Never, Arg.info ["f"; "force"] ~doc
in
let once =
let doc = "Prompt once before removing more than three files, or when
removing recursively. Less intrusive than $(b,-i), while
still giving protection against most mistakes."
in
Once, Arg.info ["I"] ~doc
in
Arg.(last & vflag_all [Always] [always; never; once])
let recursive =
let doc = "Remove directories and their contents recursively." in
Arg.(value & flag & info ["r"; "R"; "recursive"] ~doc)
let cmd =
let doc = "Remove files or directories" in
let man = [
`S Manpage.s_description;
`P "$(tname) removes each specified $(i,FILE). By default it does not
remove directories, to also remove them and their contents, use the
option $(b,--recursive) ($(b,-r) or $(b,-R)).";
`P "To remove a file whose name starts with a $(b,-), for example
$(b,-foo), use one of these commands:";
`Pre "$(mname) $(b,-- -foo)"; `Noblank;
`Pre "$(mname) $(b,./-foo)";
`P "$(tname) removes symbolic links, not the files referenced by the
links.";
`S Manpage.s_bugs; `P "Report bugs to <bugs@example.org>.";
`S Manpage.s_see_also; `P "$(b,rmdir)(1), $(b,unlink)(2)" ]
in
let info = Cmd.info "rm" ~version:"v1.2.0" ~doc ~man in
Cmd.v info Term.(const rm $ prompt $ recursive $ files)
let main () = exit (Cmd.eval cmd)
let () = main ()
]}
{1:excp A [cp] command}
We define the command line interface of a [cp] command with the synopsis:
{v
cp [OPTION]… SOURCE… DEST
v}
The [DEST] argument must be a directory if there is more than one
[SOURCE]. This constraint is too complex to be expressed by the
combinators of {!Cmdliner.Arg}.
Hence we just give [DEST] the {!Cmdliner.Arg.string} type and verify the
constraint at the beginning of the implementation of [cp]. If the
constraint is unsatisfied we return an [`Error] result. By using
{!Cmdliner.Term.val-ret} on the lifted result [cp_t] of [cp],
[Cmdliner] handles the error reporting.
{[
(* Implementation, we check the dest argument and print the args *)
let cp verbose recurse force srcs dest =
let many = List.length srcs > 1 in
if many && (not (Sys.file_exists dest) || not (Sys.is_directory dest))
then `Error (false, dest ^ ": not a directory") else
`Ok (Printf.printf
"verbose = %B\nrecurse = %B\nforce = %B\nsrcs = %s\ndest = %s\n"
verbose recurse force (String.concat ", " srcs) dest)
(* Command line interface *)
open Cmdliner
let verbose =
let doc = "Print file names as they are copied." in
Arg.(value & flag & info ["v"; "verbose"] ~doc)
let recurse =
let doc = "Copy directories recursively." in
Arg.(value & flag & info ["r"; "R"; "recursive"] ~doc)
let force =
let doc = "If a destination file cannot be opened, remove it and try again."in
Arg.(value & flag & info ["f"; "force"] ~doc)
let srcs =
let doc = "Source file(s) to copy." in
Arg.(non_empty & pos_left ~rev:true 0 file [] & info [] ~docv:"SOURCE" ~doc)
let dest =
let doc = "Destination of the copy. Must be a directory if there is more \
than one $(i,SOURCE)." in
let docv = "DEST" in
Arg.(required & pos ~rev:true 0 (some string) None & info [] ~docv ~doc)
let cmd =
let doc = "Copy files" in
let man_xrefs =
[ `Tool "mv"; `Tool "scp"; `Page ("umask", 2); `Page ("symlink", 7) ]
in
let man =
[ `S Manpage.s_bugs;
`P "Email them to <bugs@example.org>."; ]
in
let info = Cmd.info "cp" ~version:"v1.2.0" ~doc ~man ~man_xrefs in
Cmd.v info Term.(ret (const cp $ verbose $ recurse $ force $ srcs $ dest))
let main () = exit (Cmd.eval cmd)
let () = main ()
]}
{1:extail A [tail] command}
We define the command line interface of a [tail] command with the
synopsis:
{v
tail [OPTION]… [FILE]…
v}
The [--lines] option whose value specifies the number of last lines to
print has a special syntax where a [+] prefix indicates to start
printing from that line number. In the program this is represented by
the [loc] type. We define a custom [loc_arg]
{{!Cmdliner.Arg.type-conv}argument converter} for this option.
The [--follow] option has an optional enumerated value. The argument
converter [follow], created with {!Cmdliner.Arg.enum} parses the
option value into the enumeration. By using {!Cmdliner.Arg.some} and
the [~vopt] argument of {!Cmdliner.Arg.opt}, the term corresponding to
the option [--follow] evaluates to [None] if [--follow] is absent from
the command line, to [Some Descriptor] if present but without a value
and to [Some v] if present with a value [v] specified.
{[
(* Implementation of the command, we just print the args. *)
type loc = bool * int
type verb = Verbose | Quiet
type follow = Name | Descriptor
let str = Printf.sprintf
let opt_str sv = function None -> "None" | Some v -> str "Some(%s)" (sv v)
let loc_str (rev, k) = if rev then str "%d" k else str "+%d" k
let follow_str = function Name -> "name" | Descriptor -> "descriptor"
let verb_str = function Verbose -> "verbose" | Quiet -> "quiet"
let tail lines follow verb pid files =
Printf.printf
"lines = %s\nfollow = %s\nverb = %s\npid = %s\nfiles = %s\n"
(loc_str lines) (opt_str follow_str follow) (verb_str verb)
(opt_str string_of_int pid) (String.concat ", " files)
(* Command line interface *)
open Cmdliner
let loc_arg =
let parse s =
try
if s <> "" && s.[0] <> '+'
then Ok (true, int_of_string s)
else Ok (false, int_of_string (String.sub s 1 (String.length s - 1)))
with Failure _ -> Error (`Msg "unable to parse integer")
in
let print ppf p = Format.fprintf ppf "%s" (loc_str p) in
Arg.conv ~docv:"N" (parse, print)
let lines =
let doc = "Output the last $(docv) lines or use $(i,+)$(docv) to start \
output after the $(i,N)-1th line."
in
Arg.(value & opt loc_arg (true, 10) & info ["n"; "lines"] ~docv:"N" ~doc)
let follow =
let doc = "Output appended data as the file grows. $(docv) specifies how \
the file should be tracked, by its $(b,name) or by its \
$(b,descriptor)."
in
let follow = Arg.enum ["name", Name; "descriptor", Descriptor] in
Arg.(value & opt (some follow) ~vopt:(Some Descriptor) None &
info ["f"; "follow"] ~docv:"ID" ~doc)
let verb =
let quiet =
let doc = "Never output headers giving file names." in
Quiet, Arg.info ["q"; "quiet"; "silent"] ~doc
in
let verbose =
let doc = "Always output headers giving file names." in
Verbose, Arg.info ["v"; "verbose"] ~doc
in
Arg.(last & vflag_all [Quiet] [quiet; verbose])
let pid =
let doc = "With -f, terminate after process $(docv) dies." in
Arg.(value & opt (some int) None & info ["pid"] ~docv:"PID" ~doc)
let files = Arg.(value & (pos_all non_dir_file []) & info [] ~docv:"FILE")
let cmd =
let doc = "Display the last part of a file" in
let man = [
`S Manpage.s_description;
`P "$(tname) prints the last lines of each $(i,FILE) to standard output. If
no file is specified reads standard input. The number of printed
lines can be specified with the $(b,-n) option.";
`S Manpage.s_bugs;
`P "Report them to <bugs@example.org>.";
`S Manpage.s_see_also;
`P "$(b,cat)(1), $(b,head)(1)" ]
in
let info = Cmd.info "tail" ~version:"v1.2.0" ~doc ~man in
Cmd.v info Term.(const tail $ lines $ follow $ verb $ pid $ files)
let main () = exit (Cmd.eval cmd)
let () = main ()
]}
{1:exdarcs A [darcs] command}
We define the command line interface of a [darcs] command with the
synopsis:
{v
darcs [COMMAND] …
v}
The [--debug], [-q], [-v] and [--prehook] options are available in
each command. To avoid having to pass them individually to each
command we gather them in a record of type [copts]. By lifting the
record constructor [copts] into the term [copts_t] we now have a term
that we can pass to the commands to stand for an argument of type
[copts]. These options are documented in a section called [COMMON
OPTIONS], since we also want to put [--help] and [--version] in this
section, the term information of commands makes a judicious use of the
[sdocs] parameter of {!Cmdliner.Term.val-info}.
The [help] command shows help about commands or other topics. The help
shown for commands is generated by [Cmdliner] by making an appropriate
use of {!Cmdliner.Term.val-ret} on the lifted [help] function.
If the program is invoked without a command we just want to show the
help of the program as printed by [Cmdliner] with [--help]. This is
done by the [default_cmd] term.
{[
(* Implementations, just print the args. *)
type verb = Normal | Quiet | Verbose
type copts = { debug : bool; verb : verb; prehook : string option }
let str = Printf.sprintf
let opt_str sv = function None -> "None" | Some v -> str "Some(%s)" (sv v)
let opt_str_str = opt_str (fun s -> s)
let verb_str = function
| Normal -> "normal" | Quiet -> "quiet" | Verbose -> "verbose"
let pr_copts oc copts = Printf.fprintf oc
"debug = %B\nverbosity = %s\nprehook = %s\n"
copts.debug (verb_str copts.verb) (opt_str_str copts.prehook)
let initialize copts repodir = Printf.printf
"%arepodir = %s\n" pr_copts copts repodir
let record copts name email all ask_deps files = Printf.printf
"%aname = %s\nemail = %s\nall = %B\nask-deps = %B\nfiles = %s\n"
pr_copts copts (opt_str_str name) (opt_str_str email) all ask_deps
(String.concat ", " files)
let help copts man_format cmds topic = match topic with
| None -> `Help (`Pager, None) (* help about the program. *)
| Some topic ->
let topics = "topics" :: "patterns" :: "environment" :: cmds in
let conv, _ = Cmdliner.Arg.enum (List.rev_map (fun s -> (s, s)) topics) in
match conv topic with
| `Error e -> `Error (false, e)
| `Ok t when t = "topics" -> List.iter print_endline topics; `Ok ()
| `Ok t when List.mem t cmds -> `Help (man_format, Some t)
| `Ok t ->
let page = (topic, 7, "", "", ""), [`S topic; `P "Say something";] in
`Ok (Cmdliner.Manpage.print man_format Format.std_formatter page)
open Cmdliner
(* Help sections common to all commands *)
let help_secs = [
`S Manpage.s_common_options;
`P "These options are common to all commands.";
`S "MORE HELP";
`P "Use $(mname) $(i,COMMAND) --help for help on a single command.";`Noblank;
`P "Use $(mname) $(b,help patterns) for help on patch matching."; `Noblank;
`P "Use $(mname) $(b,help environment) for help on environment variables.";
`S Manpage.s_bugs; `P "Check bug reports at http://bugs.example.org.";]
(* Options common to all commands *)
let copts debug verb prehook = { debug; verb; prehook }
let copts_t =
let docs = Manpage.s_common_options in
let debug =
let doc = "Give only debug output." in
Arg.(value & flag & info ["debug"] ~docs ~doc)
in
let verb =
let doc = "Suppress informational output." in
let quiet = Quiet, Arg.info ["q"; "quiet"] ~docs ~doc in
let doc = "Give verbose output." in
let verbose = Verbose, Arg.info ["v"; "verbose"] ~docs ~doc in
Arg.(last & vflag_all [Normal] [quiet; verbose])
in
let prehook =
let doc = "Specify command to run before this $(mname) command." in
Arg.(value & opt (some string) None & info ["prehook"] ~docs ~doc)
in
Term.(const copts $ debug $ verb $ prehook)
(* Commands *)
let sdocs = Manpage.s_common_options
let initialize_cmd =
let repodir =
let doc = "Run the program in repository directory $(docv)." in
Arg.(value & opt file Filename.current_dir_name & info ["repodir"]
~docv:"DIR" ~doc)
in
let doc = "make the current directory a repository" in
let man = [
`S Manpage.s_description;
`P "Turns the current directory into a Darcs repository. Any
existing files and subdirectories become …";
`Blocks help_secs; ]
in
let info = Cmd.info "initialize" ~doc ~sdocs ~man in
Cmd.v info Term.(const initialize $ copts_t $ repodir)
let record_cmd =
let pname =
let doc = "Name of the patch." in
Arg.(value & opt (some string) None & info ["m"; "patch-name"] ~docv:"NAME"
~doc)
in
let author =
let doc = "Specifies the author's identity." in
Arg.(value & opt (some string) None & info ["A"; "author"] ~docv:"EMAIL"
~doc)
in
let all =
let doc = "Answer yes to all patches." in
Arg.(value & flag & info ["a"; "all"] ~doc)
in
let ask_deps =
let doc = "Ask for extra dependencies." in
Arg.(value & flag & info ["ask-deps"] ~doc)
in
let files = Arg.(value & (pos_all file) [] & info [] ~docv:"FILE or DIR") in
let doc = "create a patch from unrecorded changes" in
let man =
[`S Manpage.s_description;
`P "Creates a patch from changes in the working tree. If you specify
a set of files …";
`Blocks help_secs; ]
in
let info = Cmd.info "record" ~doc ~sdocs ~man in
Cmd.v info
Term.(const record $ copts_t $ pname $ author $ all $ ask_deps $ files)
let help_cmd =
let topic =
let doc = "The topic to get help on. $(b,topics) lists the topics." in
Arg.(value & pos 0 (some string) None & info [] ~docv:"TOPIC" ~doc)
in
let doc = "display help about darcs and darcs commands" in
let man =
[`S Manpage.s_description;
`P "Prints help about darcs commands and other subjects…";
`Blocks help_secs; ]
in
let info = Cmd.info "help" ~doc ~man in
Cmd.v info
Term.(ret (const help $ copts_t $ Arg.man_format $ Term.choice_names $
topic))
let main_cmd =
let doc = "a revision control system" in
let man = help_secs in
let info = Cmd.info "darcs" ~version:"v1.2.0" ~doc ~sdocs ~man in
let default = Term.(ret (const (fun _ -> `Help (`Pager, None)) $ copts_t)) in
Cmd.group info ~default [initialize_cmd; record_cmd; help_cmd]
let () = exit (Cmd.eval main_cmd)
]}

View file

@ -0,0 +1,34 @@
{0 Cmdliner {%html: <span class="version">v1.2.0</span>%}}
[Cmdliner] provides a simple and compositional mechanism
to convert command line arguments to OCaml values and pass them to
your functions.
The library automatically handles syntax errors, help messages and
UNIX man page generation. It supports programs with single or multiple
commands (like [git]) and respect most of the
{{:http://www.opengroup.org/onlinepubs/009695399/basedefs/xbd_chap12.html}
POSIX} and
{{:http://www.gnu.org/software/libc/manual/html_node/Argument-Syntax.html}
GNU} conventions.
{1:manuals Manuals}
The following manuals are available.
{ul
{- The {{!page-tutorial}tutorial} gets you through the steps to write
your first command line interface with Cmdliner.}
{- The {{!page-cli}Command line interface manual} describes how command
lines and environment variables are parsed by Cmdliner.}
{- {{!page-tool_man}Tool man pages} describes how Cmdliner generates
man pages for your tools and how you can format them.}
{- The {{!page-examples}examples page} has a few annoted examples that
show to express the command line interface of a few classic tools with
Cmdliner}}
{1:api API}
{!modules:
Cmdliner
}

View file

@ -0,0 +1,70 @@
{0:tool_man Tool man pages}
{1:manual Manual}
Man page sections for a command are printed in the order specified by
manual as given to {!Cmdliner.Cmd.val-info}. Unless specified
explicitly in the command's manual the following sections are
automatically created and populated for you:
{ul
{- {{!Cmdliner.Manpage.s_name}[NAME]} section.}
{- {{!Cmdliner.Manpage.s_synopsis}[SYNOPSIS]} section.}}
The various [doc] documentation strings specified by the command's
term arguments get inserted at the end of the documentation section
they respectively mention in their [docs] argument:
{ol
{- For commands, see {!Cmdliner.Cmd.val-info}.}
{- For positional arguments, see {!Cmdliner.Arg.type-info}. Those are listed iff
both the [docv] and [doc] string is specified by {!Cmdliner.Arg.val-info}.}
{- For optional arguments, see {!Cmdliner.Arg.val-info}.}
{- For exit statuses, see {!Cmdliner.Cmd.Exit.val-info}.}
{- For environment variables, see
{!Cmdliner.Arg.val-env_var} and {!Cmdliner.Cmd.Env.val-info}.}}
If a [docs] section name is mentioned and does not exist in the command's
manual, an empty section is created for it, after which the [doc] strings
are inserted, possibly prefixed by boilerplate text (e.g. for
{!Cmdliner.Manpage.s_environment} and {!Cmdliner.Manpage.s_exit_status}).
If the created section is:
{ul
{- {{!Cmdliner.Manpage.standard_sections}standard}, it
is inserted at the right place in the order specified
{{!Cmdliner.Manpage.standard_sections}here}, but after a
possible non-standard
section explicitly specified by the command's manual since the latter
get the order number of the last previously specified standard section
or the order of {!Cmdliner.Manpage.s_synopsis} if there is no such section.}
{- non-standard, it is inserted before the {!Cmdliner.Manpage.s_commands}
section or the first subsequent existing standard section if it
doesn't exist. Taking advantage of this behaviour is discouraged,
you should declare manually your non standard section in the command's
manual page.}}
Finally note that the header of empty sections are dropped from the
output. This allows you to share section placements among many
commands and render them only if something actually gets inserted in
it.
{1:doclang Documentation markup language}
Manpage {{!Cmdliner.Manpage.block}blocks} and doc strings support the
following markup language.
{ul
{- Markup directives [$(i,text)] and [$(b,text)], where [text] is raw
text respectively rendered in italics and bold.}
{- Outside markup directives, context dependent variables of the form
[$(var)] are substituted by marked up data. For example in a term's
man page [$(tname)] is substituted by the term name in bold.}
{- Characters $, (, ) and \ can respectively be escaped by \$, \(, \)
and \\ (in OCaml strings this will be ["\\$"], ["\\("], ["\\)"],
["\\\\"]). Escaping $ and \ is mandatory everywhere. Escaping ) is
mandatory only in markup directives. Escaping ( is only here for
your symmetric pleasure. Any other sequence of characters starting
with a \ is an illegal character sequence.}
{- Referring to unknown markup directives or variables will generate
errors on standard error during documentation generation.}}

View file

@ -0,0 +1,203 @@
{0:tutorial Tutorial}
{1:started Getting started}
With [Cmdliner] your tool's [main] function evaluates a command.
A command is a value of type {!Cmdliner.Cmd.t} which gathers a command
name and a term of type {!Cmdliner.Term.t}. A term is an expression to
be evaluated. The type parameter of the term (and the command)
indicates the type of the result of the evaluation.
One way to create terms is by lifting regular OCaml values with
{!Cmdliner.Term.const}. Terms can be applied to terms evaluating to
functional values with {!Cmdliner.Term.($)}.
For example, in a [revolt.ml] file, for the function:
{[
let revolt () = print_endline "Revolt!"
]}
the term :
{[
open Cmdliner
let revolt_t = Term.(const revolt $ const ())
]}
is a term that evaluates to the result (and effect) of the [revolt]
function. This term can be attached to a command:
{[
let cmd = Cmd.v (Cmd.info "revolt") revolt_t
]}
and evaluated with {!Cmdliner.Cmd.val-eval}:
{[
let () = exit (Cmd.eval cmd)
]}
This defines a command line tool named ["revolt"] (this name will be
used in error reporting and documentation generation), without command
line arguments, that just prints ["Revolt!"] on [stdout].
{[
> ocamlfind ocamlopt -linkpkg -package cmdliner -o revolt revolt.ml
> ./revolt
Revolt!
]}
The combinators in the {!Cmdliner.Arg} module allow to extract command
line arguments as terms. These terms can then be applied to lifted
OCaml functions to be evaluated.
Terms corresponding to command line argument data that are part of a
term evaluation implicitly define a command line syntax. We show this
on an concrete example.
In a [chorus.ml] file, consider the [chorus] function that prints
repeatedly a given message :
{[
let chorus count msg = for i = 1 to count do print_endline msg done
]}
we want to make it available from the command line with the synopsis:
{[
chorus [-c COUNT | --count=COUNT] [MSG]
]}
where [COUNT] defaults to [10] and [MSG] defaults to ["Revolt!"]. We
first define a term corresponding to the [--count] option:
{[
let count =
let doc = "Repeat the message $(docv) times." in
Arg.(value & opt int 10 & info ["c"; "count"] ~docv:"COUNT" ~doc)
]}
This says that [count] is a term that evaluates to the value of an
optional argument of type [int] that defaults to [10] if unspecified
and whose option name is either [-c] or [--count]. The arguments [doc]
and [docv] are used to generate the option's man page information.
The term for the positional argument [MSG] is:
{[
let msg =
let env =
let doc = "Overrides the default message to print." in
Cmd.Env.info "CHORUS_MSG" ~doc
in
let doc = "The message to print." in
Arg.(value & pos 0 string "Revolt!" & info [] ~env ~docv:"MSG" ~doc)
]}
which says that [msg] is a term whose value is the positional argument
at index [0] of type [string] and defaults to ["Revolt!"] or the
value of the environment variable [CHORUS_MSG] if the argument is
unspecified on the command line. Here again [doc] and [docv] are used
for the man page information.
The term for executing [chorus] with these command line arguments is :
{[
let chorus_t = Term.(const chorus $ count $ msg)
]}
We are now ready to define the [main] function of our tool:
{[
let cmd =
let doc = "print a customizable message repeatedly" in
let man = [
`S Manpage.s_bugs;
`P "Email bug reports to <bugs@example.org>." ]
in
let info = Cmd.info "chorus" ~version:"%%VERSION%%" ~doc ~man in
Cmd.v info chorus_t
let main () = exit (Cmd.eval cmd)
let () = main ()
]}
The [info] value created with {!Cmdliner.Cmd.val-info} gives more
information about the term we execute and is used to generate the
tool's man page. Since we provided a [~version] string, the tool
will automatically respond to the [--version] option by printing this
string.
A tool using {!Cmdliner.Cmd.val-eval} always responds to the [--help]
option by showing the tool's man page generated using the information
you provided with {!Cmdliner.Cmd.val-info} and
{!Cmdliner.Arg.val-info}. Here is the output generated by our
example:
{v
> ocamlfind ocamlopt -linkpkg -package cmdliner -o chorus chorus.ml
> ./chorus --help
NAME
chorus - Print a customizable message repeatedly
SYNOPSIS
chorus [--count=COUNT] [OPTION]… [MSG]
ARGUMENTS
MSG (absent=Revolt! or CHORUS_MSG env)
The message to print.
OPTIONS
-c COUNT, --count=COUNT (absent=10)
Repeat the message COUNT times.
COMMON OPTIONS
--help[=FMT] (default=auto)
Show this help in format FMT. The value FMT must be one of auto,
pager, groff or plain. With auto, the format is pager or plain
whenever the TERM env var is dumb or undefined.
--version
Show version information.
EXIT STATUS
chorus exits with the following status:
0 on success.
123 on indiscriminate errors reported on standard error.
124 on command line parsing errors.
125 on unexpected internal errors (bugs).
ENVIRONMENT
These environment variables affect the execution of chorus:
CHORUS_MSG
Overrides the default message to print.
BUGS
Email bug reports to <bugs@example.org>.
v}
If a pager is available, this output is written to a pager. This help
is also available in plain text or in the
{{:http://www.gnu.org/software/groff/groff.html}groff} man page format
by invoking the program with the option [--help=plain] or
[--help=groff].
For examples of more complex command line definitions look and run
the {{!page-examples}examples}.
{1:subcommands Sub commands}
[Cmdliner] also provides support for programs like [git] that have sub
commands each with their own command line syntax and manual:
{[tool [COMMAND]… [OPTION]… ARG…]}
These sub commands are defined by grouping them under a parent command
via the {!Cmdliner.Cmd.group} function.

2
cmdliner/cli.html Normal file

File diff suppressed because one or more lines are too long

337
cmdliner/examples.html Normal file
View file

@ -0,0 +1,337 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>examples (cmdliner.examples)</title><meta charset="utf-8"/><link rel="stylesheet" href="../_odoc-theme/odoc.css"/><meta name="generator" content="odoc 2.4.1"/><meta name="viewport" content="width=device-width,initial-scale=1.0"/><script src="../highlight.pack.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body class="odoc"><nav class="odoc-nav"><a href="index.html">Up</a> <a href="index.html">cmdliner</a> &#x00BB; examples</nav><header class="odoc-preamble"><h1 id="examples"><a href="#examples" class="anchor"></a>Examples</h1><p>The examples are self-contained, cut and paste them in a file to play with them.</p></header><nav class="odoc-toc"><ul><li><a href="#exrm">A <code>rm</code> command</a></li><li><a href="#excp">A <code>cp</code> command</a></li><li><a href="#extail">A <code>tail</code> command</a></li><li><a href="#exdarcs">A <code>darcs</code> command</a></li></ul></nav><div class="odoc-content"><h2 id="exrm"><a href="#exrm" class="anchor"></a>A <code>rm</code> command</h2><p>We define the command line interface of an <code>rm</code> command with the synopsis:</p><pre>rm [OPTION]… FILE…</pre><p>The <code>-f</code>, <code>-i</code> and <code>-I</code> flags define the prompt behaviour of <code>rm</code>. It is represented in our program by the <code>prompt</code> type. If more than one of these flags is present on the command line the last one takes precedence.</p><p>To implement this behaviour we map the presence of these flags to values of the <code>prompt</code> type by using <a href="Cmdliner/Arg/index.html#val-vflag_all"><code>Cmdliner.Arg.vflag_all</code></a>.</p><p>This argument will contain all occurrences of the flag on the command line and we just take the <a href="Cmdliner/Arg/index.html#val-last"><code>Cmdliner.Arg.last</code></a> one to define our term value. If there is no occurrence the last value of the default list <code>[Always]</code> is taken. This means the default prompt behaviour is <code>Always</code>.</p><pre class="language-ocaml"><code>(* Implementation of the command, we just print the args. *)
type prompt = Always | Once | Never
let prompt_str = function
| Always -&gt; &quot;always&quot; | Once -&gt; &quot;once&quot; | Never -&gt; &quot;never&quot;
let rm prompt recurse files =
Printf.printf &quot;prompt = %s\nrecurse = %B\nfiles = %s\n&quot;
(prompt_str prompt) recurse (String.concat &quot;, &quot; files)
(* Command line interface *)
open Cmdliner
let files = Arg.(non_empty &amp; pos_all file [] &amp; info [] ~docv:&quot;FILE&quot;)
let prompt =
let always =
let doc = &quot;Prompt before every removal.&quot; in
Always, Arg.info [&quot;i&quot;] ~doc
in
let never =
let doc = &quot;Ignore nonexistent files and never prompt.&quot; in
Never, Arg.info [&quot;f&quot;; &quot;force&quot;] ~doc
in
let once =
let doc = &quot;Prompt once before removing more than three files, or when
removing recursively. Less intrusive than $(b,-i), while
still giving protection against most mistakes.&quot;
in
Once, Arg.info [&quot;I&quot;] ~doc
in
Arg.(last &amp; vflag_all [Always] [always; never; once])
let recursive =
let doc = &quot;Remove directories and their contents recursively.&quot; in
Arg.(value &amp; flag &amp; info [&quot;r&quot;; &quot;R&quot;; &quot;recursive&quot;] ~doc)
let cmd =
let doc = &quot;Remove files or directories&quot; in
let man = [
`S Manpage.s_description;
`P &quot;$(tname) removes each specified $(i,FILE). By default it does not
remove directories, to also remove them and their contents, use the
option $(b,--recursive) ($(b,-r) or $(b,-R)).&quot;;
`P &quot;To remove a file whose name starts with a $(b,-), for example
$(b,-foo), use one of these commands:&quot;;
`Pre &quot;$(mname) $(b,-- -foo)&quot;; `Noblank;
`Pre &quot;$(mname) $(b,./-foo)&quot;;
`P &quot;$(tname) removes symbolic links, not the files referenced by the
links.&quot;;
`S Manpage.s_bugs; `P &quot;Report bugs to &lt;bugs@example.org&gt;.&quot;;
`S Manpage.s_see_also; `P &quot;$(b,rmdir)(1), $(b,unlink)(2)&quot; ]
in
let info = Cmd.info &quot;rm&quot; ~version:&quot;v1.2.0&quot; ~doc ~man in
Cmd.v info Term.(const rm $ prompt $ recursive $ files)
let main () = exit (Cmd.eval cmd)
let () = main ()</code></pre><h2 id="excp"><a href="#excp" class="anchor"></a>A <code>cp</code> command</h2><p>We define the command line interface of a <code>cp</code> command with the synopsis:</p><pre>cp [OPTION]… SOURCE… DEST</pre><p>The <code>DEST</code> argument must be a directory if there is more than one <code>SOURCE</code>. This constraint is too complex to be expressed by the combinators of <a href="Cmdliner/Arg/index.html"><code>Cmdliner.Arg</code></a>.</p><p>Hence we just give <code>DEST</code> the <a href="Cmdliner/Arg/index.html#val-string"><code>Cmdliner.Arg.string</code></a> type and verify the constraint at the beginning of the implementation of <code>cp</code>. If the constraint is unsatisfied we return an <code>`Error</code> result. By using <a href="Cmdliner/Term/index.html#val-ret"><code>Cmdliner.Term.ret</code></a> on the lifted result <code>cp_t</code> of <code>cp</code>, <code>Cmdliner</code> handles the error reporting.</p><pre class="language-ocaml"><code>(* Implementation, we check the dest argument and print the args *)
let cp verbose recurse force srcs dest =
let many = List.length srcs &gt; 1 in
if many &amp;&amp; (not (Sys.file_exists dest) || not (Sys.is_directory dest))
then `Error (false, dest ^ &quot;: not a directory&quot;) else
`Ok (Printf.printf
&quot;verbose = %B\nrecurse = %B\nforce = %B\nsrcs = %s\ndest = %s\n&quot;
verbose recurse force (String.concat &quot;, &quot; srcs) dest)
(* Command line interface *)
open Cmdliner
let verbose =
let doc = &quot;Print file names as they are copied.&quot; in
Arg.(value &amp; flag &amp; info [&quot;v&quot;; &quot;verbose&quot;] ~doc)
let recurse =
let doc = &quot;Copy directories recursively.&quot; in
Arg.(value &amp; flag &amp; info [&quot;r&quot;; &quot;R&quot;; &quot;recursive&quot;] ~doc)
let force =
let doc = &quot;If a destination file cannot be opened, remove it and try again.&quot;in
Arg.(value &amp; flag &amp; info [&quot;f&quot;; &quot;force&quot;] ~doc)
let srcs =
let doc = &quot;Source file(s) to copy.&quot; in
Arg.(non_empty &amp; pos_left ~rev:true 0 file [] &amp; info [] ~docv:&quot;SOURCE&quot; ~doc)
let dest =
let doc = &quot;Destination of the copy. Must be a directory if there is more \
than one $(i,SOURCE).&quot; in
let docv = &quot;DEST&quot; in
Arg.(required &amp; pos ~rev:true 0 (some string) None &amp; info [] ~docv ~doc)
let cmd =
let doc = &quot;Copy files&quot; in
let man_xrefs =
[ `Tool &quot;mv&quot;; `Tool &quot;scp&quot;; `Page (&quot;umask&quot;, 2); `Page (&quot;symlink&quot;, 7) ]
in
let man =
[ `S Manpage.s_bugs;
`P &quot;Email them to &lt;bugs@example.org&gt;.&quot;; ]
in
let info = Cmd.info &quot;cp&quot; ~version:&quot;v1.2.0&quot; ~doc ~man ~man_xrefs in
Cmd.v info Term.(ret (const cp $ verbose $ recurse $ force $ srcs $ dest))
let main () = exit (Cmd.eval cmd)
let () = main ()</code></pre><h2 id="extail"><a href="#extail" class="anchor"></a>A <code>tail</code> command</h2><p>We define the command line interface of a <code>tail</code> command with the synopsis:</p><pre>tail [OPTION]… [FILE]…</pre><p>The <code>--lines</code> option whose value specifies the number of last lines to print has a special syntax where a <code>+</code> prefix indicates to start printing from that line number. In the program this is represented by the <code>loc</code> type. We define a custom <code>loc_arg</code> <a href="Cmdliner/Arg/index.html#type-conv" title="Cmdliner.Arg.conv">argument converter</a> for this option.</p><p>The <code>--follow</code> option has an optional enumerated value. The argument converter <code>follow</code>, created with <a href="Cmdliner/Arg/index.html#val-enum"><code>Cmdliner.Arg.enum</code></a> parses the option value into the enumeration. By using <a href="Cmdliner/Arg/index.html#val-some"><code>Cmdliner.Arg.some</code></a> and the <code>~vopt</code> argument of <a href="Cmdliner/Arg/index.html#val-opt"><code>Cmdliner.Arg.opt</code></a>, the term corresponding to the option <code>--follow</code> evaluates to <code>None</code> if <code>--follow</code> is absent from the command line, to <code>Some Descriptor</code> if present but without a value and to <code>Some v</code> if present with a value <code>v</code> specified.</p><pre class="language-ocaml"><code>(* Implementation of the command, we just print the args. *)
type loc = bool * int
type verb = Verbose | Quiet
type follow = Name | Descriptor
let str = Printf.sprintf
let opt_str sv = function None -&gt; &quot;None&quot; | Some v -&gt; str &quot;Some(%s)&quot; (sv v)
let loc_str (rev, k) = if rev then str &quot;%d&quot; k else str &quot;+%d&quot; k
let follow_str = function Name -&gt; &quot;name&quot; | Descriptor -&gt; &quot;descriptor&quot;
let verb_str = function Verbose -&gt; &quot;verbose&quot; | Quiet -&gt; &quot;quiet&quot;
let tail lines follow verb pid files =
Printf.printf
&quot;lines = %s\nfollow = %s\nverb = %s\npid = %s\nfiles = %s\n&quot;
(loc_str lines) (opt_str follow_str follow) (verb_str verb)
(opt_str string_of_int pid) (String.concat &quot;, &quot; files)
(* Command line interface *)
open Cmdliner
let loc_arg =
let parse s =
try
if s &lt;&gt; &quot;&quot; &amp;&amp; s.[0] &lt;&gt; '+'
then Ok (true, int_of_string s)
else Ok (false, int_of_string (String.sub s 1 (String.length s - 1)))
with Failure _ -&gt; Error (`Msg &quot;unable to parse integer&quot;)
in
let print ppf p = Format.fprintf ppf &quot;%s&quot; (loc_str p) in
Arg.conv ~docv:&quot;N&quot; (parse, print)
let lines =
let doc = &quot;Output the last $(docv) lines or use $(i,+)$(docv) to start \
output after the $(i,N)-1th line.&quot;
in
Arg.(value &amp; opt loc_arg (true, 10) &amp; info [&quot;n&quot;; &quot;lines&quot;] ~docv:&quot;N&quot; ~doc)
let follow =
let doc = &quot;Output appended data as the file grows. $(docv) specifies how \
the file should be tracked, by its $(b,name) or by its \
$(b,descriptor).&quot;
in
let follow = Arg.enum [&quot;name&quot;, Name; &quot;descriptor&quot;, Descriptor] in
Arg.(value &amp; opt (some follow) ~vopt:(Some Descriptor) None &amp;
info [&quot;f&quot;; &quot;follow&quot;] ~docv:&quot;ID&quot; ~doc)
let verb =
let quiet =
let doc = &quot;Never output headers giving file names.&quot; in
Quiet, Arg.info [&quot;q&quot;; &quot;quiet&quot;; &quot;silent&quot;] ~doc
in
let verbose =
let doc = &quot;Always output headers giving file names.&quot; in
Verbose, Arg.info [&quot;v&quot;; &quot;verbose&quot;] ~doc
in
Arg.(last &amp; vflag_all [Quiet] [quiet; verbose])
let pid =
let doc = &quot;With -f, terminate after process $(docv) dies.&quot; in
Arg.(value &amp; opt (some int) None &amp; info [&quot;pid&quot;] ~docv:&quot;PID&quot; ~doc)
let files = Arg.(value &amp; (pos_all non_dir_file []) &amp; info [] ~docv:&quot;FILE&quot;)
let cmd =
let doc = &quot;Display the last part of a file&quot; in
let man = [
`S Manpage.s_description;
`P &quot;$(tname) prints the last lines of each $(i,FILE) to standard output. If
no file is specified reads standard input. The number of printed
lines can be specified with the $(b,-n) option.&quot;;
`S Manpage.s_bugs;
`P &quot;Report them to &lt;bugs@example.org&gt;.&quot;;
`S Manpage.s_see_also;
`P &quot;$(b,cat)(1), $(b,head)(1)&quot; ]
in
let info = Cmd.info &quot;tail&quot; ~version:&quot;v1.2.0&quot; ~doc ~man in
Cmd.v info Term.(const tail $ lines $ follow $ verb $ pid $ files)
let main () = exit (Cmd.eval cmd)
let () = main ()</code></pre><h2 id="exdarcs"><a href="#exdarcs" class="anchor"></a>A <code>darcs</code> command</h2><p>We define the command line interface of a <code>darcs</code> command with the synopsis:</p><pre>darcs [COMMAND] …</pre><p>The <code>--debug</code>, <code>-q</code>, <code>-v</code> and <code>--prehook</code> options are available in each command. To avoid having to pass them individually to each command we gather them in a record of type <code>copts</code>. By lifting the record constructor <code>copts</code> into the term <code>copts_t</code> we now have a term that we can pass to the commands to stand for an argument of type <code>copts</code>. These options are documented in a section called <code>COMMON
OPTIONS</code>, since we also want to put <code>--help</code> and <code>--version</code> in this section, the term information of commands makes a judicious use of the <code>sdocs</code> parameter of <a href="Cmdliner/Term/index.html#val-info"><code>Cmdliner.Term.info</code></a>.</p><p>The <code>help</code> command shows help about commands or other topics. The help shown for commands is generated by <code>Cmdliner</code> by making an appropriate use of <a href="Cmdliner/Term/index.html#val-ret"><code>Cmdliner.Term.ret</code></a> on the lifted <code>help</code> function.</p><p>If the program is invoked without a command we just want to show the help of the program as printed by <code>Cmdliner</code> with <code>--help</code>. This is done by the <code>default_cmd</code> term.</p><pre class="language-ocaml"><code>(* Implementations, just print the args. *)
type verb = Normal | Quiet | Verbose
type copts = { debug : bool; verb : verb; prehook : string option }
let str = Printf.sprintf
let opt_str sv = function None -&gt; &quot;None&quot; | Some v -&gt; str &quot;Some(%s)&quot; (sv v)
let opt_str_str = opt_str (fun s -&gt; s)
let verb_str = function
| Normal -&gt; &quot;normal&quot; | Quiet -&gt; &quot;quiet&quot; | Verbose -&gt; &quot;verbose&quot;
let pr_copts oc copts = Printf.fprintf oc
&quot;debug = %B\nverbosity = %s\nprehook = %s\n&quot;
copts.debug (verb_str copts.verb) (opt_str_str copts.prehook)
let initialize copts repodir = Printf.printf
&quot;%arepodir = %s\n&quot; pr_copts copts repodir
let record copts name email all ask_deps files = Printf.printf
&quot;%aname = %s\nemail = %s\nall = %B\nask-deps = %B\nfiles = %s\n&quot;
pr_copts copts (opt_str_str name) (opt_str_str email) all ask_deps
(String.concat &quot;, &quot; files)
let help copts man_format cmds topic = match topic with
| None -&gt; `Help (`Pager, None) (* help about the program. *)
| Some topic -&gt;
let topics = &quot;topics&quot; :: &quot;patterns&quot; :: &quot;environment&quot; :: cmds in
let conv, _ = Cmdliner.Arg.enum (List.rev_map (fun s -&gt; (s, s)) topics) in
match conv topic with
| `Error e -&gt; `Error (false, e)
| `Ok t when t = &quot;topics&quot; -&gt; List.iter print_endline topics; `Ok ()
| `Ok t when List.mem t cmds -&gt; `Help (man_format, Some t)
| `Ok t -&gt;
let page = (topic, 7, &quot;&quot;, &quot;&quot;, &quot;&quot;), [`S topic; `P &quot;Say something&quot;;] in
`Ok (Cmdliner.Manpage.print man_format Format.std_formatter page)
open Cmdliner
(* Help sections common to all commands *)
let help_secs = [
`S Manpage.s_common_options;
`P &quot;These options are common to all commands.&quot;;
`S &quot;MORE HELP&quot;;
`P &quot;Use $(mname) $(i,COMMAND) --help for help on a single command.&quot;;`Noblank;
`P &quot;Use $(mname) $(b,help patterns) for help on patch matching.&quot;; `Noblank;
`P &quot;Use $(mname) $(b,help environment) for help on environment variables.&quot;;
`S Manpage.s_bugs; `P &quot;Check bug reports at http://bugs.example.org.&quot;;]
(* Options common to all commands *)
let copts debug verb prehook = { debug; verb; prehook }
let copts_t =
let docs = Manpage.s_common_options in
let debug =
let doc = &quot;Give only debug output.&quot; in
Arg.(value &amp; flag &amp; info [&quot;debug&quot;] ~docs ~doc)
in
let verb =
let doc = &quot;Suppress informational output.&quot; in
let quiet = Quiet, Arg.info [&quot;q&quot;; &quot;quiet&quot;] ~docs ~doc in
let doc = &quot;Give verbose output.&quot; in
let verbose = Verbose, Arg.info [&quot;v&quot;; &quot;verbose&quot;] ~docs ~doc in
Arg.(last &amp; vflag_all [Normal] [quiet; verbose])
in
let prehook =
let doc = &quot;Specify command to run before this $(mname) command.&quot; in
Arg.(value &amp; opt (some string) None &amp; info [&quot;prehook&quot;] ~docs ~doc)
in
Term.(const copts $ debug $ verb $ prehook)
(* Commands *)
let sdocs = Manpage.s_common_options
let initialize_cmd =
let repodir =
let doc = &quot;Run the program in repository directory $(docv).&quot; in
Arg.(value &amp; opt file Filename.current_dir_name &amp; info [&quot;repodir&quot;]
~docv:&quot;DIR&quot; ~doc)
in
let doc = &quot;make the current directory a repository&quot; in
let man = [
`S Manpage.s_description;
`P &quot;Turns the current directory into a Darcs repository. Any
existing files and subdirectories become …&quot;;
`Blocks help_secs; ]
in
let info = Cmd.info &quot;initialize&quot; ~doc ~sdocs ~man in
Cmd.v info Term.(const initialize $ copts_t $ repodir)
let record_cmd =
let pname =
let doc = &quot;Name of the patch.&quot; in
Arg.(value &amp; opt (some string) None &amp; info [&quot;m&quot;; &quot;patch-name&quot;] ~docv:&quot;NAME&quot;
~doc)
in
let author =
let doc = &quot;Specifies the author's identity.&quot; in
Arg.(value &amp; opt (some string) None &amp; info [&quot;A&quot;; &quot;author&quot;] ~docv:&quot;EMAIL&quot;
~doc)
in
let all =
let doc = &quot;Answer yes to all patches.&quot; in
Arg.(value &amp; flag &amp; info [&quot;a&quot;; &quot;all&quot;] ~doc)
in
let ask_deps =
let doc = &quot;Ask for extra dependencies.&quot; in
Arg.(value &amp; flag &amp; info [&quot;ask-deps&quot;] ~doc)
in
let files = Arg.(value &amp; (pos_all file) [] &amp; info [] ~docv:&quot;FILE or DIR&quot;) in
let doc = &quot;create a patch from unrecorded changes&quot; in
let man =
[`S Manpage.s_description;
`P &quot;Creates a patch from changes in the working tree. If you specify
a set of files …&quot;;
`Blocks help_secs; ]
in
let info = Cmd.info &quot;record&quot; ~doc ~sdocs ~man in
Cmd.v info
Term.(const record $ copts_t $ pname $ author $ all $ ask_deps $ files)
let help_cmd =
let topic =
let doc = &quot;The topic to get help on. $(b,topics) lists the topics.&quot; in
Arg.(value &amp; pos 0 (some string) None &amp; info [] ~docv:&quot;TOPIC&quot; ~doc)
in
let doc = &quot;display help about darcs and darcs commands&quot; in
let man =
[`S Manpage.s_description;
`P &quot;Prints help about darcs commands and other subjects…&quot;;
`Blocks help_secs; ]
in
let info = Cmd.info &quot;help&quot; ~doc ~man in
Cmd.v info
Term.(ret (const help $ copts_t $ Arg.man_format $ Term.choice_names $
topic))
let main_cmd =
let doc = &quot;a revision control system&quot; in
let man = help_secs in
let info = Cmd.info &quot;darcs&quot; ~version:&quot;v1.2.0&quot; ~doc ~sdocs ~man in
let default = Term.(ret (const (fun _ -&gt; `Help (`Pager, None)) $ copts_t)) in
Cmd.group info ~default [initialize_cmd; record_cmd; help_cmd]
let () = exit (Cmd.eval main_cmd)</code></pre></div></body></html>

2
cmdliner/index.html Normal file
View file

@ -0,0 +1,2 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>index (cmdliner.index)</title><meta charset="utf-8"/><link rel="stylesheet" href="../_odoc-theme/odoc.css"/><meta name="generator" content="odoc 2.4.1"/><meta name="viewport" content="width=device-width,initial-scale=1.0"/><script src="../highlight.pack.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body class="odoc"><nav class="odoc-nav"><a href="../index.html">Up</a> cmdliner</nav><header class="odoc-preamble"><h1 id="package-cmdliner"><a href="#package-cmdliner" class="anchor"></a>Package cmdliner <nav><a type="text/plain; charset=UTF-8" href="_doc-dir/CHANGES.md">changes</a> <a href="#package_info">more…</a></nav></h1><p><code>Cmdliner</code> provides a simple and compositional mechanism to convert command line arguments to OCaml values and pass them to your functions.</p><p>The library automatically handles syntax errors, help messages and UNIX man page generation. It supports programs with single or multiple commands (like <code>git</code>) and respect most of the <a href="http://www.opengroup.org/onlinepubs/009695399/basedefs/xbd_chap12.html">POSIX</a> and <a href="http://www.gnu.org/software/libc/manual/html_node/Argument-Syntax.html">GNU</a> conventions.</p></header><nav class="odoc-toc"><ul><li><a href="#manuals">Manuals</a></li><li><a href="#api">API</a></li><li><a href="#package_info">Package info</a></li></ul></nav><div class="odoc-content"><h2 id="manuals"><a href="#manuals" class="anchor"></a>Manuals</h2><p>The following manuals are available.</p><ul><li>The <a href="tutorial.html" title="tutorial">tutorial</a> gets you through the steps to write your first command line interface with Cmdliner.</li><li>The <a href="cli.html" title="cli">Command line interface manual</a> describes how command lines and environment variables are parsed by Cmdliner.</li><li><a href="tool_man.html" title="tool_man">Tool man pages</a> describes how Cmdliner generates man pages for your tools and how you can format them.</li><li>The <a href="examples.html" title="examples">examples page</a> has a few annoted examples that show to express the command line interface of a few classic tools with Cmdliner</li></ul><h2 id="api"><a href="#api" class="anchor"></a>API</h2><ul class="modules"><li><a href="Cmdliner/index.html"><code>Cmdliner</code></a> <span class="synopsis">Declarative definition of command line interfaces.</span></li></ul><h2 id="package_info"><a href="#package_info" class="anchor"></a>Package info</h2><table class="package info"><tr id="info-changes-files"><td><a href="#info-changes-files" aria-hidden="true" class="anchor"></a>changes-files</td><td><ul><li><a type="text/plain; charset=UTF-8" href="_doc-dir/CHANGES.md">CHANGES.md</a></li></ul></td></tr><tr id="info-license-files"><td><a href="#info-license-files" aria-hidden="true" class="anchor"></a>license-files</td><td><ul><li><a type="text/plain; charset=UTF-8" href="_doc-dir/LICENSE.md">LICENSE.md</a></li></ul></td></tr><tr id="info-readme-files"><td><a href="#info-readme-files" aria-hidden="true" class="anchor"></a>readme-files</td><td><ul><li><a type="text/plain; charset=UTF-8" href="_doc-dir/README.md">README.md</a></li></ul></td></tr></table></div></body></html>

2
cmdliner/tool_man.html Normal file

File diff suppressed because one or more lines are too long

67
cmdliner/tutorial.html Normal file
View file

@ -0,0 +1,67 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>tutorial (cmdliner.tutorial)</title><meta charset="utf-8"/><link rel="stylesheet" href="../_odoc-theme/odoc.css"/><meta name="generator" content="odoc 2.4.1"/><meta name="viewport" content="width=device-width,initial-scale=1.0"/><script src="../highlight.pack.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body class="odoc"><nav class="odoc-nav"><a href="index.html">Up</a> <a href="index.html">cmdliner</a> &#x00BB; tutorial</nav><header class="odoc-preamble"><h1 id="tutorial"><a href="#tutorial" class="anchor"></a>Tutorial</h1></header><nav class="odoc-toc"><ul><li><a href="#started">Getting started</a></li><li><a href="#subcommands">Sub commands</a></li></ul></nav><div class="odoc-content"><h2 id="started"><a href="#started" class="anchor"></a>Getting started</h2><p>With <code>Cmdliner</code> your tool's <code>main</code> function evaluates a command.</p><p>A command is a value of type <a href="Cmdliner/Cmd/index.html#type-t"><code>Cmdliner.Cmd.t</code></a> which gathers a command name and a term of type <a href="Cmdliner/Term/index.html#type-t"><code>Cmdliner.Term.t</code></a>. A term is an expression to be evaluated. The type parameter of the term (and the command) indicates the type of the result of the evaluation.</p><p>One way to create terms is by lifting regular OCaml values with <a href="Cmdliner/Term/index.html#val-const"><code>Cmdliner.Term.const</code></a>. Terms can be applied to terms evaluating to functional values with <a href="Cmdliner/Term/index.html#val-($)"><code>Cmdliner.Term.($)</code></a>.</p><p>For example, in a <code>revolt.ml</code> file, for the function:</p><pre class="language-ocaml"><code>let revolt () = print_endline &quot;Revolt!&quot;</code></pre><p>the term :</p><pre class="language-ocaml"><code>open Cmdliner
let revolt_t = Term.(const revolt $ const ())</code></pre><p>is a term that evaluates to the result (and effect) of the <code>revolt</code> function. This term can be attached to a command:</p><pre class="language-ocaml"><code>let cmd = Cmd.v (Cmd.info &quot;revolt&quot;) revolt_t</code></pre><p>and evaluated with <a href="Cmdliner/Cmd/index.html#val-eval"><code>Cmdliner.Cmd.eval</code></a>:</p><pre class="language-ocaml"><code>let () = exit (Cmd.eval cmd)</code></pre><p>This defines a command line tool named <code>&quot;revolt&quot;</code> (this name will be used in error reporting and documentation generation), without command line arguments, that just prints <code>&quot;Revolt!&quot;</code> on <code>stdout</code>.</p><pre class="language-ocaml"><code>&gt; ocamlfind ocamlopt -linkpkg -package cmdliner -o revolt revolt.ml
&gt; ./revolt
Revolt!</code></pre><p>The combinators in the <a href="Cmdliner/Arg/index.html"><code>Cmdliner.Arg</code></a> module allow to extract command line arguments as terms. These terms can then be applied to lifted OCaml functions to be evaluated.</p><p>Terms corresponding to command line argument data that are part of a term evaluation implicitly define a command line syntax. We show this on an concrete example.</p><p>In a <code>chorus.ml</code> file, consider the <code>chorus</code> function that prints repeatedly a given message :</p><pre class="language-ocaml"><code>let chorus count msg = for i = 1 to count do print_endline msg done</code></pre><p>we want to make it available from the command line with the synopsis:</p><pre class="language-ocaml"><code>chorus [-c COUNT | --count=COUNT] [MSG]</code></pre><p>where <code>COUNT</code> defaults to <code>10</code> and <code>MSG</code> defaults to <code>&quot;Revolt!&quot;</code>. We first define a term corresponding to the <code>--count</code> option:</p><pre class="language-ocaml"><code>let count =
let doc = &quot;Repeat the message $(docv) times.&quot; in
Arg.(value &amp; opt int 10 &amp; info [&quot;c&quot;; &quot;count&quot;] ~docv:&quot;COUNT&quot; ~doc)</code></pre><p>This says that <code>count</code> is a term that evaluates to the value of an optional argument of type <code>int</code> that defaults to <code>10</code> if unspecified and whose option name is either <code>-c</code> or <code>--count</code>. The arguments <code>doc</code> and <code>docv</code> are used to generate the option's man page information.</p><p>The term for the positional argument <code>MSG</code> is:</p><pre class="language-ocaml"><code>let msg =
let env =
let doc = &quot;Overrides the default message to print.&quot; in
Cmd.Env.info &quot;CHORUS_MSG&quot; ~doc
in
let doc = &quot;The message to print.&quot; in
Arg.(value &amp; pos 0 string &quot;Revolt!&quot; &amp; info [] ~env ~docv:&quot;MSG&quot; ~doc)</code></pre><p>which says that <code>msg</code> is a term whose value is the positional argument at index <code>0</code> of type <code>string</code> and defaults to <code>&quot;Revolt!&quot;</code> or the value of the environment variable <code>CHORUS_MSG</code> if the argument is unspecified on the command line. Here again <code>doc</code> and <code>docv</code> are used for the man page information.</p><p>The term for executing <code>chorus</code> with these command line arguments is :</p><pre class="language-ocaml"><code>let chorus_t = Term.(const chorus $ count $ msg)</code></pre><p>We are now ready to define the <code>main</code> function of our tool:</p><pre class="language-ocaml"><code>let cmd =
let doc = &quot;print a customizable message repeatedly&quot; in
let man = [
`S Manpage.s_bugs;
`P &quot;Email bug reports to &lt;bugs@example.org&gt;.&quot; ]
in
let info = Cmd.info &quot;chorus&quot; ~version:&quot;%%VERSION%%&quot; ~doc ~man in
Cmd.v info chorus_t
let main () = exit (Cmd.eval cmd)
let () = main ()</code></pre><p>The <code>info</code> value created with <a href="Cmdliner/Cmd/index.html#val-info"><code>Cmdliner.Cmd.info</code></a> gives more information about the term we execute and is used to generate the tool's man page. Since we provided a <code>~version</code> string, the tool will automatically respond to the <code>--version</code> option by printing this string.</p><p>A tool using <a href="Cmdliner/Cmd/index.html#val-eval"><code>Cmdliner.Cmd.eval</code></a> always responds to the <code>--help</code> option by showing the tool's man page generated using the information you provided with <a href="Cmdliner/Cmd/index.html#val-info"><code>Cmdliner.Cmd.info</code></a> and <a href="Cmdliner/Arg/index.html#val-info"><code>Cmdliner.Arg.info</code></a>. Here is the output generated by our example:</p><pre>&gt; ocamlfind ocamlopt -linkpkg -package cmdliner -o chorus chorus.ml
&gt; ./chorus --help
NAME
chorus - Print a customizable message repeatedly
SYNOPSIS
chorus [--count=COUNT] [OPTION]… [MSG]
ARGUMENTS
MSG (absent=Revolt! or CHORUS_MSG env)
The message to print.
OPTIONS
-c COUNT, --count=COUNT (absent=10)
Repeat the message COUNT times.
COMMON OPTIONS
--help[=FMT] (default=auto)
Show this help in format FMT. The value FMT must be one of auto,
pager, groff or plain. With auto, the format is pager or plain
whenever the TERM env var is dumb or undefined.
--version
Show version information.
EXIT STATUS
chorus exits with the following status:
0 on success.
123 on indiscriminate errors reported on standard error.
124 on command line parsing errors.
125 on unexpected internal errors (bugs).
ENVIRONMENT
These environment variables affect the execution of chorus:
CHORUS_MSG
Overrides the default message to print.
BUGS
Email bug reports to &lt;bugs@example.org&gt;.</pre><p>If a pager is available, this output is written to a pager. This help is also available in plain text or in the <a href="http://www.gnu.org/software/groff/groff.html">groff</a> man page format by invoking the program with the option <code>--help=plain</code> or <code>--help=groff</code>.</p><p>For examples of more complex command line definitions look and run the <a href="examples.html" title="examples">examples</a>.</p><h2 id="subcommands"><a href="#subcommands" class="anchor"></a>Sub commands</h2><p><code>Cmdliner</code> also provides support for programs like <code>git</code> that have sub commands each with their own command line syntax and manual:</p><pre class="language-ocaml"><code>tool [COMMAND]… [OPTION]… ARG…</code></pre><p>These sub commands are defined by grouping them under a parent command via the <a href="Cmdliner/Cmd/index.html#val-group"><code>Cmdliner.Cmd.group</code></a> function.</p></div></body></html>

File diff suppressed because one or more lines are too long

View file

@ -1,20 +0,0 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>index</title>
<link rel="stylesheet" href="./odoc.css"/>
<meta charset="utf-8"/>
<meta name="viewport" content="width=device-width,initial-scale=1.0"/>
</head>
<body>
<main class="content">
<div class="by-name">
<h2>OCaml package documentation</h2>
<ol>
<li><a href="linol/index.html">linol</a> <span class="version">0.1</span></li>
<li><a href="linol-lwt/index.html">linol-lwt</a> <span class="version">0.1</span></li>
</ol>
</div>
</main>
</body>
</html>

View file

@ -1,2 +0,0 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>IO (linol-lwt.Linol_lwt.Jsonrpc2.IO)</title><link rel="stylesheet" href="../../../../odoc.css"/><meta charset="utf-8"/><meta name="viewport" content="width=device-width,initial-scale=1.0"/><script src="../../../../highlight.pack.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body><div class="content"><header><nav><a href="../index.html">Up</a> <a href="../../../index.html">linol-lwt</a> &#x00BB; <a href="../../index.html">Linol_lwt</a> &#x00BB; <a href="../index.html">Jsonrpc2</a> &#x00BB; IO</nav><h1>Module <code>Jsonrpc2.IO</code></h1></header><dl><dt class="spec type" id="type-t"><a href="#type-t" class="anchor"></a><code><span class="keyword">type</span> 'a t</code><code> = <span class="type-var">'a</span> <a href="../../Task/index.html#type-m">Task.m</a></code></dt></dl><dl><dt class="spec value" id="val-return"><a href="#val-return" class="anchor"></a><code><span class="keyword">val</span> return : <span class="type-var">'a</span> <span>&#45;&gt;</span> <span class="type-var">'a</span> <a href="index.html#type-t">t</a></code></dt><dt class="spec value" id="val-failwith"><a href="#val-failwith" class="anchor"></a><code><span class="keyword">val</span> failwith : string <span>&#45;&gt;</span> <span class="type-var">'a</span> <a href="index.html#type-t">t</a></code></dt><dt class="spec value" id="val-let+"><a href="#val-let+" class="anchor"></a><code><span class="keyword">val</span> let+ : <span class="type-var">'a</span> <a href="index.html#type-t">t</a> <span>&#45;&gt;</span> (<span class="type-var">'a</span> <span>&#45;&gt;</span> <span class="type-var">'b</span>) <span>&#45;&gt;</span> <span class="type-var">'b</span> <a href="index.html#type-t">t</a></code></dt><dt class="spec value" id="val-let*"><a href="#val-let*" class="anchor"></a><code><span class="keyword">val</span> let* : <span class="type-var">'a</span> <a href="index.html#type-t">t</a> <span>&#45;&gt;</span> (<span class="type-var">'a</span> <span>&#45;&gt;</span> <span class="type-var">'b</span> <a href="index.html#type-t">t</a>) <span>&#45;&gt;</span> <span class="type-var">'b</span> <a href="index.html#type-t">t</a></code></dt><dt class="spec value" id="val-and+"><a href="#val-and+" class="anchor"></a><code><span class="keyword">val</span> and+ : <span class="type-var">'a</span> <a href="index.html#type-t">t</a> <span>&#45;&gt;</span> <span class="type-var">'b</span> <a href="index.html#type-t">t</a> <span>&#45;&gt;</span> (<span class="type-var">'a</span> * <span class="type-var">'b</span>) <a href="index.html#type-t">t</a></code></dt></dl><dl><dt class="spec type" id="type-in_channel"><a href="#type-in_channel" class="anchor"></a><code><span class="keyword">type</span> in_channel</code><code> = Lwt_io.input Lwt_io.channel</code></dt><dt class="spec type" id="type-out_channel"><a href="#type-out_channel" class="anchor"></a><code><span class="keyword">type</span> out_channel</code><code> = Lwt_io.output Lwt_io.channel</code></dt></dl></div></body></html>

View file

@ -1,2 +0,0 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>base_server (linol-lwt.Linol_lwt.Jsonrpc2.base_server)</title><link rel="stylesheet" href="../../../../odoc.css"/><meta charset="utf-8"/><meta name="viewport" content="width=device-width,initial-scale=1.0"/><script src="../../../../highlight.pack.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body><div class="content"><header><nav><a href="../index.html">Up</a> <a href="../../../index.html">linol-lwt</a> &#x00BB; <a href="../../index.html">Linol_lwt</a> &#x00BB; <a href="../index.html">Jsonrpc2</a> &#x00BB; base_server</nav><h1>Class <code>Jsonrpc2.base_server</code></h1></header><dl><dt class="spec method" id="method-must_quit"><a href="#method-must_quit" class="anchor"></a><code><span class="keyword">method</span> must_quit : bool</code></dt><dt class="spec method" id="method-on_notification"><a href="#method-on_notification" class="anchor"></a><code><span class="keyword">method</span> <span class="keyword">virtual</span> on_notification : notify_back:(Lsp.Server_notification.t <span>&#45;&gt;</span> unit <a href="../IO/index.html#type-t">IO.t</a>) <span>&#45;&gt;</span> Lsp.Client_notification.t <span>&#45;&gt;</span> unit <a href="../IO/index.html#type-t">IO.t</a></code></dt><dt class="spec method" id="method-on_request"><a href="#method-on_request" class="anchor"></a><code><span class="keyword">method</span> <span class="keyword">virtual</span> on_request : a. <span class="type-var">'a</span> Lsp.Client_request.t <span>&#45;&gt;</span> <span class="type-var">'a</span> <a href="../IO/index.html#type-t">IO.t</a></code></dt></dl></div></body></html>

View file

@ -1,2 +0,0 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>notify_back (linol-lwt.Linol_lwt.Jsonrpc2.notify_back)</title><link rel="stylesheet" href="../../../../odoc.css"/><meta charset="utf-8"/><meta name="viewport" content="width=device-width,initial-scale=1.0"/><script src="../../../../highlight.pack.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body><div class="content"><header><nav><a href="../index.html">Up</a> <a href="../../../index.html">linol-lwt</a> &#x00BB; <a href="../../index.html">Linol_lwt</a> &#x00BB; <a href="../index.html">Jsonrpc2</a> &#x00BB; notify_back</nav><h1>Class <code>Jsonrpc2.notify_back</code></h1></header><dl><dt class="spec method" id="method-send_diagnostic"><a href="#method-send_diagnostic" class="anchor"></a><code><span class="keyword">method</span> send_diagnostic : Lsp.Types.Diagnostic.t list <span>&#45;&gt;</span> unit <a href="../IO/index.html#type-t">IO.t</a></code></dt><dt class="spec method" id="method-send_log_msg"><a href="#method-send_log_msg" class="anchor"></a><code><span class="keyword">method</span> send_log_msg : type_:Lsp__Types.MessageType.t <span>&#45;&gt;</span> string <span>&#45;&gt;</span> unit <a href="../IO/index.html#type-t">IO.t</a></code></dt><dt class="spec method" id="method-send_notification"><a href="#method-send_notification" class="anchor"></a><code><span class="keyword">method</span> send_notification : Lsp.Server_notification.t <span>&#45;&gt;</span> unit <a href="../IO/index.html#type-t">IO.t</a></code></dt></dl></div></body></html>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -1,2 +0,0 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Infix (linol-lwt.Linol_lwt.Task.Infix)</title><link rel="stylesheet" href="../../../../odoc.css"/><meta charset="utf-8"/><meta name="viewport" content="width=device-width,initial-scale=1.0"/><script src="../../../../highlight.pack.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body><div class="content"><header><nav><a href="../index.html">Up</a> <a href="../../../index.html">linol-lwt</a> &#x00BB; <a href="../../index.html">Linol_lwt</a> &#x00BB; <a href="../index.html">Task</a> &#x00BB; Infix</nav><h1>Module <code>Task.Infix</code></h1></header><dl><dt class="spec value" id="val-let+"><a href="#val-let+" class="anchor"></a><code><span class="keyword">val</span> let+ : <span class="type-var">'a</span> <a href="../index.html#type-m">m</a> <span>&#45;&gt;</span> (<span class="type-var">'a</span> <span>&#45;&gt;</span> <span class="type-var">'b</span>) <span>&#45;&gt;</span> <span class="type-var">'b</span> <a href="../index.html#type-m">m</a></code></dt><dt class="spec value" id="val-let*"><a href="#val-let*" class="anchor"></a><code><span class="keyword">val</span> let* : <span class="type-var">'a</span> <a href="../index.html#type-m">m</a> <span>&#45;&gt;</span> (<span class="type-var">'a</span> <span>&#45;&gt;</span> <span class="type-var">'b</span> <a href="../index.html#type-m">m</a>) <span>&#45;&gt;</span> <span class="type-var">'b</span> <a href="../index.html#type-m">m</a></code></dt><dt class="spec value" id="val-(&gt;|=)"><a href="#val-(&gt;|=)" class="anchor"></a><code><span class="keyword">val</span> (&gt;|=) : <span class="type-var">'a</span> <a href="../index.html#type-m">m</a> <span>&#45;&gt;</span> (<span class="type-var">'a</span> <span>&#45;&gt;</span> <span class="type-var">'b</span>) <span>&#45;&gt;</span> <span class="type-var">'b</span> <a href="../index.html#type-m">m</a></code></dt><dt class="spec value" id="val-(&gt;&gt;=)"><a href="#val-(&gt;&gt;=)" class="anchor"></a><code><span class="keyword">val</span> (&gt;&gt;=) : <span class="type-var">'a</span> <a href="../index.html#type-m">m</a> <span>&#45;&gt;</span> (<span class="type-var">'a</span> <span>&#45;&gt;</span> <span class="type-var">'b</span> <a href="../index.html#type-m">m</a>) <span>&#45;&gt;</span> <span class="type-var">'b</span> <a href="../index.html#type-m">m</a></code></dt><dt class="spec value" id="val-and+"><a href="#val-and+" class="anchor"></a><code><span class="keyword">val</span> and+ : <span class="type-var">'a</span> <a href="../index.html#type-m">m</a> <span>&#45;&gt;</span> <span class="type-var">'b</span> <a href="../index.html#type-m">m</a> <span>&#45;&gt;</span> (<span class="type-var">'a</span> * <span class="type-var">'b</span>) <a href="../index.html#type-m">m</a></code></dt></dl></div></body></html>

View file

@ -1,2 +0,0 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Wrapped_error (linol-lwt.Linol_lwt.Task.Wrapped_error)</title><link rel="stylesheet" href="../../../../odoc.css"/><meta charset="utf-8"/><meta name="viewport" content="width=device-width,initial-scale=1.0"/><script src="../../../../highlight.pack.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body><div class="content"><header><nav><a href="../index.html">Up</a> <a href="../../../index.html">linol-lwt</a> &#x00BB; <a href="../../index.html">Linol_lwt</a> &#x00BB; <a href="../index.html">Task</a> &#x00BB; Wrapped_error</nav><h1>Module <code>Task.Wrapped_error</code></h1></header><dl><dt class="spec type" id="type-task"><a href="#type-task" class="anchor"></a><code><span class="keyword">type</span> 'a task</code><code> = <span class="type-var">'a</span> <a href="../index.html#type-t">t</a></code></dt><dt class="spec type" id="type-t"><a href="#type-t" class="anchor"></a><code><span class="keyword">type</span> t</code><code> = </code><table class="variant"><tr id="type-t.E" class="anchored"><td class="def constructor"><a href="#type-t.E" class="anchor"></a><code>| </code><code><span class="constructor">E</span> : </code><code>{</code><table class="record"><tr id="type-t.task" class="anchored"><td class="def field"><a href="#type-t.task" class="anchor"></a><code>task : <span class="type-var">'a</span> <a href="index.html#type-task">task</a>;</code></td></tr><tr id="type-t.e" class="anchored"><td class="def field"><a href="#type-t.e" class="anchor"></a><code>e : exn;</code></td></tr></table><code>}</code><code> <span>&#45;&gt;</span> <a href="index.html#type-t">t</a></code></td></tr></table></dt></dl><dl><dt class="spec exception" id="exception-Wrapped"><a href="#exception-Wrapped" class="anchor"></a><code><span class="keyword">exception</span> </code><code><span class="exception">Wrapped</span> <span class="keyword">of</span> <a href="index.html#type-t">t</a></code></dt><dd><p>An exception caught and re-launched from a task</p></dd></dl><dl><dt class="spec value" id="val-pp"><a href="#val-pp" class="anchor"></a><code><span class="keyword">val</span> pp : Stdlib.Format.formatter <span>&#45;&gt;</span> <a href="index.html#type-t">t</a> <span>&#45;&gt;</span> unit</code></dt><dt class="spec value" id="val-to_string"><a href="#val-to_string" class="anchor"></a><code><span class="keyword">val</span> to_string : <a href="index.html#type-t">t</a> <span>&#45;&gt;</span> string</code></dt></dl></div></body></html>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -1,2 +0,0 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>IO (linol-lwt.Linol_lwt.IO)</title><link rel="stylesheet" href="../../../odoc.css"/><meta charset="utf-8"/><meta name="viewport" content="width=device-width,initial-scale=1.0"/><script src="../../../highlight.pack.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body><div class="content"><header><nav><a href="../index.html">Up</a> <a href="../../index.html">linol-lwt</a> &#x00BB; <a href="../index.html">Linol_lwt</a> &#x00BB; IO</nav><h1>Module type <code>Linol_lwt.IO</code></h1></header><dl><dt class="spec type" id="type-t"><a href="#type-t" class="anchor"></a><code><span class="keyword">type</span> 'a t</code></dt></dl><dl><dt class="spec value" id="val-return"><a href="#val-return" class="anchor"></a><code><span class="keyword">val</span> return : <span class="type-var">'a</span> <span>&#45;&gt;</span> <span class="type-var">'a</span> <a href="index.html#type-t">t</a></code></dt><dt class="spec value" id="val-failwith"><a href="#val-failwith" class="anchor"></a><code><span class="keyword">val</span> failwith : string <span>&#45;&gt;</span> <span class="type-var">'a</span> <a href="index.html#type-t">t</a></code></dt><dt class="spec value" id="val-let+"><a href="#val-let+" class="anchor"></a><code><span class="keyword">val</span> let+ : <span class="type-var">'a</span> <a href="index.html#type-t">t</a> <span>&#45;&gt;</span> (<span class="type-var">'a</span> <span>&#45;&gt;</span> <span class="type-var">'b</span>) <span>&#45;&gt;</span> <span class="type-var">'b</span> <a href="index.html#type-t">t</a></code></dt><dt class="spec value" id="val-let*"><a href="#val-let*" class="anchor"></a><code><span class="keyword">val</span> let* : <span class="type-var">'a</span> <a href="index.html#type-t">t</a> <span>&#45;&gt;</span> (<span class="type-var">'a</span> <span>&#45;&gt;</span> <span class="type-var">'b</span> <a href="index.html#type-t">t</a>) <span>&#45;&gt;</span> <span class="type-var">'b</span> <a href="index.html#type-t">t</a></code></dt><dt class="spec value" id="val-and+"><a href="#val-and+" class="anchor"></a><code><span class="keyword">val</span> and+ : <span class="type-var">'a</span> <a href="index.html#type-t">t</a> <span>&#45;&gt;</span> <span class="type-var">'b</span> <a href="index.html#type-t">t</a> <span>&#45;&gt;</span> (<span class="type-var">'a</span> * <span class="type-var">'b</span>) <a href="index.html#type-t">t</a></code></dt></dl><dl><dt class="spec type" id="type-in_channel"><a href="#type-in_channel" class="anchor"></a><code><span class="keyword">type</span> in_channel</code></dt><dt class="spec type" id="type-out_channel"><a href="#type-out_channel" class="anchor"></a><code><span class="keyword">type</span> out_channel</code></dt></dl></div></body></html>

View file

@ -1,2 +0,0 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>IO (linol-lwt.Linol_lwt__.Jsonrpc2.IO)</title><link rel="stylesheet" href="../../../../odoc.css"/><meta charset="utf-8"/><meta name="viewport" content="width=device-width,initial-scale=1.0"/><script src="../../../../highlight.pack.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body><div class="content"><header><nav><a href="../index.html">Up</a> <a href="../../../index.html">linol-lwt</a> &#x00BB; <a href="../../index.html">Linol_lwt__</a> &#x00BB; <a href="../index.html">Jsonrpc2</a> &#x00BB; IO</nav><h1>Module <code>Jsonrpc2.IO</code></h1></header><dl><dt class="spec type" id="type-t"><a href="#type-t" class="anchor"></a><code><span class="keyword">type</span> 'a t</code><code> = <span class="type-var">'a</span> <a href="../../../Linol_lwt/Task/index.html#type-m">Linol_lwt.Task.m</a></code></dt></dl><dl><dt class="spec value" id="val-return"><a href="#val-return" class="anchor"></a><code><span class="keyword">val</span> return : <span class="type-var">'a</span> <span>&#45;&gt;</span> <span class="type-var">'a</span> <a href="index.html#type-t">t</a></code></dt><dt class="spec value" id="val-failwith"><a href="#val-failwith" class="anchor"></a><code><span class="keyword">val</span> failwith : string <span>&#45;&gt;</span> <span class="type-var">'a</span> <a href="index.html#type-t">t</a></code></dt><dt class="spec value" id="val-let+"><a href="#val-let+" class="anchor"></a><code><span class="keyword">val</span> let+ : <span class="type-var">'a</span> <a href="index.html#type-t">t</a> <span>&#45;&gt;</span> (<span class="type-var">'a</span> <span>&#45;&gt;</span> <span class="type-var">'b</span>) <span>&#45;&gt;</span> <span class="type-var">'b</span> <a href="index.html#type-t">t</a></code></dt><dt class="spec value" id="val-let*"><a href="#val-let*" class="anchor"></a><code><span class="keyword">val</span> let* : <span class="type-var">'a</span> <a href="index.html#type-t">t</a> <span>&#45;&gt;</span> (<span class="type-var">'a</span> <span>&#45;&gt;</span> <span class="type-var">'b</span> <a href="index.html#type-t">t</a>) <span>&#45;&gt;</span> <span class="type-var">'b</span> <a href="index.html#type-t">t</a></code></dt><dt class="spec value" id="val-and+"><a href="#val-and+" class="anchor"></a><code><span class="keyword">val</span> and+ : <span class="type-var">'a</span> <a href="index.html#type-t">t</a> <span>&#45;&gt;</span> <span class="type-var">'b</span> <a href="index.html#type-t">t</a> <span>&#45;&gt;</span> (<span class="type-var">'a</span> * <span class="type-var">'b</span>) <a href="index.html#type-t">t</a></code></dt></dl><dl><dt class="spec type" id="type-in_channel"><a href="#type-in_channel" class="anchor"></a><code><span class="keyword">type</span> in_channel</code><code> = Lwt_io.input Lwt_io.channel</code></dt><dt class="spec type" id="type-out_channel"><a href="#type-out_channel" class="anchor"></a><code><span class="keyword">type</span> out_channel</code><code> = Lwt_io.output Lwt_io.channel</code></dt></dl></div></body></html>

View file

@ -1,2 +0,0 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>base_server (linol-lwt.Linol_lwt__.Jsonrpc2.base_server)</title><link rel="stylesheet" href="../../../../odoc.css"/><meta charset="utf-8"/><meta name="viewport" content="width=device-width,initial-scale=1.0"/><script src="../../../../highlight.pack.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body><div class="content"><header><nav><a href="../index.html">Up</a> <a href="../../../index.html">linol-lwt</a> &#x00BB; <a href="../../index.html">Linol_lwt__</a> &#x00BB; <a href="../index.html">Jsonrpc2</a> &#x00BB; base_server</nav><h1>Class <code>Jsonrpc2.base_server</code></h1></header><dl><dt class="spec method" id="method-must_quit"><a href="#method-must_quit" class="anchor"></a><code><span class="keyword">method</span> must_quit : bool</code></dt><dt class="spec method" id="method-on_notification"><a href="#method-on_notification" class="anchor"></a><code><span class="keyword">method</span> <span class="keyword">virtual</span> on_notification : notify_back:(Lsp.Server_notification.t <span>&#45;&gt;</span> unit <a href="../IO/index.html#type-t">IO.t</a>) <span>&#45;&gt;</span> Lsp.Client_notification.t <span>&#45;&gt;</span> unit <a href="../IO/index.html#type-t">IO.t</a></code></dt><dt class="spec method" id="method-on_request"><a href="#method-on_request" class="anchor"></a><code><span class="keyword">method</span> <span class="keyword">virtual</span> on_request : a. <span class="type-var">'a</span> Lsp.Client_request.t <span>&#45;&gt;</span> <span class="type-var">'a</span> <a href="../IO/index.html#type-t">IO.t</a></code></dt></dl></div></body></html>

View file

@ -1,2 +0,0 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>notify_back (linol-lwt.Linol_lwt__.Jsonrpc2.notify_back)</title><link rel="stylesheet" href="../../../../odoc.css"/><meta charset="utf-8"/><meta name="viewport" content="width=device-width,initial-scale=1.0"/><script src="../../../../highlight.pack.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body><div class="content"><header><nav><a href="../index.html">Up</a> <a href="../../../index.html">linol-lwt</a> &#x00BB; <a href="../../index.html">Linol_lwt__</a> &#x00BB; <a href="../index.html">Jsonrpc2</a> &#x00BB; notify_back</nav><h1>Class <code>Jsonrpc2.notify_back</code></h1></header><dl><dt class="spec method" id="method-send_diagnostic"><a href="#method-send_diagnostic" class="anchor"></a><code><span class="keyword">method</span> send_diagnostic : Lsp.Types.Diagnostic.t list <span>&#45;&gt;</span> unit <a href="../IO/index.html#type-t">IO.t</a></code></dt><dt class="spec method" id="method-send_log_msg"><a href="#method-send_log_msg" class="anchor"></a><code><span class="keyword">method</span> send_log_msg : type_:Lsp__Types.MessageType.t <span>&#45;&gt;</span> string <span>&#45;&gt;</span> unit <a href="../IO/index.html#type-t">IO.t</a></code></dt><dt class="spec method" id="method-send_notification"><a href="#method-send_notification" class="anchor"></a><code><span class="keyword">method</span> send_notification : Lsp.Server_notification.t <span>&#45;&gt;</span> unit <a href="../IO/index.html#type-t">IO.t</a></code></dt></dl></div></body></html>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -1,2 +0,0 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Infix (linol-lwt.Linol_lwt__.Task.Infix)</title><link rel="stylesheet" href="../../../../odoc.css"/><meta charset="utf-8"/><meta name="viewport" content="width=device-width,initial-scale=1.0"/><script src="../../../../highlight.pack.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body><div class="content"><header><nav><a href="../index.html">Up</a> <a href="../../../index.html">linol-lwt</a> &#x00BB; <a href="../../index.html">Linol_lwt__</a> &#x00BB; <a href="../index.html">Task</a> &#x00BB; Infix</nav><h1>Module <code>Task.Infix</code></h1></header><dl><dt class="spec value" id="val-let+"><a href="#val-let+" class="anchor"></a><code><span class="keyword">val</span> let+ : <span class="type-var">'a</span> <a href="../index.html#type-m">m</a> <span>&#45;&gt;</span> (<span class="type-var">'a</span> <span>&#45;&gt;</span> <span class="type-var">'b</span>) <span>&#45;&gt;</span> <span class="type-var">'b</span> <a href="../index.html#type-m">m</a></code></dt><dt class="spec value" id="val-let*"><a href="#val-let*" class="anchor"></a><code><span class="keyword">val</span> let* : <span class="type-var">'a</span> <a href="../index.html#type-m">m</a> <span>&#45;&gt;</span> (<span class="type-var">'a</span> <span>&#45;&gt;</span> <span class="type-var">'b</span> <a href="../index.html#type-m">m</a>) <span>&#45;&gt;</span> <span class="type-var">'b</span> <a href="../index.html#type-m">m</a></code></dt><dt class="spec value" id="val-(&gt;|=)"><a href="#val-(&gt;|=)" class="anchor"></a><code><span class="keyword">val</span> (&gt;|=) : <span class="type-var">'a</span> <a href="../index.html#type-m">m</a> <span>&#45;&gt;</span> (<span class="type-var">'a</span> <span>&#45;&gt;</span> <span class="type-var">'b</span>) <span>&#45;&gt;</span> <span class="type-var">'b</span> <a href="../index.html#type-m">m</a></code></dt><dt class="spec value" id="val-(&gt;&gt;=)"><a href="#val-(&gt;&gt;=)" class="anchor"></a><code><span class="keyword">val</span> (&gt;&gt;=) : <span class="type-var">'a</span> <a href="../index.html#type-m">m</a> <span>&#45;&gt;</span> (<span class="type-var">'a</span> <span>&#45;&gt;</span> <span class="type-var">'b</span> <a href="../index.html#type-m">m</a>) <span>&#45;&gt;</span> <span class="type-var">'b</span> <a href="../index.html#type-m">m</a></code></dt><dt class="spec value" id="val-and+"><a href="#val-and+" class="anchor"></a><code><span class="keyword">val</span> and+ : <span class="type-var">'a</span> <a href="../index.html#type-m">m</a> <span>&#45;&gt;</span> <span class="type-var">'b</span> <a href="../index.html#type-m">m</a> <span>&#45;&gt;</span> (<span class="type-var">'a</span> * <span class="type-var">'b</span>) <a href="../index.html#type-m">m</a></code></dt></dl></div></body></html>

View file

@ -1,2 +0,0 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Wrapped_error (linol-lwt.Linol_lwt__.Task.Wrapped_error)</title><link rel="stylesheet" href="../../../../odoc.css"/><meta charset="utf-8"/><meta name="viewport" content="width=device-width,initial-scale=1.0"/><script src="../../../../highlight.pack.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body><div class="content"><header><nav><a href="../index.html">Up</a> <a href="../../../index.html">linol-lwt</a> &#x00BB; <a href="../../index.html">Linol_lwt__</a> &#x00BB; <a href="../index.html">Task</a> &#x00BB; Wrapped_error</nav><h1>Module <code>Task.Wrapped_error</code></h1></header><dl><dt class="spec type" id="type-task"><a href="#type-task" class="anchor"></a><code><span class="keyword">type</span> 'a task</code><code> = <span class="type-var">'a</span> <a href="../index.html#type-t">t</a></code></dt><dt class="spec type" id="type-t"><a href="#type-t" class="anchor"></a><code><span class="keyword">type</span> t</code><code> = </code><table class="variant"><tr id="type-t.E" class="anchored"><td class="def constructor"><a href="#type-t.E" class="anchor"></a><code>| </code><code><span class="constructor">E</span> : </code><code>{</code><table class="record"><tr id="type-t.task" class="anchored"><td class="def field"><a href="#type-t.task" class="anchor"></a><code>task : <span class="type-var">'a</span> <a href="index.html#type-task">task</a>;</code></td></tr><tr id="type-t.e" class="anchored"><td class="def field"><a href="#type-t.e" class="anchor"></a><code>e : exn;</code></td></tr></table><code>}</code><code> <span>&#45;&gt;</span> <a href="index.html#type-t">t</a></code></td></tr></table></dt></dl><dl><dt class="spec exception" id="exception-Wrapped"><a href="#exception-Wrapped" class="anchor"></a><code><span class="keyword">exception</span> </code><code><span class="exception">Wrapped</span> <span class="keyword">of</span> <a href="index.html#type-t">t</a></code></dt><dd><p>An exception caught and re-launched from a task</p></dd></dl><dl><dt class="spec value" id="val-pp"><a href="#val-pp" class="anchor"></a><code><span class="keyword">val</span> pp : Stdlib.Format.formatter <span>&#45;&gt;</span> <a href="index.html#type-t">t</a> <span>&#45;&gt;</span> unit</code></dt><dt class="spec value" id="val-to_string"><a href="#val-to_string" class="anchor"></a><code><span class="keyword">val</span> to_string : <a href="index.html#type-t">t</a> <span>&#45;&gt;</span> string</code></dt></dl></div></body></html>

File diff suppressed because one or more lines are too long

View file

@ -1,2 +0,0 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Linol_lwt__ (linol-lwt.Linol_lwt__)</title><link rel="stylesheet" href="../../odoc.css"/><meta charset="utf-8"/><meta name="viewport" content="width=device-width,initial-scale=1.0"/><script src="../../highlight.pack.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body><div class="content"><header><nav><a href="../index.html">Up</a> <a href="../index.html">linol-lwt</a> &#x00BB; Linol_lwt__</nav><h1>Module <code>Linol_lwt__</code></h1></header><dl><dt class="spec module" id="module-Jsonrpc2"><a href="#module-Jsonrpc2" class="anchor"></a><code><span class="keyword">module</span> <a href="Jsonrpc2/index.html">Jsonrpc2</a> : <span class="keyword">sig</span> ... <span class="keyword">end</span></code></dt><dd></dd></dl><dl><dt class="spec module" id="module-Task"><a href="#module-Task" class="anchor"></a><code><span class="keyword">module</span> <a href="Task/index.html">Task</a> : <span class="keyword">sig</span> ... <span class="keyword">end</span></code></dt><dd></dd></dl></div></body></html>

View file

@ -1,2 +0,0 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>IO (linol-lwt.Linol_lwt__Jsonrpc2.IO)</title><link rel="stylesheet" href="../../../odoc.css"/><meta charset="utf-8"/><meta name="viewport" content="width=device-width,initial-scale=1.0"/><script src="../../../highlight.pack.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body><div class="content"><header><nav><a href="../index.html">Up</a> <a href="../../index.html">linol-lwt</a> &#x00BB; <a href="../index.html">Linol_lwt__Jsonrpc2</a> &#x00BB; IO</nav><h1>Module <code>Linol_lwt__Jsonrpc2.IO</code></h1></header><dl><dt class="spec type" id="type-t"><a href="#type-t" class="anchor"></a><code><span class="keyword">type</span> 'a t</code><code> = <span class="type-var">'a</span> <a href="../../Linol_lwt/Task/index.html#type-m">Linol_lwt.Task.m</a></code></dt></dl><dl><dt class="spec value" id="val-return"><a href="#val-return" class="anchor"></a><code><span class="keyword">val</span> return : <span class="type-var">'a</span> <span>&#45;&gt;</span> <span class="type-var">'a</span> <a href="index.html#type-t">t</a></code></dt><dt class="spec value" id="val-failwith"><a href="#val-failwith" class="anchor"></a><code><span class="keyword">val</span> failwith : string <span>&#45;&gt;</span> <span class="type-var">'a</span> <a href="index.html#type-t">t</a></code></dt><dt class="spec value" id="val-let+"><a href="#val-let+" class="anchor"></a><code><span class="keyword">val</span> let+ : <span class="type-var">'a</span> <a href="index.html#type-t">t</a> <span>&#45;&gt;</span> (<span class="type-var">'a</span> <span>&#45;&gt;</span> <span class="type-var">'b</span>) <span>&#45;&gt;</span> <span class="type-var">'b</span> <a href="index.html#type-t">t</a></code></dt><dt class="spec value" id="val-let*"><a href="#val-let*" class="anchor"></a><code><span class="keyword">val</span> let* : <span class="type-var">'a</span> <a href="index.html#type-t">t</a> <span>&#45;&gt;</span> (<span class="type-var">'a</span> <span>&#45;&gt;</span> <span class="type-var">'b</span> <a href="index.html#type-t">t</a>) <span>&#45;&gt;</span> <span class="type-var">'b</span> <a href="index.html#type-t">t</a></code></dt><dt class="spec value" id="val-and+"><a href="#val-and+" class="anchor"></a><code><span class="keyword">val</span> and+ : <span class="type-var">'a</span> <a href="index.html#type-t">t</a> <span>&#45;&gt;</span> <span class="type-var">'b</span> <a href="index.html#type-t">t</a> <span>&#45;&gt;</span> (<span class="type-var">'a</span> * <span class="type-var">'b</span>) <a href="index.html#type-t">t</a></code></dt></dl><dl><dt class="spec type" id="type-in_channel"><a href="#type-in_channel" class="anchor"></a><code><span class="keyword">type</span> in_channel</code><code> = Lwt_io.input Lwt_io.channel</code></dt><dt class="spec type" id="type-out_channel"><a href="#type-out_channel" class="anchor"></a><code><span class="keyword">type</span> out_channel</code><code> = Lwt_io.output Lwt_io.channel</code></dt></dl></div></body></html>

View file

@ -1,2 +0,0 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>base_server (linol-lwt.Linol_lwt__Jsonrpc2.base_server)</title><link rel="stylesheet" href="../../../odoc.css"/><meta charset="utf-8"/><meta name="viewport" content="width=device-width,initial-scale=1.0"/><script src="../../../highlight.pack.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body><div class="content"><header><nav><a href="../index.html">Up</a> <a href="../../index.html">linol-lwt</a> &#x00BB; <a href="../index.html">Linol_lwt__Jsonrpc2</a> &#x00BB; base_server</nav><h1>Class <code>Linol_lwt__Jsonrpc2.base_server</code></h1></header><dl><dt class="spec method" id="method-must_quit"><a href="#method-must_quit" class="anchor"></a><code><span class="keyword">method</span> must_quit : bool</code></dt><dt class="spec method" id="method-on_notification"><a href="#method-on_notification" class="anchor"></a><code><span class="keyword">method</span> <span class="keyword">virtual</span> on_notification : notify_back:(Lsp.Server_notification.t <span>&#45;&gt;</span> unit <a href="../IO/index.html#type-t">IO.t</a>) <span>&#45;&gt;</span> Lsp.Client_notification.t <span>&#45;&gt;</span> unit <a href="../IO/index.html#type-t">IO.t</a></code></dt><dt class="spec method" id="method-on_request"><a href="#method-on_request" class="anchor"></a><code><span class="keyword">method</span> <span class="keyword">virtual</span> on_request : a. <span class="type-var">'a</span> Lsp.Client_request.t <span>&#45;&gt;</span> <span class="type-var">'a</span> <a href="../IO/index.html#type-t">IO.t</a></code></dt></dl></div></body></html>

View file

@ -1,2 +0,0 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>notify_back (linol-lwt.Linol_lwt__Jsonrpc2.notify_back)</title><link rel="stylesheet" href="../../../odoc.css"/><meta charset="utf-8"/><meta name="viewport" content="width=device-width,initial-scale=1.0"/><script src="../../../highlight.pack.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body><div class="content"><header><nav><a href="../index.html">Up</a> <a href="../../index.html">linol-lwt</a> &#x00BB; <a href="../index.html">Linol_lwt__Jsonrpc2</a> &#x00BB; notify_back</nav><h1>Class <code>Linol_lwt__Jsonrpc2.notify_back</code></h1></header><dl><dt class="spec method" id="method-send_diagnostic"><a href="#method-send_diagnostic" class="anchor"></a><code><span class="keyword">method</span> send_diagnostic : Lsp.Types.Diagnostic.t list <span>&#45;&gt;</span> unit <a href="../IO/index.html#type-t">IO.t</a></code></dt><dt class="spec method" id="method-send_log_msg"><a href="#method-send_log_msg" class="anchor"></a><code><span class="keyword">method</span> send_log_msg : type_:Lsp__Types.MessageType.t <span>&#45;&gt;</span> string <span>&#45;&gt;</span> unit <a href="../IO/index.html#type-t">IO.t</a></code></dt><dt class="spec method" id="method-send_notification"><a href="#method-send_notification" class="anchor"></a><code><span class="keyword">method</span> send_notification : Lsp.Server_notification.t <span>&#45;&gt;</span> unit <a href="../IO/index.html#type-t">IO.t</a></code></dt></dl></div></body></html>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -1,2 +0,0 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Infix (linol-lwt.Linol_lwt__Task.Infix)</title><link rel="stylesheet" href="../../../odoc.css"/><meta charset="utf-8"/><meta name="viewport" content="width=device-width,initial-scale=1.0"/><script src="../../../highlight.pack.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body><div class="content"><header><nav><a href="../index.html">Up</a> <a href="../../index.html">linol-lwt</a> &#x00BB; <a href="../index.html">Linol_lwt__Task</a> &#x00BB; Infix</nav><h1>Module <code>Linol_lwt__Task.Infix</code></h1></header><dl><dt class="spec value" id="val-let+"><a href="#val-let+" class="anchor"></a><code><span class="keyword">val</span> let+ : <span class="type-var">'a</span> <a href="../index.html#type-m">m</a> <span>&#45;&gt;</span> (<span class="type-var">'a</span> <span>&#45;&gt;</span> <span class="type-var">'b</span>) <span>&#45;&gt;</span> <span class="type-var">'b</span> <a href="../index.html#type-m">m</a></code></dt><dt class="spec value" id="val-let*"><a href="#val-let*" class="anchor"></a><code><span class="keyword">val</span> let* : <span class="type-var">'a</span> <a href="../index.html#type-m">m</a> <span>&#45;&gt;</span> (<span class="type-var">'a</span> <span>&#45;&gt;</span> <span class="type-var">'b</span> <a href="../index.html#type-m">m</a>) <span>&#45;&gt;</span> <span class="type-var">'b</span> <a href="../index.html#type-m">m</a></code></dt><dt class="spec value" id="val-(&gt;|=)"><a href="#val-(&gt;|=)" class="anchor"></a><code><span class="keyword">val</span> (&gt;|=) : <span class="type-var">'a</span> <a href="../index.html#type-m">m</a> <span>&#45;&gt;</span> (<span class="type-var">'a</span> <span>&#45;&gt;</span> <span class="type-var">'b</span>) <span>&#45;&gt;</span> <span class="type-var">'b</span> <a href="../index.html#type-m">m</a></code></dt><dt class="spec value" id="val-(&gt;&gt;=)"><a href="#val-(&gt;&gt;=)" class="anchor"></a><code><span class="keyword">val</span> (&gt;&gt;=) : <span class="type-var">'a</span> <a href="../index.html#type-m">m</a> <span>&#45;&gt;</span> (<span class="type-var">'a</span> <span>&#45;&gt;</span> <span class="type-var">'b</span> <a href="../index.html#type-m">m</a>) <span>&#45;&gt;</span> <span class="type-var">'b</span> <a href="../index.html#type-m">m</a></code></dt><dt class="spec value" id="val-and+"><a href="#val-and+" class="anchor"></a><code><span class="keyword">val</span> and+ : <span class="type-var">'a</span> <a href="../index.html#type-m">m</a> <span>&#45;&gt;</span> <span class="type-var">'b</span> <a href="../index.html#type-m">m</a> <span>&#45;&gt;</span> (<span class="type-var">'a</span> * <span class="type-var">'b</span>) <a href="../index.html#type-m">m</a></code></dt></dl></div></body></html>

View file

@ -1,2 +0,0 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Wrapped_error (linol-lwt.Linol_lwt__Task.Wrapped_error)</title><link rel="stylesheet" href="../../../odoc.css"/><meta charset="utf-8"/><meta name="viewport" content="width=device-width,initial-scale=1.0"/><script src="../../../highlight.pack.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body><div class="content"><header><nav><a href="../index.html">Up</a> <a href="../../index.html">linol-lwt</a> &#x00BB; <a href="../index.html">Linol_lwt__Task</a> &#x00BB; Wrapped_error</nav><h1>Module <code>Linol_lwt__Task.Wrapped_error</code></h1></header><dl><dt class="spec type" id="type-task"><a href="#type-task" class="anchor"></a><code><span class="keyword">type</span> 'a task</code><code> = <span class="type-var">'a</span> <a href="../index.html#type-t">t</a></code></dt><dt class="spec type" id="type-t"><a href="#type-t" class="anchor"></a><code><span class="keyword">type</span> t</code><code> = </code><table class="variant"><tr id="type-t.E" class="anchored"><td class="def constructor"><a href="#type-t.E" class="anchor"></a><code>| </code><code><span class="constructor">E</span> : </code><code>{</code><table class="record"><tr id="type-t.task" class="anchored"><td class="def field"><a href="#type-t.task" class="anchor"></a><code>task : <span class="type-var">'a</span> <a href="index.html#type-task">task</a>;</code></td></tr><tr id="type-t.e" class="anchored"><td class="def field"><a href="#type-t.e" class="anchor"></a><code>e : exn;</code></td></tr></table><code>}</code><code> <span>&#45;&gt;</span> <a href="index.html#type-t">t</a></code></td></tr></table></dt></dl><dl><dt class="spec exception" id="exception-Wrapped"><a href="#exception-Wrapped" class="anchor"></a><code><span class="keyword">exception</span> </code><code><span class="exception">Wrapped</span> <span class="keyword">of</span> <a href="index.html#type-t">t</a></code></dt><dd><p>An exception caught and re-launched from a task</p></dd></dl><dl><dt class="spec value" id="val-pp"><a href="#val-pp" class="anchor"></a><code><span class="keyword">val</span> pp : Stdlib.Format.formatter <span>&#45;&gt;</span> <a href="index.html#type-t">t</a> <span>&#45;&gt;</span> unit</code></dt><dt class="spec value" id="val-to_string"><a href="#val-to_string" class="anchor"></a><code><span class="keyword">val</span> to_string : <a href="index.html#type-t">t</a> <span>&#45;&gt;</span> string</code></dt></dl></div></body></html>

File diff suppressed because one or more lines are too long

View file

@ -1,2 +0,0 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>index (linol-lwt.index)</title><link rel="stylesheet" href="../odoc.css"/><meta charset="utf-8"/><meta name="viewport" content="width=device-width,initial-scale=1.0"/><script src="../highlight.pack.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body><div class="content"><header><nav><a href="../index.html">Up</a> linol-lwt</nav></header><h1 id="linol-lwt-index"><a href="#linol-lwt-index" class="anchor"></a>linol-lwt index</h1><h2 id="library-linol-lwt"><a href="#library-linol-lwt" class="anchor"></a>Library linol-lwt</h2><p>The entry point of this library is the module: <a href="Linol_lwt/index.html"><code>Linol_lwt</code></a>.</p></div></body></html>

View file

@ -1,2 +0,0 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>1-IO (linol.Linol.Make.1-IO)</title><link rel="stylesheet" href="../../../../odoc.css"/><meta charset="utf-8"/><meta name="viewport" content="width=device-width,initial-scale=1.0"/><script src="../../../../highlight.pack.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body><div class="content"><header><nav><a href="../index.html">Up</a> <a href="../../../index.html">linol</a> &#x00BB; <a href="../../index.html">Linol</a> &#x00BB; <a href="../index.html">Make</a> &#x00BB; 1-IO</nav><h1>Parameter <code>Make.1-IO</code></h1></header><dl><dt class="spec type" id="type-t"><a href="#type-t" class="anchor"></a><code><span class="keyword">type</span> 'a t</code></dt></dl><dl><dt class="spec value" id="val-return"><a href="#val-return" class="anchor"></a><code><span class="keyword">val</span> return : <span class="type-var">'a</span> <span>&#45;&gt;</span> <span class="type-var">'a</span> <a href="index.html#type-t">t</a></code></dt><dt class="spec value" id="val-failwith"><a href="#val-failwith" class="anchor"></a><code><span class="keyword">val</span> failwith : string <span>&#45;&gt;</span> <span class="type-var">'a</span> <a href="index.html#type-t">t</a></code></dt><dt class="spec value" id="val-let+"><a href="#val-let+" class="anchor"></a><code><span class="keyword">val</span> let+ : <span class="type-var">'a</span> <a href="index.html#type-t">t</a> <span>&#45;&gt;</span> (<span class="type-var">'a</span> <span>&#45;&gt;</span> <span class="type-var">'b</span>) <span>&#45;&gt;</span> <span class="type-var">'b</span> <a href="index.html#type-t">t</a></code></dt><dt class="spec value" id="val-let*"><a href="#val-let*" class="anchor"></a><code><span class="keyword">val</span> let* : <span class="type-var">'a</span> <a href="index.html#type-t">t</a> <span>&#45;&gt;</span> (<span class="type-var">'a</span> <span>&#45;&gt;</span> <span class="type-var">'b</span> <a href="index.html#type-t">t</a>) <span>&#45;&gt;</span> <span class="type-var">'b</span> <a href="index.html#type-t">t</a></code></dt><dt class="spec value" id="val-and+"><a href="#val-and+" class="anchor"></a><code><span class="keyword">val</span> and+ : <span class="type-var">'a</span> <a href="index.html#type-t">t</a> <span>&#45;&gt;</span> <span class="type-var">'b</span> <a href="index.html#type-t">t</a> <span>&#45;&gt;</span> (<span class="type-var">'a</span> * <span class="type-var">'b</span>) <a href="index.html#type-t">t</a></code></dt></dl><dl><dt class="spec type" id="type-in_channel"><a href="#type-in_channel" class="anchor"></a><code><span class="keyword">type</span> in_channel</code></dt><dt class="spec type" id="type-out_channel"><a href="#type-out_channel" class="anchor"></a><code><span class="keyword">type</span> out_channel</code></dt></dl></div></body></html>

View file

@ -1,2 +0,0 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>base_server (linol.Linol.Make.base_server)</title><link rel="stylesheet" href="../../../../odoc.css"/><meta charset="utf-8"/><meta name="viewport" content="width=device-width,initial-scale=1.0"/><script src="../../../../highlight.pack.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body><div class="content"><header><nav><a href="../index.html">Up</a> <a href="../../../index.html">linol</a> &#x00BB; <a href="../../index.html">Linol</a> &#x00BB; <a href="../index.html">Make</a> &#x00BB; base_server</nav><h1>Class <code>Make.base_server</code></h1><p>The server baseclass</p></header><dl><dt class="spec method" id="method-on_notification"><a href="#method-on_notification" class="anchor"></a><code><span class="keyword">method</span> <span class="keyword">virtual</span> on_notification : notify_back:(Lsp.Server_notification.t <span>&#45;&gt;</span> unit <a href="../argument-1-IO/index.html#type-t">IO.t</a>) <span>&#45;&gt;</span> Lsp.Client_notification.t <span>&#45;&gt;</span> unit <a href="../argument-1-IO/index.html#type-t">IO.t</a></code></dt><dt class="spec method" id="method-on_request"><a href="#method-on_request" class="anchor"></a><code><span class="keyword">method</span> <span class="keyword">virtual</span> on_request : a. <span class="type-var">'a</span> Lsp.Client_request.t <span>&#45;&gt;</span> <span class="type-var">'a</span> <a href="../argument-1-IO/index.html#type-t">IO.t</a></code></dt><dt class="spec method" id="method-must_quit"><a href="#method-must_quit" class="anchor"></a><code><span class="keyword">method</span> must_quit : &lt; must_quit : bool; on_notification : notify_back:(Lsp.Server_notification.t <span>&#45;&gt;</span> unit <a href="../argument-1-IO/index.html#type-t">IO.t</a>) <span>&#45;&gt;</span> Lsp.Client_notification.t <span>&#45;&gt;</span> unit <a href="../argument-1-IO/index.html#type-t">IO.t</a>; on_request : a. <span class="type-var">'a</span> Lsp.Client_request.t <span>&#45;&gt;</span> <span class="type-var">'a</span> <a href="../argument-1-IO/index.html#type-t">IO.t</a>; .. &gt; <span>&#45;&gt;</span> bool</code></dt><dd><p>Set to true if the client requested to exit</p></dd></dl></div></body></html>

View file

@ -1,2 +0,0 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>notify_back (linol.Linol.Make.notify_back)</title><link rel="stylesheet" href="../../../../odoc.css"/><meta charset="utf-8"/><meta name="viewport" content="width=device-width,initial-scale=1.0"/><script src="../../../../highlight.pack.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body><div class="content"><header><nav><a href="../index.html">Up</a> <a href="../../../index.html">linol</a> &#x00BB; <a href="../../index.html">Linol</a> &#x00BB; <a href="../index.html">Make</a> &#x00BB; notify_back</nav><h1>Class <code>Make.notify_back</code></h1><p>A wrapper to more easily reply to notifications</p></header><dl><dt class="spec method" id="method-send_log_msg"><a href="#method-send_log_msg" class="anchor"></a><code><span class="keyword">method</span> send_log_msg : &lt; send_diagnostic : Lsp.Types.Diagnostic.t list <span>&#45;&gt;</span> unit <a href="../argument-1-IO/index.html#type-t">IO.t</a>; send_log_msg : type_:Lsp__Types.MessageType.t <span>&#45;&gt;</span> string <span>&#45;&gt;</span> unit <a href="../argument-1-IO/index.html#type-t">IO.t</a>; send_notification : Lsp.Server_notification.t <span>&#45;&gt;</span> unit <a href="../argument-1-IO/index.html#type-t">IO.t</a>; .. &gt; <span>&#45;&gt;</span> type_:Lsp__Types.MessageType.t <span>&#45;&gt;</span> string <span>&#45;&gt;</span> unit <a href="../argument-1-IO/index.html#type-t">IO.t</a></code></dt><dd><p>Send a log message to the editor</p></dd></dl><dl><dt class="spec method" id="method-send_diagnostic"><a href="#method-send_diagnostic" class="anchor"></a><code><span class="keyword">method</span> send_diagnostic : &lt; send_diagnostic : Lsp.Types.Diagnostic.t list <span>&#45;&gt;</span> unit <a href="../argument-1-IO/index.html#type-t">IO.t</a>; send_log_msg : type_:Lsp__Types.MessageType.t <span>&#45;&gt;</span> string <span>&#45;&gt;</span> unit <a href="../argument-1-IO/index.html#type-t">IO.t</a>; send_notification : Lsp.Server_notification.t <span>&#45;&gt;</span> unit <a href="../argument-1-IO/index.html#type-t">IO.t</a>; .. &gt; <span>&#45;&gt;</span> Lsp.Types.Diagnostic.t list <span>&#45;&gt;</span> unit <a href="../argument-1-IO/index.html#type-t">IO.t</a></code></dt><dd><p>Send diagnostics for the current document</p></dd></dl><dl><dt class="spec method" id="method-send_notification"><a href="#method-send_notification" class="anchor"></a><code><span class="keyword">method</span> send_notification : &lt; send_diagnostic : Lsp.Types.Diagnostic.t list <span>&#45;&gt;</span> unit <a href="../argument-1-IO/index.html#type-t">IO.t</a>; send_log_msg : type_:Lsp__Types.MessageType.t <span>&#45;&gt;</span> string <span>&#45;&gt;</span> unit <a href="../argument-1-IO/index.html#type-t">IO.t</a>; send_notification : Lsp.Server_notification.t <span>&#45;&gt;</span> unit <a href="../argument-1-IO/index.html#type-t">IO.t</a>; .. &gt; <span>&#45;&gt;</span> Lsp.Server_notification.t <span>&#45;&gt;</span> unit <a href="../argument-1-IO/index.html#type-t">IO.t</a></code></dt><dd><p>Send a notification (general purpose method)</p></dd></dl></div></body></html>

File diff suppressed because one or more lines are too long

View file

@ -1,2 +0,0 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Make (linol.Linol.Make)</title><link rel="stylesheet" href="../../../odoc.css"/><meta charset="utf-8"/><meta name="viewport" content="width=device-width,initial-scale=1.0"/><script src="../../../highlight.pack.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body><div class="content"><header><nav><a href="../index.html">Up</a> <a href="../../index.html">linol</a> &#x00BB; <a href="../index.html">Linol</a> &#x00BB; Make</nav><h1>Module <code>Linol.Make</code></h1><h3 id="server-interface-for-some-io-substrate"><a href="#server-interface-for-some-io-substrate" class="anchor"></a>Server interface for some IO substrate</h3></header><h3 class="heading">Parameters</h3><ul><li><code><a href="argument-1-IO/index.html">IO</a> : <a href="../index.html#module-type-IO">IO</a></code></li></ul><h3 class="heading">Signature</h3><div class="spec module" id="module-Position"><a href="#module-Position" class="anchor"></a><code><span class="keyword">module</span> Position = Lsp.Types.Position</code></div><div class="spec module" id="module-Range"><a href="#module-Range" class="anchor"></a><code><span class="keyword">module</span> Range = Lsp.Types.Range</code></div><dl><dt class="spec class" id="class-base_server"><a href="#class-base_server" class="anchor"></a><code><span class="keyword">class</span> <span class="keyword">virtual</span> <a href="class-base_server/index.html">base_server</a> : <span class="keyword">object</span> ... <span class="keyword">end</span></code></dt><dd><p>The server baseclass</p></dd></dl><dl><dt class="spec class" id="class-notify_back"><a href="#class-notify_back" class="anchor"></a><code><span class="keyword">class</span> <a href="class-notify_back/index.html">notify_back</a> : notify_back:(Lsp.Server_notification.t <span>&#45;&gt;</span> unit <a href="argument-1-IO/index.html#type-t">IO.t</a>) <span>&#45;&gt;</span> ?&#8288;version:int option <span>&#45;&gt;</span> uri:Lsp.Types.DocumentUri.t <span>&#45;&gt;</span> unit <span>&#45;&gt;</span> <span class="keyword">object</span> ... <span class="keyword">end</span></code></dt><dd><p>A wrapper to more easily reply to notifications</p></dd></dl><dl><dt class="spec type" id="type-doc_state"><a href="#type-doc_state" class="anchor"></a><code><span class="keyword">type</span> doc_state</code><code> = </code><code>{</code><table class="record"><tr id="type-doc_state.uri" class="anchored"><td class="def field"><a href="#type-doc_state.uri" class="anchor"></a><code>uri : Lsp.Types.DocumentUri.t;</code></td></tr><tr id="type-doc_state.languageId" class="anchored"><td class="def field"><a href="#type-doc_state.languageId" class="anchor"></a><code>languageId : string;</code></td></tr><tr id="type-doc_state.version" class="anchored"><td class="def field"><a href="#type-doc_state.version" class="anchor"></a><code>version : int;</code></td></tr><tr id="type-doc_state.content" class="anchored"><td class="def field"><a href="#type-doc_state.content" class="anchor"></a><code>content : string;</code></td></tr></table><code>}</code></dt><dd><p>Current state of a document.</p></dd></dl><dl><dt class="spec class" id="class-server"><a href="#class-server" class="anchor"></a><code><span class="keyword">class</span> <span class="keyword">virtual</span> <a href="class-server/index.html">server</a> : <span class="keyword">object</span> ... <span class="keyword">end</span></code></dt><dd><p>An easily overloadable class. Pick the methods you want to support. The user must provide at least the callbacks for document lifecycle: open, close, update. The most basic LSP server should check documents when they're updated and report diagnostics back to the editor.</p></dd></dl></div></body></html>

View file

@ -1,2 +0,0 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Linol (linol.Linol)</title><link rel="stylesheet" href="../../odoc.css"/><meta charset="utf-8"/><meta name="viewport" content="width=device-width,initial-scale=1.0"/><script src="../../highlight.pack.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body><div class="content"><header><nav><a href="../index.html">Up</a> <a href="../index.html">linol</a> &#x00BB; Linol</nav><h1>Module <code>Linol</code></h1><h2 id="linol"><a href="#linol" class="anchor"></a>Linol</h2><p>Abstraction over The &quot;Lsp&quot; library, to make it easier to develop LSP servers in OCaml (but not necessarily <b>for</b> OCaml).</p></header><dl><dt class="spec module-type" id="module-type-IO"><a href="#module-type-IO" class="anchor"></a><code><span class="keyword">module</span> <span class="keyword">type</span> <a href="module-type-IO/index.html">IO</a> = <span class="keyword">sig</span> ... <span class="keyword">end</span></code></dt><dd></dd></dl><dl><dt class="spec module" id="module-Make"><a href="#module-Make" class="anchor"></a><code><span class="keyword">module</span> <a href="Make/index.html">Make</a> : <span class="keyword">functor</span> (<a href="Make/argument-1-IO/index.html">IO</a> : <a href="index.html#module-type-IO">IO</a>) <span>&#45;&gt;</span> <span class="keyword">sig</span> ... <span class="keyword">end</span></code></dt><dd></dd></dl></div></body></html>

View file

@ -1,2 +0,0 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>IO (linol.Linol.IO)</title><link rel="stylesheet" href="../../../odoc.css"/><meta charset="utf-8"/><meta name="viewport" content="width=device-width,initial-scale=1.0"/><script src="../../../highlight.pack.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body><div class="content"><header><nav><a href="../index.html">Up</a> <a href="../../index.html">linol</a> &#x00BB; <a href="../index.html">Linol</a> &#x00BB; IO</nav><h1>Module type <code>Linol.IO</code></h1><h3 id="parametrized-io-interface"><a href="#parametrized-io-interface" class="anchor"></a>Parametrized IO Interface</h3></header><dl><dt class="spec type" id="type-t"><a href="#type-t" class="anchor"></a><code><span class="keyword">type</span> 'a t</code></dt></dl><dl><dt class="spec value" id="val-return"><a href="#val-return" class="anchor"></a><code><span class="keyword">val</span> return : <span class="type-var">'a</span> <span>&#45;&gt;</span> <span class="type-var">'a</span> <a href="index.html#type-t">t</a></code></dt><dt class="spec value" id="val-failwith"><a href="#val-failwith" class="anchor"></a><code><span class="keyword">val</span> failwith : string <span>&#45;&gt;</span> <span class="type-var">'a</span> <a href="index.html#type-t">t</a></code></dt><dt class="spec value" id="val-let+"><a href="#val-let+" class="anchor"></a><code><span class="keyword">val</span> let+ : <span class="type-var">'a</span> <a href="index.html#type-t">t</a> <span>&#45;&gt;</span> (<span class="type-var">'a</span> <span>&#45;&gt;</span> <span class="type-var">'b</span>) <span>&#45;&gt;</span> <span class="type-var">'b</span> <a href="index.html#type-t">t</a></code></dt><dt class="spec value" id="val-let*"><a href="#val-let*" class="anchor"></a><code><span class="keyword">val</span> let* : <span class="type-var">'a</span> <a href="index.html#type-t">t</a> <span>&#45;&gt;</span> (<span class="type-var">'a</span> <span>&#45;&gt;</span> <span class="type-var">'b</span> <a href="index.html#type-t">t</a>) <span>&#45;&gt;</span> <span class="type-var">'b</span> <a href="index.html#type-t">t</a></code></dt><dt class="spec value" id="val-and+"><a href="#val-and+" class="anchor"></a><code><span class="keyword">val</span> and+ : <span class="type-var">'a</span> <a href="index.html#type-t">t</a> <span>&#45;&gt;</span> <span class="type-var">'b</span> <a href="index.html#type-t">t</a> <span>&#45;&gt;</span> (<span class="type-var">'a</span> * <span class="type-var">'b</span>) <a href="index.html#type-t">t</a></code></dt></dl><dl><dt class="spec type" id="type-in_channel"><a href="#type-in_channel" class="anchor"></a><code><span class="keyword">type</span> in_channel</code></dt><dt class="spec type" id="type-out_channel"><a href="#type-out_channel" class="anchor"></a><code><span class="keyword">type</span> out_channel</code></dt></dl></div></body></html>

View file

@ -1,2 +0,0 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>index (linol.index)</title><link rel="stylesheet" href="../odoc.css"/><meta charset="utf-8"/><meta name="viewport" content="width=device-width,initial-scale=1.0"/><script src="../highlight.pack.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body><div class="content"><header><nav><a href="../index.html">Up</a> linol</nav></header><h1 id="linol-index"><a href="#linol-index" class="anchor"></a>linol index</h1><h2 id="library-linol"><a href="#library-linol" class="anchor"></a>Library linol</h2><p>The entry point of this library is the module: <a href="Linol/index.html"><code>Linol</code></a>.</p></div></body></html>

View file

@ -1,764 +0,0 @@
@charset "UTF-8";
/* Copyright (c) 2016 The odoc contributors. All rights reserved.
Distributed under the ISC license, see terms at the end of the file.
odoc 1.4.0 */
/* Fonts */
@import url('https://fonts.googleapis.com/css?family=Fira+Mono:400,500');
@import url('https://fonts.googleapis.com/css?family=Noticia+Text:400,400i,700');
@import url('https://fonts.googleapis.com/css?family=Fira+Sans:400,400i,500,500i,600,600i,700,700i');
/* Reset a few things. */
html, body, div, span, applet, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, big, cite, code, del, dfn, em, img, ins, kbd, q, s, samp, small, strike, strong, sub, sup, tt, var, b, u, i, center, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td, article, aside, canvas, details, embed, figure, figcaption, footer, header, hgroup, menu, nav, output, ruby, section, summary, time, mark, audio, video {
margin: 0;
padding: 0;
border: 0;
font-size: inherit;
font: inherit;
line-height: inherit;
vertical-align: baseline;
text-align: inherit;
color: inherit;
background: transparent;
}
table {
border-collapse: collapse;
border-spacing: 0;
}
*, *:before, *:after {
box-sizing: border-box;
}
html {
font-size: 15px;
}
body {
font-family: "Fira Sans", Helvetica, Arial, sans-serif;
text-align: left;
color: #333;
background: #FFFFFF;
}
.content {
max-width: 90ex;
margin-left: calc(10vw + 20ex);
margin-right: 4ex;
margin-top: 20px;
margin-bottom: 50px;
font-family: "Noticia Text", Georgia, serif;
line-height: 1.5;
}
.content>header {
margin-bottom: 30px;
}
.content>header nav {
font-family: "Fira Sans", Helvetica, Arial, sans-serif;
}
/* Basic markup elements */
b, strong {
font-weight: 500;
}
i, em {
font-style: italic;
}
sup {
vertical-align: super;
}
sub {
vertical-align: sub;
}
sup, sub {
font-size: 12px;
line-height: 0;
margin-left: 0.2ex;
}
pre {
margin-top: 0.8em;
margin-bottom: 1.2em;
}
p, ul, ol {
margin-top: 0.5em;
margin-bottom: 1em;
}
ul, ol {
list-style-position: outside
}
ul>li {
margin-left: 22px;
}
ol>li {
margin-left: 27.2px;
}
li>*:first-child {
margin-top: 0
}
/* Text alignements, this should be forbidden. */
.left {
text-align: left;
}
.right {
text-align: right;
}
.center {
text-align: center;
}
/* Links and anchors */
a {
text-decoration: none;
color: #2C5CBD;
}
a:hover {
box-shadow: 0 1px 0 0 #2C5CBD;
}
/* Linked highlight */
*:target {
background-color: rgba(187,239,253,0.3) !important;
box-shadow: 0 0px 0 1px rgba(187,239,253,0.8) !important;
border-radius: 1px;
}
*:hover>a.anchor {
visibility: visible;
}
a.anchor:before {
content: "#"
}
a.anchor:hover {
box-shadow: none;
text-decoration: none;
color: #555;
}
a.anchor {
visibility: hidden;
position: absolute;
/* top: 0px; */
/* margin-left: -3ex; */
margin-left: -1.3em;
font-weight: normal;
font-style: normal;
padding-right: 0.4em;
padding-left: 0.4em;
/* To remain selectable */
color: #d5d5d5;
}
.spec > a.anchor {
margin-left: -2.3em;
padding-right: 0.9em;
}
.xref-unresolved {
color: #2C5CBD;
}
.xref-unresolved:hover {
box-shadow: 0 1px 0 0 #CC6666;
}
/* Section and document divisions.
Until at least 4.03 many of the modules of the stdlib start at .h7,
we restart the sequence there like h2 */
h1, h2, h3, h4, h5, h6, .h7, .h8, .h9, .h10 {
font-family: "Fira Sans", Helvetica, Arial, sans-serif;
font-weight: 400;
margin: 0.5em 0 0.5em 0;
padding-top: 0.1em;
line-height: 1.2;
overflow-wrap: break-word;
}
h1 {
font-weight: 500;
font-size: 2.441em;
margin-top: 1.214em;
}
h1 {
font-weight: 500;
font-size: 1.953em;
box-shadow: 0 1px 0 0 #ddd;
}
h2 {
font-size: 1.563em;
}
h3 {
font-size: 1.25em;
}
small, .font_small {
font-size: 0.8em;
}
h1 code, h1 tt {
font-size: inherit;
font-weight: inherit;
}
h2 code, h2 tt {
font-size: inherit;
font-weight: inherit;
}
h3 code, h3 tt {
font-size: inherit;
font-weight: inherit;
}
h3 code, h3 tt {
font-size: inherit;
font-weight: inherit;
}
h4 {
font-size: 1.12em;
}
/* Preformatted and code */
tt, code, pre {
font-family: "Fira Mono", courier;
font-weight: 400;
}
pre {
padding: 0.1em;
border: 1px solid #eee;
border-radius: 5px;
overflow-x: auto;
}
p code, li code {
background-color: #f6f8fa;
color: #0d2b3e;
border-radius: 3px;
padding: 0 0.3ex;
}
p a > code {
color: #2C5CBD;
}
/* Code blocks (e.g. Examples) */
pre code {
font-size: 0.893rem;
}
/* Code lexemes */
.keyword {
font-weight: 500;
}
/* Module member specification */
.spec:not(.include), .spec.include details summary {
background-color: #f6f8fa;
border-radius: 3px;
border-left: 4px solid #5c9cf5;
border-right: 5px solid transparent;
padding: 0.35em 0.5em;
}
.spec.include details summary:hover {
background-color: #ebeff2;
}
dl, div.spec, .doc, aside {
margin-bottom: 20px;
}
dl > dd {
padding: 0.5em;
}
dd> :first-child {
margin-top: 0;
}
dl:last-child, dd> :last-child, aside:last-child, article:last-child {
margin-bottom: 0;
}
dt+dt {
margin-top: 15px;
}
section+section, section > header + dl {
margin-top: 25px;
}
.spec.type .variant {
margin-left: 2ch;
}
.spec.type .variant p {
margin: 0;
font-style: italic;
}
.spec.type .record {
margin-left: 2ch;
}
.spec.type .record p {
margin: 0;
font-style: italic;
}
div.def {
margin-top: 0;
text-indent: -2ex;
padding-left: 2ex;
}
div.def+div.doc {
margin-left: 1ex;
margin-top: 2.5px
}
div.doc>*:first-child {
margin-top: 0;
}
/* The elements other than heading should be wrapped in <aside> elements. */
/* heading, body>p, body>ul, body>ol, h3, h4, body>pre { */
/* margin-bottom: 30px; */
/* } */
/* Collapsible inlined include and module */
.spec.include details {
position: relative;
}
.spec.include details:after {
z-index: -100;
display: block;
content: " ";
position: absolute;
border-radius: 0 1ex 1ex 0;
right: -20px;
top: 1px;
bottom: 1px;
width: 15px;
background: rgba(0, 4, 15, 0.05);
box-shadow: 0 0px 0 1px rgba(204, 204, 204, 0.53);
}
.spec.include details summary {
position: relative;
margin-bottom: 20px;
cursor: pointer;
outline: none;
}
/* FIXME: Does not work in Firefox. */
details summary::-webkit-details-marker {
color: #888;
transform: scaleX(-1);
position: absolute;
top: calc(50% - 5px);
height: 11px;
right: -29px;
}
/* Records and variants FIXME */
div.def table {
text-indent: 0em;
padding: 0;
margin-left: -2ex;
}
td.def {
padding-right: 2ex
}
.record td.def {
padding-left: 2ex;
}
td.doc *:first-child {
margin-top: 0em
}
/* @ tags */
ul.at-tag {
list-style-type: none;
margin-left: 0;
padding: 0;
}
ul.at-tag li {
margin-left: 0;
padding: 0;
}
ul.at-tag li p:first-child {
margin-top: 0
}
/* FIXME remove */
span.at-tag {
font-weight: bold
}
.at-tag.deprecated {
font-weight: normal;
color: crimson
}
.at-tag.raise {
font-weight: bold;
}
/* FIXME random other things to review. */
.heading {
margin-top: 10px;
border-bottom: solid;
border-width: 1px;
border-color: #DDD;
text-align: right;
font-weight: normal;
font-style: italic;
}
.heading+.sig {
margin-top: -20px;
}
.heading+.parameters {
margin-top: -20px;
}
/* Odig package index */
.by-name ol, .by-tag ol, .errors ol {
list-style-type: none;
margin-left: 0;
}
.by-name ol ol, .by-tag ol ol {
margin-top: 0;
margin-bottom: 0
}
.by-name li, .by-tag li, .errors li {
margin-left: 0;
}
.by-name .version {
font-size: 10px;
color: #AAA
}
.by-name nav {
margin-bottom: 10px
}
.by-name nav a {
text-transform: uppercase;
font-size: 18px;
margin-right: 1ex;
color: #222;
display: inline-block;
}
.by-tag nav a {
margin-right: 1ex;
color: #222;
display: inline-block;
}
.by-tag>ol>li {
margin-top: 10px;
}
.by-tag>ol>li>span, .by-tag>ol>li>ol, .by-tag>ol>li>ol>li {
display: inline-block;
margin-right: 1ex;
}
/* Odig package page */
.package nav {
display: inline;
font-size: 14px;
font-weight: normal;
}
.package .version {
font-size: 14px;
}
h1+.modules, h1+.sel {
margin-top: 10px
}
.sel {
font-weight: normal;
font-style: italic;
font-size: 14px;
margin-top: 20px;
}
.sel+.modules {
margin-top: 10px;
margin-bottom: 20px;
margin-left: 1ex;
}
.modules {
margin: 0;
}
.modules .module {
min-width: 8ex;
padding-right: 2ex
}
.package.info {
margin: 0;
}
.package.info td:first-child {
font-style: italic;
padding-right: 2ex;
}
.package.info ul {
list-style-type: none;
display: inline;
margin: 0;
}
.package.info li {
display: inline-block;
margin: 0;
margin-right: 1ex;
}
#info-authors li, #info-maintainers li {
display: block;
}
/* Sidebar and TOC */
.toc:before {
display: block;
content: "Contents";
text-transform: uppercase;
font-size: 1em;
margin: 1.414em 0 0.5em;
font-weight: 500;
color: #777;
line-height: 1.2;
}
.toc {
position: fixed;
top: 0px;
bottom: 0px;
left: 0px;
max-width: 30ex;
min-width: 26ex;
width: 20%;
background: #f6f8fa;
overflow: auto;
color: #1F2D3D;
padding-left: 2ex;
padding-right: 2ex;
}
.toc ul li a {
font-family: "Fira Sans", sans-serif;
font-size: 0.95em;
color: #333;
font-weight: 400;
line-height: 1.6em;
display: block;
}
.toc ul li a:hover {
box-shadow: none;
text-decoration: underline;
}
/* First level titles */
.toc>ul>li>a {
font-weight: 500;
}
.toc li ul {
margin: 0px;
}
.toc ul {
list-style-type: none;
}
.toc ul li {
margin: 0;
}
.toc>ul>li {
margin-bottom: 0.3em;
}
.toc ul li li {
border-left: 1px solid #ccc;
margin-left: 5px;
padding-left: 12px;
}
/* Mobile adjustements. */
@media only screen and (max-width: 95ex) {
.content {
margin: auto;
padding: 2.0em;
}
.toc {
position: static;
width: auto;
min-width: unset;
max-width: unset;
border: none;
padding: 0.2em 1em;
border-radius: 5px;
}
}
/* Print adjustements. */
@media print {
body {
color: black;
background: white;
}
body nav:first-child {
visibility: hidden;
}
}
/* Syntax highlighting (based on github-gist) */
.hljs {
display: block;
background: white;
padding: 0.5em;
color: #333333;
overflow-x: auto;
}
.hljs-comment,
.hljs-meta {
color: #969896;
}
.hljs-string,
.hljs-variable,
.hljs-template-variable,
.hljs-strong,
.hljs-emphasis,
.hljs-quote {
color: #df5000;
}
.hljs-keyword,
.hljs-selector-tag {
color: #a71d5d;
}
.hljs-type,
.hljs-class .hljs-title {
color: #458;
font-weight: 500;
}
.hljs-literal,
.hljs-symbol,
.hljs-bullet,
.hljs-attribute {
color: #0086b3;
}
.hljs-section,
.hljs-name {
color: #63a35c;
}
.hljs-tag {
color: #333333;
}
.hljs-attr,
.hljs-selector-id,
.hljs-selector-class,
.hljs-selector-attr,
.hljs-selector-pseudo {
color: #795da3;
}
.hljs-addition {
color: #55a532;
background-color: #eaffea;
}
.hljs-deletion {
color: #bd2c00;
background-color: #ffecec;
}
.hljs-link {
text-decoration: underline;
}
/*---------------------------------------------------------------------------
Copyright (c) 2016 The odoc contributors
Permission to use, copy, modify, and/or distribute this software for any
purpose with or without fee is hereby granted, provided that the above
copyright notice and this permission notice appear in all copies.
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
---------------------------------------------------------------------------*/

7
fmt/Fmt/Dump/index.html Normal file

File diff suppressed because one or more lines are too long

51
fmt/Fmt/index.html Normal file

File diff suppressed because one or more lines are too long

6
fmt/Fmt_cli/index.html Normal file
View file

@ -0,0 +1,6 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Fmt_cli (fmt.Fmt_cli)</title><meta charset="utf-8"/><link rel="stylesheet" href="../../_odoc-theme/odoc.css"/><meta name="generator" content="odoc 2.4.1"/><meta name="viewport" content="width=device-width,initial-scale=1.0"/><script src="../../highlight.pack.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body class="odoc"><nav class="odoc-nav"><a href="../index.html">Up</a> <a href="../index.html">fmt</a> &#x00BB; Fmt_cli</nav><header class="odoc-preamble"><h1>Module <code><span>Fmt_cli</span></code></h1><p><a href="../../cmdliner/Cmdliner/index.html"><code>Cmdliner</code></a> support for <code>Fmt</code>.</p></header><nav class="odoc-toc"><ul><li><a href="#option-for-setting-the-style-renderer">Option for setting the style renderer</a></li></ul></nav><div class="odoc-content"><h2 id="option-for-setting-the-style-renderer"><a href="#option-for-setting-the-style-renderer" class="anchor"></a>Option for setting the style renderer</h2><div class="odoc-spec"><div class="spec value anchored" id="val-style_renderer"><a href="#val-style_renderer" class="anchor"></a><code><span><span class="keyword">val</span> style_renderer :
<span><span class="optlabel">?env</span>:<a href="../../cmdliner/Cmdliner/Arg/index.html#type-env">Cmdliner.Arg.env</a> <span class="arrow">&#45;&gt;</span></span>
<span><span class="optlabel">?docs</span>:string <span class="arrow">&#45;&gt;</span></span>
<span>unit <span class="arrow">&#45;&gt;</span></span>
<span><span><a href="../Fmt/index.html#type-style_renderer">Fmt.style_renderer</a> option</span> <a href="../../cmdliner/Cmdliner/Term/index.html#type-t">Cmdliner.Term.t</a></span></span></code></div><div class="spec-doc"><p><code>style_renderer ?env ?docs ()</code> is a <a href="../../cmdliner/Cmdliner/index.html"><code>Cmdliner</code></a> option <code>--color</code> that can be directly used with the optional arguments of <a href="../Fmt_tty/index.html#tty_setup" title="tty_setup">TTY setup</a> or to control <a href="../Fmt/index.html#val-set_style_renderer" title="Fmt.set_style_renderer">style rendering</a>. The option is documented under <code>docs</code> (defaults to the default in <a href="../../cmdliner/Cmdliner/Arg/index.html#type-info"><code>Cmdliner.Arg.info</code></a>).</p><p>The option is a tri-state enumerated value that when used with <a href="../Fmt_tty/index.html#tty_setup" title="tty_setup">TTY setup</a> takes over the automatic setup:</p><ul><li><code>--color=never</code>, the value is <code>Some `None</code>, forces no styling.</li><li><code>--color=always</code>, the value is <code>Some `Ansi</code>, forces ANSI styling.</li><li><code>--color=auto</code> or absent, the value is <code>None</code>, automatic setup takes place.</li></ul><p>If <code>env</code> is provided, the option default value (<code>None</code>) can be overridden by the corresponding environment variable.</p></div></div></div></body></html>

10
fmt/Fmt_tty/index.html Normal file
View file

@ -0,0 +1,10 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Fmt_tty (fmt.Fmt_tty)</title><meta charset="utf-8"/><link rel="stylesheet" href="../../_odoc-theme/odoc.css"/><meta name="generator" content="odoc 2.4.1"/><meta name="viewport" content="width=device-width,initial-scale=1.0"/><script src="../../highlight.pack.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body class="odoc"><nav class="odoc-nav"><a href="../index.html">Up</a> <a href="../index.html">fmt</a> &#x00BB; Fmt_tty</nav><header class="odoc-preamble"><h1>Module <code><span>Fmt_tty</span></code></h1><p><code>Fmt</code> TTY setup.</p><p><code>Fmt_tty</code> provides simple automatic setup on channel formatters for:</p><ul><li><a href="../Fmt/index.html#val-set_style_renderer"><code>Fmt.set_style_renderer</code></a>. <code>`Ansi_tty</code> is used if the channel <span class="xref-unresolved" title="Unix.isatty">is a tty</span> and the environment variable <code>TERM</code> is defined and its value is not <code>&quot;dumb&quot;</code>. <code>`None</code> is used otherwise.</li><li><a href="../Fmt/index.html#val-set_utf_8"><code>Fmt.set_utf_8</code></a>. <code>true</code> is used if one of the following environment variables has <code>&quot;UTF-8&quot;</code> as a case insensitive substring: <code>LANG</code>, <code>LC_ALL</code>, <code>LC_CTYPE</code>.</li></ul></header><nav class="odoc-toc"><ul><li><a href="#tty_setup">TTY setup</a></li></ul></nav><div class="odoc-content"><h2 id="tty_setup"><a href="#tty_setup" class="anchor"></a>TTY setup</h2><div class="odoc-spec"><div class="spec value anchored" id="val-setup"><a href="#val-setup" class="anchor"></a><code><span><span class="keyword">val</span> setup :
<span><span class="optlabel">?style_renderer</span>:<a href="../Fmt/index.html#type-style_renderer">Fmt.style_renderer</a> <span class="arrow">&#45;&gt;</span></span>
<span><span class="optlabel">?utf_8</span>:bool <span class="arrow">&#45;&gt;</span></span>
<span><a href="../../ocaml/Stdlib/index.html#type-out_channel">out_channel</a> <span class="arrow">&#45;&gt;</span></span>
<a href="../../ocaml/Stdlib/Format/index.html#type-formatter">Stdlib.Format.formatter</a></span></code></div><div class="spec-doc"><p><code>setup ?style_renderer ?utf_8 outc</code> is a formatter for <code>outc</code> with <a href="../Fmt/index.html#val-set_style_renderer"><code>Fmt.set_style_renderer</code></a> and <a href="../Fmt/index.html#val-set_utf_8"><code>Fmt.set_utf_8</code></a> correctly setup. If <code>style_renderer</code> or <code>utf_8</code> are specified they override the automatic setup.</p><p>If <code>outc</code> is <code>stdout</code>, <a href="../Fmt/index.html#val-stdout"><code>Fmt.stdout</code></a> is returned. If <code>outc</code> is <code>stderr</code>, <a href="../Fmt/index.html#val-stderr"><code>Fmt.stderr</code></a> is returned.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-setup_std_outputs"><a href="#val-setup_std_outputs" class="anchor"></a><code><span><span class="keyword">val</span> setup_std_outputs :
<span><span class="optlabel">?style_renderer</span>:<a href="../Fmt/index.html#type-style_renderer">Fmt.style_renderer</a> <span class="arrow">&#45;&gt;</span></span>
<span><span class="optlabel">?utf_8</span>:bool <span class="arrow">&#45;&gt;</span></span>
<span>unit <span class="arrow">&#45;&gt;</span></span>
unit</span></code></div><div class="spec-doc"><p><code>setup_std_outputs ?style_renderer ?utf_8 ()</code> applies <a href="#val-setup"><code>setup</code></a> on <code>stdout</code> and <code>stderr</code>.</p></div></div></div></body></html>

132
fmt/_doc-dir/CHANGES.md Normal file
View file

@ -0,0 +1,132 @@
v0.9.0 2021-10-22 Zagreb
------------------------
* Add alert messages to deprecation annotations (#47).
* The solution using ephemerons introduced in v0.8.7 for attaching
custom data to formatters has unreliable performance characteristics
in some usage scenarios. Namely use of `Fmt.styled` with
`Fmt.[k]str` heavy code as those rely on `Format.{k,a}sprintf` which
allocate one formatter per call.
Hence we subvert again the `Format` tag system to do dirty
things. However since as of 4.08 tags became an extensible sum type
we can keep our dirty things entirely internal.
Thanks to Thomas Leonard for reporting and David Kaloper Meršinjak
for further investigations (#52).
v0.8.10 2021-10-04 Zagreb
-------------------------
* Require OCaml >= 4.08. This drops the dependency on the
`stdlib-shims` and `seq` packages.
* Add the `[@@ocaml.deprecated]` annotation to deprecated
functions. Thanks to Antonin Décimo for the patch.
v0.8.9 2020-09-23 Zagreb
------------------------
* Fix `Dump.{iter_bindings,hashtbl}` which since 0.8.7 no longer
prints seperators. Thanks to Edwin Török for the patch.
* Open the result of `Fmt.error_msg` to make it easier
to compose with other errors. Thanks to Thomas Leonard
for the patch.
v0.8.8 2019-08-01 Zagreb
------------------------
Fix build on 32-bit platforms.
v0.8.7 2019-07-21 Zagreb
------------------------
* Require OCaml 4.05.
* Add `Fmt.hex` and friends. Support for hex dumping.
Thanks to David Kaloper Meršinjak for the design and implementation..
* Add `Fmt.si_size` to format integer magnitudes using SI prefixes.
* Add `Fmt.uint64_ns_span` to format time spans.
* Add `Fmt.truncated` to truncate your long strings.
* Add `Fmt.flush`, has the effect of `Format.pp_print_flush`.
* Add `Fmt.[Dump.]{field,record}` for records (#9).
* Add `Fmt.concat` to apply a list of formatters to a value.
* Add `Fmt.{semi,sps}`, separators.
* Add `Fmt.{error,error_msg}` to format `result` values.
* Add `Fmt.failwith_notrace`.
* Add `Fmt.( ++ )`, alias for `Fmt.append`.
* Add `Fmt.Dump.string`.
* Add more ANSI tty formatting styles and make them composable.
* Change `Fmt.{const,comma,cut,sp}`, generalize signature.
* Change `Fmt.append`, incompatible signature. Use `Fmt.(pair ~sep:nop)` if
you were using it (backward compatible with earlier versions of `Fmt`).
* Deprecate `Fmt.{strf,kstrf,strf_like}` in favor of `Fmt.{str,kstr,str_like}`.
* Deprecate `Fmt.{always,unit}` in favor of `Fmt.any`.
* Deprecate `Fmt.{prefix,suffix}` (specializes Fmt.( ++ )).
* Deprecate `Fmt.styled_unit`.
* No longer subvert the `Format` tag system to do dirty things.
Thanks to David Kaloper Meršinjak for the work.
v0.8.6 2019-04-01 La Forclaz (VS)
---------------------------------
* Add `Fmt.{seq,Dump.seq}` to format `'a Seq.t` values. Thanks to
Hezekiah M. Carty for the patch.
* Handle `Pervasives`'s deprecation via dependency on `stdlib-shims`.
* `Fmt.Dump.signal` format signals added in 4.03.
* Fix toplevel initialization for omod (#33).
* Require at least OCaml 4.03 (drops dependency on `result` and `uchar`
compatibility packages).
v0.8.5 2017-12-27 La Forclaz (VS)
---------------------------------
* Fix `Fmt.{kstrf,strf_like}` when they are partially applied
and repeatedly called. Thanks to Thomas Gazagnaire for the report.
* Add `Fmt.comma`.
* Relax the `Fmt.(invalid_arg, failwith)` type signature. Thanks to
Hezekiah M. Carty for the patch.
v0.8.4 2017-07-08 Zagreb
------------------------
* Add `Fmt.{invalid_arg,failwith}`. Thanks to Hezekiah M. Carty for the patch.
v0.8.3 2017-04-13 La Forclaz (VS)
---------------------------------
* Fix `Fmt.exn_backtrace`. Thanks to Thomas Leonard for the report.
v0.8.2 2017-03-20 La Forclaz (VS)
---------------------------------
* Fix `META` file.
v0.8.1 2017-03-15 La Forclaz (VS)
---------------------------------
* `Fmt_tty.setup`, treat empty `TERM` env var as dumb.
* Add `Fmt.Dump.uchar` formatter for inspecting `Uchar.t` values.
v0.8.0 2016-05-23 La Forclaz (VS)
---------------------------------
* Build depend on topkg.
* Relicense from BSD3 to ISC.
* Tweak `Fmt.Dump.option` to indent like in sources.
* Add `Fmt.Dump.signal` formatter for `Sys` signal numbers.
* Add `Fmt[.Dump].result`, formatter for `result` values.
* Add `Fmt.{words,paragraphs}` formatters on US-ASCII strings.
* Add `Fmt.exn[_backtrace]`. Thanks to Edwin Török for suggesting.
* Add `Fmt.quote`.
* Rename `Fmt.text_range` to `Fmt.text_loc` and simplify output
when range is a position.
v0.7.1 2015-12-03 Cambridge (UK)
--------------------------------
* Add optional cmdliner support. See the `Fmt_cli` module provided
by the package `fmt.cli`.
v0.7.0 2015-09-17 Cambridge (UK)
--------------------------------
First Release.

13
fmt/_doc-dir/LICENSE.md Normal file
View file

@ -0,0 +1,13 @@
Copyright (c) 2016 The fmt programmers
Permission to use, copy, modify, and/or distribute this software for any
purpose with or without fee is hereby granted, provided that the above
copyright notice and this permission notice appear in all copies.
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.

35
fmt/_doc-dir/README.md Normal file
View file

@ -0,0 +1,35 @@
Fmt — OCaml Format pretty-printer combinators
-------------------------------------------------------------------------------
v0.9.0
Fmt exposes combinators to devise `Format` pretty-printing functions.
Fmt depends only on the OCaml standard library. The optional `Fmt_tty`
library that allows to setup formatters for terminal color output
depends on the Unix library. The optional `Fmt_cli` library that
provides command line support for Fmt depends on [`Cmdliner`][cmdliner].
Fmt is distributed under the ISC license.
[cmdliner]: http://erratique.ch/software/cmdliner
Home page: http://erratique.ch/software/fmt
## Installation
Fmt can be installed with `opam`:
opam install fmt
opam install base-unix cmdliner fmt # Install all optional libraries
If you don't use `opam` consult the [`opam`](opam) file for build
instructions.
## Documentation
The documentation and API reference is automatically generated by
`ocamldoc` from the interfaces. It can be consulted [online][doc]
and there is a generated version in the `doc` directory of the
distribution.
[doc]: http://erratique.ch/software/fmt/doc/

2
fmt/index.html Normal file
View file

@ -0,0 +1,2 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>index (fmt.index)</title><meta charset="utf-8"/><link rel="stylesheet" href="../_odoc-theme/odoc.css"/><meta name="generator" content="odoc 2.4.1"/><meta name="viewport" content="width=device-width,initial-scale=1.0"/><script src="../highlight.pack.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body class="odoc"><nav class="odoc-nav"><a href="../index.html">Up</a> fmt</nav><header class="odoc-preamble"><h1 id="package-fmt"><a href="#package-fmt" class="anchor"></a>Package fmt <nav><a type="text/plain; charset=UTF-8" href="_doc-dir/CHANGES.md">changes</a> <a href="#package_info">more…</a></nav></h1><ul class="modules"><li><a href="Fmt/index.html"><code>Fmt</code></a> <span class="synopsis"><code>Format</code> pretty-printer combinators.</span></li><li><a href="Fmt_cli/index.html"><code>Fmt_cli</code></a> <span class="synopsis"><a href="../cmdliner/Cmdliner/index.html"><code>Cmdliner</code></a> support for <code>Fmt</code>.</span></li><li><a href="Fmt_tty/index.html"><code>Fmt_tty</code></a> <span class="synopsis"><code>Fmt</code> TTY setup.</span></li></ul></header><nav class="odoc-toc"><ul><li><a href="#package_info">Package info</a></li></ul></nav><div class="odoc-content"><h2 id="package_info"><a href="#package_info" class="anchor"></a>Package info</h2><table class="package info"><tr id="info-changes-files"><td><a href="#info-changes-files" aria-hidden="true" class="anchor"></a>changes-files</td><td><ul><li><a type="text/plain; charset=UTF-8" href="_doc-dir/CHANGES.md">CHANGES.md</a></li></ul></td></tr><tr id="info-license-files"><td><a href="#info-license-files" aria-hidden="true" class="anchor"></a>license-files</td><td><ul><li><a type="text/plain; charset=UTF-8" href="_doc-dir/LICENSE.md">LICENSE.md</a></li></ul></td></tr><tr id="info-readme-files"><td><a href="#info-readme-files" aria-hidden="true" class="anchor"></a>readme-files</td><td><ul><li><a type="text/plain; charset=UTF-8" href="_doc-dir/README.md">README.md</a></li></ul></td></tr></table></div></body></html>

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
fonts/KaTeX_Main-Bold.woff2 Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Some files were not shown because too many files have changed in this diff Show more