49 : QSyntaxHighlighter(parent) {
56 const QColor tabBlue(
"#1F77B4");
57 const QColor tabBlueLight(
"#AEC7E8");
59 const QColor tabOrange(
"#FF7F0E");
60 const QColor tabOrangeLight(
"#FFBB78");
62 const QColor tabGreen(
"#2CA02C");
63 const QColor tabGreenLight(
"#98DF8A");
65 const QColor tabRed(
"#D62728");
66 const QColor tabRedLight(
"#FF9896");
68 const QColor tabPurple(
"#9467BD");
69 const QColor tabPurpleLight(
"#C5B0D5");
71 const QColor tabBrown(
"#8C564B");
72 const QColor tabBrownLight(
"#C49C94");
74 const QColor tabPink(
"#E377C2");
75 const QColor tabPinkLight(
"#F7B6D2");
77 const QColor tabGray(
"#7F7F7F");
78 const QColor tabGrayLight(
"#C7C7C7");
80 const QColor tabOlive(
"#BCBD22");
81 const QColor tabOliveLight(
"#DBDB8D");
83 const QColor tabCyan(
"#17BECF");
84 const QColor tabCyanLight(
"#9EDAE5");
91 Qt::ColorScheme scheme = QGuiApplication::styleHints()->colorScheme();
93 if (scheme == Qt::ColorScheme::Light) {
113 }
else if (scheme == Qt::ColorScheme::Dark) {
158 QStringList block_keywords = {
"FITPARAMETER",
"THEORY",
"FUNCTIONS",
159 "GLOBAL",
"RUN",
"COMMANDS",
160 "FOURIER",
"PLOT",
"STATISTIC"};
166 QStringList theory_keywords_long = {
167 "const",
"asymmetry",
"simplExpo",
"generExpo",
168 "simpleGss",
"statGssKT",
"statGssKTLF",
"dynGssKTLF",
169 "statExpKT",
"statExpKTLF",
"dynExpKTLF",
"dynGLKT_F_ZF",
170 "dynGLKT_F_LF",
"dynGLKT_LF",
"combiLGKT",
"strKT",
171 "spinGlass",
"rdAnisoHf",
"TFieldCos",
"internFld",
172 "Bessel",
"internbsl",
"internFldGK",
"internFldLL",
173 "F_mu_F",
"abragam",
"skewedGss",
"staticNKZF",
174 "staticNKTF",
"dynamicNKZF",
"dynamicNKTF",
"muMinusExpTF",
175 "polynom",
"userFcn"};
177 QStringList theory_keywords_short = {
"c",
213 QStringList theory_keywords = theory_keywords_long + theory_keywords_short;
220 QStringList functions_keywords = {
221 "gamma_mu",
"pi",
"B",
"b",
"En",
"en",
"T\\d+",
229 QStringList fun_keywords = {
"fun\\d+"};
235 QStringList par_keywords = {
"par\\d+"};
241 QStringList map_keywords = {
"map\\d+"};
247 QStringList run_keywords = {
248 "fittype",
"data",
"t0",
"addt0",
249 "deadtime-cor",
"fit",
"packing",
"rrf_freq",
250 "rrf_packing",
"rrf_phase",
"alpha",
"beta",
251 "norm",
"backgr.fit",
"lifetime",
"lifetimecorrection",
252 "map",
"forward",
"backward",
"backgr.fix",
253 "background",
"xy-data"};
259 QStringList fourier_keywords = {
"units",
265 "range_for_phase_correction",
272 QStringList plot_keywords = {
"lifetimecorrection",
281 "rrf_freq value unit",
288 QStringList units_options = {
"Gauss",
"Tesla",
"MHz",
"Mc/s"};
293 QStringList apodization_options = {
"NONE",
"WEAK",
"MEDIUM",
"STRONG"};
298 QStringList rrf_options = {
"MHz",
"Mc",
"T"};
303 QStringList fourier_options = {
"REAL",
"IMAG",
"REAL_AND_IMAG",
304 "POWER",
"PHASE",
"PHASE_OPT_REAL"};
309 QStringList commands_options = {
"RESET"};
314 QStringList all_options = units_options + apodization_options + rrf_options +
315 fourier_options + commands_options;
322 QStringList fit_info = {
323 "(single histogram fit)",
"(single histogram RRF fit)",
324 "(asymmetry fit)",
"(asymmetry RRF fit)",
325 "(mu minus fit)",
"(beta-NMR fit)",
331 QStringList plot_info = {
"(single histo plot)",
"(single histo RRF plot)",
332 "(asymmetry plot)",
"(asymmetry RRF plot)",
333 "(mu minus plot)",
"(beta-NMR asymmetry plot)",
339 QStringList run_info = {
"(name beamline institute data-file-format)"};
344 QStringList theory_info = {
"(N0 tau A lambda phase nu tshift)",
345 "(N0 tau A lambda phase nu)",
346 "(damping hopping-rate tshift)",
347 "(damping hopping-rate)",
348 "(damping_D0 R_b nu_c tshift)",
349 "(damping_D0 R_b nu_c)",
350 "(damping_D0 R_b tshift)",
352 "(fraction frequency sigma lambda beta tshift)",
353 "(fraction frequency sigma lambda beta)",
354 "(fraction phase frequency Trate Lrate tshift)",
355 "(fraction phase frequency Trate Lrate)",
356 "(frequency damping hopping-rate tshift)",
357 "(frequency damping hopping-rate)",
358 "(frequency damping tshift)",
359 "(frequency damping)",
360 "(frequency rate tshift)",
362 "(frequency tshift)",
364 "(lorentzRate gaussRate tshift)",
365 "(lorentzRate gaussRate)",
366 "(phase frequency damping_D0 R_b nu_c tshift)",
367 "(phase frequency damping_D0 R_b nu_c)",
368 "(phase frequency damping_D0 R_b tshift)",
369 "(phase frequency damping_D0 R_b)",
370 "(phase frequency rate_m rate_p tshift)",
371 "(phase frequency rate_m rate_p)",
372 "(phase frequency tshift)",
374 "(rate beta tshift)",
376 "(rate exponent tshift)",
378 "(rate hopprate order tshift)",
379 "(rate hopprate order)",
380 "(rate hopprate tshift)",
384 "(tshift p0 p1 ... pn)"};
389 QStringList all_info = fit_info + run_info + plot_info + theory_info;
396 QStringList commands_keywords = {
397 "STRATEGY",
"MIGRAD",
"SIMPLEX",
"MINIMIZE",
398 "MINOS",
"HESSE",
"SAVE",
"SET BATCH",
399 "END RETURN",
"MAX_LIKELIHOOD",
"PRINT_LEVEL",
"SCAN",
400 "CONTOURS",
"MNPLOT",
"FIX",
"RELEASE",
401 "FIT_RANGE",
"SCALE_N0_BKG",
"SECTOR",
"OpenMP",
402 "CUDA",
"OpenCL-CPU",
"OpenCL-GPU"};
409 QStringList bool_keywords = {
"true",
"false"};
415 QStringList null_keywords = {
"none"};
423 QRegularExpression number_regex(
"\\b-?\\d*\\.?\\d+\\b");
424 number_rule.
fPattern = number_regex;
434 QRegularExpression date_regex(
"\\b\\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\\d|3["
435 "01]) (0\\d|1\\d|2[0-3]):[0-5]\\d:[0-5]\\d\\b");
448 QRegularExpression comment_regex(
"#.*");
449 comment_rule.
fPattern = comment_regex;
496 QRegularExpressionMatchIterator matchIterator =
497 rule.fPattern.globalMatch(text);
501 while (matchIterator.hasNext()) {
502 QRegularExpressionMatch match = matchIterator.next();
505 int index = match.capturedStart();
506 int length = match.capturedLength();
510 setFormat(index, length, rule.fFormat);
516 if (currentBlock().blockNumber() == 0) {