śĪ!}–sī|      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{ Safe ²WEditorSupporting hyphenation.WEditorThe canonical hyphen character.WEditorDealing with word characters.WEditor*Predicate for identifying word characters.WEditor#Dealing with whitespace characters.WEditor0Predicate for identifying whitespace characters.Safe ś WEditorLine meant for viewing. WEditor%The type of line break for this line. WEditorThe complete data of the line.  SafežWEditor5Single paragraph that has not been parsed into lines.WEditor(The complete and uparsed paragraph data.WEditorCreate an empty paragraph.Safe@ACSX.³(WEditorAny action that updates a (.WEditor>Actions that change the cursor position without changing data.WEditorMove up one line.WEditorMove down one line.WEditorMove backward one character.WEditorMove forward one character.WEditor&Implementation-defined home operation.WEditor%Implementation-defined end operation. WEditor)Implementation-defined page-up operation.!WEditor+Implementation-defined page-down operation."WEditor/Modification direction, relative to the cursor.#WEditor!Apply the edit before the cursor.$WEditor Apply the edit after the cursor.%WEditorActions that modify data.&WEditorInsert a block of characters.'WEditorDelete a single character.(WEditor*Generic text editor for fixed-width fonts.e': Editor type providing the operations.c: Character type.)WEditorApply an edit action.*WEditor*Break the current paragraph at the cursor.+WEditorApply e cursor movement.,WEditorGet the  (col,row)* cursor position relative to the viewport.-WEditorGet the absolute (paragraph,char) edit position.BThe position can be restored after cursor movements by calling .; however, calling ) or * invalidates this position..WEditorSet the absolute (paragraph,char) edit position./WEditor6Get the number of characters in the current paragraph.0WEditor-Get the number of paragraphs in the document.1WEditorExport the modified data.2WEditorAction for the  Backspace key.3WEditorAction for the Delete key.4WEditorAction for the Enter key.5WEditor&Action for normal character insertion.6WEditor"Action to insert after the cursor.7WEditor:Action to set the absolute (paragraph,char) edit position.8WEditorAction for the up-arrow key.9WEditorAction for the down-arrow key.:WEditorAction for the left-arrow key.;WEditorAction for the right-arrow key.<WEditorAction for the Home key.=WEditorAction for the End key.>WEditorAction for the PageUp key.?WEditorAction for the PageDown key.( !"#$%&'()*+,-./0123456789:;<=>?(%&'"#$ !()*+,-./015239=4<6:?>;78Safe @ACHSVX@ŅFWEditor"Line parser for fixed-width fonts.p': Parser type providing the operations.c: Character type.GWEditor4Type used to differentiate between line-break types.HWEditornChange the max line width used for parsing. A width of zero must result in breakLines skipping line breaks.IWEditorBreak the sequence into lines.5The following must hold for all possible inputs to a F p:)concat (map vlText (breakLines p l)) == l Implement K and LT to make visual adjustments (such as adding hyphens or indentation) if necessary.JWEditor)A place-holder line for empty paragraphs.KWEditor'Render the line for viewing. Implement L if K8 changes the positions of any characters on the line.LWEditor&Adjust the horizontal cursor position.MWEditor+Split the line to create a paragraph break.5The following must hold for all possible inputs to a F p:?let (b,t) = splitLine p n l in vlText l == vlText b ++ vlText tMWEditorIndex to split at.WEditorLine to split.WEditor New lines at  (bottom,top) of previous/next paragraphs.FGHIJKLMFGHIJKLMSafe@ACSXN NWEditorAny action that updates a R.OWEditor7Actions that modify the view without affecting editing.PWEditor4Shift the vertical offset. Negative values shift up.QWEditor$Attempt to fill the entire viewport.RWEditor.Generic editor viewport for fixed-width fonts.v': Viewer type providing the operations.c: Character type.SWEditorSet the (width,height)) size of the viewport. Setting either to <=0( disables bounding in that dimension.TWEditorGet the (width,height) size of the viewport.UWEditor}Get the visible lines in the viewport. This does not need to completely fill the viewport area, but it must not exceed it.VWEditorApply a view change.WWEditorAction to resize the viewport.XWEditor Action to shift the view upward.YWEditor"Action to shift the view downward.ZWEditor'Action to attempt to fill the viewport. NOPQRSTUVWXYZ RSTUVOPQNZWXY SafeO+L  !"#$%&'()*+,-./0123456789:;<=>?FGHIJKLMNOPQRSTUVWXYZ SafeP‘|}~€‚ƒ„…†‡ˆ‰ Safe>Q%Š‹ŒŽ‘’“”•–—˜™š›œžŸ ”¢£¤„¦§Ø©Ŗ«¬­®Safe=>?@AEXW]WEditor0Generic document editor with a dynamic viewport.0This editor bounds vertical view scrolling (see O$) to keep the cursor within view.^WEditor Create an editor for a document.^WEditor+Parser used to break paragraphs into lines.WEditor)List of unparsed paragraphs to be edited.WEditorDocument editor.8 !"#$%&'()*+,-./0123456789:;<=>?FNRSTUVWXYZ]^8]^%&'"#$()*+,-./01FRSTUV !N5239=4<6:?>;78ZWXYSafe =?@ACEHVXsrbWEditor6Wrapping policy that breaks lines based on words. Use n to construct a new value.cWEditor'Word-splitting operations for use with b.s): Splitter type providing the operations.c: Character type.dWEditor Determine where to break a word.9The splitter can refuse to process the word by returning Æ.5The segment sizes must provide space for a hyphen if g extends the line.#Once the word has been split up by b-, the segments are processed as follows: The last segment is prepended to the next line to be parsed. This means that if the word is not split, it gets deferred to the next line.VIf there are more segments, the first is appended to the current line being parsed.WAll remaining segments are put on separate lines between the current and next lines.eWEditorDPredicate for characters that should be treated as a part of a word.fWEditor1Predicate for detecting whitespace between words.gWEditor:Append the canonical hyphen character to show word breaks.hWEditor3Check the word segment for an existing hyphenation.iWEditor,Line break type for a single paragraph line.jWEditor(The line is at the end of the paragraph.kWEditorThe line is nothing special.lWEditor%The line ends with a hyphenated word.mWEditor8Wrapping policy that breaks at exactly the viewer width.nWEditor1Wrapping policy that breaks lines based on words.oWEditorAAvoids splitting words unless they are longer than a single line.pWEditorGHyphenates words using simple aesthetics, without dictionary awareness.dWEditor"Space available on the first line.WEditorSpace available on new lines.WEditorThe word to break.WEditorList of segment sizes.bcdefghijklmnopbicdefghmnpjlko°   !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„… † ‡ ˆ ‰ Š ‹ Œ  Ž   ‘ ’ “ ” • – — ˜ ™ š › œ  ž Ÿ   ” ¢ £ ¤ „ ¦ § Ø © Ŗ « ¬ ­ ® Æ ° ± ² ³ “ µ ¶ · ø¹ŗ»¼%WEditor-0.2.1.1-yB80lCmm8019AUDsGVFjIWEditor.Base.CharWEditor.Base.LineWEditor.Base.ParaWEditor.Base.EditorWEditor.Base.ParserWEditor.Base.ViewerWEditor.DocumentWEditor.LineWrap WEditor.BaseWEditor.Internal.LineWEditor.Internal.Para HyphenChar defaultHyphenisDefaultHyphenWordChardefaultIsWordCharWhitespaceChardefaultIsWhitespace$fWhitespaceCharChar$fWordCharChar$fHyphenCharChar VisibleLinevlBreakvlText$fEqVisibleLine$fOrdVisibleLine$fShowVisibleLine UnparsedParaupText emptyPara$fEqUnparsedPara$fOrdUnparsedPara$fShowUnparsedPara EditorAction MoveDirectionMoveUpMoveDownMovePrevMoveNextMoveHomeMoveEnd MovePageUp MovePageDown EditDirection EditBefore EditAfter EditAction InsertText DeleteTextFixedFontEditoreditText breakPara moveCursor getCursor getEditPoint setEditPoint getParaSize getParaCount exportDataeditorBackspaceActioneditorDeleteActioneditorEnterActioneditorAppendActioneditorInsertActioneditorSetPositionActioneditorUpActioneditorDownActioneditorLeftActioneditorRightActioneditorHomeActioneditorEndActioneditorPageUpActioneditorPageDownAction$fEqEditAction$fShowEditAction$fEqEditDirection$fShowEditDirection$fEqMoveDirection$fShowMoveDirectionFixedFontParser BreakType setLineWidth breakLines emptyLine renderLine tweakCursor splitLine ViewerAction ViewAction ShiftVerticalFillViewFixedFontViewer setViewSize getViewSize getVisible updateViewviewerResizeActionviewerShiftUpActionviewerShiftDownActionviewerFillAction$fEqViewAction$fShowViewActionEditingDocument editDocument!$fFixedFontEditorEditingDocumentc!$fFixedFontViewerEditingDocumentc$fShowEditingDocument BreakWords WordSplitter splitWord isWordChar isWhitespace appendHyphenendsWithHyphen LineBreak lineBreakEndlineBreakSimplelineBreakHyphen breakExact breakWordsnoHyphen lazyHyphen$fShowLineBreak$fWordSplitterNoSplitc$fFixedFontParserBreakWordsc$fShowBreakWords$fWordSplitterNoHyphenc$fWordSplitterLazyHyphenc $fEqLineBreak$fOrdLineBreak $fShowNoSplit$fShowNoHyphen$fShowLazyHyphen EditingLineeditLineviewLine joinLines getLineCursor setLineCursorsplitLineAtCursorlineCursorMovablemoveLineCursor atLineFront atLineBack appendToLine prependToLine modifyLine EditingParaVisibleParaAfterVisibleParaBeforeviewBeforeLinesviewAfterLinesparseParaBeforeparseParaAfterunparseParaBeforeunparseParaAftereditPara unparsePara reparseParaviewParaBefore viewParaAftergetBeforeLinesgetCurrentLine getAfterLinescatLinesBefore catLinesAftercountLinesBeforecountLinesAftergetParaCursorLinegetParaCursorCharsetParaCursorChargetParaCharCountgetParaEditCharsetParaEditChar splitParaparaCursorMovablemoveParaCursor atParaFront atParaBack seekParaFront seekParaBack appendToPara prependToPara modifyParabase GHC.MaybeNothing