content: -- Copyright (c) 2006 Jason Dagit - http://www.codersbase.com/
  -- GPL version 2 or later (see http://www.gnu.org/copyleft/gpl.html)
  
  -- | A plugin for the Haskell interpreter for the brainf*ck language
  -- http://www.muppetlabs.com/~breadbox/bf/
  module Lambdabot.Plugin.Novelty.BF (bfPlugin) where
  
  import Lambdabot.Config.Novelty
  import Lambdabot.Plugin
  import Lambdabot.Util.Process
  
  import Data.Char
  import Text.Regex.TDFA
  
  bfPlugin :: Module ()
  bfPlugin = newModule
      { moduleCmds = return
          [ (command "bf")
              { help = say "bf <expr>. Evaluate a brainf*ck expression"
              , process = \msg -> do
                  bf <- getConfig bfBinary
                  ios80 (run bf msg scrub)
              }
          ]
      }
  
  -- Clean up output
  scrub :: String -> String
  scrub = unlines . take 6 . map (' ':) . filter (not.null) . map cleanit . lines
  
  cleanit :: String -> String
  cleanit s | s =~ terminated   = "Terminated\n"
            | otherwise         = filter printable s
      where terminated = "waitForProc"
            -- the printable ascii chars are in the range [32 .. 126]
            -- according to wikipedia:
            -- http://en.wikipedia.org/wiki/ASCII#ASCII_printable_characters
            printable x = 31 < ord x && ord x < 127
  
  