module Highlighter
import iTasks, Tasklet, Text
import syncol, EdTab
//-------------------------------------------------------------------------
highlighterTasklet :: Tasklet Void Void
highlighterTasklet =
{ Tasklet
| generatorFunc = highlighterGUI
, resultFunc = \_ = Value Void False
, tweakUI = id
}
highlighterGUI :: !TaskId (Maybe Void) !*IWorld -> *(!TaskletGUI Void, !Void, !*IWorld)
highlighterGUI _ _ iworld
# gui = { TaskletHTML
| width = ExactSize 800
, height = ExactSize 600
, html = HtmlDef
("" +++
"
" +++
"" +++
"
" +++
"
")
, eventHandlers = [HtmlEvent "start" "click" onClick]
}
= (TaskletHTML gui, Void, iworld)
where
onClick _ _ _ d
# (d, str) = getDomAttr d "inp" "value"
# lines = split "\n" str
# parsedLines = firstParse (toStrictList lines)
# hls = genText parsedLines
# text = join "
" hls
# (d, _) = setDomAttr d "out" "innerHTML" text
= (d, Void)
//-------------------------------------------------------------------------
source =
["// type",
":: T = T",
"",
"tasklet1 :: Task Int",
"tasklet1",
" = mkTask pushTasklet",
" >>* [ OnAction ActionOk (ifValue (\n -> n >= 3)) returnV",
" ]"]
instance toString Info
where
toString info
= "comment: " +++ toString info.comment_level +++ ", " +++
"typedef: " +++ toString info.is_typedef +++ ", " +++
"typedec: " +++ toString info.is_typedecl +++ ", " +++
"level: " +++ toString info.offside_level +++ ", " +++
"flush: " +++ toString info.flush
toStrictList [l:ls] = SCons l (toStrictList ls)
toStrictList [] = SNil
fromStrictList (SCons l ls) = [l:fromStrictList ls]
fromStrictList SNil = []
genText :: (StrictList (!Info,!String)) -> [String]
genText (SCons l ls)
# pic = tabDrawStringC l DefaultSyntaxColours newPicture
= [fst (asString pic) : genText ls]
genText SNil = []
/*
Start
# lines = toStrictList source
# parsedLines = firstParse lines
# pic = genText parsedLines newPicture
= fst (asString pic)
*/
/*
Start :: *World -> *World
Start world = startEngine
[{PublishedTask|url="/bubu"
,task=TaskWrapper (\_ -> mkTask highlighterTasklet)
,defaultFormat = JSONGui}]
world
*/
Start world = startEngine (mkTask highlighterTasklet) world