Hatena::ブログ(Diary)

趣味的にっき このページをアンテナに追加 RSSフィード

2007-08-28

月食

今日皆既月食 07:21 今日は皆既月食を含むブックマーク 今日は皆既月食のブックマークコメント

残業を終えて会社で見た時には雲が厚くてもうダメかとあきらめていたのですが、地下鉄を降りてふと見上げると、ほんのすこしだけ欠けた月が見えました。

やっぱり携帯じゃ無理か。もうすこしまともなデジカメが欲しいなあ。

[] Nothing found for 404 - エロと風俗情報満載 どう抜く? 22:47  Nothing found for 404 - エロと風俗情報満載 どう抜く?を含むブックマーク  Nothing found for 404 - エロと風俗情報満載 どう抜く?のブックマークコメント

Parsecの練習に程良い感じです。これくらい複雑な問題になると正規表現考えるのが面倒になります。Parsecとどっちが楽か微妙なところですが。。。

module Main (main) where

import Data.Maybe (fromJust, isJust)
import Text.ParserCombinators.Parsec 
import Text.Printf (printf)

type ImageName = (String, String, String, String)

parseImageName :: String -> [ImageName]
parseImageName = 
    either (error . show) (map fromJust . filter isJust) . 
           parse (many $ try imageName <|> other) ""

imageName :: GenParser Char a (Maybe ImageName)
imageName = do
  name <- many1 letter
  hi <- option "False" $ try hidden
  sz <- option "normal" $ try big <|> try small
  char '.'
  ext <- many1 letter
  return $ Just (name, ext, sz, hi)
  where
    hidden = string "-hidden" >> return "True"
    big    = string "-big"    >> return "big"
    small  = string "-small"  >> return "small"

other :: GenParser Char a (Maybe ImageName)
other = anyChar >> return Nothing

printImageName :: ImageName -> IO ()
printImageName (name, ext, sz, hi) =
    printf "name:'%s', ext:'%s', size: %s hidden: %s\n"
           name ext sz hi

main :: IO ()
main = mapM_ printImageName $ parseImageName $
         "aaa abc-hidden.png>hoge-big.jpeg\n" ++
         "---foo-hidden-small.gif|^_^a.bmp\n" ++
         "--hiddena-hoge.png<=not hidden~~\n" ++
         "--small.jpg<=not small(^_^)\n" ++
         "normal-small-big.hoge\n"
-- => name:'abc', ext:'png', size: normal hidden: True
--    name:'hoge', ext:'jpeg', size: big hidden: False
--    name:'foo', ext:'gif', size: small hidden: True
--    name:'a', ext:'bmp', size: normal hidden: False
--    name:'hoge', ext:'png', size: normal hidden: False
--    name:'small', ext:'jpg', size: normal hidden: False
--    name:'small', ext:'hoge', size: big hidden: False

[] 22:47 を含むブックマーク のブックマークコメント

20:00ごろ帰りました。

トラックバック - http://d.hatena.ne.jp/ha-tan/20070828
Connection: close