Add align option Compat view for All Line mode. Some optimuzation.

Добавлена опция Compat view для All Line режима. В некоторых случаях она делает более красивое выравнивание.
Для примера:
f(iObjId,  1073,'text',null  )  ;
f(iObjId+1,130 ,'te'  ,iObjId)  ;
f(iObjId+2,1   ,'te2' ,iObjId+1);

Исправлено добавление пробелов в конце строки в режиме All Line.
This commit is contained in:
lsv 2025-11-11 10:26:39 +05:00
parent 400cbc2cc7
commit ffeda8c9b6
3 changed files with 28 additions and 14 deletions

View file

@ -16,7 +16,9 @@ public:
// и при помощи этого флага ищутся более длинные строки обработанные ранее
FIND_UP_LONG_LINE=4,
/// Заменить множественные пробелы на один. Выравнивание не производиться.
ONLY_SINGLE_SPACE=8
ONLY_SINGLE_SPACE=8,
/// Более копактный вид имеет смысл для ALL_LINES
COMPACT_VIEW=16
};
AlignWrap() {}

View file

@ -56,6 +56,9 @@ wxString AlignWrap::build(wxString& strsrc, int config,wxString linesep)
}
else {
//
bool iscompact=false;
if (CHKCFGPARAM(cfg, COMPACT_VIEW)) iscompact=true;
for (size_t l = 1; l < nline.size() - 1; l++)
{
@ -97,17 +100,21 @@ wxString AlignWrap::build(wxString& strsrc, int config,wxString linesep)
else {
// 4021196,'fffff',(
// (4155,'aaaa'
if (size_u > size_c) { // фиксируем верхний
// будем нижний подгонять под верхний
size_u = range_size(index_u);
idxU = index_u;
}
else
if (size_u < size_c) {
size_c = range_size(index_c);
idxC = index_c;
if (iscompact) {
list[idxC].setParent(idxU);
} else {
if (size_u > size_c) { // фиксируем верхний
// будем нижний подгонять под верхний
size_u = range_size(index_u);
idxU = index_u;
}
list[idxC].setParent(idxU);
else
if (size_u < size_c) {
size_c = range_size(index_c);
idxC = index_c;
}
list[idxC].setParent(idxU);
}
}
if (size_u < size_c) {
// вырхний короче, его дополняем
@ -378,6 +385,7 @@ int AlignWrap::chkspace(int &pos, bool& br) {
pos--;
break;
}
if (nl < parserows) l++;
// Не будем заменять переводы строк на пробел для ALL_LINES
if (nl < parserows && !CHKCFGPARAM(cfg,ALL_LINES)) l++;
return l;
}

View file

@ -39,9 +39,13 @@ wxString Item::print() {
wxString s = wxString::Format("%s", it);
wxString r(' ', rs), l(' ', ls);
s = l + s + r + wxString::Format("%s", comment);
if (br)
s = l + r + s + wxString::Format("%s", comment); // для последнего элемента строки пробелы справа не добавляем
else
s = l + s + r + wxString::Format("%s", comment);
#ifdef _DEBUG
std::cout << s;
#endif
return s;
}
const int Item::getMaxSize() {