Infocatcher / AkelPad_scripts

Scripts for AkelPad text editor with Scripts plugin
30 stars 4 forks source link

[toggleComments.js] fails on the lines that contain semicolon in the middle #6

Closed Drugoy closed 10 years ago

Drugoy commented 10 years ago

Example:

0   "^\s*(((Try)|(Else))(?:\s*,\s*|\s+)|(.{0,38}(?=::))(?:::))?\s*(#IfWinActive)((?:\s*,\s*|\s+)([^;,]*?))?(\s+;.*$)?(\s*,\s*([^;,]+?))?(\s+;.*)?$" `\3=(4,${OP},0) \4=(4,${IF},0) \5=(2,${STR},0) \6=(0,${OP},0) \9=(0,${ATTR},0) \10=(3,${COMM},0)`

The bug is sensitive to caret's position: if you place it at the end: 3 first script calls will just remove one semicolon each from the line, and only on 4th call the line will get commented, but with 3 lost semicolons that were initially present. The bug doesn't happen with the above example, if caret is placed anywhere before the first semicolon.

Баг чувствителен к позиции каретки: если каретку расположить в конце строки, то первые 3 вызова скрипта - удалят по одной точке с запятой каждый. И только на 4-ый вызов - строка закомментируется, но с тремя потерянными ";", которые изначально в ней присутствовали. Бага с вышеприведённым примером не произойдёт, если расположить каретку до первой точки с запятой.

Drugoy commented 10 years ago

Как вариант обхода бага - можно добавить код, который будет запоминать изначальную позицию каретки, потом сдвигать её в начало строки, комментировать строку, а потом возвращать каретку в изначальную позицию.

Infocatcher commented 10 years ago

Как вариант обхода бага - можно добавить код, который будет запоминать изначальную позицию каретки, потом сдвигать её в начало строки, комментировать строку, а потом возвращать каретку в изначальную позицию.

Это не поможет: скрипт определяет первый символ ; как комментирование и при использовании автоматического режима удаляет его. В данном случае правильнее игнорировать ; внутри строковых выражений, то есть чтобы в случаях типа "...;..." не находило символ комментирования. Примерно так: 43344e6d4e8b6f48bb2afe3cfee2e99f402a3abd.

Infocatcher commented 10 years ago

Looks fixed for now.