Это конечно очень приятно когда что-то полезное делаешь. Пользователей Hastache в мире может и не очень много, но они точно есть. Вот недавно Christiaan Baaij прислал сообщение о функции которая есть во многих реализациях шаблонизатора Mustache, а в Hastache нет. Это обращение к элементам списка по номеру, т.е. как-то так:
| {{heroes.1.name}} {{heroes.0.name}}
|
Полезная штука, мне ни разу пока не пригодилась (поэтому и не сделал), однако легко можно придумать ей применение и кому-то такое точно понадобится.
Пользоваться так:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
| #!/usr/local/bin/runhaskell {-# LANGUAGE DeriveDataTypeable #-} import Text.Hastache import Text.Hastache.Context import qualified Data.ByteString.Lazy as LZ import Data.Data import Data.Generics
main = mapM_ (\(template,context) -> hastacheStr defaultConfig (encodeStr template) context >>= LZ.putStrLn) [(template1, mkStrContext context1), (template1, context2), (template3, context3)]
names = ["Безымянный","Небо","Сломанный Меч","Летящий Снег","Цинь Шихуанди"]
template1 = concat [ "{{heroes.1.name}}\n", "{{heroes.0.name}}\n"]
context1 "heroes" = MuList $ map (mkStrContext . mkListContext) names where mkListContext name = \"name" -> MuVariable name context1 _ = MuNothing
data Hero = Hero { name :: String } deriving (Data, Typeable) data Heroes = Heroes { heroes :: [Hero] } deriving (Data, Typeable)
context2 = mkGenericContext $ Heroes $ map Hero names
template3 = concat [ "{{heroName.3}}\n", "{{heroName.2}}\n"]
data HeroesStr = HeroesStr { heroName :: [String] } deriving (Data, Typeable)
context3 = mkGenericContext $ HeroesStr names
|
Результат:
| Небо Безымянный
Небо Безымянный
Летящий Снег Сломанный Меч
|