Messagelib

templatesutil.cpp
1 /*
2  SPDX-FileCopyrightText: 2011-2021 Laurent Montel <[email protected]>
3 
4  SPDX-License-Identifier: GPL-2.0-or-later
5 */
6 
7 #include "templatesutil.h"
8 #include "templatesutil_p.h"
9 
10 #include <KConfigGroup>
11 #include <KSharedConfig>
12 #include <QRegularExpression>
13 #include <QStringList>
14 using namespace TemplateParser;
15 
16 void TemplateParser::Util::deleteTemplate(const QString &id)
17 {
18  KSharedConfig::Ptr config = KSharedConfig::openConfig(QStringLiteral("templatesconfigurationrc"), KConfig::NoGlobals);
19 
20  const QString key = QStringLiteral("Templates #%1").arg(id);
21  if (config->hasGroup(key)) {
22  KConfigGroup group = config->group(key);
23  group.deleteGroup();
24  group.sync();
25  }
26 }
27 
28 QStringList TemplateParser::Util::keywordsWithArgs()
29 {
30  const QStringList keywordsWithArgs = QStringList()
31  << QStringLiteral("%REM=\"\"%-") << QStringLiteral("%INSERT=\"\"") << QStringLiteral("%SYSTEM=\"\"") << QStringLiteral("%QUOTEPIPE=\"\"")
32  << QStringLiteral("%MSGPIPE=\"\"") << QStringLiteral("%BODYPIPE=\"\"") << QStringLiteral("%CLEARPIPE=\"\"") << QStringLiteral("%TEXTPIPE=\"\"")
33  << QStringLiteral("%OHEADER=\"\"") << QStringLiteral("%HEADER=\"\"") << QStringLiteral("%DICTIONARYLANGUAGE=\"\"") << QStringLiteral("%LANGUAGE=\"\"");
34  return keywordsWithArgs;
35 }
36 
37 QStringList TemplateParser::Util::keywords()
38 {
39  const QStringList keywords =
40  QStringList() << QStringLiteral("%QUOTE") << QStringLiteral("%FORCEDPLAIN") << QStringLiteral("%FORCEDHTML") << QStringLiteral("%QHEADERS")
41  << QStringLiteral("%HEADERS") << QStringLiteral("%TEXT") << QStringLiteral("%OTEXTSIZE") << QStringLiteral("%OTEXT")
42  << QStringLiteral("%OADDRESSEESADDR") << QStringLiteral("%CCADDR") << QStringLiteral("%CCNAME") << QStringLiteral("%CCFNAME")
43  << QStringLiteral("%CCLNAME") << QStringLiteral("%TOADDR") << QStringLiteral("%TONAME") << QStringLiteral("%TOFNAME")
44  << QStringLiteral("%TOLNAME") << QStringLiteral("%TOLIST") << QStringLiteral("%FROMADDR") << QStringLiteral("%FROMNAME")
45  << QStringLiteral("%FROMFNAME") << QStringLiteral("%FROMLNAME") << QStringLiteral("%FULLSUBJECT") << QStringLiteral("%MSGID")
46  << QStringLiteral("%HEADER\\( ") << QStringLiteral("%OCCADDR") << QStringLiteral("%OCCNAME") << QStringLiteral("%OCCFNAME")
47  << QStringLiteral("%OCCLNAME") << QStringLiteral("%OTOADDR") << QStringLiteral("%OTONAME") << QStringLiteral("%OTOFNAME")
48  << QStringLiteral("%OTOLNAME") << QStringLiteral("%OTOLIST") << QStringLiteral("%OTO") << QStringLiteral("%OFROMADDR")
49  << QStringLiteral("%OFROMNAME") << QStringLiteral("%OFROMFNAME") << QStringLiteral("%OFROMLNAME") << QStringLiteral("%OFULLSUBJECT")
50  << QStringLiteral("%OFULLSUBJ") << QStringLiteral("%OMSGID") << QStringLiteral("%DATEEN") << QStringLiteral("%DATESHORT")
51  << QStringLiteral("%DATE") << QStringLiteral("%DOW") << QStringLiteral("%TIMELONGEN") << QStringLiteral("%TIMELONG")
52  << QStringLiteral("%TIME") << QStringLiteral("%ODATEEN") << QStringLiteral("%ODATESHORT") << QStringLiteral("%ODATE")
53  << QStringLiteral("%ODOW") << QStringLiteral("%OTIMELONGEN") << QStringLiteral("%OTIMELONG") << QStringLiteral("%OTIME")
54  << QStringLiteral("%BLANK") << QStringLiteral("%NOP") << QStringLiteral("%CLEAR") << QStringLiteral("%DEBUGOFF")
55  << QStringLiteral("%DEBUG") << QStringLiteral("%CURSOR") << QStringLiteral("%SIGNATURE");
56  return keywords;
57 }
58 
59 QString TemplateParser::Util::getFirstNameFromEmail(const QString &str)
60 {
61  // simple logic:
62  // if there is ',' in name, than format is 'Last, First'
63  // else format is 'First Last'
64  // last resort -- return 'name' from '[email protected]'
65  int sep_pos;
66  QString res;
67  if ((sep_pos = str.indexOf(QLatin1Char('@'))) > 0) {
68  int i;
69  for (i = (sep_pos - 1); i >= 0; --i) {
70  QChar c = str[i];
71  if (c.isLetterOrNumber()) {
72  res.prepend(c);
73  } else {
74  break;
75  }
76  }
77  } else if ((sep_pos = str.indexOf(QLatin1Char(','))) > 0) {
78  int i;
79  bool begin = false;
80  const int strLength(str.length());
81  for (i = sep_pos; i < strLength; ++i) {
82  QChar c = str[i];
83  if (c.isLetterOrNumber()) {
84  begin = true;
85  res.append(c);
86  } else if (begin) {
87  break;
88  }
89  }
90  } else {
91  int i;
92  const int strLength(str.length());
93  for (i = 0; i < strLength; ++i) {
94  QChar c = str[i];
95  if (c.isLetterOrNumber()) {
96  res.append(c);
97  } else {
98  break;
99  }
100  }
101  }
102  return res;
103 }
104 
105 QString TemplateParser::Util::getLastNameFromEmail(const QString &str)
106 {
107  // simple logic:
108  // if there is ',' in name, than format is 'Last, First'
109  // else format is 'First Last'
110  int sep_pos;
111  QString res;
112  if ((sep_pos = str.indexOf(QLatin1Char(','))) > 0) {
113  int i;
114  for (i = sep_pos; i >= 0; --i) {
115  QChar c = str[i];
116  if (c.isLetterOrNumber()) {
117  res.prepend(c);
118  } else {
119  break;
120  }
121  }
122  } else {
123  if ((sep_pos = str.indexOf(QLatin1Char(' '))) > 0) {
124  bool begin = false;
125  const int strLength(str.length());
126  for (int i = sep_pos; i < strLength; ++i) {
127  QChar c = str[i];
128  if (c.isLetterOrNumber()) {
129  begin = true;
130  res.append(c);
131  } else if (begin) {
132  break;
133  }
134  }
135  }
136  }
137  return res;
138 }
139 
140 QString TemplateParser::Util::removeSpaceAtBegin(const QString &selection)
141 {
142  QString content = selection;
143  // Remove blank lines at the beginning:
144  const int firstNonWS = content.indexOf(QRegularExpression(QStringLiteral("\\S")));
145  const int lineStart = content.lastIndexOf(QLatin1Char('\n'), firstNonWS);
146  if (lineStart >= 0) {
147  content.remove(0, lineStart);
148  }
149  return content;
150 }
int indexOf(QChar ch, int from, Qt::CaseSensitivity cs) const const
bool sync() override
QString & append(QChar ch)
QString & prepend(QChar ch)
QString & remove(int position, int n)
void deleteGroup(WriteConfigFlags pFlags=Normal)
const QList< QKeySequence > & begin()
KSharedConfigPtr config()
int lastIndexOf(QChar ch, int from, Qt::CaseSensitivity cs) const const
static KSharedConfig::Ptr openConfig(const QString &fileName=QString(), OpenFlags mode=FullConfig, QStandardPaths::StandardLocation type=QStandardPaths::GenericConfigLocation)
KConfigGroup group(const QString &group)
QString arg(qlonglong a, int fieldWidth, int base, QChar fillChar) const const
int length() const const
bool isLetterOrNumber() const const
This file is part of the KDE documentation.
Documentation copyright © 1996-2021 The KDE developers.
Generated on Tue Nov 30 2021 23:05:48 by doxygen 1.8.11 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.