mirror of https://github.com/ethereum/go-ethereum
parent
883810b533
commit
68e5568804
@ -0,0 +1,272 @@ |
||||
/* BASICS */ |
||||
|
||||
.CodeMirror { |
||||
/* Set height, width, borders, and global font properties here */ |
||||
font-family: monospace; |
||||
height: 300px; |
||||
} |
||||
.CodeMirror-scroll { |
||||
/* Set scrolling behaviour here */ |
||||
overflow: auto; |
||||
} |
||||
|
||||
/* PADDING */ |
||||
|
||||
.CodeMirror-lines { |
||||
padding: 4px 0; /* Vertical padding around content */ |
||||
} |
||||
.CodeMirror pre { |
||||
padding: 0 4px; /* Horizontal padding of content */ |
||||
} |
||||
|
||||
.CodeMirror-scrollbar-filler, .CodeMirror-gutter-filler { |
||||
background-color: white; /* The little square between H and V scrollbars */ |
||||
} |
||||
|
||||
/* GUTTER */ |
||||
|
||||
.CodeMirror-gutters { |
||||
border-right: 1px solid #ddd; |
||||
background-color: #f7f7f7; |
||||
white-space: nowrap; |
||||
} |
||||
.CodeMirror-linenumbers {} |
||||
.CodeMirror-linenumber { |
||||
padding: 0 3px 0 5px; |
||||
min-width: 20px; |
||||
text-align: right; |
||||
color: #999; |
||||
-moz-box-sizing: content-box; |
||||
box-sizing: content-box; |
||||
} |
||||
|
||||
/* CURSOR */ |
||||
|
||||
.CodeMirror div.CodeMirror-cursor { |
||||
border-left: 1px solid black; |
||||
} |
||||
/* Shown when moving in bi-directional text */ |
||||
.CodeMirror div.CodeMirror-secondarycursor { |
||||
border-left: 1px solid silver; |
||||
} |
||||
.CodeMirror.cm-keymap-fat-cursor div.CodeMirror-cursor { |
||||
width: auto; |
||||
border: 0; |
||||
background: #7e7; |
||||
} |
||||
/* Can style cursor different in overwrite (non-insert) mode */ |
||||
div.CodeMirror-overwrite div.CodeMirror-cursor {} |
||||
|
||||
.cm-tab { display: inline-block; } |
||||
|
||||
.CodeMirror-ruler { |
||||
border-left: 1px solid #ccc; |
||||
position: absolute; |
||||
} |
||||
|
||||
/* DEFAULT THEME */ |
||||
|
||||
.cm-s-default .cm-keyword {color: #708;} |
||||
.cm-s-default .cm-atom {color: #219;} |
||||
.cm-s-default .cm-number {color: #164;} |
||||
.cm-s-default .cm-def {color: #00f;} |
||||
.cm-s-default .cm-variable, |
||||
.cm-s-default .cm-punctuation, |
||||
.cm-s-default .cm-property, |
||||
.cm-s-default .cm-operator {} |
||||
.cm-s-default .cm-variable-2 {color: #05a;} |
||||
.cm-s-default .cm-variable-3 {color: #085;} |
||||
.cm-s-default .cm-comment {color: #a50;} |
||||
.cm-s-default .cm-string {color: #a11;} |
||||
.cm-s-default .cm-string-2 {color: #f50;} |
||||
.cm-s-default .cm-meta {color: #555;} |
||||
.cm-s-default .cm-qualifier {color: #555;} |
||||
.cm-s-default .cm-builtin {color: #30a;} |
||||
.cm-s-default .cm-bracket {color: #997;} |
||||
.cm-s-default .cm-tag {color: #170;} |
||||
.cm-s-default .cm-attribute {color: #00c;} |
||||
.cm-s-default .cm-header {color: blue;} |
||||
.cm-s-default .cm-quote {color: #090;} |
||||
.cm-s-default .cm-hr {color: #999;} |
||||
.cm-s-default .cm-link {color: #00c;} |
||||
|
||||
.cm-negative {color: #d44;} |
||||
.cm-positive {color: #292;} |
||||
.cm-header, .cm-strong {font-weight: bold;} |
||||
.cm-em {font-style: italic;} |
||||
.cm-link {text-decoration: underline;} |
||||
|
||||
.cm-s-default .cm-error {color: #f00;} |
||||
.cm-invalidchar {color: #f00;} |
||||
|
||||
div.CodeMirror span.CodeMirror-matchingbracket {color: #0f0;} |
||||
div.CodeMirror span.CodeMirror-nonmatchingbracket {color: #f22;} |
||||
.CodeMirror-activeline-background {background: #e8f2ff;} |
||||
|
||||
/* STOP */ |
||||
|
||||
/* The rest of this file contains styles related to the mechanics of |
||||
the editor. You probably shouldn't touch them. */ |
||||
|
||||
.CodeMirror { |
||||
line-height: 1; |
||||
position: relative; |
||||
overflow: hidden; |
||||
background: white; |
||||
color: black; |
||||
} |
||||
|
||||
.CodeMirror-scroll { |
||||
/* 30px is the magic margin used to hide the element's real scrollbars */ |
||||
/* See overflow: hidden in .CodeMirror */ |
||||
margin-bottom: -30px; margin-right: -30px; |
||||
padding-bottom: 30px; |
||||
height: 100%; |
||||
outline: none; /* Prevent dragging from highlighting the element */ |
||||
position: relative; |
||||
-moz-box-sizing: content-box; |
||||
box-sizing: content-box; |
||||
} |
||||
.CodeMirror-sizer { |
||||
position: relative; |
||||
border-right: 30px solid transparent; |
||||
-moz-box-sizing: content-box; |
||||
box-sizing: content-box; |
||||
} |
||||
|
||||
/* The fake, visible scrollbars. Used to force redraw during scrolling |
||||
before actuall scrolling happens, thus preventing shaking and |
||||
flickering artifacts. */ |
||||
.CodeMirror-vscrollbar, .CodeMirror-hscrollbar, .CodeMirror-scrollbar-filler, .CodeMirror-gutter-filler { |
||||
position: absolute; |
||||
z-index: 6; |
||||
display: none; |
||||
} |
||||
.CodeMirror-vscrollbar { |
||||
right: 0; top: 0; |
||||
overflow-x: hidden; |
||||
overflow-y: scroll; |
||||
} |
||||
.CodeMirror-hscrollbar { |
||||
bottom: 0; left: 0; |
||||
overflow-y: hidden; |
||||
overflow-x: scroll; |
||||
} |
||||
.CodeMirror-scrollbar-filler { |
||||
right: 0; bottom: 0; |
||||
} |
||||
.CodeMirror-gutter-filler { |
||||
left: 0; bottom: 0; |
||||
} |
||||
|
||||
.CodeMirror-gutters { |
||||
position: absolute; left: 0; top: 0; |
||||
padding-bottom: 30px; |
||||
z-index: 3; |
||||
} |
||||
.CodeMirror-gutter { |
||||
white-space: normal; |
||||
height: 100%; |
||||
-moz-box-sizing: content-box; |
||||
box-sizing: content-box; |
||||
padding-bottom: 30px; |
||||
margin-bottom: -32px; |
||||
display: inline-block; |
||||
/* Hack to make IE7 behave */ |
||||
*zoom:1; |
||||
*display:inline; |
||||
} |
||||
.CodeMirror-gutter-elt { |
||||
position: absolute; |
||||
cursor: default; |
||||
z-index: 4; |
||||
} |
||||
|
||||
.CodeMirror-lines { |
||||
cursor: text; |
||||
} |
||||
.CodeMirror pre { |
||||
/* Reset some styles that the rest of the page might have set */ |
||||
-moz-border-radius: 0; -webkit-border-radius: 0; border-radius: 0; |
||||
border-width: 0; |
||||
background: transparent; |
||||
font-family: inherit; |
||||
font-size: inherit; |
||||
margin: 0; |
||||
white-space: pre; |
||||
word-wrap: normal; |
||||
line-height: inherit; |
||||
color: inherit; |
||||
z-index: 2; |
||||
position: relative; |
||||
overflow: visible; |
||||
} |
||||
.CodeMirror-wrap pre { |
||||
word-wrap: break-word; |
||||
white-space: pre-wrap; |
||||
word-break: normal; |
||||
} |
||||
|
||||
.CodeMirror-linebackground { |
||||
position: absolute; |
||||
left: 0; right: 0; top: 0; bottom: 0; |
||||
z-index: 0; |
||||
} |
||||
|
||||
.CodeMirror-linewidget { |
||||
position: relative; |
||||
z-index: 2; |
||||
overflow: auto; |
||||
} |
||||
|
||||
.CodeMirror-widget {} |
||||
|
||||
.CodeMirror-wrap .CodeMirror-scroll { |
||||
overflow-x: hidden; |
||||
} |
||||
|
||||
.CodeMirror-measure { |
||||
position: absolute; |
||||
width: 100%; |
||||
height: 0; |
||||
overflow: hidden; |
||||
visibility: hidden; |
||||
} |
||||
.CodeMirror-measure pre { position: static; } |
||||
|
||||
.CodeMirror div.CodeMirror-cursor { |
||||
position: absolute; |
||||
border-right: none; |
||||
width: 0; |
||||
} |
||||
|
||||
div.CodeMirror-cursors { |
||||
visibility: hidden; |
||||
position: relative; |
||||
z-index: 1; |
||||
} |
||||
.CodeMirror-focused div.CodeMirror-cursors { |
||||
visibility: visible; |
||||
} |
||||
|
||||
.CodeMirror-selected { background: #d9d9d9; } |
||||
.CodeMirror-focused .CodeMirror-selected { background: #d7d4f0; } |
||||
.CodeMirror-crosshair { cursor: crosshair; } |
||||
|
||||
.cm-searching { |
||||
background: #ffa; |
||||
background: rgba(255, 255, 0, .4); |
||||
} |
||||
|
||||
/* IE7 hack to prevent it from returning funny offsetTops on the spans */ |
||||
.CodeMirror span { *vertical-align: text-bottom; } |
||||
|
||||
/* Used to force a border model for a node */ |
||||
.cm-force-border { padding-right: .1px; } |
||||
|
||||
@media print { |
||||
/* Hide the cursor when printing */ |
||||
.CodeMirror div.CodeMirror-cursors { |
||||
visibility: hidden; |
||||
} |
||||
} |
@ -0,0 +1,53 @@ |
||||
<!doctype> |
||||
<html> |
||||
<head> |
||||
<style type="text/css"> |
||||
html, body { |
||||
margin: 0; padding: 0; |
||||
min-height: 100%; |
||||
} |
||||
|
||||
#debugger { |
||||
height: 100%; |
||||
font-family: "Monaco" |
||||
} |
||||
#debugger .line { |
||||
overflow: none; |
||||
} |
||||
#debugger .col1, #debugger .col2 { |
||||
float: left; |
||||
padding: 3px; |
||||
} |
||||
#debugger .col1 { |
||||
width: 10px; |
||||
padding-left: 10px |
||||
-webkit-touch-callout: none; |
||||
-webkit-user-select: none; |
||||
-khtml-user-select: none; |
||||
-moz-user-select: none; |
||||
-ms-user-select: none; |
||||
user-select: none; |
||||
} |
||||
#debugger .col2 { |
||||
width: 90%; |
||||
} |
||||
.prompt { |
||||
color: "#5089D4"; |
||||
} |
||||
</style> |
||||
|
||||
</head> |
||||
|
||||
<body> |
||||
<div id="debugger"> |
||||
<div class="line"> |
||||
<div class="col1 prompt"> |
||||
> |
||||
</div> |
||||
<div class="col2" contenteditable> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
|
||||
</body> |
||||
</html> |
@ -0,0 +1,23 @@ |
||||
.cm-s-eclipse span.cm-meta {color: #FF1717;} |
||||
.cm-s-eclipse span.cm-keyword { line-height: 1em; font-weight: bold; color: #7F0055; } |
||||
.cm-s-eclipse span.cm-atom {color: #219;} |
||||
.cm-s-eclipse span.cm-number {color: #164;} |
||||
.cm-s-eclipse span.cm-def {color: #00f;} |
||||
.cm-s-eclipse span.cm-variable {color: black;} |
||||
.cm-s-eclipse span.cm-variable-2 {color: #0000C0;} |
||||
.cm-s-eclipse span.cm-variable-3 {color: #0000C0;} |
||||
.cm-s-eclipse span.cm-property {color: black;} |
||||
.cm-s-eclipse span.cm-operator {color: black;} |
||||
.cm-s-eclipse span.cm-comment {color: #3F7F5F;} |
||||
.cm-s-eclipse span.cm-string {color: #2A00FF;} |
||||
.cm-s-eclipse span.cm-string-2 {color: #f50;} |
||||
.cm-s-eclipse span.cm-qualifier {color: #555;} |
||||
.cm-s-eclipse span.cm-builtin {color: #30a;} |
||||
.cm-s-eclipse span.cm-bracket {color: #cc7;} |
||||
.cm-s-eclipse span.cm-tag {color: #170;} |
||||
.cm-s-eclipse span.cm-attribute {color: #00c;} |
||||
.cm-s-eclipse span.cm-link {color: #219;} |
||||
.cm-s-eclipse span.cm-error {color: #f00;} |
||||
|
||||
.cm-s-eclipse .CodeMirror-activeline-background {background: #e8f2ff !important;} |
||||
.cm-s-eclipse .CodeMirror-matchingbracket {outline:1px solid grey; color:black !important;} |
@ -0,0 +1,38 @@ |
||||
<!doctype> |
||||
<html> |
||||
<head> |
||||
<title>Mutan Editor</title> |
||||
<link rel="stylesheet" href="codemirror.css"> |
||||
<link rel="stylesheet" href="eclipse.css"> |
||||
<script src="lib/codemirror.js"></script> |
||||
<script src="lib/matchbrackets.js"></script> |
||||
<script src="lib/go.js"></script> |
||||
|
||||
<style type="text/css"> |
||||
html, body { |
||||
margin: 0; padding: 0; |
||||
} |
||||
|
||||
.CodeMirror { |
||||
height: 100%; |
||||
} |
||||
</style> |
||||
</head> |
||||
|
||||
<body> |
||||
<textarea id="editor"></textarea> |
||||
<script> |
||||
var textArea = document.querySelector("#editor") |
||||
var editor = CodeMirror.fromTextArea(textArea, { |
||||
theme: "eclipse", |
||||
mode: "text/html", |
||||
lineNumbers: true, |
||||
mode: "text/x-go", |
||||
indentUnit: 8, |
||||
tabSize: 8, |
||||
indentWithTabs: true, |
||||
}); |
||||
</script> |
||||
|
||||
</body> |
||||
</html> |
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,182 @@ |
||||
(function(mod) { |
||||
if (typeof exports == "object" && typeof module == "object") // CommonJS
|
||||
mod(require("../../lib/codemirror")); |
||||
else if (typeof define == "function" && define.amd) // AMD
|
||||
define(["../../lib/codemirror"], mod); |
||||
else // Plain browser env
|
||||
mod(CodeMirror); |
||||
})(function(CodeMirror) { |
||||
"use strict"; |
||||
|
||||
CodeMirror.defineMode("go", function(config) { |
||||
var indentUnit = config.indentUnit; |
||||
|
||||
var keywords = { |
||||
"break":true, "case":true, "chan":true, "const":true, "continue":true, |
||||
"default":true, "defer":true, "else":true, "fallthrough":true, "for":true, |
||||
"func":true, "go":true, "goto":true, "if":true, "import":true, |
||||
"interface":true, "map":true, "package":true, "range":true, "return":true, |
||||
"select":true, "struct":true, "switch":true, "type":true, "var":true, |
||||
"bool":true, "byte":true, "complex64":true, "complex128":true, |
||||
"float32":true, "float64":true, "int8":true, "int16":true, "int32":true, |
||||
"int64":true, "string":true, "uint8":true, "uint16":true, "uint32":true, |
||||
"uint64":true, "int":true, "uint":true, "uintptr":true, "big": true, |
||||
"main": true, "init": true, "this":true |
||||
}; |
||||
|
||||
var atoms = { |
||||
"true":true, "false":true, "iota":true, "nil":true, "append":true, |
||||
"cap":true, "close":true, "complex":true, "copy":true, "imag":true, |
||||
"len":true, "make":true, "new":true, "panic":true, "print":true, |
||||
"println":true, "real":true, "recover":true,
|
||||
}; |
||||
|
||||
var isOperatorChar = /[+\-*&^%:=<>!|\/]/; |
||||
|
||||
var curPunc; |
||||
|
||||
function tokenBase(stream, state) { |
||||
var ch = stream.next(); |
||||
if (ch == '"' || ch == "'" || ch == "`") { |
||||
state.tokenize = tokenString(ch); |
||||
return state.tokenize(stream, state); |
||||
} |
||||
if (/[\d\.]/.test(ch)) { |
||||
if (ch == ".") { |
||||
stream.match(/^[0-9]+([eE][\-+]?[0-9]+)?/); |
||||
} else if (ch == "0") { |
||||
stream.match(/^[xX][0-9a-fA-F]+/) || stream.match(/^0[0-7]+/); |
||||
} else { |
||||
stream.match(/^[0-9]*\.?[0-9]*([eE][\-+]?[0-9]+)?/); |
||||
} |
||||
return "number"; |
||||
} |
||||
if (/[\[\]{}\(\),;\:\.]/.test(ch)) { |
||||
curPunc = ch; |
||||
return null; |
||||
} |
||||
if (ch == "/") { |
||||
if (stream.eat("*")) { |
||||
state.tokenize = tokenComment; |
||||
return tokenComment(stream, state); |
||||
} |
||||
if (stream.eat("/")) { |
||||
stream.skipToEnd(); |
||||
return "comment"; |
||||
} |
||||
} |
||||
if (isOperatorChar.test(ch)) { |
||||
stream.eatWhile(isOperatorChar); |
||||
return "operator"; |
||||
} |
||||
stream.eatWhile(/[\w\$_]/); |
||||
var cur = stream.current(); |
||||
if (keywords.propertyIsEnumerable(cur)) { |
||||
if (cur == "case" || cur == "default") curPunc = "case"; |
||||
return "keyword"; |
||||
} |
||||
if (atoms.propertyIsEnumerable(cur)) return "atom"; |
||||
return "variable"; |
||||
} |
||||
|
||||
function tokenString(quote) { |
||||
return function(stream, state) { |
||||
var escaped = false, next, end = false; |
||||
while ((next = stream.next()) != null) { |
||||
if (next == quote && !escaped) {end = true; break;} |
||||
escaped = !escaped && next == "\\"; |
||||
} |
||||
if (end || !(escaped || quote == "`")) |
||||
state.tokenize = tokenBase; |
||||
return "string"; |
||||
}; |
||||
} |
||||
|
||||
function tokenComment(stream, state) { |
||||
var maybeEnd = false, ch; |
||||
while (ch = stream.next()) { |
||||
if (ch == "/" && maybeEnd) { |
||||
state.tokenize = tokenBase; |
||||
break; |
||||
} |
||||
maybeEnd = (ch == "*"); |
||||
} |
||||
return "comment"; |
||||
} |
||||
|
||||
function Context(indented, column, type, align, prev) { |
||||
this.indented = indented; |
||||
this.column = column; |
||||
this.type = type; |
||||
this.align = align; |
||||
this.prev = prev; |
||||
} |
||||
function pushContext(state, col, type) { |
||||
return state.context = new Context(state.indented, col, type, null, state.context); |
||||
} |
||||
function popContext(state) { |
||||
var t = state.context.type; |
||||
if (t == ")" || t == "]" || t == "}") |
||||
state.indented = state.context.indented; |
||||
return state.context = state.context.prev; |
||||
} |
||||
|
||||
// Interface
|
||||
|
||||
return { |
||||
startState: function(basecolumn) { |
||||
return { |
||||
tokenize: null, |
||||
context: new Context((basecolumn || 0) - indentUnit, 0, "top", false), |
||||
indented: 0, |
||||
startOfLine: true |
||||
}; |
||||
}, |
||||
|
||||
token: function(stream, state) { |
||||
var ctx = state.context; |
||||
if (stream.sol()) { |
||||
if (ctx.align == null) ctx.align = false; |
||||
state.indented = stream.indentation(); |
||||
state.startOfLine = true; |
||||
if (ctx.type == "case") ctx.type = "}"; |
||||
} |
||||
if (stream.eatSpace()) return null; |
||||
curPunc = null; |
||||
var style = (state.tokenize || tokenBase)(stream, state); |
||||
if (style == "comment") return style; |
||||
if (ctx.align == null) ctx.align = true; |
||||
|
||||
if (curPunc == "{") pushContext(state, stream.column(), "}"); |
||||
else if (curPunc == "[") pushContext(state, stream.column(), "]"); |
||||
else if (curPunc == "(") pushContext(state, stream.column(), ")"); |
||||
else if (curPunc == "case") ctx.type = "case"; |
||||
else if (curPunc == "}" && ctx.type == "}") ctx = popContext(state); |
||||
else if (curPunc == ctx.type) popContext(state); |
||||
state.startOfLine = false; |
||||
return style; |
||||
}, |
||||
|
||||
indent: function(state, textAfter) { |
||||
if (state.tokenize != tokenBase && state.tokenize != null) return 0; |
||||
var ctx = state.context, firstChar = textAfter && textAfter.charAt(0); |
||||
if (ctx.type == "case" && /^(?:case|default)\b/.test(textAfter)) { |
||||
state.context.type = "}"; |
||||
return ctx.indented; |
||||
} |
||||
var closing = firstChar == ctx.type; |
||||
if (ctx.align) return ctx.column + (closing ? 0 : 1); |
||||
else return ctx.indented + (closing ? 0 : indentUnit); |
||||
}, |
||||
|
||||
electricChars: "{}):", |
||||
fold: "brace", |
||||
blockCommentStart: "/*", |
||||
blockCommentEnd: "*/", |
||||
lineComment: "//" |
||||
}; |
||||
}); |
||||
|
||||
CodeMirror.defineMIME("text/x-go", "go"); |
||||
|
||||
}); |
@ -0,0 +1,117 @@ |
||||
(function(mod) { |
||||
if (typeof exports == "object" && typeof module == "object") // CommonJS
|
||||
mod(require("../../lib/codemirror")); |
||||
else if (typeof define == "function" && define.amd) // AMD
|
||||
define(["../../lib/codemirror"], mod); |
||||
else // Plain browser env
|
||||
mod(CodeMirror); |
||||
})(function(CodeMirror) { |
||||
var ie_lt8 = /MSIE \d/.test(navigator.userAgent) && |
||||
(document.documentMode == null || document.documentMode < 8); |
||||
|
||||
var Pos = CodeMirror.Pos; |
||||
|
||||
var matching = {"(": ")>", ")": "(<", "[": "]>", "]": "[<", "{": "}>", "}": "{<"}; |
||||
|
||||
function findMatchingBracket(cm, where, strict, config) { |
||||
var line = cm.getLineHandle(where.line), pos = where.ch - 1; |
||||
var match = (pos >= 0 && matching[line.text.charAt(pos)]) || matching[line.text.charAt(++pos)]; |
||||
if (!match) return null; |
||||
var dir = match.charAt(1) == ">" ? 1 : -1; |
||||
if (strict && (dir > 0) != (pos == where.ch)) return null; |
||||
var style = cm.getTokenTypeAt(Pos(where.line, pos + 1)); |
||||
|
||||
var found = scanForBracket(cm, Pos(where.line, pos + (dir > 0 ? 1 : 0)), dir, style || null, config); |
||||
if (found == null) return null; |
||||
return {from: Pos(where.line, pos), to: found && found.pos, |
||||
match: found && found.ch == match.charAt(0), forward: dir > 0}; |
||||
} |
||||
|
||||
// bracketRegex is used to specify which type of bracket to scan
|
||||
// should be a regexp, e.g. /[[\]]/
|
||||
//
|
||||
// Note: If "where" is on an open bracket, then this bracket is ignored.
|
||||
//
|
||||
// Returns false when no bracket was found, null when it reached
|
||||
// maxScanLines and gave up
|
||||
function scanForBracket(cm, where, dir, style, config) { |
||||
var maxScanLen = (config && config.maxScanLineLength) || 10000; |
||||
var maxScanLines = (config && config.maxScanLines) || 1000; |
||||
|
||||
var stack = []; |
||||
var re = config && config.bracketRegex ? config.bracketRegex : /[(){}[\]]/; |
||||
var lineEnd = dir > 0 ? Math.min(where.line + maxScanLines, cm.lastLine() + 1) |
||||
: Math.max(cm.firstLine() - 1, where.line - maxScanLines); |
||||
for (var lineNo = where.line; lineNo != lineEnd; lineNo += dir) { |
||||
var line = cm.getLine(lineNo); |
||||
if (!line) continue; |
||||
var pos = dir > 0 ? 0 : line.length - 1, end = dir > 0 ? line.length : -1; |
||||
if (line.length > maxScanLen) continue; |
||||
if (lineNo == where.line) pos = where.ch - (dir < 0 ? 1 : 0); |
||||
for (; pos != end; pos += dir) { |
||||
var ch = line.charAt(pos); |
||||
if (re.test(ch) && (style === undefined || cm.getTokenTypeAt(Pos(lineNo, pos + 1)) == style)) { |
||||
var match = matching[ch]; |
||||
if ((match.charAt(1) == ">") == (dir > 0)) stack.push(ch); |
||||
else if (!stack.length) return {pos: Pos(lineNo, pos), ch: ch}; |
||||
else stack.pop(); |
||||
} |
||||
} |
||||
} |
||||
return lineNo - dir == (dir > 0 ? cm.lastLine() : cm.firstLine()) ? false : null; |
||||
} |
||||
|
||||
function matchBrackets(cm, autoclear, config) { |
||||
// Disable brace matching in long lines, since it'll cause hugely slow updates
|
||||
var maxHighlightLen = cm.state.matchBrackets.maxHighlightLineLength || 1000; |
||||
var marks = [], ranges = cm.listSelections(); |
||||
for (var i = 0; i < ranges.length; i++) { |
||||
var match = ranges[i].empty() && findMatchingBracket(cm, ranges[i].head, false, config); |
||||
if (match && cm.getLine(match.from.line).length <= maxHighlightLen) { |
||||
var style = match.match ? "CodeMirror-matchingbracket" : "CodeMirror-nonmatchingbracket"; |
||||
marks.push(cm.markText(match.from, Pos(match.from.line, match.from.ch + 1), {className: style})); |
||||
if (match.to && cm.getLine(match.to.line).length <= maxHighlightLen) |
||||
marks.push(cm.markText(match.to, Pos(match.to.line, match.to.ch + 1), {className: style})); |
||||
} |
||||
} |
||||
|
||||
if (marks.length) { |
||||
// Kludge to work around the IE bug from issue #1193, where text
|
||||
// input stops going to the textare whever this fires.
|
||||
if (ie_lt8 && cm.state.focused) cm.display.input.focus(); |
||||
|
||||
var clear = function() { |
||||
cm.operation(function() { |
||||
for (var i = 0; i < marks.length; i++) marks[i].clear(); |
||||
}); |
||||
}; |
||||
if (autoclear) setTimeout(clear, 800); |
||||
else return clear; |
||||
} |
||||
} |
||||
|
||||
var currentlyHighlighted = null; |
||||
function doMatchBrackets(cm) { |
||||
cm.operation(function() { |
||||
if (currentlyHighlighted) {currentlyHighlighted(); currentlyHighlighted = null;} |
||||
currentlyHighlighted = matchBrackets(cm, false, cm.state.matchBrackets); |
||||
}); |
||||
} |
||||
|
||||
CodeMirror.defineOption("matchBrackets", false, function(cm, val, old) { |
||||
if (old && old != CodeMirror.Init) |
||||
cm.off("cursorActivity", doMatchBrackets); |
||||
if (val) { |
||||
cm.state.matchBrackets = typeof val == "object" ? val : {}; |
||||
cm.on("cursorActivity", doMatchBrackets); |
||||
} |
||||
}); |
||||
|
||||
CodeMirror.defineExtension("matchBrackets", function() {matchBrackets(this, true);}); |
||||
CodeMirror.defineExtension("findMatchingBracket", function(pos, strict, config){ |
||||
return findMatchingBracket(this, pos, strict, config); |
||||
}); |
||||
CodeMirror.defineExtension("scanForBracket", function(pos, dir, style, config){ |
||||
return scanForBracket(this, pos, dir, style, config); |
||||
}); |
||||
}); |
@ -0,0 +1,65 @@ |
||||
import QtQuick 2.0 |
||||
import QtWebKit 3.0 |
||||
import QtWebKit.experimental 1.0 |
||||
import QtQuick.Controls 1.0; |
||||
import QtQuick.Layouts 1.0; |
||||
import QtQuick.Window 2.1; |
||||
import Ethereum 1.0 |
||||
|
||||
ApplicationWindow { |
||||
id: window |
||||
title: "muted" |
||||
width: 900 |
||||
height: 600 |
||||
minimumHeight: 300 |
||||
|
||||
property alias url: webView.url |
||||
property alias debugUrl: debugView.url |
||||
property alias webView: webView |
||||
|
||||
|
||||
Item { |
||||
id: root |
||||
anchors.fill: parent |
||||
WebView { |
||||
objectName: "webView" |
||||
id: webView |
||||
anchors { |
||||
top: root.top |
||||
right: root.right |
||||
left: root.left |
||||
bottom: sizeGrip.top |
||||
} |
||||
} |
||||
|
||||
Rectangle { |
||||
id: sizeGrip |
||||
color: "gray" |
||||
height: 5 |
||||
anchors { |
||||
left: root.left |
||||
right: root.right |
||||
} |
||||
y: Math.round(root.height * 2 / 3) |
||||
|
||||
MouseArea { |
||||
anchors.fill: parent |
||||
drag.target: sizeGrip |
||||
drag.minimumY: 0 |
||||
drag.maximumY: root.height - sizeGrip.height |
||||
drag.axis: Drag.YAxis |
||||
} |
||||
} |
||||
|
||||
WebView { |
||||
id: debugView |
||||
objectName: "debugView" |
||||
anchors { |
||||
left: root.left |
||||
right: root.right |
||||
bottom: root.bottom |
||||
top: sizeGrip.bottom |
||||
} |
||||
} |
||||
} |
||||
} |
Loading…
Reference in new issue