/**
* Copyright (c) 2017-present, Facebook, Inc.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
const React = require("react");
const CompLibrary = require("../../core/CompLibrary.js");
const hljs = require("highlight.js");
const MarkdownBlock = CompLibrary.MarkdownBlock; /* Used to read markdown */
const Container = CompLibrary.Container;
const GridBlock = CompLibrary.GridBlock;
function pascaligo(hljs) {
return {
// case_insensitive: true,
beginKeywords: '',
keywords: {
keyword: 'and begin block case const contains down else end fail for ' +
'from function if in is list map mod nil not of or patch ' +
'procedure record remove set skip step then to type var while with',
literal: 'true false unit int string some none bool nat list'
},
lexemes: '[a-zA-Z][a-zA-Z0-9_]*',
contains: [
hljs.C_LINE_COMMENT_MODE,
{
className: 'type',
begin: /[A-Z][a-z]+/
},
{
begin: /[*+-:;\(\)\{\}|\>\<]/,
// className: 'ignore'
}
]
}
}
hljs.registerLanguage('pascaligo', pascaligo);
const pre = "```";
const pascaligoExample = `${pre}pascaligo
// variant defining pseudo multi-entrypoint actions
type action is
| Increment of int
| Decrement of int
function add (const a : int ; const b : int) : int is
block { skip } with a + b
function subtract (const a : int ; const b : int) : int is
block { skip } with a - b
// real entrypoint that re-routes the flow based
// on the action provided
function main (const p : action ; const s : int) :
(list(operation) * int) is
block { skip } with ((nil : list(operation)),
case p of
| Increment(n) -> add(s, n)
| Decrement(n) -> subtract(s, n)
end)
${pre}`;
const cameligoExample = `${pre}ocaml
type storage = int
(* variant defining pseudo multi-entrypoint actions *)
type action =
| Increment of int
| Decrement of int
let add (a: int) (b: int): int = a + b
let subtract (a: int) (b: int): int = a - b
(* real entrypoint that re-routes the flow based on
the action provided *)
let%entry main(p : action) storage =
let storage =
match p with
| Increment n -> add storage n
| Decrement n -> subtract storage n
in (([] : operation list), storage)
${pre}`;
const PascalLIGOTab = () => (
);
const TryOut = () => (
{[
{
content:
"To make your landing page more attractive, use illustrations! Check out " +
"[**unDraw**](https://undraw.co/) which provides you with customizable illustrations which are free to use. " +
"The illustrations you see on this page are from unDraw.",
image: `${baseUrl}img/undraw_code_review.svg`,
imageAlign: "left",
title: "Wonderful SVG Illustrations"
}
]}
);
const Description = () => (
{[
{
content:
"This is another description of how this project is useful",
image: `${baseUrl}img/undraw_note_list.svg`,
imageAlign: "right",
title: "Description"
}
]}
);
const LearnHow = () => (
{[
{
content:
"Each new Docusaurus project has **randomly-generated** theme colors.",
image: `${baseUrl}img/undraw_youtube_tutorial.svg`,
imageAlign: "right",
title: "Randomly Generated Theme Colors"
}
]}
);
const FeatureCard = props => (
{props.title}
{props.content}
);
const Features = () => (
Features
{[
{
content:
"Write types, then code, and benefit from the safety coming from type systems.",
image: `${baseUrl}img/strong-type-system.svg`,
title: "Strong Type System"
},
{
content:
"Write in PascaLIGO (pascal-like syntax) or CameLIGO (caml-like syntax). If you know OCaml, you can also add your own syntax.",
image: `${baseUrl}img/syntax-agnostic.svg`,
title: "Syntax Agnostic"
},
{
content: "With Granary, you can use LIGO as a lib from NodeJS.",
image: `${baseUrl}img/easy-integration.svg`,
title: "Easy Integration"
}
].map(FeatureCard)}
);
const Roadmap = () => (
{[
{
content:
"
June 2019
" +
"
" +
"
First public release
" +
"
PascaLIGO and CameLIGO syntaxes
" +
"
Docs and Tutorials
" +
"
Integration testing in ReasonML/JS with Granary
" +
"
" +
"
July 2019
" +
"
" +
"
Try LIGO online editor
" +
"
Unit testing toolkit
" +
"
ReasonLIGO syntax support
" +
"
Repository with best practices & patterns for LIGO
" +
"
" +
"
August 2019
" +
"" +
"Long term plans will be announced soon" +
"",
image: ``,
imageAlign: "right",
title: "Roadmap"
}
]}