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