lhs2TeX-hl 0.1.1.1 → 0.1.2.0
raw patch · 8 files changed
+68/−58 lines, 8 filesdep −Agda
Dependencies removed: Agda
Files
- README +19/−4
- examples/theme1.tex +13/−8
- lhs2TeX-hl.cabal +4/−5
- src/Base/Common.hs +1/−1
- src/Literate/Agda.hs +1/−11
- src/Literate/Haskell.hs +20/−18
- src/Literate/SimpleInfo.hs +4/−6
- src/LiterateHighlighter.hs +6/−5
README view
@@ -27,7 +27,7 @@ USAGE ----- - > lhs2TeX-hl INPUTFILE -o OUTPUTFILE+ > lhs2TeX-hl -o OUTPUTFILE INPUTFILE For more details see: @@ -38,21 +38,36 @@ In your .tex files add %include OUTPUFILE to tell lhs2tex to use the generated formatting directives. You'll need to provide the following commands yourself: + * \lhsCHsyntax * \lhsCHkeyword * \lhsCHprelude * \lhsCHtype- * \lhsCHlitNumber * \lhsCHconstructor * \lhsCHfunction * \lhsCHinfixoperator+ * \lhsCHclass + This only generates formatting directives for keywords for you. If you want to+ change the formatting of characters, strings or literal numbers add the+ following directives:+ + > %subst char a = "\color{char}\text{\tt ''" a "''}"+ > %subst string a = "\color{string}\text{\tt \char34 " a "\char34}"+ > %subst numeral a = "\color{numeral}{ " a " }"+ KNOWN ISSUES ------------ * Infix operators may not work that great, or normal functions that are used- `infix`.- * It doesn't do literal string and char highlighting yet.+ `infix`. Sometimes you might get an `ambiguous infix operator' error. * AGDA isn't supported yet unfortunately. * Errors aren't that informative. :)+ + CHANGES+ -------+ 1.2.0: * Hopefully the ``ambiguous infix operator'' error shouldn't occur + that often anymore.+ * Removed the AGDA dependency for until it actually works.+ * Classes are now detected.
examples/theme1.tex view
@@ -1,17 +1,22 @@-% usepackage color-\definecolor{datatype}{RGB}{42,0,217}-\definecolor{class}{RGB}{197,11,16}+% use package color+\definecolor{syntax}{RGB}{0, 0, 0}+\definecolor{datatype}{RGB}{196, 6, 11}+\definecolor{class}{RGB}{168,37,39} \definecolor{fieldname}{RGB}{0,0,162} \definecolor{prelude}{RGB}{64,80,117} \definecolor{numeral}{RGB}{0,0,205}-\definecolor{infixoperator}{RGB}{42,0,217}-\definecolor{constructor}{RGB}{0,161,0}-\definecolor{keyword}{RGB}{229,120,0}+\definecolor{infixoperator}{RGB}{19, 19, 168}+\definecolor{constructor}{RGB}{196, 6, 11}+\definecolor{keyword}{RGB}{4, 58, 252} \definecolor{special1}{RGB}{159,138,0}+\definecolor{string}{RGB}{3, 106, 7}+\definecolor{char} {RGB}{3, 106, 7} -\newcommand{\lhsCHfunction}[1]{\color{infixoperator}{\mathbf{#1}}}+\newcommand{\lhsCHsyntax}[1]{\color{syntax}{{#1}}}+\newcommand{\lhsCHfunction}[1]{\color{infixoperator}{{#1}}}+\newcommand{\lhsCHinfixoperator}[1]{\color{infixoperator}{{#1}}} \newcommand{\lhsCHprelude}[1]{\color{prelude}{\mathbf{#1}}} \newcommand{\lhsCHkeyword}[1]{\color{keyword}{\textbf{#1}}}-\newcommand{\lhsCHconstructor}[1]{\color{constructor}{{#1}}}+\newcommand{\lhsCHconstructor}[1]{\color{constructor}{\textbf{#1}}} \newcommand{\lhsCHlitNumber}[1]{\color{numeral}{{#1}}} \newcommand{\lhsCHtype}[1]{\color{datatype}{{#1}}}
lhs2TeX-hl.cabal view
@@ -1,15 +1,15 @@ Name: lhs2TeX-hl-Version: 0.1.1.1+Version: 0.1.2.0 Cabal-Version: >= 1.6 License: MIT Author: Alessandro Vermeulen <me@alessandrovermeulen.me> Maintainer: Alessandro Vermeulen <me@alessandrovermeulen.me> Synopsis: Literate highlighter preprocessor for lhs2tex Description: A helper executable for highlighting code with lhs2tex. It- parses any haskell file and outputs a format file to be used- with lhs2tex. Currently no recursion is supported.+ parses any Haskell file and outputs a format file to be used+ with lhs2TeX. Currently no recursion is supported. Build-Type: Simple-Stability: Expirimental+Stability: Experimental category: Development, Language Data-files: README examples/theme1.tex License-file: LICENSE@@ -23,7 +23,6 @@ , MissingH >= 1.1.0.3 , syb >= 0.1.0.1 , cmdargs >= 0.1- , Agda >= 2.2.6 hs-source-dirs: src Other-Modules: Language.LaTeX, Literate.Agda, Literate.Haskell, Literate.SimpleInfo, Base.CLI, Base.Common
src/Base/Common.hs view
@@ -1,4 +1,4 @@ module Base.Common where -programVersion = "0.1.1.1"+programVersion = "0.1.2.0" programName = "lhs2TeX-hl"
src/Literate/Agda.hs view
@@ -27,13 +27,11 @@ mod <- parseFile' moduleParser abpath return simpleinfo{ functions = [] , operators = listOperators mod- , literalNumbers = listLiteralNumbers mod } mapping :: [(String, SimpleInfo -> [(String,String)])] mapping = [ - ("litNumber", mnumbers)- , ("infixoperator", moperators)+ ("infixoperator", moperators) ] listOperators :: Module -> [String]@@ -42,13 +40,5 @@ listOperator (OpApp _ n _) = [show n] listOperator (_) = [] -listLiteralNumbers :: Module -> [String]-listLiteralNumbers = nub . everything (++) ([] `mkQ` listLiteralNumber)- where listLiteralNumber :: Literal -> [String]- listLiteralNumber (LitInt _ v) = [show v]- listLiteralNumber (LitFloat _ v) = [show v]- listLiteralNumber (_) = []- -mnumbers SimpleInfo{literalNumbers} = map dp literalNumbers moperators SimpleInfo{operators} = map (\ a -> (a, "\\ "++ makeLatexSafe a++"\\ ")) operators
src/Literate/Haskell.hs view
@@ -1,6 +1,6 @@ {-# LANGUAGE DeriveDataTypeable #-} {-# LANGUAGE NamedFieldPuns #-}-module Literate.Haskell (runHaskell, mapping) where+module Literate.Haskell (runHaskell, mapping, listClasses, fromParse) where import Data.List (nub) import Data.Data@@ -15,7 +15,8 @@ runHaskell :: FilePath -> IO SimpleInfo-runHaskell fp = do mod <- parseFile fp+runHaskell fp = do mod <- parseFileWithMode (defaultParseMode { fixities = baseFixities } ) + fp case mod of (ParseOk m) -> return $ getSimpleInfo m (ParseFailed loc err) -> error $ @@ -34,19 +35,6 @@ getData (TyCon n) = [n] getData _ = [] --listLitNumbers :: Module -> [String]-listLitNumbers = nub . everything (++) ([] `mkQ` listLitNumber)- where listLitNumber :: Literal -> [String]- listLitNumber (Char _) = []- listLitNumber (String _) = []- listLitNumber (Int v) = [show v]- listLitNumber (Frac v) = [show v]- listLitNumber (PrimInt v) = [show v]- listLitNumber (PrimFloat v) = [show v]- listLitNumber (PrimDouble v) = [show v]- listLitNumber (_) = []- listConstructors :: Module -> [String] listConstructors = nub . everything (++) ([] `mkQ` listConstructor) where listConstructor :: ConDecl -> [String]@@ -68,12 +56,25 @@ operatorUse (InfixApp _ qop _) = [prettyPrint qop] operatorUse _ = [] +listClasses :: Module -> [String]+listClasses = nub . everything (++) ([] `mkQ` listClassDeriving+ `extQ` listClassDecl+ `extQ` listClassContext)+ where listClassDeriving :: Deriving -> [String] + listClassDeriving (name , _) = [prettyPrint name]+ listClassDecl :: Decl -> [String]+ listClassDecl (ClassDecl _ _ name _ _ _) = [prettyPrint name]+ listClassDecl _ = []+ listClassContext :: Asst -> [String]+ listClassContext (ClassA name _) = [prettyPrint name]+ listClassContext _ = [] + getSimpleInfo m = simpleinfo{ types = listTypes m- , literalNumbers = listLitNumbers m , constructors = listConstructors m , functions = listFunctions m , operators = listOperators m+ , classes = listClasses m } @@ -84,7 +85,6 @@ , ("prelude", prelude) , ("applicative", applicative ) , ("type", mtypes) - , ("litNumber", mnumbers) , ("constructor", mconstructors) , ("function", mfunctions) , ("infixoperator", moperators)@@ -94,7 +94,6 @@ mtypes SimpleInfo{types} = map dp types moperators SimpleInfo{operators} = map (\ a -> (a, "\\ "++ makeLatexSafe a++"\\ ")) operators-mnumbers SimpleInfo{literalNumbers} = map dp literalNumbers mconstructors SimpleInfo{constructors} = map (dp) constructors mfunctions SimpleInfo{functions } = map (dp) functions @@ -154,6 +153,9 @@ (<++>) :: a -> b -> a (<++>) a b = a++tid :: Typeable a => a -> a+tid = id fromParse (ParseOk m) = m
src/Literate/SimpleInfo.hs view
@@ -7,9 +7,9 @@ constructors :: [String], functions :: [String], operators :: [String],- literalNumbers :: [String],- literalChars :: [Char],- literalStrings :: [String]+ classes :: [String]++ } deriving Show simpleinfo = SimpleInfo{ fileName = ""@@ -18,7 +18,5 @@ , constructors = [] , functions = [] , operators = []- , literalNumbers = []- , literalChars = []- , literalStrings = []+ , classes = [] }
src/LiterateHighlighter.hs view
@@ -13,7 +13,7 @@ import Base.CLI import System.Console.CmdArgs -import Literate.Agda+-- import Literate.Agda import Literate.Haskell import Literate.SimpleInfo @@ -26,16 +26,17 @@ hSetEncoding stdout utf8 hSetEncoding stderr utf8 - hOutput <- openFile (output args) WriteMode+ hOutput <- openFile (output args) WriteMode hSetEncoding hOutput utf8 let writer = writeOutput hOutput if (agda_mode args) then- mapM_ (\file -> runAgda file- >>= (flip writer) Literate.Agda.mapping)- (input args)+ error "Agda mode is currently not supported."+ -- mapM_ (\file -> runAgda file+ -- >>= (flip writer) Literate.Agda.mapping)+ -- (input args) else mapM_ (\file -> runHaskell file >>= (flip writer) Literate.Haskell.mapping)