úδp¨lÊ      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª « ¬ ­ ® ¯ ° ± ² ³ ´ µ ¶ · ¸ ¹ º » ¼ ½ ¾ ¿ À Á Â Ã Ä Å Æ Ç È É  ÊËÌÍ $structure for the help of a command the command name how to run it aspects errors explanations implementation state parses a CommandHelp parses all commands help  run the parser against a string The string to parse the parser to use 0a function to use on the result , if it succed 2the error showed if it fails or the result closed (create a nice table from lines of words =parse a prettyprint of a list of command helps from a string  the string with the help inside ?a parse error or Just a prettyprint of a list of command helps =parse a prettyprint of a list of command helps from a string the command name  the string with the help inside Na parse error or (Just the command help or Nothing if the command is missing)       Ca wrapper around HStateT to derive his classes and add an instance %facility to write signatures context 1a state monad transformer with the state history %State stacks wrapping states in time last state putted :the history of putted states (reversed) without the redos history of the undo %tries to get back one step the state "False if the undo stack was empty %tries to get back the undo operation "False if the redo stack was empty Ppush the old state in the undo stack and set the new state (alternative to put) the new state to put  monading an History of one state Wrun the UndoT monad transformer spitting out the computation result in the inner monad a UndoT action the initial state  the result !Prun the UndoT monad transformer spitting out the final state in the inner monad a UndoT action the initial state the final state Î(the MonadState instance for the wrapper  ! ! !#"#$(relative distance between two positions Lthe class to implement for holding a list of elements with a cursor on them %An empty engine &"An engine is isomorphic to a list '!Extract the list from the engine (,Extract n lines from the position addressed )Extract the addressed line *0Possibly set the addressed line to the nth line +,Insert some lines before the addressed line ,+Insert some lines after the addressed line -1Delete the addressed line , address the next one .+Delete n lines from the addressed position /Address an append position 0Address before the first line 1!The number of the addressed line 2Address the next line 3Address the prev line 4Jump back n lines 5Jump ahead n lines 6,Jump n lines relative to the addredded line 7?Create all the engines from the addressed one to the last one 8Iall the next engines from the addressed next to itself , wrapping around 9DCreate all the engines from the start to the addressed one included :Iall the prev engines from the addressed prev to itself , wrapping around ;3Pos represent the position addressed in the engine <%the engine addresses after last line ="The number of lines in the engine >9the engine addresses before first line , if ever present ?"the engine addresses a real line @'The index of the line starting from 1 ABrepresent an action, which can fail with Nothing , an index error Blast element if present Cfirst element if present D)"#$%&'()*+,-./0123456789:;<=>?@AÏBCDÐÑÒÓÔ#A;?><@=$%&'()*+,-./0123456789:BC"#D#"##$%&'()*+,-./0123456789:%&'()*+,-./0123456789:;?><@=<=>?@ABCDTEJmain datatype for the program-- beyond the core state, a simulation layer l can be read  and errors u& can be thrown to kill the monad flow FBa complete command is a Command coupled with a Range or an Offset GHKwrapper a round the two possible addressing for a command Offset and Range IJKLa couple of Offsets MN'represents a line position in the file O'the line marked previously with a char P.the previous matching the last learned regex Q5the previous line (wrapping around) matching a regex R/the next line matching the last learned regex S1the next line (wrapping around) matching a regex T%the nth line aftor the addressed one U&the nth line before the addressed one V!the line addressed by the engine W the nth line X"beyond last line, the append line Ycommands for the editor ZSpedific help [ Asking help \Restore via the last change ]Revert the last change if ever ^'Load the output of an external command _Print filename ` Set filename aWrite a new file bWrite the file c Load a file dChange the addressed line e=interactively execute commands on each line matching a regex fBget some commands and execute them on each line matching a regex gprint some lines hdelete some lines i8get some text and add it in place of some deleted lines j3get some text and add it before the addressed line k2get some text and add it after the addressed line la layer for IO simulation, see Main for the real program one and Test for tests mGaccepts a prompt and should return Nothing on eof else a line of input noutput a normal string o,put a line in the history (which is global) poutput an error string q read a file r write a file 7 | runs an external command , first arg is the command E the output is returned or an error is signalled in the errort monad stu:the errors (monad failers) which can break the monad flow v$error parsing the help for commands w'a help for a missing command was asked x"reached the last state remembered y#reached the first state remembered z4a sensible data discarding command has been entered {'io error executing an external program |"io error trying to write the file }filename is not set ~io error trying to load a file uncontrolled errors €&lines were addressed out of file (see $) 1something bad happened in the evaluation process ‚the regex doesn't match a line ƒ1command line was not parsed to a CompleteCommand „2issued on ctrl-d or q command (q not implemented) …$placeholder for the two constraints †Bthe core editor runs under the state monad with state (Stato w) . [ Wrapped around a monad (IO mainly) to permit console input and output of commands with IO  and testing with State ‡„Stato is parametrized on an Engine instance and hold the engine with the last regex entered , regex G and g are not implemented now ˆ‰data holding the file Ša regex ‹the file we are editing Œa sensible state for data lost Žpush a new file (data $F instance) in the core State, pushing the old state in the undo stack ‘<wrap a maybe action and throw a backend error on a Nothing  maybe action  monading ’execute an action on the file &an action from an engine w to a maybe )the result from Just in the Editor monad “%the inputSio action lifted to Editor ”7the inputSio action lifted to Editor with empty prompt •&the outputSio action lifted to Editor –(the historySIO action lifted to Editor —%the errorSIO action lifted to Editor ˜editor runner . 4 resolve the all monad from a core state to another the action to run the initial state 9the final state wrapped in the monad choosen for the SIO [EFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒÕŽÖרÙÚÛ‘’“”•–—˜T‡ˆ‰Š‹Œ†Ž…u„ƒ‚€~}|{zyxwvlmnopqrstYkjihgfedcba`_^]\[ZNXWVUTSRQPOLMHKJIFGE‘’“”•–—˜TEFGGHKJIIJKLMMN XWVUTSRQPOOPQRSTUVWXYkjihgfedcba`_^]\[ZZ[\]^_`abcdefghijklmnopqrstmnopqrstu„ƒ‚€~}|{zyxwvvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹Œˆ‰Š‹ŒŽ‘’“”•–—˜™move the cursor in the engine  the new position for the cursor %the modified engine under the Editor š=From a range to the tuple (nelements,starting range element) the range to focus #the tuple (nelements,engine placed  at first offset of range) ›0a complete backend + Editor action on an Offset Offset for the action the final action the backend ation .. œ5a backend action ending in a save state for the file Offset for the backend action the backend ation modified monad .a complete backend + Editor action on a Range the addressed range the closing Editor action the backend action ... žthe addressed range the backend action modified monad ™Üš›œž™š›œž™š›œžŸ#a real check for file modification  ¡<a wrapper for commands evaluation which can discard changes ¢?a wrapper for commands evaluation which cannot discard changes £#a step in main mode for the editor 'the parser for the command on the line %the evaluator for the parsed command updated beast ¤.looping in main mode with error log on output 'the parser for the command on the line %the evaluator for the parsed command updated beast ¥nthe secondary mode for the editor where lines are inserted as input. It returns the lines.Use CTRL-D to exit Ÿ ¡¢£¤¥Ÿ ¡¢£¤¥Ÿ ¡¢£¤¥¦$every command is run with eval. See Y datatype for docs #the command to match for execution  monading .. §throw a  writerSio error to Editor ¨3dump the engine content to a file via writefileSio  filename  monading ©@get the filename defaulting to some other action to produce one ¦Ý§¨©¦§¨©¦§¨© ª-shortcut for a parser of chars with no state «parse an integer number ¬parse an Offset ­parse a Range ®+defaults Offset or Range for the commands ¯5forces a failure for a command if a Range was parsed °parse an OffsetOrRange ±helper for skipping a filter ²7parse a function from OffsetOrRange to a parse Command ³@parse a CompleteCommand made of an OffsetOrRange and a Command ´Wthe parser from a String to either a String representing an error or a CompleteCommand ª«Þßଭ®¯°±²³´ ª«¬­®¯°±²³´ ª«¬­®¯°±²³´ µSee the Engine class docs ¶Fthe cursor is pointing either to insert at the front of the file or  append at the end of the file. ·@Left lines is in append mode, Right is in insert at front mode. ¸Cthe cursor when its pointing to a real line (eg line function doesn't fail) ¹)lines before the cursor (reversed order) ºaddressed line »lines after the cursor áâµ¶·¸¹º»µ¸¶¹º»·µ¸¶¹º»·¶·¸¹º» ¼½¾¿ÀÁÂÃÄÅÆ¼½¾¿ÀÁÂÃãäÄÅ寿çè ý¾¿ÀÁ¼ÄÅÆ ¼½¾¿ÀÁ¾¿ÀÁÂÃÄÅÆ ÇJlaunches an external program , catching output and errors, return on exit Èthe greetings Éé.a SIO data made right for running the editor êëÇÈÉÇÈÉÇÈÉì  !""#$%&'()*+,,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSSTUVWXYZ[\]^_`abcdefghijklmInopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª« ¬ ­ ® ¯ ° ± ² ³ ´ µ ¶ · o ¸ ¹ º » ¼ ½ ¾ ¾ ¿ À Á  G Ã Ä Å Æ Ç ÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜ Ý Þ ß à á â ã ä å æ ç è é êëHedi-0.1 Paths_HediHelperUndoEngineEditorOffset OperationEvalParserBufferTestMainversion getBinDir getLibDir getDataDir getLibexecDirgetDataFileName CommandHelpnamesynopsis descriptionserrorsimplementationparseACommandHelpparseCommandsHelpruntabulatelistOfCommands helpCommandUndoTHCtxHStateTHistorycurrentundosredosundoredohputblank evalUndoT execUndoTWemptylistInlistOutlinenlinejumpinsadddeldelnendstartposnextprevprevnnextnrjumptillendfwdcycle fromstartbwdcyclePosEndlnsBeginLinenthChangelastfirstprop_E1CompleteCommandCC OffsetOrRangeORNORRORORangeMarkedAs LastRePrevRePrev LastReNextReNextNextPrevCurrentAbsoluteLastLineCommand HelpTopicHelpList RedoChange UndoChange EditExternal GetFilename SetFilenameWriteNewWriteEdit NoCommandBigGSmallGPrintDeleteInsertAppendSIOinputSio outputSio historySioerrorSIO readfileSio writefileSio externalSiocommandhelpSIOErrCommandHelpParseErrCommandHelpMissing NoMoreRedo NoMoreUndo PendingStateExternalCommandErr FileWriteErrFileNameMissing FileReadErrAhi BackendErrEvalErrRegexUnmatched ParserErrStopErrCtxStatoEStatofilelastrefilenamepending lastsaved liftStatoEhputfileliftSiobackendthroughpinputinputoutputhistoryerrorlogjumpE rangeResolvedoOffset editOffsetdoRange editRangemodified resetpending evalSensible checkPendings commandMode commandLoop inputModeeval writefailwritegetnameParseEnumero parseOffset parseRange defaultORacceptOffsetOnlyparseOffsetOrRangerconst parseCommandparserparse InsideAppendelemsInsideleftcursorrightCStateConsolecinputcoutputcerrorchistoryoutputTerrorTinputTexternalCommand greetingsmainbindirlibdirdatadir libexecdir$fMonadStatesUndoTdistance propInOut prop_Empty prop_toEndprop_toEndAndBackprop_add zeroStateputfile putlastre setfilename setpending setlastsavedunsetlastsavedfinderbool parseFilenameparseExternalCommandparseCommandNameisInsiderunnerebuffereendhistoryTrunTtestloadFile$fSIOIO handleWithstrictReadFile