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