packages feed

context-free-art-0.3.0.0: context-free-art.cabal

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