Compare commits
No commits in common. "61355405d5d6e3354029a71c2c4feddb8a8fbb46" and "b0451300a553a2a481305524b68a4c90e1a56f87" have entirely different histories.
61355405d5
...
b0451300a5
51
app/Main.hs
51
app/Main.hs
@ -66,14 +66,13 @@ type API =
|
||||
:<|> "utf8" :> Capture "bytes" Text :> Get '[PlainText, HTML] Utf8Model
|
||||
:<|> "codepoints" :> Capture "codepoints" Text :> Get '[PlainText, HTML] CodepointsModel
|
||||
:<|> "text" :> Capture "text" Text :> Get '[PlainText, HTML] TextModel
|
||||
:<|> "search" :> Capture "search" Text :> Get '[PlainText, HTML] SearchModel
|
||||
|
||||
server :: Server API
|
||||
server =
|
||||
rootR :<|> utf8R :<|> codepointsR :<|> textR :<|> searchR
|
||||
rootR :<|> utf8R :<|> codepointsR :<|> textR
|
||||
where
|
||||
rootR host' = do
|
||||
pure $ RootModel $ fromMaybe "" host'
|
||||
rootR host = do
|
||||
pure $ RootModel $ fromMaybe "" host
|
||||
|
||||
utf8R bytesP = do
|
||||
bytes <- Parsers.parseHexBytes bytesP `orThrow` const err400
|
||||
@ -86,9 +85,6 @@ server =
|
||||
textR textP = do
|
||||
pure $ TextModel textP
|
||||
|
||||
searchR searchP = do
|
||||
pure $ mkSearchModel searchP
|
||||
|
||||
-- /
|
||||
|
||||
newtype RootModel = RootModel
|
||||
@ -228,53 +224,28 @@ newtype TextModel = TextModel
|
||||
}
|
||||
|
||||
instance MimeRender HTML TextModel where
|
||||
mimeRender _ model = charTableHtml $ Text.unpack model.text
|
||||
instance MimeRender PlainText TextModel where
|
||||
mimeRender _ model = charTableText $ Text.unpack model.text
|
||||
|
||||
-- /search/<search>
|
||||
|
||||
newtype SearchModel = SearchModel
|
||||
{ results :: [Char]
|
||||
}
|
||||
|
||||
mkSearchModel :: Text -> SearchModel
|
||||
mkSearchModel search = SearchModel $ searchAllChars search
|
||||
|
||||
searchAllChars :: Text -> [Char]
|
||||
searchAllChars search = [c | c <- [minBound..maxBound], any (\name -> Text.toLower search `Text.isInfixOf` Text.toLower (Text.pack name)) (allNames c)]
|
||||
|
||||
instance MimeRender HTML SearchModel where
|
||||
mimeRender _ model = charTableHtml model.results
|
||||
|
||||
instance MimeRender PlainText SearchModel where
|
||||
mimeRender _ model = charTableText model.results
|
||||
|
||||
-- Utilities
|
||||
|
||||
charTableHtml :: [Char] -> BL.ByteString
|
||||
charTableHtml chars =
|
||||
renderHtml $ documentWithBody $ do
|
||||
H.table $ for_ chars $ \c -> do
|
||||
mimeRender _ model = renderHtml $ documentWithBody $ do
|
||||
H.table $ for_ (Text.unpack model.text) $ \c -> do
|
||||
H.tr $ do
|
||||
H.td $ H.input ! A.class_ "charbox" ! A.value (H.toValue [c])
|
||||
H.td $ H.code $ printfHtml "U+%04X" c
|
||||
H.td $ H.code $ H.toHtml $ intercalate ", " $ allNames c
|
||||
H.td $ H.code $ H.toHtml $ fromMaybe "" $ blockName c
|
||||
|
||||
|
||||
charTableText :: [Char] -> BL.ByteString
|
||||
charTableText chars =
|
||||
renderText $ Table.render " "
|
||||
instance MimeRender PlainText TextModel where
|
||||
mimeRender _ model = renderText $ Table.render " "
|
||||
[ map Table.cl
|
||||
[ Text.pack [c]
|
||||
, Text.pack $ printf "U+%04X" c
|
||||
, Text.pack $ intercalate ", " $ allNames c
|
||||
, Text.pack $ fromMaybe "" $ blockName c
|
||||
]
|
||||
| c <- chars
|
||||
| c <- Text.unpack model.text
|
||||
]
|
||||
|
||||
|
||||
-- Utilities
|
||||
|
||||
renderText :: Text -> BL.ByteString
|
||||
renderText = BL.fromStrict . Encoding.encodeUtf8
|
||||
|
||||
|
6
flake.lock
generated
6
flake.lock
generated
@ -2,11 +2,11 @@
|
||||
"nodes": {
|
||||
"nixpkgs": {
|
||||
"locked": {
|
||||
"lastModified": 1703693486,
|
||||
"narHash": "sha256-tuzNTOs+1zR2BEVKKrRRGdpR/n095AXIcT8Me1px2bI=",
|
||||
"lastModified": 1703588687,
|
||||
"narHash": "sha256-yj/AFxJjW/aE0lmHz1wlTk3jScZqVjQQEeBOnhyroRc=",
|
||||
"owner": "nixos",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "671c2d3e1506a7ee1583515ca80cb3474fdc9c95",
|
||||
"rev": "ad9ca03be8aaf8d6e458102e7d77370b7fe71ccf",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
|
Loading…
x
Reference in New Issue
Block a user