From 23b7a9924b5f9460a091e97392dd00d3834e8cc6 Mon Sep 17 00:00:00 2001
From: "David R. Myers"
Date: Fri, 23 Oct 2020 15:12:03 -0400
Subject: [PATCH 001/412] Add WebAssembly to meta
---
mode/meta.js | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/mode/meta.js b/mode/meta.js
index d3efdc172f..c7738a514c 100644
--- a/mode/meta.js
+++ b/mode/meta.js
@@ -169,7 +169,8 @@
{name: "Z80", mime: "text/x-z80", mode: "z80", ext: ["z80"]},
{name: "mscgen", mime: "text/x-mscgen", mode: "mscgen", ext: ["mscgen", "mscin", "msc"]},
{name: "xu", mime: "text/x-xu", mode: "mscgen", ext: ["xu"]},
- {name: "msgenny", mime: "text/x-msgenny", mode: "mscgen", ext: ["msgenny"]}
+ {name: "msgenny", mime: "text/x-msgenny", mode: "mscgen", ext: ["msgenny"]},
+ {name: "WebAssembly", mime: "text/webassembly", mode: "wast", ext: ["wat", "wast"]},
];
// Ensure all modes have a mime property for backwards compatibility
for (var i = 0; i < CodeMirror.modeInfo.length; i++) {
From 264022ee4af4abca1c158944dc299a8faf8696d6 Mon Sep 17 00:00:00 2001
From: Marijn Haverbeke
Date: Mon, 26 Oct 2020 09:08:51 +0100
Subject: [PATCH 002/412] Mark version 5.58.2
---
AUTHORS | 3 +++
CHANGELOG.md | 8 ++++++++
doc/manual.html | 2 +-
doc/releases.html | 7 +++++++
index.html | 2 +-
package.json | 2 +-
src/edit/main.js | 2 +-
7 files changed, 22 insertions(+), 4 deletions(-)
diff --git a/AUTHORS b/AUTHORS
index bb017e9574..b8087133a8 100644
--- a/AUTHORS
+++ b/AUTHORS
@@ -208,6 +208,7 @@ David Barnett
David H. Bronke
David Mignot
David Pathakjee
+David R. Myers
David Rodrigues
David Santana
David Vázquez
@@ -524,6 +525,7 @@ Marijn Haverbeke
Mário Gonçalves
Mario Pietsch
Mark Anderson
+Mark Boyes
Mark Dalgleish
Mark Hamstra
Mark Lentczner
@@ -634,6 +636,7 @@ Nikolaj Kappler
Nikolay Kostov
nilp0inter
Nils Knappmeier
+Nina Pypchenko
Nisarg Jhaveri
nlwillia
noragrossman
diff --git a/CHANGELOG.md b/CHANGELOG.md
index d3e3fe4223..80200fc784 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,11 @@
+## 5.58.2 (2020-10-23)
+
+### Bug fixes
+
+Fix a bug where horizontally scrolling the cursor into view sometimes failed with a non-fixed gutter.
+
+[julia mode](https://codemirror.net/mode/julia/): Fix an infinite recursion bug.
+
## 5.58.1 (2020-09-23)
### Bug fixes
diff --git a/doc/manual.html b/doc/manual.html
index 42ab5491ed..1da41d3ccb 100644
--- a/doc/manual.html
+++ b/doc/manual.html
@@ -70,7 +70,7 @@
User manual and reference guide
- version 5.58.1
+ version 5.58.2
CodeMirror is a code-editor component that can be embedded in
diff --git a/doc/releases.html b/doc/releases.html
index 0b466970fc..bdf24ed2f7 100644
--- a/doc/releases.html
+++ b/doc/releases.html
@@ -30,6 +30,13 @@
Release notes and version history
Version 5.x
+ 23-10-2020: Version 5.58.2:
+
+
+ - Fix a bug where horizontally scrolling the cursor into view sometimes failed with a non-fixed gutter.
+ - julia mode: Fix an infinite recursion bug.
+
+
21-09-2020: Version 5.58.1:
diff --git a/index.html b/index.html
index ff27b925b7..6d41dcc79e 100644
--- a/index.html
+++ b/index.html
@@ -99,7 +99,7 @@ This is CodeMirror
- Get the current version:
5.58.1.
+ Get the current version:
5.58.2.
You can see the
code,
read the
release notes,
or study the
user manual.
diff --git a/package.json b/package.json
index ba8e7fc79d..2103e1c325 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "codemirror",
- "version": "5.58.1",
+ "version": "5.58.2",
"main": "lib/codemirror.js",
"style": "lib/codemirror.css",
"author": {
diff --git a/src/edit/main.js b/src/edit/main.js
index 4f9152d892..800ee766f2 100644
--- a/src/edit/main.js
+++ b/src/edit/main.js
@@ -66,4 +66,4 @@ import { addLegacyProps } from "./legacy.js"
addLegacyProps(CodeMirror)
-CodeMirror.version = "5.58.1"
+CodeMirror.version = "5.58.2"
From 138d1b75791f8bb0b9a07fd19cbc2bb81e13dd8f Mon Sep 17 00:00:00 2001
From: tophf
Date: Wed, 28 Oct 2020 21:30:38 +0300
Subject: [PATCH 003/412] [stylus mode] allow block comments
---
mode/stylus/stylus.js | 3 +++
1 file changed, 3 insertions(+)
diff --git a/mode/stylus/stylus.js b/mode/stylus/stylus.js
index 281118efee..eecc554bc0 100644
--- a/mode/stylus/stylus.js
+++ b/mode/stylus/stylus.js
@@ -722,6 +722,9 @@
return indent;
},
electricChars: "}",
+ blockCommentStart: "/*",
+ blockCommentEnd: "*/",
+ blockCommentContinue: " * ",
lineComment: "//",
fold: "indent"
};
From 4fddb355dead97ca7fc3e096ea5eb0ade62b306d Mon Sep 17 00:00:00 2001
From: Phil DeJarnett
Date: Thu, 29 Oct 2020 15:27:22 -0400
Subject: [PATCH 004/412] [xml-hint addon] Replace nested function with
function expression
---
addon/hint/xml-hint.js | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/addon/hint/xml-hint.js b/addon/hint/xml-hint.js
index 543d19b61c..2b3153124e 100644
--- a/addon/hint/xml-hint.js
+++ b/addon/hint/xml-hint.js
@@ -101,12 +101,12 @@
}
replaceToken = true;
}
- function returnHintsFromAtValues(atValues) {
+ var returnHintsFromAtValues = function(atValues) {
if (atValues)
for (var i = 0; i < atValues.length; ++i) if (!prefix || matches(atValues[i], prefix, matchInMiddle))
result.push(quote + atValues[i] + quote);
return returnHints();
- }
+ };
if (atValues && atValues.then) return atValues.then(returnHintsFromAtValues);
return returnHintsFromAtValues(atValues);
} else { // An attribute name
From 230cc2e3f70d3e4fc55617437fd4f4995e6817a5 Mon Sep 17 00:00:00 2001
From: iteriani
Date: Fri, 30 Oct 2020 00:39:51 -0700
Subject: [PATCH 005/412] [soy mode] Add support for Element Composition
Add support for Soy Element Composition. It has the syntax in the form of
<{foo()}>>
This adds support to pass through allowEmptyTag and to support this mode in closetag.
---
mode/htmlmixed/htmlmixed.js | 3 ++-
mode/soy/soy.js | 4 +++-
mode/soy/test.js | 16 ++++++++++++++++
mode/xml/xml.js | 4 ++--
4 files changed, 23 insertions(+), 4 deletions(-)
diff --git a/mode/htmlmixed/htmlmixed.js b/mode/htmlmixed/htmlmixed.js
index 8341ac8261..66a158274c 100644
--- a/mode/htmlmixed/htmlmixed.js
+++ b/mode/htmlmixed/htmlmixed.js
@@ -74,7 +74,8 @@
name: "xml",
htmlMode: true,
multilineTagIndentFactor: parserConfig.multilineTagIndentFactor,
- multilineTagIndentPastTag: parserConfig.multilineTagIndentPastTag
+ multilineTagIndentPastTag: parserConfig.multilineTagIndentPastTag,
+ allowMissingTagName: parserConfig.allowMissingTagName,
});
var tags = {};
diff --git a/mode/soy/soy.js b/mode/soy/soy.js
index d31c947eed..bd3d947145 100644
--- a/mode/soy/soy.js
+++ b/mode/soy/soy.js
@@ -16,6 +16,8 @@
"alias": { noEndTag: true },
"delpackage": { noEndTag: true },
"namespace": { noEndTag: true, soyState: "namespace-def" },
+ "@attribute": paramData,
+ "@attribute?": paramData,
"@param": paramData,
"@param?": paramData,
"@inject": paramData,
@@ -53,7 +55,7 @@
CodeMirror.defineMode("soy", function(config) {
var textMode = CodeMirror.getMode(config, "text/plain");
var modes = {
- html: CodeMirror.getMode(config, {name: "text/html", multilineTagIndentFactor: 2, multilineTagIndentPastTag: false}),
+ html: CodeMirror.getMode(config, {name: "text/html", multilineTagIndentFactor: 2, multilineTagIndentPastTag: false, allowMissingTagName: true}),
attributes: textMode,
text: textMode,
uri: textMode,
diff --git a/mode/soy/test.js b/mode/soy/test.js
index 57cd4be477..78faddb9aa 100644
--- a/mode/soy/test.js
+++ b/mode/soy/test.js
@@ -26,6 +26,10 @@
'[keyword {] [callee&variable index]([variable-2&error $list])[keyword }]' +
'[string "][tag&bracket />]');
+ MT('soy-element-composition-test',
+ '[tag&bracket <][keyword {][callee&variable foo]()[keyword }]',
+ '[tag&bracket >>]');
+
MT('namespace-test',
'[keyword {namespace] [variable namespace][keyword }]')
@@ -176,6 +180,18 @@
'[keyword {/template}]',
'');
+ MT('attribute-type',
+ '[keyword {template] [def .foo][keyword }]',
+ ' [keyword {@attribute] [def bar]: [type string][keyword }]',
+ '[keyword {/template}]',
+ '');
+
+ MT('attribute-type-optional',
+ '[keyword {template] [def .foo][keyword }]',
+ ' [keyword {@attribute] [def bar]: [type string][keyword }]',
+ '[keyword {/template}]',
+ '');
+
MT('state-variable-reference',
'[keyword {template] [def .foo][keyword }]',
' [keyword {@param] [def bar]:= [atom true][keyword }]',
diff --git a/mode/xml/xml.js b/mode/xml/xml.js
index 73c6e0e0dd..46806ac425 100644
--- a/mode/xml/xml.js
+++ b/mode/xml/xml.js
@@ -189,7 +189,7 @@ CodeMirror.defineMode("xml", function(editorConf, config_) {
function Context(state, tagName, startOfLine) {
this.prev = state.context;
- this.tagName = tagName;
+ this.tagName = tagName || "";
this.indent = state.indented;
this.startOfLine = startOfLine;
if (config.doNotIndent.hasOwnProperty(tagName) || (state.context && state.context.noIndent))
@@ -399,7 +399,7 @@ CodeMirror.defineMode("xml", function(editorConf, config_) {
xmlCurrentContext: function(state) {
var context = []
for (var cx = state.context; cx; cx = cx.prev)
- if (cx.tagName) context.push(cx.tagName)
+ context.push(cx.tagName)
return context.reverse()
}
};
From 8e7f6728bf1d36963fafdf997b12858f25d7711a Mon Sep 17 00:00:00 2001
From: Marijn Haverbeke
Date: Mon, 26 Oct 2020 09:08:36 +0100
Subject: [PATCH 006/412] Delay blur events during dragging and clicking
Issue #6427
---
src/display/focus.js | 9 ++++++---
src/edit/mouse_events.js | 10 ++++++----
2 files changed, 12 insertions(+), 7 deletions(-)
diff --git a/src/display/focus.js b/src/display/focus.js
index aa731b4353..0337327e12 100644
--- a/src/display/focus.js
+++ b/src/display/focus.js
@@ -4,19 +4,22 @@ import { addClass, rmClass } from "../util/dom.js"
import { signal } from "../util/event.js"
export function ensureFocus(cm) {
- if (!cm.state.focused) { cm.display.input.focus(); onFocus(cm) }
+ if (!cm.hasFocus()) {
+ cm.display.input.focus()
+ if (!cm.state.focused) onFocus(cm)
+ }
}
export function delayBlurEvent(cm) {
cm.state.delayingBlurEvent = true
setTimeout(() => { if (cm.state.delayingBlurEvent) {
cm.state.delayingBlurEvent = false
- onBlur(cm)
+ if (cm.state.focused) onBlur(cm)
} }, 100)
}
export function onFocus(cm, e) {
- if (cm.state.delayingBlurEvent) cm.state.delayingBlurEvent = false
+ if (cm.state.delayingBlurEvent && !cm.state.draggingText) cm.state.delayingBlurEvent = false
if (cm.options.readOnly == "nocursor") return
if (!cm.state.focused) {
diff --git a/src/edit/mouse_events.js b/src/edit/mouse_events.js
index 5fcc437021..1c820fdb6e 100644
--- a/src/edit/mouse_events.js
+++ b/src/edit/mouse_events.js
@@ -1,4 +1,4 @@
-import { delayBlurEvent, ensureFocus } from "../display/focus.js"
+import { delayBlurEvent, ensureFocus, onBlur } from "../display/focus.js"
import { operation } from "../display/operations.js"
import { visibleLines } from "../display/update_lines.js"
import { clipPos, cmp, maxPos, minPos, Pos } from "../line/pos.js"
@@ -149,6 +149,7 @@ function leftButtonStartDrag(cm, event, pos, behavior) {
let dragEnd = operation(cm, e => {
if (webkit) display.scroller.draggable = false
cm.state.draggingText = false
+ if (cm.state.delayingBlurEvent) delayBlurEvent(cm)
off(display.wrapper.ownerDocument, "mouseup", dragEnd)
off(display.wrapper.ownerDocument, "mousemove", mouseMove)
off(display.scroller, "dragstart", dragStart)
@@ -172,15 +173,15 @@ function leftButtonStartDrag(cm, event, pos, behavior) {
if (webkit) display.scroller.draggable = true
cm.state.draggingText = dragEnd
dragEnd.copy = !behavior.moveOnDrag
- // IE's approach to draggable
- if (display.scroller.dragDrop) display.scroller.dragDrop()
on(display.wrapper.ownerDocument, "mouseup", dragEnd)
on(display.wrapper.ownerDocument, "mousemove", mouseMove)
on(display.scroller, "dragstart", dragStart)
on(display.scroller, "drop", dragEnd)
- delayBlurEvent(cm)
+ cm.state.delayingBlurEvent = true
setTimeout(() => display.input.focus(), 20)
+ // IE's approach to draggable
+ if (display.scroller.dragDrop) display.scroller.dragDrop()
}
function rangeForUnit(cm, pos, unit) {
@@ -193,6 +194,7 @@ function rangeForUnit(cm, pos, unit) {
// Normal selection, as opposed to text dragging.
function leftButtonSelect(cm, event, start, behavior) {
+ if (ie) delayBlurEvent(cm)
let display = cm.display, doc = cm.doc
e_preventDefault(event)
From f006f3d867c62813309a6f16f5fc242092a73b7b Mon Sep 17 00:00:00 2001
From: Marijn Haverbeke
Date: Wed, 4 Nov 2020 16:30:32 +0100
Subject: [PATCH 007/412] Remove unused import
---
src/edit/mouse_events.js | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/edit/mouse_events.js b/src/edit/mouse_events.js
index 1c820fdb6e..401eadf431 100644
--- a/src/edit/mouse_events.js
+++ b/src/edit/mouse_events.js
@@ -1,4 +1,4 @@
-import { delayBlurEvent, ensureFocus, onBlur } from "../display/focus.js"
+import { delayBlurEvent, ensureFocus } from "../display/focus.js"
import { operation } from "../display/operations.js"
import { visibleLines } from "../display/update_lines.js"
import { clipPos, cmp, maxPos, minPos, Pos } from "../line/pos.js"
From 57ba96eb392401d209b63dd187f2f2c087f1885b Mon Sep 17 00:00:00 2001
From: Marijn Haverbeke
Date: Thu, 5 Nov 2020 09:03:33 +0100
Subject: [PATCH 008/412] Fix handling of insertAt option to addLineWidget
Issue #6460
---
src/model/line_widget.js | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/model/line_widget.js b/src/model/line_widget.js
index 5444d89df0..f94727e5f8 100644
--- a/src/model/line_widget.js
+++ b/src/model/line_widget.js
@@ -63,7 +63,7 @@ export function addLineWidget(doc, handle, node, options) {
changeLine(doc, handle, "widget", line => {
let widgets = line.widgets || (line.widgets = [])
if (widget.insertAt == null) widgets.push(widget)
- else widgets.splice(Math.min(widgets.length - 1, Math.max(0, widget.insertAt)), 0, widget)
+ else widgets.splice(Math.min(widgets.length, Math.max(0, widget.insertAt)), 0, widget)
widget.line = line
if (cm && !lineIsHidden(doc, line)) {
let aboveVisible = heightAtLine(line) < doc.scrollTop
From 6ba05b288eb2fb948653b597f6f7f11770bb9aef Mon Sep 17 00:00:00 2001
From: Marijn Haverbeke
Date: Thu, 12 Nov 2020 09:28:39 +0100
Subject: [PATCH 009/412] [shell mode] Add support for Bash-style heredoc
quoting
Closes #6468
---
mode/shell/shell.js | 15 +++++++++++++++
mode/shell/test.js | 15 +++++++++++----
2 files changed, 26 insertions(+), 4 deletions(-)
diff --git a/mode/shell/shell.js b/mode/shell/shell.js
index 5af12413b0..2bc1eaf948 100644
--- a/mode/shell/shell.js
+++ b/mode/shell/shell.js
@@ -70,6 +70,13 @@ CodeMirror.defineMode('shell', function() {
stream.eatWhile(/\w/);
return 'attribute';
}
+ if (ch == "<") {
+ let heredoc = stream.match(/^<-?\s+(.*)/)
+ if (heredoc) {
+ state.tokens.unshift(tokenHeredoc(heredoc[1]))
+ return 'string-2'
+ }
+ }
if (/\d/.test(ch)) {
stream.eatWhile(/\d/);
if(stream.eol() || !/\w/.test(stream.peek())) {
@@ -129,6 +136,14 @@ CodeMirror.defineMode('shell', function() {
return 'def';
};
+ function tokenHeredoc(delim) {
+ return function(stream, state) {
+ if (stream.sol() && stream.string == delim) state.tokens.shift()
+ stream.skipToEnd()
+ return "string-2"
+ }
+ }
+
function tokenize(stream, state) {
return (state.tokens[0] || tokenBase) (stream, state);
};
diff --git a/mode/shell/test.js b/mode/shell/test.js
index 7571d907de..237375d451 100644
--- a/mode/shell/test.js
+++ b/mode/shell/test.js
@@ -65,9 +65,16 @@
MT("strings in parens",
"[def FOO][operator =]([quote $(<][string \"][def $MYDIR][string \"][quote /myfile grep ][string 'hello$'][quote )])")
- MT ("string ending in dollar",
- '[def a][operator =][string "xyz$"]; [def b][operator =][string "y"]')
+ MT("string ending in dollar",
+ '[def a][operator =][string "xyz$"]; [def b][operator =][string "y"]')
- MT ("quote ending in dollar",
- "[quote $(echo a$)]")
+ MT("quote ending in dollar",
+ "[quote $(echo a$)]")
+
+ MT("heredoc",
+ "[builtin cat] [string-2 <<- end]",
+ "[string-2 content one]",
+ "[string-2 content two end]",
+ "[string-2 end]",
+ "[builtin echo]")
})();
From ffc17920ed39779f3a18b3f6333bbf6a2bc3a537 Mon Sep 17 00:00:00 2001
From: Christopher Wallis
Date: Thu, 12 Nov 2020 01:43:36 -0700
Subject: [PATCH 010/412] [soy mode] Add support for {@attribute *}
- forks the state at param-def to detect * as a type
---
mode/soy/soy.js | 5 +++++
mode/soy/test.js | 6 ++++++
2 files changed, 11 insertions(+)
diff --git a/mode/soy/soy.js b/mode/soy/soy.js
index bd3d947145..cac59bb3df 100644
--- a/mode/soy/soy.js
+++ b/mode/soy/soy.js
@@ -276,6 +276,11 @@
return null;
case "param-def":
+ if (match = stream.match(/^\*/)) {
+ state.soyState.pop();
+ state.soyState.push("param-type");
+ return "type";
+ }
if (match = stream.match(/^\w+/)) {
state.variables = prepend(state.variables, match[0]);
state.soyState.pop();
diff --git a/mode/soy/test.js b/mode/soy/test.js
index 78faddb9aa..8c764c7a2b 100644
--- a/mode/soy/test.js
+++ b/mode/soy/test.js
@@ -192,6 +192,12 @@
'[keyword {/template}]',
'');
+ MT('attribute-type-all',
+ '[keyword {template] [def .foo][keyword }]',
+ ' [keyword {@attribute] [type *][keyword }]',
+ '[keyword {/template}]',
+ '');
+
MT('state-variable-reference',
'[keyword {template] [def .foo][keyword }]',
' [keyword {@param] [def bar]:= [atom true][keyword }]',
From eb345ef70e75805bf7d7d02b9d87c30ec1db2937 Mon Sep 17 00:00:00 2001
From: Marijn Haverbeke
Date: Fri, 13 Nov 2020 10:06:33 +0100
Subject: [PATCH 011/412] Fix lint error
---
mode/shell/shell.js | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/mode/shell/shell.js b/mode/shell/shell.js
index 2bc1eaf948..2b0d8a91bc 100644
--- a/mode/shell/shell.js
+++ b/mode/shell/shell.js
@@ -71,7 +71,7 @@ CodeMirror.defineMode('shell', function() {
return 'attribute';
}
if (ch == "<") {
- let heredoc = stream.match(/^<-?\s+(.*)/)
+ var heredoc = stream.match(/^<-?\s+(.*)/)
if (heredoc) {
state.tokens.unshift(tokenHeredoc(heredoc[1]))
return 'string-2'
From dda3f9d6b8d2450b87b619ed5db761cb20b892b8 Mon Sep 17 00:00:00 2001
From: iteriani
Date: Fri, 13 Nov 2020 01:08:19 -0800
Subject: [PATCH 012/412] [soy mode] Natively support Soy Element Composition
* Add support for Soy Element Composition.
Add support for Soy Element Composition. It has the syntax in the form of
<{foo()}>>
This adds support to pass through allowEmptyTag and to support this mode in closetag.
* Disable allowMissingTagName and handle Soy Element Composition directly.
Disable allowMissingTagName and handle Soy Element Composition directly. This also adds a case in closetag.js to handle autocompletes for soy element composition.
Right now, if you were to do something like
<{foo()}>
it would autocomplet with . This change makes it autocomplete with >
---
addon/edit/closetag.js | 5 +++--
mode/soy/soy.js | 20 ++++++++++++++++++++
mode/soy/test.js | 9 +++++++--
3 files changed, 30 insertions(+), 4 deletions(-)
diff --git a/addon/edit/closetag.js b/addon/edit/closetag.js
index 8689765eec..7c22a50ecf 100644
--- a/addon/edit/closetag.js
+++ b/addon/edit/closetag.js
@@ -128,9 +128,10 @@
replacement = head + "style";
} else {
var context = inner.mode.xmlCurrentContext && inner.mode.xmlCurrentContext(state)
- if (!context || (context.length && closingTagExists(cm, context, context[context.length - 1], pos)))
+ var top = context.length ? context[context.length - 1] : ""
+ if (!context || (context.length && closingTagExists(cm, context, top, pos)))
return CodeMirror.Pass;
- replacement = head + context[context.length - 1]
+ replacement = head + top
}
if (cm.getLine(pos.line).charAt(tok.end) != ">") replacement += ">";
replacements[i] = replacement;
diff --git a/mode/soy/soy.js b/mode/soy/soy.js
index cac59bb3df..17bafcd932 100644
--- a/mode/soy/soy.js
+++ b/mode/soy/soy.js
@@ -498,6 +498,17 @@
}
return expression(stream, state);
+ case "template-call-expression":
+ if (stream.match(/^([\w-?]+)(?==)/)) {
+ return "attribute";
+ } else if (stream.eat('>')) {
+ state.soyState.pop();
+ return "keyword";
+ } else if (stream.eat('/>')) {
+ state.soyState.pop();
+ return "keyword";
+ }
+ return expression(stream, state);
case "literal":
if (stream.match(/^(?=\{\/literal})/)) {
state.soyState.pop();
@@ -563,6 +574,15 @@
state.soyState.push("import");
state.indent += 2 * config.indentUnit;
return "keyword";
+ } else if (match = stream.match(/^<\{/)) {
+ state.soyState.push("template-call-expression");
+ state.tag = "print";
+ state.indent += 2 * config.indentUnit;
+ state.soyState.push("tag");
+ return "keyword";
+ } else if (match = stream.match(/^<\/>/)) {
+ state.indent -= 2 * config.indentUnit;
+ return "keyword";
}
return tokenUntil(stream, state, /\{|\s+\/\/|\/\*/);
diff --git a/mode/soy/test.js b/mode/soy/test.js
index 8c764c7a2b..ae13158720 100644
--- a/mode/soy/test.js
+++ b/mode/soy/test.js
@@ -27,8 +27,13 @@
'[string "][tag&bracket />]');
MT('soy-element-composition-test',
- '[tag&bracket <][keyword {][callee&variable foo]()[keyword }]',
- '[tag&bracket >>]');
+ '[keyword <{][callee&variable foo]()[keyword }]',
+ '[keyword >>]');
+
+ MT('soy-element-composition-attribute-test',
+ '[keyword <{][callee&variable foo]()[keyword }]',
+ '[attribute class]=[string "Foo"]',
+ '[keyword >>]');
MT('namespace-test',
'[keyword {namespace] [variable namespace][keyword }]')
From 37f7d7b00b674c4ebf380855d77f822829a8b76b Mon Sep 17 00:00:00 2001
From: Hendrik Erz
Date: Sat, 14 Nov 2020 20:23:25 +0100
Subject: [PATCH 013/412] [show-hint addon] Document all options
---
doc/manual.html | 25 +++++++++++++++++++++++--
1 file changed, 23 insertions(+), 2 deletions(-)
diff --git a/doc/manual.html b/doc/manual.html
index 1da41d3ccb..2ba7c732f2 100644
--- a/doc/manual.html
+++ b/doc/manual.html
@@ -2700,8 +2700,8 @@ Addons
Defines editor.showHint, which takes an optional
options object, and pops up a widget that allows the user to
select a completion. Finding hints is done with a hinting
- functions (the hint option), which is a function
- that take an editor instance and options object, and return
+ function (the hint option). This function
+ takes an editor instance and an options object, and returns
a {list, from, to} object, where list
is an array of strings or objects (the completions),
and from and to give the start and end
@@ -2771,9 +2771,22 @@ Addons
alignWithWord: boolean
- Whether the pop-up should be horizontally aligned with the
start of the word (true, default), or with the cursor (false).
+ closeCharacters: RegExp
+ - A regular expression object used to match characters which
+ cause the pop up to be closed (default:
/[\s()\[\]{};:>,]/).
+ If the user types one of these characters, the pop up will close, and
+ the endCompletion event is fired on the editor instance.
closeOnUnfocus: boolean
- When enabled (which is the default), the pop-up will close
when the editor is unfocused.
+ completeOnSingleClick: boolean
+ - Whether a single click on a list item suffices to trigger the
+ completion (which is the default), or if the user has to use a
+ doubleclick.
+ container: Element|null
+ - Can be used to define a custom container for the widget. The default
+ is
null, in which case the body-element will
+ be used.
customKeys: keymap
- Allows you to provide a custom key map of keys to be active
when the pop-up is active. The handlers will be called with an
@@ -2809,6 +2822,14 @@
Addons
"close" ()
- Fired when the completion is finished.
+ The following events will be fired on the editor instance during
+ completion:
+
+ "endCompletion" ()
+ - Fired when the pop-up is being closed programmatically, e.g., when
+ the user types a character which matches the
+
closeCharacters option.
+
This addon depends on styles
from addon/hint/show-hint.css. Check
out the demo for an
From 097d7c957c7d4988a942d11c0ac681f004ba0e8a Mon Sep 17 00:00:00 2001
From: Marijn Haverbeke
Date: Mon, 16 Nov 2020 21:58:04 +0100
Subject: [PATCH 014/412] [html-hint addon] Add dialog tag
Closes #6474
---
addon/hint/html-hint.js | 1 +
1 file changed, 1 insertion(+)
diff --git a/addon/hint/html-hint.js b/addon/hint/html-hint.js
index d0cca4f6a2..9878eca6ef 100644
--- a/addon/hint/html-hint.js
+++ b/addon/hint/html-hint.js
@@ -98,6 +98,7 @@
dfn: s,
dir: s,
div: s,
+ dialog: { attrs: { open: null } },
dl: s,
dt: s,
em: s,
From 12512d3ed0014696a64fe5d6bee2e0e5259a4861 Mon Sep 17 00:00:00 2001
From: erosman
Date: Tue, 17 Nov 2020 14:23:54 +0330
Subject: [PATCH 015/412] [javascript-lint addon] Add comment noting dependency
Added note on dependency on jshint.js
---
addon/lint/javascript-lint.js | 2 ++
1 file changed, 2 insertions(+)
diff --git a/addon/lint/javascript-lint.js b/addon/lint/javascript-lint.js
index cc132d7f82..e5bc752308 100644
--- a/addon/lint/javascript-lint.js
+++ b/addon/lint/javascript-lint.js
@@ -1,6 +1,8 @@
// CodeMirror, copyright (c) by Marijn Haverbeke and others
// Distributed under an MIT license: https://codemirror.net/LICENSE
+// Depends on jshint.js from https://github.com/jshint/jshint
+
(function(mod) {
if (typeof exports == "object" && typeof module == "object") // CommonJS
mod(require("../../lib/codemirror"));
From 0e6548686356d58504638c2bea95d403a9e53cde Mon Sep 17 00:00:00 2001
From: Marijn Haverbeke
Date: Wed, 18 Nov 2020 07:55:38 +0100
Subject: [PATCH 016/412] Fix focus state confusion in drag handler
Issue #6480
---
mode/clike/clike.js | 8 ++++----
src/edit/mouse_events.js | 5 ++++-
2 files changed, 8 insertions(+), 5 deletions(-)
diff --git a/mode/clike/clike.js b/mode/clike/clike.js
index 37da2ec964..2154f1d2df 100644
--- a/mode/clike/clike.js
+++ b/mode/clike/clike.js
@@ -82,15 +82,15 @@ CodeMirror.defineMode("clike", function(config, parserConfig) {
state.tokenize = tokenString(ch);
return state.tokenize(stream, state);
}
- if (isPunctuationChar.test(ch)) {
- curPunc = ch;
- return null;
- }
if (numberStart.test(ch)) {
stream.backUp(1)
if (stream.match(number)) return "number"
stream.next()
}
+ if (isPunctuationChar.test(ch)) {
+ curPunc = ch;
+ return null;
+ }
if (ch == "/") {
if (stream.eat("*")) {
state.tokenize = tokenComment;
diff --git a/src/edit/mouse_events.js b/src/edit/mouse_events.js
index 401eadf431..b5d0b5a64e 100644
--- a/src/edit/mouse_events.js
+++ b/src/edit/mouse_events.js
@@ -149,7 +149,10 @@ function leftButtonStartDrag(cm, event, pos, behavior) {
let dragEnd = operation(cm, e => {
if (webkit) display.scroller.draggable = false
cm.state.draggingText = false
- if (cm.state.delayingBlurEvent) delayBlurEvent(cm)
+ if (cm.state.delayingBlurEvent) {
+ if (cm.hasFocus()) cm.state.delayingBlurEvent = false
+ else delayBlurEvent(cm)
+ }
off(display.wrapper.ownerDocument, "mouseup", dragEnd)
off(display.wrapper.ownerDocument, "mousemove", mouseMove)
off(display.scroller, "dragstart", dragStart)
From 5d2feacfc89aab7e9b973ec59627b9def1f63d77 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Marc=20Esp=C3=ADn?=
Date: Wed, 18 Nov 2020 13:27:20 +0100
Subject: [PATCH 017/412] [real-world uses] Add Graviton Editor
---
doc/realworld.html | 1 +
1 file changed, 1 insertion(+)
diff --git a/doc/realworld.html b/doc/realworld.html
index da6182515e..5da12e2c48 100644
--- a/doc/realworld.html
+++ b/doc/realworld.html
@@ -96,6 +96,7 @@ CodeMirror real-world uses
- Go language tour
- Google Apps Script
- Graphit (function graphing)
+ - Graviton Editor (Cross-platform and modern-looking code editor)
- HackMD (Realtime collaborative markdown notes on all platforms)
- Handcraft (HTML prototyping)
- Hawkee
From 0630b63d94ba1b1f79ae89577ec1985f5e277025 Mon Sep 17 00:00:00 2001
From: Marijn Haverbeke
Date: Thu, 19 Nov 2020 09:29:46 +0100
Subject: [PATCH 018/412] [placeholder addon] Further fix composition handling
Closes #6479
---
addon/display/placeholder.js | 11 ++++++-----
1 file changed, 6 insertions(+), 5 deletions(-)
diff --git a/addon/display/placeholder.js b/addon/display/placeholder.js
index 89bb93f378..cfb8341db2 100644
--- a/addon/display/placeholder.js
+++ b/addon/display/placeholder.js
@@ -50,11 +50,12 @@
function onComposition(cm) {
setTimeout(function() {
- var empty = false, input = cm.getInputField()
- if (input.nodeName == "TEXTAREA")
- empty = !input.value
- else if (cm.lineCount() == 1)
- empty = !/[^\u200b]/.test(input.querySelector(".CodeMirror-line").textContent)
+ var empty = false
+ if (cm.lineCount() == 1) {
+ var input = cm.getInputField()
+ empty = input.nodeName == "TEXTAREA" ? !cm.getLine(0).length
+ : !/[^\u200b]/.test(input.querySelector(".CodeMirror-line").textContent)
+ }
if (empty) setPlaceholder(cm)
else clearPlaceholder(cm)
}, 20)
From a53e86069bc06410ff477a8a5849a5abd26f983a Mon Sep 17 00:00:00 2001
From: Marijn Haverbeke
Date: Thu, 19 Nov 2020 09:38:15 +0100
Subject: [PATCH 019/412] Mark version 5.58.3
---
AUTHORS | 5 +++++
CHANGELOG.md | 12 ++++++++++++
doc/manual.html | 2 +-
doc/releases.html | 9 +++++++++
index.html | 2 +-
package.json | 2 +-
src/edit/main.js | 2 +-
7 files changed, 30 insertions(+), 4 deletions(-)
diff --git a/AUTHORS b/AUTHORS
index b8087133a8..33d819ed24 100644
--- a/AUTHORS
+++ b/AUTHORS
@@ -251,6 +251,7 @@ Eric Allam
Eric Bogard
Erik Demaine
Erik Welander
+erosman
eustas
Evan Minsk
Fabien Dubosson
@@ -326,6 +327,7 @@ Heanes
Hector Oswaldo Caballero
Hein Htat
Hélio
+Hendrik Erz
Hendrik Wallbaum
Henrik Haugbølle
Herculano Campos
@@ -353,6 +355,7 @@ Ilya Zverev
Ingo Richter
Intervue
Irakli Gozalishvili
+iteriani
Ivan Kurnosov
Ivoah
Jack Douglas
@@ -517,6 +520,7 @@ Manuel Rego Casasnovas
Marat Dreizin
Marcel Gerber
Marcelo Camargo
+Marc Espín
Marco Aurélio
Marco Munizaga
Marcus Bointon
@@ -681,6 +685,7 @@ Peter Flynn
peterkroon
Peter Kroon
Peter László
+Phil DeJarnett
Philipp A
Philipp Markovics
Philip Stadermann
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 80200fc784..2b00dbd80e 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,15 @@
+## 5.58.3 (2020-11-19)
+
+### Bug fixes
+
+Suppress quick-firing of blur-focus events when dragging and clicking on Internet Explorer.
+
+Fix the `insertAt` option to `addLineWidget` to actually allow the widget to be placed after all widgets for the line.
+
+[soy mode](https://codemirror.net/mode/soy/): Support `@Attribute` and element composition.
+
+[shell mode](https://codemirror.net/mode/shell/): Support heredoc quoting.
+
## 5.58.2 (2020-10-23)
### Bug fixes
diff --git a/doc/manual.html b/doc/manual.html
index 2ba7c732f2..89a6328e6d 100644
--- a/doc/manual.html
+++ b/doc/manual.html
@@ -70,7 +70,7 @@
User manual and reference guide
- version 5.58.2
+ version 5.58.3
CodeMirror is a code-editor component that can be embedded in
diff --git a/doc/releases.html b/doc/releases.html
index bdf24ed2f7..1b4f9a7976 100644
--- a/doc/releases.html
+++ b/doc/releases.html
@@ -30,6 +30,15 @@
Release notes and version history
Version 5.x
+ 19-11-2020: Version 5.58.3:
+
+
+ - Suppress quick-firing of blur-focus events when dragging and clicking on Internet Explorer.
+ - Fix the
insertAt option to addLineWidget to actually allow the widget to be placed after all widgets for the line.
+ - soy mode: Support
@Attribute and element composition.
+ - shell mode: Support heredoc quoting.
+
+
23-10-2020: Version 5.58.2:
diff --git a/index.html b/index.html
index 6d41dcc79e..7ea8c48961 100644
--- a/index.html
+++ b/index.html
@@ -99,7 +99,7 @@ This is CodeMirror
- Get the current version:
5.58.2.
+ Get the current version:
5.58.3.
You can see the
code,
read the
release notes,
or study the
user manual.
diff --git a/package.json b/package.json
index 2103e1c325..a768858ec8 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "codemirror",
- "version": "5.58.2",
+ "version": "5.58.3",
"main": "lib/codemirror.js",
"style": "lib/codemirror.css",
"author": {
diff --git a/src/edit/main.js b/src/edit/main.js
index 800ee766f2..d51192c6e5 100644
--- a/src/edit/main.js
+++ b/src/edit/main.js
@@ -66,4 +66,4 @@ import { addLegacyProps } from "./legacy.js"
addLegacyProps(CodeMirror)
-CodeMirror.version = "5.58.2"
+CodeMirror.version = "5.58.3"
From 5bef47a743e8569af3f11fac628501bb3bc10108 Mon Sep 17 00:00:00 2001
From: erosman
Date: Thu, 19 Nov 2020 16:19:58 +0330
Subject: [PATCH 020/412] Fix white CodeMirror-scrollbar-filler on dark themes
background-color: white; remains white on dark themes which doesn't suit dark background pages. Changing it to transparent to match the theme.
---
lib/codemirror.css | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/lib/codemirror.css b/lib/codemirror.css
index a64f97c777..5ea2d2be2a 100644
--- a/lib/codemirror.css
+++ b/lib/codemirror.css
@@ -19,7 +19,7 @@
}
.CodeMirror-scrollbar-filler, .CodeMirror-gutter-filler {
- background-color: white; /* The little square between H and V scrollbars */
+ background-color: transparent; /* The little square between H and V scrollbars */
}
/* GUTTER */
From a82516d0fab6ce877f2aa699fd0a435e2274c7fd Mon Sep 17 00:00:00 2001
From: Lonnie Abelbeck
Date: Fri, 20 Nov 2020 02:23:52 -0600
Subject: [PATCH 021/412] [shell mode] Fix Heredoc to allow quotes and not
require a space
(a space is not required and the DELIMITER may be quoted for special meaning)
cat <
Date: Sat, 21 Nov 2020 01:34:52 +0330
Subject: [PATCH 022/412] [lint addon] Filter out duplicate messages on a
single line
---
addon/lint/lint.js | 8 ++++++--
1 file changed, 6 insertions(+), 2 deletions(-)
diff --git a/addon/lint/lint.js b/addon/lint/lint.js
index 963f2cf227..e970a25ade 100644
--- a/addon/lint/lint.js
+++ b/addon/lint/lint.js
@@ -170,6 +170,10 @@
var anns = annotations[line];
if (!anns) continue;
+ // filter out duplicate messages
+ var message = [];
+ anns = anns.filter(item => message.indexOf(item.message) > -1 ? false : message.push(item.message));
+
var maxSeverity = null;
var tipLabel = state.hasGutter && document.createDocumentFragment();
@@ -187,9 +191,9 @@
__annotation: ann
}));
}
-
+ // use original annotations[line] to show multiple messages
if (state.hasGutter)
- cm.setGutterMarker(line, GUTTER_ID, makeMarker(cm, tipLabel, maxSeverity, anns.length > 1,
+ cm.setGutterMarker(line, GUTTER_ID, makeMarker(cm, tipLabel, maxSeverity, annotations[line].length > 1,
state.options.tooltips));
}
if (options.onUpdateLinting) options.onUpdateLinting(annotationsNotSorted, annotations, cm);
From 4f37b1e9ca592461473a64bf3ba43543eecdf550 Mon Sep 17 00:00:00 2001
From: Marijn Haverbeke
Date: Sat, 21 Nov 2020 11:34:06 +0100
Subject: [PATCH 023/412] [lint addon] Remove arrow function
Issue #6492
---
addon/lint/lint.js | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/addon/lint/lint.js b/addon/lint/lint.js
index e970a25ade..395f0d9314 100644
--- a/addon/lint/lint.js
+++ b/addon/lint/lint.js
@@ -172,7 +172,7 @@
// filter out duplicate messages
var message = [];
- anns = anns.filter(item => message.indexOf(item.message) > -1 ? false : message.push(item.message));
+ anns = anns.filter(function(item) { return message.indexOf(item.message) > -1 ? false : message.push(item.message) });
var maxSeverity = null;
var tipLabel = state.hasGutter && document.createDocumentFragment();
From f65b46d154af2ba7e83fb78b449bea41e1c23c43 Mon Sep 17 00:00:00 2001
From: erosman
Date: Sun, 22 Nov 2020 19:42:08 +0330
Subject: [PATCH 024/412] [seach addon] Add option to configure search, bottom
option to put dialog at bottom
Closes #6489
---
addon/search/jump-to-line.js | 5 ++++-
addon/search/search.js | 8 ++++++--
2 files changed, 10 insertions(+), 3 deletions(-)
diff --git a/addon/search/jump-to-line.js b/addon/search/jump-to-line.js
index 1f3526d247..990c235ef1 100644
--- a/addon/search/jump-to-line.js
+++ b/addon/search/jump-to-line.js
@@ -13,8 +13,11 @@
})(function(CodeMirror) {
"use strict";
+ // default search panel location
+ CodeMirror.defineOption("search", {bottom: false});
+
function dialog(cm, text, shortText, deflt, f) {
- if (cm.openDialog) cm.openDialog(text, f, {value: deflt, selectValueOnOpen: true});
+ if (cm.openDialog) cm.openDialog(text, f, {value: deflt, selectValueOnOpen: true, bottom: cm.options.search.bottom});
else f(prompt(shortText, deflt));
}
diff --git a/addon/search/search.js b/addon/search/search.js
index cecdd52ea1..118f1112f1 100644
--- a/addon/search/search.js
+++ b/addon/search/search.js
@@ -19,6 +19,9 @@
})(function(CodeMirror) {
"use strict";
+ // default search panel location
+ CodeMirror.defineOption("search", {bottom: false});
+
function searchOverlay(query, caseInsensitive) {
if (typeof query == "string")
query = new RegExp(query.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&"), caseInsensitive ? "gi" : "g");
@@ -63,12 +66,13 @@
selectValueOnOpen: true,
closeOnEnter: false,
onClose: function() { clearSearch(cm); },
- onKeyDown: onKeyDown
+ onKeyDown: onKeyDown,
+ bottom: cm.options.search.bottom
});
}
function dialog(cm, text, shortText, deflt, f) {
- if (cm.openDialog) cm.openDialog(text, f, {value: deflt, selectValueOnOpen: true});
+ if (cm.openDialog) cm.openDialog(text, f, {value: deflt, selectValueOnOpen: true, bottom: cm.options.search.bottom});
else f(prompt(shortText, deflt));
}
From 464a66067b8d984c81b8e61ce048b34d7a1054bb Mon Sep 17 00:00:00 2001
From: quiddity-wp
Date: Sun, 22 Nov 2020 13:02:36 -0800
Subject: [PATCH 025/412] [real-world uses] Add MediaWiki
---
doc/realworld.html | 1 +
1 file changed, 1 insertion(+)
diff --git a/doc/realworld.html b/doc/realworld.html
index 5da12e2c48..c6e6c80323 100644
--- a/doc/realworld.html
+++ b/doc/realworld.html
@@ -129,6 +129,7 @@ CodeMirror real-world uses
- LiveUML (PlantUML online editor)
- Markdown Delight Editor (extensible markdown editor polymer component)
- Marklight editor (lightweight markup editor)
+ - MediaWiki extension (wiki engine)
- Mergely (interactive diffing)
- MIHTool (iOS web-app debugging tool)
- mscgen_js (online sequence chart editor)
From f4b04da36d5c88762382db44651b0b5389077bac Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Sebastian=20=C5=9Alepowro=C5=84ski?=
<45392875+slepowronski@users.noreply.github.com>
Date: Wed, 25 Nov 2020 09:23:24 +0100
Subject: [PATCH 026/412] [show-hint addon] Add additional customizing options
Introduces four new options for the show-hint addon:
- closeOnCursorActivity
- closeOnPick
- paddingForScrollbar
- moveOnOverlap
---
addon/hint/show-hint.js | 50 ++++++++++++++++++++++++++++++++---------
1 file changed, 39 insertions(+), 11 deletions(-)
diff --git a/addon/hint/show-hint.js b/addon/hint/show-hint.js
index cd0d6a7bd5..5ef1bba645 100644
--- a/addon/hint/show-hint.js
+++ b/addon/hint/show-hint.js
@@ -1,6 +1,8 @@
// CodeMirror, copyright (c) by Marijn Haverbeke and others
// Distributed under an MIT license: https://codemirror.net/LICENSE
+// declare global: DOMRect
+
(function(mod) {
if (typeof exports == "object" && typeof module == "object") // CommonJS
mod(require("../../lib/codemirror"));
@@ -94,8 +96,10 @@
completion.to || data.to, "complete");
CodeMirror.signal(data, "pick", completion);
self.cm.scrollIntoView();
- })
- this.close();
+ });
+ if (this.options.closeOnPick) {
+ this.close();
+ }
},
cursorActivity: function() {
@@ -113,7 +117,9 @@
if (pos.line != this.startPos.line || line.length - pos.ch != this.startLen - this.startPos.ch ||
pos.ch < identStart.ch || this.cm.somethingSelected() ||
(!pos.ch || this.options.closeCharacters.test(line.charAt(pos.ch - 1)))) {
- this.close();
+ if (this.options.closeOnCursorActivity) {
+ this.close();
+ }
} else {
var self = this;
this.debounce = requestAnimationFrame(function() {self.update();});
@@ -259,10 +265,15 @@
var winW = parentWindow.innerWidth || Math.max(ownerDocument.body.offsetWidth, ownerDocument.documentElement.offsetWidth);
var winH = parentWindow.innerHeight || Math.max(ownerDocument.body.offsetHeight, ownerDocument.documentElement.offsetHeight);
container.appendChild(hints);
- var box = hints.getBoundingClientRect(), overlapY = box.bottom - winH;
- var scrolls = hints.scrollHeight > hints.clientHeight + 1
- var startScroll = cm.getScrollInfo();
+ var box = completion.options.moveOnOverlap ? hints.getBoundingClientRect() : new DOMRect();
+ var scrolls = completion.options.paddingForScrollbar ? hints.scrollHeight > hints.clientHeight + 1 : false;
+
+ // Compute in the timeout to avoid reflow on init
+ var startScroll;
+ setTimeout(function() { startScroll = cm.getScrollInfo(); });
+
+ var overlapY = box.bottom - winH;
if (overlapY > 0) {
var height = box.bottom - box.top, curTop = pos.top - (pos.bottom - box.top);
if (curTop - height > 0) { // Fits above cursor
@@ -332,7 +343,12 @@
CodeMirror.on(hints, "mousedown", function() {
setTimeout(function(){cm.focus();}, 20);
});
- this.scrollToActive()
+
+ // The first hint doesn't need to be scrolled to on init
+ var selectedHintRange = this.getSelectedHintRange();
+ if (selectedHintRange.from !== 0 || selectedHintRange.to !== 0) {
+ this.scrollToActive();
+ }
CodeMirror.signal(data, "select", completions[this.selectedHint], hints.childNodes[this.selectedHint]);
return true;
@@ -379,9 +395,9 @@
},
scrollToActive: function() {
- var margin = this.completion.options.scrollMargin || 0;
- var node1 = this.hints.childNodes[Math.max(0, this.selectedHint - margin)];
- var node2 = this.hints.childNodes[Math.min(this.data.list.length - 1, this.selectedHint + margin)];
+ var selectedHintRange = this.getSelectedHintRange();
+ var node1 = this.hints.childNodes[selectedHintRange.from];
+ var node2 = this.hints.childNodes[selectedHintRange.to];
var firstNode = this.hints.firstChild;
if (node1.offsetTop < this.hints.scrollTop)
this.hints.scrollTop = node1.offsetTop - firstNode.offsetTop;
@@ -391,6 +407,14 @@
screenAmount: function() {
return Math.floor(this.hints.clientHeight / this.hints.firstChild.offsetHeight) || 1;
+ },
+
+ getSelectedHintRange: function() {
+ var margin = this.completion.options.scrollMargin || 0;
+ return {
+ from: Math.max(0, this.selectedHint - margin),
+ to: Math.min(this.data.list.length - 1, this.selectedHint + margin),
+ };
}
};
@@ -468,11 +492,15 @@
completeSingle: true,
alignWithWord: true,
closeCharacters: /[\s()\[\]{};:>,]/,
+ closeOnCursorActivity: true,
+ closeOnPick: true,
closeOnUnfocus: true,
completeOnSingleClick: true,
container: null,
customKeys: null,
- extraKeys: null
+ extraKeys: null,
+ paddingForScrollbar: true,
+ moveOnOverlap: true,
};
CodeMirror.defineOption("hintOptions", null);
From 5e11705588c69925dcd8531bc605854bb379150b Mon Sep 17 00:00:00 2001
From: Marijn Haverbeke
Date: Tue, 1 Dec 2020 08:48:39 +0100
Subject: [PATCH 027/412] [clojure mode] Fix exponential-complexity regexp
---
mode/clojure/clojure.js | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/mode/clojure/clojure.js b/mode/clojure/clojure.js
index 25d308ab4c..0b9d6acc3e 100644
--- a/mode/clojure/clojure.js
+++ b/mode/clojure/clojure.js
@@ -160,10 +160,10 @@ CodeMirror.defineMode("clojure", function (options) {
var numberLiteral = /^(?:[+\-]?\d+(?:(?:N|(?:[eE][+\-]?\d+))|(?:\.?\d*(?:M|(?:[eE][+\-]?\d+))?)|\/\d+|[xX][0-9a-fA-F]+|r[0-9a-zA-Z]+)?(?=[\\\[\]\s"#'(),;@^`{}~]|$))/;
var characterLiteral = /^(?:\\(?:backspace|formfeed|newline|return|space|tab|o[0-7]{3}|u[0-9A-Fa-f]{4}|x[0-9A-Fa-f]{4}|.)?(?=[\\\[\]\s"(),;@^`{}~]|$))/;
- // simple-namespace := /^[^\\\/\[\]\d\s"#'(),;@^`{}~][^\\\[\]\s"(),;@^`{}~]*/
+ // simple-namespace := /^[^\\\/\[\]\d\s"#'(),;@^`{}~.][^\\\[\]\s"(),;@^`{}~.\/]*/
// simple-symbol := /^(?:\/|[^\\\/\[\]\d\s"#'(),;@^`{}~][^\\\[\]\s"(),;@^`{}~]*)/
// qualified-symbol := ((<.>)*>)?
- var qualifiedSymbol = /^(?:(?:[^\\\/\[\]\d\s"#'(),;@^`{}~][^\\\[\]\s"(),;@^`{}~]*(?:\.[^\\\/\[\]\d\s"#'(),;@^`{}~][^\\\[\]\s"(),;@^`{}~]*)*\/)?(?:\/|[^\\\/\[\]\d\s"#'(),;@^`{}~][^\\\[\]\s"(),;@^`{}~]*)*(?=[\\\[\]\s"(),;@^`{}~]|$))/;
+ var qualifiedSymbol = /^(?:(?:[^\\\/\[\]\d\s"#'(),;@^`{}~.][^\\\[\]\s"(),;@^`{}~.\/]*(?:\.[^\\\/\[\]\d\s"#'(),;@^`{}~.][^\\\[\]\s"(),;@^`{}~.\/]*)*\/)?(?:\/|[^\\\/\[\]\d\s"#'(),;@^`{}~][^\\\[\]\s"(),;@^`{}~]*)*(?=[\\\[\]\s"(),;@^`{}~]|$))/;
function base(stream, state) {
if (stream.eatSpace() || stream.eat(",")) return ["space", null];
From 1cec2af7be8a2158ff5bf71ab76c8c62fe669791 Mon Sep 17 00:00:00 2001
From: Ben Hormann
Date: Wed, 2 Dec 2020 10:14:35 +0000
Subject: [PATCH 028/412] [wast mode] Add link
---
mode/index.html | 1 +
1 file changed, 1 insertion(+)
diff --git a/mode/index.html b/mode/index.html
index 858ba127f2..51205ddce9 100644
--- a/mode/index.html
+++ b/mode/index.html
@@ -153,6 +153,7 @@ Language modes
- VHDL
- Vue.js app
- Web IDL
+ - WebAssembly Text Format
- XML/HTML
- XQuery
- Yacas
From f4fd159353930680dbe617d440e5a4867d8b13a9 Mon Sep 17 00:00:00 2001
From: Marijn Haverbeke
Date: Wed, 2 Dec 2020 17:20:39 +0100
Subject: [PATCH 029/412] [hardwrap addon] Improve start-of-line condition for
overlong words
Issue #6494
---
addon/wrap/hardwrap.js | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/addon/wrap/hardwrap.js b/addon/wrap/hardwrap.js
index f194946c5d..bccdc8d14c 100644
--- a/addon/wrap/hardwrap.js
+++ b/addon/wrap/hardwrap.js
@@ -35,7 +35,7 @@
for (; at > 0; --at)
if (wrapOn.test(text.slice(at - 1, at + 1))) break;
- if (at == 0 && !forceBreak) {
+ if (!forceBreak && at <= text.match(/^[ \t]*/)[0].length) {
// didn't find a break point before column, in non-forceBreak mode try to
// find one after 'column'.
for (at = column + 1; at < text.length - 1; ++at) {
From c04867c786c5625f5f221c4162cb54d798dc9a8e Mon Sep 17 00:00:00 2001
From: "Jakub T. Jankiewicz"
Date: Thu, 3 Dec 2020 19:15:50 +0100
Subject: [PATCH 030/412] [scheme mode] Add more special indentation words and
keywords
---
mode/scheme/scheme.js | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/mode/scheme/scheme.js b/mode/scheme/scheme.js
index 56e4e332e9..0bbb8c8a41 100644
--- a/mode/scheme/scheme.js
+++ b/mode/scheme/scheme.js
@@ -26,8 +26,8 @@ CodeMirror.defineMode("scheme", function () {
return obj;
}
- var keywords = makeKeywords("λ case-lambda call/cc class define-class exit-handler field import inherit init-field interface let*-values let-values let/ec mixin opt-lambda override protect provide public rename require require-for-syntax syntax syntax-case syntax-error unit/sig unless when with-syntax and begin call-with-current-continuation call-with-input-file call-with-output-file case cond define define-syntax delay do dynamic-wind else for-each if lambda let let* let-syntax letrec letrec-syntax map or syntax-rules abs acos angle append apply asin assoc assq assv atan boolean? caar cadr call-with-input-file call-with-output-file call-with-values car cdddar cddddr cdr ceiling char->integer char-alphabetic? char-ci<=? char-ci char-ci=? char-ci>=? char-ci>? char-downcase char-lower-case? char-numeric? char-ready? char-upcase char-upper-case? char-whitespace? char<=? char char=? char>=? char>? char? close-input-port close-output-port complex? cons cos current-input-port current-output-port denominator display eof-object? eq? equal? eqv? eval even? exact->inexact exact? exp expt #f floor force gcd imag-part inexact->exact inexact? input-port? integer->char integer? interaction-environment lcm length list list->string list->vector list-ref list-tail list? load log magnitude make-polar make-rectangular make-string make-vector max member memq memv min modulo negative? newline not null-environment null? number->string number? numerator odd? open-input-file open-output-file output-port? pair? peek-char port? positive? procedure? quasiquote quote quotient rational? rationalize read read-char real-part real? remainder reverse round scheme-report-environment set! set-car! set-cdr! sin sqrt string string->list string->number string->symbol string-append string-ci<=? string-ci string-ci=? string-ci>=? string-ci>? string-copy string-fill! string-length string-ref string-set! string<=? string string=? string>=? string>? string? substring symbol->string symbol? #t tan transcript-off transcript-on truncate values vector vector->list vector-fill! vector-length vector-ref vector-set! with-input-from-file with-output-to-file write write-char zero?");
- var indentKeys = makeKeywords("define let letrec let* lambda");
+ var keywords = makeKeywords("λ case-lambda call/cc class define-class exit-handler field import inherit init-field interface let*-values let-values let/ec mixin opt-lambda override protect provide public rename require require-for-syntax syntax syntax-case syntax-error unit/sig unless when with-syntax and begin call-with-current-continuation call-with-input-file call-with-output-file case cond define define-syntax define-macro defmacro delay do dynamic-wind else for-each if lambda let let* let-syntax letrec letrec-syntax map or syntax-rules abs acos angle append apply asin assoc assq assv atan boolean? caar cadr call-with-input-file call-with-output-file call-with-values car cdddar cddddr cdr ceiling char->integer char-alphabetic? char-ci<=? char-ci char-ci=? char-ci>=? char-ci>? char-downcase char-lower-case? char-numeric? char-ready? char-upcase char-upper-case? char-whitespace? char<=? char char=? char>=? char>? char? close-input-port close-output-port complex? cons cos current-input-port current-output-port denominator display eof-object? eq? equal? eqv? eval even? exact->inexact exact? exp expt #f floor force gcd imag-part inexact->exact inexact? input-port? integer->char integer? interaction-environment lcm length list list->string list->vector list-ref list-tail list? load log magnitude make-polar make-rectangular make-string make-vector max member memq memv min modulo negative? newline not null-environment null? number->string number? numerator odd? open-input-file open-output-file output-port? pair? peek-char port? positive? procedure? quasiquote quote quotient rational? rationalize read read-char real-part real? remainder reverse round scheme-report-environment set! set-car! set-cdr! sin sqrt string string->list string->number string->symbol string-append string-ci<=? string-ci string-ci=? string-ci>=? string-ci>? string-copy string-fill! string-length string-ref string-set! string<=? string string=? string>=? string>? string? substring symbol->string symbol? #t tan transcript-off transcript-on truncate values vector vector->list vector-fill! vector-length vector-ref vector-set! with-input-from-file with-output-to-file write write-char zero?");
+ var indentKeys = makeKeywords("define let letrec let* lambda define-macro defmacro let-syntax letrec-syntax define-syntax syntax-rules");
function stateStack(indent, type, prev) { // represents a state stack object
this.indent = indent;
From e410e5c17866308e1aba41f56383a6a2d31f02a9 Mon Sep 17 00:00:00 2001
From: Marijn Haverbeke
Date: Thu, 3 Dec 2020 19:30:28 +0100
Subject: [PATCH 031/412] Add a funding.yml file
---
.github/FUNDING.yml | 2 ++
1 file changed, 2 insertions(+)
create mode 100644 .github/FUNDING.yml
diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml
new file mode 100644
index 0000000000..d87b38eee6
--- /dev/null
+++ b/.github/FUNDING.yml
@@ -0,0 +1,2 @@
+patreon: marijn
+custom: ['https://www.paypal.com/paypalme/marijnhaverbeke', 'https://marijnhaverbeke.nl/fund/']
From a966b5d115af09983d37f7c9aa034b78ac954ca4 Mon Sep 17 00:00:00 2001
From: Piyush
Date: Fri, 4 Dec 2020 09:50:24 +0530
Subject: [PATCH 032/412] fix memory leak with matchbrackets
---
addon/edit/matchbrackets.js | 18 +++++++++---------
1 file changed, 9 insertions(+), 9 deletions(-)
diff --git a/addon/edit/matchbrackets.js b/addon/edit/matchbrackets.js
index 2c47e07033..0377408802 100644
--- a/addon/edit/matchbrackets.js
+++ b/addon/edit/matchbrackets.js
@@ -117,25 +117,25 @@
});
}
- CodeMirror.defineOption("matchBrackets", false, function(cm, val, old) {
- function clear(cm) {
- if (cm.state.matchBrackets && cm.state.matchBrackets.currentlyHighlighted) {
- cm.state.matchBrackets.currentlyHighlighted();
- cm.state.matchBrackets.currentlyHighlighted = null;
- }
+ function clearHighlighted(cm) {
+ if (cm.state.matchBrackets && cm.state.matchBrackets.currentlyHighlighted) {
+ cm.state.matchBrackets.currentlyHighlighted();
+ cm.state.matchBrackets.currentlyHighlighted = null;
}
+ }
+ CodeMirror.defineOption("matchBrackets", false, function(cm, val, old) {
if (old && old != CodeMirror.Init) {
cm.off("cursorActivity", doMatchBrackets);
cm.off("focus", doMatchBrackets)
- cm.off("blur", clear)
- clear(cm);
+ cm.off("blur", clearHighlighted)
+ clearHighlighted(cm);
}
if (val) {
cm.state.matchBrackets = typeof val == "object" ? val : {};
cm.on("cursorActivity", doMatchBrackets);
cm.on("focus", doMatchBrackets)
- cm.on("blur", clear)
+ cm.on("blur", clearHighlighted)
}
});
From e3fc417882517edaffda6f445c62f8697a0cd495 Mon Sep 17 00:00:00 2001
From: Simon Huber
Date: Mon, 7 Dec 2020 10:16:23 +0100
Subject: [PATCH 033/412] [solaized theme] Fix typos
---
theme/solarized.css | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/theme/solarized.css b/theme/solarized.css
index fcd1d70de6..9c6b1265c1 100644
--- a/theme/solarized.css
+++ b/theme/solarized.css
@@ -99,7 +99,7 @@ http://ethanschoonover.com/solarized/img/solarized-palette.png
.cm-s-solarized.cm-s-light div.CodeMirror-selected { background: #eee8d5; }
.cm-s-solarized.cm-s-light .CodeMirror-line::selection, .cm-s-light .CodeMirror-line > span::selection, .cm-s-light .CodeMirror-line > span > span::selection { background: #eee8d5; }
-.cm-s-solarized.cm-s-light .CodeMirror-line::-moz-selection, .cm-s-ligh .CodeMirror-line > span::-moz-selection, .cm-s-ligh .CodeMirror-line > span > span::-moz-selection { background: #eee8d5; }
+.cm-s-solarized.cm-s-light .CodeMirror-line::-moz-selection, .cm-s-light .CodeMirror-line > span::-moz-selection, .cm-s-light .CodeMirror-line > span > span::-moz-selection { background: #eee8d5; }
/* Editor styling */
From 622fcb9b8740ceade71c1f579eaa76c8b82a0c0b Mon Sep 17 00:00:00 2001
From: "Jakub T. Jankiewicz"
Date: Mon, 7 Dec 2020 10:19:14 +0100
Subject: [PATCH 034/412] [scheme mode] More indent fixes
---
mode/scheme/scheme.js | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/mode/scheme/scheme.js b/mode/scheme/scheme.js
index 0bbb8c8a41..efac89078b 100644
--- a/mode/scheme/scheme.js
+++ b/mode/scheme/scheme.js
@@ -26,8 +26,8 @@ CodeMirror.defineMode("scheme", function () {
return obj;
}
- var keywords = makeKeywords("λ case-lambda call/cc class define-class exit-handler field import inherit init-field interface let*-values let-values let/ec mixin opt-lambda override protect provide public rename require require-for-syntax syntax syntax-case syntax-error unit/sig unless when with-syntax and begin call-with-current-continuation call-with-input-file call-with-output-file case cond define define-syntax define-macro defmacro delay do dynamic-wind else for-each if lambda let let* let-syntax letrec letrec-syntax map or syntax-rules abs acos angle append apply asin assoc assq assv atan boolean? caar cadr call-with-input-file call-with-output-file call-with-values car cdddar cddddr cdr ceiling char->integer char-alphabetic? char-ci<=? char-ci char-ci=? char-ci>=? char-ci>? char-downcase char-lower-case? char-numeric? char-ready? char-upcase char-upper-case? char-whitespace? char<=? char char=? char>=? char>? char? close-input-port close-output-port complex? cons cos current-input-port current-output-port denominator display eof-object? eq? equal? eqv? eval even? exact->inexact exact? exp expt #f floor force gcd imag-part inexact->exact inexact? input-port? integer->char integer? interaction-environment lcm length list list->string list->vector list-ref list-tail list? load log magnitude make-polar make-rectangular make-string make-vector max member memq memv min modulo negative? newline not null-environment null? number->string number? numerator odd? open-input-file open-output-file output-port? pair? peek-char port? positive? procedure? quasiquote quote quotient rational? rationalize read read-char real-part real? remainder reverse round scheme-report-environment set! set-car! set-cdr! sin sqrt string string->list string->number string->symbol string-append string-ci<=? string-ci string-ci=? string-ci>=? string-ci>? string-copy string-fill! string-length string-ref string-set! string<=? string string=? string>=? string>? string? substring symbol->string symbol? #t tan transcript-off transcript-on truncate values vector vector->list vector-fill! vector-length vector-ref vector-set! with-input-from-file with-output-to-file write write-char zero?");
- var indentKeys = makeKeywords("define let letrec let* lambda define-macro defmacro let-syntax letrec-syntax define-syntax syntax-rules");
+ var keywords = makeKeywords("λ case-lambda call/cc class cond-expand define-class define-values exit-handler field import inherit init-field interface let*-values let-values let/ec mixin opt-lambda override protect provide public rename require require-for-syntax syntax syntax-case syntax-error unit/sig unless when with-syntax and begin call-with-current-continuation call-with-input-file call-with-output-file case cond define define-syntax define-macro defmacro delay do dynamic-wind else for-each if lambda let let* let-syntax letrec letrec-syntax map or syntax-rules abs acos angle append apply asin assoc assq assv atan boolean? caar cadr call-with-input-file call-with-output-file call-with-values car cdddar cddddr cdr ceiling char->integer char-alphabetic? char-ci<=? char-ci char-ci=? char-ci>=? char-ci>? char-downcase char-lower-case? char-numeric? char-ready? char-upcase char-upper-case? char-whitespace? char<=? char char=? char>=? char>? char? close-input-port close-output-port complex? cons cos current-input-port current-output-port denominator display eof-object? eq? equal? eqv? eval even? exact->inexact exact? exp expt #f floor force gcd imag-part inexact->exact inexact? input-port? integer->char integer? interaction-environment lcm length list list->string list->vector list-ref list-tail list? load log magnitude make-polar make-rectangular make-string make-vector max member memq memv min modulo negative? newline not null-environment null? number->string number? numerator odd? open-input-file open-output-file output-port? pair? peek-char port? positive? procedure? quasiquote quote quotient rational? rationalize read read-char real-part real? remainder reverse round scheme-report-environment set! set-car! set-cdr! sin sqrt string string->list string->number string->symbol string-append string-ci<=? string-ci string-ci=? string-ci>=? string-ci>? string-copy string-fill! string-length string-ref string-set! string<=? string string=? string>=? string>? string? substring symbol->string symbol? #t tan transcript-off transcript-on truncate values vector vector->list vector-fill! vector-length vector-ref vector-set! with-input-from-file with-output-to-file write write-char zero?");
+ var indentKeys = makeKeywords("define let letrec let* lambda define-macro defmacro let-syntax letrec-syntax let-values let*-values define-syntax syntax-rules define-values when unless");
function stateStack(indent, type, prev) { // represents a state stack object
this.indent = indent;
From ae4e671eb2d931ce88cf91d6d1f39cdaf7f0654e Mon Sep 17 00:00:00 2001
From: Marijn Haverbeke
Date: Mon, 7 Dec 2020 21:45:51 +0100
Subject: [PATCH 035/412] [shell mode] Treat <<< as here string operator
Issue #6512
---
mode/shell/shell.js | 1 +
1 file changed, 1 insertion(+)
diff --git a/mode/shell/shell.js b/mode/shell/shell.js
index 2219e62e19..8271485f5f 100644
--- a/mode/shell/shell.js
+++ b/mode/shell/shell.js
@@ -71,6 +71,7 @@ CodeMirror.defineMode('shell', function() {
return 'attribute';
}
if (ch == "<") {
+ if (stream.match("<<")) return "operator"
var heredoc = stream.match(/^<-?\s*['"]?([^'"]*)['"]?/)
if (heredoc) {
state.tokens.unshift(tokenHeredoc(heredoc[1]))
From fb4ec129858dc916de86e8dd802e9668ae0049a0 Mon Sep 17 00:00:00 2001
From: mlsad3
Date: Tue, 8 Dec 2020 01:35:04 -0700
Subject: [PATCH 036/412] [verilog mode] Improve
* Handle `uvm_*_begin/end macros as well as macros in case/switch.
* Prevent extern functions and typedef classes from indenting.
* Indent lines after assignments, handle corner-case inside parenthesis.
* Handle 'disable fork' and 'wait fork'.
* Add '<' and '>' to operators.
* Add tests for mode/verilog changes.
* Verilog mode handles compiler directives and differentiates assignment vs comparison.
* Cleanup lint errors.
* Add verilog mode support for '@'.
Co-authored-by: Matt Diehl
---
mode/verilog/test.js | 170 ++++++++++++++++++++++++++++++++++++++++
mode/verilog/verilog.js | 138 ++++++++++++++++++++++++++++----
2 files changed, 292 insertions(+), 16 deletions(-)
diff --git a/mode/verilog/test.js b/mode/verilog/test.js
index bafe726db3..38c1cbe457 100644
--- a/mode/verilog/test.js
+++ b/mode/verilog/test.js
@@ -139,6 +139,32 @@
""
);
+ MT("align_assignments",
+ /**
+ * always @(posedge clk) begin
+ * if (rst)
+ * data_out <= 8'b0 +
+ * 8'b1;
+ * else
+ * data_out = 8'b0 +
+ * 8'b1;
+ * data_out =
+ * 8'b0 + 8'b1;
+ * end
+ */
+ "[keyword always] [def @][bracket (][keyword posedge] [variable clk][bracket )] [keyword begin]",
+ " [keyword if] [bracket (][variable rst][bracket )]",
+ " [variable data_out] [meta <=] [number 8'b0] [meta +]",
+ " [number 8'b1];",
+ " [keyword else]",
+ " [variable data_out] [meta =] [number 8'b0] [meta +]",
+ " [number 8'b1];",
+ " [variable data_out] [meta =] [number 8'b0] [meta +]",
+ " [number 8'b1];",
+ "[keyword end]",
+ ""
+ );
+
// Indentation tests
MT("indent_single_statement_if",
"[keyword if] [bracket (][variable foo][bracket )]",
@@ -270,4 +296,148 @@
""
);
+ MT("indent_uvm_macros",
+ /**
+ * `uvm_object_utils_begin(foo)
+ * `uvm_field_event(foo, UVM_ALL_ON)
+ * `uvm_object_utils_end
+ */
+ "[def `uvm_object_utils_begin][bracket (][variable foo][bracket )]",
+ " [def `uvm_field_event][bracket (][variable foo], [variable UVM_ALL_ON][bracket )]",
+ "[def `uvm_object_utils_end]",
+ ""
+ );
+
+ MT("indent_uvm_macros2",
+ /**
+ * `uvm_do_with(mem_read,{
+ * bar_nb == 0;
+ * })
+ */
+ "[def `uvm_do_with][bracket (][variable mem_read],[bracket {]",
+ " [variable bar_nb] [meta ==] [number 0];",
+ "[bracket })]",
+ ""
+ );
+
+ MT("indent_wait_disable_fork",
+ /**
+ * virtual task body();
+ * repeat (20) begin
+ * fork
+ * `uvm_create_on(t,p_seq)
+ * join_none
+ * end
+ * wait fork;
+ * disable fork;
+ * endtask : body
+ */
+ "[keyword virtual] [keyword task] [variable body][bracket ()];",
+ " [keyword repeat] [bracket (][number 20][bracket )] [keyword begin]",
+ " [keyword fork]",
+ " [def `uvm_create_on][bracket (][variable t],[variable p_seq][bracket )]",
+ " [keyword join_none]",
+ " [keyword end]",
+ " [keyword wait] [keyword fork];",
+ " [keyword disable] [keyword fork];",
+ "[keyword endtask] : [variable body]",
+ ""
+ );
+
+ MT("indent_typedef_class",
+ /**
+ * typedef class asdf;
+ * typedef p p_t[];
+ * typedef enum {
+ * ASDF
+ * } t;
+ */
+ "[keyword typedef] [keyword class] [variable asdf];",
+ "[keyword typedef] [variable p] [variable p_t][bracket [[]]];",
+ "[keyword typedef] [keyword enum] [bracket {]",
+ " [variable ASDF]",
+ "[bracket }] [variable t];",
+ ""
+ );
+
+ MT("indent_case_with_macro",
+ /**
+ * // It should be assumed that Macros can have ';' inside, or 'begin'/'end' blocks.
+ * // As such, 'case' statement should indent correctly with macros inside.
+ * case(foo)
+ * ASDF : this.foo = seqNum;
+ * ABCD : `update(f)
+ * EFGH : `update(g)
+ * endcase
+ */
+ "[keyword case][bracket (][variable foo][bracket )]",
+ " [variable ASDF] : [keyword this].[variable foo] [meta =] [variable seqNum];",
+ " [variable ABCD] : [def `update][bracket (][variable f][bracket )]",
+ " [variable EFGH] : [def `update][bracket (][variable g][bracket )]",
+ "[keyword endcase]",
+ ""
+ );
+
+ MT("indent_extern_function",
+ /**
+ * extern virtual function void do(ref packet trans);
+ * extern virtual function void do2(ref packet trans);
+ */
+ "[keyword extern] [keyword virtual] [keyword function] [keyword void] [variable do1][bracket (][keyword ref] [variable packet] [variable trans][bracket )];",
+ "[keyword extern] [keyword virtual] [keyword function] [keyword void] [variable do2][bracket (][keyword ref] [variable packet] [variable trans][bracket )];",
+ ""
+ );
+
+ MT("indent_assignment",
+ /**
+ * for (int i=1;i < fun;i++) begin
+ * foo = 2 << asdf || 11'h35 >> abcd
+ * && 8'h6 | 1'b1;
+ * end
+ */
+ "[keyword for] [bracket (][keyword int] [variable i][meta =][number 1];[variable i] [meta <] [variable fun];[variable i][meta ++][bracket )] [keyword begin]",
+ " [variable foo] [meta =] [number 2] [meta <<] [variable asdf] [meta ||] [number 11'h35] [meta >>] [variable abcd]",
+ " [meta &&] [number 8'h6] [meta |] [number 1'b1];",
+ "[keyword end]",
+ ""
+ );
+
+ MT("indent_foreach_constraint",
+ /**
+ * `uvm_rand_send_with(wrTlp, {
+ * length ==1;
+ * foreach (Data[i]) {
+ * payload[i] == Data[i];
+ * }
+ * })
+ */
+ "[def `uvm_rand_send_with][bracket (][variable wrTlp], [bracket {]",
+ " [variable length] [meta ==][number 1];",
+ " [keyword foreach] [bracket (][variable Data][bracket [[][variable i][bracket ]])] [bracket {]",
+ " [variable payload][bracket [[][variable i][bracket ]]] [meta ==] [variable Data][bracket [[][variable i][bracket ]]];",
+ " [bracket }]",
+ "[bracket })]",
+ ""
+ );
+
+ MT("indent_compiler_directives",
+ /**
+ * `ifdef DUT
+ * `else
+ * `ifndef FOO
+ * `define FOO
+ * `endif
+ * `endif
+ * `timescale 1ns/1ns
+ */
+ "[def `ifdef] [variable DUT]",
+ "[def `else]",
+ " [def `ifndef] [variable FOO]",
+ " [def `define] [variable FOO]",
+ " [def `endif]",
+ "[def `endif]",
+ "[def `timescale] [number 1][variable ns][meta /][number 1][variable ns]",
+ ""
+ );
+
})();
diff --git a/mode/verilog/verilog.js b/mode/verilog/verilog.js
index 43990452d3..544045b867 100644
--- a/mode/verilog/verilog.js
+++ b/mode/verilog/verilog.js
@@ -16,6 +16,12 @@ CodeMirror.defineMode("verilog", function(config, parserConfig) {
var indentUnit = config.indentUnit,
statementIndentUnit = parserConfig.statementIndentUnit || indentUnit,
dontAlignCalls = parserConfig.dontAlignCalls,
+ // compilerDirectivesUseRegularIndentation - If set, Compiler directive
+ // indentation follows the same rules as everything else. Otherwise if
+ // false, compiler directives will track their own indentation.
+ // For example, `ifdef nested inside another `ifndef will be indented,
+ // but a `ifdef inside a function block may not be indented.
+ compilerDirectivesUseRegularIndentation = parserConfig.compilerDirectivesUseRegularIndentation,
noIndentKeywords = parserConfig.noIndentKeywords || [],
multiLineStrings = parserConfig.multiLineStrings,
hooks = parserConfig.hooks || {};
@@ -62,7 +68,7 @@ CodeMirror.defineMode("verilog", function(config, parserConfig) {
binary_module_path_operator ::=
== | != | && | || | & | | | ^ | ^~ | ~^
*/
- var isOperatorChar = /[\+\-\*\/!~&|^%=?:]/;
+ var isOperatorChar = /[\+\-\*\/!~&|^%=?:<>]/;
var isBracketChar = /[\[\]{}()]/;
var unsignedNumber = /\d[0-9_]*/;
@@ -72,8 +78,13 @@ CodeMirror.defineMode("verilog", function(config, parserConfig) {
var hexLiteral = /\d*\s*'s?h\s*[0-9a-fxz?][0-9a-fxz?_]*/i;
var realLiteral = /(\d[\d_]*(\.\d[\d_]*)?E-?[\d_]+)|(\d[\d_]*\.\d[\d_]*)/i;
- var closingBracketOrWord = /^((\w+)|[)}\]])/;
+ var closingBracketOrWord = /^((`?\w+)|[)}\]])/;
var closingBracket = /[)}\]]/;
+ var compilerDirectiveRegex = new RegExp(
+ "^(`(?:ifdef|ifndef|elsif|else|endif|undef|undefineall|define|include|begin_keywords|celldefine|default|" +
+ "nettype|end_keywords|endcelldefine|line|nounconnected_drive|pragma|resetall|timescale|unconnected_drive))\\b");
+ var compilerDirectiveBeginRegex = /^(`(?:ifdef|ifndef|elsif|else))\b/;
+ var compilerDirectiveEndRegex = /^(`(?:elsif|else|endif))\b/;
var curPunc;
var curKeyword;
@@ -96,6 +107,7 @@ CodeMirror.defineMode("verilog", function(config, parserConfig) {
openClose["do" ] = "while";
openClose["fork" ] = "join;join_any;join_none";
openClose["covergroup"] = "endgroup";
+ openClose["macro_begin"] = "macro_end";
for (var i in noIndentKeywords) {
var keyword = noIndentKeywords[i];
@@ -105,7 +117,7 @@ CodeMirror.defineMode("verilog", function(config, parserConfig) {
}
// Keywords which open statements that are ended with a semi-colon
- var statementKeywords = words("always always_comb always_ff always_latch assert assign assume else export for foreach forever if import initial repeat while");
+ var statementKeywords = words("always always_comb always_ff always_latch assert assign assume else export for foreach forever if import initial repeat while extern typedef");
function tokenBase(stream, state) {
var ch = stream.peek(), style;
@@ -125,6 +137,24 @@ CodeMirror.defineMode("verilog", function(config, parserConfig) {
if (ch == '`') {
stream.next();
if (stream.eatWhile(/[\w\$_]/)) {
+ var cur = stream.current();
+ curKeyword = cur;
+ // Macros that end in _begin, are start of block and end with _end
+ if (cur.startsWith("`uvm_") && cur.endsWith("_begin")) {
+ var keywordClose = curKeyword.substr(0,curKeyword.length - 5) + "end";
+ openClose[cur] = keywordClose;
+ curPunc = "newblock";
+ } else if (cur.startsWith("`uvm_") && cur.endsWith("_end")) {
+ } else {
+ stream.eatSpace();
+ if (stream.peek() == '(') {
+ // Check if this is a block
+ curPunc = "newmacro";
+ }
+ var withSpace = stream.current();
+ // Move the stream back before the spaces
+ stream.backUp(withSpace.length - cur.length);
+ }
return "def";
} else {
return null;
@@ -145,6 +175,12 @@ CodeMirror.defineMode("verilog", function(config, parserConfig) {
stream.eatWhile(/[\d_.]/);
return "def";
}
+ // Event
+ if (ch == '@') {
+ stream.next();
+ stream.eatWhile(/[@]/);
+ return "def";
+ }
// Strings
if (ch == '"') {
stream.next();
@@ -178,6 +214,7 @@ CodeMirror.defineMode("verilog", function(config, parserConfig) {
// Operators
if (stream.eatWhile(isOperatorChar)) {
+ curPunc = stream.current();
return "meta";
}
@@ -187,6 +224,15 @@ CodeMirror.defineMode("verilog", function(config, parserConfig) {
if (keywords[cur]) {
if (openClose[cur]) {
curPunc = "newblock";
+ if (cur === "fork") {
+ // Fork can be a statement instead of block in cases of:
+ // "disable fork;" and "wait fork;" (trailing semicolon)
+ stream.eatSpace()
+ if (stream.peek() == ';') {
+ curPunc = "newstatement";
+ }
+ stream.backUp(stream.current().length - cur.length);
+ }
}
if (statementKeywords[cur]) {
curPunc = "newstatement";
@@ -226,16 +272,17 @@ CodeMirror.defineMode("verilog", function(config, parserConfig) {
return "comment";
}
- function Context(indented, column, type, align, prev) {
+ function Context(indented, column, type, scopekind, align, prev) {
this.indented = indented;
this.column = column;
this.type = type;
+ this.scopekind = scopekind;
this.align = align;
this.prev = prev;
}
- function pushContext(state, col, type) {
+ function pushContext(state, col, type, scopekind) {
var indent = state.indented;
- var c = new Context(indent, col, type, null, state.context);
+ var c = new Context(indent, col, type, scopekind ? scopekind : "", null, state.context);
return state.context = c;
}
function popContext(state) {
@@ -261,6 +308,16 @@ CodeMirror.defineMode("verilog", function(config, parserConfig) {
}
}
+ function isInsideScopeKind(ctx, scopekind) {
+ if (ctx == null) {
+ return false;
+ }
+ if (ctx.scopekind === scopekind) {
+ return true;
+ }
+ return isInsideScopeKind(ctx.prev, scopekind);
+ }
+
function buildElectricInputRegEx() {
// Reindentation should occur on any bracket char: {}()[]
// or on a match of any of the block closing keywords, at
@@ -287,8 +344,9 @@ CodeMirror.defineMode("verilog", function(config, parserConfig) {
startState: function(basecolumn) {
var state = {
tokenize: null,
- context: new Context((basecolumn || 0) - indentUnit, 0, "top", false),
+ context: new Context((basecolumn || 0) - indentUnit, 0, "top", "top", false),
indented: 0,
+ compilerDirectiveIndented: 0,
startOfLine: true
};
if (hooks.startState) hooks.startState(state);
@@ -313,15 +371,42 @@ CodeMirror.defineMode("verilog", function(config, parserConfig) {
curPunc = null;
curKeyword = null;
var style = (state.tokenize || tokenBase)(stream, state);
- if (style == "comment" || style == "meta" || style == "variable") return style;
+ if (style == "comment" || style == "meta" || style == "variable") {
+ if (((curPunc === "=") || (curPunc === "<=")) && !isInsideScopeKind(ctx, "assignment")) {
+ // '<=' could be nonblocking assignment or lessthan-equals (which shouldn't cause indent)
+ // Search through the context to see if we are already in an assignment.
+ // '=' could be inside port declaration with comma or ')' afterward, or inside for(;;) block.
+ pushContext(state, stream.column() + curPunc.length, "assignment", "assignment");
+ if (ctx.align == null) ctx.align = true;
+ }
+ return style;
+ }
if (ctx.align == null) ctx.align = true;
- if (curPunc == ctx.type) {
- popContext(state);
- } else if ((curPunc == ";" && ctx.type == "statement") ||
+ var isClosingAssignment = ctx.type == "assignment" &&
+ closingBracket.test(curPunc) && ctx.prev && ctx.prev.type === curPunc;
+ if (curPunc == ctx.type || isClosingAssignment) {
+ if (isClosingAssignment) {
+ ctx = popContext(state);
+ }
+ ctx = popContext(state);
+ if (curPunc == ")") {
+ // Handle closing macros, assuming they could have a semicolon or begin/end block inside.
+ if (ctx && (ctx.type === "macro")) {
+ ctx = popContext(state);
+ while (ctx && (ctx.type == "statement" || ctx.type == "assignment")) ctx = popContext(state);
+ }
+ } else if (curPunc == "}") {
+ // Handle closing statements like constraint block: "foreach () {}" which
+ // do not have semicolon at end.
+ if (ctx && (ctx.type === "statement")) {
+ while (ctx && (ctx.type == "statement")) ctx = popContext(state);
+ }
+ }
+ } else if (((curPunc == ";" || curPunc == ",") && (ctx.type == "statement" || ctx.type == "assignment")) ||
(ctx.type && isClosing(curKeyword, ctx.type))) {
ctx = popContext(state);
- while (ctx && ctx.type == "statement") ctx = popContext(state);
+ while (ctx && (ctx.type == "statement" || ctx.type == "assignment")) ctx = popContext(state);
} else if (curPunc == "{") {
pushContext(state, stream.column(), "}");
} else if (curPunc == "[") {
@@ -329,9 +414,9 @@ CodeMirror.defineMode("verilog", function(config, parserConfig) {
} else if (curPunc == "(") {
pushContext(state, stream.column(), ")");
} else if (ctx && ctx.type == "endcase" && curPunc == ":") {
- pushContext(state, stream.column(), "statement");
+ pushContext(state, stream.column(), "statement", "case");
} else if (curPunc == "newstatement") {
- pushContext(state, stream.column(), "statement");
+ pushContext(state, stream.column(), "statement", curKeyword);
} else if (curPunc == "newblock") {
if (curKeyword == "function" && ctx && (ctx.type == "statement" || ctx.type == "endgroup")) {
// The 'function' keyword can appear in some other contexts where it actually does not
@@ -339,9 +424,23 @@ CodeMirror.defineMode("verilog", function(config, parserConfig) {
// Do nothing in this case
} else if (curKeyword == "task" && ctx && ctx.type == "statement") {
// Same thing for task
+ } else if (curKeyword == "class" && ctx && ctx.type == "statement") {
+ // Same thing for class (e.g. typedef)
} else {
var close = openClose[curKeyword];
- pushContext(state, stream.column(), close);
+ pushContext(state, stream.column(), close, curKeyword);
+ }
+ } else if (curPunc == "newmacro" || (curKeyword && curKeyword.match(compilerDirectiveRegex))) {
+ if (curPunc == "newmacro") {
+ // Macros (especially if they have parenthesis) potentially have a semicolon
+ // or complete statement/block inside, and should be treated as such.
+ pushContext(state, stream.column(), "macro", "macro");
+ }
+ if (curKeyword.match(compilerDirectiveEndRegex)) {
+ state.compilerDirectiveIndented -= statementIndentUnit;
+ }
+ if (curKeyword.match(compilerDirectiveBeginRegex)) {
+ state.compilerDirectiveIndented += statementIndentUnit;
}
}
@@ -361,8 +460,15 @@ CodeMirror.defineMode("verilog", function(config, parserConfig) {
var possibleClosing = textAfter.match(closingBracketOrWord);
if (possibleClosing)
closing = isClosing(possibleClosing[0], ctx.type);
+ if (!compilerDirectivesUseRegularIndentation && textAfter.match(compilerDirectiveRegex)) {
+ if (textAfter.match(compilerDirectiveEndRegex)) {
+ return state.compilerDirectiveIndented - statementIndentUnit;
+ }
+ return state.compilerDirectiveIndented;
+ }
if (ctx.type == "statement") return ctx.indented + (firstChar == "{" ? 0 : statementIndentUnit);
- else if (closingBracket.test(ctx.type) && ctx.align && !dontAlignCalls) return ctx.column + (closing ? 0 : 1);
+ else if ((closingBracket.test(ctx.type) || ctx.type == "assignment")
+ && ctx.align && !dontAlignCalls) return ctx.column + (closing ? 0 : 1);
else if (ctx.type == ")" && !closing) return ctx.indented + statementIndentUnit;
else return ctx.indented + (closing ? 0 : indentUnit);
},
From 348ab5603405d1e396f32a9acfdf81055c91a16f Mon Sep 17 00:00:00 2001
From: iteriani
Date: Tue, 8 Dec 2020 00:41:03 -0800
Subject: [PATCH 037/412] [soy mode] Update indentation rules for Element
Composition
* Add support for Soy Element Composition.
Add support for Soy Element Composition. It has the syntax in the form of
<{foo()}>>
This adds support to pass through allowEmptyTag and to support this mode in closetag.
* Disable allowMissingTagName and handle Soy Element Composition directly.
Disable allowMissingTagName and handle Soy Element Composition directly. This also adds a case in closetag.js to handle autocompletes for soy element composition.
Right now, if you were to do something like
<{foo()}>
it would autocomplet with . This change makes it autocomplete with >
* Update indentation rules for Soy Element Composition
Update indentation rules for Soy Element Composition
* Update soy.js
* Update soy.js
---
mode/soy/soy.js | 14 ++++++++++----
1 file changed, 10 insertions(+), 4 deletions(-)
diff --git a/mode/soy/soy.js b/mode/soy/soy.js
index 17bafcd932..e3427ebe3c 100644
--- a/mode/soy/soy.js
+++ b/mode/soy/soy.js
@@ -463,8 +463,15 @@
return null;
case "tag":
- var endTag = state.tag[0] == "/";
- var tagName = endTag ? state.tag.substring(1) : state.tag;
+ var endTag;
+ var tagName;
+ if (state.tag === undefined) {
+ endTag = true;
+ tagName = '';
+ } else {
+ endTag = state.tag[0] == "/";
+ tagName = endTag ? state.tag.substring(1) : state.tag;
+ }
var tag = tags[tagName];
if (stream.match(/^\/?}/)) {
var selfClosed = stream.current() == "/}";
@@ -576,12 +583,11 @@
return "keyword";
} else if (match = stream.match(/^<\{/)) {
state.soyState.push("template-call-expression");
- state.tag = "print";
state.indent += 2 * config.indentUnit;
state.soyState.push("tag");
return "keyword";
} else if (match = stream.match(/^<\/>/)) {
- state.indent -= 2 * config.indentUnit;
+ state.indent -= 1 * config.indentUnit;
return "keyword";
}
From e20f9118534ebbb1249a2316639de5ce675523a8 Mon Sep 17 00:00:00 2001
From: Matt Diehl
Date: Tue, 8 Dec 2020 09:50:20 -0700
Subject: [PATCH 038/412] Remove unnecessary line.
---
mode/verilog/verilog.js | 1 -
1 file changed, 1 deletion(-)
diff --git a/mode/verilog/verilog.js b/mode/verilog/verilog.js
index 544045b867..89fe9c1ac8 100644
--- a/mode/verilog/verilog.js
+++ b/mode/verilog/verilog.js
@@ -144,7 +144,6 @@ CodeMirror.defineMode("verilog", function(config, parserConfig) {
var keywordClose = curKeyword.substr(0,curKeyword.length - 5) + "end";
openClose[cur] = keywordClose;
curPunc = "newblock";
- } else if (cur.startsWith("`uvm_") && cur.endsWith("_end")) {
} else {
stream.eatSpace();
if (stream.peek() == '(') {
From d096a604db350e678c53bce0b2081e0817b84056 Mon Sep 17 00:00:00 2001
From: Elmar Peise
Date: Thu, 10 Dec 2020 13:44:26 +0100
Subject: [PATCH 039/412] [hardwrap addon] Break an inifite loop
This breaks an infinite loop triggered by wrapping a text containing a word longer than the targed width (e.g., a long URL).
---
addon/wrap/hardwrap.js | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/addon/wrap/hardwrap.js b/addon/wrap/hardwrap.js
index bccdc8d14c..516368c80d 100644
--- a/addon/wrap/hardwrap.js
+++ b/addon/wrap/hardwrap.js
@@ -91,7 +91,8 @@
}
while (curLine.length > column) {
var bp = findBreakPoint(curLine, column, wrapOn, killTrailing, forceBreak);
- if (bp.from != bp.to || forceBreak) {
+ if (bp.from != bp.to ||
+ forceBreak && leadingSpace !== curLine.slice(0, bp.to)) {
changes.push({text: ["", leadingSpace],
from: Pos(curNo, bp.from),
to: Pos(curNo, bp.to)});
From 7f3c36619f964d20e20c0ff5bec9cee99dae1549 Mon Sep 17 00:00:00 2001
From: Marijn Haverbeke
Date: Fri, 11 Dec 2020 07:48:40 +0100
Subject: [PATCH 040/412] Fix platform detection for iPadOS Safari
See https://github.com/ProseMirror/prosemirror/issues/1111
---
src/util/browser.js | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/util/browser.js b/src/util/browser.js
index 9fc4602c68..6e3022e765 100644
--- a/src/util/browser.js
+++ b/src/util/browser.js
@@ -17,7 +17,7 @@ export let safari = /Apple Computer/.test(navigator.vendor)
export let mac_geMountainLion = /Mac OS X 1\d\D([8-9]|\d\d)\D/.test(userAgent)
export let phantom = /PhantomJS/.test(userAgent)
-export let ios = !edge && /AppleWebKit/.test(userAgent) && /Mobile\/\w+/.test(userAgent)
+export let ios = !edge && /AppleWebKit/.test(userAgent) && (/Mobile\/\w+/.test(userAgent) || navigator.maxTouchPoints > 2)
export let android = /Android/.test(userAgent)
// This is woefully incomplete. Suggestions for alternative methods welcome.
export let mobile = ios || android || /webOS|BlackBerry|Opera Mini|Opera Mobi|IEMobile/i.test(userAgent)
From e4784f6e9c34f4642791ecf622640c81b91f37fa Mon Sep 17 00:00:00 2001
From: Marijn Haverbeke
Date: Tue, 15 Dec 2020 08:28:52 +0100
Subject: [PATCH 041/412] [javascript mode] Allow separator-less object types
Issue #6520
---
mode/javascript/javascript.js | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)
diff --git a/mode/javascript/javascript.js b/mode/javascript/javascript.js
index 63eaa241b7..188dbf217c 100644
--- a/mode/javascript/javascript.js
+++ b/mode/javascript/javascript.js
@@ -616,13 +616,18 @@ CodeMirror.defineMode("javascript", function(config, parserConfig) {
if (value == "|" || value == "&") return cont(typeexpr)
if (type == "string" || type == "number" || type == "atom") return cont(afterType);
if (type == "[") return cont(pushlex("]"), commasep(typeexpr, "]", ","), poplex, afterType)
- if (type == "{") return cont(pushlex("}"), commasep(typeprop, "}", ",;"), poplex, afterType)
+ if (type == "{") return cont(pushlex("}"), typeprops, poplex, afterType)
if (type == "(") return cont(commasep(typearg, ")"), maybeReturnType, afterType)
if (type == "<") return cont(commasep(typeexpr, ">"), typeexpr)
}
function maybeReturnType(type) {
if (type == "=>") return cont(typeexpr)
}
+ function typeprops(type) {
+ if (type == "}") return cont()
+ if (type == "," || type == ";") return cont(typeprops)
+ return pass(typeprop, typeprops)
+ }
function typeprop(type, value) {
if (type == "variable" || cx.style == "keyword") {
cx.marked = "property"
From 7faab336a4b644eb4d8ff34d2eb1d96d912f7fa7 Mon Sep 17 00:00:00 2001
From: Kim-Anh Tran
Date: Fri, 18 Dec 2020 05:27:35 +0100
Subject: [PATCH 042/412] [wast mode] Update to reflect latest reference-types
spec
---
mode/wast/test.js | 25 ++++++++++++++++++++++---
mode/wast/wast.js | 4 ++--
2 files changed, 24 insertions(+), 5 deletions(-)
diff --git a/mode/wast/test.js b/mode/wast/test.js
index 9998cfd965..3e5137c072 100644
--- a/mode/wast/test.js
+++ b/mode/wast/test.js
@@ -21,7 +21,8 @@
'[string "foo #\\"# bar"]');
MT('atom-test',
- '[atom anyfunc]',
+ '[atom funcref]',
+ '[atom externref]',
'[atom i32]',
'[atom i64]',
'[atom f32]',
@@ -42,9 +43,11 @@
'[keyword br_table] [variable-2 $label0] [variable-2 $label1] [variable-2 $label3]',
'[keyword return]',
'[keyword call] [variable-2 $func0]',
- '[keyword call_indirect] ([keyword param] [atom f32] [atom f64]) ([keyword result] [atom i32] [atom i64])',
+ '[keyword call_indirect] [variable-2 $table] ([keyword param] [atom f32] [atom f64]) ([keyword result] [atom i32] [atom i64])',
'[keyword return_call] [variable-2 $func0]',
- '[keyword return_call_indirect] ([keyword param] [atom f32] [atom f64]) ([keyword result] [atom i32] [atom i64])');
+ '[keyword return_call_indirect] ([keyword param] [atom f32] [atom f64]) ([keyword result] [atom i32] [atom i64])',
+ '[keyword select] ([keyword local.get] [number 1]) ([keyword local.get] [number 2]) ([keyword local.get] [number 3])');
+
MT('memory-instructions',
'[keyword i32.load] [keyword offset]=[number 4] [keyword align]=[number 4]',
@@ -318,4 +321,20 @@
'[keyword i32x4.trunc_sat_f32x4_u]',
'[keyword f32x4.convert_i32x4_s]',
'[keyword f32x4.convert_i32x4_u]');
+
+ MT('reference-type-instructions',
+ '[keyword ref.null] [keyword extern]',
+ '[keyword ref.null] [keyword func]',
+ '[keyword ref.is_null] ([keyword ref.func] [variable-2 $f])',
+ '[keyword ref.func] [variable-2 $f]');
+
+ MT('table-instructions',
+ '[keyword table.get] [variable-2 $t] ([keyword i32.const] [number 5])',
+ '[keyword table.set] [variable-2 $t] ([keyword i32.const] [number 5]) ([keyword ref.func] [variable-2 $f])',
+ '[keyword table.size] [variable-2 $t]',
+ '[keyword table.grow] [variable-2 $t] ([keyword ref.null] [keyword extern]) ([keyword i32.const] [number 5])',
+ '[keyword table.fill] [variable-2 $t] ([keyword i32.const] [number 5]) ([keyword param] [variable-2 $r] [atom externref]) ([keyword i32.const] [number 5])',
+ '[keyword table.init] [variable-2 $t] [number 1] ([keyword i32.const] [number 5]) ([keyword i32.const] [number 10]) ([keyword i32.const] [number 15])',
+ '[keyword table.copy] [variable-2 $t] [variable-2 $t2] ([keyword i32.const] [number 5]) ([keyword i32.const] [number 10]) ([keyword i32.const] [number 15])'
+ );
})();
diff --git a/mode/wast/wast.js b/mode/wast/wast.js
index 9348ad3e0a..a730d39efc 100644
--- a/mode/wast/wast.js
+++ b/mode/wast/wast.js
@@ -14,8 +14,8 @@
CodeMirror.defineSimpleMode('wast', {
start: [
{regex: /[+\-]?(?:nan(?::0x[0-9a-fA-F]+)?|infinity|inf|0x[0-9a-fA-F]+\.?[0-9a-fA-F]*p[+\/-]?\d+|\d+(?:\.\d*)?[eE][+\-]?\d*|\d+\.\d*|0x[0-9a-fA-F]+|\d+)/, token: "number"},
- {regex: /mut|nop|block|if|then|else|loop|br_if|br_table|br|call(_indirect)?|drop|end|return(_call(_indirect)?)?|local\.(get|set|tee)|global\.(get|set)|i(32|64)\.(store(8|16)|(load(8|16)_[su]))|i64\.(load32_[su]|store32)|[fi](32|64)\.(const|load|store)|f(32|64)\.(abs|add|ceil|copysign|div|eq|floor|[gl][et]|max|min|mul|nearest|neg?|sqrt|sub|trunc)|i(32|64)\.(a[dn]d|c[lt]z|(div|rem)_[su]|eqz?|[gl][te]_[su]|mul|ne|popcnt|rot[lr]|sh(l|r_[su])|sub|x?or)|i64\.extend_[su]_i32|i32\.wrap_i64|i(32|64)\.trunc_f(32|64)_[su]|f(32|64)\.convert_i(32|64)_[su]|f64\.promote_f32|f32\.demote_f64|f32\.reinterpret_i32|i32\.reinterpret_f32|f64\.reinterpret_i64|i64\.reinterpret_f64|select|unreachable|current_memory|memory(\.((atomic\.(notify|wait(32|64)))|grow|size))?|type|func|param|result|local|global|module|table|start|elem|data|align|offset|import|export|i64\.atomic\.(load32_u|store32|rmw32\.(a[dn]d|sub|x?or|(cmp)?xchg)_u)|i(32|64)\.atomic\.(load((8|16)_u)?|store(8|16)?|rmw(\.(a[dn]d|sub|x?or|(cmp)?xchg)|(8|16)\.(a[dn]d|sub|x?or|(cmp)?xchg)_u))|v128\.(load|store|const|not|andnot|and|or|xor|bitselect)|i(8x16|16x8|32x4|64x2)\.(shl|shr_[su])|i(8x16|16x8)\.(extract_lane_[su]|((add|sub)_saturate_[su])|avgr_u)|(i(8x16|16x8|32x4|64x2)|f(32x4|64x2))\.(splat|replace_lane|neg|add|sub)|i(8x16|16x8|32x4)\.(eq|ne|([lg][te]_[su])|abs|any_true|all_true|bitmask|((min|max)_[su]))|f(32x4|64x2)\.(eq|ne|[lg][te]|abs|sqrt|mul|div|min|max)|[fi](32x4|64x2)\.extract_lane|v8x16\.(shuffle|swizzle)|i16x8\.(load8x8_[su]|narrow_i32x4_[su]|widen_(low|high)_i8x16_[su]|mul)|i32x4\.(load16x4_[su]|widen_(low|high)_i16x8_[su]|mul|trunc_sat_f32x4_[su])|i64x2\.(load32x2_[su]|mul)|(v(8x16|16x8|32x4|64x2)\.load_splat)|i8x16\.narrow_i16x8_[su]|f32x4\.convert_i32x4_[su]/, token: "keyword"},
- {regex: /\b(anyfunc|[fi](32|64))\b/, token: "atom"},
+ {regex: /mut|nop|block|if|then|else|loop|br_if|br_table|br|call(_indirect)?|drop|end|return(_call(_indirect)?)?|local\.(get|set|tee)|global\.(get|set)|i(32|64)\.(store(8|16)|(load(8|16)_[su]))|i64\.(load32_[su]|store32)|[fi](32|64)\.(const|load|store)|f(32|64)\.(abs|add|ceil|copysign|div|eq|floor|[gl][et]|max|min|mul|nearest|neg?|sqrt|sub|trunc)|i(32|64)\.(a[dn]d|c[lt]z|(div|rem)_[su]|eqz?|[gl][te]_[su]|mul|ne|popcnt|rot[lr]|sh(l|r_[su])|sub|x?or)|i64\.extend_[su]_i32|i32\.wrap_i64|i(32|64)\.trunc_f(32|64)_[su]|f(32|64)\.convert_i(32|64)_[su]|f64\.promote_f32|f32\.demote_f64|f32\.reinterpret_i32|i32\.reinterpret_f32|f64\.reinterpret_i64|i64\.reinterpret_f64|select|unreachable|current_memory|memory(\.((atomic\.(notify|wait(32|64)))|grow|size))?|type|\bfunc\b|param|result|local|global|module|start|elem|data|align|offset|import|export|i64\.atomic\.(load32_u|store32|rmw32\.(a[dn]d|sub|x?or|(cmp)?xchg)_u)|i(32|64)\.atomic\.(load((8|16)_u)?|store(8|16)?|rmw(\.(a[dn]d|sub|x?or|(cmp)?xchg)|(8|16)\.(a[dn]d|sub|x?or|(cmp)?xchg)_u))|v128\.(load|store|const|not|andnot|and|or|xor|bitselect)|i(8x16|16x8|32x4|64x2)\.(shl|shr_[su])|i(8x16|16x8)\.(extract_lane_[su]|((add|sub)_saturate_[su])|avgr_u)|(i(8x16|16x8|32x4|64x2)|f(32x4|64x2))\.(splat|replace_lane|neg|add|sub)|i(8x16|16x8|32x4)\.(eq|ne|([lg][te]_[su])|abs|any_true|all_true|bitmask|((min|max)_[su]))|f(32x4|64x2)\.(eq|ne|[lg][te]|abs|sqrt|mul|div|min|max)|[fi](32x4|64x2)\.extract_lane|v8x16\.(shuffle|swizzle)|i16x8\.(load8x8_[su]|narrow_i32x4_[su]|widen_(low|high)_i8x16_[su]|mul)|i32x4\.(load16x4_[su]|widen_(low|high)_i16x8_[su]|mul|trunc_sat_f32x4_[su])|i64x2\.(load32x2_[su]|mul)|(v(8x16|16x8|32x4|64x2)\.load_splat)|i8x16\.narrow_i16x8_[su]|f32x4\.convert_i32x4_[su]|ref\.(func|(is_)?null)|\bextern\b|table(\.(size|get|set|size|grow|fill|init|copy))?/, token: "keyword"},
+ {regex: /\b(funcref|externref|[fi](32|64))\b/, token: "atom"},
{regex: /\$([a-zA-Z0-9_`\+\-\*\/\\\^~=<>!\?@#$%&|:\.]+)/, token: "variable-2"},
{regex: /"(?:[^"\\\x00-\x1f\x7f]|\\[nt\\'"]|\\[0-9a-fA-F][0-9a-fA-F])*"/, token: "string"},
{regex: /\(;.*?/, token: "comment", next: "comment"},
From abc65fe746384652c36c027ff73b95f17d262378 Mon Sep 17 00:00:00 2001
From: nathanlesage
Date: Thu, 17 Dec 2020 09:15:10 +0100
Subject: [PATCH 043/412] Document singleCursorHeightPerLine option
---
doc/manual.html | 9 +++++++++
1 file changed, 9 insertions(+)
diff --git a/doc/manual.html b/doc/manual.html
index 89a6328e6d..ad5c275d50 100644
--- a/doc/manual.html
+++ b/doc/manual.html
@@ -512,6 +512,15 @@ Configuration
which causes the cursor to not reach all the way to the bottom
of the line, looks better
+ singleCursorHeightPerLine: boolean
+ - Determines if CodeMirror can expect all lines to be of the
+ same height (
true, the default) and the cursor-size
+ can therefore be lazily evaluated. In case your editor contains
+ multiple line-sizes, for instance, if addLineClass
+ sets classes which contain line-height-rules, you
+ should consider setting this to false to prevent
+ visual artefacts.
+
- Controls whether, when the context menu is opened with a
click outside of the current selection, the cursor is moved to
From ee414661b9099e9c122f40b8408b841801f37ed9 Mon Sep 17 00:00:00 2001
From: Hendrik Erz
Date: Sat, 19 Dec 2020 21:05:56 +0100
Subject: [PATCH 044/412] Update description of singleCursorHeightPerLine
---
doc/manual.html | 14 +++++++-------
1 file changed, 7 insertions(+), 7 deletions(-)
diff --git a/doc/manual.html b/doc/manual.html
index ad5c275d50..06ee3dbf18 100644
--- a/doc/manual.html
+++ b/doc/manual.html
@@ -513,13 +513,13 @@
Configuration
of the line, looks better
singleCursorHeightPerLine: boolean
- - Determines if CodeMirror can expect all lines to be of the
- same height (
true, the default) and the cursor-size
- can therefore be lazily evaluated. In case your editor contains
- multiple line-sizes, for instance, if addLineClass
- sets classes which contain line-height-rules, you
- should consider setting this to false to prevent
- visual artefacts.
+ - If set to
true (the default), CodeMirror will
+ calculate the cursor height from the adjacent characters or
+ text markers. If set to false, the cursor height
+ will be calculated based off the height of all bounding boxes
+ on the current (wrapped) line, keeping the height consistent.
+ This is visible especially if you use text markers that are
+ bigger than the font-size of the characters on the line.
- Controls whether, when the context menu is opened with a
From a90d0f8e992b6fa9232c8982a970305096a28164 Mon Sep 17 00:00:00 2001
From: Marijn Haverbeke
Date: Sun, 20 Dec 2020 11:17:22 +0100
Subject: [PATCH 045/412] [manual] Correct documentation for
singleCursorHeightPerLine
Issue #6524
---
doc/manual.html | 11 ++++-------
1 file changed, 4 insertions(+), 7 deletions(-)
diff --git a/doc/manual.html b/doc/manual.html
index 06ee3dbf18..1086507a91 100644
--- a/doc/manual.html
+++ b/doc/manual.html
@@ -513,13 +513,10 @@
Configuration
of the line, looks better
singleCursorHeightPerLine: boolean
- - If set to
true (the default), CodeMirror will
- calculate the cursor height from the adjacent characters or
- text markers. If set to false, the cursor height
- will be calculated based off the height of all bounding boxes
- on the current (wrapped) line, keeping the height consistent.
- This is visible especially if you use text markers that are
- bigger than the font-size of the characters on the line.
+ - If set to
true (the default), will keep the
+ cursor height constant for an entire line (or wrapped part of a
+ line). When false, the cursor's height is based on
+ the height of the adjacent reference character.
- Controls whether, when the context menu is opened with a
From e49f2950e9ca59f437db26a2b43e3cc478fc4761 Mon Sep 17 00:00:00 2001
From: Marijn Haverbeke
Date: Sun, 20 Dec 2020 11:48:25 +0100
Subject: [PATCH 046/412] Mark release 5.59.0
---
AUTHORS | 10 ++++++++++
CHANGELOG.md | 18 ++++++++++++++++++
doc/manual.html | 2 +-
doc/releases.html | 11 +++++++++++
index.html | 2 +-
package.json | 2 +-
src/edit/main.js | 2 +-
7 files changed, 43 insertions(+), 4 deletions(-)
diff --git a/AUTHORS b/AUTHORS
index 33d819ed24..95134fa2d5 100644
--- a/AUTHORS
+++ b/AUTHORS
@@ -244,6 +244,7 @@ edoroshenko
edsharp
ekhaled
Elisée
+Elmar Peise
elpnt
Emmanuel Schanzer
Enam Mijbah Noor
@@ -363,6 +364,7 @@ Jacob Lee
Jaimin
Jake Peyser
Jakob Miland
+Jakub T. Jankiewicz
Jakub Vrana
Jakub Vrána
James Campos
@@ -466,6 +468,7 @@ Kevin Muret
Kevin Sawicki
Kevin Ushey
Kier Darby
+Kim-Anh Tran
Klaus Silveira
Koh Zi Han, Cliff
komakino
@@ -547,6 +550,7 @@ Mason Malone
Mateusz Paprocki
Mathias Bynens
mats cronqvist
+Matt Diehl
Matt Gaide
Matthew Bauer
Matthew Beale
@@ -604,6 +608,7 @@ Miraculix87
misfo
mkaminsky11
mloginov
+mlsad3
Moritz Schubotz (physikerwelt)
Moritz Schwörer
Moshe Wajnberg
@@ -614,6 +619,7 @@ Mu-An ✌️ Chiou
Mu-An Chiou
mzabuawala
Narciso Jaramillo
+nathanlesage
Nathan Williams
ndr
Neil Anderson
@@ -692,6 +698,7 @@ Philip Stadermann
Pi Delport
Pierre Gerold
Pieter Ouwerkerk
+Piyush
Pontus Melke
prasanthj
Prasanth J
@@ -699,6 +706,7 @@ Prayag Verma
prendota
Prendota
Qiang Li
+quiddity-wp
Radek Piórkowski
Rahul
Rahul Anand
@@ -759,6 +767,7 @@ Scott Aikin
Scott Feeney
Scott Goodhew
Seb35
+Sebastian Ślepowroński
Sebastian Wilzbach
Sebastian Zaha
Seren D
@@ -779,6 +788,7 @@ Siamak Mokhtari
Siddhartha Gunti
silverwind
Simon Edwards
+Simon Huber
sinkuu
snasa
soliton4
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 2b00dbd80e..9276146f78 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,21 @@
+## 5.59.0 (2020-12-20)
+
+### Bug fixes
+
+Fix platform detection on recent iPadOS.
+
+[lint addon](https://codemirror.net/doc/manual.html#addon_lint): Don't show duplicate messages for a given line.
+
+[clojure mode](https://codemirror.net/mode/clojure/index.html): Fix regexp that matched in exponential time for some inputs.
+
+[hardwrap addon](https://codemirror.net/doc/manual.html#addon_hardwrap): Improve handling of words that are longer than the line length.
+
+[matchbrackets addon](https://codemirror.net/doc/manual.html#addon_matchbrackets): Fix leaked event handler on disabling the addon.
+
+### New features
+
+[search addon](https://codemirror.net/demo/search/): Make it possible to configure the search addon to show the dialog at the bottom of the editor.
+
## 5.58.3 (2020-11-19)
### Bug fixes
diff --git a/doc/manual.html b/doc/manual.html
index 1086507a91..b7ca9a6972 100644
--- a/doc/manual.html
+++ b/doc/manual.html
@@ -70,7 +70,7 @@
User manual and reference guide
- version 5.58.3
+ version 5.59.0
CodeMirror is a code-editor component that can be embedded in
diff --git a/doc/releases.html b/doc/releases.html
index 1b4f9a7976..18987f5ea2 100644
--- a/doc/releases.html
+++ b/doc/releases.html
@@ -30,6 +30,17 @@
Release notes and version history
Version 5.x
+ 20-12-2020: Version 5.59.0:
+
+
+ - Fix platform detection on recent iPadOS.
+ - lint addon: Don't show duplicate messages for a given line.
+ - clojure mode: Fix regexp that matched in exponential time for some inputs.
+ - hardwrap addon: Improve handling of words that are longer than the line length.
+ - matchbrackets addon: Fix leaked event handler on disabling the addon.
+ - search addon: Make it possible to configure the search addon to show the dialog at the bottom of the editor.
+
+
19-11-2020: Version 5.58.3:
diff --git a/index.html b/index.html
index 7ea8c48961..849447a578 100644
--- a/index.html
+++ b/index.html
@@ -99,7 +99,7 @@ This is CodeMirror
- Get the current version:
5.58.3.
+ Get the current version:
5.59.0.
You can see the
code,
read the
release notes,
or study the
user manual.
diff --git a/package.json b/package.json
index a768858ec8..321a46c1d6 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "codemirror",
- "version": "5.58.3",
+ "version": "5.59.0",
"main": "lib/codemirror.js",
"style": "lib/codemirror.css",
"author": {
diff --git a/src/edit/main.js b/src/edit/main.js
index d51192c6e5..6550214906 100644
--- a/src/edit/main.js
+++ b/src/edit/main.js
@@ -66,4 +66,4 @@ import { addLegacyProps } from "./legacy.js"
addLegacyProps(CodeMirror)
-CodeMirror.version = "5.58.3"
+CodeMirror.version = "5.59.0"
From ffa872e4d5a7b01cc148099322ef376bd6ada5a3 Mon Sep 17 00:00:00 2001
From: Marijn Haverbeke
Date: Mon, 21 Dec 2020 08:57:43 +0100
Subject: [PATCH 047/412] [closebrackets addon] Fix left-to-right assumption
Closes #6527
---
addon/edit/closebrackets.js | 22 ++++++++++++++++------
1 file changed, 16 insertions(+), 6 deletions(-)
diff --git a/addon/edit/closebrackets.js b/addon/edit/closebrackets.js
index 4415c39381..f2239fdd12 100644
--- a/addon/edit/closebrackets.js
+++ b/addon/edit/closebrackets.js
@@ -87,7 +87,7 @@
cm.operation(function() {
var linesep = cm.lineSeparator() || "\n";
cm.replaceSelection(linesep + linesep, null);
- cm.execCommand("goCharLeft");
+ moveSel(cm, -1)
ranges = cm.listSelections();
for (var i = 0; i < ranges.length; i++) {
var line = ranges[i].head.line;
@@ -97,6 +97,17 @@
});
}
+ function moveSel(cm, dir) {
+ let newRanges = [], ranges = cm.listSelections(), primary = 0
+ for (let i = 0; i < ranges.length; i++) {
+ let range = ranges[i]
+ if (range.head == cm.getCursor()) primary = i
+ let pos = {line: range.head.line, ch: range.head.ch + dir}
+ newRanges.push({anchor: pos, head: pos})
+ }
+ cm.setSelections(newRanges, primary)
+ }
+
function contractSelection(sel) {
var inverted = CodeMirror.cmpPos(sel.anchor, sel.head) > 0;
return {anchor: new Pos(sel.anchor.line, sel.anchor.ch + (inverted ? -1 : 1)),
@@ -153,10 +164,9 @@
var right = pos % 2 ? ch : pairs.charAt(pos + 1);
cm.operation(function() {
if (type == "skip") {
- cm.execCommand("goCharRight");
+ moveSel(cm, 1)
} else if (type == "skipThree") {
- for (var i = 0; i < 3; i++)
- cm.execCommand("goCharRight");
+ moveSel(cm, 3)
} else if (type == "surround") {
var sels = cm.getSelections();
for (var i = 0; i < sels.length; i++)
@@ -169,10 +179,10 @@
} else if (type == "both") {
cm.replaceSelection(left + right, null);
cm.triggerElectric(left + right);
- cm.execCommand("goCharLeft");
+ moveSel(cm, -1)
} else if (type == "addFour") {
cm.replaceSelection(left + left + left + left, "before");
- cm.execCommand("goCharRight");
+ moveSel(cm, 1)
}
});
}
From ff70b4e2d1139b052064ec73e4d1ad86cf56d36c Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jos=C3=A9=20dBruxelles?=
<18559798+jdbruxelles@users.noreply.github.com>
Date: Mon, 21 Dec 2020 08:58:32 +0100
Subject: [PATCH 048/412] [release notes] Fix the search addon page link
Simply add the .html extension to the link.
---
CHANGELOG.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 9276146f78..c1ffa87816 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -14,7 +14,7 @@ Fix platform detection on recent iPadOS.
### New features
-[search addon](https://codemirror.net/demo/search/): Make it possible to configure the search addon to show the dialog at the bottom of the editor.
+[search addon](https://codemirror.net/demo/search.html): Make it possible to configure the search addon to show the dialog at the bottom of the editor.
## 5.58.3 (2020-11-19)
From 885daa14aad5dd35a537cdadea7e01300374aeea Mon Sep 17 00:00:00 2001
From: Yash Singh
Date: Mon, 21 Dec 2020 00:04:40 -0800
Subject: [PATCH 049/412] Defined the webmanifest MIME (#6529)
---
mode/javascript/javascript.js | 7 ++++---
1 file changed, 4 insertions(+), 3 deletions(-)
diff --git a/mode/javascript/javascript.js b/mode/javascript/javascript.js
index 188dbf217c..cfcd6cb6ed 100644
--- a/mode/javascript/javascript.js
+++ b/mode/javascript/javascript.js
@@ -930,9 +930,10 @@ CodeMirror.defineMIME("text/ecmascript", "javascript");
CodeMirror.defineMIME("application/javascript", "javascript");
CodeMirror.defineMIME("application/x-javascript", "javascript");
CodeMirror.defineMIME("application/ecmascript", "javascript");
-CodeMirror.defineMIME("application/json", {name: "javascript", json: true});
-CodeMirror.defineMIME("application/x-json", {name: "javascript", json: true});
-CodeMirror.defineMIME("application/ld+json", {name: "javascript", jsonld: true});
+CodeMirror.defineMIME("application/json", { name: "javascript", json: true });
+CodeMirror.defineMIME("application/x-json", { name: "javascript", json: true });
+CodeMirror.defineMIME("application/manifest+json", { name: "javascript", json: true })
+CodeMirror.defineMIME("application/ld+json", { name: "javascript", jsonld: true });
CodeMirror.defineMIME("text/typescript", { name: "javascript", typescript: true });
CodeMirror.defineMIME("application/typescript", { name: "javascript", typescript: true });
From c58ccada2ddfb064149237cb7f59ce73176b376a Mon Sep 17 00:00:00 2001
From: Marijn Haverbeke
Date: Mon, 21 Dec 2020 09:07:47 +0100
Subject: [PATCH 050/412] Fix ES6 use in addon
---
addon/edit/closebrackets.js | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/addon/edit/closebrackets.js b/addon/edit/closebrackets.js
index f2239fdd12..19a3c53c1f 100644
--- a/addon/edit/closebrackets.js
+++ b/addon/edit/closebrackets.js
@@ -98,11 +98,11 @@
}
function moveSel(cm, dir) {
- let newRanges = [], ranges = cm.listSelections(), primary = 0
+ var newRanges = [], ranges = cm.listSelections(), primary = 0
for (let i = 0; i < ranges.length; i++) {
- let range = ranges[i]
+ var range = ranges[i]
if (range.head == cm.getCursor()) primary = i
- let pos = {line: range.head.line, ch: range.head.ch + dir}
+ var pos = {line: range.head.line, ch: range.head.ch + dir}
newRanges.push({anchor: pos, head: pos})
}
cm.setSelections(newRanges, primary)
From f18854ef817b831419b5b3353197b403b7a9b8b8 Mon Sep 17 00:00:00 2001
From: Marijn Haverbeke
Date: Mon, 21 Dec 2020 12:44:06 +0100
Subject: [PATCH 051/412] Remove another let in an addon
---
addon/edit/closebrackets.js | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/addon/edit/closebrackets.js b/addon/edit/closebrackets.js
index 19a3c53c1f..5c1aeab3c5 100644
--- a/addon/edit/closebrackets.js
+++ b/addon/edit/closebrackets.js
@@ -99,7 +99,7 @@
function moveSel(cm, dir) {
var newRanges = [], ranges = cm.listSelections(), primary = 0
- for (let i = 0; i < ranges.length; i++) {
+ for (var i = 0; i < ranges.length; i++) {
var range = ranges[i]
if (range.head == cm.getCursor()) primary = i
var pos = {line: range.head.line, ch: range.head.ch + dir}
From c88d09d0ca8b6c2f88b4432094d72e4be757b4a3 Mon Sep 17 00:00:00 2001
From: Masahiro MATAYOSHI
Date: Tue, 22 Dec 2020 16:52:16 +0900
Subject: [PATCH 052/412] [perl mode] Don't treat <<1 as here document start
---
mode/perl/perl.js | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/mode/perl/perl.js b/mode/perl/perl.js
index a3101a7c5b..f620b41e27 100644
--- a/mode/perl/perl.js
+++ b/mode/perl/perl.js
@@ -516,7 +516,7 @@ CodeMirror.defineMode("perl",function(){
if(stream.match(/^\-?[\d\.]/,false))
if(stream.match(/^(\-?(\d*\.\d+(e[+-]?\d+)?|\d+\.\d*)|0x[\da-fA-F]+|0b[01]+|\d+(e[+-]?\d+)?)/))
return 'number';
- if(stream.match(/^<<(?=\w)/)){ // NOTE: <
Date: Wed, 23 Dec 2020 08:22:14 +0100
Subject: [PATCH 053/412] Try to refine iPadOS/iOS detection
Issue #6532
---
src/util/browser.js | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/util/browser.js b/src/util/browser.js
index 6e3022e765..ae9d6af706 100644
--- a/src/util/browser.js
+++ b/src/util/browser.js
@@ -17,7 +17,7 @@ export let safari = /Apple Computer/.test(navigator.vendor)
export let mac_geMountainLion = /Mac OS X 1\d\D([8-9]|\d\d)\D/.test(userAgent)
export let phantom = /PhantomJS/.test(userAgent)
-export let ios = !edge && /AppleWebKit/.test(userAgent) && (/Mobile\/\w+/.test(userAgent) || navigator.maxTouchPoints > 2)
+export let ios = safari && (/Mobile\/\w+/.test(userAgent) || navigator.maxTouchPoints > 2)
export let android = /Android/.test(userAgent)
// This is woefully incomplete. Suggestions for alternative methods welcome.
export let mobile = ios || android || /webOS|BlackBerry|Opera Mini|Opera Mobi|IEMobile/i.test(userAgent)
From d8d78f5e7aa07e682bf51ad94a75ba6bb2484794 Mon Sep 17 00:00:00 2001
From: Marijn Haverbeke
Date: Wed, 23 Dec 2020 08:29:43 +0100
Subject: [PATCH 054/412] [panel addon] Preserve scroll post when
initializing/removing panel wrapper
Closes #6533
---
addon/display/panel.js | 10 +++++++---
1 file changed, 7 insertions(+), 3 deletions(-)
diff --git a/addon/display/panel.js b/addon/display/panel.js
index 4c9f2c0fca..29f7e0bebb 100644
--- a/addon/display/panel.js
+++ b/addon/display/panel.js
@@ -76,7 +76,7 @@
};
function initPanels(cm) {
- var wrap = cm.getWrapperElement();
+ var wrap = cm.getWrapperElement()
var style = window.getComputedStyle ? window.getComputedStyle(wrap) : wrap.currentStyle;
var height = parseInt(style.height);
var info = cm.state.panels = {
@@ -84,9 +84,10 @@
panels: [],
wrapper: document.createElement("div")
};
+ var hasFocus = cm.hasFocus(), scrollPos = cm.getScrollInfo()
wrap.parentNode.insertBefore(info.wrapper, wrap);
- var hasFocus = cm.hasFocus();
info.wrapper.appendChild(wrap);
+ cm.scrollTo(scrollPos.left, scrollPos.top)
if (hasFocus) cm.focus();
cm._setSize = cm.setSize;
@@ -114,8 +115,11 @@
var info = cm.state.panels;
cm.state.panels = null;
- var wrap = cm.getWrapperElement();
+ var wrap = cm.getWrapperElement()
+ var hasFocus = cm.hasFocus(), scrollPos = cm.getScrollInfo()
info.wrapper.parentNode.replaceChild(wrap, info.wrapper);
+ cm.scrollTo(scrollPos.left, scrollPos.top)
+ if (hasFocus) cm.focus();
wrap.style.height = info.setHeight;
cm.setSize = cm._setSize;
cm.setSize();
From 3ce2ef56989085002e6ac4078b0f580ab5fcc4ad Mon Sep 17 00:00:00 2001
From: Marijn Haverbeke
Date: Wed, 23 Dec 2020 16:46:53 +0100
Subject: [PATCH 055/412] [perl mode] Don't include brackets in variable names
Closes #6534
---
mode/perl/perl.js | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/mode/perl/perl.js b/mode/perl/perl.js
index f620b41e27..220b0a6994 100644
--- a/mode/perl/perl.js
+++ b/mode/perl/perl.js
@@ -697,7 +697,7 @@ CodeMirror.defineMode("perl",function(){
return "variable-2";}
stream.pos=p;}
if(/[$@%&]/.test(ch)){
- if(stream.eatWhile(/[\w$\[\]]/)||stream.eat("{")&&stream.eatWhile(/[\w$\[\]]/)&&stream.eat("}")){
+ if(stream.eatWhile(/[\w$]/)||stream.eat("{")&&stream.eatWhile(/[\w$]/)&&stream.eat("}")){
var c=stream.current();
if(PERL[c])
return "variable-2";
From d4a1a1a5d8648508c314ffb20fc700333f9ab5de Mon Sep 17 00:00:00 2001
From: "Dinindu D. Wanniarachchi"
Date: Sat, 26 Dec 2020 19:15:17 +0530
Subject: [PATCH 056/412] [real-world uses] Changed SASS2CSS url
---
doc/realworld.html | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/doc/realworld.html b/doc/realworld.html
index c6e6c80323..487208b286 100644
--- a/doc/realworld.html
+++ b/doc/realworld.html
@@ -157,7 +157,7 @@ CodeMirror real-world uses
- RealTime.io (Internet-of-Things infrastructure)
- Refork (animation demo gallery and sharing)
- SageMathCell (interactive mathematical software)
- - SASS2CSS (SASS, SCSS or LESS to CSS converter and CSS beautifier)
+ - SASS2CSS (SASS, SCSS or LESS to CSS converter and CSS beautifier)
- SageMathCloud (interactive mathematical software environment)
- salvare (real-time collaborative code editor)
- ServePHP (PHP code testing in Chrome dev tools)
From 90e1c26104b2b98aa803b2b98d917b19a32c8720 Mon Sep 17 00:00:00 2001
From: Yash Singh
Date: Tue, 29 Dec 2020 00:05:24 -0800
Subject: [PATCH 057/412] [javascript mode] Mention more MIME types in demo
page
---
mode/javascript/index.html | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/mode/javascript/index.html b/mode/javascript/index.html
index d1f7f68e8a..3023835727 100644
--- a/mode/javascript/index.html
+++ b/mode/javascript/index.html
@@ -110,5 +110,5 @@ JavaScript mode
- MIME types defined: text/javascript, application/json, application/ld+json, text/typescript, application/typescript.
+ MIME types defined: text/javascript, application/javascript, application/x-javascript, text/ecmascript, application/ecmascript, application/json, application/x-json, application/manifest+json, application/ld+json, text/typescript, application/typescript.
From d2728850abe64849ddd2730dc22536ef1361a90a Mon Sep 17 00:00:00 2001
From: Marijn Haverbeke
Date: Tue, 29 Dec 2020 09:04:32 +0100
Subject: [PATCH 058/412] [javascript mode] Fix infinite loop on some invalid
syntax
Closes #6542
---
mode/javascript/javascript.js | 2 ++
1 file changed, 2 insertions(+)
diff --git a/mode/javascript/javascript.js b/mode/javascript/javascript.js
index cfcd6cb6ed..8191c4d925 100644
--- a/mode/javascript/javascript.js
+++ b/mode/javascript/javascript.js
@@ -640,6 +640,8 @@ CodeMirror.defineMode("javascript", function(config, parserConfig) {
return cont(expect("variable"), maybetypeOrIn, expect("]"), typeprop)
} else if (type == "(") {
return pass(functiondecl, typeprop)
+ } else {
+ return cont()
}
}
function typearg(type, value) {
From 4d5da83c1493cf5dec219ecb637adc69e468ea5d Mon Sep 17 00:00:00 2001
From: Yash-Singh1
Date: Mon, 28 Dec 2020 11:28:36 -0800
Subject: [PATCH 059/412] Prefer dot syntax in test
---
test/test.js | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/test/test.js b/test/test.js
index 2a5101f4e1..07fa67858f 100644
--- a/test/test.js
+++ b/test/test.js
@@ -1807,8 +1807,8 @@ testCM("atomicMarker", function(cm) {
inclusiveRight: ri
};
- if (ls === true || ls === false) options["selectLeft"] = ls;
- if (rs === true || rs === false) options["selectRight"] = rs;
+ if (ls === true || ls === false) options.selectLeft = ls;
+ if (rs === true || rs === false) options.selectRight = rs;
return cm.markText(Pos(ll, cl), Pos(lr, cr), options);
}
From 863c18904febf364876494ee650ced49c3b08bd9 Mon Sep 17 00:00:00 2001
From: Marijn Haverbeke
Date: Tue, 29 Dec 2020 09:27:13 +0100
Subject: [PATCH 060/412] [javascript mode] Make sure type props don't consume
closing braces
---
mode/javascript/javascript.js | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/mode/javascript/javascript.js b/mode/javascript/javascript.js
index 8191c4d925..966ffef063 100644
--- a/mode/javascript/javascript.js
+++ b/mode/javascript/javascript.js
@@ -640,7 +640,7 @@ CodeMirror.defineMode("javascript", function(config, parserConfig) {
return cont(expect("variable"), maybetypeOrIn, expect("]"), typeprop)
} else if (type == "(") {
return pass(functiondecl, typeprop)
- } else {
+ } else if (!type.match(/[;\}\)\],]/)) {
return cont()
}
}
From 37d7b2efceb192c94811a13b2b7b3eec4b786608 Mon Sep 17 00:00:00 2001
From: Marijn Haverbeke
Date: Tue, 29 Dec 2020 18:10:02 +0100
Subject: [PATCH 061/412] Fix moving backwards across astral chars
Closes #6544
---
src/edit/methods.js | 9 ++++++---
1 file changed, 6 insertions(+), 3 deletions(-)
diff --git a/src/edit/methods.js b/src/edit/methods.js
index a5e2afc39f..eb8f8d28dc 100644
--- a/src/edit/methods.js
+++ b/src/edit/methods.js
@@ -480,9 +480,12 @@ function findPosH(doc, pos, dir, unit, visually) {
let next
if (unit == "codepoint") {
let ch = lineObj.text.charCodeAt(pos.ch + (unit > 0 ? 0 : -1))
- if (isNaN(ch)) next = null
- else next = new Pos(pos.line, Math.max(0, Math.min(lineObj.text.length, pos.ch + dir * (ch >= 0xD800 && ch < 0xDC00 ? 2 : 1))),
- -dir)
+ if (isNaN(ch)) {
+ next = null
+ } else {
+ let astral = dir > 0 ? ch >= 0xD800 && ch < 0xDC00 : ch >= 0xDC00 && ch < 0xDFFF
+ next = new Pos(pos.line, Math.max(0, Math.min(lineObj.text.length, pos.ch + dir * (astral ? 2 : 1))), -dir)
+ }
} else if (visually) {
next = moveVisually(doc.cm, lineObj, pos, dir)
} else {
From 5e25c3ce3026d7be3e98b8653f1aa171333d43ca Mon Sep 17 00:00:00 2001
From: Marijn Haverbeke
Date: Wed, 30 Dec 2020 09:21:06 +0100
Subject: [PATCH 062/412] [sponsors] Add Execute Program logo
---
index.html | 1 +
1 file changed, 1 insertion(+)
diff --git a/index.html b/index.html
index 849447a578..9631b88366 100644
--- a/index.html
+++ b/index.html
@@ -203,6 +203,7 @@ Sponsors


+ 
From 1698f003a5cfabfbabad106c69cd214ec4ed996a Mon Sep 17 00:00:00 2001
From: Yash Singh
Date: Thu, 31 Dec 2020 02:09:33 -0800
Subject: [PATCH 063/412] [manual] Add link to demo for jump-to-line
Closes #6539
---
doc/manual.html | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/doc/manual.html b/doc/manual.html
index b7ca9a6972..00472c5236 100644
--- a/doc/manual.html
+++ b/doc/manual.html
@@ -2405,7 +2405,7 @@ Addons
Accepts linenumber, +/-linenumber, line:char,
scroll% and :linenumber formats.
This will make use of openDialog
- when available to make prompting for line number neater.
+ when available to make prompting for line number neater. Demo avaliable here.
search/matchesonscrollbar.js
- Adds a
showMatchesOnScrollbar method to editor
From bd37a96d362b8d92895d3960d569168ec39e4165 Mon Sep 17 00:00:00 2001
From: Marijn Haverbeke
Date: Thu, 31 Dec 2020 13:02:29 +0100
Subject: [PATCH 064/412] Mark version 5.59.1
---
AUTHORS | 4 ++++
CHANGELOG.md | 6 ++++++
doc/manual.html | 2 +-
doc/releases.html | 6 ++++++
index.html | 2 +-
package.json | 2 +-
src/edit/main.js | 2 +-
7 files changed, 20 insertions(+), 4 deletions(-)
diff --git a/AUTHORS b/AUTHORS
index 95134fa2d5..4ea87576d3 100644
--- a/AUTHORS
+++ b/AUTHORS
@@ -432,6 +432,7 @@ Jon Malmaud
Jon Sangster
Joo
Joost-Wim Boekesteijn
+José dBruxelles
Joseph Pecoraro
Josh Barnes
Josh Cohen
@@ -546,6 +547,7 @@ Martin Hasoň
Martin Hunt
Martin Laine
Martin Zagora
+Masahiro MATAYOSHI
Mason Malone
Mateusz Paprocki
Mathias Bynens
@@ -894,6 +896,8 @@ wonderboyjon
Wu Cheng-Han
Xavier Mendez
Yang Guo
+Yash Singh
+Yash-Singh1
Yassin N. Hassan
YNH Webdev
yoongu
diff --git a/CHANGELOG.md b/CHANGELOG.md
index c1ffa87816..5a9baf4df1 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,9 @@
+## 5.59.1 (2020-12-31)
+
+### Bug fixes
+
+Fix an issue where some Chrome browsers were detected as iOS.
+
## 5.59.0 (2020-12-20)
### Bug fixes
diff --git a/doc/manual.html b/doc/manual.html
index 00472c5236..285d420d9a 100644
--- a/doc/manual.html
+++ b/doc/manual.html
@@ -70,7 +70,7 @@
User manual and reference guide
- version 5.59.0
+ version 5.59.1
CodeMirror is a code-editor component that can be embedded in
diff --git a/doc/releases.html b/doc/releases.html
index 18987f5ea2..f6628b6548 100644
--- a/doc/releases.html
+++ b/doc/releases.html
@@ -30,6 +30,12 @@
Release notes and version history
Version 5.x
+ 31-12-2020: Version 5.59.1:
+
+
+ - Fix an issue where some Chrome browsers were detected as iOS.
+
+
20-12-2020: Version 5.59.0:
diff --git a/index.html b/index.html
index 9631b88366..a89b1de5d3 100644
--- a/index.html
+++ b/index.html
@@ -99,7 +99,7 @@ This is CodeMirror
- Get the current version:
5.59.0.
+ Get the current version:
5.59.1.
You can see the
code,
read the
release notes,
or study the
user manual.
diff --git a/package.json b/package.json
index 321a46c1d6..7ab19be203 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "codemirror",
- "version": "5.59.0",
+ "version": "5.59.1",
"main": "lib/codemirror.js",
"style": "lib/codemirror.css",
"author": {
diff --git a/src/edit/main.js b/src/edit/main.js
index 6550214906..cb8c8cac5b 100644
--- a/src/edit/main.js
+++ b/src/edit/main.js
@@ -66,4 +66,4 @@ import { addLegacyProps } from "./legacy.js"
addLegacyProps(CodeMirror)
-CodeMirror.version = "5.59.0"
+CodeMirror.version = "5.59.1"
From 9749ba3ce08154510e631217e21532987415d9b7 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=C5=81ukasz=20Wielgus?=
<61328879+encap@users.noreply.github.com>
Date: Sun, 3 Jan 2021 19:58:51 +0100
Subject: [PATCH 065/412] [real world uses] Add coderush.xyz (typing speed
test)
Uses CodeMirror with dynamic mode switching
---
doc/realworld.html | 1 +
1 file changed, 1 insertion(+)
diff --git a/doc/realworld.html b/doc/realworld.html
index 487208b286..698b0c3a80 100644
--- a/doc/realworld.html
+++ b/doc/realworld.html
@@ -58,6 +58,7 @@
CodeMirror real-world uses
- Codepen (gallery of animations)
- Coderba Google Web Toolkit (GWT) wrapper
- Coderpad (interviewing tool)
+
- CodeRush typing speed test for programmers
- Code School (online tech learning environment)
- Code Snippets (WordPress snippet management plugin)
- Code together (collaborative editing)
From c8059735fc9ef79a1b8176d776cb81a03771a28c Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=C5=81ukasz=20Wielgus?=
<61328879+encap@users.noreply.github.com>
Date: Sun, 3 Jan 2021 20:11:00 +0100
Subject: [PATCH 066/412] [real world uses] Update "clone-it" url
Previous url (clone-it.github.io) returns 404 because I changed github account.
---
doc/realworld.html | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/doc/realworld.html b/doc/realworld.html
index 698b0c3a80..a7402551f7 100644
--- a/doc/realworld.html
+++ b/doc/realworld.html
@@ -41,7 +41,7 @@
CodeMirror real-world uses
- Cargo Collective (creative publishing platform)
- Chrome DevTools
- ClickHelp (technical writing tool)
-
- Clone-It (HTML & CSS learning game)
+
- Clone-It (HTML & CSS learning game)
- Colon (A flexible text editor or IDE)
- CodeWorld (Haskell playground)
- Complete.ly playground
From a46e33049de2c6f4550b77cad743d293039f2e93 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Sebastian=20=C5=9Alepowro=C5=84ski?=
<45392875+slepowronski@users.noreply.github.com>
Date: Mon, 4 Jan 2021 13:28:25 +0100
Subject: [PATCH 067/412] [show-hint addon] Changed closeOnCursorActivity to
updateOnCursorActivity
---
addon/hint/show-hint.js | 16 +++++++++-------
1 file changed, 9 insertions(+), 7 deletions(-)
diff --git a/addon/hint/show-hint.js b/addon/hint/show-hint.js
index 5ef1bba645..a9f2ded18c 100644
--- a/addon/hint/show-hint.js
+++ b/addon/hint/show-hint.js
@@ -61,8 +61,10 @@
this.startPos = this.cm.getCursor("start");
this.startLen = this.cm.getLine(this.startPos.line).length - this.cm.getSelection().length;
- var self = this;
- cm.on("cursorActivity", this.activityFunc = function() { self.cursorActivity(); });
+ if (this.options.updateOnCursorActivity) {
+ var self = this;
+ cm.on("cursorActivity", this.activityFunc = function() { self.cursorActivity(); });
+ }
}
var requestAnimationFrame = window.requestAnimationFrame || function(fn) {
@@ -75,7 +77,9 @@
if (!this.active()) return;
this.cm.state.completionActive = null;
this.tick = null;
- this.cm.off("cursorActivity", this.activityFunc);
+ if (this.options.updateOnCursorActivity) {
+ this.cm.off("cursorActivity", this.activityFunc);
+ }
if (this.widget && this.data) CodeMirror.signal(this.data, "close");
if (this.widget) this.widget.close();
@@ -117,9 +121,7 @@
if (pos.line != this.startPos.line || line.length - pos.ch != this.startLen - this.startPos.ch ||
pos.ch < identStart.ch || this.cm.somethingSelected() ||
(!pos.ch || this.options.closeCharacters.test(line.charAt(pos.ch - 1)))) {
- if (this.options.closeOnCursorActivity) {
- this.close();
- }
+ this.close();
} else {
var self = this;
this.debounce = requestAnimationFrame(function() {self.update();});
@@ -492,9 +494,9 @@
completeSingle: true,
alignWithWord: true,
closeCharacters: /[\s()\[\]{};:>,]/,
- closeOnCursorActivity: true,
closeOnPick: true,
closeOnUnfocus: true,
+ updateOnCursorActivity: true,
completeOnSingleClick: true,
container: null,
customKeys: null,
From 36c786bcca35c0650e78ab65ac8afb9d71abb89c Mon Sep 17 00:00:00 2001
From: Yash Singh
Date: Tue, 5 Jan 2021 02:42:31 -0800
Subject: [PATCH 068/412] [closetag demo] Add description
---
demo/closetag.html | 1 +
1 file changed, 1 insertion(+)
diff --git a/demo/closetag.html b/demo/closetag.html
index 4f857fa4bb..1f86114a9f 100644
--- a/demo/closetag.html
+++ b/demo/closetag.html
@@ -38,4 +38,5 @@ Close-Tag Demo
autoCloseTags: true
});
+ Uses the closetag addon to auto-close tags.
From d19a746e51e041dd9aa1c9b79386b29cb1bcb3f1 Mon Sep 17 00:00:00 2001
From: Marijn Haverbeke
Date: Wed, 6 Jan 2021 18:23:19 +0100
Subject: [PATCH 069/412] Fix bug in findPosH
Closes #6554
---
src/edit/methods.js | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/edit/methods.js b/src/edit/methods.js
index eb8f8d28dc..c33a859865 100644
--- a/src/edit/methods.js
+++ b/src/edit/methods.js
@@ -479,7 +479,7 @@ function findPosH(doc, pos, dir, unit, visually) {
function moveOnce(boundToLine) {
let next
if (unit == "codepoint") {
- let ch = lineObj.text.charCodeAt(pos.ch + (unit > 0 ? 0 : -1))
+ let ch = lineObj.text.charCodeAt(pos.ch + (dir > 0 ? 0 : -1))
if (isNaN(ch)) {
next = null
} else {
From 498e7c0c0a762c2ad5b8bc8b455ef1f12db1e5bd Mon Sep 17 00:00:00 2001
From: Josh Soref
Date: Fri, 8 Jan 2021 08:32:22 -0500
Subject: [PATCH 070/412] Fix various spelling mistakes
* spelling: across
Signed-off-by: Josh Soref
* spelling: advise
Signed-off-by: Josh Soref
* spelling: aframework
Signed-off-by: Josh Soref
* spelling: after
Signed-off-by: Josh Soref
* spelling: alphanumeric
Signed-off-by: Josh Soref
* spelling: anyway
Signed-off-by: Josh Soref
* spelling: async
Signed-off-by: Josh Soref
* spelling: available
Signed-off-by: Josh Soref
* spelling: backticks
Signed-off-by: Josh Soref
* spelling: behavior
Signed-off-by: Josh Soref
* spelling: bracket
Signed-off-by: Josh Soref
* spelling: cacheable
Signed-off-by: Josh Soref
* spelling: characters
Signed-off-by: Josh Soref
* spelling: completeable
Signed-off-by: Josh Soref
* spelling: data
Signed-off-by: Josh Soref
* spelling: definition
Signed-off-by: Josh Soref
* spelling: different
Signed-off-by: Josh Soref
* spelling: do not
Signed-off-by: Josh Soref
* spelling: duplicate
Signed-off-by: Josh Soref
* spelling: e.g.
Signed-off-by: Josh Soref
* spelling: entities
Signed-off-by: Josh Soref
* spelling: expression-in
Signed-off-by: Josh Soref
* spelling: extract
Signed-off-by: Josh Soref
* spelling: feedback
Signed-off-by: Josh Soref
* spelling: filesystem
Signed-off-by: Josh Soref
* spelling: function
Signed-off-by: Josh Soref
* spelling: github
Signed-off-by: Josh Soref
* spelling: height
Signed-off-by: Josh Soref
* spelling: highlighted
Signed-off-by: Josh Soref
* spelling: i'm
Signed-off-by: Josh Soref
* spelling: identifier
Signed-off-by: Josh Soref
* spelling: immediately
Signed-off-by: Josh Soref
* spelling: in case
Signed-off-by: Josh Soref
* spelling: indentation
Signed-off-by: Josh Soref
* spelling: independent
Signed-off-by: Josh Soref
* spelling: initial
Signed-off-by: Josh Soref
* spelling: interchangeable
Signed-off-by: Josh Soref
* spelling: interruptible
Signed-off-by: Josh Soref
* spelling: interviews
Signed-off-by: Josh Soref
* spelling: intrinsic
Signed-off-by: Josh Soref
* spelling: javascript
Signed-off-by: Josh Soref
* spelling: label
Signed-off-by: Josh Soref
* spelling: matching
Signed-off-by: Josh Soref
* spelling: misbehavior
Signed-off-by: Josh Soref
* spelling: number
Signed-off-by: Josh Soref
* spelling: numbered
Signed-off-by: Josh Soref
* spelling: occurrences
Signed-off-by: Josh Soref
* spelling: repeatedly
Signed-off-by: Josh Soref
* spelling: separator
Signed-off-by: Josh Soref
* spelling: string
Signed-off-by: Josh Soref
* spelling: styleable
Signed-off-by: Josh Soref
* spelling: textarea
Signed-off-by: Josh Soref
* spelling: texture
Signed-off-by: Josh Soref
* spelling: useful
Signed-off-by: Josh Soref
* spelling: whenever
Signed-off-by: Josh Soref
* spelling: wikipedia
Signed-off-by: Josh Soref
---
CHANGELOG.md | 14 +++++++-------
addon/edit/continuelist.js | 2 +-
addon/edit/matchbrackets.js | 2 +-
addon/hint/javascript-hint.js | 2 +-
addon/hint/sql-hint.js | 4 ++--
addon/search/match-highlighter.js | 2 +-
demo/complete.html | 4 ++--
demo/matchhighlighter.html | 2 +-
demo/simplemode.html | 2 +-
doc/internals.html | 2 +-
doc/manual.html | 8 ++++----
doc/realworld.html | 4 ++--
doc/releases.html | 14 +++++++-------
doc/upgrade_v2.2.html | 2 +-
index.html | 2 +-
keymap/vim.js | 6 +++---
mode/asn.1/asn.1.js | 2 +-
mode/clike/clike.js | 2 +-
mode/clike/index.html | 2 +-
mode/dtd/dtd.js | 2 +-
mode/factor/factor.js | 2 +-
mode/factor/index.html | 2 +-
mode/fcl/index.html | 10 +++++-----
mode/forth/index.html | 2 +-
mode/gas/gas.js | 4 ++--
mode/gfm/test.js | 2 +-
mode/haml/haml.js | 2 +-
mode/htmlembedded/index.html | 2 +-
mode/idl/idl.js | 2 +-
mode/javascript/test.js | 2 +-
mode/markdown/index.html | 10 +++++-----
mode/markdown/markdown.js | 2 +-
mode/markdown/test.js | 4 ++--
mode/meta.js | 2 +-
mode/modelica/modelica.js | 6 +++---
mode/mumps/mumps.js | 2 +-
mode/nginx/index.html | 4 ++--
mode/ntriples/index.html | 2 +-
mode/oz/oz.js | 2 +-
mode/perl/perl.js | 4 ++--
mode/python/index.html | 2 +-
mode/python/test.js | 2 +-
mode/rpm/rpm.js | 4 ++--
mode/ruby/index.html | 2 +-
mode/scheme/scheme.js | 2 +-
mode/sieve/sieve.js | 2 +-
mode/sql/sql.js | 4 ++--
mode/vbscript/vbscript.js | 4 ++--
mode/velocity/velocity.js | 2 +-
mode/verilog/verilog.js | 4 ++--
mode/vue/index.html | 2 +-
mode/yaml/yaml.js | 4 ++--
52 files changed, 91 insertions(+), 91 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 5a9baf4df1..3a3ee68cef 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -234,7 +234,7 @@ Make Shift-Delete to cut work on Firefox.
[handlebars mode](https://codemirror.net/mode/handlebars/): Fix triple-brace support.
-[searchcursor addon](https://codemirror.net/doc/manual.html#addon_searchcursor): Support mathing `$` in reverse regexp search.
+[searchcursor addon](https://codemirror.net/doc/manual.html#addon_searchcursor): Support matching `$` in reverse regexp search.
[panel addon](https://codemirror.net/doc/manual.html#addon_panel): Don't get confused by changing panel sizes.
@@ -490,7 +490,7 @@ Add `hintWords` (basic completion) helper to [clojure](https://codemirror.net/mo
[panel addon](https://codemirror.net/doc/manual.html#addon_panel): Fix problem where replacing the last remaining panel dropped the newly added panel.
-[hardwrap addon](https://codemirror.net/doc/manual.html#addon_hardwrap): Fix an infinite loop when the indention is greater than the target column.
+[hardwrap addon](https://codemirror.net/doc/manual.html#addon_hardwrap): Fix an infinite loop when the indentation is greater than the target column.
[jinja2](https://codemirror.net/mode/jinja2/) and [markdown](https://codemirror.net/mode/markdown/) modes: Add comment metadata.
@@ -878,7 +878,7 @@ Add `role=presentation` to more DOM elements to improve screen reader support.
[merge addon](https://codemirror.net/doc/manual.html#addon_merge): Make aligning of unchanged chunks more robust.
-[comment addon](https://codemirror.net/doc/manual.html#addon_comment): Fix comment-toggling on a block of text that starts and ends in a (differnet) block comment.
+[comment addon](https://codemirror.net/doc/manual.html#addon_comment): Fix comment-toggling on a block of text that starts and ends in a (different) block comment.
[javascript mode](https://codemirror.net/mode/javascript/): Improve support for TypeScript syntax.
@@ -996,7 +996,7 @@ New event: [`optionChange`](https://codemirror.net/doc/manual.html#event_optionC
Tapping/clicking the editor in [contentEditable mode](https://codemirror.net/doc/manual.html#option_inputStyle) on Chrome now puts the cursor at the tapped position.
-Fix various crashes and misbehaviors when reading composition events in [contentEditable mode](https://codemirror.net/doc/manual.html#option_inputStyle).
+Fix various crashes and misbehavior when reading composition events in [contentEditable mode](https://codemirror.net/doc/manual.html#option_inputStyle).
Catches and ignores an IE 'Unspecified Error' when creating an editor in an iframe before there is a ``.
@@ -1331,7 +1331,7 @@ Fix a [bug](https://github.com/codemirror/CodeMirror/issues/3834) that caused ph
* New modes: [Vue](https://codemirror.net/mode/vue/index.html), [Oz](https://codemirror.net/mode/oz/index.html), [MscGen](https://codemirror.net/mode/mscgen/index.html) (and dialects), [Closure Stylesheets](https://codemirror.net/mode/css/gss.html)
* Implement [CommonMark](http://commonmark.org)-style flexible list indent and cross-line code spans in [Markdown](https://codemirror.net/mode/markdown/index.html) mode
* Add a replace-all button to the [search addon](https://codemirror.net/doc/manual.html#addon_search), and make the persistent search dialog transparent when it obscures the match
-* Handle `acync`/`await` and ocal and binary numbers in [JavaScript mode](https://codemirror.net/mode/javascript/index.html)
+* Handle `async`/`await` and ocal and binary numbers in [JavaScript mode](https://codemirror.net/mode/javascript/index.html)
* Fix various issues with the [Haxe mode](https://codemirror.net/mode/haxe/index.html)
* Make the [closebrackets addon](https://codemirror.net/doc/manual.html#addon_closebrackets) select only the wrapped text when wrapping selection in brackets
* Tokenize properties as properties in the [CoffeeScript mode](https://codemirror.net/mode/coffeescript/index.html)
@@ -1818,7 +1818,7 @@ Emergency fix for a bug where an editor with line wrapping on IE will break when
* Slightly incompatible API changes. Read [this](https://codemirror.net/doc/upgrade_v2.2.html).
* New approach to [binding](https://codemirror.net/doc/manual.html#option_extraKeys) keys, support for [custom bindings](https://codemirror.net/doc/manual.html#option_keyMap).
* Support for overwrite (insert).
-* [Custom-width](https://codemirror.net/doc/manual.html#option_tabSize) and [stylable](https://codemirror.net/demo/visibletabs.html) tabs.
+* [Custom-width](https://codemirror.net/doc/manual.html#option_tabSize) and [styleable](https://codemirror.net/demo/visibletabs.html) tabs.
* Moved more code into [add-on scripts](https://codemirror.net/doc/manual.html#addons).
* Support for sane vertical cursor movement in wrapped lines.
* More reliable handling of editing [marked text](https://codemirror.net/doc/manual.html#markText).
@@ -1832,7 +1832,7 @@ Fixes `TextMarker.clear`, which is broken in 2.17.
## 2.17.0 (2011-11-21)
* Add support for [line wrapping](https://codemirror.net/doc/manual.html#option_lineWrapping) and [code folding](https://codemirror.net/doc/manual.html#hideLine).
-* Add [Github-style Markdown](https://codemirror.net/mode/gfm/index.html) mode.
+* Add [GitHub-style Markdown](https://codemirror.net/mode/gfm/index.html) mode.
* Add [Monokai](https://codemirror.net/theme/monokai.css) and [Rubyblue](https://codemirror.net/theme/rubyblue.css) themes.
* Add [`setBookmark`](https://codemirror.net/doc/manual.html#setBookmark) method.
* Move some of the demo code into reusable components under [`lib/util`](https://codemirror.net/addon/).
diff --git a/addon/edit/continuelist.js b/addon/edit/continuelist.js
index 2e5625adc4..6ec65010d2 100644
--- a/addon/edit/continuelist.js
+++ b/addon/edit/continuelist.js
@@ -90,7 +90,7 @@
});
} else {
if (startIndent.length > nextIndent.length) return;
- // This doesn't run if the next line immediatley indents, as it is
+ // This doesn't run if the next line immediately indents, as it is
// not clear of the users intention (new indented item or same level)
if ((startIndent.length < nextIndent.length) && (lookAhead === 1)) return;
skipCount += 1;
diff --git a/addon/edit/matchbrackets.js b/addon/edit/matchbrackets.js
index 0377408802..692e09e0cc 100644
--- a/addon/edit/matchbrackets.js
+++ b/addon/edit/matchbrackets.js
@@ -94,7 +94,7 @@
if (marks.length) {
// Kludge to work around the IE bug from issue #1193, where text
- // input stops going to the textare whever this fires.
+ // input stops going to the textarea whenever this fires.
if (ie_lt8 && cm.state.focused) cm.focus();
var clear = function() {
diff --git a/addon/hint/javascript-hint.js b/addon/hint/javascript-hint.js
index 6d09e6b44e..9f06b1b546 100644
--- a/addon/hint/javascript-hint.js
+++ b/addon/hint/javascript-hint.js
@@ -69,7 +69,7 @@
function getCoffeeScriptToken(editor, cur) {
// This getToken, it is for coffeescript, imitates the behavior of
// getTokenAt method in javascript.js, that is, returning "property"
- // type and treat "." as indepenent token.
+ // type and treat "." as independent token.
var token = editor.getTokenAt(cur);
if (cur.ch == token.start + 1 && token.string.charAt(0) == '.') {
token.end = token.start;
diff --git a/addon/hint/sql-hint.js b/addon/hint/sql-hint.js
index 5b65e29105..efdce813cf 100644
--- a/addon/hint/sql-hint.js
+++ b/addon/hint/sql-hint.js
@@ -97,7 +97,7 @@
if (name.charAt(0) == ".") {
name = name.substr(1);
}
- // replace doublicated identifierQuotes with single identifierQuotes
+ // replace duplicated identifierQuotes with single identifierQuotes
// and remove single identifierQuotes
var nameParts = name.split(identifierQuote+identifierQuote);
for (var i = 0; i < nameParts.length; i++)
@@ -109,7 +109,7 @@
var nameParts = getText(name).split(".");
for (var i = 0; i < nameParts.length; i++)
nameParts[i] = identifierQuote +
- // doublicate identifierQuotes
+ // duplicate identifierQuotes
nameParts[i].replace(new RegExp(identifierQuote,"g"), identifierQuote+identifierQuote) +
identifierQuote;
var escaped = nameParts.join(".");
diff --git a/addon/search/match-highlighter.js b/addon/search/match-highlighter.js
index 3a4a7dedc1..9b181ebc01 100644
--- a/addon/search/match-highlighter.js
+++ b/addon/search/match-highlighter.js
@@ -16,7 +16,7 @@
// highlighted only if the selected text is a word. showToken, when enabled,
// will cause the current token to be highlighted when nothing is selected.
// delay is used to specify how much time to wait, in milliseconds, before
-// highlighting the matches. If annotateScrollbar is enabled, the occurences
+// highlighting the matches. If annotateScrollbar is enabled, the occurrences
// will be highlighted on the scrollbar via the matchesonscrollbar addon.
(function(mod) {
diff --git a/demo/complete.html b/demo/complete.html
index 2fef796401..3e7bd5ff56 100644
--- a/demo/complete.html
+++ b/demo/complete.html
@@ -71,7 +71,7 @@ Autocomplete Demo
addons.
@@ -88,7 +88,7 @@ Autocomplete Demo
["here", "hither"],
["asynchronous", "nonsynchronous"],
["completion", "achievement", "conclusion", "culmination", "expirations"],
- ["hinting", "advive", "broach", "imply"],
+ ["hinting", "advise", "broach", "imply"],
["function","action"],
["provide", "add", "bring", "give"],
["synonyms", "equivalents"],
diff --git a/demo/matchhighlighter.html b/demo/matchhighlighter.html
index 6aa937782d..8e0ff25b89 100644
--- a/demo/matchhighlighter.html
+++ b/demo/matchhighlighter.html
@@ -98,6 +98,6 @@ Match Highlighter Demo
});
- Search and highlight occurences of the selected text.
+ Search and highlight occurrences of the selected text.
diff --git a/demo/simplemode.html b/demo/simplemode.html
index d7b0cface4..b03335fb87 100644
--- a/demo/simplemode.html
+++ b/demo/simplemode.html
@@ -129,7 +129,7 @@ Simple Mode Demo
*/
CodeMirror.defineSimpleMode("simplemode", {
- // The start state contains the rules that are intially used
+ // The start state contains the rules that are initially used
start: [
// The regex matches the token, the token property contains the type
{regex: /"(?:[^\\]|\\.)*?(?:"|$)/, token: "string"},
diff --git a/doc/internals.html b/doc/internals.html
index 2137c937f2..893604e936 100644
--- a/doc/internals.html
+++ b/doc/internals.html
@@ -293,7 +293,7 @@ Intelligent Updating
Parsers can be Simple
When I wrote CodeMirror 1, I
-thought interruptable
+thought interruptible
parsers were a hugely scary and complicated thing, and I used a
bunch of heavyweight abstractions to keep this supposed complexity
under control: parsers
diff --git a/doc/manual.html b/doc/manual.html
index 285d420d9a..7aade3df15 100644
--- a/doc/manual.html
+++ b/doc/manual.html
@@ -2405,7 +2405,7 @@
Addons
Accepts linenumber, +/-linenumber, line:char,
scroll% and :linenumber formats.
This will make use of openDialog
- when available to make prompting for line number neater. Demo avaliable here.
+ when available to make prompting for line number neater. Demo available here.
search/matchesonscrollbar.js
- Adds a
showMatchesOnScrollbar method to editor
@@ -2721,7 +2721,7 @@ Addons
the "hint" type to find applicable hinting
functions, and tries them one by one. If that fails, it looks
for a "hintWords" helper to fetch a list of
- completable words for the mode, and
+ completeable words for the mode, and
uses CodeMirror.hint.fromList to complete from
those.
- When completions aren't simple strings, they should be
@@ -3683,13 +3683,13 @@
Extending VIM
getRegisterController()
- Returns the RegisterController that manages the state of registers
used by vim mode. For the RegisterController api see its
- defintion here.
+ definition here.
buildKeyMap()
-
Not currently implemented. If you would like to contribute this please open
- a pull request on Github.
+ a pull request on GitHub.
defineRegister()
diff --git a/doc/realworld.html b/doc/realworld.html
index a7402551f7..e5f8aef6f9 100644
--- a/doc/realworld.html
+++ b/doc/realworld.html
@@ -81,7 +81,7 @@ CodeMirror real-world uses
- Eloquent JavaScript (book)
- Emmet (fast XML editing)
- Espruino Web IDE (Chrome App for writing code on Espruino devices)
- - EXLskills Live Interivews
+ - EXLskills Live Interviews
- Fastfig (online computation/math tool)
- Farabi (modern Perl IDE)
- FathomJS integration (slides with editors, again)
@@ -92,7 +92,7 @@ CodeMirror real-world uses
- Gerrit's diff view and inline editor
- Git Crx (Chrome App for browsing local git repos)
- GitHub's Android app
- - Github's in-browser edit feature
+ - GitHub's in-browser edit feature
- Glitch (community-driven app building)
- Go language tour
- Google Apps Script
diff --git a/doc/releases.html b/doc/releases.html
index f6628b6548..feeb8088d5 100644
--- a/doc/releases.html
+++ b/doc/releases.html
@@ -193,7 +193,7 @@ Version 5.x
- Make Shift-Delete to cut work on Firefox.
- closetag addon: Properly handle self-closing tags.
- handlebars mode: Fix triple-brace support.
- - searchcursor addon: Support mathing
$ in reverse regexp search.
+ - searchcursor addon: Support matching
$ in reverse regexp search.
- panel addon: Don’t get confused by changing panel sizes.
- javascript-hint addon: Complete variables defined in outer scopes.
- sublime bindings: Make by-subword motion more consistent with Sublime Text.
@@ -354,7 +354,7 @@ Version 5.x
- New method
phrase and option phrases to make translating UI text in addons easier.
- closebrackets addon: Fix issue where bracket-closing wouldn't work before punctuation.
- panel addon: Fix problem where replacing the last remaining panel dropped the newly added panel.
- - hardwrap addon: Fix an infinite loop when the indention is greater than the target column.
+ - hardwrap addon: Fix an infinite loop when the indentation is greater than the target column.
- jinja2 and markdown modes: Add comment metadata.
@@ -588,7 +588,7 @@ Version 5.x
- Fix handling of shadow DOM roots when finding the active element.
- Add
role=presentation to more DOM elements to improve screen reader support.
- merge addon: Make aligning of unchanged chunks more robust.
- - comment addon: Fix comment-toggling on a block of text that starts and ends in a (differnet) block comment.
+ - comment addon: Fix comment-toggling on a block of text that starts and ends in a (different) block comment.
- javascript mode: Improve support for TypeScript syntax.
- r mode: Fix indentation after semicolon-less statements.
- shell mode: Properly handle escaped parentheses in parenthesized expressions.
@@ -653,7 +653,7 @@ Version 5.x
- Tapping/clicking the editor in contentEditable mode on Chrome now puts the cursor at the tapped position.
- - Fix various crashes and misbehaviors when reading composition events in contentEditable mode.
+ - Fix various crashes and misbehavior when reading composition events in contentEditable mode.
- Catches and ignores an IE 'Unspecified Error' when creating an editor in an iframe before there is a
<body>.
- merge addon: Fix several issues in the chunk-aligning feature.
- verilog mode: Rewritten to address various issues.
@@ -876,7 +876,7 @@ Version 5.x
- New modes: Vue, Oz, MscGen (and dialects), Closure Stylesheets
- Implement CommonMark-style flexible list indent and cross-line code spans in Markdown mode
- Add a replace-all button to the search addon, and make the persistent search dialog transparent when it obscures the match
- - Handle
acync/await and ocal and binary numbers in JavaScript mode
+ - Handle
async/await and ocal and binary numbers in JavaScript mode
- Fix various issues with the Haxe mode
- Make the closebrackets addon select only the wrapped text when wrapping selection in brackets
- Tokenize properties as properties in the CoffeeScript mode
@@ -1683,7 +1683,7 @@ Version 2.x
bindings.
- Support for overwrite (insert).
- Custom-width
- and stylable tabs.
+ and styleable tabs.
- Moved more code into add-on scripts.
- Support for sane vertical cursor movement in wrapped lines.
- More reliable handling of
@@ -1704,7 +1704,7 @@
Version 2.x
- Add support for line
wrapping and code
folding.
- - Add Github-style Markdown mode.
+ - Add GitHub-style Markdown mode.
- Add Monokai
and Rubyblue themes.
- Add
setBookmark method.
diff --git a/doc/upgrade_v2.2.html b/doc/upgrade_v2.2.html
index 5709e652bf..dabe974cfa 100644
--- a/doc/upgrade_v2.2.html
+++ b/doc/upgrade_v2.2.html
@@ -79,7 +79,7 @@ Different key customization
and indent it less when shift is held ("indentLess").
There are also "indentAuto" (smart indent)
and "insertTab" commands provided for alternate
-behaviors. Or you can write your own handler function to do something
+behavior. Or you can write your own handler function to do something
different altogether.
Tabs
diff --git a/index.html b/index.html
index a89b1de5d3..3934c309d9 100644
--- a/index.html
+++ b/index.html
@@ -100,7 +100,7 @@ This is CodeMirror
diff --git a/keymap/vim.js b/keymap/vim.js
index 789e1e55b3..dba9d7c1e0 100644
--- a/keymap/vim.js
+++ b/keymap/vim.js
@@ -737,7 +737,7 @@
// TODO: Convert keymap into dictionary format for fast lookup.
},
// Testing hook, though it might be useful to expose the register
- // controller anyways.
+ // controller anyway.
getRegisterController: function() {
return vimGlobalState.registerController;
},
@@ -4322,7 +4322,7 @@
raw += ' ' + desc + '';
return raw;
}
- var searchPromptDesc = '(Javascript regexp)';
+ var searchPromptDesc = '(JavaScript regexp)';
function showPrompt(cm, options) {
var shortText = (options.prefix || '') + ' ' + (options.desc || '');
var prompt = makePrompt(options.prefix, options.desc);
@@ -5234,7 +5234,7 @@
* @param {Cursor} lineEnd Line to stop replacing at.
* @param {RegExp} query Query for performing matches with.
* @param {string} replaceWith Text to replace matches with. May contain $1,
- * $2, etc for replacing captured groups using Javascript replace.
+ * $2, etc for replacing captured groups using JavaScript replace.
* @param {function()} callback A callback for when the replace is done.
*/
function doReplace(cm, confirm, global, lineStart, lineEnd, searchCursor, query,
diff --git a/mode/asn.1/asn.1.js b/mode/asn.1/asn.1.js
index d3ecb08781..df1330b686 100644
--- a/mode/asn.1/asn.1.js
+++ b/mode/asn.1/asn.1.js
@@ -190,7 +190,7 @@
" NetworkAddress BITS BMPString TimeStamp TimeTicks" +
" TruthValue RowStatus DisplayString GeneralString" +
" GraphicString IA5String NumericString" +
- " PrintableString SnmpAdminAtring TeletexString" +
+ " PrintableString SnmpAdminString TeletexString" +
" UTF8String VideotexString VisibleString StringStore" +
" ISO646String T61String UniversalString Unsigned32" +
" Integer32 Gauge Gauge32 Counter Counter32 Counter64"),
diff --git a/mode/clike/clike.js b/mode/clike/clike.js
index 2154f1d2df..5d01e1cd4c 100644
--- a/mode/clike/clike.js
+++ b/mode/clike/clike.js
@@ -749,7 +749,7 @@ CodeMirror.defineMode("clike", function(config, parserConfig) {
"gl_ModelViewMatrix gl_ProjectionMatrix gl_ModelViewProjectionMatrix " +
"gl_TextureMatrix gl_NormalMatrix gl_ModelViewMatrixInverse " +
"gl_ProjectionMatrixInverse gl_ModelViewProjectionMatrixInverse " +
- "gl_TexureMatrixTranspose gl_ModelViewMatrixInverseTranspose " +
+ "gl_TextureMatrixTranspose gl_ModelViewMatrixInverseTranspose " +
"gl_ProjectionMatrixInverseTranspose " +
"gl_ModelViewProjectionMatrixInverseTranspose " +
"gl_TextureMatrixInverseTranspose " +
diff --git a/mode/clike/index.html b/mode/clike/index.html
index 0cfae2149e..b1c881904f 100644
--- a/mode/clike/index.html
+++ b/mode/clike/index.html
@@ -148,7 +148,7 @@ Objective-C example
*/
#import "MyClass.h"
-#import
+#import
@import BFrameworkModule;
NS_ENUM(SomeValues) {
diff --git a/mode/dtd/dtd.js b/mode/dtd/dtd.js
index 74b8c6bded..40370a393d 100644
--- a/mode/dtd/dtd.js
+++ b/mode/dtd/dtd.js
@@ -34,7 +34,7 @@ CodeMirror.defineMode("dtd", function(config) {
state.tokenize = inBlock("meta", "?>");
return ret("meta", ch);
} else if (ch == "#" && stream.eatWhile(/[\w]/)) return ret("atom", "tag");
- else if (ch == "|") return ret("keyword", "seperator");
+ else if (ch == "|") return ret("keyword", "separator");
else if (ch.match(/[\(\)\[\]\-\.,\+\?>]/)) return ret(null, ch);//if(ch === ">") return ret(null, "endtag"); else
else if (ch.match(/[\[\]]/)) return ret("rule", ch);
else if (ch == "\"" || ch == "'") {
diff --git a/mode/factor/factor.js b/mode/factor/factor.js
index 7108278cca..4c876d4d29 100644
--- a/mode/factor/factor.js
+++ b/mode/factor/factor.js
@@ -16,7 +16,7 @@
"use strict";
CodeMirror.defineSimpleMode("factor", {
- // The start state contains the rules that are intially used
+ // The start state contains the rules that are initially used
start: [
// comments
{regex: /#?!.*/, token: "comment"},
diff --git a/mode/factor/index.html b/mode/factor/index.html
index 574d402dda..6a77230d40 100644
--- a/mode/factor/index.html
+++ b/mode/factor/index.html
@@ -70,7 +70,7 @@ Factor mode
});
-Simple mode that handles Factor Syntax (Factor on WikiPedia).
+Simple mode that handles Factor Syntax (Factor on Wikipedia).
MIME types defined: text/x-factor.
diff --git a/mode/fcl/index.html b/mode/fcl/index.html
index e51fa166b9..9194dfddaf 100644
--- a/mode/fcl/index.html
+++ b/mode/fcl/index.html
@@ -61,7 +61,7 @@ FCL mode
END_FUZZIFY
DEFUZZIFY ProbabilityAccess
- TERM hight := 1;
+ TERM height := 1;
TERM medium := 0.5;
TERM low := 0;
ACCU: MAX;
@@ -70,7 +70,7 @@ FCL mode
END_DEFUZZIFY
DEFUZZIFY ProbabilityDistribution
- TERM hight := 1;
+ TERM height := 1;
TERM medium := 0.5;
TERM low := 0;
ACCU: MAX;
@@ -80,14 +80,14 @@ FCL mode
RULEBLOCK No1
AND : MIN;
- RULE 1 : IF TimeDay IS outside AND ApplicateHost IS few THEN ProbabilityAccess IS hight;
- RULE 2 : IF ApplicateHost IS many THEN ProbabilityAccess IS hight;
+ RULE 1 : IF TimeDay IS outside AND ApplicateHost IS few THEN ProbabilityAccess IS height;
+ RULE 2 : IF ApplicateHost IS many THEN ProbabilityAccess IS height;
RULE 3 : IF TimeDay IS inside AND ApplicateHost IS few THEN ProbabilityAccess IS low;
END_RULEBLOCK
RULEBLOCK No2
AND : MIN;
- RULE 1 : IF ApplicateHost IS many THEN ProbabilityDistribution IS hight;
+ RULE 1 : IF ApplicateHost IS many THEN ProbabilityDistribution IS height;
END_RULEBLOCK
END_FUNCTION_BLOCK
diff --git a/mode/forth/index.html b/mode/forth/index.html
index c6f0b5c5c8..6b6477cae7 100644
--- a/mode/forth/index.html
+++ b/mode/forth/index.html
@@ -68,7 +68,7 @@ Forth mode
});
-Simple mode that handle Forth-Syntax (Forth on WikiPedia).
+Simple mode that handle Forth-Syntax (Forth on Wikipedia).
MIME types defined: text/x-forth.
diff --git a/mode/gas/gas.js b/mode/gas/gas.js
index e34d7a7b61..b3515abe77 100644
--- a/mode/gas/gas.js
+++ b/mode/gas/gas.js
@@ -302,11 +302,11 @@ CodeMirror.defineMode("gas", function(_config, parserConfig) {
}
if (ch === '{') {
- return "braket";
+ return "bracket";
}
if (ch === '}') {
- return "braket";
+ return "bracket";
}
if (/\d/.test(ch)) {
diff --git a/mode/gfm/test.js b/mode/gfm/test.js
index d933896aa5..e2002879cb 100644
--- a/mode/gfm/test.js
+++ b/mode/gfm/test.js
@@ -92,7 +92,7 @@
"[em *foo ][em&link bar/hello@be6a8cc1c1ecfe9489fb51e4869af15a13fc2cd2][em *]");
MT("wordSHA",
- "ask for feedbac")
+ "ask for feedback")
MT("num",
"foo [link #1] bar");
diff --git a/mode/haml/haml.js b/mode/haml/haml.js
index 3c8f505eb5..d941d97433 100644
--- a/mode/haml/haml.js
+++ b/mode/haml/haml.js
@@ -72,7 +72,7 @@
}
}
- // donot handle --> as valid ruby, make it HTML close comment instead
+ // do not handle --> as valid ruby, make it HTML close comment instead
if (state.startOfLine && !stream.match("-->", false) && (ch == "=" || ch == "-" )) {
state.tokenize = ruby;
return state.tokenize(stream, state);
diff --git a/mode/htmlembedded/index.html b/mode/htmlembedded/index.html
index b1cafde973..d17afec8b1 100644
--- a/mode/htmlembedded/index.html
+++ b/mode/htmlembedded/index.html
@@ -55,6 +55,6 @@ Html Embedded Scripts mode
JavaScript, CSS and XML.
Other dependencies include those of the scripting language chosen.
MIME types defined: application/x-aspx (ASP.NET),
- application/x-ejs (Embedded Javascript), application/x-jsp (JavaServer Pages)
+ application/x-ejs (Embedded JavaScript), application/x-jsp (JavaServer Pages)
and application/x-erb
diff --git a/mode/idl/idl.js b/mode/idl/idl.js
index 168761cd88..37302bb90f 100644
--- a/mode/idl/idl.js
+++ b/mode/idl/idl.js
@@ -62,7 +62,7 @@
'empty', 'enable_sysrtn', 'eof', 'eos', 'erase',
'erf', 'erfc', 'erfcx', 'erode', 'errorplot',
'errplot', 'estimator_filter', 'execute', 'exit', 'exp',
- 'expand', 'expand_path', 'expint', 'extrac', 'extract_slice',
+ 'expand', 'expand_path', 'expint', 'extract', 'extract_slice',
'f_cvf', 'f_pdf', 'factorial', 'fft', 'file_basename',
'file_chmod', 'file_copy', 'file_delete', 'file_dirname',
'file_expand_path', 'file_gunzip', 'file_gzip', 'file_info',
diff --git a/mode/javascript/test.js b/mode/javascript/test.js
index ffff05f513..26a81ffc8d 100644
--- a/mode/javascript/test.js
+++ b/mode/javascript/test.js
@@ -252,7 +252,7 @@
MT("async_object",
"[keyword let] [def obj] [operator =] { [property async]: [atom false] };");
- // async be highlighet as keyword and foo as def, but it requires potentially expensive look-ahead. See #4173
+ // async be highlighted as keyword and foo as def, but it requires potentially expensive look-ahead. See #4173
MT("async_object_function",
"[keyword let] [def obj] [operator =] { [property async] [property foo]([def args]) { [keyword return] [atom true]; } };");
diff --git a/mode/markdown/index.html b/mode/markdown/index.html
index da3fe61b98..4984c04b2c 100644
--- a/mode/markdown/index.html
+++ b/mode/markdown/index.html
@@ -159,7 +159,7 @@ Markdown mode
Unordered (bulleted) lists use asterisks, pluses, and hyphens (`*`,
`+`, and `-`) as list markers. These three markers are
-interchangable; this:
+interchangeable; this:
* Candy.
* Gum.
@@ -306,7 +306,7 @@ Markdown mode
I strongly recommend against using any `<blink>` tags.
I wish SmartyPants used named entities like `—`
- instead of decimal-encoded entites like `—`.
+ instead of decimal-encoded entities like `—`.
Output:
@@ -315,7 +315,7 @@ Markdown mode
<p>I wish SmartyPants used named entities like
<code>&mdash;</code> instead of decimal-encoded
- entites like <code>&#8212;</code>.</p>
+ entities like <code>&#8212;</code>.</p>
To specify an entire block of pre-formatted code, indent every line of
@@ -360,7 +360,7 @@ Markdown mode
});
- If you also want support strikethrough, emoji and few other goodies, check out Github-Flavored Markdown mode.
+ If you also want support strikethrough, emoji and few other goodies, check out GitHub-Flavored Markdown mode.
Optionally depends on other modes for properly highlighted code blocks,
and XML mode for properly highlighted inline XML blocks.
@@ -370,7 +370,7 @@ Markdown mode
highlightFormatting: boolean
- Whether to separately highlight markdown meta characterts (*[]()etc.) (default: false).
+ Whether to separately highlight markdown meta characters (*[]()etc.) (default: false).
diff --git a/mode/markdown/markdown.js b/mode/markdown/markdown.js
index 287f39b55d..aee76c43ac 100644
--- a/mode/markdown/markdown.js
+++ b/mode/markdown/markdown.js
@@ -223,7 +223,7 @@ CodeMirror.defineMode("markdown", function(cmCfg, modeCfg) {
// Add this list item's content's indentation to the stack
state.listStack.push(state.indentation);
- // Reset inline styles which shouldn't propagate aross list items
+ // Reset inline styles which shouldn't propagate across list items
state.em = false;
state.strong = false;
state.code = false;
diff --git a/mode/markdown/test.js b/mode/markdown/test.js
index 929e7bba19..fd5a1fb4d5 100644
--- a/mode/markdown/test.js
+++ b/mode/markdown/test.js
@@ -315,7 +315,7 @@
"[header&header-2 bar]",
"[header&header-2 ---]");
- MT("setextAferATX",
+ MT("setextAfterATX",
"[header&header-1 # foo]",
"[header&header-2 bar]",
"[header&header-2 ---]");
@@ -659,7 +659,7 @@
" [variable-2 text after fenced code]");
// should correctly parse numbered list content indentation
- MT("listCommonMark_NumeberedListIndent",
+ MT("listCommonMark_NumberedListIndent",
"[variable-2 1000. list with base indent of 6]",
"",
" [variable-2 text must be indented 6 spaces at minimum]",
diff --git a/mode/meta.js b/mode/meta.js
index c7738a514c..92b68074ca 100644
--- a/mode/meta.js
+++ b/mode/meta.js
@@ -44,7 +44,7 @@
{name: "edn", mime: "application/edn", mode: "clojure", ext: ["edn"]},
{name: "Eiffel", mime: "text/x-eiffel", mode: "eiffel", ext: ["e"]},
{name: "Elm", mime: "text/x-elm", mode: "elm", ext: ["elm"]},
- {name: "Embedded Javascript", mime: "application/x-ejs", mode: "htmlembedded", ext: ["ejs"]},
+ {name: "Embedded JavaScript", mime: "application/x-ejs", mode: "htmlembedded", ext: ["ejs"]},
{name: "Embedded Ruby", mime: "application/x-erb", mode: "htmlembedded", ext: ["erb"]},
{name: "Erlang", mime: "text/x-erlang", mode: "erlang", ext: ["erl"]},
{name: "Esper", mime: "text/x-esper", mode: "sql"},
diff --git a/mode/modelica/modelica.js b/mode/modelica/modelica.js
index a83a4135d0..2e9622f03f 100644
--- a/mode/modelica/modelica.js
+++ b/mode/modelica/modelica.js
@@ -90,7 +90,7 @@
return "error";
}
- function tokenUnsignedNuber(stream, state) {
+ function tokenUnsignedNumber(stream, state) {
stream.eatWhile(isDigit);
if (stream.eat('.')) {
stream.eatWhile(isDigit);
@@ -164,9 +164,9 @@
else if(ch == '"') {
state.tokenize = tokenString;
}
- // UNSIGNED_NUBER
+ // UNSIGNED_NUMBER
else if(isDigit.test(ch)) {
- state.tokenize = tokenUnsignedNuber;
+ state.tokenize = tokenUnsignedNumber;
}
// ERROR
else {
diff --git a/mode/mumps/mumps.js b/mode/mumps/mumps.js
index 3671c9cb36..c53b4bf3a2 100644
--- a/mode/mumps/mumps.js
+++ b/mode/mumps/mumps.js
@@ -26,7 +26,7 @@
var brackets = new RegExp("[()]");
var identifiers = new RegExp("^[%A-Za-z][A-Za-z0-9]*");
var commandKeywords = ["break","close","do","else","for","goto", "halt", "hang", "if", "job","kill","lock","merge","new","open", "quit", "read", "set", "tcommit", "trollback", "tstart", "use", "view", "write", "xecute", "b","c","d","e","f","g", "h", "i", "j","k","l","m","n","o", "q", "r", "s", "tc", "tro", "ts", "u", "v", "w", "x"];
- // The following list includes instrinsic functions _and_ special variables
+ // The following list includes intrinsic functions _and_ special variables
var intrinsicFuncsWords = ["\\$ascii", "\\$char", "\\$data", "\\$ecode", "\\$estack", "\\$etrap", "\\$extract", "\\$find", "\\$fnumber", "\\$get", "\\$horolog", "\\$io", "\\$increment", "\\$job", "\\$justify", "\\$length", "\\$name", "\\$next", "\\$order", "\\$piece", "\\$qlength", "\\$qsubscript", "\\$query", "\\$quit", "\\$random", "\\$reverse", "\\$select", "\\$stack", "\\$test", "\\$text", "\\$translate", "\\$view", "\\$x", "\\$y", "\\$a", "\\$c", "\\$d", "\\$e", "\\$ec", "\\$es", "\\$et", "\\$f", "\\$fn", "\\$g", "\\$h", "\\$i", "\\$j", "\\$l", "\\$n", "\\$na", "\\$o", "\\$p", "\\$q", "\\$ql", "\\$qs", "\\$r", "\\$re", "\\$s", "\\$st", "\\$t", "\\$tr", "\\$v", "\\$z"];
var intrinsicFuncs = wordRegexp(intrinsicFuncsWords);
var command = wordRegexp(commandKeywords);
diff --git a/mode/nginx/index.html b/mode/nginx/index.html
index 5c2bc6e2cf..1aa690a6d4 100644
--- a/mode/nginx/index.html
+++ b/mode/nginx/index.html
@@ -62,7 +62,7 @@ NGINX mode
location / {
index index.html index.php; ## Allow a static html file to be shown first
try_files $uri $uri/ @handler; ## If missing pass the URI to Magento's front handler
- expires 30d; ## Assume all files are cachable
+ expires 30d; ## Assume all files are cacheable
}
## These locations would be hidden by .htaccess normally
@@ -128,7 +128,7 @@ NGINX mode
location / {
index index.html index.php; ## Allow a static html file to be shown first
try_files $uri $uri/ @handler; ## If missing pass the URI to Magento's front handler
- expires 30d; ## Assume all files are cachable
+ expires 30d; ## Assume all files are cacheable
}
## These locations would be hidden by .htaccess normally
diff --git a/mode/ntriples/index.html b/mode/ntriples/index.html
index 5473dbffc0..275cf08b49 100644
--- a/mode/ntriples/index.html
+++ b/mode/ntriples/index.html
@@ -58,7 +58,7 @@
"literal 1" .
_:bnode3 .
_:bnode4 "literal 2"@lang .
- # if a graph labe
+ # if a graph label
_:bnode5 "literal 3"^^ .
diff --git a/mode/oz/oz.js b/mode/oz/oz.js
index a9738495b6..63ad806abc 100644
--- a/mode/oz/oz.js
+++ b/mode/oz/oz.js
@@ -130,7 +130,7 @@ CodeMirror.defineMode("oz", function (conf) {
return "operator";
}
- // If nothing match, we skip the entire alphanumerical block
+ // If nothing match, we skip the entire alphanumeric block
stream.eatWhile(/\w/);
return "variable";
diff --git a/mode/perl/perl.js b/mode/perl/perl.js
index 220b0a6994..ffe7877af1 100644
--- a/mode/perl/perl.js
+++ b/mode/perl/perl.js
@@ -347,7 +347,7 @@ CodeMirror.defineMode("perl",function(){
lc :1, // - return lower-case version of a string
lcfirst :1, // - return a string with just the next letter in lower case
length :1, // - return the number of bytes in a string
- 'link' :1, // - create a hard link in the filesytem
+ 'link' :1, // - create a hard link in the filesystem
listen :1, // - register your socket as a server
local : 2, // - create a temporary value for a global variable (dynamic scoping)
localtime :1, // - convert UNIX time into record or string using local time
@@ -441,7 +441,7 @@ CodeMirror.defineMode("perl",function(){
state :1, // - declare and assign a state variable (persistent lexical scoping)
study :1, // - optimize input data for repeated searches
'sub' :1, // - declare a subroutine, possibly anonymously
- 'substr' :1, // - get or alter a portion of a stirng
+ 'substr' :1, // - get or alter a portion of a string
symlink :1, // - create a symbolic link to a file
syscall :1, // - execute an arbitrary system call
sysopen :1, // - open a file, pipe, or descriptor
diff --git a/mode/python/index.html b/mode/python/index.html
index bdfc8f574c..78a3a14641 100644
--- a/mode/python/index.html
+++ b/mode/python/index.html
@@ -190,7 +190,7 @@ Configuration Options for Python mode:
hangingIndent - int - If you want to write long arguments to a function starting on a new line, how much that line should be indented. Defaults to one normal indentation unit.
Advanced Configuration Options:
- Usefull for superset of python syntax like Enthought enaml, IPython magics and questionmark help
+ Useful for superset of python syntax like Enthought enaml, IPython magics and questionmark help