cabal-version: 2.4
-- Initial package description 'context-free-art.cabal' generated by 'cabal
-- init'. For further documentation, see
-- http://haskell.org/cabal/users-guide/
name: context-free-art
version: 0.3.0.0
synopsis: Generate art from context-free grammars
description:
.
Create art via context free grammar production rules.
.
== Context free grammar primer
.
Context free grammars consist of a set of terminal symbols, a set of
non-terminal symbols, and production rules that map non-terminals to
other symbols.
.
With a context-free grammar, we can generate strings of terminals that
conform to the specified language.
.
Our language will describe graphics.
.
== Example
.
> import Art.ContextFree.Probabilistic
> import Data.List.NonEmpty
>
> -- let's define a Production rule
> a = Circle 1
>
> -- this will produce an IO (Maybe Svg) from the blaze-svg package
> -- to turn it into a string we can use one of the `blaze-svg` renderers
> graphic1 = render $ Circle 1
>
> -- let's create a non-terminal, 'a', which renders a terminal, 'Circle 1'
> -- and has an 85% chance of rendering itself, placed to its right
> a = NonTerminal $ (100, Circle 1) :| [(85, b)]
> b = Mod [Move (2, 0)] a
.
> import Art.ContextFree.Definite
> import Data.List.NonEmpty
>
> move = Mod [Move (0, -1.8), Scale 0.8]
>
> armN :: Int -> Symbol
> armN 0 = move $ Circle 1
> armN n = move $ NonTerminal $
> Circle 1 :| [Mod [Rotate 10] $ armN (n - 1)]
>
> arm :: Symbol
> arm = armN 20
>
> spiral = NonTerminal $
> Circle 1 :| [arm, Mod [Rotate 120] arm, Mod [Rotate 240] arm]
.
The latter produces this graphic:
.
<<https://owen.cafe/res/context-free/spiral.svg>>
homepage: https://github.com/414owen/context-free-art
-- bug-reports:
license: BSD-3-Clause
license-file: LICENSE
author: Owen Shepherd
maintainer: 414owen@gmail.com
-- copyright:
category: Graphics
extra-source-files: CHANGELOG.md
test-suite tests
type: exitcode-stdio-1.0
main-is: Tests.hs
other-modules: Art.ContextFree.Geometry
, Art.ContextFree.Definite.Grammar
, Art.ContextFree.Probabilistic.Grammar
, Art.ContextFree.Definite.Render
, Art.ContextFree.Modifier
, Art.ContextFree.Probabilistic.Render
, Art.ContextFree.Util
build-depends: base >= 4.12 && < 5
, blaze-svg >= 0.3.6
, random >= 1.1
, blaze-markup
, bifunctors >= 5.5
, text-show >= 3.8
, text >= 1.2
, HUnit >= 1.6
, safe
ghc-options: -Wall -fwarn-incomplete-patterns
default-language: Haskell2010
library
exposed-modules: Art.ContextFree.Definite
, Art.ContextFree.Probabilistic
other-modules: Art.ContextFree.Geometry
, Art.ContextFree.Definite.Grammar
, Art.ContextFree.Probabilistic.Grammar
, Art.ContextFree.Definite.Render
, Art.ContextFree.Modifier
, Art.ContextFree.Probabilistic.Render
, Art.ContextFree.Util
build-depends: base >= 4.12 && < 5
, blaze-svg >= 0.3.6
, random >= 1.1
, blaze-markup
, bifunctors >= 5.5
, text-show >= 3.8
, text >= 1.2
, safe
default-language: Haskell2010