commit 9faf2b492184cd4421ed155ccc612b0500655db7
| author | 斟酌 鵬兄 <tgckpg@gmail.com> |
| date | 2016-03-30T12:11:48Z |
| subject | InputEvent carrying range |
commit 9faf2b492184cd4421ed155ccc612b0500655db7
Author: 斟酌 鵬兄 <tgckpg@gmail.com>
Date: 2016-03-30T12:11:48Z
InputEvent carrying range
---
botanjs/src/Components/Vim/Controls.js | 40 ++++++++++++++++------
botanjs/src/Components/Vim/Syntax/Analyzer.js | 2 +-
botanjs/src/Components/Vim/Syntax/Word.js | 8 ++---
.../externs/Components.Vim.Controls.InputEvent.js | 2 ++
4 files changed, 37 insertions(+), 15 deletions(-)
diff --git a/botanjs/src/Components/Vim/Controls.js b/botanjs/src/Components/Vim/Controls.js
index 76f9bd0..29e86c4 100644
--- a/botanjs/src/Components/Vim/Controls.js
+++ b/botanjs/src/Components/Vim/Controls.js
@@ -128,7 +128,7 @@
this.__ccur = this.__cfeeder.cursor;
};
- Controls.prototype.__comp = function( kCode, handler )
+ Controls.prototype.__comp = function( e, handler )
{
if( handler )
{
@@ -141,6 +141,8 @@
return true;
}
+ var kCode = e.keyCode;
+
for( var i = 0; i < this.__compReg.length; i ++ )
{
var compReg = this.__compReg[i];
@@ -150,7 +152,7 @@
{
if( compReg.i == keys.length )
{
- compReg.handler();
+ compReg.handler( e );
this.__compReg = null;
this.__cMovement = false;
}
@@ -249,7 +251,7 @@
{
if( !e.ModKeys )
{
- this.__comp( kCode );
+ this.__comp( e );
return true;
}
}
@@ -312,23 +314,26 @@
this.__cMovement = true;
// Word boundary
- this.__comp( kCode, function(){
+ this.__comp( e, function( e2 ) {
var WordMatch = analyzer.wordAt( ccur.aPos );
debug.Info( "Word: "
+ ccur.feeder.content.substring( WordMatch.open, WordMatch.close + 1 )
);
+
+ e2.__range = WordMatch;
+
}, W );
- this.__comp( kCode, function(){
+ this.__comp( e, function(){
debug.Info( "Bracket boundary [" );
}, S_BRACKET_L );
- this.__comp( kCode, function(){
+ this.__comp( e, function(){
debug.Info( "Bracket boundary ]" );
}, S_BRACKET_R );
- this.__comp( kCode, function(){
+ this.__comp( e, function(){
debug.Info( "Bracket boundary {" );
}, SHIFT + S_BRACKET_L );
- this.__comp( kCode, function(){
+ this.__comp( e, function(){
debug.Info( "Bracket boundary }" );
analyzer.bracketAt( ccur.aPos );
}, SHIFT + S_BRACKET_R );
@@ -336,11 +341,11 @@
case G: // Go to top
this.__cMovement = true;
- this.__comp( kCode, function(){
+ this.__comp( e, function(){
ccur.moveY( -Number.MAX_VALUE );
ccur.moveX( -Number.MAX_VALUE, true );
}, G );
- this.__comp( kCode, function(){
+ this.__comp( e, function(){
ccur.openRunAction( "PRINT_HEX", e );
}, _8 );
break;
@@ -420,6 +425,8 @@
this.__modKeys = c == KEY_SHIFT || c == KEY_CTRL || c == KEY_ALT;
this.__key = e.key;
+
+ this.__range = null;
};
__readOnly( InputEvent.prototype, "target", function() { return this.__target; } );
@@ -428,6 +435,19 @@
__readOnly( InputEvent.prototype, "ModKeys", function() { return this.__modKeys; } );
__readOnly( InputEvent.prototype, "Escape", function() { return this.__escape; } );
+ __readOnly( InputEvent.prototype, "range", function() {
+
+ /** @type {Components.Vim.Syntax.TokenMatch} */
+ var r = this.__range;
+
+ if( r && r.open == -1 && r.close == -1 )
+ {
+ return null;
+ }
+
+ return r;
+ } );
+
InputEvent.prototype.kMap = function( map )
{
return this.__kCode == Map( map );
diff --git a/botanjs/src/Components/Vim/Syntax/Analyzer.js b/botanjs/src/Components/Vim/Syntax/Analyzer.js
index c328f59..cb816cf 100644
--- a/botanjs/src/Components/Vim/Syntax/Analyzer.js
+++ b/botanjs/src/Components/Vim/Syntax/Analyzer.js
@@ -262,7 +262,7 @@
if( p < Len ) while( word.test( c[ ++ j ] ) );
var tMatch = new TokenMatch();
- tMatch.__open = i + 1;
+ tMatch.__open = 0 < i ? i + 1 : 0;
tMatch.__close = j - 1;
return tMatch;
diff --git a/botanjs/src/Components/Vim/Syntax/Word.js b/botanjs/src/Components/Vim/Syntax/Word.js
index 7283d97..d879e59 100644
--- a/botanjs/src/Components/Vim/Syntax/Word.js
+++ b/botanjs/src/Components/Vim/Syntax/Word.js
@@ -20,7 +20,7 @@
]
,
[
- , [ 0x0250, 0x02AF ] // IPA Extensions
+ [ 0x0250, 0x02AF ] // IPA Extensions
, [ 0x02B0, 0x02FF ] // Spacing Modifier Letters
, [ 0x0300, 0x036F ] // Combining Diacritical Marks
, [ 0x0370, 0x03FF ] // Greek and Coptic
@@ -129,7 +129,7 @@
]
,
[ // CJK scripts and symbols
- , [ 0x2E80, 0x2EFF ] // CJK Radicals Supplement
+ [ 0x2E80, 0x2EFF ] // CJK Radicals Supplement
, [ 0x2F00, 0x2FDF ] // Kangxi Radicals
, [ 0x2FF0, 0x2FFF ] // Ideographic Description Characters
, [ 0x3000, 0x303F ] // CJK Symbols and Punctuation
@@ -177,7 +177,7 @@
]
,
[ // Surrogates
- , [ 0xD800, 0xDBFF ] // High Surrogates
+ [ 0xD800, 0xDBFF ] // High Surrogates
, [ 0xDC00, 0xDFFF ] // Low Surrogates
, [ 0xE000, 0xF8FF ] // Private Use Area
, [ 0xF900, 0xFAFF ] // CJK Compatibility Ideographs
@@ -197,7 +197,7 @@
// Basic Latin
[ 0x0021, 0x002F ], [ 0x003A, 0x0040 ], [ 0x005B, 0x0060 ], [ 0x007B, 0x007E ],
// C1 Controls and Latin-1 Supplement (Extended ASCII)
- [ 0x00A1, 0x00AC ], [ 0x00AE, 0x00BF ],
+ [ 0x00A1, 0x00AC ], [ 0x00AE, 0x00BF ]
]
];
diff --git a/botanjs/src/externs/Components.Vim.Controls.InputEvent.js b/botanjs/src/externs/Components.Vim.Controls.InputEvent.js
index a8e1bdb..afe109d 100644
--- a/botanjs/src/externs/Components.Vim.Controls.InputEvent.js
+++ b/botanjs/src/externs/Components.Vim.Controls.InputEvent.js
@@ -3,6 +3,8 @@ Components.Vim.Controls.InputEvent = function(){};
/** @type {Components.Vim.VimArea} */
Components.Vim.Controls.InputEvent.target;
+/** @type {Components.Vim.Syntax.TokenMatch} */
+Components.Vim.Controls.InputEvent.range;
/** @type String */
Components.Vim.Controls.InputEvent.key;
/** @type Boolean */