@@ 52,13 52,13 @@ extra-doc-files: CHANGELOG.md
library
-- Modules exported by the library.
- exposed-modules: Data.Text.ParagraphLayout
+ exposed-modules:
+ Data.Text.ParagraphLayout,
+ Data.Text.ParagraphLayout.Run,
+ Data.Text.ParagraphLayout.Span
-- Modules included in this library but not exported.
- other-modules:
- Data.Text.ParagraphLayout.Run,
- Data.Text.ParagraphLayout.Span,
- Data.Text.Script
+ other-modules: Data.Text.Script
-- LANGUAGE extensions used by modules in this package.
-- other-extensions:
@@ 2,16 2,31 @@ module Main (main) where
import qualified Data.ByteString as BS
import Data.List (intersperse)
-import Data.Text.Glyphize (Font, GlyphInfo, GlyphPos, createFace, createFont)
+import Data.Text.Glyphize
+ (Direction(..)
+ ,Font
+ ,GlyphInfo
+ ,GlyphPos
+ ,createFace
+ ,createFont
+ )
import Data.Text.Lazy (pack)
import Test.Hspec
import Test.Hspec.Golden
import System.FilePath ((</>))
import Data.Text.ParagraphLayout
+import Data.Text.ParagraphLayout.Run
type LayoutOutput = [[(GlyphInfo,GlyphPos)]]
+emptySpan :: Font -> Span
+emptySpan font = Span
+ { spanText = pack ""
+ , spanFont = font
+ , spanLanguage = Nothing
+ }
+
czechHello :: Font -> Span
czechHello font = Span
{ spanText = pack "Ahoj, světe!"
@@ 19,6 34,13 @@ czechHello font = Span
, spanLanguage = Just "cs"
}
+serbianMixedScript :: Font -> Span
+serbianMixedScript font = Span
+ { spanText = pack "Vikipedija (Википедија)"
+ , spanFont = font
+ , spanLanguage = Just "sr"
+ }
+
prettyShow :: LayoutOutput -> String
prettyShow = showOutput
where
@@ 47,8 69,43 @@ main = do
let face = createFace ttf 0
let font = createFont face
hspec $ do
+ describe "spanToRuns" $ do
+ it "handles span with no text" $ do
+ spanToRuns (emptySpan font) `shouldBe` []
+ it "handles Czech hello" $ do
+ let inputSpan = czechHello font
+ let runs = spanToRuns inputSpan
+ runs `shouldBe`
+ [ Run
+ { runText = spanText inputSpan
+ , runDirection = Just DirLTR
+ , runScript = Just "Latn"
+ , runOriginalSpan = inputSpan
+ }
+ ]
+ it "handles Serbian with mixed script" $ do
+ let inputSpan = serbianMixedScript font
+ let runs = spanToRuns inputSpan
+ runs `shouldBe`
+ [ Run
+ -- TODO: We might want both parentheses in the same run.
+ { runText = pack "Vikipedija ("
+ , runDirection = Just DirLTR
+ , runScript = Just "Latn"
+ , runOriginalSpan = inputSpan
+ }
+ , Run
+ { runText = pack "Википедија)"
+ , runDirection = Just DirLTR
+ , runScript = Just "Cyrl"
+ , runOriginalSpan = inputSpan
+ }
+ ]
+
describe "layout" $ do
- it "handles empty input" $ do
+ it "handles input with no spans" $ do
layout [] `shouldBe` []
+ it "handles one span with no text" $ do
+ layout [emptySpan font] `shouldBe` []
it "handles Czech hello" $ do
layout [czechHello font] `shouldBeGolden` "czechHello"