HaRe-0.6: refactorer/ParseAnswers.hs
-----------------------------------------------------------------------------
-- |
-- Module : ParseAnswers
-- Copyright : (c) Christopher Brown 2007
--
-- Maintainer : cmb21@kent.ac.uk
-- Stability : provisional
-- Portability : portable
-- This module parses a file containing a list of questions
-- asking the user to replace occurences of duplicated code with
-- a function call.
-- After reading the question the module removes the question from the
-- file until finally an empty file is passed in.
--
-- If an empty file is passed in the module does exactly nothing.
--
-----------------------------------------------------------------------------
module ParseAnswers where
import System.IO.Unsafe
import PosSyntax hiding (ModuleName, HsName, SN)
import SourceNames
import ScopeModule
import UniqueNames hiding (srcLoc)
import HsName
import HsLexerPass1
import PNT
import TiPNT
import SimpleGraphs(reverseGraph,reachable)
import HsTokens
import RefacTypeSyn
import RefacLocUtils
import GHC
import Data.Char
import GHC.Unicode
import AbstractIO
import Maybe
import List
import RefacUtils
import LocalSettings
import PrettyPrint
parseAnswers args
= do
if (length args) > 0
then do
let answers = args!!0
-- AbstractIO.putStrLn answers
AbstractIO.appendFile answerFilePath (answers ++ "\n")
{- answer <- AbstractIO.readFile reportFilePath
let (answer2, remainder) = parseAnswer (force answer)
if remainder == "" && answer2 == ""
then do
AbstractIO.putStrLn $ "completed."
else do
AbstractIO.putStrLn answer2
AbstractIO.writeFile reportFilePath remainder -}
else do
answer <- AbstractIO.readFile classAnswerPath
let (answer2, remainder) = parseAnswer (force (read answer::[(HsExpP, String, String)]))
if remainder == [] && answer2 == ""
then do
AbstractIO.putStrLn $ "completed."
else do
AbstractIO.putStrLn answer2
AbstractIO.writeFile classAnswerPath $ show remainder
parseAnswer :: [ (HsExpP, String, String) ] -> (String, [ (HsExpP, String, String) ])
parseAnswer [] = ("", [])
parseAnswer ((x,y,z):xs)
= ( z , xs)
force :: Eq a => a -> a
force x = if x==x then x else x
{-
parseAnswer :: String -> (String, String)
parseAnswer [] = ([], [])
parseAnswer ('<':'%':'>':xs)
= (parseEnd xs, parseAfter xs)
parseAnswer ('\n' : xs)
= parseAnswer xs
parseAnswer (x:xs)
= ((x: parseEnd xs), parseAfter xs)
parseEnd :: String -> String
parseEnd [] = []
parseEnd ('<':'&':'>': xs)
= []
parseEnd (x:xs)
= x : parseEnd xs
parseAfter :: String -> String
parseAfter [] = []
parseAfter ('<':'&':'>': xs)
= xs
parseAfter (x:xs)
= parseAfter xs -}