-- |
-- Module      : Graphics.BarChart
-- Copyright   : Sebastian Fischer
-- License     : BSD3
-- Maintainer  : Sebastian Fischer <mailto:sebf@informatik.uni-kiel.de>
-- Stability   : experimental
-- 
-- This library provides functions and data type for generating bar
-- charts, for example, from CSV files. If the functionality provided
-- by the command-line program is insufficient for your needs, you can
-- use the API provided by this library to draw custom bar charts.
-- 
-- The library provides high-level functions to generate bar-chart
-- values from different types but also exports the underlying
-- datatype and all functions used for rendering such that you have
-- access to all internal details.
-- 
module Graphics.BarChart (

  -- * Reading from CSV files

  -- | There are three different modes for parsing simple CSV files:
  --   treating different values in one row as blocks of one bar,
  --   treating them as deviations from a mean value, or both. 

  -- ** Writing images

  -- | The following three functions implement these modes parsing the
  --   input from a CSV file and producing output in an image file.

  writeMultiBarChart, writeIntervalChart, writeMultiBarIntervalChart,

  Config(..), Label,

  -- ** Creating bar charts

  -- | The previous functions use the following helper functions to
  --   create a 'BarChart' from a CSV file.

  multiBarChart, intervalChart, multiBarIntervalChart,

  Measurable(..),

  -- ** Bar chart representations

  -- | The three different parsing modes are reflected by three data
  --   types that can be parsed from a CSV file.

  MultiBars(..), parseMultiBars, drawMultiBars,
  Intervals(..), parseIntervals, drawIntervals,
  MultiBarIntervals(..), parseMultiBarIntervals, drawMultiBarIntervals,

  -- | When you have multiple CSV files representing an interval
  --   chart, you can merge them to a single multi-bar interval
  --   chart. Such charts can be flipped such that bars and blocks
  --   change their roles.

  mergeIntervals, flipMultiBarIntervals,

  -- | Bar charts are represented as values of type 'BarChart' @a@.

  BarChart(..), Bar(..), Block(..),

  -- * Rendering

  -- | Values of type 'BarChart' @a@ can be rendered to PNG, SVG, PDF,
  --   and PS files.

  render, renderWith, conf,

  -- ** Creating diagrams

  -- | Bar charts are rendered by conversion into 'Diagram's.

  diagram,

  -- * Benchmarking visualisation

  -- | There are special functions for parsing data generated by the
  --   benchmarking tools criterion and progression.

  -- ** Criterion

  writeCriterionChart, writeComparisonChart,
  criterionChart, comparisonChart,
  RunTime(..),

  -- ** Progression

  writeProgressionChart, progressionChart,
  Ratio(..)

  ) where

import Graphics.BarChart.Types
import Graphics.BarChart.Rendering
import Graphics.BarChart.Parser
import Graphics.BarChart.Parser.Criterion
import Graphics.BarChart.Parser.Progression