Brainfuck, 587579 bytes
,[<<+>>>>+<<[[<+>>+<-]++++++[>-------<-]>-[-[-[-[--------------[--[<+++++[>-----
-<-]>+[--[<<[-]>>-]]<]>[<<<[]]<]>[>>-]<[<]<<<[<]>>>>>>>[>[<]<[<<<<<[-[+>]<[<]<]>]>>>>>>>+>[<]<[<]<<<[<]>>>>>>>>[<]<-][+>]+[->+]>>>>+>[<-]<[
<[>+<>+<-<]>]<]>[<<<[-]-[<]>>>>>>>>>>>[<]<<<<<<<[>[<]<[[<]>>>>>>>>>>>[<]<<<<<<[<]<-[+<]]]+[[+>]+[-<+]<<<+<[>-<<<]>[-<+<]]]<]
<+<]]]<]>[+>[>[+>[-<]<[<<]<[-]>>]]<]+>[-[<-]<[>+>+<<-<]<[-]>+>]<<[>-]>[,>]<]<+<[>]>[>>]<]<+<[>]>[>>>[<<<<[
>>[<<<<[-<]<<<]>>>+>>>>[<<<<->>>>[>>>[-<]>>>>]]]>[<<<[<+[-->>]]>[-[.[-]]]>[<]>[<]]]>[<]>[<<++++++[
<++++++[>+++++++<>+++++++<-]>+>>[<<.>>-]<<++>-[<.>-]+++[<+++++>-]+<<<<<<+>[<<[>->>>>>.[[-]<<<<]<<
]<<<<]<<<+>>>]>[<+>>>]>[->->>>>[-]]]<[->+[>>>>>]>>[<]<<<<<<<<[[-]<]>[++.[-]>>>>>>>]<]]>>]>>>>>>>]<]]>>]<[>>>>>
]<[>>>>>>>]+[>>]+[-<<<<<[-]<<],]
,
[
<<+>> >>+<<
[
[<+> >+<-]
++++++[>-------<-]
>-
[
not plus
-
[
not comma
-
[
not minus
-
[
not period
--------------
[
not less than
--
[
not greater than
<+++++[>------<-]>+
[
not open bracket
--
[
not close bracket
<<[-]>>-
]
]
<
]
>
[
greater than
<<<[>>-]<[<]<<<[<]
>>>>>>><<
[<<<[-]<[<]<<<[<]
>[<]>>>>>>>>[<]
<
[
-[+>]
<[<]<
]
>
]+[->+]
> >>>>>>+>[<>>>>+>[<-]
<[>+<-<]
>
]
<
]
>
[
less than
<<<[-]-[<]
>>>> >>>>>>>[<]
<<<<<<<
[
>[<]<<<<<<[<]
<[<-[+<]]
][+>]
+[-<+]
<<<+<[>-<<<]
>[-<+<]
]
]
<
]
>
[
minus
+>[-<]
<[<<]
<[-]>>
]
]
<
]
+>
[
plus
-[<-]
<[>+>+<<-<]
<[-]>+>
]
<<
[
comma or period or bracket
>-
]
>[,>]
<
]
comma or period or bracket or eof
<+<
[
start and end same cell
>
]
>
[
>>>
[
<<<<[-<]<<<
]
>>>+>>>>
[
start right of end
<<<<->>>>
[>>>[-<]>>>>]
]
]
>
[
<<<
[
<+[-->>]
]
>[-[.[-]]]
>[<]
>
[
<<++++++[>+++++++<-]>+>>
[<<.>>-]
<<++>-[<.>-]
+++[<+++++>-]
+<<<<< <+>
[
<<
[
go left
>->>>>>.
[[-]<<<<]
<<<+>>>
]
>
[
toggle left right
->->>>>[-]
]
]
<
[
toggle right left
->+[>>>>>]>>[<]
<<<<<<<<
[
[-]<
]
>
[
go right
++.[-]
>>>>>>>
]
<
]
]
>>
]
<[>>>>>>>]
+[-<<<<<[-]<<]
,
]
Try it online.Try it online. (If a simulated cell's absolute value gets close to 256, there will be overflow issues.)