Rewrite text table generation

This commit is contained in:
2023-03-01 03:41:39 +01:00
parent 8cce4811a4
commit 3a817a8e7a
3 changed files with 82 additions and 19 deletions
+24 -19
View File
@@ -36,8 +36,9 @@ import Text.Blaze.Html5 ((!))
import Text.Blaze.Html.Renderer.Utf8 (renderHtml)
import Text.Printf (PrintfArg, printf)
import qualified Data.Text.Lazy as Text
import qualified Data.Text.Lazy.Encoding as Encoding
import qualified Data.ByteString.Lazy as BL
import qualified Data.Text as Text
import qualified Data.Text.Encoding as Encoding
import qualified Network.Wai.Handler.Warp as Warp
import qualified Text.Blaze.Html5 as H
import qualified Text.Blaze.Html5.Attributes as A
@@ -45,6 +46,7 @@ import qualified Unicode.Char.General.Blocks as UnicodeBlocks
import qualified Unicode.Char.General.Names as UnicodeNames
import qualified UToy.Decode as Decode
import qualified UToy.Table as Table
import qualified UToy.Parsers as Parsers
main :: IO ()
@@ -69,20 +71,24 @@ newtype HexModel = HexModel
}
instance MimeRender PlainText HexModel where
mimeRender _ model = Encoding.encodeUtf8 $ Text.intercalate "\n" $ concat
[ [ Text.pack $ unwords $ map showByteHex bytes
, Text.intercalate " " $
Text.pack (unwords $ map showByteBin bytes)
: case eiC of
Left err -> [Text.pack err]
Right c -> map Text.pack
[ [c]
, printf "U+%04X" c
, intercalate ", " $ maybeToList (UnicodeNames.name c) ++ map (++ "*") (UnicodeNames.nameAliases c)
]
mimeRender _ model = BL.fromStrict $ Encoding.encodeUtf8 $
Table.render " " $ concat
[ [ [ Table.cl $ Text.pack $ unwords $ map showByteHex bytes
]
, map Table.cl (Text.pack (unwords $ map showByteBin bytes)
: case eiC of
Left err ->
[ Text.pack err
]
Right c ->
[ Text.pack $ printf "U+%04X" c
, Text.pack $ intercalate ", " $ maybeToList (UnicodeNames.name c) ++ map (++ "*") (UnicodeNames.nameAliases c)
, Text.pack $ fromMaybe "" $ blockName c
]
)
]
| (bytes, eiC) <- model.codepoints
]
| (bytes, eiC) <- model.codepoints
]
instance MimeRender HTML HexModel where
mimeRender _ model = renderHtml $ H.docTypeHtml $ do
@@ -103,10 +109,6 @@ instance MimeRender HTML HexModel where
H.td $ H.code $ printfHtml "U+%04X" c
H.td $ H.code $ H.toHtml $ intercalate ", " $ maybeToList (UnicodeNames.name c) ++ map (++ "*") (UnicodeNames.nameAliases c)
H.td $ H.toHtml $ fromMaybe "" $ blockName c
where
blockName :: Char -> Maybe String
blockName c = UnicodeBlocks.blockName . UnicodeBlocks.blockDefinition <$> UnicodeBlocks.block c
-- Utilities
@@ -116,6 +118,9 @@ showByteHex = printf " %02X"
showByteBin :: Word8 -> String
showByteBin = printf "%8b"
blockName :: Char -> Maybe String
blockName c = UnicodeBlocks.blockName . UnicodeBlocks.blockDefinition <$> UnicodeBlocks.block c
orThrow :: Either a b -> (a -> ServerError) -> Handler b
orThrow (Left err) f = throwError $ f err
orThrow (Right val) _ = pure val