File indexing completed on 2024-05-19 05:05:18

0001 /***************************************************************************
0002  *   SPDX-License-Identifier: GPL-2.0-or-later
0003  *                                                                         *
0004  *   SPDX-FileCopyrightText: 2004-2022 Thomas Fischer <fischer@unix-ag.uni-kl.de>
0005  *                                                                         *
0006  *   This program is free software; you can redistribute it and/or modify  *
0007  *   it under the terms of the GNU General Public License as published by  *
0008  *   the Free Software Foundation; either version 2 of the License, or     *
0009  *   (at your option) any later version.                                   *
0010  *                                                                         *
0011  *   This program is distributed in the hope that it will be useful,       *
0012  *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
0013  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
0014  *   GNU General Public License for more details.                          *
0015  *                                                                         *
0016  *   You should have received a copy of the GNU General Public License     *
0017  *   along with this program; if not, see <https://www.gnu.org/licenses/>. *
0018  ***************************************************************************/
0019 
0020 #include "bibtexfields.h"
0021 
0022 #include <QExplicitlySharedDataPointer>
0023 #include <QStandardPaths>
0024 
0025 #ifdef HAVE_KF
0026 #include <KSharedConfig>
0027 #include <KConfigGroup>
0028 #endif // HAVE KF5
0029 #ifdef HAVE_KFI18N
0030 #include <KLocalizedString>
0031 #else // HAVE_KFI18N
0032 #include <QObject>
0033 #define i18n(text) QObject::tr(text)
0034 #endif // HAVE_KFI18N
0035 
0036 #include "preferences.h"
0037 #include "logging_config.h"
0038 
0039 bool operator==(const FieldDescription &a, const FieldDescription &b)
0040 {
0041     return a.upperCamelCase == b.upperCamelCase;
0042 }
0043 uint qHash(const FieldDescription &a)
0044 {
0045     return qHash(a.upperCamelCase);
0046 }
0047 
0048 class BibTeXFields::BibTeXFieldsPrivate
0049 {
0050 public:
0051     static const QVector<FieldDescription> fieldDescriptionsBibTeX;
0052     static const QVector<FieldDescription> fieldDescriptionsBibLaTeX;
0053 
0054     BibTeXFields *p;
0055 
0056 #ifdef HAVE_KF
0057     KSharedConfigPtr layoutConfig;
0058 #endif // HAVE_KF
0059 
0060     BibTeXFieldsPrivate(const QString &style, BibTeXFields *parent)
0061             : p(parent) {
0062 #ifdef HAVE_KF
0063         const QString stylefile = style + QStringLiteral(".kbstyle");
0064         layoutConfig = KSharedConfig::openConfig(stylefile, KConfig::FullConfig, QStandardPaths::AppDataLocation);
0065         if (layoutConfig->groupList().isEmpty())
0066             qCWarning(LOG_KBIBTEX_CONFIG) << "The configuration file for layout of type" << style << "could not be located or is empty";
0067 #else // HAVE_KF
0068         Q_UNUSED(style)
0069 #endif // HAVE_KF
0070     }
0071 
0072 #ifdef HAVE_KF
0073     void load() {
0074         int logicalIndex = 0;
0075         for (BibTeXFields::Iterator it = p->begin(); it != p->end(); ++logicalIndex, ++it) {
0076             auto &fd = *it;
0077             const QString groupName = QStringLiteral("Column") + fd.upperCamelCase + fd.upperCamelCaseAlt;
0078             KConfigGroup configGroup(layoutConfig, groupName);
0079 
0080             fd.visible.clear();
0081             fd.width.clear();
0082             fd.visualIndex.clear();
0083             if (configGroup.exists()) {
0084                 const QStringList keyList = configGroup.keyList();
0085                 for (const QString &key : keyList) {
0086                     if (key.startsWith(QStringLiteral("Visible_"))) {
0087                         const QString treeViewName = key.mid(8);
0088                         fd.visible.insert(treeViewName, configGroup.readEntry(key, fd.defaultVisible));
0089                     } else if (key.startsWith(QStringLiteral("Width_"))) {
0090                         const QString treeViewName = key.mid(14);
0091                         /// Fall-back value of '0' means in BasicFileView to enable automatic column balancing if all fields have width 0
0092                         fd.width.insert(treeViewName, configGroup.readEntry(key, 0));
0093                     } else if (key.startsWith(QStringLiteral("VisualIndex_"))) {
0094                         const QString treeViewName = key.mid(12);
0095                         /// By default, visual index == logical index
0096                         fd.visualIndex.insert(treeViewName, configGroup.readEntry(key, logicalIndex));
0097                     }
0098                 }
0099             }
0100         }
0101     }
0102 
0103     void save() {
0104         int logicalIndex = 0;
0105         for (const auto &fd : const_cast<const BibTeXFields &>(*p)) {
0106             const QString groupName = QStringLiteral("Column") + fd.upperCamelCase + fd.upperCamelCaseAlt;
0107             KConfigGroup configGroup(layoutConfig, groupName);
0108 
0109             const QList<QString> keys = fd.visible.keys(); ///< Assuming the keys are the same as for 'width' and 'visualIndex'
0110             for (const QString &treeViewName : keys) {
0111                 const QString keyVisible = QStringLiteral("Visible_") + treeViewName;
0112                 configGroup.writeEntry(keyVisible, fd.visible.value(treeViewName, fd.defaultVisible));
0113                 const QString keyWidth = QStringLiteral("Width_") + treeViewName;
0114                 /// Fall-back value of '0' means in BasicFileView to enable automatic column balancing if all fields have width 0
0115                 configGroup.writeEntry(keyWidth, fd.width.value(treeViewName, 0));
0116                 const QString keyVisualIndex = QStringLiteral("VisualIndex_") + treeViewName;
0117                 /// By default, visual index == logical index
0118                 configGroup.writeEntry(keyVisualIndex, fd.visualIndex.value(treeViewName, logicalIndex));
0119             }
0120             ++logicalIndex;
0121         }
0122 
0123         layoutConfig->sync();
0124     }
0125 
0126     void resetToDefaults(const QString &treeViewName) {
0127         for (BibTeXFields::Iterator it = p->begin(); it != p->end(); ++it) {
0128             const QString groupName = QStringLiteral("Column") + it->upperCamelCase + it->upperCamelCaseAlt;
0129             KConfigGroup configGroup(layoutConfig, groupName);
0130             configGroup.deleteEntry(QStringLiteral("Visible_") + treeViewName);
0131             configGroup.deleteEntry(QStringLiteral("Width_") + treeViewName);
0132             configGroup.deleteEntry(QStringLiteral("VisualIndex_") + treeViewName);
0133         }
0134         layoutConfig->sync();
0135         load();
0136     }
0137 #endif // HAVE_KF
0138 };
0139 
0140 
0141 BibTeXFields::BibTeXFields(const QString &style, const QVector<FieldDescription> &other)
0142         : QVector<FieldDescription>(other), d(new BibTeXFieldsPrivate(style, this))
0143 {
0144 #ifdef HAVE_KF
0145     d->load();
0146 #endif // HAVE_KF
0147 }
0148 
0149 BibTeXFields::~BibTeXFields()
0150 {
0151     delete d;
0152 }
0153 
0154 /// This function cannot return a 'const' BibTeXFields object
0155 /// similarly like BibTeXEntries::instance as the FieldDescription's
0156 /// QMap visible will be modified.
0157 BibTeXFields &BibTeXFields::instance()
0158 {
0159     static const QVector<FieldDescription> fieldDescriptionsBibTeX {
0160         FieldDescription {QStringLiteral("^type"), QString(), {}, i18n("Element Type"), KBibTeX::TypeFlag::Source, KBibTeX::TypeFlag::Source, {}, {}, 5, {}, true, true},
0161         FieldDescription {QStringLiteral("^id"), QString(), {}, i18n("Identifier"), KBibTeX::TypeFlag::Source, KBibTeX::TypeFlag::Source, {}, {}, 6, {}, true, true},
0162         FieldDescription {QStringLiteral("Title"), QString(), {}, i18n("Title"), KBibTeX::TypeFlag::PlainText, KBibTeX::TypeFlag::PlainText | KBibTeX::TypeFlag::Reference | KBibTeX::TypeFlag::Source, {}, {}, 14, {}, false, false},
0163         FieldDescription {QStringLiteral("Title"), QStringLiteral("BookTitle"), {}, i18n("Title or Book Title"), KBibTeX::TypeFlag::PlainText, KBibTeX::TypeFlag::PlainText | KBibTeX::TypeFlag::Reference | KBibTeX::TypeFlag::Source, {}, {}, 14, {}, true, false},
0164         FieldDescription {QStringLiteral("Author"), QStringLiteral("Editor"), {}, i18n("Author or Editor"), KBibTeX::TypeFlag::PlainText, KBibTeX::TypeFlag::PlainText | KBibTeX::TypeFlag::Reference | KBibTeX::TypeFlag::Source, {}, {}, 7, {}, true, false},
0165         FieldDescription {QStringLiteral("Author"), QString(), {}, i18n("Author"), KBibTeX::TypeFlag::Person, KBibTeX::TypeFlag::Person | KBibTeX::TypeFlag::Reference, {}, {}, 7, {}, false, false},
0166         FieldDescription {QStringLiteral("Editor"), QString(), {}, i18n("Editor"), KBibTeX::TypeFlag::Person, KBibTeX::TypeFlag::Person | KBibTeX::TypeFlag::Reference, {}, {}, 7, {}, false, false},
0167         FieldDescription {QStringLiteral("Month"), QString(), {}, i18n("Month"), KBibTeX::TypeFlag::PlainText, KBibTeX::TypeFlag::PlainText | KBibTeX::TypeFlag::Reference | KBibTeX::TypeFlag::Source, {}, {}, 3, {}, false, false},
0168         FieldDescription {QStringLiteral("Year"), QString(), {}, i18n("Year"), KBibTeX::TypeFlag::PlainText, KBibTeX::TypeFlag::PlainText | KBibTeX::TypeFlag::Reference | KBibTeX::TypeFlag::Source, {}, {}, 2, {}, true, false},
0169         FieldDescription {QStringLiteral("Journal"), QString(), {}, i18n("Journal"), KBibTeX::TypeFlag::PlainText, KBibTeX::TypeFlag::PlainText | KBibTeX::TypeFlag::Reference | KBibTeX::TypeFlag::Source, {}, {}, 4, {}, false, false},
0170         FieldDescription {QStringLiteral("Volume"), QString(), {}, i18n("Volume"), KBibTeX::TypeFlag::PlainText, KBibTeX::TypeFlag::PlainText | KBibTeX::TypeFlag::Reference | KBibTeX::TypeFlag::Source, {}, {}, 1, {}, false, false},
0171         FieldDescription {QStringLiteral("Number"), QString(), {}, i18n("Number"), KBibTeX::TypeFlag::PlainText, KBibTeX::TypeFlag::PlainText | KBibTeX::TypeFlag::Reference | KBibTeX::TypeFlag::Source, {}, {}, 1, {}, false, false},
0172         FieldDescription {QStringLiteral("ISSN"), QString(), {}, i18n("ISSN"), KBibTeX::TypeFlag::PlainText, KBibTeX::TypeFlag::PlainText | KBibTeX::TypeFlag::Reference | KBibTeX::TypeFlag::Source, {}, {}, 2, {}, false, true},
0173         FieldDescription {QStringLiteral("ISBN"), QString(), {}, i18n("ISBN"), KBibTeX::TypeFlag::PlainText, KBibTeX::TypeFlag::PlainText | KBibTeX::TypeFlag::Reference | KBibTeX::TypeFlag::Source, {}, {}, 2, {}, false, true},
0174         FieldDescription {QStringLiteral("ISBN"), QStringLiteral("ISSN"), {}, i18n("ISBN or ISSN"), KBibTeX::TypeFlag::PlainText, KBibTeX::TypeFlag::PlainText | KBibTeX::TypeFlag::Reference | KBibTeX::TypeFlag::Source, {}, {}, 2, {}, false, false},
0175         FieldDescription {QStringLiteral("HowPublished"), QString(), {}, i18n("How Published"), KBibTeX::TypeFlag::PlainText, KBibTeX::TypeFlag::PlainText | KBibTeX::TypeFlag::Reference | KBibTeX::TypeFlag::Source, {}, {}, 5, {}, false, false},
0176         FieldDescription {QStringLiteral("Note"), QString(), {}, i18n("Note"), KBibTeX::TypeFlag::PlainText, KBibTeX::TypeFlag::PlainText | KBibTeX::TypeFlag::Reference | KBibTeX::TypeFlag::Source, {}, {}, 5, {}, false, false},
0177         FieldDescription {QStringLiteral("Abstract"), QString(), {}, i18n("Abstract"), KBibTeX::TypeFlag::PlainText, KBibTeX::TypeFlag::PlainText | KBibTeX::TypeFlag::Reference | KBibTeX::TypeFlag::Source, {}, {}, 7, {}, false, true},
0178         FieldDescription {QStringLiteral("Pages"), QString(), {}, i18n("Pages"), KBibTeX::TypeFlag::PlainText, KBibTeX::TypeFlag::PlainText | KBibTeX::TypeFlag::Reference | KBibTeX::TypeFlag::Source, {}, {}, 2, {}, true, false},
0179         FieldDescription {QStringLiteral("Publisher"), QString(), {}, i18n("Publisher"), KBibTeX::TypeFlag::PlainText, KBibTeX::TypeFlag::PlainText | KBibTeX::TypeFlag::Reference | KBibTeX::TypeFlag::Source, {}, {}, 5, {}, false, false},
0180         FieldDescription {QStringLiteral("Institution"), QString(), {}, i18n("Institution"), KBibTeX::TypeFlag::PlainText, KBibTeX::TypeFlag::PlainText | KBibTeX::TypeFlag::Reference | KBibTeX::TypeFlag::Source, {}, {}, 5, {}, false, false},
0181         FieldDescription {QStringLiteral("BookTitle"), QString(), {}, i18n("Book Title"), KBibTeX::TypeFlag::PlainText, KBibTeX::TypeFlag::PlainText | KBibTeX::TypeFlag::Reference | KBibTeX::TypeFlag::Source, {}, {}, 14, {}, false, false},
0182         FieldDescription {QStringLiteral("Series"), QString(), {}, i18n("Series"), KBibTeX::TypeFlag::PlainText, KBibTeX::TypeFlag::PlainText | KBibTeX::TypeFlag::Reference | KBibTeX::TypeFlag::Source, {}, {}, 12, {}, false, false},
0183         FieldDescription {QStringLiteral("Edition"), QString(), {}, i18n("Edition"), KBibTeX::TypeFlag::PlainText, KBibTeX::TypeFlag::PlainText | KBibTeX::TypeFlag::Reference | KBibTeX::TypeFlag::Source, {}, {}, 2, {}, false, false},
0184         FieldDescription {QStringLiteral("Chapter"), QString(), {}, i18n("Chapter"), KBibTeX::TypeFlag::PlainText, KBibTeX::TypeFlag::PlainText | KBibTeX::TypeFlag::Reference | KBibTeX::TypeFlag::Source, {}, {}, 1, {}, false, false},
0185         FieldDescription {QStringLiteral("Organization"), QString(), {}, i18n("Organization"), KBibTeX::TypeFlag::PlainText, KBibTeX::TypeFlag::PlainText | KBibTeX::TypeFlag::Reference | KBibTeX::TypeFlag::Source, {}, {}, 2, {}, false, false},
0186         FieldDescription {QStringLiteral("School"), QString(), {}, i18n("School"), KBibTeX::TypeFlag::PlainText, KBibTeX::TypeFlag::PlainText | KBibTeX::TypeFlag::Reference | KBibTeX::TypeFlag::Source, {}, {}, 2, {}, false, false},
0187         FieldDescription {QStringLiteral("Keywords"), QString(), {}, i18n("Keywords"), KBibTeX::TypeFlag::Keyword, KBibTeX::TypeFlag::Keyword | KBibTeX::TypeFlag::Source, {}, {}, 3, {}, false, true},
0188         FieldDescription {QStringLiteral("CrossRef"), QString(), {}, i18n("Cross Reference"), KBibTeX::TypeFlag::Verbatim, KBibTeX::TypeFlag::Verbatim, {}, {}, 3, {}, false, true},
0189         FieldDescription {QStringLiteral("DOI"), QString(), {}, i18n("DOI"), KBibTeX::TypeFlag::Verbatim, KBibTeX::TypeFlag::Verbatim, {}, {}, 1, {}, false, true},
0190         FieldDescription {QStringLiteral("URL"), QString(), {}, i18n("URL"), KBibTeX::TypeFlag::Verbatim, KBibTeX::TypeFlag::Verbatim, {}, {}, 3, {}, false, true},
0191         FieldDescription {QStringLiteral("Location"), QString(), {}, i18n("Location"), KBibTeX::TypeFlag::PlainText, KBibTeX::TypeFlag::PlainText | KBibTeX::TypeFlag::Reference | KBibTeX::TypeFlag::Source, {}, {}, 3, {}, false, false},
0192         FieldDescription {QStringLiteral("Address"), QString(), {}, i18n("Address"), KBibTeX::TypeFlag::PlainText, KBibTeX::TypeFlag::PlainText | KBibTeX::TypeFlag::Reference | KBibTeX::TypeFlag::Source, {}, {}, 3, {}, false, false},
0193         FieldDescription {QStringLiteral("Type"), QString(), {}, i18n("Type"), KBibTeX::TypeFlag::PlainText, KBibTeX::TypeFlag::PlainText | KBibTeX::TypeFlag::Reference | KBibTeX::TypeFlag::Source, {}, {}, 2, {}, false, false},
0194         FieldDescription {QStringLiteral("Key"), QString(), {}, i18n("Key"), KBibTeX::TypeFlag::PlainText, KBibTeX::TypeFlag::PlainText | KBibTeX::TypeFlag::Reference | KBibTeX::TypeFlag::Source, {}, {}, 2, {}, false, true},
0195         FieldDescription {QStringLiteral("X-Color"), QString(), {}, i18n("Color"), KBibTeX::TypeFlag::Verbatim, KBibTeX::TypeFlag::Verbatim | KBibTeX::TypeFlag::Source, {}, {}, 2, {}, false, true},
0196         FieldDescription {QStringLiteral("X-Stars"), QString(), {}, i18n("Stars"), KBibTeX::TypeFlag::Verbatim, KBibTeX::TypeFlag::Verbatim | KBibTeX::TypeFlag::Source, {}, {}, 4, {}, false, true},
0197     };
0198     static const QVector<FieldDescription> fieldDescriptionsBibLaTeX {
0199         FieldDescription {QStringLiteral("^type"), QString(), {}, i18n("Element Type"), KBibTeX::TypeFlag::Source, KBibTeX::TypeFlag::Source, {}, {}, 5, {}, true, true},
0200         FieldDescription {QStringLiteral("^id"), QString(), {}, i18n("Identifier"), KBibTeX::TypeFlag::Source, KBibTeX::TypeFlag::Source, {}, {}, 6, {}, true, true},
0201         FieldDescription {QStringLiteral("Title"), QString(), {}, i18n("Title"), KBibTeX::TypeFlag::PlainText, KBibTeX::TypeFlag::PlainText | KBibTeX::TypeFlag::Reference | KBibTeX::TypeFlag::Source, {}, {}, 14, {}, false, false},
0202         FieldDescription {QStringLiteral("Title"), QStringLiteral("BookTitle"), {}, i18n("Title or Book Title"), KBibTeX::TypeFlag::PlainText, KBibTeX::TypeFlag::PlainText | KBibTeX::TypeFlag::Reference | KBibTeX::TypeFlag::Source, {}, {}, 14, {}, true, false},
0203         FieldDescription {QStringLiteral("SubTitle"), QString(), {}, i18n("Subtitle"), KBibTeX::TypeFlag::PlainText, KBibTeX::TypeFlag::PlainText | KBibTeX::TypeFlag::Reference | KBibTeX::TypeFlag::Source, {}, {}, 14, {}, false, false},
0204         FieldDescription {QStringLiteral("TitleAddon"), QString(), {}, i18n("Title Addon"), KBibTeX::TypeFlag::PlainText, KBibTeX::TypeFlag::PlainText | KBibTeX::TypeFlag::Reference | KBibTeX::TypeFlag::Source, {}, {}, 14, {}, false, false},
0205         FieldDescription {QStringLiteral("ShortTitle"), QString(), {}, i18n("Shortitle"), KBibTeX::TypeFlag::PlainText, KBibTeX::TypeFlag::PlainText | KBibTeX::TypeFlag::Reference | KBibTeX::TypeFlag::Source, {}, {}, 4, {}, false, false},
0206         FieldDescription {QStringLiteral("OrigTitle"), QString(), {}, i18n("Original Title"), KBibTeX::TypeFlag::PlainText, KBibTeX::TypeFlag::PlainText | KBibTeX::TypeFlag::Reference | KBibTeX::TypeFlag::Source, {}, {}, 2, {}, false, false},
0207         FieldDescription {QStringLiteral("ReprintTitle"), QString(), {}, i18n("Reprint Title"), KBibTeX::TypeFlag::PlainText, KBibTeX::TypeFlag::PlainText | KBibTeX::TypeFlag::Reference | KBibTeX::TypeFlag::Source, {}, {}, 2, {}, false, false},
0208         FieldDescription {QStringLiteral("MainTitle"), QString(), {}, i18n("Main Title"), KBibTeX::TypeFlag::PlainText, KBibTeX::TypeFlag::PlainText | KBibTeX::TypeFlag::Reference | KBibTeX::TypeFlag::Source, {}, {}, 14, {}, false, false},
0209         FieldDescription {QStringLiteral("MainSubTitle"), QString(), {}, i18n("Main Subtitle"), KBibTeX::TypeFlag::PlainText, KBibTeX::TypeFlag::PlainText | KBibTeX::TypeFlag::Reference | KBibTeX::TypeFlag::Source, {}, {}, 14, {}, false, false},
0210         FieldDescription {QStringLiteral("MainTitleAddon"), QString(), {}, i18n("Maintitle Addon"), KBibTeX::TypeFlag::PlainText, KBibTeX::TypeFlag::PlainText | KBibTeX::TypeFlag::Reference | KBibTeX::TypeFlag::Source, {}, {}, 14, {}, false, false},
0211         FieldDescription {QStringLiteral("Author"), QStringLiteral("Editor"), {}, i18n("Author or Editor"), KBibTeX::TypeFlag::PlainText, KBibTeX::TypeFlag::PlainText | KBibTeX::TypeFlag::Reference | KBibTeX::TypeFlag::Source, {}, {}, 7, {}, true, false},
0212         FieldDescription {QStringLiteral("Author"), QString(), {}, i18n("Author"), KBibTeX::TypeFlag::Person, KBibTeX::TypeFlag::Person | KBibTeX::TypeFlag::Reference, {}, {}, 7, {}, false, false},
0213         FieldDescription {QStringLiteral("ShortAuthor"), QString(), {}, i18n("Short Author"), KBibTeX::TypeFlag::Person, KBibTeX::TypeFlag::Person | KBibTeX::TypeFlag::Reference, {}, {}, 7, {}, false, false},
0214         FieldDescription {QStringLiteral("NameAddon"), QString(), {}, i18n("Name Addon"), KBibTeX::TypeFlag::Person, KBibTeX::TypeFlag::Person | KBibTeX::TypeFlag::Reference, {}, {}, 7, {}, false, false},
0215         FieldDescription {QStringLiteral("AuthorType"), QString(), {}, i18n("Author Type"), KBibTeX::TypeFlag::Person, KBibTeX::TypeFlag::Person | KBibTeX::TypeFlag::Reference, {}, {}, 7, {}, false, false},
0216         FieldDescription {QStringLiteral("BookAuthor"), QString(), {}, i18n("Book Author"), KBibTeX::TypeFlag::Person, KBibTeX::TypeFlag::Person | KBibTeX::TypeFlag::Reference, {}, {}, 7, {}, false, false},
0217         FieldDescription {QStringLiteral("Editor"), QString(), {}, i18n("Editor"), KBibTeX::TypeFlag::Person, KBibTeX::TypeFlag::Person | KBibTeX::TypeFlag::Reference, {}, {}, 7, {}, false, false},
0218         FieldDescription {QStringLiteral("ShortEditor"), QString(), {}, i18n("Short Editor"), KBibTeX::TypeFlag::Person, KBibTeX::TypeFlag::Person | KBibTeX::TypeFlag::Reference, {}, {}, 7, {}, false, false},
0219         FieldDescription {QStringLiteral("EditorType"), QString(), {}, i18n("Editor Type"), KBibTeX::TypeFlag::Person, KBibTeX::TypeFlag::Person | KBibTeX::TypeFlag::Reference, {}, {}, 7, {}, false, false},
0220         FieldDescription {QStringLiteral("EditorA"), QString(), {}, i18n("Editor A"), KBibTeX::TypeFlag::Person, KBibTeX::TypeFlag::Person | KBibTeX::TypeFlag::Reference, {}, {}, 7, {}, false, false},
0221         FieldDescription {QStringLiteral("EditorAType"), QString(), {}, i18n("Editor A Type"), KBibTeX::TypeFlag::Person, KBibTeX::TypeFlag::Person | KBibTeX::TypeFlag::Reference, {}, {}, 7, {}, false, false},
0222         FieldDescription {QStringLiteral("EditorB"), QString(), {}, i18n("Editor B"), KBibTeX::TypeFlag::Person, KBibTeX::TypeFlag::Person | KBibTeX::TypeFlag::Reference, {}, {}, 7, {}, false, false},
0223         FieldDescription {QStringLiteral("EditorBType"), QString(), {}, i18n("Editor B Type"), KBibTeX::TypeFlag::Person, KBibTeX::TypeFlag::Person | KBibTeX::TypeFlag::Reference, {}, {}, 7, {}, false, false},
0224         FieldDescription {QStringLiteral("EditorC"), QString(), {}, i18n("Editor C"), KBibTeX::TypeFlag::Person, KBibTeX::TypeFlag::Person | KBibTeX::TypeFlag::Reference, {}, {}, 7, {}, false, false},
0225         FieldDescription {QStringLiteral("EditorCType"), QString(), {}, i18n("Editor C Type"), KBibTeX::TypeFlag::Person, KBibTeX::TypeFlag::Person | KBibTeX::TypeFlag::Reference, {}, {}, 7, {}, false, false},
0226         FieldDescription {QStringLiteral("Translator"), QString(), {}, i18n("Translator"), KBibTeX::TypeFlag::Person, KBibTeX::TypeFlag::Person | KBibTeX::TypeFlag::Reference, {}, {}, 7, {}, false, false},
0227         FieldDescription {QStringLiteral("Afterword"), QString(), {}, i18n("Afterword Author"), KBibTeX::TypeFlag::Person, KBibTeX::TypeFlag::Person | KBibTeX::TypeFlag::Reference, {}, {}, 7, {}, false, false},
0228         FieldDescription {QStringLiteral("Introduction"), QString(), {}, i18n("Introduction Author"), KBibTeX::TypeFlag::Person, KBibTeX::TypeFlag::Person | KBibTeX::TypeFlag::Reference, {}, {}, 7, {}, false, false},
0229         FieldDescription {QStringLiteral("Foreword"), QString(), {}, i18n("Foreword Author"), KBibTeX::TypeFlag::Person, KBibTeX::TypeFlag::Person | KBibTeX::TypeFlag::Reference, {}, {}, 7, {}, false, false},
0230         FieldDescription {QStringLiteral("Annotator"), QString(), {}, i18n("Annotator"), KBibTeX::TypeFlag::Person, KBibTeX::TypeFlag::Person | KBibTeX::TypeFlag::Reference, {}, {}, 7, {}, false, false},
0231         FieldDescription {QStringLiteral("Commentator"), QString(), {}, i18n("Commentator"), KBibTeX::TypeFlag::Person, KBibTeX::TypeFlag::Person | KBibTeX::TypeFlag::Reference, {}, {}, 7, {}, false, false},
0232         FieldDescription {QStringLiteral("Holder"), QString(), {}, i18n("Patent Holder"), KBibTeX::TypeFlag::Person, KBibTeX::TypeFlag::Person | KBibTeX::TypeFlag::Reference, {}, {}, 7, {}, false, false},
0233         FieldDescription {QStringLiteral("Month"), QString(), {}, i18n("Month"), KBibTeX::TypeFlag::PlainText, KBibTeX::TypeFlag::PlainText | KBibTeX::TypeFlag::Reference | KBibTeX::TypeFlag::Source, {}, {}, 3, {}, false, false},
0234         FieldDescription {QStringLiteral("Year"), QString(), {}, i18n("Year"), KBibTeX::TypeFlag::PlainText, KBibTeX::TypeFlag::PlainText | KBibTeX::TypeFlag::Reference | KBibTeX::TypeFlag::Source, {}, {}, 2, {}, false, false},
0235         FieldDescription {QStringLiteral("Date"), QString(), {}, i18n("Date"), KBibTeX::TypeFlag::PlainText, KBibTeX::TypeFlag::PlainText | KBibTeX::TypeFlag::Reference | KBibTeX::TypeFlag::Source, {}, {}, 2, {}, false, false},
0236         FieldDescription {QStringLiteral("Year"), QStringLiteral("Date"), {}, i18n("Date or Year"), KBibTeX::TypeFlag::PlainText, KBibTeX::TypeFlag::PlainText | KBibTeX::TypeFlag::Reference | KBibTeX::TypeFlag::Source, {}, {}, 2, {}, true, false},
0237         FieldDescription {QStringLiteral("EventDate"), QString(), {}, i18n("Event Date"), KBibTeX::TypeFlag::PlainText, KBibTeX::TypeFlag::PlainText | KBibTeX::TypeFlag::Reference | KBibTeX::TypeFlag::Source, {}, {}, 2, {}, false, false},
0238         FieldDescription {QStringLiteral("OrigDate"), QString(), {}, i18n("Original Date"), KBibTeX::TypeFlag::PlainText, KBibTeX::TypeFlag::PlainText | KBibTeX::TypeFlag::Reference | KBibTeX::TypeFlag::Source, {}, {}, 2, {}, false, false},
0239         FieldDescription {QStringLiteral("JournalTitle"), QString(), {QStringLiteral("Journal")}, i18n("Journal Title"), KBibTeX::TypeFlag::PlainText, KBibTeX::TypeFlag::PlainText | KBibTeX::TypeFlag::Reference | KBibTeX::TypeFlag::Source, {}, {}, 4, {}, false, false},
0240         FieldDescription {QStringLiteral("JournalSubTitle"), QString(), {}, i18n("Journal Subtitle"), KBibTeX::TypeFlag::PlainText, KBibTeX::TypeFlag::PlainText | KBibTeX::TypeFlag::Reference | KBibTeX::TypeFlag::Source, {}, {}, 4, {}, false, false},
0241         FieldDescription {QStringLiteral("ShortJournal"), QString(), {}, i18n("Journal Shortitle"), KBibTeX::TypeFlag::PlainText, KBibTeX::TypeFlag::PlainText | KBibTeX::TypeFlag::Reference | KBibTeX::TypeFlag::Source, {}, {}, 4, {}, false, false},
0242         FieldDescription {QStringLiteral("Volume"), QString(), {}, i18n("Volume"), KBibTeX::TypeFlag::PlainText, KBibTeX::TypeFlag::PlainText | KBibTeX::TypeFlag::Reference | KBibTeX::TypeFlag::Source, {}, {}, 1, {}, false, false},
0243         FieldDescription {QStringLiteral("Volumes"), QString(), {}, i18n("Number of Volumes"), KBibTeX::TypeFlag::PlainText, KBibTeX::TypeFlag::PlainText | KBibTeX::TypeFlag::Reference | KBibTeX::TypeFlag::Source, {}, {}, 1, {}, false, false},
0244         FieldDescription {QStringLiteral("Number"), QString(), {}, i18n("Number"), KBibTeX::TypeFlag::PlainText, KBibTeX::TypeFlag::PlainText | KBibTeX::TypeFlag::Reference | KBibTeX::TypeFlag::Source, {}, {}, 1, {}, false, false},
0245         FieldDescription {QStringLiteral("Version"), QString(), {}, i18n("Version"), KBibTeX::TypeFlag::PlainText, KBibTeX::TypeFlag::PlainText | KBibTeX::TypeFlag::Reference | KBibTeX::TypeFlag::Source, {}, {}, 1, {}, false, false},
0246         FieldDescription {QStringLiteral("Part"), QString(), {}, i18n("Part"), KBibTeX::TypeFlag::PlainText, KBibTeX::TypeFlag::PlainText | KBibTeX::TypeFlag::Reference | KBibTeX::TypeFlag::Source, {}, {}, 1, {}, false, false},
0247         FieldDescription {QStringLiteral("Issue"), QString(), {}, i18n("Issue"), KBibTeX::TypeFlag::PlainText, KBibTeX::TypeFlag::PlainText | KBibTeX::TypeFlag::Reference | KBibTeX::TypeFlag::Source, {}, {}, 1, {}, false, false},
0248         FieldDescription {QStringLiteral("IASN"), QString(), {}, i18n("IASN"), KBibTeX::TypeFlag::PlainText, KBibTeX::TypeFlag::PlainText | KBibTeX::TypeFlag::Reference | KBibTeX::TypeFlag::Source, {}, {}, 2, {}, false, false},
0249         FieldDescription {QStringLiteral("ISMN"), QString(), {}, i18n("ISMN"), KBibTeX::TypeFlag::PlainText, KBibTeX::TypeFlag::PlainText | KBibTeX::TypeFlag::Reference | KBibTeX::TypeFlag::Source, {}, {}, 2, {}, false, false},
0250         FieldDescription {QStringLiteral("ISRN"), QString(), {}, i18n("ISRN"), KBibTeX::TypeFlag::PlainText, KBibTeX::TypeFlag::PlainText | KBibTeX::TypeFlag::Reference | KBibTeX::TypeFlag::Source, {}, {}, 2, {}, false, false},
0251         FieldDescription {QStringLiteral("ISSN"), QString(), {}, i18n("ISSN"), KBibTeX::TypeFlag::PlainText, KBibTeX::TypeFlag::PlainText | KBibTeX::TypeFlag::Reference | KBibTeX::TypeFlag::Source, {}, {}, 2, {}, false, false},
0252         FieldDescription {QStringLiteral("ISBN"), QString(), {}, i18n("ISBN"), KBibTeX::TypeFlag::PlainText, KBibTeX::TypeFlag::PlainText | KBibTeX::TypeFlag::Reference | KBibTeX::TypeFlag::Source, {}, {}, 2, {}, false, false},
0253         FieldDescription {QStringLiteral("ISBN"), QStringLiteral("ISSN"), {}, i18n("ISBN or ISSN"), KBibTeX::TypeFlag::PlainText, KBibTeX::TypeFlag::PlainText | KBibTeX::TypeFlag::Reference | KBibTeX::TypeFlag::Source, {}, {}, 2, {}, false, false},
0254         FieldDescription {QStringLiteral("ISWC"), QString(), {}, i18n("ISWC"), KBibTeX::TypeFlag::PlainText, KBibTeX::TypeFlag::PlainText | KBibTeX::TypeFlag::Reference | KBibTeX::TypeFlag::Source, {}, {}, 2, {}, false, false},
0255         FieldDescription {QStringLiteral("HowPublished"), QString(), {}, i18n("How Published"), KBibTeX::TypeFlag::PlainText, KBibTeX::TypeFlag::PlainText | KBibTeX::TypeFlag::Reference | KBibTeX::TypeFlag::Source, {}, {}, 5, {}, false, false},
0256         FieldDescription {QStringLiteral("Note"), QString(), {}, i18n("Note"), KBibTeX::TypeFlag::PlainText, KBibTeX::TypeFlag::PlainText | KBibTeX::TypeFlag::Reference | KBibTeX::TypeFlag::Source, {}, {}, 5, {}, false, false},
0257         FieldDescription {QStringLiteral("Addendum"), QString(), {}, i18n("Addendum"), KBibTeX::TypeFlag::PlainText, KBibTeX::TypeFlag::PlainText | KBibTeX::TypeFlag::Reference | KBibTeX::TypeFlag::Source, {}, {}, 5, {}, false, false},
0258         FieldDescription {QStringLiteral("Annotation"), QString(), {QStringLiteral("Annote")}, i18n("Annotation"), KBibTeX::TypeFlag::PlainText, KBibTeX::TypeFlag::PlainText | KBibTeX::TypeFlag::Reference | KBibTeX::TypeFlag::Source, {}, {}, 5, {}, false, false},
0259         FieldDescription {QStringLiteral("Abstract"), QString(), {}, i18n("Abstract"), KBibTeX::TypeFlag::PlainText, KBibTeX::TypeFlag::PlainText | KBibTeX::TypeFlag::Reference | KBibTeX::TypeFlag::Source, {}, {}, 7, {}, false, true},
0260         FieldDescription {QStringLiteral("Pages"), QString(), {}, i18n("Pages"), KBibTeX::TypeFlag::PlainText, KBibTeX::TypeFlag::PlainText | KBibTeX::TypeFlag::Reference | KBibTeX::TypeFlag::Source, {}, {}, 2, {}, true, false},
0261         FieldDescription {QStringLiteral("PageTotal"), QString(), {}, i18n("Total Pages"), KBibTeX::TypeFlag::PlainText, KBibTeX::TypeFlag::PlainText | KBibTeX::TypeFlag::Reference | KBibTeX::TypeFlag::Source, {}, {}, 2, {}, false, false},
0262         FieldDescription {QStringLiteral("Pagination"), QString(), {}, i18n("Pagination"), KBibTeX::TypeFlag::PlainText, KBibTeX::TypeFlag::PlainText | KBibTeX::TypeFlag::Reference | KBibTeX::TypeFlag::Source, {}, {}, 2, {}, false, false},
0263         FieldDescription {QStringLiteral("BookPagination"), QString(), {}, i18n("Book Pagination"), KBibTeX::TypeFlag::PlainText, KBibTeX::TypeFlag::PlainText | KBibTeX::TypeFlag::Reference | KBibTeX::TypeFlag::Source, {}, {}, 2, {}, false, false},
0264         FieldDescription {QStringLiteral("Publisher"), QString(), {}, i18n("Publisher"), KBibTeX::TypeFlag::PlainText, KBibTeX::TypeFlag::PlainText | KBibTeX::TypeFlag::Reference | KBibTeX::TypeFlag::Source, {}, {}, 5, {}, false, false},
0265         FieldDescription {QStringLiteral("OrigPublisher"), QString(), {}, i18n("Original Publisher"), KBibTeX::TypeFlag::PlainText, KBibTeX::TypeFlag::PlainText | KBibTeX::TypeFlag::Reference | KBibTeX::TypeFlag::Source, {}, {}, 2, {}, false, false},
0266         FieldDescription {QStringLiteral("Institution"), QString(), {QStringLiteral("School")}, i18n("Institution"), KBibTeX::TypeFlag::PlainText, KBibTeX::TypeFlag::PlainText | KBibTeX::TypeFlag::Reference | KBibTeX::TypeFlag::Source, {}, {}, 5, {}, false, false},
0267         FieldDescription {QStringLiteral("BookTitle"), QString(), {}, i18n("Book Title"), KBibTeX::TypeFlag::PlainText, KBibTeX::TypeFlag::PlainText | KBibTeX::TypeFlag::Reference | KBibTeX::TypeFlag::Source, {}, {}, 14, {}, false, false},
0268         FieldDescription {QStringLiteral("BookSubTitle"), QString(), {}, i18n("Book Subtitle"), KBibTeX::TypeFlag::PlainText, KBibTeX::TypeFlag::PlainText | KBibTeX::TypeFlag::Reference | KBibTeX::TypeFlag::Source, {}, {}, 14, {}, false, false},
0269         FieldDescription {QStringLiteral("IssueTitle"), QString(), {}, i18n("Issue Title"), KBibTeX::TypeFlag::PlainText, KBibTeX::TypeFlag::PlainText | KBibTeX::TypeFlag::Reference | KBibTeX::TypeFlag::Source, {}, {}, 1, {}, false, false},
0270         FieldDescription {QStringLiteral("IssueSubTitle"), QString(), {}, i18n("Issue Subtitle"), KBibTeX::TypeFlag::PlainText, KBibTeX::TypeFlag::PlainText | KBibTeX::TypeFlag::Reference | KBibTeX::TypeFlag::Source, {}, {}, 1, {}, false, false},
0271         FieldDescription {QStringLiteral("BookTitleAddon"), QString(), {}, i18n("Booktitle Addon"), KBibTeX::TypeFlag::PlainText, KBibTeX::TypeFlag::PlainText | KBibTeX::TypeFlag::Reference | KBibTeX::TypeFlag::Source, {}, {}, 14, {}, false, false},
0272         FieldDescription {QStringLiteral("Series"), QString(), {}, i18n("Series"), KBibTeX::TypeFlag::PlainText, KBibTeX::TypeFlag::PlainText | KBibTeX::TypeFlag::Reference | KBibTeX::TypeFlag::Source, {}, {}, 12, {}, false, false},
0273         FieldDescription {QStringLiteral("ShortSeries"), QString(), {}, i18n("Series Shortitle"), KBibTeX::TypeFlag::PlainText, KBibTeX::TypeFlag::PlainText | KBibTeX::TypeFlag::Reference | KBibTeX::TypeFlag::Source, {}, {}, 4, {}, false, false},
0274         FieldDescription {QStringLiteral("Edition"), QString(), {}, i18n("Edition"), KBibTeX::TypeFlag::PlainText, KBibTeX::TypeFlag::PlainText | KBibTeX::TypeFlag::Reference | KBibTeX::TypeFlag::Source, {}, {}, 2, {}, false, false},
0275         FieldDescription {QStringLiteral("Chapter"), QString(), {}, i18n("Chapter"), KBibTeX::TypeFlag::PlainText, KBibTeX::TypeFlag::PlainText | KBibTeX::TypeFlag::Reference | KBibTeX::TypeFlag::Source, {}, {}, 1, {}, false, false},
0276         FieldDescription {QStringLiteral("Organization"), QString(), {}, i18n("Organization"), KBibTeX::TypeFlag::PlainText, KBibTeX::TypeFlag::PlainText | KBibTeX::TypeFlag::Reference | KBibTeX::TypeFlag::Source, {}, {}, 2, {}, false, false},
0277         FieldDescription {QStringLiteral("EventTitle"), QString(), {}, i18n("Event Title"), KBibTeX::TypeFlag::PlainText, KBibTeX::TypeFlag::PlainText | KBibTeX::TypeFlag::Reference | KBibTeX::TypeFlag::Source, {}, {}, 2, {}, false, false},
0278         FieldDescription {QStringLiteral("Venue"), QString(), {}, i18n("Venue"), KBibTeX::TypeFlag::PlainText, KBibTeX::TypeFlag::PlainText | KBibTeX::TypeFlag::Reference | KBibTeX::TypeFlag::Source, {}, {}, 2, {}, false, false},
0279         FieldDescription {QStringLiteral("IndexTitle"), QString(), {}, i18n("Index Title"), KBibTeX::TypeFlag::PlainText, KBibTeX::TypeFlag::PlainText | KBibTeX::TypeFlag::Reference | KBibTeX::TypeFlag::Source, {}, {}, 2, {}, false, true},
0280         FieldDescription {QStringLiteral("Keywords"), QString(), {}, i18n("Keywords"), KBibTeX::TypeFlag::Keyword, KBibTeX::TypeFlag::Keyword | KBibTeX::TypeFlag::Source, {}, {}, 3, {}, false, true},
0281         FieldDescription {QStringLiteral("CrossRef"), QString(), {}, i18n("Cross Reference"), KBibTeX::TypeFlag::Verbatim, KBibTeX::TypeFlag::Verbatim, {}, {}, 3, {}, false, true},
0282         FieldDescription {QStringLiteral("XRef"), QString(), {}, i18n("XRef"), KBibTeX::TypeFlag::Verbatim, KBibTeX::TypeFlag::Verbatim, {}, {}, 3, {}, false, true},
0283         FieldDescription {QStringLiteral("DOI"), QString(), {}, i18n("DOI"), KBibTeX::TypeFlag::Verbatim, KBibTeX::TypeFlag::Verbatim, {}, {}, 1, {}, false, false},
0284         FieldDescription {QStringLiteral("EPrint"), QString(), {}, i18n("E-Print"), KBibTeX::TypeFlag::Verbatim, KBibTeX::TypeFlag::Verbatim, {}, {}, 1, {}, false, false},
0285         FieldDescription {QStringLiteral("EPrintClass"), QString(), {QStringLiteral("PrimaryClass")}, i18n("E-Print Class"), KBibTeX::TypeFlag::PlainText, KBibTeX::TypeFlag::PlainText | KBibTeX::TypeFlag::Reference | KBibTeX::TypeFlag::Source, {}, {}, 2, {}, false, false},
0286         FieldDescription {QStringLiteral("EPrintType"), QString(), {QStringLiteral("ArchivePrefix")}, i18n("E-Print Type"), KBibTeX::TypeFlag::PlainText, KBibTeX::TypeFlag::PlainText | KBibTeX::TypeFlag::Reference | KBibTeX::TypeFlag::Source, {}, {}, 2, {}, false, false},
0287         FieldDescription {QStringLiteral("URL"), QString(), {}, i18n("URL"), KBibTeX::TypeFlag::Verbatim, KBibTeX::TypeFlag::Verbatim, {}, {}, 3, {}, false, false},
0288         FieldDescription {QStringLiteral("URLDate"), QString(), {}, i18n("URL Date"), KBibTeX::TypeFlag::PlainText, KBibTeX::TypeFlag::PlainText | KBibTeX::TypeFlag::Reference | KBibTeX::TypeFlag::Source, {}, {}, 3, {}, false, false},
0289         FieldDescription {QStringLiteral("File"), QString(), {QStringLiteral("PDF")}, i18n("Local File URL"), KBibTeX::TypeFlag::Verbatim, KBibTeX::TypeFlag::Verbatim, {}, {}, 3, {}, false, true},
0290         FieldDescription {QStringLiteral("Location"), QString(), {QStringLiteral("Address")}, i18n("Location"), KBibTeX::TypeFlag::PlainText, KBibTeX::TypeFlag::PlainText | KBibTeX::TypeFlag::Reference | KBibTeX::TypeFlag::Source, {}, {}, 3, {}, false, false},
0291         FieldDescription {QStringLiteral("OrigLocation"), QString(), {}, i18n("Original Location"), KBibTeX::TypeFlag::PlainText, KBibTeX::TypeFlag::PlainText | KBibTeX::TypeFlag::Reference | KBibTeX::TypeFlag::Source, {}, {}, 2, {}, false, false},
0292         FieldDescription {QStringLiteral("Type"), QString(), {}, i18n("Type"), KBibTeX::TypeFlag::PlainText, KBibTeX::TypeFlag::PlainText | KBibTeX::TypeFlag::Reference | KBibTeX::TypeFlag::Source, {}, {}, 2, {}, false, false},
0293         FieldDescription {QStringLiteral("EID"), QString(), {}, i18n("EID"), KBibTeX::TypeFlag::PlainText, KBibTeX::TypeFlag::PlainText | KBibTeX::TypeFlag::Reference | KBibTeX::TypeFlag::Source, {}, {}, 2, {}, false, false},
0294         FieldDescription {QStringLiteral("Label"), QString(), {}, i18n("Label"), KBibTeX::TypeFlag::PlainText, KBibTeX::TypeFlag::PlainText | KBibTeX::TypeFlag::Reference | KBibTeX::TypeFlag::Source, {}, {}, 2, {}, false, true},
0295         FieldDescription {QStringLiteral("ShortHand"), QString(), {}, i18n("Shorthand"), KBibTeX::TypeFlag::PlainText, KBibTeX::TypeFlag::PlainText | KBibTeX::TypeFlag::Reference | KBibTeX::TypeFlag::Source, {}, {}, 2, {}, false, true},
0296         FieldDescription {QStringLiteral("ShortHandIntro"), QString(), {}, i18n("Shorthand Intro"), KBibTeX::TypeFlag::PlainText, KBibTeX::TypeFlag::PlainText | KBibTeX::TypeFlag::Reference | KBibTeX::TypeFlag::Source, {}, {}, 2, {}, false, true},
0297         FieldDescription {QStringLiteral("PubState"), QString(), {}, i18n("Publication State"), KBibTeX::TypeFlag::PlainText, KBibTeX::TypeFlag::PlainText | KBibTeX::TypeFlag::Reference | KBibTeX::TypeFlag::Source, {}, {}, 2, {}, false, false},
0298         FieldDescription {QStringLiteral("Language"), QString(), {}, i18n("Language"), KBibTeX::TypeFlag::PlainText, KBibTeX::TypeFlag::PlainText | KBibTeX::TypeFlag::Reference | KBibTeX::TypeFlag::Source, {}, {}, 2, {}, false, false},
0299         FieldDescription {QStringLiteral("OrigLanguage"), QString(), {}, i18n("Original Language"), KBibTeX::TypeFlag::PlainText, KBibTeX::TypeFlag::PlainText | KBibTeX::TypeFlag::Reference | KBibTeX::TypeFlag::Source, {}, {}, 2, {}, false, false},
0300         FieldDescription {QStringLiteral("Library"), QString(), {}, i18n("Library"), KBibTeX::TypeFlag::PlainText, KBibTeX::TypeFlag::PlainText | KBibTeX::TypeFlag::Reference | KBibTeX::TypeFlag::Source, {}, {}, 2, {}, false, false},
0301         FieldDescription {QStringLiteral("X-Color"), QString(), {}, i18n("Color"), KBibTeX::TypeFlag::Verbatim, KBibTeX::TypeFlag::Verbatim | KBibTeX::TypeFlag::Source, {}, {}, 2, {}, false, true},
0302         FieldDescription {QStringLiteral("Gender"), QString(), {}, i18n("Gender"), KBibTeX::TypeFlag::PlainText, KBibTeX::TypeFlag::PlainText | KBibTeX::TypeFlag::Reference | KBibTeX::TypeFlag::Source, {}, {}, 2, {}, false, true},
0303         FieldDescription {QStringLiteral("Hyphenation"), QString(), {}, i18n("Hyphenation"), KBibTeX::TypeFlag::PlainText, KBibTeX::TypeFlag::PlainText | KBibTeX::TypeFlag::Reference | KBibTeX::TypeFlag::Source, {}, {}, 2, {}, false, true},
0304         FieldDescription {QStringLiteral("IndexSortTitle"), QString(), {}, i18n("Index Sorttitle"), KBibTeX::TypeFlag::PlainText, KBibTeX::TypeFlag::PlainText | KBibTeX::TypeFlag::Reference | KBibTeX::TypeFlag::Source, {}, {}, 2, {}, false, true},
0305         FieldDescription {QStringLiteral("Options"), QString(), {}, i18n("Entry Options"), KBibTeX::TypeFlag::PlainText, KBibTeX::TypeFlag::PlainText | KBibTeX::TypeFlag::Reference | KBibTeX::TypeFlag::Source, {}, {}, 2, {}, false, true},
0306         FieldDescription {QStringLiteral("Presort"), QString(), {}, i18n("Presort"), KBibTeX::TypeFlag::PlainText, KBibTeX::TypeFlag::PlainText | KBibTeX::TypeFlag::Reference | KBibTeX::TypeFlag::Source, {}, {}, 2, {}, false, true},
0307         FieldDescription {QStringLiteral("SortKey"), QString(), {QStringLiteral("Key")}, i18n("Sort Key"), KBibTeX::TypeFlag::PlainText, KBibTeX::TypeFlag::PlainText | KBibTeX::TypeFlag::Reference | KBibTeX::TypeFlag::Source, {}, {}, 2, {}, false, true},
0308         FieldDescription {QStringLiteral("SortName"), QString(), {}, i18n("Sort Names"), KBibTeX::TypeFlag::Person, KBibTeX::TypeFlag::Person | KBibTeX::TypeFlag::Reference, {}, {}, 7, {}, false, false},
0309         FieldDescription {QStringLiteral("SortShortHand"), QString(), {}, i18n("Sort Shorthand"), KBibTeX::TypeFlag::PlainText, KBibTeX::TypeFlag::PlainText | KBibTeX::TypeFlag::Reference | KBibTeX::TypeFlag::Source, {}, {}, 2, {}, false, true},
0310         FieldDescription {QStringLiteral("SortTitle"), QString(), {}, i18n("Sort Title"), KBibTeX::TypeFlag::PlainText, KBibTeX::TypeFlag::PlainText | KBibTeX::TypeFlag::Reference | KBibTeX::TypeFlag::Source, {}, {}, 2, {}, false, true},
0311         FieldDescription {QStringLiteral("SortYear"), QString(), {}, i18n("Sort Year"), KBibTeX::TypeFlag::PlainText, KBibTeX::TypeFlag::PlainText | KBibTeX::TypeFlag::Reference | KBibTeX::TypeFlag::Source, {}, {}, 2, {}, false, true},
0312         FieldDescription {QStringLiteral("ISAN"), QString(), {}, i18n("ISAN"), KBibTeX::TypeFlag::PlainText, KBibTeX::TypeFlag::PlainText | KBibTeX::TypeFlag::Reference | KBibTeX::TypeFlag::Source, {}, {}, 2, {}, false, false},
0313         FieldDescription {QStringLiteral("Location"), QString(), {}, i18n("Location"), KBibTeX::TypeFlag::PlainText, KBibTeX::TypeFlag::PlainText | KBibTeX::TypeFlag::Reference | KBibTeX::TypeFlag::Source, {}, {}, 3, {}, false, false},
0314     };
0315 
0316     static BibTeXFields singletonBibTeX(QStringLiteral("bibtex"), fieldDescriptionsBibTeX), singletonBibLaTeX(QStringLiteral("biblatex"), fieldDescriptionsBibLaTeX);
0317 
0318     return Preferences::instance().bibliographySystem() == Preferences::BibliographySystem::BibLaTeX ? singletonBibLaTeX : singletonBibTeX;
0319 }
0320 
0321 #ifdef HAVE_KF
0322 void BibTeXFields::save()
0323 {
0324     d->save();
0325 }
0326 
0327 void BibTeXFields::resetToDefaults(const QString &treeViewName)
0328 {
0329     d->resetToDefaults(treeViewName);
0330 }
0331 #endif // HAVE_KF
0332 
0333 QString BibTeXFields::format(const QString &name, KBibTeX::Casing casing) const
0334 {
0335     QString iName = name.toLower();
0336 
0337     switch (casing) {
0338     case KBibTeX::Casing::LowerCase: return iName;
0339     case KBibTeX::Casing::UpperCase: return name.toUpper();
0340     case KBibTeX::Casing::InitialCapital:
0341         iName[0] = iName[0].toUpper();
0342         return iName;
0343     case KBibTeX::Casing::LowerCamelCase: {
0344         for (const auto &fd : const_cast<const BibTeXFields &>(*this)) {
0345             /// configuration file uses camel-case
0346             QString itName = fd.upperCamelCase.toLower();
0347             if (itName == iName && fd.upperCamelCaseAlt.isEmpty()) {
0348                 iName = fd.upperCamelCase;
0349                 break;
0350             }
0351         }
0352 
0353         /// make an educated guess how camel-case would look like
0354         iName[0] = iName[0].toLower();
0355         return iName;
0356     }
0357     case KBibTeX::Casing::UpperCamelCase: {
0358         for (const auto &fd : const_cast<const BibTeXFields &>(*this)) {
0359             /// configuration file uses camel-case
0360             QString itName = fd.upperCamelCase.toLower();
0361             if (itName == iName && fd.upperCamelCaseAlt.isEmpty()) {
0362                 iName = fd.upperCamelCase;
0363                 break;
0364             }
0365         }
0366 
0367         /// make an educated guess how camel-case would look like
0368         iName[0] = iName[0].toUpper();
0369         return iName;
0370     }
0371     }
0372     return name;
0373 }
0374 
0375 const FieldDescription BibTeXFields::find(const QString &name) const
0376 {
0377     const QString iName = name.toLower();
0378     for (const auto &fd : const_cast<const BibTeXFields &>(*this)) {
0379         if (fd.upperCamelCase.toLower() == iName && fd.upperCamelCaseAlt.isEmpty())
0380             return fd;
0381     }
0382     qCWarning(LOG_KBIBTEX_CONFIG) << "No field description for " << name << "(" << iName << ")";
0383     return FieldDescription {QString(), QString(), {}, QString(), KBibTeX::TypeFlag::Source, KBibTeX::TypeFlag::Source, {}, {}, 0, {}, false, false};
0384 }
0385 
0386 KBibTeX::TypeFlag BibTeXFields::typeFlagFromString(const QString &typeFlagString)
0387 {
0388     KBibTeX::TypeFlag result = KBibTeX::TypeFlag::Invalid;
0389 
0390     if (typeFlagString == QStringLiteral("Text"))
0391         result = KBibTeX::TypeFlag::PlainText;
0392     else if (typeFlagString == QStringLiteral("Source"))
0393         result = KBibTeX::TypeFlag::Source;
0394     else if (typeFlagString == QStringLiteral("Person"))
0395         result = KBibTeX::TypeFlag::Person;
0396     else if (typeFlagString == QStringLiteral("Keyword"))
0397         result = KBibTeX::TypeFlag::Keyword;
0398     else if (typeFlagString == QStringLiteral("Reference"))
0399         result = KBibTeX::TypeFlag::Reference;
0400     else if (typeFlagString == QStringLiteral("Verbatim"))
0401         result = KBibTeX::TypeFlag::Verbatim;
0402     else
0403         qCWarning(LOG_KBIBTEX_CONFIG) << "Could not interpret string" << typeFlagString << "into a KBibTeX::TypeFlag value";
0404 
0405     return result;
0406 }
0407 
0408 KBibTeX::TypeFlags BibTeXFields::typeFlagsFromString(const QString &typeFlagsString)
0409 {
0410     KBibTeX::TypeFlags result;
0411 
0412     const QStringList list = typeFlagsString.split(QLatin1Char(';'));
0413     for (const QString &s : list)
0414         result |= typeFlagFromString(s);
0415 
0416     return result;
0417 }
0418 
0419 QString BibTeXFields::typeFlagsToString(KBibTeX::TypeFlags typeFlags)
0420 {
0421     QStringList resultList;
0422     if (typeFlags & KBibTeX::TypeFlag::PlainText) resultList << QStringLiteral("Text");
0423     if (typeFlags & KBibTeX::TypeFlag::Source) resultList << QStringLiteral("Source");
0424     if (typeFlags & KBibTeX::TypeFlag::Person) resultList << QStringLiteral("Person");
0425     if (typeFlags & KBibTeX::TypeFlag::Keyword) resultList << QStringLiteral("Keyword");
0426     if (typeFlags & KBibTeX::TypeFlag::Reference) resultList << QStringLiteral("Reference");
0427     if (typeFlags & KBibTeX::TypeFlag::Verbatim) resultList << QStringLiteral("Verbatim");
0428     return resultList.join(QChar(QLatin1Char(';')));
0429 }
0430 
0431 QString BibTeXFields::typeFlagToString(KBibTeX::TypeFlag typeFlag)
0432 {
0433     if (typeFlag == KBibTeX::TypeFlag::PlainText) return QStringLiteral("Text");
0434     if (typeFlag == KBibTeX::TypeFlag::Source) return QStringLiteral("Source");
0435     if (typeFlag == KBibTeX::TypeFlag::Person) return QStringLiteral("Person");
0436     if (typeFlag == KBibTeX::TypeFlag::Keyword) return QStringLiteral("Keyword");
0437     if (typeFlag == KBibTeX::TypeFlag::Reference) return QStringLiteral("Reference");
0438     if (typeFlag == KBibTeX::TypeFlag::Verbatim) return QStringLiteral("Verbatim");
0439     return QString();
0440 }