2

パッケージ blaze-html を使用して、次のような html を作成したい

<p>&nbsp;&nbsp;Some indented text

非改行スペースを作成する方法がわかりません。それを行う最善の方法は何ですか?

4

2 に答える 2

1

もちろん、1 つの方法は、その文字の Haskell エンコードされたバージョンを含む文字列を に与えることtoHtmlです。別の方法は、次を使用することpreEscapedToMarkupです。

preEscapedToMarkup "&nbsp;"
于 2013-01-11T06:30:40.243 に答える
0

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 に感謝します。

于 2013-01-12T06:44:25.453 に答える