@@ -18,9 +18,9 @@ ctx.addEventListener("message", (event) => {
18
18
19
19
let buffer = "" ;
20
20
let discardFirstLine = true ;
21
- const separator = "\r?\n" ;
21
+ const lineSeparator = "\r?\n" ;
22
22
const delimiter = "[, \t]+" ; // Serial Plotter protocol supports Comma, Space & Tab characters as delimiters
23
- var separatorRegex = new RegExp ( `(${ separator } )` , "g" ) ;
23
+ var lineSeparatorRegex = new RegExp ( `(${ lineSeparator } )` , "g" ) ;
24
24
var delimiterRegex = new RegExp ( delimiter , "g" ) ;
25
25
26
26
export const parseSerialMessages = (
@@ -33,8 +33,8 @@ export const parseSerialMessages = (
33
33
// so we need to discard it and start aggregating from the first encountered separator
34
34
let joinMessages = messages . join ( "" ) ;
35
35
if ( discardFirstLine ) {
36
- separatorRegex . lastIndex = 0 ; // Reset lastIndex to ensure match happens from beginning of string
37
- const separatorMatch = separatorRegex . exec ( joinMessages ) ;
36
+ lineSeparatorRegex . lastIndex = 0 ; // Reset lastIndex to ensure match happens from beginning of string
37
+ const separatorMatch = lineSeparatorRegex . exec ( joinMessages ) ;
38
38
if ( separatorMatch && separatorMatch . index > - 1 ) {
39
39
joinMessages = joinMessages . substring (
40
40
separatorMatch . index + separatorMatch [ 0 ] . length
@@ -50,14 +50,16 @@ export const parseSerialMessages = (
50
50
51
51
//add any leftover from the buffer to the first line
52
52
const messagesAndBuffer = ( ( buffer || "" ) + joinMessages )
53
- . split ( separatorRegex )
53
+ . split ( lineSeparatorRegex )
54
54
. filter ( ( message ) => message . length > 0 ) ;
55
55
56
56
// remove the previous buffer
57
57
buffer = "" ;
58
- separatorRegex . lastIndex = 0 ;
58
+ lineSeparatorRegex . lastIndex = 0 ;
59
59
// check if the last message contains the delimiter, if not, it's an incomplete string that needs to be added to the buffer
60
- if ( ! separatorRegex . test ( messagesAndBuffer [ messagesAndBuffer . length - 1 ] ) ) {
60
+ if (
61
+ ! lineSeparatorRegex . test ( messagesAndBuffer [ messagesAndBuffer . length - 1 ] )
62
+ ) {
61
63
buffer = messagesAndBuffer [ messagesAndBuffer . length - 1 ] ;
62
64
messagesAndBuffer . splice ( - 1 ) ;
63
65
}
@@ -66,10 +68,15 @@ export const parseSerialMessages = (
66
68
const parsedLines : { [ key : string ] : number } [ ] = [ ] ;
67
69
68
70
// for each line, explode variables
69
- separatorRegex . lastIndex = 0 ;
71
+ lineSeparatorRegex . lastIndex = 0 ;
70
72
messagesAndBuffer
71
- . filter ( ( message ) => ! separatorRegex . test ( message ) )
73
+ . filter ( ( message ) => ! lineSeparatorRegex . test ( message ) )
72
74
. forEach ( ( message ) => {
75
+ // replace all delimiters with a single space for uniform parsing
76
+ message = message . replace ( delimiterRegex , " " ) ;
77
+ // replace multiple spaces with a single space
78
+ message = message . replace ( / \s + / g, " " ) ;
79
+
73
80
const parsedLine : { [ key : string ] : number } = { } ;
74
81
75
82
// Part Separator symbols i.e. Space, Tab & Comma are fully supported
@@ -80,12 +87,15 @@ export const parseSerialMessages = (
80
87
// if we find a colon, we assume the latter is being used
81
88
let tokens : string [ ] = [ ] ;
82
89
if ( message . indexOf ( ":" ) > 0 ) {
83
- message . split ( delimiterRegex ) . forEach ( ( keyValue : string ) => {
84
- let [ key , value ] = keyValue . split ( ":" ) ;
85
- key = key && key . trim ( ) ;
86
- value = value && value . trim ( ) ;
87
- if ( key && key . length > 0 && value && value . length > 0 ) {
88
- tokens . push ( ...[ key , value ] ) ;
90
+ // Splitting by the separator and handling possible spaces
91
+ const keyValuePairs = message . split ( ":" ) . map ( ( kv ) => kv . trim ( ) ) ;
92
+ let reformedLine = keyValuePairs . join ( ":" ) . split ( delimiterRegex ) ;
93
+
94
+ reformedLine . forEach ( ( kv ) => {
95
+ const [ key , value ] = kv . split ( ":" ) ;
96
+ if ( key && value ) {
97
+ tokens . push ( key . trim ( ) ) ;
98
+ tokens . push ( value . trim ( ) ) ;
89
99
}
90
100
} ) ;
91
101
} else {
0 commit comments