!{       !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~   Safe   NoneD' yi-mode-javascriptThe different tokens. yi-mode-javascriptHlStateB is 0 when outside of a multi-line comment and -1 when inside one. yi-mode-javascriptThe constructors for Operator0 have an apostrophe as a suffix because e.g. LT is already used by Prelude.-yi-mode-javascriptThe constructors for Reserved+ have an apostrophe as a suffix because Default" is already used. Also note that  Undefined' is not intended as some sort of "backup" reserved word for things we don't care about -- it really means the "undefined" built-in in JavaScript.yi-mode-javascriptThe Line0 constructor represents a single-line comment. Start and EndH represent the start and end of a multi-line comment, respectively. Text0 represents the text in a multi-line comment.Lyi-mode-javascriptPrefix operators. NOTE: Add' is also a valid prefix operator, but since it's completely useless in the real world, we don't care about it here. Doing this makes parsing much, much easier.Myi-mode-javascriptPostfix operators.Nyi-mode-javascriptInfix operators.Pyi-mode-javascriptTakes a 7 and returns a style to be used for that type of token. TODO: The  check is potentially unnecessarily slow. We could split the Const constructor into two different ones, one for builtins and one for others.yi-mode-javascriptGiven a String& representing an operator, returns an  % with the appropriate constructor.yi-mode-javascriptGiven a String) representing a reserved word, returns a -% with the appropriate constructor.Qyi-mode-javascript7Scan one token. Return (maybe) a token and a new state.R   !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQROQPK  -./0123456789:;<=>?@ABCDEFGHIJ  !"#$%&'()*+, LNMGPL-2yi-devel@googlegroups.com experimentalportableNone15;=g4(oyi-mode-javascriptTRepresents either a variable name or a variable name assigned to an expression. AssBeg is a variable name maybe followed by an assignment. AssRst' is an equals sign and an expression. (AssBeg x (Just (AssRst '=' '5'))) means x = 5.yi-mode-javascript Instances of Failablep can represent failure. This is a useful class for future work, since then we can make stroking much easier.yi-mode-javascript Instances of  Strokable/ are datatypes which can be syntax highlighted.yi-mode-javascriptNormal stroker.yi-mode-javascriptError stroker.yi-mode-javascript^Given a new style and a stroke, return a stroke with the new style appended to the old one.yi-mode-javascript,Given a list of tokens to check for errors (xs%) and a list of tokens to stroke (xs'), returns normal strokes for xs'A if there were no errors. Otherwise returns error strokes for xs'.yi-mode-javascriptGiven a list of TT , if any of them is an error, returns an error stroker, otherwise a normal stroker. Using e.g. existentials, we could make this more general and have support for heterogeneous lists of elements which implement Failable, but I haven't had the time to fix this.yi-mode-javascriptGiven a TT , return a Stroke for it.yi-mode-javascriptThe main stroking function.yi-mode-javascript Main parser.yi-mode-javascriptHParser for statements such as "return", "while", "do-while", "for", etc.yi-mode-javascriptMParser for "blocks", i.e. a bunch of statements wrapped in curly brackets or just a single statement.Note that this works for JavaScript 1.8 "lambda" style function bodies as well, e.g. "function hello() 5", since expressions are also statements and we don't require a trailing semi-colon.5TODO: function hello() var x; is not a valid program.yi-mode-javascriptParser for expressions which may be statements. In reality, any expression is also a valid statement, but this is a slight compromise to get rid of the massive performance loss which is introduced when allowing JavaScript objects to be valid statements.yi-mode-javascript@The basic idea here is to parse "the rest" of expressions, e.g. + 3 in x + 3 or [i] in x[i]y. Anything which is useful in such a scenario goes here. TODO: This accepts [], but shouldn't, since x[] is invalid.yi-mode-javascriptParser for expressions.yi-mode-javascriptzParses both empty and non-empty arrays. Should probably be split up into further parts to allow for the separation of [] and  [1, 2, 3].yi-mode-javascript!Parses a semicolon if it's there.yi-mode-javascript3Parses a comma-separated list of valid identifiers.yi-mode-javascriptParses a comment.yi-mode-javascriptParses a prefix operator.yi-mode-javascriptParses a infix operator.yi-mode-javascriptParses a postfix operator.yi-mode-javascriptParses any literal.yi-mode-javascriptParses any literal.yi-mode-javascriptParses any string.yi-mode-javascriptParses any valid number.yi-mode-javascriptParses any valid identifier.yi-mode-javascriptParses any boolean.yi-mode-javascriptParses a reserved word.yi-mode-javascriptParses a special token.yi-mode-javascriptParses an operator.yi-mode-javascript!Expects a token x, recovers with .yi-mode-javascriptExpects a special token.yi-mode-javascriptExpects an expression.yi-mode-javascript0General recovery parser, inserts an error token.yi-mode-javascriptWeighted recovery.yi-mode-javascriptBetter name for .yi-mode-javascriptBetter name for .yi-mode-javascript<TODO: This code is *screaming* for some generic programming.TODO: Somehow fix Failable and failStroker to be more "generic". This will make these instances much nicer and we won't have to make ad-hoc stuff like this.fZ\[]`_^anmlkjihgfedcborqpsvutwzyx{}|~f~{}|wzyxsvutorqpanmlkjihgfedcb]`_^Z\[None;<=tyi-mode-javascript0The main verifier which calls the sub-verifiers.yi-mode-javascript{Given a list of function declarations, checks for multiple function declarations, including the functions' subfunctions.yi-mode-javascript Given two Tok t, compares the ts.yi-mode-javascript3Returns a list of the functions in the given block.yi-mode-javascriptGiven a *, returns the token representing the name.yi-mode-javascriptGiven a #, returns its inner body as a list.yi-mode-javascriptGiven a  ValidName* returns the string representing the name.yi-mode-javascriptLike + but drops the first element in the result.GPL-2yi-devel@googlegroups.com experimentalportableNone1K{syi-mode-javascriptHooks for the JavaScript mode.yi-mode-javascriptThe "compiler."yi-mode-javascript9Returns the JS verifier buffer, creating it if necessary.yi-mode-javascript*Creates a new empty buffer and returns it.yi-mode-javascriptVGiven a filename, a BufferRef and a list of errors, prints the errors in that buffer.None{        !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`aabcdefghijklmnopqrstuvwxyyz{|}~g      !"#$%&0yi-mode-javascript-0.18.0-15u7PQgDaXJE01WSq4VLx9Yi.Lexer.JavaScriptYi.Syntax.JavaScriptYi.Verifier.JavaScriptYi.Mode.JavaScript Yi.Config.Default.JavaScriptModePaths_yi_mode_javascriptTokenUnknownResStrRexOpSpecialNumber ValidNameCommentConstHlStateOperatorAdd' Subtract' Multiply'Divide'Modulo' Increment' Decrement'Assign' AddAssign'SubtractAssign'MultiplyAssign' DivideAssign' ModuloAssign'Equals' NotEquals'GT'GTE'LT'LTE' EqualsType'NotEqualsType'And'Or'Not'BitAnd'BitOr'BitXor' LeftShift' RightShift' RightShiftZ'BitNot'Qualify'ReservedBreak'Case'Catch' Continue'Default'Delete'Do'Else'Finally'For' Function'If'In' InstanceOf'New'Return'Switch'This'Throw'Try'TypeOf'Var'Void'While'With'True'False'Null' Undefined'TTprefixOperatorspostfixOperatorsinfixOperators initState tokenToStyle alexScanToken$fShowCommentType$fEqCommentType$fShowReserved $fEqReserved$fShowOperator $fEqOperator $fShowToken $fEqTokenKeyValue KeyValueErrArrayArrContArrRestArrErrExprExprObj ExprPrefixExprNew ExprSimple ExprParen ExprAnonFun ExprTypeOf ExprFunCallOpExprExprCondExprArrPostExprExprErr VarDecAssAssBegAssRstAssErrBlockBlockOneBlockErr ForContent ForNormalForInForErrParExpr ParExprErr ParametersParErr StatementFunDeclVarDeclReturnWhileDoWhileForIfElseWithComm SemicolonTreeBListFailablestupid hasFailed Strokable toStrokesnormalerrorone modStrokenError failStroker tokenToStroke getStrokesparse statementblockstmtExpropExpr expressionarray semicolon parametersparExprcommentpreOpinOppostOpopTok simpleTokstrToknumToknamebooleanresspcoperplzTokplzSpcplzExprplzanythinghate fromBlockfirstTok errorTokenisErrortoTTfromTT$fStrokableTok$fStrokableParameters$fFailableParameters$fStrokableArray$fStrokableKeyValue$fStrokableParExpr$fStrokableExpr$fStrokableVarDecAss$fStrokableBlock$fStrokableForContent$fStrokableStatement$fFailableKeyValue$fFailableExpr$fFailableParExpr$fFailableVarDecAss$fFailableBlock$fFailableForContent$fIsTreeStatement$fShowParameters$fDataParameters$fFoldableParameters$fShowKeyValue$fDataKeyValue$fFoldableKeyValue $fShowExpr $fDataExpr$fFoldableExpr $fShowArray $fDataArray$fFoldableArray $fShowBlock $fDataBlock$fFoldableBlock$fShowStatement$fDataStatement$fFoldableStatement$fShowVarDecAss$fDataVarDecAss$fFoldableVarDecAss$fShowForContent$fDataForContent$fFoldableForContent $fShowParExpr $fDataParExpr$fFoldableParExprReportErrWarnWarningUnreachableCodeErrorMultipleFunctionDeclarationverifycheckMultipleFunscheckUnreachablettEqsayisReturn findFunctionsfunNamefunBodynameOf dropWhile'dupsBy $fShowError $fShowWarning $fShowReport $fEqError $fEqWarning $fEqReportjavaScriptModehooks$fYiVariableJSBuffer$fDefaultJSBuffer$fBinaryJSBufferconfigureJavaScriptModeversion getBinDir getLibDir getDynLibDir getDataDir getLibexecDir getSysconfDirgetDataFileName CommentTypebase Data.FoldableelemopToOpresToRes)yi-language-0.18.0-1FEc2siMQfF3fsxTbsKtHE Yi.Lexer.AlextokFromTtokTGHC.List dropWhile jsCompile getJSBuffer mkJSBufferjsErrors