From 295dd897297722d07ec2ce5fb82e323fe495c775 Mon Sep 17 00:00:00 2001 From: Lars-Dominik Braun Date: Mon, 24 Aug 2020 17:09:34 +0200 Subject: GHC 8.8, cabal 3, pandoc 2.10 compatibility Move files around to separate Pesto (the library) and Pesto (the executables). Fixes for pandoc API changes. --- src/Codec/Pesto/Serialize.lhs | 70 ------------------------------------------- 1 file changed, 70 deletions(-) delete mode 100644 src/Codec/Pesto/Serialize.lhs (limited to 'src/Codec/Pesto/Serialize.lhs') diff --git a/src/Codec/Pesto/Serialize.lhs b/src/Codec/Pesto/Serialize.lhs deleted file mode 100644 index f07e871..0000000 --- a/src/Codec/Pesto/Serialize.lhs +++ /dev/null @@ -1,70 +0,0 @@ -Serializing ------------ - -.. class:: nodoc - -> module Codec.Pesto.Serialize (serialize) where -> import Data.Char (isSpace, isLetter) -> import Data.Ratio (numerator, denominator) -> -> import {-# SOURCE #-} Codec.Pesto.Parse - -> class Serializeable a where -> serialize :: a -> String - -.. class:: todo - -- Add instance for graph -- use :math:`\mathcal{O}(1)` string builder - -Finally transform linear stream of instructions into a string again: - -> instance Serializeable a => Serializeable [a] where -> serialize ops = unlines $ map serialize ops - -> instance Serializeable Instruction where -> serialize (Annotation s) = quote '(' ')' s -> serialize (Ingredient q) = '+':serialize q -> serialize (Tool q) = '&':serialize q -> serialize (Action s) = quote '[' ']' s -> serialize (Reference q) = '*':serialize q -> serialize (Result q) = '>':serialize q -> serialize (Alternative q) = '|':serialize q -> serialize (Directive s) = '%':serializeQstr s -> serialize (Unknown s) = s - -> instance Serializeable Quantity where -> serialize (Quantity a b "") = serialize a ++ " " ++ serializeQstr b -> serialize (Quantity (Exact (AmountStr "")) "" c) = serializeQstr c -> serialize (Quantity a "" c) = serialize a ++ " _ " ++ serializeQstr c -> serialize (Quantity a b c) = serialize a ++ " " ++ serializeQstr b ++ " " ++ serializeQstr c - -> instance Serializeable Approximately where -> serialize (Range a b) = serialize a ++ "-" ++ serialize b -> serialize (Approx a) = '~':serialize a -> serialize (Exact a) = serialize a - -There are two special cases here, both for aesthetic reasons: - -1) If the denominator is one we can just skip printing it, because - :math:`\frac{2}{1} = 2` and -2) if the numerator is larger than the denominator use mixed fraction notation, - because :math:`\frac{7}{2} = 3+\frac{1}{2}` - -> instance Serializeable Amount where -> serialize (AmountRatio a) | denominator a == 1 = show (numerator a) -> serialize (AmountRatio a) | numerator a > denominator a = -> show full ++ "/" ++ show num ++ "/" ++ show denom -> where -> full = numerator a `div` denom -> num = numerator a - full * denom -> denom = denominator a -> serialize (AmountRatio a) = show (numerator a) ++ "/" ++ show (denominator a) -> serialize (AmountStr s) = serializeQstr s - -> serializeQstr "" = "_" -> serializeQstr s | (not . isLetter . head) s || hasSpaces s = quote '"' '"' s -> serializeQstr s = s -> hasSpaces = any isSpace -> quote start end s = [start] ++ concatMap (\c -> if c == end then ['\\', end] else [c]) s ++ [end] - -- cgit v1.2.3