diff --git a/lexers/testdata/whiley.expected b/lexers/testdata/whiley.expected index 908fd81ce..73cf01e44 100644 --- a/lexers/testdata/whiley.expected +++ b/lexers/testdata/whiley.expected @@ -1,609 +1,609 @@ [ - {"type": "Text","value": "\n"}, - {"type": "KeywordDeclaration","value": "import"}, - {"type": "Text","value": " "}, - {"type": "Name","value": "uint"}, - {"type": "Text","value": " " }, - {"type": "KeywordDeclaration","value": "from" }, - {"type": "Text","value": " " }, - {"type": "Name","value": "std" }, - {"type": "Operator","value": "::" }, - {"type": "Name","value": "integer" }, - {"type": "Text","value": "\n" }, - {"type": "KeywordDeclaration","value": "import" }, - {"type": "Text","value": " " }, - {"type": "Name","value": "uinteger" }, - {"type": "Text","value": " " }, - {"type": "KeywordDeclaration","value": "from" }, - {"type": "Text","value": " " }, - {"type": "Name","value": "js" }, - {"type": "Operator","value": "::" }, - {"type": "Name","value": "core" }, - {"type": "Text","value": "\n" }, - {"type": "KeywordDeclaration","value": "import" }, - {"type": "Text","value": " " }, - {"type": "Name","value": "random" }, - {"type": "Text","value": " " }, - {"type": "KeywordDeclaration","value": "from" }, - {"type": "Text","value": " " }, - {"type": "Name","value": "js" }, - {"type": "Operator","value": "::" }, - {"type": "Name","value": "math" }, - {"type": "Text","value": "\n" }, - {"type": "KeywordDeclaration","value": "import" }, - {"type": "Text","value": " " }, - {"type": "Name","value": "Document" }, - {"type": "Punctuation","value": "," }, - {"type": "Text","value": " " }, - {"type": "Name","value": "Window" }, - {"type": "Punctuation","value": "," }, - {"type": "Text","value": " " }, - {"type": "Name","value": "CanvasRenderingContext2D" }, - {"type": "Text","value": " " }, - {"type": "KeywordDeclaration","value": "from" }, - {"type": "Text","value": " " }, - {"type": "Name","value": "w3c" }, - {"type": "Operator","value": "::" }, - {"type": "Name","value": "dom" }, - {"type": "Text","value": "\n" }, - {"type": "KeywordDeclaration","value": "import" }, - {"type": "Text","value": " " }, - {"type": "Name","value": "Element" }, - {"type": "Punctuation","value": "," }, - {"type": "Name","value": "HTMLCanvasElement" }, - {"type": "Punctuation","value": "," }, - {"type": "Text","value": " " }, - {"type": "Name","value": "HTMLImageElement" }, - {"type": "Punctuation","value": "," }, - {"type": "Text","value": " " }, - {"type": "Name","value": "MouseEvent" }, - {"type": "Text","value": " " }, - {"type": "KeywordDeclaration","value": "from" }, - {"type": "Text","value": " " }, - {"type": "Name","value": "w3c" }, - {"type": "Operator","value": "::" }, - {"type": "Name","value": "dom" }, - {"type": "Text","value": "\n\n" }, - {"type": "KeywordDeclaration","value": "import" }, - {"type": "Text","value": " " }, - {"type": "Name","value": "model" }, - {"type": "Text","value": "\n" }, - {"type": "KeywordDeclaration","value": "import" }, - {"type": "Text","value": " " }, - {"type": "Name","value": "view" }, - {"type": "Text","value": "\n\n" }, - {"type": "CommentMultiline","value": "/**\n * Add a given number of bombs to the board.\n */" }, - {"type": "Text","value": "\n" }, - {"type": "KeywordDeclaration","value": "method" }, - {"type": "Text","value": " " }, - {"type": "Name","value": "add_random_bombs" }, - {"type": "Punctuation","value": "(" }, - {"type": "Name","value": "model" }, - {"type": "Operator","value": "::" }, - {"type": "Name","value": "Board" }, - {"type": "Text","value": " " }, - {"type": "Name","value": "board" }, - {"type": "Punctuation","value": "," }, - {"type": "Text","value": " " }, - {"type": "Name","value": "uint" }, - {"type": "Text","value": " " }, - {"type": "Name","value": "n" }, - {"type": "Punctuation","value": ")" }, - {"type": "Text","value": " " }, - {"type": "Operator","value": "->" }, - {"type": "Text","value": " " }, - {"type": "Name","value": "model" }, - {"type": "Operator","value": "::" }, - {"type": "Name","value": "Board" }, - {"type": "Operator","value": ":" }, - {"type": "Text","value": "\n " }, - {"type": "Name","value": "uinteger" }, - {"type": "Text","value": " " }, - {"type": "Name","value": "remaining" }, - {"type": "Text","value": " " }, - {"type": "Operator","value": "=" }, - {"type": "Text","value": " " }, - {"type": "Operator","value": "|" }, - {"type": "Name","value": "board" }, - {"type": "Punctuation","value": "." }, - {"type": "Name","value": "squares" }, - {"type": "Operator","value": "|" }, - {"type": "Text","value": " \n " }, - {"type": "CommentSingle","value": "// Use Knuth's algorithm S\n" }, - {"type": "Text","value": " " }, - {"type": "Keyword","value": "for" }, - {"type": "Text","value": " " }, - {"type": "Name","value": "x" }, - {"type": "Text","value": " " }, - {"type": "Keyword","value": "in" }, - {"type": "Text","value": " " }, - {"type": "LiteralNumberInteger","value": "0" }, - {"type": "Punctuation","value": ".." }, - {"type": "Name","value": "board" }, - {"type": "Punctuation","value": "." }, - {"type": "Name","value": "width" }, - {"type": "Operator","value": ":" }, - {"type": "Text","value": "\n " }, - {"type": "Keyword","value": "for" }, - {"type": "Text","value": " " }, - {"type": "Name","value": "y" }, - {"type": "Text","value": " " }, - {"type": "Keyword","value": "in" }, - {"type": "Text","value": " " }, - {"type": "LiteralNumberInteger","value": "0" }, - {"type": "Punctuation","value": ".." }, - {"type": "Name","value": "board" }, - {"type": "Punctuation","value": "." }, - {"type": "Name","value": "height" }, - {"type": "Operator","value": ":" }, - {"type": "Text","value": "\n " }, - {"type": "CommentSingle","value": "// Flip a coin (so-to-speak)\n" }, - {"type": "Text","value": " " }, - {"type": "Keyword","value": "if" }, - {"type": "Text","value": " " }, - {"type": "Name","value": "random" }, - {"type": "Punctuation","value": "(" }, - {"type": "Name","value": "remaining" }, - {"type": "Punctuation","value": ")" }, - {"type": "Text","value": " " }, - {"type": "Operator","value": "<" }, - {"type": "Text","value": " " }, - {"type": "Name","value": "n" }, - {"type": "Operator","value": ":" }, - {"type": "Text","value": "\n " }, - {"type": "CommentSingle","value": "// create bomb square\n" }, - {"type": "Text","value": " " }, - {"type": "Name","value": "model" }, - {"type": "Operator","value": "::" }, - {"type": "Name","value": "Square" }, - {"type": "Text","value": " " }, - {"type": "Name","value": "s" }, - {"type": "Text","value": " " }, - {"type": "Operator","value": "=" }, - {"type": "Text","value": " " }, - {"type": "Name","value": "model" }, - {"type": "Operator","value": "::" }, - {"type": "Name","value": "HiddenSquare" }, - {"type": "Punctuation","value": "(" }, - {"type": "KeywordConstant","value": "true" }, - {"type": "Punctuation","value": "," }, - {"type": "KeywordConstant","value": "false" }, - {"type": "Punctuation","value": ")" }, - {"type": "Text","value": "\n " }, - {"type": "CommentSingle","value": "// Update board\n" }, - {"type": "Text","value": " " }, - {"type": "Name","value": "board" }, - {"type": "Text","value": " " }, - {"type": "Operator","value": "=" }, - {"type": "Text","value": " " }, - {"type": "Name","value": "model" }, - {"type": "Operator","value": "::" }, - {"type": "Name","value": "set_square" }, - {"type": "Punctuation","value": "(" }, - {"type": "Name","value": "board" }, - {"type": "Punctuation","value": ",(" }, - {"type": "Name","value": "uint" }, - {"type": "Punctuation","value": ")" }, - {"type": "Text","value": " " }, - {"type": "Name","value": "x" }, - {"type": "Punctuation","value": "," }, - {"type": "Text","value": " " }, - {"type": "Punctuation","value": "(" }, - {"type": "Name","value": "uint" }, - {"type": "Punctuation","value": ")" }, - {"type": "Text","value": " " }, - {"type": "Name","value": "y" }, - {"type": "Punctuation","value": "," }, - {"type": "Name","value": "s" }, - {"type": "Punctuation","value": ")" }, - {"type": "Text","value": "\n " }, - {"type": "CommentSingle","value": "// Reduce number of bombs to place\n" }, - {"type": "Text","value": " " }, - {"type": "Name","value": "n" }, - {"type": "Text","value": " " }, - {"type": "Operator","value": "=" }, - {"type": "Text","value": " " }, - {"type": "Name","value": "n" }, - {"type": "Text","value": " " }, - {"type": "Operator","value": "-" }, - {"type": "Text","value": " " }, - {"type": "LiteralNumberInteger","value": "1" }, - {"type": "Text","value": "\n " }, - {"type": "CommentSingle","value": "// Reduce remaining options\n" }, - {"type": "Text","value": " " }, - {"type": "Name","value": "remaining" }, - {"type": "Text","value": " " }, - {"type": "Operator","value": "=" }, - {"type": "Text","value": " " }, - {"type": "Name","value": "remaining" }, - {"type": "Text","value": " " }, - {"type": "Operator","value": "-" }, - {"type": "Text","value": " " }, - {"type": "LiteralNumberInteger","value": "1" }, - {"type": "Text","value": "\n " }, - {"type": "CommentSingle","value": "// return updated board\n" }, - {"type": "Text","value": " " }, - {"type": "Keyword","value": "return" }, - {"type": "Text","value": " " }, - {"type": "Name","value": "board" }, - {"type": "Text","value": "\n\n" }, - {"type": "CommentMultiline","value": "/**\n * Handle a mouse event on the canvas\n */" }, - {"type": "Text","value": "\n" }, - {"type": "KeywordDeclaration","value": "method" }, - {"type": "Text","value": " " }, - {"type": "Name","value": "onclick_handler" }, - {"type": "Punctuation","value": "(" }, - {"type": "Name","value": "MouseEvent" }, - {"type": "Text","value": " " }, - {"type": "Name","value": "e" }, - {"type": "Punctuation","value": "," }, - {"type": "Text","value": " " }, - {"type": "Operator","value": "&" }, - {"type": "Name","value": "view" }, - {"type": "Operator","value": "::" }, - {"type": "Name","value": "State" }, - {"type": "Text","value": " " }, - {"type": "Name","value": "state" }, - {"type": "Punctuation","value": "," }, - {"type": "Text","value": " " }, - {"type": "Name","value": "Window" }, - {"type": "Text","value": " " }, - {"type": "Name","value": "window" }, - {"type": "Punctuation","value": ")" }, - {"type": "Operator","value": ":" }, - {"type": "Text","value": "\n " }, - {"type": "CommentSingle","value": "// Convert from view to world coordinates\n" }, - {"type": "Text","value": " " }, - {"type": "Name","value": "uint" }, - {"type": "Text","value": " " }, - {"type": "Name","value": "x" }, - {"type": "Text","value": " " }, - {"type": "Operator","value": "=" }, - {"type": "Text","value": " " }, - {"type": "Name","value": "e" }, - {"type": "Operator","value": "->" }, - {"type": "Name","value": "offsetX" }, - {"type": "Text","value": " " }, - {"type": "Operator","value": "/" }, - {"type": "Text","value": " " }, - {"type": "Name","value": "state" }, - {"type": "Operator","value": "->" }, - {"type": "Name","value": "gridsize" }, - {"type": "Text","value": "\n " }, - {"type": "Name","value": "uint" }, - {"type": "Text","value": " " }, - {"type": "Name","value": "y" }, - {"type": "Text","value": " " }, - {"type": "Operator","value": "=" }, - {"type": "Text","value": " " }, - {"type": "Name","value": "e" }, - {"type": "Operator","value": "->" }, - {"type": "Name","value": "offsetY" }, - {"type": "Text","value": " " }, - {"type": "Operator","value": "/" }, - {"type": "Text","value": " " }, - {"type": "Name","value": "state" }, - {"type": "Operator","value": "->" }, - {"type": "Name","value": "gridsize" }, - {"type": "Text","value": "\n " }, - {"type": "CommentSingle","value": "// Update board\n" }, - {"type": "Text","value": " " }, - {"type": "Keyword","value": "if" }, - {"type": "Text","value": " " }, - {"type": "Name","value": "e" }, - {"type": "Operator","value": "->" }, - {"type": "Name","value": "shiftKey" }, - {"type": "Operator","value": ":" }, - {"type": "Text","value": "\n " }, - {"type": "Name","value": "state" }, - {"type": "Operator","value": "->" }, - {"type": "Name","value": "board" }, - {"type": "Text","value": " " }, - {"type": "Operator","value": "=" }, - {"type": "Text","value": " " }, - {"type": "Name","value": "model" }, - {"type": "Operator","value": "::" }, - {"type": "Name","value": "flag_square" }, - {"type": "Punctuation","value": "(" }, - {"type": "Name","value": "state" }, - {"type": "Operator","value": "->" }, - {"type": "Name","value": "board" }, - {"type": "Punctuation","value": "," }, - {"type": "Name","value": "x" }, - {"type": "Punctuation","value": "," }, - {"type": "Name","value": "y" }, - {"type": "Punctuation","value": ")" }, - {"type": "Text","value": "\n " }, - {"type": "Keyword","value": "else" }, - {"type": "Operator","value": ":" }, - {"type": "Text","value": "\n " }, - {"type": "Name","value": "state" }, - {"type": "Operator","value": "->" }, - {"type": "Name","value": "board" }, - {"type": "Text","value": " " }, - {"type": "Operator","value": "=" }, - {"type": "Text","value": " " }, - {"type": "Name","value": "model" }, - {"type": "Operator","value": "::" }, - {"type": "Name","value": "expose_square" }, - {"type": "Punctuation","value": "(" }, - {"type": "Name","value": "state" }, - {"type": "Operator","value": "->" }, - {"type": "Name","value": "board" }, - {"type": "Punctuation","value": "," }, - {"type": "Name","value": "x" }, - {"type": "Punctuation","value": "," }, - {"type": "Name","value": "y" }, - {"type": "Punctuation","value": ")" }, - {"type": "Text","value": "\n " }, - {"type": "CommentSingle","value": "// Render initial board\n" }, - {"type": "Text","value": " " }, - {"type": "Name","value": "view" }, - {"type": "Operator","value": "::" }, - {"type": "Name","value": "draw_board" }, - {"type": "Punctuation","value": "(" }, - {"type": "Operator","value": "*" }, - {"type": "Name","value": "state" }, - {"type": "Punctuation","value": ")" }, - {"type": "Text","value": "\n " }, - {"type": "CommentSingle","value": "// Finally determine game status\n" }, - {"type": "Text","value": " " }, - {"type": "Punctuation","value": "(" }, - {"type": "KeywordType","value": "bool" }, - {"type": "Text","value": " " }, - {"type": "Name","value": "gameOver" }, - {"type": "Punctuation","value": "," }, - {"type": "Text","value": " " }, - {"type": "KeywordType","value": "bool" }, - {"type": "Text","value": " " }, - {"type": "Name","value": "winner" }, - {"type": "Punctuation","value": ")" }, - {"type": "Text","value": " " }, - {"type": "Operator","value": "=" }, - {"type": "Text","value": " " }, - {"type": "Name","value": "model" }, - {"type": "Operator","value": "::" }, - {"type": "Name","value": "is_gameover" }, - {"type": "Punctuation","value": "(" }, - {"type": "Name","value": "state" }, - {"type": "Operator","value": "->" }, - {"type": "Name","value": "board" }, - {"type": "Punctuation","value": ")" }, - {"type": "Text","value": "\n " }, - {"type": "CommentSingle","value": "// Check whether game over\n" }, - {"type": "Text","value": " " }, - {"type": "Keyword","value": "if" }, - {"type": "Text","value": " " }, - {"type": "Name","value": "gameOver" }, - {"type": "Operator","value": ":" }, - {"type": "Text","value": "\n " }, - {"type": "CommentSingle","value": "// Yes, but win or lose?\n" }, - {"type": "Text","value": " " }, - {"type": "Keyword","value": "if" }, - {"type": "Text","value": " " }, - {"type": "Name","value": "winner" }, - {"type": "Operator","value": ":" }, - {"type": "Text","value": "\n " }, - {"type": "Name","value": "window" }, - {"type": "Operator","value": "->" }, - {"type": "Name","value": "alert" }, - {"type": "Punctuation","value": "(" }, - {"type": "Error","value": "\"" }, - {"type": "Name","value": "Well" }, - {"type": "Text","value": " " }, - {"type": "Name","value": "done" }, - {"type": "Text","value": " " }, - {"type": "Operator","value": "---" }, - {"type": "Text","value": " " }, - {"type": "Name","value": "You" }, - {"type": "Text","value": " " }, - {"type": "Name","value": "Found" }, - {"type": "Text","value": " " }, - {"type": "Keyword","value": "all" }, - {"type": "Text","value": " " }, - {"type": "Name","value": "the" }, - {"type": "Text","value": " " }, - {"type": "Name","value": "Mines" }, - {"type": "Operator","value": "!" }, - {"type": "Error","value": "\"" }, - {"type": "Punctuation","value": ")" }, - {"type": "Text","value": "\n " }, - {"type": "Keyword","value": "else" }, - {"type": "Operator","value": ":" }, - {"type": "Text","value": "\n " }, - {"type": "Name","value": "window" }, - {"type": "Operator","value": "->" }, - {"type": "Name","value": "alert" }, - {"type": "Punctuation","value": "(" }, - {"type": "Error","value": "\"" }, - {"type": "Name","value": "Game" }, - {"type": "Text","value": " " }, - {"type": "Name","value": "Over" }, - {"type": "Text","value": " " }, - {"type": "Operator","value": "---" }, - {"type": "Text","value": " " }, - {"type": "Name","value": "You" }, - {"type": "Text","value": " " }, - {"type": "Name","value": "Lost" }, - {"type": "Operator","value": "!" }, - {"type": "Error","value": "\"" }, - {"type": "Punctuation","value": ")" }, - {"type": "Text","value": "\n " }, - {"type": "CommentSingle","value": "// Done\n" }, - {"type": "Text","value": "\n" }, - {"type": "CommentMultiline","value": "/**\n * Create a new game of Minesweeper\n */" }, - {"type": "Text","value": "\n" }, - {"type": "Keyword","value": "public" }, - {"type": "Text","value": " " }, - {"type": "Keyword","value": "export" }, - {"type": "Text","value": " " }, - {"type": "KeywordDeclaration","value": "method" }, - {"type": "Text","value": " " }, - {"type": "Name","value": "main" }, - {"type": "Punctuation","value": "(" }, - {"type": "Name","value": "uint" }, - {"type": "Text","value": " " }, - {"type": "Name","value": "width" }, - {"type": "Punctuation","value": "," }, - {"type": "Text","value": " " }, - {"type": "Name","value": "uint" }, - {"type": "Text","value": " " }, - {"type": "Name","value": "height" }, - {"type": "Punctuation","value": "," }, - {"type": "Text","value": " " }, - {"type": "Name","value": "uint" }, - {"type": "Text","value": " " }, - {"type": "Name","value": "bombs" }, - {"type": "Punctuation","value": "," }, - {"type": "Text","value": " " }, - {"type": "Name","value": "Window" }, - {"type": "Text","value": " " }, - {"type": "Name","value": "window" }, - {"type": "Punctuation","value": "," }, - {"type": "Text","value": " " }, - {"type": "Name","value": "HTMLCanvasElement" }, - {"type": "Text","value": " " }, - {"type": "Name","value": "canvas" }, - {"type": "Punctuation","value": "," }, - {"type": "Text","value": " " }, - {"type": "Name","value": "HTMLImageElement" }, - {"type": "Punctuation","value": "[]" }, - {"type": "Text","value": " " }, - {"type": "Name","value": "images" }, - {"type": "Punctuation","value": ")" }, - {"type": "Text","value": "\n" }, - {"type": "CommentSingle","value": "// Requires at least 9 images\n" }, - {"type": "Keyword","value": "requires" }, - {"type": "Text","value": " " }, - {"type": "Operator","value": "|" }, - {"type": "Name","value": "images" }, - {"type": "Operator","value": "|" }, - {"type": "Text","value": " " }, - {"type": "Operator","value": "==" }, - {"type": "Text","value": " " }, - {"type": "LiteralNumberInteger","value": "13" }, - {"type": "Operator","value": ":" }, - {"type": "Text","value": "\n " }, - {"type": "Name","value": "Document" }, - {"type": "Text","value": " " }, - {"type": "Name","value": "document" }, - {"type": "Text","value": " " }, - {"type": "Operator","value": "=" }, - {"type": "Text","value": " " }, - {"type": "Name","value": "window" }, - {"type": "Operator","value": "->" }, - {"type": "Name","value": "document" }, - {"type": "Text","value": "\n " }, - {"type": "CommentSingle","value": "// NOTE: following should not be required!\n" }, - {"type": "Text","value": " " }, - {"type": "Name","value": "Element" }, - {"type": "Text","value": " " }, - {"type": "Name","value": "c" }, - {"type": "Text","value": " " }, - {"type": "Operator","value": "=" }, - {"type": "Text","value": " " }, - {"type": "Name","value": "document" }, - {"type": "Operator","value": "->" }, - {"type": "Name","value": "getElementById" }, - {"type": "Punctuation","value": "(" }, - {"type": "Error","value": "\"" }, - {"type": "Name","value": "myCanvas" }, - {"type": "Error","value": "\"" }, - {"type": "Punctuation","value": ")" }, - {"type": "Text","value": "\n " }, - {"type": "CommentSingle","value": "// Create a standard sized board\n" }, - {"type": "Text","value": " " }, - {"type": "Name","value": "model" }, - {"type": "Operator","value": "::" }, - {"type": "Name","value": "Board" }, - {"type": "Text","value": " " }, - {"type": "Name","value": "board" }, - {"type": "Text","value": " " }, - {"type": "Operator","value": "=" }, - {"type": "Text","value": " " }, - {"type": "Name","value": "model" }, - {"type": "Operator","value": "::" }, - {"type": "Name","value": "Board" }, - {"type": "Punctuation","value": "(" }, - {"type": "Name","value": "width" }, - {"type": "Punctuation","value": "," }, - {"type": "Name","value": "height" }, - {"type": "Punctuation","value": ")" }, - {"type": "Text","value": "\n " }, - {"type": "CommentSingle","value": "// Add bombs\n" }, - {"type": "Text","value": " " }, - {"type": "Name","value": "board" }, - {"type": "Text","value": " " }, - {"type": "Operator","value": "=" }, - {"type": "Text","value": " " }, - {"type": "Name","value": "add_random_bombs" }, - {"type": "Punctuation","value": "(" }, - {"type": "Name","value": "board" }, - {"type": "Punctuation","value": "," }, - {"type": "Name","value": "bombs" }, - {"type": "Punctuation","value": ")" }, - {"type": "Text","value": "\n " }, - {"type": "CommentSingle","value": "// Initialise the view state\n" }, - {"type": "Text","value": " " }, - {"type": "Operator","value": "&" }, - {"type": "Name","value": "view" }, - {"type": "Operator","value": "::" }, - {"type": "Name","value": "State" }, - {"type": "Text","value": " " }, - {"type": "Name","value": "state" }, - {"type": "Text","value": " " }, - {"type": "Operator","value": "=" }, - {"type": "Text","value": " " }, - {"type": "Keyword","value": "new" }, - {"type": "Text","value": " " }, - {"type": "Name","value": "view" }, - {"type": "Operator","value": "::" }, - {"type": "Name","value": "init" }, - {"type": "Punctuation","value": "(" }, - {"type": "Name","value": "document" }, - {"type": "Punctuation","value": "," }, - {"type": "Name","value": "canvas" }, - {"type": "Punctuation","value": "," }, - {"type": "Name","value": "board" }, - {"type": "Punctuation","value": "," }, - {"type": "Name","value": "images" }, - {"type": "Punctuation","value": ")" }, - {"type": "Text","value": "\n " }, - {"type": "CommentSingle","value": "// Render initial board\n" }, - {"type": "Text","value": " " }, - {"type": "Name","value": "view" }, - {"type": "Operator","value": "::" }, - {"type": "Name","value": "draw_board" }, - {"type": "Punctuation","value": "(" }, - {"type": "Operator","value": "*" }, - {"type": "Name","value": "state" }, - {"type": "Punctuation","value": ")" }, - {"type": "Text","value": "\n " }, - {"type": "CommentSingle","value": "// Configure mouse click listener\n" }, - {"type": "Text","value": " " }, - {"type": "Name","value": "c" }, - {"type": "Operator","value": "->" }, - {"type": "Name","value": "addEventListener" }, - {"type": "Punctuation","value": "(" }, - {"type": "Error","value": "\"" }, - {"type": "Name","value": "click" }, - {"type": "Error","value": "\"" }, - {"type": "Punctuation","value": "," }, - {"type": "Operator","value": "&" }, - {"type": "Punctuation","value": "(" }, - {"type": "Name","value": "MouseEvent" }, - {"type": "Text","value": " " }, - {"type": "Name","value": "e" }, - {"type": "Text","value": " " }, - {"type": "Operator","value": "->" }, - {"type": "Text","value": " " }, - {"type": "Name","value": "onclick_handler" }, - {"type": "Punctuation","value": "(" }, - {"type": "Name","value": "e"}, - {"type": "Punctuation","value": ","}, - {"type": "Name","value": "state"}, - {"type": "Punctuation","value": ","}, - {"type": "Name","value": "window"}, - {"type": "Punctuation","value": ")))"}, - {"type": "Text","value": "\n \n"} + {"type":"Text","value":"\n"}, + {"type":"KeywordDeclaration","value":"import"}, + {"type":"Text","value":" "}, + {"type":"Name","value":"uint"}, + {"type":"Text","value":" "}, + {"type":"KeywordDeclaration","value":"from"}, + {"type":"Text","value":" "}, + {"type":"Name","value":"std"}, + {"type":"Operator","value":"::"}, + {"type":"Name","value":"integer"}, + {"type":"Text","value":"\n"}, + {"type":"KeywordDeclaration","value":"import"}, + {"type":"Text","value":" "}, + {"type":"Name","value":"uinteger"}, + {"type":"Text","value":" "}, + {"type":"KeywordDeclaration","value":"from"}, + {"type":"Text","value":" "}, + {"type":"Name","value":"js"}, + {"type":"Operator","value":"::"}, + {"type":"Name","value":"core"}, + {"type":"Text","value":"\n"}, + {"type":"KeywordDeclaration","value":"import"}, + {"type":"Text","value":" "}, + {"type":"Name","value":"random"}, + {"type":"Text","value":" "}, + {"type":"KeywordDeclaration","value":"from"}, + {"type":"Text","value":" "}, + {"type":"Name","value":"js"}, + {"type":"Operator","value":"::"}, + {"type":"Name","value":"math"}, + {"type":"Text","value":"\n"}, + {"type":"KeywordDeclaration","value":"import"}, + {"type":"Text","value":" "}, + {"type":"Name","value":"Document"}, + {"type":"Punctuation","value":","}, + {"type":"Text","value":" "}, + {"type":"Name","value":"Window"}, + {"type":"Punctuation","value":","}, + {"type":"Text","value":" "}, + {"type":"Name","value":"CanvasRenderingContext2D"}, + {"type":"Text","value":" "}, + {"type":"KeywordDeclaration","value":"from"}, + {"type":"Text","value":" "}, + {"type":"Name","value":"w3c"}, + {"type":"Operator","value":"::"}, + {"type":"Name","value":"dom"}, + {"type":"Text","value":"\n"}, + {"type":"KeywordDeclaration","value":"import"}, + {"type":"Text","value":" "}, + {"type":"Name","value":"Element"}, + {"type":"Punctuation","value":","}, + {"type":"Name","value":"HTMLCanvasElement"}, + {"type":"Punctuation","value":","}, + {"type":"Text","value":" "}, + {"type":"Name","value":"HTMLImageElement"}, + {"type":"Punctuation","value":","}, + {"type":"Text","value":" "}, + {"type":"Name","value":"MouseEvent"}, + {"type":"Text","value":" "}, + {"type":"KeywordDeclaration","value":"from"}, + {"type":"Text","value":" "}, + {"type":"Name","value":"w3c"}, + {"type":"Operator","value":"::"}, + {"type":"Name","value":"dom"}, + {"type":"Text","value":"\n\n"}, + {"type":"KeywordDeclaration","value":"import"}, + {"type":"Text","value":" "}, + {"type":"Name","value":"model"}, + {"type":"Text","value":"\n"}, + {"type":"KeywordDeclaration","value":"import"}, + {"type":"Text","value":" "}, + {"type":"Name","value":"view"}, + {"type":"Text","value":"\n\n"}, + {"type":"CommentMultiline","value":"/**\n * Add a given number of bombs to the board.\n */"}, + {"type":"Text","value":"\n"}, + {"type":"KeywordDeclaration","value":"method"}, + {"type":"Text","value":" "}, + {"type":"Name","value":"add_random_bombs"}, + {"type":"Punctuation","value":"("}, + {"type":"Name","value":"model"}, + {"type":"Operator","value":"::"}, + {"type":"Name","value":"Board"}, + {"type":"Text","value":" "}, + {"type":"Name","value":"board"}, + {"type":"Punctuation","value":","}, + {"type":"Text","value":" "}, + {"type":"Name","value":"uint"}, + {"type":"Text","value":" "}, + {"type":"Name","value":"n"}, + {"type":"Punctuation","value":")"}, + {"type":"Text","value":" "}, + {"type":"Operator","value":"-\u003e"}, + {"type":"Text","value":" "}, + {"type":"Name","value":"model"}, + {"type":"Operator","value":"::"}, + {"type":"Name","value":"Board"}, + {"type":"Operator","value":":"}, + {"type":"Text","value":"\n "}, + {"type":"Name","value":"uinteger"}, + {"type":"Text","value":" "}, + {"type":"Name","value":"remaining"}, + {"type":"Text","value":" "}, + {"type":"Operator","value":"="}, + {"type":"Text","value":" "}, + {"type":"Operator","value":"|"}, + {"type":"Name","value":"board"}, + {"type":"Punctuation","value":"."}, + {"type":"Name","value":"squares"}, + {"type":"Operator","value":"|"}, + {"type":"Text","value":" \n "}, + {"type":"CommentSingle","value":"// Use Knuth's algorithm S\n"}, + {"type":"Text","value":" "}, + {"type":"Keyword","value":"for"}, + {"type":"Text","value":" "}, + {"type":"Name","value":"x"}, + {"type":"Text","value":" "}, + {"type":"Keyword","value":"in"}, + {"type":"Text","value":" "}, + {"type":"LiteralNumberInteger","value":"0"}, + {"type":"Punctuation","value":".."}, + {"type":"Name","value":"board"}, + {"type":"Punctuation","value":"."}, + {"type":"Name","value":"width"}, + {"type":"Operator","value":":"}, + {"type":"Text","value":"\n "}, + {"type":"Keyword","value":"for"}, + {"type":"Text","value":" "}, + {"type":"Name","value":"y"}, + {"type":"Text","value":" "}, + {"type":"Keyword","value":"in"}, + {"type":"Text","value":" "}, + {"type":"LiteralNumberInteger","value":"0"}, + {"type":"Punctuation","value":".."}, + {"type":"Name","value":"board"}, + {"type":"Punctuation","value":"."}, + {"type":"Name","value":"height"}, + {"type":"Operator","value":":"}, + {"type":"Text","value":"\n "}, + {"type":"CommentSingle","value":"// Flip a coin (so-to-speak)\n"}, + {"type":"Text","value":" "}, + {"type":"Keyword","value":"if"}, + {"type":"Text","value":" "}, + {"type":"Name","value":"random"}, + {"type":"Punctuation","value":"("}, + {"type":"Name","value":"remaining"}, + {"type":"Punctuation","value":")"}, + {"type":"Text","value":" "}, + {"type":"Operator","value":"\u003c"}, + {"type":"Text","value":" "}, + {"type":"Name","value":"n"}, + {"type":"Operator","value":":"}, + {"type":"Text","value":"\n "}, + {"type":"CommentSingle","value":"// create bomb square\n"}, + {"type":"Text","value":" "}, + {"type":"Name","value":"model"}, + {"type":"Operator","value":"::"}, + {"type":"Name","value":"Square"}, + {"type":"Text","value":" "}, + {"type":"Name","value":"s"}, + {"type":"Text","value":" "}, + {"type":"Operator","value":"="}, + {"type":"Text","value":" "}, + {"type":"Name","value":"model"}, + {"type":"Operator","value":"::"}, + {"type":"Name","value":"HiddenSquare"}, + {"type":"Punctuation","value":"("}, + {"type":"KeywordConstant","value":"true"}, + {"type":"Punctuation","value":","}, + {"type":"KeywordConstant","value":"false"}, + {"type":"Punctuation","value":")"}, + {"type":"Text","value":"\n "}, + {"type":"CommentSingle","value":"// Update board\n"}, + {"type":"Text","value":" "}, + {"type":"Name","value":"board"}, + {"type":"Text","value":" "}, + {"type":"Operator","value":"="}, + {"type":"Text","value":" "}, + {"type":"Name","value":"model"}, + {"type":"Operator","value":"::"}, + {"type":"Name","value":"set_square"}, + {"type":"Punctuation","value":"("}, + {"type":"Name","value":"board"}, + {"type":"Punctuation","value":",("}, + {"type":"Name","value":"uint"}, + {"type":"Punctuation","value":")"}, + {"type":"Text","value":" "}, + {"type":"Name","value":"x"}, + {"type":"Punctuation","value":","}, + {"type":"Text","value":" "}, + {"type":"Punctuation","value":"("}, + {"type":"Name","value":"uint"}, + {"type":"Punctuation","value":")"}, + {"type":"Text","value":" "}, + {"type":"Name","value":"y"}, + {"type":"Punctuation","value":","}, + {"type":"Name","value":"s"}, + {"type":"Punctuation","value":")"}, + {"type":"Text","value":"\n "}, + {"type":"CommentSingle","value":"// Reduce number of bombs to place\n"}, + {"type":"Text","value":" "}, + {"type":"Name","value":"n"}, + {"type":"Text","value":" "}, + {"type":"Operator","value":"="}, + {"type":"Text","value":" "}, + {"type":"Name","value":"n"}, + {"type":"Text","value":" "}, + {"type":"Operator","value":"-"}, + {"type":"Text","value":" "}, + {"type":"LiteralNumberInteger","value":"1"}, + {"type":"Text","value":"\n "}, + {"type":"CommentSingle","value":"// Reduce remaining options\n"}, + {"type":"Text","value":" "}, + {"type":"Name","value":"remaining"}, + {"type":"Text","value":" "}, + {"type":"Operator","value":"="}, + {"type":"Text","value":" "}, + {"type":"Name","value":"remaining"}, + {"type":"Text","value":" "}, + {"type":"Operator","value":"-"}, + {"type":"Text","value":" "}, + {"type":"LiteralNumberInteger","value":"1"}, + {"type":"Text","value":"\n "}, + {"type":"CommentSingle","value":"// return updated board\n"}, + {"type":"Text","value":" "}, + {"type":"Keyword","value":"return"}, + {"type":"Text","value":" "}, + {"type":"Name","value":"board"}, + {"type":"Text","value":"\n\n"}, + {"type":"CommentMultiline","value":"/**\n * Handle a mouse event on the canvas\n */"}, + {"type":"Text","value":"\n"}, + {"type":"KeywordDeclaration","value":"method"}, + {"type":"Text","value":" "}, + {"type":"Name","value":"onclick_handler"}, + {"type":"Punctuation","value":"("}, + {"type":"Name","value":"MouseEvent"}, + {"type":"Text","value":" "}, + {"type":"Name","value":"e"}, + {"type":"Punctuation","value":","}, + {"type":"Text","value":" "}, + {"type":"Operator","value":"\u0026"}, + {"type":"Name","value":"view"}, + {"type":"Operator","value":"::"}, + {"type":"Name","value":"State"}, + {"type":"Text","value":" "}, + {"type":"Name","value":"state"}, + {"type":"Punctuation","value":","}, + {"type":"Text","value":" "}, + {"type":"Name","value":"Window"}, + {"type":"Text","value":" "}, + {"type":"Name","value":"window"}, + {"type":"Punctuation","value":")"}, + {"type":"Operator","value":":"}, + {"type":"Text","value":"\n "}, + {"type":"CommentSingle","value":"// Convert from view to world coordinates\n"}, + {"type":"Text","value":" "}, + {"type":"Name","value":"uint"}, + {"type":"Text","value":" "}, + {"type":"Name","value":"x"}, + {"type":"Text","value":" "}, + {"type":"Operator","value":"="}, + {"type":"Text","value":" "}, + {"type":"Name","value":"e"}, + {"type":"Operator","value":"-\u003e"}, + {"type":"Name","value":"offsetX"}, + {"type":"Text","value":" "}, + {"type":"Operator","value":"/"}, + {"type":"Text","value":" "}, + {"type":"Name","value":"state"}, + {"type":"Operator","value":"-\u003e"}, + {"type":"Name","value":"gridsize"}, + {"type":"Text","value":"\n "}, + {"type":"Name","value":"uint"}, + {"type":"Text","value":" "}, + {"type":"Name","value":"y"}, + {"type":"Text","value":" "}, + {"type":"Operator","value":"="}, + {"type":"Text","value":" "}, + {"type":"Name","value":"e"}, + {"type":"Operator","value":"-\u003e"}, + {"type":"Name","value":"offsetY"}, + {"type":"Text","value":" "}, + {"type":"Operator","value":"/"}, + {"type":"Text","value":" "}, + {"type":"Name","value":"state"}, + {"type":"Operator","value":"-\u003e"}, + {"type":"Name","value":"gridsize"}, + {"type":"Text","value":"\n "}, + {"type":"CommentSingle","value":"// Update board\n"}, + {"type":"Text","value":" "}, + {"type":"Keyword","value":"if"}, + {"type":"Text","value":" "}, + {"type":"Name","value":"e"}, + {"type":"Operator","value":"-\u003e"}, + {"type":"Name","value":"shiftKey"}, + {"type":"Operator","value":":"}, + {"type":"Text","value":"\n "}, + {"type":"Name","value":"state"}, + {"type":"Operator","value":"-\u003e"}, + {"type":"Name","value":"board"}, + {"type":"Text","value":" "}, + {"type":"Operator","value":"="}, + {"type":"Text","value":" "}, + {"type":"Name","value":"model"}, + {"type":"Operator","value":"::"}, + {"type":"Name","value":"flag_square"}, + {"type":"Punctuation","value":"("}, + {"type":"Name","value":"state"}, + {"type":"Operator","value":"-\u003e"}, + {"type":"Name","value":"board"}, + {"type":"Punctuation","value":","}, + {"type":"Name","value":"x"}, + {"type":"Punctuation","value":","}, + {"type":"Name","value":"y"}, + {"type":"Punctuation","value":")"}, + {"type":"Text","value":"\n "}, + {"type":"Keyword","value":"else"}, + {"type":"Operator","value":":"}, + {"type":"Text","value":"\n "}, + {"type":"Name","value":"state"}, + {"type":"Operator","value":"-\u003e"}, + {"type":"Name","value":"board"}, + {"type":"Text","value":" "}, + {"type":"Operator","value":"="}, + {"type":"Text","value":" "}, + {"type":"Name","value":"model"}, + {"type":"Operator","value":"::"}, + {"type":"Name","value":"expose_square"}, + {"type":"Punctuation","value":"("}, + {"type":"Name","value":"state"}, + {"type":"Operator","value":"-\u003e"}, + {"type":"Name","value":"board"}, + {"type":"Punctuation","value":","}, + {"type":"Name","value":"x"}, + {"type":"Punctuation","value":","}, + {"type":"Name","value":"y"}, + {"type":"Punctuation","value":")"}, + {"type":"Text","value":"\n "}, + {"type":"CommentSingle","value":"// Render initial board\n"}, + {"type":"Text","value":" "}, + {"type":"Name","value":"view"}, + {"type":"Operator","value":"::"}, + {"type":"Name","value":"draw_board"}, + {"type":"Punctuation","value":"("}, + {"type":"Operator","value":"*"}, + {"type":"Name","value":"state"}, + {"type":"Punctuation","value":")"}, + {"type":"Text","value":"\n "}, + {"type":"CommentSingle","value":"// Finally determine game status\n"}, + {"type":"Text","value":" "}, + {"type":"Punctuation","value":"("}, + {"type":"KeywordType","value":"bool"}, + {"type":"Text","value":" "}, + {"type":"Name","value":"gameOver"}, + {"type":"Punctuation","value":","}, + {"type":"Text","value":" "}, + {"type":"KeywordType","value":"bool"}, + {"type":"Text","value":" "}, + {"type":"Name","value":"winner"}, + {"type":"Punctuation","value":")"}, + {"type":"Text","value":" "}, + {"type":"Operator","value":"="}, + {"type":"Text","value":" "}, + {"type":"Name","value":"model"}, + {"type":"Operator","value":"::"}, + {"type":"Name","value":"is_gameover"}, + {"type":"Punctuation","value":"("}, + {"type":"Name","value":"state"}, + {"type":"Operator","value":"-\u003e"}, + {"type":"Name","value":"board"}, + {"type":"Punctuation","value":")"}, + {"type":"Text","value":"\n "}, + {"type":"CommentSingle","value":"// Check whether game over\n"}, + {"type":"Text","value":" "}, + {"type":"Keyword","value":"if"}, + {"type":"Text","value":" "}, + {"type":"Name","value":"gameOver"}, + {"type":"Operator","value":":"}, + {"type":"Text","value":"\n "}, + {"type":"CommentSingle","value":"// Yes, but win or lose?\n"}, + {"type":"Text","value":" "}, + {"type":"Keyword","value":"if"}, + {"type":"Text","value":" "}, + {"type":"Name","value":"winner"}, + {"type":"Operator","value":":"}, + {"type":"Text","value":"\n "}, + {"type":"Name","value":"window"}, + {"type":"Operator","value":"-\u003e"}, + {"type":"Name","value":"alert"}, + {"type":"Punctuation","value":"("}, + {"type":"Error","value":"\""}, + {"type":"Name","value":"Well"}, + {"type":"Text","value":" "}, + {"type":"Name","value":"done"}, + {"type":"Text","value":" "}, + {"type":"Operator","value":"---"}, + {"type":"Text","value":" "}, + {"type":"Name","value":"You"}, + {"type":"Text","value":" "}, + {"type":"Name","value":"Found"}, + {"type":"Text","value":" "}, + {"type":"Keyword","value":"all"}, + {"type":"Text","value":" "}, + {"type":"Name","value":"the"}, + {"type":"Text","value":" "}, + {"type":"Name","value":"Mines"}, + {"type":"Operator","value":"!"}, + {"type":"Error","value":"\""}, + {"type":"Punctuation","value":")"}, + {"type":"Text","value":"\n "}, + {"type":"Keyword","value":"else"}, + {"type":"Operator","value":":"}, + {"type":"Text","value":"\n "}, + {"type":"Name","value":"window"}, + {"type":"Operator","value":"-\u003e"}, + {"type":"Name","value":"alert"}, + {"type":"Punctuation","value":"("}, + {"type":"Error","value":"\""}, + {"type":"Name","value":"Game"}, + {"type":"Text","value":" "}, + {"type":"Name","value":"Over"}, + {"type":"Text","value":" "}, + {"type":"Operator","value":"---"}, + {"type":"Text","value":" "}, + {"type":"Name","value":"You"}, + {"type":"Text","value":" "}, + {"type":"Name","value":"Lost"}, + {"type":"Operator","value":"!"}, + {"type":"Error","value":"\""}, + {"type":"Punctuation","value":")"}, + {"type":"Text","value":"\n "}, + {"type":"CommentSingle","value":"// Done\n"}, + {"type":"Text","value":"\n"}, + {"type":"CommentMultiline","value":"/**\n * Create a new game of Minesweeper\n */"}, + {"type":"Text","value":"\n"}, + {"type":"Keyword","value":"public"}, + {"type":"Text","value":" "}, + {"type":"Keyword","value":"export"}, + {"type":"Text","value":" "}, + {"type":"KeywordDeclaration","value":"method"}, + {"type":"Text","value":" "}, + {"type":"Name","value":"main"}, + {"type":"Punctuation","value":"("}, + {"type":"Name","value":"uint"}, + {"type":"Text","value":" "}, + {"type":"Name","value":"width"}, + {"type":"Punctuation","value":","}, + {"type":"Text","value":" "}, + {"type":"Name","value":"uint"}, + {"type":"Text","value":" "}, + {"type":"Name","value":"height"}, + {"type":"Punctuation","value":","}, + {"type":"Text","value":" "}, + {"type":"Name","value":"uint"}, + {"type":"Text","value":" "}, + {"type":"Name","value":"bombs"}, + {"type":"Punctuation","value":","}, + {"type":"Text","value":" "}, + {"type":"Name","value":"Window"}, + {"type":"Text","value":" "}, + {"type":"Name","value":"window"}, + {"type":"Punctuation","value":","}, + {"type":"Text","value":" "}, + {"type":"Name","value":"HTMLCanvasElement"}, + {"type":"Text","value":" "}, + {"type":"Name","value":"canvas"}, + {"type":"Punctuation","value":","}, + {"type":"Text","value":" "}, + {"type":"Name","value":"HTMLImageElement"}, + {"type":"Punctuation","value":"[]"}, + {"type":"Text","value":" "}, + {"type":"Name","value":"images"}, + {"type":"Punctuation","value":")"}, + {"type":"Text","value":"\n"}, + {"type":"CommentSingle","value":"// Requires at least 9 images\n"}, + {"type":"Keyword","value":"requires"}, + {"type":"Text","value":" "}, + {"type":"Operator","value":"|"}, + {"type":"Name","value":"images"}, + {"type":"Operator","value":"|"}, + {"type":"Text","value":" "}, + {"type":"Operator","value":"=="}, + {"type":"Text","value":" "}, + {"type":"LiteralNumberInteger","value":"13"}, + {"type":"Operator","value":":"}, + {"type":"Text","value":"\n "}, + {"type":"Name","value":"Document"}, + {"type":"Text","value":" "}, + {"type":"Name","value":"document"}, + {"type":"Text","value":" "}, + {"type":"Operator","value":"="}, + {"type":"Text","value":" "}, + {"type":"Name","value":"window"}, + {"type":"Operator","value":"-\u003e"}, + {"type":"Name","value":"document"}, + {"type":"Text","value":"\n "}, + {"type":"CommentSingle","value":"// NOTE: following should not be required!\n"}, + {"type":"Text","value":" "}, + {"type":"Name","value":"Element"}, + {"type":"Text","value":" "}, + {"type":"Name","value":"c"}, + {"type":"Text","value":" "}, + {"type":"Operator","value":"="}, + {"type":"Text","value":" "}, + {"type":"Name","value":"document"}, + {"type":"Operator","value":"-\u003e"}, + {"type":"Name","value":"getElementById"}, + {"type":"Punctuation","value":"("}, + {"type":"Error","value":"\""}, + {"type":"Name","value":"myCanvas"}, + {"type":"Error","value":"\""}, + {"type":"Punctuation","value":")"}, + {"type":"Text","value":"\n "}, + {"type":"CommentSingle","value":"// Create a standard sized board\n"}, + {"type":"Text","value":" "}, + {"type":"Name","value":"model"}, + {"type":"Operator","value":"::"}, + {"type":"Name","value":"Board"}, + {"type":"Text","value":" "}, + {"type":"Name","value":"board"}, + {"type":"Text","value":" "}, + {"type":"Operator","value":"="}, + {"type":"Text","value":" "}, + {"type":"Name","value":"model"}, + {"type":"Operator","value":"::"}, + {"type":"Name","value":"Board"}, + {"type":"Punctuation","value":"("}, + {"type":"Name","value":"width"}, + {"type":"Punctuation","value":","}, + {"type":"Name","value":"height"}, + {"type":"Punctuation","value":")"}, + {"type":"Text","value":"\n "}, + {"type":"CommentSingle","value":"// Add bombs\n"}, + {"type":"Text","value":" "}, + {"type":"Name","value":"board"}, + {"type":"Text","value":" "}, + {"type":"Operator","value":"="}, + {"type":"Text","value":" "}, + {"type":"Name","value":"add_random_bombs"}, + {"type":"Punctuation","value":"("}, + {"type":"Name","value":"board"}, + {"type":"Punctuation","value":","}, + {"type":"Name","value":"bombs"}, + {"type":"Punctuation","value":")"}, + {"type":"Text","value":"\n "}, + {"type":"CommentSingle","value":"// Initialise the view state\n"}, + {"type":"Text","value":" "}, + {"type":"Operator","value":"\u0026"}, + {"type":"Name","value":"view"}, + {"type":"Operator","value":"::"}, + {"type":"Name","value":"State"}, + {"type":"Text","value":" "}, + {"type":"Name","value":"state"}, + {"type":"Text","value":" "}, + {"type":"Operator","value":"="}, + {"type":"Text","value":" "}, + {"type":"Keyword","value":"new"}, + {"type":"Text","value":" "}, + {"type":"Name","value":"view"}, + {"type":"Operator","value":"::"}, + {"type":"Name","value":"init"}, + {"type":"Punctuation","value":"("}, + {"type":"Name","value":"document"}, + {"type":"Punctuation","value":","}, + {"type":"Name","value":"canvas"}, + {"type":"Punctuation","value":","}, + {"type":"Name","value":"board"}, + {"type":"Punctuation","value":","}, + {"type":"Name","value":"images"}, + {"type":"Punctuation","value":")"}, + {"type":"Text","value":"\n "}, + {"type":"CommentSingle","value":"// Render initial board\n"}, + {"type":"Text","value":" "}, + {"type":"Name","value":"view"}, + {"type":"Operator","value":"::"}, + {"type":"Name","value":"draw_board"}, + {"type":"Punctuation","value":"("}, + {"type":"Operator","value":"*"}, + {"type":"Name","value":"state"}, + {"type":"Punctuation","value":")"}, + {"type":"Text","value":"\n "}, + {"type":"CommentSingle","value":"// Configure mouse click listener\n"}, + {"type":"Text","value":" "}, + {"type":"Name","value":"c"}, + {"type":"Operator","value":"-\u003e"}, + {"type":"Name","value":"addEventListener"}, + {"type":"Punctuation","value":"("}, + {"type":"Error","value":"\""}, + {"type":"Name","value":"click"}, + {"type":"Error","value":"\""}, + {"type":"Punctuation","value":","}, + {"type":"Operator","value":"\u0026"}, + {"type":"Punctuation","value":"("}, + {"type":"Name","value":"MouseEvent"}, + {"type":"Text","value":" "}, + {"type":"Name","value":"e"}, + {"type":"Text","value":" "}, + {"type":"Operator","value":"-\u003e"}, + {"type":"Text","value":" "}, + {"type":"Name","value":"onclick_handler"}, + {"type":"Punctuation","value":"("}, + {"type":"Name","value":"e"}, + {"type":"Punctuation","value":","}, + {"type":"Name","value":"state"}, + {"type":"Punctuation","value":","}, + {"type":"Name","value":"window"}, + {"type":"Punctuation","value":")))"}, + {"type":"Text","value":"\n \n"} ]