Skip to content
This repository has been archived by the owner on Sep 15, 2021. It is now read-only.

Commit

Permalink
Better README, moved some operators.
Browse files Browse the repository at this point in the history
  • Loading branch information
Dan Finch committed Mar 10, 2013
1 parent 9121a91 commit 50fa618
Show file tree
Hide file tree
Showing 5 changed files with 76 additions and 17 deletions.
14 changes: 0 additions & 14 deletions README

This file was deleted.

73 changes: 73 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@

FMarkup is a tool for creating HTML/CSS documents in pure F#.

## Simple Example

```fsharp
open FMarkup
open FMarkup.Css
let accountsPage accounts =
%%[
Doctype.html5
html [
body [
ul [
rule "li" [ // Inline rules are scoped to the parent element
font.weight.bold
]
[ for a in accounts ->
li [
img [
src a.photo
width 100 // Inline styles work, too
height 100
]
a.name
]
]
]
]
]
]
let accountsStyle =
style [
rule "body" [
color "silver"
background.color "black"
]
rule "a" [
text.decoration.none
rule ":hover" [ // Rules may be nested
text.decoration.underline
]
]
]
```

Because your views are simple functions, composing templates/layouts/master pages is as simple as creating functions with arguments where markup holes are filled. To render the markup, create an instance of the `HtmlPrinter` record. It has two fields: `Format`, which specifies whether you want to render HTML or XHTML, and `CssUnit`, which specifies what CSS unit value (such as `px`) you would like `int` and `float` values to be rendered with.

## Notes

Because FMarkup works with `obj list` to avoid noise, sometimes it may be necessary to upcast symbols, so the operators `%` and `%%` are provided to cast to `obj` and `obj list`, respectively.

Virtually all HTML5 and CSS3 symbols are supported. Bindings for some more obscure CSS properties which support multiple values may need to be improved, let me know if you run into any issues.

## Compact Style

A module called `FMarkup.Compact` is provided with succinct shortcuts to many common artifacts. It contains some experimental operators which may be included later into the main module.

## License

Public Domain.

## Dependencies

- Futility: https://github.com/danfinch/futility (submodule)

## Maintainer

- Dan Finch ([email protected])
2 changes: 0 additions & 2 deletions src/FMarkup/Compact.fs
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,6 @@ module Compact =
open Prim
open Elem
open Attr
let (~%%) (l : obj list) = l
let (~%) (o : 'a) = o :> obj
let (~&) (o : 'a option) = o.IsSome // remove?
let (!) (o : 'a option) = o.Value // remove?
let (!!) (o : 'a option) = match o with | None -> null | Some(o) -> o :> obj // remove?
Expand Down
2 changes: 1 addition & 1 deletion src/FMarkup/FMarkup.fsproj
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@
<Compile Include="Model.fs" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\lib\futility\src\Futility\Futility.fsproj">
<ProjectReference Include="..\..\..\futility\src\Futility\Futility.fsproj">
<Project>9982C39B-74B0-4B7A-B658-905777359DAD</Project>
<Name>Futility</Name>
</ProjectReference>
Expand Down
2 changes: 2 additions & 0 deletions src/FMarkup/Html.fs
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@ open Microsoft.FSharp.Reflection
open Futility

module Prim =
let inline (~%%) (l : obj list) = l
let inline (~%) (o : 'a) = o :> obj
let inline elem tag (c : obj list) =
let e = {
Tag = tag
Expand Down

0 comments on commit 50fa618

Please sign in to comment.