Compare commits
No commits in common. "27a169b30c6633b50f62d9e38677a4696da10c8c" and "86602d1834c16a871b24be5592146252665ceb2a" have entirely different histories.
27a169b30c
...
86602d1834
3 changed files with 0 additions and 137 deletions
|
|
@ -1,16 +0,0 @@
|
||||||
<Project Sdk="Microsoft.NET.Sdk">
|
|
||||||
|
|
||||||
<PropertyGroup>
|
|
||||||
<OutputType>Exe</OutputType>
|
|
||||||
<TargetFramework>net10.0</TargetFramework>
|
|
||||||
</PropertyGroup>
|
|
||||||
|
|
||||||
<ItemGroup>
|
|
||||||
<Compile Include="Program.fs" />
|
|
||||||
</ItemGroup>
|
|
||||||
|
|
||||||
<ItemGroup>
|
|
||||||
<ProjectReference Include="..\FibLib\FibLib.fsproj" />
|
|
||||||
</ItemGroup>
|
|
||||||
|
|
||||||
</Project>
|
|
||||||
|
|
@ -1,82 +0,0 @@
|
||||||
open System.Net
|
|
||||||
open System.IO
|
|
||||||
open Fibble.FibLib
|
|
||||||
open Fibble.FibLib.Ast // Ger oss tillgång till Element, Text, RawHtml etc.
|
|
||||||
open Fibble.FibLib.Pandoc
|
|
||||||
open Fibble.FibLib.Utils
|
|
||||||
|
|
||||||
// ==========================================
|
|
||||||
// 1. Prelude (Dina egna taggar)
|
|
||||||
// ==========================================
|
|
||||||
|
|
||||||
|
|
||||||
let myPrelude : Map<string, TagRenderer> =
|
|
||||||
Map [
|
|
||||||
"quotient", fun _ args _ ->
|
|
||||||
match args with
|
|
||||||
| [_, one; _, two] ->
|
|
||||||
Text (sprintf "%d" (int one / int two))
|
|
||||||
| _ ->
|
|
||||||
Text "[Fel: quotient kräver två argument]"
|
|
||||||
"bold", fun _ args children ->
|
|
||||||
Element("b", args, children)
|
|
||||||
"image", positional (fun _ args _ -> Element("img", [("src", args[0])], []))
|
|
||||||
"value", positional (fun meta args _ ->
|
|
||||||
match Map.tryFind args.Head meta with
|
|
||||||
| Some(v) -> Text v
|
|
||||||
| None -> Text $"value {args.Head} not found in metadata")
|
|
||||||
"link", positional (fun _ args children ->
|
|
||||||
let url = if args.Length > 0 then args.[0].Trim '"' else "#"
|
|
||||||
Element("a", [("href", args.Head)], children))
|
|
||||||
|
|
||||||
// @br har varken argument eller barn, så vi returnerar bara rå HTML direkt
|
|
||||||
"br", nameToElement "br"
|
|
||||||
"table", fun _ _ children -> Text "hej"
|
|
||||||
"md", fun meta args children -> RawHtml (mdToHtml (stringifyNodes children))
|
|
||||||
]
|
|
||||||
|
|
||||||
// ==========================================
|
|
||||||
// 2. Mall och Evaluator
|
|
||||||
// ==========================================
|
|
||||||
//
|
|
||||||
module File =
|
|
||||||
let readFile path =
|
|
||||||
match Path.Exists(path) with
|
|
||||||
| true -> File.ReadAllText(path)
|
|
||||||
| _ -> failwith $"{path} does not exist"
|
|
||||||
|
|
||||||
let pageTemplate = File.readFile "_page-template"
|
|
||||||
|
|
||||||
let sourceCode = File.readFile "document.fib"
|
|
||||||
// ==========================================
|
|
||||||
// 3. Huvudpipeline
|
|
||||||
// ==========================================
|
|
||||||
let processDocument (source: string) =
|
|
||||||
let evaluator = Evaluators.FsiEvaluator()
|
|
||||||
|
|
||||||
// Steg 1: Parsa koden
|
|
||||||
let metadata, rawBlocks = Parser.parse source
|
|
||||||
|
|
||||||
|
|
||||||
// Steg 2: Transformera och exekvera trädet
|
|
||||||
let evaluatedBlocks =
|
|
||||||
rawBlocks |> List.map (function
|
|
||||||
| Paragraph children ->
|
|
||||||
Paragraph (children
|
|
||||||
|> List.map (Execution.transform metadata myPrelude evaluator))
|
|
||||||
| Section(l, a, children) ->
|
|
||||||
Section(l, a, children
|
|
||||||
|> List.map (Execution.transform metadata myPrelude evaluator))
|
|
||||||
)
|
|
||||||
|
|
||||||
// Steg 3: Be printern skriva ut trädet till HTML
|
|
||||||
let bodyHtml = HtmlPrinter.render (metadata, evaluatedBlocks)
|
|
||||||
|
|
||||||
// Steg 4: Fyll i din HTML-mall
|
|
||||||
let mutable finalHtml = pageTemplate.Replace("{{body}}", bodyHtml)
|
|
||||||
|
|
||||||
finalHtml
|
|
||||||
|
|
||||||
// Kör programmet
|
|
||||||
let output = processDocument sourceCode
|
|
||||||
printfn "%s" output
|
|
||||||
|
|
@ -1,39 +0,0 @@
|
||||||
---
|
|
||||||
author: bajs
|
|
||||||
date: yesterday
|
|
||||||
title: FSI Test
|
|
||||||
---
|
|
||||||
|
|
||||||
@section{Definitioner}
|
|
||||||
Vi definierar en funktion och en variabel.
|
|
||||||
@"""
|
|
||||||
let globalCounter = ref 0
|
|
||||||
|
|
||||||
let increment () =
|
|
||||||
globalCounter.Value <- globalCounter.Value + 1
|
|
||||||
sprintf "Räknaren är nu %d" globalCounter.Value
|
|
||||||
"""
|
|
||||||
@(1)
|
|
||||||
|
|
||||||
@link[www.google.com]{hejsan hoppsan fallerallera}
|
|
||||||
|
|
||||||
Detta är en paragraf som har lite text i sig och lite @md{inbäddad *markdown* som kanske} funkar. Det är bra så.
|
|
||||||
|
|
||||||
@md{
|
|
||||||
en tabell
|
|
||||||
|
|
||||||
hej hopp
|
|
||||||
--- ----
|
|
||||||
abc defg
|
|
||||||
bde dddd
|
|
||||||
ueo eoau
|
|
||||||
ueo aoeu
|
|
||||||
}
|
|
||||||
|
|
||||||
elleR?
|
|
||||||
|
|
||||||
@section{Användning}
|
|
||||||
Första anropet: @(increment())
|
|
||||||
Andra anropet: @(increment())
|
|
||||||
|
|
||||||
Test av utskrift: @value[date]
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue