Fix the decoding. Not sure it's fully done yet.
author |
Steve Losh <steve@stevelosh.com> |
date |
Wed, 09 Dec 2015 12:12:55 +0000 |
parents |
1f8c437ae3c8
|
children |
2975b6f50397
|
branches/tags |
(none) |
files |
autoload/bencode.vim |
Changes
--- a/autoload/bencode.vim Sat Dec 05 22:33:04 2015 +0000
+++ b/autoload/bencode.vim Wed Dec 09 12:12:55 2015 +0000
@@ -40,7 +40,7 @@
function! bencode#BdecodeAll(bstring) " {{{
let results = []
let remaining = a:bstring
- while remaining != ""
+ while remaining !~# '\v^\s*$'
let dec = s:ActuallyBdecode(remaining)
call add(results, dec[0])
let remaining = dec[1]
@@ -53,14 +53,15 @@
endfunction " }}}
function! s:ActuallyBdecode(bstring) " {{{
- if a:bstring[0] == 'i'
- return s:BdecodeInteger(a:bstring)
- elseif a:bstring[0] =~ '[0-9]'
- return s:BdecodeString(a:bstring)
- elseif a:bstring[0] == 'l'
- return s:BdecodeList(a:bstring)
- elseif a:bstring[0] == 'd'
- return s:BdecodeDict(a:bstring)
+ let bs = substitute(a:bstring, '\v^\s*', '', '')
+ if bs[0] == 'i'
+ return s:BdecodeInteger(bs)
+ elseif bs[0] =~ '[0-9]'
+ return s:BdecodeString(bs)
+ elseif bs[0] == 'l'
+ return s:BdecodeList(bs)
+ elseif bs[0] == 'd'
+ return s:BdecodeDict(bs)
else
throw "shits fucked, yo"
endif
@@ -109,11 +110,9 @@
let rest = dec[1]
let dec = s:ActuallyBdecode(rest)
- let val = dec[0]
+ let result[key] = dec[0]
let rest = dec[1]
- let result[key] = val
-
if rest[0] == 'e'
" strip off the trailing e from the dict
return [result, rest[1:]]