New features TransformText.

В строке замены дабавлены следующие возможности:
1. Добавлена подсветка групп.
   Только цвета заданные в настройке "colorGroup" . 13 цветов по умолчанию.
   Если использовано больше групп, добавьте цвета в pgadmin3opt.json
2. Добавлены пользовательские группы вида [ ].
   Группы (вида \g{n} и []) указанные в квадратных скобках проверяются на пустые значения и
   Если они ВСЕ пустые то всё выражение в [] считается пустой строкой.
   Скобки могут быть вложенными.
   Применяются для того что бы не выводить разделитель для пустой группы.
   Например: [\t \g{2}[\t \g{3}]]
3. Добавлена возможность не выводить содержимое группы.
   Для этого группу указывают так: \G{n}
   Применяется для замены текста на пользовательский.
   Например: [and not null\G{2}]
   Этот фрагмент выведет "and not null" если группа 2 не пустая иначе ""
4. Разносить текст замены можно на несколько строк.
   Переводы строк при замене игнорируются.
   Если нужно добавить перевод строк в текст замены нужно явно указать \n\r.
This commit is contained in:
lsv 2024-11-12 17:17:20 +05:00 committed by lsv
parent fbc741af9c
commit feaaf49bc6
2 changed files with 147 additions and 29 deletions

View file

@ -2,6 +2,17 @@
#include "pgAdmin3.h"
#include <wx/clipbrd.h>
#include "ctl/ctlStyledText.h"
enum class eTypeGroup {
SIMPLE_TEXT = -1,
USER_GROUP_START = -2,
USER_GROUP_END = -3
};
struct interval {
size_t start = -1;
size_t len = 0;
int style = 0;
};
class dlgTransformText :
public pgDialog
{
@ -29,6 +40,9 @@ private:
bool isGroup = false;
int nGroup = -1;
wxString text;
int flags = 0;
int start = -1;
int len = 0;
};
wxJSONValue LoadConfig(const wxString confname);
void CheckLimits();
@ -38,7 +52,27 @@ private:
void SetStyled(ctlStyledText* s);
void showNumber(ctlStyledText* text, bool visible);
void AppendTextControl(ctlStyledText* ctrl, const wxString appendtext, bool isnewline = false);
/// <summary>
/// Обработка строки замены и подготовка специальной струкутуры.
/// Допустимые спец. комбинации \t \r\ \n
/// \g{n} Ссылка на группы wxRegExp n=0..N
/// \G{n} Не выводить содержимое группы. Имеет смысл использовать для замены текста группы на свой
/// [ ] Пользовальская группа обладающая следующим свойством:
/// Если в этой группе присутствуют \g{n} и они все пустые то вся группа [ ] считается пустой
/// Пользовательские группы могут быть вложенными.
/// </summary>
/// <param name="repstr"></param>
/// <returns></returns>
std::vector<replace_opt> BuildString(const wxString repstr);
wxString ReplaceFormatting(
const wxString& src,
const wxRegEx& r,
const std::vector<dlgTransformText::replace_opt> st,
int &position,
interval m2[],
int maxsizeintervalarray,
int &currindex,
size_t &start_frame);
wxString src;