パッケージ blaze-html を使用して、次のような html を作成したい
<p> Some indented text
非改行スペースを作成する方法がわかりません。それを行う最善の方法は何ですか?
もちろん、1 つの方法は、その文字の Haskell エンコードされたバージョンを含む文字列を に与えることtoHtml
です。別の方法は、次を使用することpreEscapedToMarkup
です。
preEscapedToMarkup " "
ertes のアドバイスに従って、「Haskell でエンコードされたバージョンの文字を含む文字列を与える」ことを試みました。このコードは冗長なので、型がどのように組み合わされるかをよりよく理解できました。
{-# LANGUAGE OverloadedStrings #-}
-- * base
import Data.Monoid ((<>))
import Data.Char (chr)
-- * text
import qualified Data.Text.Lazy as L (Text)
import Data.Text (Text, singleton)
import Data.Text.Lazy.Read (hexadecimal)
-- * blaze-html
import Text.Blaze.Html5
import qualified Text.Blaze.Html5 as H
import Text.Blaze.Renderer.String
nbspHex = "00A0" :: L.Text -- Unicode codepoint for nbsp
Right (nbspInt, _) = hexadecimal nbspHex
nbspChar = chr nbspInt :: Char
nbspTxt = singleton nbspChar :: Text
nbspHtml = toHtml nbspTxt :: Html
someHtml :: Html
someHtml = docTypeHtml $
body $ do
p "some text"
p (nbspHtml <> nbspHtml <> "some indented text")
main :: IO ()
main = do
let s = renderHtml $ someHtml
putStrLn s
このコードは、期待どおりに「インデントされたテキスト」をブラウザに表示しましたが、html を見ると、期待どおりに「@nbsp;」が表示されませんでした。したがって、これは私が探していた答えではありません。
より良い解決策を指摘してくれた Jukka に感謝します。