@@ -84,6 +84,9 @@ var pat_vim2js = {
84
84
"^[a-z]$" : "^[a-z]$" ,
85
85
"^[vgslabwt]:$\\|^\\([vgslabwt]:\\)\\?[A-Za-z_][0-9A-Za-z_#]*$" : "^[vgslabwt]:$|^([vgslabwt]:)?[A-Za-z_][0-9A-Za-z_#]*$" ,
86
86
"^[0-7]$" : "^[0-7]$" ,
87
+ "^[0-9A-Fa-f][0-9A-Fa-f]$" : "^[0-9A-Fa-f][0-9A-Fa-f]$" ,
88
+ "^\\.[0-9A-Fa-f]$" : "^\\.[0-9A-Fa-f]$" ,
89
+ "^[0-9A-Fa-f][^0-9A-Fa-f]$" : "^[0-9A-Fa-f][^0-9A-Fa-f]$" ,
87
90
}
88
91
89
92
function viml_add ( lst , item ) {
@@ -327,6 +330,7 @@ var NODE_REG = 89;
327
330
var NODE_CURLYNAMEPART = 90 ;
328
331
var NODE_CURLYNAMEEXPR = 91 ;
329
332
var NODE_LAMBDA = 92 ;
333
+ var NODE_BLOB = 93 ;
330
334
var TOKEN_EOF = 1 ;
331
335
var TOKEN_EOL = 2 ;
332
336
var TOKEN_SPACE = 3 ;
@@ -392,6 +396,7 @@ var TOKEN_BACKTICK = 62;
392
396
var TOKEN_DOTDOTDOT = 63 ;
393
397
var TOKEN_SHARP = 64 ;
394
398
var TOKEN_ARROW = 65 ;
399
+ var TOKEN_BLOB = 66 ;
395
400
var MAX_FUNC_ARGS = 20 ;
396
401
function isalpha ( c ) {
397
402
return viml_eqregh ( c , "^[A-Za-z]$" ) ;
@@ -2329,6 +2334,11 @@ ExprTokenizer.prototype.get2 = function() {
2329
2334
s += r . read_bdigit ( ) ;
2330
2335
return this . token ( TOKEN_NUMBER , s , pos ) ;
2331
2336
}
2337
+ else if ( c == "0" && ( r . p ( 1 ) == "Z" || r . p ( 1 ) == "z" ) && r . p ( 2 ) != "." ) {
2338
+ var s = r . getn ( 2 ) ;
2339
+ s += r . read_blob ( ) ;
2340
+ return this . token ( TOKEN_BLOB , s , pos ) ;
2341
+ }
2332
2342
else if ( isdigit ( c ) ) {
2333
2343
var s = r . read_digit ( ) ;
2334
2344
if ( r . p ( 0 ) == "." && isdigit ( r . p ( 1 ) ) ) {
@@ -3236,6 +3246,11 @@ ExprParser.prototype.parse_expr9 = function() {
3236
3246
node . pos = token . pos ;
3237
3247
node . value = token . value ;
3238
3248
}
3249
+ else if ( token . type == TOKEN_BLOB ) {
3250
+ var node = Node ( NODE_BLOB ) ;
3251
+ node . pos = token . pos ;
3252
+ node . value = token . value ;
3253
+ }
3239
3254
else if ( token . type == TOKEN_DQUOTE ) {
3240
3255
this . reader . seek_set ( pos ) ;
3241
3256
var node = Node ( NODE_STRING ) ;
@@ -3846,6 +3861,26 @@ StringReader.prototype.read_odigit = function() {
3846
3861
return r ;
3847
3862
}
3848
3863
3864
+ StringReader . prototype . read_blob = function ( ) {
3865
+ var r = "" ;
3866
+ while ( 1 ) {
3867
+ var s = this . peekn ( 2 ) ;
3868
+ if ( viml_eqregh ( s , "^[0-9A-Fa-f][0-9A-Fa-f]$" ) ) {
3869
+ r += this . getn ( 2 ) ;
3870
+ }
3871
+ else if ( viml_eqregh ( s , "^\\.[0-9A-Fa-f]$" ) ) {
3872
+ r += this . getn ( 1 ) ;
3873
+ }
3874
+ else if ( viml_eqregh ( s , "^[0-9A-Fa-f][^0-9A-Fa-f]$" ) ) {
3875
+ throw Err ( "E973: Blob literal should have an even number of hex characters:" + s , this . getpos ( ) ) ;
3876
+ }
3877
+ else {
3878
+ break ;
3879
+ }
3880
+ }
3881
+ return r ;
3882
+ }
3883
+
3849
3884
StringReader . prototype . read_xdigit = function ( ) {
3850
3885
var r = "" ;
3851
3886
while ( isxdigit ( this . peekn ( 1 ) ) ) {
@@ -4185,6 +4220,9 @@ Compiler.prototype.compile = function(node) {
4185
4220
else if ( node . type == NODE_NUMBER ) {
4186
4221
return this . compile_number ( node ) ;
4187
4222
}
4223
+ else if ( node . type == NODE_BLOB ) {
4224
+ return this . compile_blob ( node ) ;
4225
+ }
4188
4226
else if ( node . type == NODE_STRING ) {
4189
4227
return this . compile_string ( node ) ;
4190
4228
}
@@ -4640,6 +4678,10 @@ Compiler.prototype.compile_number = function(node) {
4640
4678
return node . value ;
4641
4679
}
4642
4680
4681
+ Compiler . prototype . compile_blob = function ( node ) {
4682
+ return node . value ;
4683
+ }
4684
+
4643
4685
Compiler . prototype . compile_string = function ( node ) {
4644
4686
return node . value ;
4645
4687
}
0 commit comments