diff --git a/src/io/encoder.cpp b/src/io/encoder.cpp index c1030dc5..bb0b0dda 100644 --- a/src/io/encoder.cpp +++ b/src/io/encoder.cpp @@ -1,28 +1,99 @@ /*************************************************************************** - * Copyright (C) 2004-2017 by Thomas Fischer * + * Copyright (C) 2004-2019 by Thomas Fischer * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program; if not, see . * ***************************************************************************/ #include "encoder.h" +#include "logging_io.h" + +Encoder::Encoder() +{ +#ifdef HAVE_ICU + /// Create an ICU Transliterator, configured to + /// transliterate virtually anything into plain ASCII + UErrorCode uec = U_ZERO_ERROR; + m_trans = icu::Transliterator::createInstance("Any-Latin;Latin-ASCII", UTRANS_FORWARD, uec); + if (U_FAILURE(uec)) { + qCWarning(LOG_KBIBTEX_IO) << "Error creating an ICU Transliterator instance: " << u_errorName(uec); + if (m_trans != nullptr) delete m_trans; + m_trans = nullptr; + } +#endif // HAVE_ICU +} + +const Encoder &Encoder::instance() +{ + static const Encoder self; + return self; +} + QString Encoder::decode(const QString &text) const { return text; } QString Encoder::encode(const QString &text, const TargetEncoding) const { return text; } + +#ifdef HAVE_ICU +QString Encoder::convertToPlainAscii(const QString &ninput) const +{ + /// Previously, iconv's //TRANSLIT feature had been used here. + /// However, the transliteration is locale-specific as discussed + /// here: + /// http://taschenorakel.de/mathias/2007/11/06/iconv-transliterations/ + /// Therefore, iconv is not an acceptable solution. + /// + /// Instead, "International Components for Unicode" (ICU) is used. + /// It is already a dependency for Qt, so there is no "cost" involved + /// in using it. + + /// Preprocessing where ICU may give unexpected results otherwise + QString input = ninput; + input = input.replace(QChar(0x2013), QStringLiteral("--")).replace(QChar(0x2014), QStringLiteral("---")); + + const int inputLen = input.length(); + /// Make a copy of the input string into an array of UChar + UChar *uChars = new UChar[inputLen]; + for (int i = 0; i < inputLen; ++i) + uChars[i] = input.at(i).unicode(); + /// Create an ICU-specific unicode string + icu::UnicodeString uString = icu::UnicodeString(uChars, inputLen); + /// Perform the actual transliteration, modifying Unicode string + if (m_trans != nullptr) m_trans->transliterate(uString); + /// Create regular C++ string from Unicode string + std::string cppString; + uString.toUTF8String(cppString); + /// Clean up any mess + delete[] uChars; + /// Convert regular C++ to Qt-specific QString, + /// should work as cppString contains only ASCII text + return QString::fromStdString(cppString); +} + +bool Encoder::containsOnlyAscii(const QString &ntext) +{ + /// Perform Canonical Decomposition followed by Canonical Composition + const QString text = ntext.normalized(QString::NormalizationForm_C); + + for (const QChar &c : text) + if (c.unicode() > 127) return false; + return true; +} + +#endif // HAVE_ICU diff --git a/src/io/encoder.h b/src/io/encoder.h index bf70e5e7..5fbc3ecd 100644 --- a/src/io/encoder.h +++ b/src/io/encoder.h @@ -1,58 +1,88 @@ /*************************************************************************** - * Copyright (C) 2004-2017 by Thomas Fischer * + * Copyright (C) 2004-2019 by Thomas Fischer * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program; if not, see . * ***************************************************************************/ #ifndef BIBTEXENCODER_H #define BIBTEXENCODER_H +#ifdef HAVE_KF5 +#include "kbibtexio_export.h" +#endif // HAVE_KF5 + +#ifdef HAVE_ICU +#include +#endif // HAVE_ICU + #include /** * Base class for that convert between different textual representations * for non-ASCII characters. Examples for external textual representations * are \"a in LaTeX and ä in XML. * @author Thomas Fischer */ -class Encoder +class KBIBTEXIO_EXPORT Encoder { public: enum TargetEncoding {TargetEncodingASCII = 0, TargetEncodingUTF8 = 1}; + static const Encoder &instance(); virtual ~Encoder() { - /// nothing +#ifdef HAVE_ICU + if (m_trans != nullptr) + delete m_trans; +#endif // HAVE_ICU } /** * Decode from external textual representation to internal (UTF-8) representation. * @param text text in external textual representation * @return text in internal (UTF-8) representation */ virtual QString decode(const QString &text) const; /** * Encode from internal (UTF-8) representation to external textual representation. * Output may be restricted to ASCII (non-ASCII characters will be rewritten depending * on concrete Encoder class, for example as 'ä' as XML or '\"a' for LaTeX) * or UTF-8 (all characters allowed, only 'special ones' rewritten, for example * '&' for XML and '\&' for LaTeX). * @param text in internal (UTF-8) representation * @param targetEncoding allow either only ASCII output or UTF-8 output. * @return text text in external textual representation */ virtual QString encode(const QString &text, const TargetEncoding targetEncoding) const; + +#ifdef HAVE_ICU + QString convertToPlainAscii(const QString &input) const; +#else // HAVE_ICU + /// Dummy implementation without ICU + inline QString convertToPlainAscii(const QString &input) const { + return input; + } +#endif // HAVE_ICU + static bool containsOnlyAscii(const QString &text); + +protected: + Encoder(); + +private: +#ifdef HAVE_ICU + icu::Transliterator *m_trans; +#endif // HAVE_ICU }; #endif diff --git a/src/io/encoderlatex.cpp b/src/io/encoderlatex.cpp index 2a4792d0..d70cc20e 100644 --- a/src/io/encoderlatex.cpp +++ b/src/io/encoderlatex.cpp @@ -1,1737 +1,1674 @@ /*************************************************************************** * Copyright (C) 2004-2019 by Thomas Fischer * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program; if not, see . * ***************************************************************************/ #include "encoderlatex.h" #include #include "logging_io.h" #ifdef BUILD_TESTING inline QByteArray toUtf8(const QChar c) { char base[8]; const ushort u = c.unicode(); if (u < 0x007f) { base[0] = static_cast(u & 0x007f); return QByteArray(base, 1); } else if (u < 0x07ff) { base[0] = 0xc0 | static_cast(u >> 6); base[1] = 0x80 | static_cast(u & 0x003f); return QByteArray(base, 2); } else if (u < 0xffff) { base[0] = 0xe0 | static_cast(u >> 12); base[1] = 0x80 | static_cast((u >> 6) & 0x003f); base[2] = 0x80 | static_cast(u & 0x003f); return QByteArray(base, 3); } else { /// Upstream issue: QChar can only hold Unicode characters up to 0xFFFF /* base[0] = 0xf0 | static_cast(u >> 18); base[1] = 0x80 | static_cast((u >> 12) & 0x003f); base[2] = 0x80 | static_cast((u >> 6) & 0x003f); base[3] = 0x80 | static_cast(u & 0x003f); return QByteArray(base, 4); */ return QByteArray(); } } #endif // BUILD_TESTING inline bool isAsciiLetter(const QChar c) { return (c.unicode() >= static_cast('A') && c.unicode() <= static_cast('Z')) || (c.unicode() >= static_cast('a') && c.unicode() <= static_cast('z')); } inline int asciiLetterOrDigitToPos(const QChar c) { static const ushort upperCaseLetterA = QLatin1Char('A').unicode(); static const ushort upperCaseLetterZ = QLatin1Char('Z').unicode(); static const ushort lowerCaseLetterA = QLatin1Char('a').unicode(); static const ushort lowerCaseLetterZ = QLatin1Char('z').unicode(); static const ushort digit0 = QLatin1Char('0').unicode(); static const ushort digit9 = QLatin1Char('9').unicode(); const ushort unicode = c.unicode(); if (unicode >= upperCaseLetterA && unicode <= upperCaseLetterZ) return unicode - upperCaseLetterA; else if (unicode >= lowerCaseLetterA && unicode <= lowerCaseLetterZ) return unicode + 26 - lowerCaseLetterA; else if (unicode >= digit0 && unicode <= digit9) return unicode + 52 - digit0; else return -1; } inline bool isIJ(const QChar c) { static const QChar upperCaseLetterI = QLatin1Char('I'); static const QChar upperCaseLetterJ = QLatin1Char('J'); static const QChar lowerCaseLetterI = QLatin1Char('i'); static const QChar lowerCaseLetterJ = QLatin1Char('j'); return c == upperCaseLetterI || c == upperCaseLetterJ || c == lowerCaseLetterI || c == lowerCaseLetterJ; } enum EncoderLaTeXCommandDirection { DirectionCommandToUnicode = 1, DirectionUnicodeToCommand = 2, DirectionBoth = DirectionCommandToUnicode | DirectionUnicodeToCommand }; /** * General documentation on this topic: * http://www.tex.ac.uk/CTAN/macros/latex/doc/encguide.pdf * https://mirror.hmc.edu/ctan/macros/xetex/latex/xecjk/xunicode-symbols.pdf * ftp://ftp.dante.de/tex-archive/biblio/biber/documentation/utf8-macro-map.html */ /** * This structure contains information how escaped characters * such as \"a are translated to an Unicode character and back. * The structure is a table with three columns: (1) the modifier * (in the example before the quotation mark) (2) the ASCII * character ((in the example before the 'a') (3) the Unicode * character described by a hexcode. * This data structure is used both directly and indirectly via * the LookupTable structure which is initialized when the * EncoderLaTeX object is created. */ static const struct EncoderLaTeXEscapedCharacter { const QChar modifier; const QChar letter; const ushort unicode; const EncoderLaTeXCommandDirection direction; } encoderLaTeXEscapedCharacters[] = { {QLatin1Char('`'), QLatin1Char('A'), 0x00C0, DirectionBoth}, {QLatin1Char('\''), QLatin1Char('A'), 0x00C1, DirectionBoth}, {QLatin1Char('^'), QLatin1Char('A'), 0x00C2, DirectionBoth}, {QLatin1Char('~'), QLatin1Char('A'), 0x00C3, DirectionBoth}, {QLatin1Char('"'), QLatin1Char('A'), 0x00C4, DirectionBoth}, {QLatin1Char('r'), QLatin1Char('A'), 0x00C5, DirectionBoth}, /** 0x00C6: see EncoderLaTeXCharacterCommand */ {QLatin1Char('c'), QLatin1Char('C'), 0x00C7, DirectionBoth}, {QLatin1Char('`'), QLatin1Char('E'), 0x00C8, DirectionBoth}, {QLatin1Char('\''), QLatin1Char('E'), 0x00C9, DirectionBoth}, {QLatin1Char('^'), QLatin1Char('E'), 0x00CA, DirectionBoth}, {QLatin1Char('"'), QLatin1Char('E'), 0x00CB, DirectionBoth}, {QLatin1Char('`'), QLatin1Char('I'), 0x00CC, DirectionBoth}, {QLatin1Char('\''), QLatin1Char('I'), 0x00CD, DirectionBoth}, {QLatin1Char('^'), QLatin1Char('I'), 0x00CE, DirectionBoth}, {QLatin1Char('"'), QLatin1Char('I'), 0x00CF, DirectionBoth}, /** 0x00D0: see EncoderLaTeXCharacterCommand */ {QLatin1Char('~'), QLatin1Char('N'), 0x00D1, DirectionBoth}, {QLatin1Char('`'), QLatin1Char('O'), 0x00D2, DirectionBoth}, {QLatin1Char('\''), QLatin1Char('O'), 0x00D3, DirectionBoth}, {QLatin1Char('^'), QLatin1Char('O'), 0x00D4, DirectionBoth}, {QLatin1Char('~'), QLatin1Char('O'), 0x00D5, DirectionBoth}, {QLatin1Char('"'), QLatin1Char('O'), 0x00D6, DirectionBoth}, /** 0x00D7: see EncoderLaTeXCharacterCommand */ /** 0x00D8: see EncoderLaTeXCharacterCommand */ {QLatin1Char('`'), QLatin1Char('U'), 0x00D9, DirectionBoth}, {QLatin1Char('\''), QLatin1Char('U'), 0x00DA, DirectionBoth}, {QLatin1Char('^'), QLatin1Char('U'), 0x00DB, DirectionBoth}, {QLatin1Char('"'), QLatin1Char('U'), 0x00DC, DirectionBoth}, {QLatin1Char('\''), QLatin1Char('Y'), 0x00DD, DirectionBoth}, /** 0x00DE: see EncoderLaTeXCharacterCommand */ {QLatin1Char('"'), QLatin1Char('s'), 0x00DF, DirectionBoth}, {QLatin1Char('`'), QLatin1Char('a'), 0x00E0, DirectionBoth}, {QLatin1Char('\''), QLatin1Char('a'), 0x00E1, DirectionBoth}, {QLatin1Char('^'), QLatin1Char('a'), 0x00E2, DirectionBoth}, {QLatin1Char('~'), QLatin1Char('a'), 0x00E3, DirectionBoth}, {QLatin1Char('"'), QLatin1Char('a'), 0x00E4, DirectionBoth}, {QLatin1Char('r'), QLatin1Char('a'), 0x00E5, DirectionBoth}, /** 0x00E6: see EncoderLaTeXCharacterCommand */ {QLatin1Char('c'), QLatin1Char('c'), 0x00E7, DirectionBoth}, {QLatin1Char('`'), QLatin1Char('e'), 0x00E8, DirectionBoth}, {QLatin1Char('\''), QLatin1Char('e'), 0x00E9, DirectionBoth}, {QLatin1Char('^'), QLatin1Char('e'), 0x00EA, DirectionBoth}, {QLatin1Char('"'), QLatin1Char('e'), 0x00EB, DirectionBoth}, {QLatin1Char('`'), QLatin1Char('i'), 0x00EC, DirectionBoth}, {QLatin1Char('\''), QLatin1Char('i'), 0x00ED, DirectionBoth}, {QLatin1Char('^'), QLatin1Char('i'), 0x00EE, DirectionBoth}, {QLatin1Char('"'), QLatin1Char('i'), 0x00EF, DirectionBoth}, /** 0x00F0: see EncoderLaTeXCharacterCommand */ {QLatin1Char('~'), QLatin1Char('n'), 0x00F1, DirectionBoth}, {QLatin1Char('`'), QLatin1Char('o'), 0x00F2, DirectionBoth}, {QLatin1Char('\''), QLatin1Char('o'), 0x00F3, DirectionBoth}, {QLatin1Char('^'), QLatin1Char('o'), 0x00F4, DirectionBoth}, {QLatin1Char('~'), QLatin1Char('o'), 0x00F5, DirectionBoth}, {QLatin1Char('"'), QLatin1Char('o'), 0x00F6, DirectionBoth}, /** 0x00F7: see EncoderLaTeXCharacterCommand */ /** 0x00F8: see EncoderLaTeXCharacterCommand */ {QLatin1Char('`'), QLatin1Char('u'), 0x00F9, DirectionBoth}, {QLatin1Char('\''), QLatin1Char('u'), 0x00FA, DirectionBoth}, {QLatin1Char('^'), QLatin1Char('u'), 0x00FB, DirectionBoth}, {QLatin1Char('"'), QLatin1Char('u'), 0x00FC, DirectionBoth}, {QLatin1Char('\''), QLatin1Char('y'), 0x00FD, DirectionBoth}, /** 0x00FE: see EncoderLaTeXCharacterCommand */ {QLatin1Char('"'), QLatin1Char('y'), 0x00FF, DirectionBoth}, {QLatin1Char('='), QLatin1Char('A'), 0x0100, DirectionBoth}, {QLatin1Char('='), QLatin1Char('a'), 0x0101, DirectionBoth}, {QLatin1Char('u'), QLatin1Char('A'), 0x0102, DirectionBoth}, {QLatin1Char('u'), QLatin1Char('a'), 0x0103, DirectionBoth}, {QLatin1Char('k'), QLatin1Char('A'), 0x0104, DirectionBoth}, {QLatin1Char('k'), QLatin1Char('a'), 0x0105, DirectionBoth}, {QLatin1Char('\''), QLatin1Char('C'), 0x0106, DirectionBoth}, {QLatin1Char('\''), QLatin1Char('c'), 0x0107, DirectionBoth}, {QLatin1Char('^'), QLatin1Char('C'), 0x0108, DirectionBoth}, {QLatin1Char('^'), QLatin1Char('c'), 0x0109, DirectionBoth}, {QLatin1Char('.'), QLatin1Char('C'), 0x010A, DirectionBoth}, {QLatin1Char('.'), QLatin1Char('c'), 0x010B, DirectionBoth}, {QLatin1Char('v'), QLatin1Char('C'), 0x010C, DirectionBoth}, {QLatin1Char('v'), QLatin1Char('c'), 0x010D, DirectionBoth}, {QLatin1Char('v'), QLatin1Char('D'), 0x010E, DirectionBoth}, {QLatin1Char('v'), QLatin1Char('d'), 0x010F, DirectionBoth}, {QLatin1Char('B'), QLatin1Char('D'), 0x0110, DirectionCommandToUnicode}, {QLatin1Char('B'), QLatin1Char('d'), 0x0111, DirectionCommandToUnicode}, {QLatin1Char('='), QLatin1Char('E'), 0x0112, DirectionBoth}, {QLatin1Char('='), QLatin1Char('e'), 0x0113, DirectionBoth}, {QLatin1Char('u'), QLatin1Char('E'), 0x0114, DirectionBoth}, {QLatin1Char('u'), QLatin1Char('e'), 0x0115, DirectionBoth}, {QLatin1Char('.'), QLatin1Char('E'), 0x0116, DirectionBoth}, {QLatin1Char('.'), QLatin1Char('e'), 0x0117, DirectionBoth}, {QLatin1Char('k'), QLatin1Char('E'), 0x0118, DirectionBoth}, {QLatin1Char('k'), QLatin1Char('e'), 0x0119, DirectionBoth}, {QLatin1Char('v'), QLatin1Char('E'), 0x011A, DirectionBoth}, {QLatin1Char('v'), QLatin1Char('e'), 0x011B, DirectionBoth}, {QLatin1Char('^'), QLatin1Char('G'), 0x011C, DirectionBoth}, {QLatin1Char('^'), QLatin1Char('g'), 0x011D, DirectionBoth}, {QLatin1Char('u'), QLatin1Char('G'), 0x011E, DirectionBoth}, {QLatin1Char('u'), QLatin1Char('g'), 0x011F, DirectionBoth}, {QLatin1Char('.'), QLatin1Char('G'), 0x0120, DirectionBoth}, {QLatin1Char('.'), QLatin1Char('g'), 0x0121, DirectionBoth}, {QLatin1Char('c'), QLatin1Char('G'), 0x0122, DirectionBoth}, {QLatin1Char('c'), QLatin1Char('g'), 0x0123, DirectionBoth}, {QLatin1Char('^'), QLatin1Char('H'), 0x0124, DirectionBoth}, {QLatin1Char('^'), QLatin1Char('h'), 0x0125, DirectionBoth}, {QLatin1Char('B'), QLatin1Char('H'), 0x0126, DirectionCommandToUnicode}, {QLatin1Char('B'), QLatin1Char('h'), 0x0127, DirectionCommandToUnicode}, {QLatin1Char('~'), QLatin1Char('I'), 0x0128, DirectionBoth}, {QLatin1Char('~'), QLatin1Char('i'), 0x0129, DirectionBoth}, {QLatin1Char('='), QLatin1Char('I'), 0x012A, DirectionBoth}, {QLatin1Char('='), QLatin1Char('i'), 0x012B, DirectionBoth}, {QLatin1Char('u'), QLatin1Char('I'), 0x012C, DirectionBoth}, {QLatin1Char('u'), QLatin1Char('i'), 0x012D, DirectionBoth}, {QLatin1Char('k'), QLatin1Char('I'), 0x012E, DirectionBoth}, {QLatin1Char('k'), QLatin1Char('i'), 0x012F, DirectionBoth}, {QLatin1Char('.'), QLatin1Char('I'), 0x0130, DirectionBoth}, /** 0x0131: see EncoderLaTeXCharacterCommand */ /** 0x0132: see EncoderLaTeXCharacterCommand */ /** 0x0133: see EncoderLaTeXCharacterCommand */ {QLatin1Char('^'), QLatin1Char('J'), 0x012E, DirectionBoth}, {QLatin1Char('^'), QLatin1Char('j'), 0x012F, DirectionBoth}, {QLatin1Char('c'), QLatin1Char('K'), 0x0136, DirectionBoth}, {QLatin1Char('c'), QLatin1Char('k'), 0x0137, DirectionBoth}, /** 0x0138: see EncoderLaTeXCharacterCommand */ {QLatin1Char('\''), QLatin1Char('L'), 0x0139, DirectionBoth}, {QLatin1Char('\''), QLatin1Char('l'), 0x013A, DirectionBoth}, {QLatin1Char('c'), QLatin1Char('L'), 0x013B, DirectionBoth}, {QLatin1Char('c'), QLatin1Char('l'), 0x013C, DirectionBoth}, {QLatin1Char('v'), QLatin1Char('L'), 0x013D, DirectionBoth}, {QLatin1Char('v'), QLatin1Char('l'), 0x013E, DirectionBoth}, {QLatin1Char('.'), QLatin1Char('L'), 0x013F, DirectionBoth}, {QLatin1Char('.'), QLatin1Char('l'), 0x0140, DirectionBoth}, {QLatin1Char('B'), QLatin1Char('L'), 0x0141, DirectionCommandToUnicode}, {QLatin1Char('B'), QLatin1Char('l'), 0x0142, DirectionCommandToUnicode}, {QLatin1Char('\''), QLatin1Char('N'), 0x0143, DirectionBoth}, {QLatin1Char('\''), QLatin1Char('n'), 0x0144, DirectionBoth}, {QLatin1Char('c'), QLatin1Char('n'), 0x0145, DirectionBoth}, {QLatin1Char('c'), QLatin1Char('n'), 0x0146, DirectionBoth}, {QLatin1Char('v'), QLatin1Char('N'), 0x0147, DirectionBoth}, {QLatin1Char('v'), QLatin1Char('n'), 0x0148, DirectionBoth}, /** 0x0149: TODO n preceded by apostrophe */ {QLatin1Char('m'), QLatin1Char('N'), 0x014A, DirectionCommandToUnicode}, {QLatin1Char('m'), QLatin1Char('n'), 0x014B, DirectionCommandToUnicode}, {QLatin1Char('='), QLatin1Char('O'), 0x014C, DirectionBoth}, {QLatin1Char('='), QLatin1Char('o'), 0x014D, DirectionBoth}, {QLatin1Char('u'), QLatin1Char('O'), 0x014E, DirectionBoth}, {QLatin1Char('u'), QLatin1Char('o'), 0x014F, DirectionBoth}, {QLatin1Char('H'), QLatin1Char('O'), 0x0150, DirectionBoth}, {QLatin1Char('H'), QLatin1Char('o'), 0x0151, DirectionBoth}, /** 0x0152: see EncoderLaTeXCharacterCommand */ /** 0x0153: see EncoderLaTeXCharacterCommand */ {QLatin1Char('\''), QLatin1Char('R'), 0x0154, DirectionBoth}, {QLatin1Char('\''), QLatin1Char('r'), 0x0155, DirectionBoth}, {QLatin1Char('c'), QLatin1Char('R'), 0x0156, DirectionBoth}, {QLatin1Char('c'), QLatin1Char('r'), 0x0157, DirectionBoth}, {QLatin1Char('v'), QLatin1Char('R'), 0x0158, DirectionBoth}, {QLatin1Char('v'), QLatin1Char('r'), 0x0159, DirectionBoth}, {QLatin1Char('\''), QLatin1Char('S'), 0x015A, DirectionBoth}, {QLatin1Char('\''), QLatin1Char('s'), 0x015B, DirectionBoth}, {QLatin1Char('^'), QLatin1Char('S'), 0x015C, DirectionBoth}, {QLatin1Char('^'), QLatin1Char('s'), 0x015D, DirectionBoth}, {QLatin1Char('c'), QLatin1Char('S'), 0x015E, DirectionBoth}, {QLatin1Char('c'), QLatin1Char('s'), 0x015F, DirectionBoth}, {QLatin1Char('v'), QLatin1Char('S'), 0x0160, DirectionBoth}, {QLatin1Char('v'), QLatin1Char('s'), 0x0161, DirectionBoth}, {QLatin1Char('c'), QLatin1Char('T'), 0x0162, DirectionBoth}, {QLatin1Char('c'), QLatin1Char('t'), 0x0163, DirectionBoth}, {QLatin1Char('v'), QLatin1Char('T'), 0x0164, DirectionBoth}, {QLatin1Char('v'), QLatin1Char('t'), 0x0165, DirectionBoth}, {QLatin1Char('B'), QLatin1Char('T'), 0x0166, DirectionCommandToUnicode}, {QLatin1Char('B'), QLatin1Char('t'), 0x0167, DirectionCommandToUnicode}, {QLatin1Char('~'), QLatin1Char('U'), 0x0168, DirectionBoth}, {QLatin1Char('~'), QLatin1Char('u'), 0x0169, DirectionBoth}, {QLatin1Char('='), QLatin1Char('U'), 0x016A, DirectionBoth}, {QLatin1Char('='), QLatin1Char('u'), 0x016B, DirectionBoth}, {QLatin1Char('u'), QLatin1Char('U'), 0x016C, DirectionBoth}, {QLatin1Char('u'), QLatin1Char('u'), 0x016D, DirectionBoth}, {QLatin1Char('r'), QLatin1Char('U'), 0x016E, DirectionBoth}, {QLatin1Char('r'), QLatin1Char('u'), 0x016F, DirectionBoth}, {QLatin1Char('H'), QLatin1Char('U'), 0x0170, DirectionBoth}, {QLatin1Char('H'), QLatin1Char('u'), 0x0171, DirectionBoth}, {QLatin1Char('k'), QLatin1Char('U'), 0x0172, DirectionBoth}, {QLatin1Char('k'), QLatin1Char('u'), 0x0173, DirectionBoth}, {QLatin1Char('^'), QLatin1Char('W'), 0x0174, DirectionBoth}, {QLatin1Char('^'), QLatin1Char('w'), 0x0175, DirectionBoth}, {QLatin1Char('^'), QLatin1Char('Y'), 0x0176, DirectionBoth}, {QLatin1Char('^'), QLatin1Char('y'), 0x0177, DirectionBoth}, {QLatin1Char('"'), QLatin1Char('Y'), 0x0178, DirectionBoth}, {QLatin1Char('\''), QLatin1Char('Z'), 0x0179, DirectionBoth}, {QLatin1Char('\''), QLatin1Char('z'), 0x017A, DirectionBoth}, {QLatin1Char('.'), QLatin1Char('Z'), 0x017B, DirectionBoth}, {QLatin1Char('.'), QLatin1Char('z'), 0x017C, DirectionBoth}, {QLatin1Char('v'), QLatin1Char('Z'), 0x017D, DirectionBoth}, {QLatin1Char('v'), QLatin1Char('z'), 0x017E, DirectionBoth}, /** 0x017F: TODO long s */ {QLatin1Char('B'), QLatin1Char('b'), 0x0180, DirectionCommandToUnicode}, {QLatin1Char('m'), QLatin1Char('B'), 0x0181, DirectionCommandToUnicode}, /** 0x0182 */ /** 0x0183 */ /** 0x0184 */ /** 0x0185 */ {QLatin1Char('m'), QLatin1Char('O'), 0x0186, DirectionCommandToUnicode}, {QLatin1Char('m'), QLatin1Char('C'), 0x0187, DirectionCommandToUnicode}, {QLatin1Char('m'), QLatin1Char('c'), 0x0188, DirectionCommandToUnicode}, {QLatin1Char('M'), QLatin1Char('D'), 0x0189, DirectionCommandToUnicode}, {QLatin1Char('m'), QLatin1Char('D'), 0x018A, DirectionCommandToUnicode}, /** 0x018B */ /** 0x018C */ /** 0x018D */ {QLatin1Char('M'), QLatin1Char('E'), 0x018E, DirectionCommandToUnicode}, /** 0x018F */ {QLatin1Char('m'), QLatin1Char('E'), 0x0190, DirectionCommandToUnicode}, {QLatin1Char('m'), QLatin1Char('F'), 0x0191, DirectionCommandToUnicode}, {QLatin1Char('m'), QLatin1Char('f'), 0x0192, DirectionCommandToUnicode}, /** 0x0193 */ {QLatin1Char('m'), QLatin1Char('G'), 0x0194, DirectionCommandToUnicode}, /** 0x0195: see EncoderLaTeXCharacterCommand */ {QLatin1Char('m'), QLatin1Char('I'), 0x0196, DirectionCommandToUnicode}, {QLatin1Char('B'), QLatin1Char('I'), 0x0197, DirectionCommandToUnicode}, {QLatin1Char('m'), QLatin1Char('K'), 0x0198, DirectionCommandToUnicode}, {QLatin1Char('m'), QLatin1Char('k'), 0x0199, DirectionCommandToUnicode}, {QLatin1Char('B'), QLatin1Char('l'), 0x019A, DirectionCommandToUnicode}, /** 0x019B */ /** 0x019C */ {QLatin1Char('m'), QLatin1Char('J'), 0x019D, DirectionCommandToUnicode}, /** 0x019E */ /** 0x019F */ /** 0x01A0 */ /** 0x01A1 */ /** 0x01A2 */ /** 0x01A3 */ {QLatin1Char('m'), QLatin1Char('P'), 0x01A4, DirectionCommandToUnicode}, {QLatin1Char('m'), QLatin1Char('p'), 0x01A5, DirectionCommandToUnicode}, /** 0x01A6 */ /** 0x01A7 */ /** 0x01A8 */ /** 0x01A9: see EncoderLaTeXCharacterCommand */ /** 0x01AA */ /** 0x01AB */ {QLatin1Char('m'), QLatin1Char('T'), 0x01AC, DirectionCommandToUnicode}, {QLatin1Char('m'), QLatin1Char('t'), 0x01AD, DirectionCommandToUnicode}, {QLatin1Char('M'), QLatin1Char('T'), 0x01AE, DirectionCommandToUnicode}, /** 0x01AF */ /** 0x01B0 */ {QLatin1Char('m'), QLatin1Char('U'), 0x01B1, DirectionCommandToUnicode}, {QLatin1Char('m'), QLatin1Char('V'), 0x01B2, DirectionCommandToUnicode}, {QLatin1Char('m'), QLatin1Char('Y'), 0x01B3, DirectionCommandToUnicode}, {QLatin1Char('m'), QLatin1Char('y'), 0x01B4, DirectionCommandToUnicode}, {QLatin1Char('B'), QLatin1Char('Z'), 0x01B5, DirectionCommandToUnicode}, {QLatin1Char('B'), QLatin1Char('z'), 0x01B6, DirectionCommandToUnicode}, {QLatin1Char('m'), QLatin1Char('Z'), 0x01B7, DirectionCommandToUnicode}, /** 0x01B8 */ /** 0x01B9 */ /** 0x01BA */ {QLatin1Char('B'), QLatin1Char('2'), 0x01BB, DirectionCommandToUnicode}, /** 0x01BC */ /** 0x01BD */ /** 0x01BE */ /** 0x01BF */ /** 0x01C0 */ /** 0x01C1 */ /** 0x01C2 */ /** 0x01C3 */ /** 0x01C4 */ /** 0x01C5 */ /** 0x01C6 */ /** 0x01C7 */ /** 0x01C8 */ /** 0x01C9 */ /** 0x01CA */ /** 0x01CB */ /** 0x01CC */ {QLatin1Char('v'), QLatin1Char('A'), 0x01CD, DirectionBoth}, {QLatin1Char('v'), QLatin1Char('a'), 0x01CE, DirectionBoth}, {QLatin1Char('v'), QLatin1Char('G'), 0x01E6, DirectionBoth}, {QLatin1Char('v'), QLatin1Char('g'), 0x01E7, DirectionBoth}, {QLatin1Char('k'), QLatin1Char('O'), 0x01EA, DirectionBoth}, {QLatin1Char('k'), QLatin1Char('o'), 0x01EB, DirectionBoth}, {QLatin1Char('\''), QLatin1Char('F'), 0x01F4, DirectionBoth}, {QLatin1Char('\''), QLatin1Char('f'), 0x01F5, DirectionBoth}, {QLatin1Char('.'), QLatin1Char('A'), 0x0226, DirectionBoth}, {QLatin1Char('.'), QLatin1Char('a'), 0x0227, DirectionBoth}, {QLatin1Char('c'), QLatin1Char('E'), 0x0228, DirectionBoth}, {QLatin1Char('c'), QLatin1Char('e'), 0x0229, DirectionBoth}, {QLatin1Char('='), QLatin1Char('Y'), 0x0232, DirectionBoth}, {QLatin1Char('='), QLatin1Char('y'), 0x0233, DirectionBoth}, {QLatin1Char('.'), QLatin1Char('O'), 0x022E, DirectionBoth}, {QLatin1Char('.'), QLatin1Char('o'), 0x022F, DirectionBoth}, {QLatin1Char('.'), QLatin1Char('B'), 0x1E02, DirectionBoth}, {QLatin1Char('.'), QLatin1Char('b'), 0x1E03, DirectionBoth}, {QLatin1Char('d'), QLatin1Char('B'), 0x1E04, DirectionBoth}, {QLatin1Char('d'), QLatin1Char('b'), 0x1E05, DirectionBoth}, {QLatin1Char('.'), QLatin1Char('D'), 0x1E0A, DirectionBoth}, {QLatin1Char('.'), QLatin1Char('d'), 0x1E0B, DirectionBoth}, {QLatin1Char('d'), QLatin1Char('D'), 0x1E0C, DirectionBoth}, {QLatin1Char('d'), QLatin1Char('d'), 0x1E0D, DirectionBoth}, {QLatin1Char('c'), QLatin1Char('D'), 0x1E10, DirectionBoth}, {QLatin1Char('c'), QLatin1Char('d'), 0x1E11, DirectionBoth}, {QLatin1Char('.'), QLatin1Char('E'), 0x1E1E, DirectionBoth}, {QLatin1Char('.'), QLatin1Char('e'), 0x1E1F, DirectionBoth}, {QLatin1Char('.'), QLatin1Char('H'), 0x1E22, DirectionBoth}, {QLatin1Char('.'), QLatin1Char('h'), 0x1E23, DirectionBoth}, {QLatin1Char('d'), QLatin1Char('H'), 0x1E24, DirectionBoth}, {QLatin1Char('d'), QLatin1Char('h'), 0x1E25, DirectionBoth}, {QLatin1Char('"'), QLatin1Char('H'), 0x1E26, DirectionBoth}, {QLatin1Char('"'), QLatin1Char('h'), 0x1E27, DirectionBoth}, {QLatin1Char('c'), QLatin1Char('H'), 0x1E28, DirectionBoth}, {QLatin1Char('c'), QLatin1Char('h'), 0x1E29, DirectionBoth}, {QLatin1Char('d'), QLatin1Char('K'), 0x1E32, DirectionBoth}, {QLatin1Char('d'), QLatin1Char('k'), 0x1E33, DirectionBoth}, {QLatin1Char('d'), QLatin1Char('L'), 0x1E36, DirectionBoth}, {QLatin1Char('d'), QLatin1Char('l'), 0x1E37, DirectionBoth}, {QLatin1Char('.'), QLatin1Char('M'), 0x1E40, DirectionBoth}, {QLatin1Char('.'), QLatin1Char('m'), 0x1E41, DirectionBoth}, {QLatin1Char('d'), QLatin1Char('M'), 0x1E42, DirectionBoth}, {QLatin1Char('d'), QLatin1Char('m'), 0x1E43, DirectionBoth}, {QLatin1Char('.'), QLatin1Char('N'), 0x1E44, DirectionBoth}, {QLatin1Char('.'), QLatin1Char('n'), 0x1E45, DirectionBoth}, {QLatin1Char('.'), QLatin1Char('N'), 0x1E46, DirectionBoth}, {QLatin1Char('.'), QLatin1Char('n'), 0x1E47, DirectionBoth}, {QLatin1Char('.'), QLatin1Char('P'), 0x1E56, DirectionBoth}, {QLatin1Char('.'), QLatin1Char('p'), 0x1E57, DirectionBoth}, {QLatin1Char('.'), QLatin1Char('R'), 0x1E58, DirectionBoth}, {QLatin1Char('.'), QLatin1Char('r'), 0x1E59, DirectionBoth}, {QLatin1Char('d'), QLatin1Char('R'), 0x1E5A, DirectionBoth}, {QLatin1Char('d'), QLatin1Char('r'), 0x1E5B, DirectionBoth}, {QLatin1Char('.'), QLatin1Char('S'), 0x1E60, DirectionBoth}, {QLatin1Char('.'), QLatin1Char('s'), 0x1E61, DirectionBoth}, {QLatin1Char('d'), QLatin1Char('S'), 0x1E62, DirectionBoth}, {QLatin1Char('d'), QLatin1Char('s'), 0x1E63, DirectionBoth}, {QLatin1Char('.'), QLatin1Char('T'), 0x1E6A, DirectionBoth}, {QLatin1Char('.'), QLatin1Char('t'), 0x1E6B, DirectionBoth}, {QLatin1Char('d'), QLatin1Char('T'), 0x1E6C, DirectionBoth}, {QLatin1Char('d'), QLatin1Char('t'), 0x1E6D, DirectionBoth}, {QLatin1Char('d'), QLatin1Char('V'), 0x1E7E, DirectionBoth}, {QLatin1Char('d'), QLatin1Char('v'), 0x1E7F, DirectionBoth}, {QLatin1Char('`'), QLatin1Char('W'), 0x1E80, DirectionBoth}, {QLatin1Char('`'), QLatin1Char('w'), 0x1E81, DirectionBoth}, {QLatin1Char('\''), QLatin1Char('W'), 0x1E82, DirectionBoth}, {QLatin1Char('\''), QLatin1Char('w'), 0x1E83, DirectionBoth}, {QLatin1Char('"'), QLatin1Char('W'), 0x1E84, DirectionBoth}, {QLatin1Char('"'), QLatin1Char('w'), 0x1E85, DirectionBoth}, {QLatin1Char('.'), QLatin1Char('W'), 0x1E86, DirectionBoth}, {QLatin1Char('.'), QLatin1Char('w'), 0x1E87, DirectionBoth}, {QLatin1Char('d'), QLatin1Char('W'), 0x1E88, DirectionBoth}, {QLatin1Char('d'), QLatin1Char('w'), 0x1E88, DirectionBoth}, {QLatin1Char('.'), QLatin1Char('X'), 0x1E8A, DirectionBoth}, {QLatin1Char('.'), QLatin1Char('x'), 0x1E8B, DirectionBoth}, {QLatin1Char('"'), QLatin1Char('X'), 0x1E8C, DirectionBoth}, {QLatin1Char('"'), QLatin1Char('x'), 0x1E8D, DirectionBoth}, {QLatin1Char('.'), QLatin1Char('Y'), 0x1E8E, DirectionBoth}, {QLatin1Char('.'), QLatin1Char('y'), 0x1E8F, DirectionBoth}, {QLatin1Char('d'), QLatin1Char('Z'), 0x1E92, DirectionBoth}, {QLatin1Char('d'), QLatin1Char('z'), 0x1E93, DirectionBoth}, {QLatin1Char('"'), QLatin1Char('t'), 0x1E97, DirectionBoth}, {QLatin1Char('r'), QLatin1Char('w'), 0x1E98, DirectionBoth}, {QLatin1Char('r'), QLatin1Char('y'), 0x1E99, DirectionBoth}, {QLatin1Char('d'), QLatin1Char('A'), 0x1EA0, DirectionBoth}, {QLatin1Char('d'), QLatin1Char('a'), 0x1EA1, DirectionBoth}, {QLatin1Char('d'), QLatin1Char('E'), 0x1EB8, DirectionBoth}, {QLatin1Char('d'), QLatin1Char('e'), 0x1EB9, DirectionBoth}, {QLatin1Char('d'), QLatin1Char('I'), 0x1ECA, DirectionBoth}, {QLatin1Char('d'), QLatin1Char('i'), 0x1ECB, DirectionBoth}, {QLatin1Char('d'), QLatin1Char('O'), 0x1ECC, DirectionBoth}, {QLatin1Char('d'), QLatin1Char('o'), 0x1ECD, DirectionBoth}, {QLatin1Char('d'), QLatin1Char('U'), 0x1EE4, DirectionBoth}, {QLatin1Char('d'), QLatin1Char('u'), 0x1EE5, DirectionBoth}, {QLatin1Char('`'), QLatin1Char('Y'), 0x1EF2, DirectionBoth}, {QLatin1Char('`'), QLatin1Char('y'), 0x1EF3, DirectionBoth}, {QLatin1Char('d'), QLatin1Char('Y'), 0x1EF4, DirectionBoth}, {QLatin1Char('d'), QLatin1Char('y'), 0x1EF5, DirectionBoth}, {QLatin1Char('r'), QLatin1Char('q'), 0x2019, DirectionCommandToUnicode} ///< tricky: this is \rq }; /** * This structure contains information on the usage of dotless i * and dotless j in combination with accent-like modifiers. * Combinations such as \"{\i} are translated to an Unicode character * and back. The structure is a table with three columns: (1) the * modified (in the example before the quotation mark) (2) the ASCII * character (in the example before the 'i') (3) the Unicode * character described by a hexcode. */ // TODO other cases of \i and \j? static const struct DotlessIJCharacter { const QChar modifier; const QChar letter; const ushort unicode; const EncoderLaTeXCommandDirection direction; } dotlessIJCharacters[] = { {QLatin1Char('`'), QLatin1Char('i'), 0x00EC, DirectionBoth}, {QLatin1Char('\''), QLatin1Char('i'), 0x00ED, DirectionBoth}, {QLatin1Char('^'), QLatin1Char('i'), 0x00EE, DirectionBoth}, {QLatin1Char('"'), QLatin1Char('i'), 0x00EF, DirectionBoth}, {QLatin1Char('~'), QLatin1Char('i'), 0x0129, DirectionBoth}, {QLatin1Char('='), QLatin1Char('i'), 0x012B, DirectionBoth}, {QLatin1Char('u'), QLatin1Char('i'), 0x012D, DirectionBoth}, {QLatin1Char('k'), QLatin1Char('i'), 0x012F, DirectionBoth}, {QLatin1Char('^'), QLatin1Char('j'), 0x0135, DirectionBoth}, {QLatin1Char('v'), QLatin1Char('i'), 0x01D0, DirectionBoth}, {QLatin1Char('v'), QLatin1Char('j'), 0x01F0, DirectionBoth}, {QLatin1Char('G'), QLatin1Char('i'), 0x0209, DirectionCommandToUnicode} }; /** * This lookup allows to quickly find hits in the * EncoderLaTeXEscapedCharacter table. This data structure here * consists of a number of rows. Each row consists of a * modifier (like '"' or 'v') and an array of Unicode chars. * Letters 'A'..'Z','a'..'z','0'..'9' are used as index to this * array by invocing asciiLetterOrDigitToPos(). * This data structure is built in the constructor. */ static const int lookupTableNumModifiers = 32; static const int lookupTableNumCharacters = 26 * 2 + 10; static struct EncoderLaTeXEscapedCharacterLookupTableRow { QChar modifier; QChar unicode[lookupTableNumCharacters]; } *lookupTable[lookupTableNumModifiers]; /** * This data structure keeps track of math commands, which * have to be treated differently in text and math mode. * The math command like "subset of" could be used directly * in math mode, but must be enclosed in \ensuremath{...} * in text mode. */ static const struct MathCommand { const QString command; const ushort unicode; const EncoderLaTeXCommandDirection direction; } mathCommands[] = { {QStringLiteral("pm"), 0x00B1, DirectionBoth}, {QStringLiteral("times"), 0x00D7, DirectionBoth}, {QStringLiteral("div"), 0x00F7, DirectionBoth}, {QStringLiteral("phi"), 0x0278, DirectionBoth}, ///< see also 0x03C6 (GREEK SMALL LETTER PHI) {QStringLiteral("Alpha"), 0x0391, DirectionBoth}, {QStringLiteral("Beta"), 0x0392, DirectionBoth}, {QStringLiteral("Gamma"), 0x0393, DirectionBoth}, {QStringLiteral("Delta"), 0x0394, DirectionBoth}, {QStringLiteral("Epsilon"), 0x0395, DirectionBoth}, {QStringLiteral("Zeta"), 0x0396, DirectionBoth}, {QStringLiteral("Eta"), 0x0397, DirectionBoth}, {QStringLiteral("Theta"), 0x0398, DirectionBoth}, {QStringLiteral("Iota"), 0x0399, DirectionBoth}, {QStringLiteral("Kappa"), 0x039A, DirectionBoth}, {QStringLiteral("Lamda"), 0x039B, DirectionCommandToUnicode}, ///< \Lamda does not exist, this is mostly for spelling errors {QStringLiteral("Lambda"), 0x039B, DirectionBoth}, {QStringLiteral("Mu"), 0x039C, DirectionBoth}, {QStringLiteral("Nu"), 0x039D, DirectionBoth}, {QStringLiteral("Xi"), 0x039E, DirectionBoth}, {QStringLiteral("Omicron"), 0x039F, DirectionBoth}, {QStringLiteral("Pi"), 0x03A0, DirectionBoth}, {QStringLiteral("Rho"), 0x03A1, DirectionBoth}, {QStringLiteral("Sigma"), 0x03A3, DirectionBoth}, {QStringLiteral("Tau"), 0x03A4, DirectionBoth}, {QStringLiteral("Upsilon"), 0x03A5, DirectionBoth}, {QStringLiteral("Phi"), 0x03A6, DirectionBoth}, {QStringLiteral("Chi"), 0x03A7, DirectionBoth}, {QStringLiteral("Psi"), 0x03A8, DirectionBoth}, {QStringLiteral("Omega"), 0x03A9, DirectionBoth}, {QStringLiteral("alpha"), 0x03B1, DirectionBoth}, {QStringLiteral("beta"), 0x03B2, DirectionBoth}, {QStringLiteral("gamma"), 0x03B3, DirectionBoth}, {QStringLiteral("delta"), 0x03B4, DirectionBoth}, {QStringLiteral("varepsilon"), 0x03B5, DirectionBoth}, {QStringLiteral("zeta"), 0x03B6, DirectionBoth}, {QStringLiteral("eta"), 0x03B7, DirectionBoth}, {QStringLiteral("theta"), 0x03B8, DirectionBoth}, {QStringLiteral("iota"), 0x03B9, DirectionBoth}, {QStringLiteral("kappa"), 0x03BA, DirectionBoth}, {QStringLiteral("lamda"), 0x03BB, DirectionBoth}, ///< \lamda does not exist, this is mostly for spelling errors {QStringLiteral("lambda"), 0x03BB, DirectionBoth}, {QStringLiteral("mu"), 0x03BC, DirectionBoth}, {QStringLiteral("nu"), 0x03BD, DirectionBoth}, {QStringLiteral("xi"), 0x03BE, DirectionBoth}, {QStringLiteral("omicron"), 0x03BF, DirectionBoth}, {QStringLiteral("pi"), 0x03C0, DirectionBoth}, {QStringLiteral("rho"), 0x03C1, DirectionBoth}, {QStringLiteral("varsigma"), 0x03C2, DirectionBoth}, {QStringLiteral("sigma"), 0x03C3, DirectionBoth}, {QStringLiteral("tau"), 0x03C4, DirectionBoth}, {QStringLiteral("upsilon"), 0x03C5, DirectionBoth}, {QStringLiteral("varphi"), 0x03C6, DirectionBoth}, ///< see also 0x0278 (LATIN SMALL LETTER PHI) {QStringLiteral("chi"), 0x03C7, DirectionBoth}, {QStringLiteral("psi"), 0x03C8, DirectionBoth}, {QStringLiteral("omega"), 0x03C9, DirectionBoth}, {QStringLiteral("vartheta"), 0x03D1, DirectionBoth}, {QStringLiteral("varpi"), 0x03D6, DirectionBoth}, {QStringLiteral("digamma"), 0x03DC, DirectionBoth}, {QStringLiteral("varkappa"), 0x03F0, DirectionBoth}, {QStringLiteral("varrho"), 0x03F1, DirectionBoth}, {QStringLiteral("epsilon"), 0x03F5, DirectionBoth}, {QStringLiteral("backepsilon"), 0x03F6, DirectionBoth}, {QStringLiteral("aleph"), 0x05D0, DirectionBoth}, {QStringLiteral("dagger"), 0x2020, DirectionBoth}, {QStringLiteral("ddagger"), 0x2021, DirectionBoth}, {QStringLiteral("mathbb{C}"), 0x2102, DirectionBoth}, {QStringLiteral("ell"), 0x2113, DirectionBoth}, {QStringLiteral("mho"), 0x2127, DirectionBoth}, {QStringLiteral("beth"), 0x2136, DirectionBoth}, {QStringLiteral("gimel"), 0x2137, DirectionBoth}, {QStringLiteral("daleth"), 0x2138, DirectionBoth}, {QStringLiteral("rightarrow"), 0x2192, DirectionBoth}, {QStringLiteral("forall"), 0x2200, DirectionBoth}, {QStringLiteral("complement"), 0x2201, DirectionBoth}, {QStringLiteral("partial"), 0x2202, DirectionBoth}, {QStringLiteral("exists"), 0x2203, DirectionBoth}, {QStringLiteral("nexists"), 0x2204, DirectionBoth}, {QStringLiteral("varnothing"), 0x2205, DirectionBoth}, {QStringLiteral("nabla"), 0x2207, DirectionBoth}, {QStringLiteral("in"), 0x2208, DirectionBoth}, {QStringLiteral("notin"), 0x2209, DirectionBoth}, {QStringLiteral("ni"), 0x220B, DirectionBoth}, {QStringLiteral("not\\ni"), 0x220C, DirectionBoth}, {QStringLiteral("asterisk"), 0x2217, DirectionCommandToUnicode}, {QStringLiteral("infty"), 0x221E, DirectionBoth}, {QStringLiteral("leq"), 0x2264, DirectionBoth}, {QStringLiteral("geq"), 0x2265, DirectionBoth}, {QStringLiteral("lneq"), 0x2268, DirectionBoth}, {QStringLiteral("gneq"), 0x2269, DirectionBoth}, {QStringLiteral("ll"), 0x226A, DirectionBoth}, {QStringLiteral("gg"), 0x226B, DirectionBoth}, {QStringLiteral("nless"), 0x226E, DirectionBoth}, {QStringLiteral("ngtr"), 0x226F, DirectionBoth}, {QStringLiteral("nleq"), 0x2270, DirectionBoth}, {QStringLiteral("ngeq"), 0x2271, DirectionBoth}, {QStringLiteral("subset"), 0x2282, DirectionBoth}, {QStringLiteral("supset"), 0x2283, DirectionBoth}, {QStringLiteral("subseteq"), 0x2286, DirectionBoth}, {QStringLiteral("supseteq"), 0x2287, DirectionBoth}, {QStringLiteral("nsubseteq"), 0x2288, DirectionBoth}, {QStringLiteral("nsupseteq"), 0x2289, DirectionBoth}, {QStringLiteral("subsetneq"), 0x228A, DirectionBoth}, {QStringLiteral("supsetneq"), 0x228A, DirectionBoth}, {QStringLiteral("Subset"), 0x22D0, DirectionBoth}, {QStringLiteral("Supset"), 0x22D1, DirectionBoth}, {QStringLiteral("lll"), 0x22D8, DirectionBoth}, {QStringLiteral("ggg"), 0x22D9, DirectionBoth}, {QStringLiteral("top"), 0x22A4, DirectionBoth}, {QStringLiteral("bot"), 0x22A5, DirectionBoth}, }; /** * This data structure holds commands representing a single * character. For example, it maps \AA to A with a ring (Nordic * letter) and back. The structure is a table with two columns: * (1) the command's name without a backslash (in the example * before the 'AA') (2) the Unicode character described by a * hexcode. */ static const struct EncoderLaTeXCharacterCommand { const QString command; const ushort unicode; const EncoderLaTeXCommandDirection direction; } encoderLaTeXCharacterCommands[] = { {QStringLiteral("textexclamdown"), 0x00A1, DirectionCommandToUnicode}, {QStringLiteral("textcent"), 0x00A2, DirectionBoth}, {QStringLiteral("pounds"), 0x00A3, DirectionBoth}, {QStringLiteral("textsterling"), 0x00A3, DirectionBoth}, /** 0x00A4 */ {QStringLiteral("textyen"), 0x00A5, DirectionBoth}, {QStringLiteral("textbrokenbar"), 0x00A6, DirectionBoth}, {QStringLiteral("S"), 0x00A7, DirectionBoth}, {QStringLiteral("textsection"), 0x00A7, DirectionBoth}, /** 0x00A8 */ {QStringLiteral("copyright"), 0x00A9, DirectionBoth}, {QStringLiteral("textcopyright"), 0x00A9, DirectionBoth}, {QStringLiteral("textordfeminine"), 0x00AA, DirectionBoth}, {QStringLiteral("guillemotleft"), 0x00AB, DirectionCommandToUnicode}, {QStringLiteral("textflqq"), 0x00AB, DirectionCommandToUnicode}, {QStringLiteral("flqq"), 0x00AB, DirectionBoth}, /** 0x00AC */ /** 0x00AD */ {QStringLiteral("textregistered"), 0x00AE, DirectionBoth}, /** 0x00AF */ {QStringLiteral("textdegree"), 0x00B0, DirectionBoth}, {QStringLiteral("textpm"), 0x00B1, DirectionBoth}, {QStringLiteral("textplusminus"), 0x00B1, DirectionCommandToUnicode}, /** 0x00B2 */ /** 0x00B3 */ /** 0x00B4 */ {QStringLiteral("textmu"), 0x00B5, DirectionBoth}, {QStringLiteral("textparagraph"), 0x00B6, DirectionBoth}, {QStringLiteral("textpilcrow"), 0x00B6, DirectionBoth}, {QStringLiteral("textperiodcentered"), 0x00B7, DirectionCommandToUnicode}, {QStringLiteral("textcdot"), 0x00B7, DirectionBoth}, {QStringLiteral("textcentereddot"), 0x00B7, DirectionCommandToUnicode}, /** 0x00B8 */ /** 0x00B9 */ {QStringLiteral("textordmasculine"), 0x00BA, DirectionBoth}, {QStringLiteral("guillemotright"), 0x00BB, DirectionCommandToUnicode}, {QStringLiteral("textfrqq"), 0x00BB, DirectionCommandToUnicode}, {QStringLiteral("frqq"), 0x00BB, DirectionBoth}, {QStringLiteral("textonequarter"), 0x00BC, DirectionBoth}, {QStringLiteral("textonehalf"), 0x00BD, DirectionBoth}, {QStringLiteral("textthreequarters"), 0x00BE, DirectionBoth}, {QStringLiteral("textquestiondown"), 0x00BF, DirectionCommandToUnicode}, // TODO /// recommended to write ?` instead of \textquestiondown {QStringLiteral("AA"), 0x00C5, DirectionBoth}, {QStringLiteral("AE"), 0x00C6, DirectionBoth}, {QStringLiteral("DH"), 0x00D0, DirectionBoth}, {QStringLiteral("texttimes"), 0x00D7, DirectionBoth}, {QStringLiteral("textmultiply"), 0x00D7, DirectionCommandToUnicode}, {QStringLiteral("O"), 0x00D8, DirectionBoth}, {QStringLiteral("TH"), 0x00DE, DirectionBoth}, {QStringLiteral("Thorn"), 0x00DE, DirectionCommandToUnicode}, {QStringLiteral("textThorn"), 0x00DE, DirectionCommandToUnicode}, {QStringLiteral("ss"), 0x00DF, DirectionBoth}, {QStringLiteral("aa"), 0x00E5, DirectionBoth}, {QStringLiteral("ae"), 0x00E6, DirectionBoth}, {QStringLiteral("dh"), 0x00F0, DirectionBoth}, {QStringLiteral("textdiv"), 0x00F7, DirectionBoth}, {QStringLiteral("textdivide"), 0x00F7, DirectionCommandToUnicode}, {QStringLiteral("o"), 0x00F8, DirectionBoth}, {QStringLiteral("th"), 0x00FE, DirectionBoth}, {QStringLiteral("textthorn"), 0x00FE, DirectionCommandToUnicode}, {QStringLiteral("textthornvari"), 0x00FE, DirectionCommandToUnicode}, {QStringLiteral("textthornvarii"), 0x00FE, DirectionCommandToUnicode}, {QStringLiteral("textthornvariii"), 0x00FE, DirectionCommandToUnicode}, {QStringLiteral("textthornvariv"), 0x00FE, DirectionCommandToUnicode}, {QStringLiteral("Aogonek"), 0x0104, DirectionCommandToUnicode}, {QStringLiteral("aogonek"), 0x0105, DirectionCommandToUnicode}, {QStringLiteral("DJ"), 0x0110, DirectionBoth}, {QStringLiteral("dj"), 0x0111, DirectionBoth}, {QStringLiteral("textcrd"), 0x0111, DirectionCommandToUnicode}, {QStringLiteral("textHslash"), 0x0126, DirectionCommandToUnicode}, {QStringLiteral("textHbar"), 0x0126, DirectionCommandToUnicode}, {QStringLiteral("textcrh"), 0x0127, DirectionCommandToUnicode}, {QStringLiteral("texthbar"), 0x0127, DirectionCommandToUnicode}, {QStringLiteral("i"), 0x0131, DirectionBoth}, {QStringLiteral("IJ"), 0x0132, DirectionBoth}, {QStringLiteral("ij"), 0x0133, DirectionBoth}, {QStringLiteral("textkra"), 0x0138, DirectionCommandToUnicode}, {QStringLiteral("Lcaron"), 0x013D, DirectionCommandToUnicode}, {QStringLiteral("lcaron"), 0x013E, DirectionCommandToUnicode}, {QStringLiteral("L"), 0x0141, DirectionBoth}, {QStringLiteral("Lstroke"), 0x0141, DirectionCommandToUnicode}, {QStringLiteral("l"), 0x0142, DirectionBoth}, {QStringLiteral("lstroke"), 0x0142, DirectionCommandToUnicode}, {QStringLiteral("textbarl"), 0x0142, DirectionCommandToUnicode}, {QStringLiteral("NG"), 0x014A, DirectionBoth}, {QStringLiteral("ng"), 0x014B, DirectionBoth}, {QStringLiteral("OE"), 0x0152, DirectionBoth}, {QStringLiteral("oe"), 0x0153, DirectionBoth}, {QStringLiteral("Racute"), 0x0154, DirectionCommandToUnicode}, {QStringLiteral("racute"), 0x0155, DirectionCommandToUnicode}, {QStringLiteral("Sacute"), 0x015A, DirectionCommandToUnicode}, {QStringLiteral("sacute"), 0x015B, DirectionCommandToUnicode}, {QStringLiteral("Scedilla"), 0x015E, DirectionCommandToUnicode}, {QStringLiteral("scedilla"), 0x015F, DirectionCommandToUnicode}, {QStringLiteral("Scaron"), 0x0160, DirectionCommandToUnicode}, {QStringLiteral("scaron"), 0x0161, DirectionCommandToUnicode}, {QStringLiteral("Tcaron"), 0x0164, DirectionCommandToUnicode}, {QStringLiteral("tcaron"), 0x0165, DirectionCommandToUnicode}, {QStringLiteral("textTstroke"), 0x0166, DirectionCommandToUnicode}, {QStringLiteral("textTbar"), 0x0166, DirectionCommandToUnicode}, {QStringLiteral("textTslash"), 0x0166, DirectionCommandToUnicode}, {QStringLiteral("texttstroke"), 0x0167, DirectionCommandToUnicode}, {QStringLiteral("texttbar"), 0x0167, DirectionCommandToUnicode}, {QStringLiteral("texttslash"), 0x0167, DirectionCommandToUnicode}, {QStringLiteral("Zdotaccent"), 0x017B, DirectionCommandToUnicode}, {QStringLiteral("zdotaccent"), 0x017C, DirectionCommandToUnicode}, {QStringLiteral("Zcaron"), 0x017D, DirectionCommandToUnicode}, {QStringLiteral("zcaron"), 0x017E, DirectionCommandToUnicode}, {QStringLiteral("textlongs"), 0x017F, DirectionCommandToUnicode}, {QStringLiteral("textcrb"), 0x0180, DirectionCommandToUnicode}, {QStringLiteral("textBhook"), 0x0181, DirectionCommandToUnicode}, {QStringLiteral("texthausaB"), 0x0181, DirectionCommandToUnicode}, {QStringLiteral("textOopen"), 0x0186, DirectionCommandToUnicode}, {QStringLiteral("textChook"), 0x0187, DirectionCommandToUnicode}, {QStringLiteral("textchook"), 0x0188, DirectionCommandToUnicode}, {QStringLiteral("texthtc"), 0x0188, DirectionCommandToUnicode}, {QStringLiteral("textDafrican"), 0x0189, DirectionCommandToUnicode}, {QStringLiteral("textDhook"), 0x018A, DirectionCommandToUnicode}, {QStringLiteral("texthausaD"), 0x018A, DirectionCommandToUnicode}, {QStringLiteral("textEreversed"), 0x018E, DirectionCommandToUnicode}, {QStringLiteral("textrevE"), 0x018E, DirectionCommandToUnicode}, {QStringLiteral("textEopen"), 0x0190, DirectionCommandToUnicode}, {QStringLiteral("textFhook"), 0x0191, DirectionCommandToUnicode}, {QStringLiteral("textflorin"), 0x0192, DirectionBoth}, {QStringLiteral("textgamma"), 0x0194, DirectionCommandToUnicode}, {QStringLiteral("textGammaafrican"), 0x0194, DirectionCommandToUnicode}, {QStringLiteral("hv"), 0x0195, DirectionCommandToUnicode}, {QStringLiteral("texthvlig"), 0x0195, DirectionCommandToUnicode}, {QStringLiteral("textIotaafrican"), 0x0196, DirectionCommandToUnicode}, {QStringLiteral("textKhook"), 0x0198, DirectionCommandToUnicode}, {QStringLiteral("texthausaK"), 0x0198, DirectionCommandToUnicode}, {QStringLiteral("texthtk"), 0x0199, DirectionCommandToUnicode}, {QStringLiteral("textkhook"), 0x0199, DirectionCommandToUnicode}, {QStringLiteral("textbarl"), 0x019A, DirectionCommandToUnicode}, {QStringLiteral("textcrlambda"), 0x019B, DirectionCommandToUnicode}, {QStringLiteral("textNhookleft"), 0x019D, DirectionCommandToUnicode}, {QStringLiteral("textnrleg"), 0x019E, DirectionCommandToUnicode}, {QStringLiteral("textPUnrleg"), 0x019E, DirectionCommandToUnicode}, {QStringLiteral("Ohorn"), 0x01A0, DirectionCommandToUnicode}, {QStringLiteral("ohorn"), 0x01A1, DirectionCommandToUnicode}, {QStringLiteral("textPhook"), 0x01A4, DirectionCommandToUnicode}, {QStringLiteral("texthtp"), 0x01A5, DirectionCommandToUnicode}, {QStringLiteral("textphook"), 0x01A5, DirectionCommandToUnicode}, {QStringLiteral("ESH"), 0x01A9, DirectionCommandToUnicode}, {QStringLiteral("textEsh"), 0x01A9, DirectionCommandToUnicode}, {QStringLiteral("textlooptoprevsh"), 0x01AA, DirectionCommandToUnicode}, {QStringLiteral("textlhtlongi"), 0x01AA, DirectionCommandToUnicode}, {QStringLiteral("textlhookt"), 0x01AB, DirectionCommandToUnicode}, {QStringLiteral("textThook"), 0x01AC, DirectionCommandToUnicode}, {QStringLiteral("textthook"), 0x01AD, DirectionCommandToUnicode}, {QStringLiteral("texthtt"), 0x01AD, DirectionCommandToUnicode}, {QStringLiteral("textTretroflexhook"), 0x01AE, DirectionCommandToUnicode}, {QStringLiteral("Uhorn"), 0x01AF, DirectionCommandToUnicode}, {QStringLiteral("uhorn"), 0x01B0, DirectionCommandToUnicode}, {QStringLiteral("textupsilon"), 0x01B1, DirectionCommandToUnicode}, {QStringLiteral("textVhook"), 0x01B2, DirectionCommandToUnicode}, {QStringLiteral("textYhook"), 0x01B3, DirectionCommandToUnicode}, {QStringLiteral("textvhook"), 0x01B4, DirectionCommandToUnicode}, {QStringLiteral("Zbar"), 0x01B5, DirectionCommandToUnicode}, {QStringLiteral("zbar"), 0x01B6, DirectionCommandToUnicode}, {QStringLiteral("EZH"), 0x01B7, DirectionCommandToUnicode}, {QStringLiteral("textEzh"), 0x01B7, DirectionCommandToUnicode}, {QStringLiteral("LJ"), 0x01C7, DirectionCommandToUnicode}, {QStringLiteral("Lj"), 0x01C8, DirectionCommandToUnicode}, {QStringLiteral("lj"), 0x01C9, DirectionCommandToUnicode}, {QStringLiteral("NJ"), 0x01CA, DirectionCommandToUnicode}, {QStringLiteral("Nj"), 0x01CB, DirectionCommandToUnicode}, {QStringLiteral("nj"), 0x01CC, DirectionCommandToUnicode}, {QStringLiteral("DZ"), 0x01F1, DirectionCommandToUnicode}, {QStringLiteral("Dz"), 0x01F2, DirectionCommandToUnicode}, {QStringLiteral("dz"), 0x01F3, DirectionCommandToUnicode}, {QStringLiteral("HV"), 0x01F6, DirectionCommandToUnicode}, {QStringLiteral("j"), 0x0237, DirectionBoth}, {QStringLiteral("ldots"), 0x2026, DirectionBoth}, {QStringLiteral("grqq"), 0x201C, DirectionCommandToUnicode}, {QStringLiteral("textquotedblleft"), 0x201C, DirectionCommandToUnicode}, {QStringLiteral("rqq"), 0x201D, DirectionCommandToUnicode}, {QStringLiteral("textquotedblright"), 0x201D, DirectionCommandToUnicode}, {QStringLiteral("glqq"), 0x201E, DirectionCommandToUnicode}, {QStringLiteral("SS"), 0x1E9E, DirectionBoth}, {QStringLiteral("textendash"), 0x2013, DirectionCommandToUnicode}, {QStringLiteral("textemdash"), 0x2014, DirectionCommandToUnicode}, {QStringLiteral("textquoteleft"), 0x2018, DirectionCommandToUnicode}, {QStringLiteral("lq"), 0x2018, DirectionBoth}, {QStringLiteral("textquoteright"), 0x2019, DirectionCommandToUnicode}, {QStringLiteral("rq"), 0x2019, DirectionBoth}, ///< tricky one: 'r' is a valid modifier {QStringLiteral("quotesinglbase"), 0x201A, DirectionBoth}, {QStringLiteral("quotedblbase"), 0x201E, DirectionBoth}, {QStringLiteral("textbullet "), 0x2022, DirectionBoth}, {QStringLiteral("guilsinglleft "), 0x2039, DirectionBoth}, {QStringLiteral("guilsinglright "), 0x203A, DirectionBoth}, {QStringLiteral("textcelsius"), 0x2103, DirectionBoth}, {QStringLiteral("textleftarrow"), 0x2190, DirectionBoth}, {QStringLiteral("textuparrow"), 0x2191, DirectionBoth}, {QStringLiteral("textrightarrow"), 0x2192, DirectionBoth}, {QStringLiteral("textdownarrow"), 0x2193, DirectionBoth} }; const QChar EncoderLaTeX::encoderLaTeXProtectedSymbols[] = {QLatin1Char('#'), QLatin1Char('&'), QLatin1Char('%')}; const QChar EncoderLaTeX::encoderLaTeXProtectedTextOnlySymbols[] = {QLatin1Char('_')}; /** * This data structure holds LaTeX symbol sequences (without * any backslash) that represent a single Unicode character. * For example, it maps --- to an 'em dash' and back. * The structure is a table with two columns: (1) the symbol * sequence (in the example before the '---') (2) the Unicode * character described by a hexcode. */ static const struct EncoderLaTeXSymbolSequence { const QString latex; const ushort unicode; const EncoderLaTeXCommandDirection direction; } encoderLaTeXSymbolSequences[] = { {QStringLiteral("!`"), 0x00A1, DirectionBoth}, {QStringLiteral("\"<"), 0x00AB, DirectionBoth}, {QStringLiteral("\">"), 0x00BB, DirectionBoth}, {QStringLiteral("?`"), 0x00BF, DirectionBoth}, {QStringLiteral("---"), 0x2014, DirectionBoth}, ///< --- must come before -- {QStringLiteral("--"), 0x2013, DirectionBoth}, {QStringLiteral("``"), 0x201C, DirectionBoth}, {QStringLiteral("''"), 0x201D, DirectionBoth}, {QStringLiteral("ff"), 0xFB00, DirectionUnicodeToCommand}, {QStringLiteral("fi"), 0xFB01, DirectionUnicodeToCommand}, {QStringLiteral("fl"), 0xFB02, DirectionUnicodeToCommand}, {QStringLiteral("ffi"), 0xFB03, DirectionUnicodeToCommand}, {QStringLiteral("ffl"), 0xFB04, DirectionUnicodeToCommand}, {QStringLiteral("ft"), 0xFB05, DirectionUnicodeToCommand}, {QStringLiteral("st"), 0xFB06, DirectionUnicodeToCommand} }; EncoderLaTeX::EncoderLaTeX() + : Encoder() { -#ifdef HAVE_ICU - /// Create an ICU Transliterator, configured to - /// transliterate virtually anything into plain ASCII - UErrorCode uec = U_ZERO_ERROR; - m_trans = icu::Transliterator::createInstance("Any-Latin;Latin-ASCII", UTRANS_FORWARD, uec); - if (U_FAILURE(uec)) { - qCWarning(LOG_KBIBTEX_IO) << "Error creating an ICU Transliterator instance: " << u_errorName(uec); - if (m_trans != nullptr) delete m_trans; - m_trans = nullptr; - } -#endif // HAVE_ICU - /// Initialize lookup table with NULL pointers for (int i = 0; i < lookupTableNumModifiers; ++i) lookupTable[i] = nullptr; int lookupTableCount = 0; /// Go through all table rows of encoderLaTeXEscapedCharacters for (const EncoderLaTeXEscapedCharacter &encoderLaTeXEscapedCharacter : encoderLaTeXEscapedCharacters) { /// Check if this row's modifier is already known bool knownModifier = false; int j; for (j = lookupTableCount - 1; j >= 0; --j) { knownModifier |= lookupTable[j]->modifier == encoderLaTeXEscapedCharacter.modifier; if (knownModifier) break; } if (!knownModifier) { /// Ok, this row's modifier appeared for the first time, /// therefore initialize memory structure, i.e. row in lookupTable lookupTable[lookupTableCount] = new EncoderLaTeXEscapedCharacterLookupTableRow; lookupTable[lookupTableCount]->modifier = encoderLaTeXEscapedCharacter.modifier; /// If no special character is known for a letter+modifier /// combination, fall back using the ASCII character only for (ushort k = 0; k < 26; ++k) { lookupTable[lookupTableCount]->unicode[k] = QChar(QLatin1Char('A').unicode() + k); lookupTable[lookupTableCount]->unicode[k + 26] = QChar(QLatin1Char('a').unicode() + k); } for (ushort k = 0; k < 10; ++k) lookupTable[lookupTableCount]->unicode[k + 52] = QChar(QLatin1Char('0').unicode() + k); j = lookupTableCount; ++lookupTableCount; } /// Add the letter as of the current row in encoderLaTeXEscapedCharacters /// into Unicode char array in the current modifier's row in the lookup table. int pos = -1; if ((pos = asciiLetterOrDigitToPos(encoderLaTeXEscapedCharacter.letter)) >= 0) lookupTable[j]->unicode[pos] = QChar(encoderLaTeXEscapedCharacter.unicode); else qCWarning(LOG_KBIBTEX_IO) << "Cannot handle letter " << encoderLaTeXEscapedCharacter.letter; } } EncoderLaTeX::~EncoderLaTeX() { /// Clean-up memory for (int i = lookupTableNumModifiers - 1; i >= 0; --i) if (lookupTable[i] != nullptr) delete lookupTable[i]; - -#ifdef HAVE_ICU - if (m_trans != nullptr) - delete m_trans; -#endif // HAVE_ICU } QString EncoderLaTeX::decode(const QString &input) const { const int len = input.length(); QString output; output.reserve(len); bool inMathMode = false; int cachedAsciiLetterOrDigitToPos = -1; /// Go through input char by char for (int i = 0; i < len; ++i) { /** * Repeatedly check if input data contains a verbatim command * like \url{...}, copy it to output, and update i to point * to the next character after the verbatim command. */ while (testAndCopyVerbatimCommands(input, i, output)); if (i >= len) break; /// Fetch current input char const QChar c = input[i]; if (c == QLatin1Char('{')) { /// First case: An opening curly bracket, /// which is harmless (see else case), unless ... if (i < len - 3 && input[i + 1] == QLatin1Char('\\')) { /// ... it continues with a backslash /// Next, check if there follows a modifier after the backslash /// For example an quotation mark as used in {\"a} const int lookupTablePos = modifierInLookupTable(input[i + 2].toLatin1()); /// Check for spaces between modifier and character, for example /// like {\H o} int skipSpaces = 0; while (i + 3 + skipSpaces < len && input[i + 3 + skipSpaces] == QLatin1Char(' ') && skipSpaces < 16) ++skipSpaces; if (lookupTablePos >= 0 && i + skipSpaces < len - 4 && (cachedAsciiLetterOrDigitToPos = asciiLetterOrDigitToPos(input[i + 3 + skipSpaces])) >= 0 && input[i + 4 + skipSpaces] == QLatin1Char('}')) { /// If we found a modifier which is followed by /// a letter followed by a closing curly bracket, /// we are looking at something like {\"A} /// Use lookup table to see what Unicode char this /// represents const QChar unicodeLetter = lookupTable[lookupTablePos]->unicode[cachedAsciiLetterOrDigitToPos]; if (unicodeLetter.unicode() < 127) { /// This combination of modifier and letter is not known, /// so try to preserve it output.append(input.midRef(i, 5 + skipSpaces)); qCWarning(LOG_KBIBTEX_IO) << "Don't know how to translate this into Unicode: " << input.mid(i, 5 + skipSpaces); } else output.append(unicodeLetter); /// Step over those additional characters i += 4 + skipSpaces; } else if (lookupTablePos >= 0 && i + skipSpaces < len - 5 && input[i + 3 + skipSpaces] == QLatin1Char('\\') && isIJ(input[i + 4 + skipSpaces]) && input[i + 5 + skipSpaces] == QLatin1Char('}')) { /// This is the case for {\'\i} or alike. bool found = false; for (const DotlessIJCharacter &dotlessIJCharacter : dotlessIJCharacters) if (dotlessIJCharacter.letter == input[i + 4 + skipSpaces] && dotlessIJCharacter.modifier == input[i + 2]) { output.append(QChar(dotlessIJCharacter.unicode)); i += 5 + skipSpaces; found = true; break; } if (!found) qCWarning(LOG_KBIBTEX_IO) << "Cannot interpret BACKSLASH" << input[i + 2] << "BACKSLASH" << input[i + 4 + skipSpaces]; } else if (lookupTablePos >= 0 && i + skipSpaces < len - 6 && input[i + 3 + skipSpaces] == QLatin1Char('{') && (cachedAsciiLetterOrDigitToPos = asciiLetterOrDigitToPos(input[i + 4 + skipSpaces])) >= 0 && input[i + 5 + skipSpaces] == QLatin1Char('}') && input[i + 6 + skipSpaces] == QLatin1Char('}')) { /// If we found a modifier which is followed by /// an opening curly bracket followed by a letter /// followed by two closing curly brackets, /// we are looking at something like {\"{A}} /// Use lookup table to see what Unicode char this /// represents const QChar unicodeLetter = lookupTable[lookupTablePos]->unicode[cachedAsciiLetterOrDigitToPos]; if (unicodeLetter.unicode() < 127) { /// This combination of modifier and letter is not known, /// so try to preserve it output.append(input.midRef(i, 7 + skipSpaces)); qCWarning(LOG_KBIBTEX_IO) << "Don't know how to translate this into Unicode: " << input.mid(i, 7 + skipSpaces); } else output.append(unicodeLetter); /// Step over those additional characters i += 6 + skipSpaces; } else if (lookupTablePos >= 0 && i + skipSpaces < len - 7 && input[i + 3 + skipSpaces] == QLatin1Char('{') && input[i + 4 + skipSpaces] == QLatin1Char('\\') && isIJ(input[i + 5 + skipSpaces]) && input[i + 6 + skipSpaces] == QLatin1Char('}') && input[i + 7 + skipSpaces] == QLatin1Char('}')) { /// This is the case for {\'{\i}} or alike. bool found = false; for (const DotlessIJCharacter &dotlessIJCharacter : dotlessIJCharacters) if (dotlessIJCharacter.letter == input[i + 5 + skipSpaces] && dotlessIJCharacter.modifier == input[i + 2]) { output.append(QChar(dotlessIJCharacter.unicode)); i += 7 + skipSpaces; found = true; break; } if (!found) qCWarning(LOG_KBIBTEX_IO) << "Cannot interpret BACKSLASH" << input[i + 2] << "BACKSLASH {" << input[i + 5 + skipSpaces] << "}"; } else { /// Now, the case of something like {\AA} is left /// to check for const QString alpha = readAlphaCharacters(input, i + 2); int nextPosAfterAlpha = i + 2 + alpha.size(); if (nextPosAfterAlpha < input.length() && input[nextPosAfterAlpha] == QLatin1Char('}')) { /// We are dealing actually with a string like {\AA} /// Check which command it is, /// insert corresponding Unicode character bool foundCommand = false; for (const EncoderLaTeXCharacterCommand &encoderLaTeXCharacterCommand : encoderLaTeXCharacterCommands) { if (encoderLaTeXCharacterCommand.command == alpha) { output.append(QChar(encoderLaTeXCharacterCommand.unicode)); foundCommand = true; break; } } /// Check if a math command has been read, /// like \subset /// (automatically skipped if command was found above) for (const MathCommand &mathCommand : mathCommands) { if (mathCommand.command == alpha) { if (output.endsWith(QStringLiteral("\\ensuremath"))) { /// Remove "\ensuremath" right before this math command, /// it will be re-inserted when exporting/saving the document output = output.left(output.length() - 11); } output.append(QChar(mathCommand.unicode)); foundCommand = true; break; } } if (foundCommand) i = nextPosAfterAlpha; else { /// Dealing with a string line {\noopsort} /// (see BibTeX documentation where this gets explained) output.append(c); } } else { /// Could be something like {\tt filename.txt} /// Keep it as it is output.append(c); } } } else { /// Nothing special, copy input char to output output.append(c); } } else if (c == QLatin1Char('\\') && i < len - 1) { /// Second case: A backslash as in \"o /// Sometimes such command are closed with just {}, /// so remember if to check for that bool checkForExtraCurlyAtEnd = false; /// Check if there follows a modifier after the backslash /// For example an quotation mark as used in \"a const int lookupTablePos = modifierInLookupTable(input[i + 1]); /// Check for spaces between modifier and character, for example /// like \H o int skipSpaces = 0; while (i + 2 + skipSpaces < len && input[i + 2 + skipSpaces] == QLatin1Char(' ') && skipSpaces < 16) ++skipSpaces; if (lookupTablePos >= 0 && i + skipSpaces <= len - 3 && (cachedAsciiLetterOrDigitToPos = asciiLetterOrDigitToPos(input[i + 2 + skipSpaces])) >= 0 && (i + skipSpaces == len - 3 || input[i + 1] == QLatin1Char('"') || input[i + 1] == QLatin1Char('\'') || input[i + 1] == QLatin1Char('`') || input[i + 1] == QLatin1Char('='))) { // TODO more special cases? /// We found a special modifier which is followed by /// a letter followed by normal text without any /// delimiter, so we are looking at something like /// \"u inside Kr\"uger /// Use lookup table to see what Unicode char this /// represents const QChar unicodeLetter = lookupTable[lookupTablePos]->unicode[cachedAsciiLetterOrDigitToPos]; if (unicodeLetter.unicode() < 127) { /// This combination of modifier and letter is not known, /// so try to preserve it output.append(input.midRef(i, 3 + skipSpaces)); qCWarning(LOG_KBIBTEX_IO) << "Don't know how to translate this into Unicode: " << input.mid(i, 3 + skipSpaces); } else output.append(unicodeLetter); /// Step over those additional characters i += 2 + skipSpaces; } else if (lookupTablePos >= 0 && i + skipSpaces <= len - 3 && i + skipSpaces <= len - 3 && (cachedAsciiLetterOrDigitToPos = asciiLetterOrDigitToPos(input[i + 2 + skipSpaces])) >= 0 && (i + skipSpaces == len - 3 || input[i + 3 + skipSpaces] == QLatin1Char('}') || input[i + 3 + skipSpaces] == QLatin1Char('{') || input[i + 3 + skipSpaces] == QLatin1Char(' ') || input[i + 3 + skipSpaces] == QLatin1Char('\t') || input[i + 3 + skipSpaces] == QLatin1Char('\\') || input[i + 3 + skipSpaces] == QLatin1Char('\r') || input[i + 3 + skipSpaces] == QLatin1Char('\n'))) { /// We found a modifier which is followed by /// a letter followed by a command delimiter such /// as a whitespace, so we are looking at something /// like \"u followed by a space /// Use lookup table to see what Unicode char this /// represents const QChar unicodeLetter = lookupTable[lookupTablePos]->unicode[cachedAsciiLetterOrDigitToPos]; if (unicodeLetter.unicode() < 127) { /// This combination of modifier and letter is not known, /// so try to preserve it output.append(input.midRef(i, 3)); qCWarning(LOG_KBIBTEX_IO) << "Don't know how to translate this into Unicode: " << input.mid(i, 3); } else output.append(unicodeLetter); /// Step over those additional characters i += 2 + skipSpaces; /// Now, after this command, a whitespace may follow /// which has to get "eaten" as it acts as a command /// delimiter if (input[i + 1] == QLatin1Char(' ') || input[i + 1] == QLatin1Char('\r') || input[i + 1] == QLatin1Char('\n')) ++i; else { /// If no whitespace follows, still /// check for extra curly brackets checkForExtraCurlyAtEnd = true; } } else if (lookupTablePos >= 0 && i + skipSpaces < len - 4 && input[i + 2 + skipSpaces] == QLatin1Char('{') && (cachedAsciiLetterOrDigitToPos = asciiLetterOrDigitToPos(input[i + 3 + skipSpaces])) >= 0 && input[i + 4 + skipSpaces] == QLatin1Char('}')) { /// We found a modifier which is followed by an opening /// curly bracket followed a letter followed by a closing /// curly bracket, so we are looking at something /// like \"{u} /// Use lookup table to see what Unicode char this /// represents const QChar unicodeLetter = lookupTable[lookupTablePos]->unicode[cachedAsciiLetterOrDigitToPos]; if (unicodeLetter.unicode() < 127) { /// This combination of modifier and letter is not known, /// so try to preserve it output.append(input.midRef(i, 5 + skipSpaces)); qCWarning(LOG_KBIBTEX_IO) << "Don't know how to translate this into Unicode: " << input.mid(i, 5 + skipSpaces); } else output.append(unicodeLetter); /// Step over those additional characters i += 4 + skipSpaces; } else if (lookupTablePos >= 0 && i + skipSpaces < len - 3 && input[i + 2 + skipSpaces] == QLatin1Char('\\') && isIJ(input[i + 3 + skipSpaces])) { /// This is the case for \'\i or alike. bool found = false; for (const DotlessIJCharacter &dotlessIJCharacter : dotlessIJCharacters) if (dotlessIJCharacter.letter == input[i + 3 + skipSpaces] && dotlessIJCharacter.modifier == input[i + 1]) { output.append(QChar(dotlessIJCharacter.unicode)); i += 3 + skipSpaces; found = true; break; } if (!found) qCWarning(LOG_KBIBTEX_IO) << "Cannot interpret BACKSLASH" << input[i + 1] << "BACKSLASH" << input[i + 3 + skipSpaces]; } else if (lookupTablePos >= 0 && i + skipSpaces < len - 5 && input[i + 2 + skipSpaces] == QLatin1Char('{') && input[i + 3 + skipSpaces] == QLatin1Char('\\') && isIJ(input[i + 4 + skipSpaces]) && input[i + 5 + skipSpaces] == QLatin1Char('}')) { /// This is the case for \'{\i} or alike. bool found = false; for (const DotlessIJCharacter &dotlessIJCharacter : dotlessIJCharacters) if (dotlessIJCharacter.letter == input[i + 4 + skipSpaces] && dotlessIJCharacter.modifier == input[i + 1]) { output.append(QChar(dotlessIJCharacter.unicode)); i += 5 + skipSpaces; found = true; break; } if (!found) qCWarning(LOG_KBIBTEX_IO) << "Cannot interpret BACKSLASH" << input[i + 1] << "BACKSLASH {" << input[i + 4 + skipSpaces] << "}"; } else if (i < len - 1) { /// Now, the case of something like \AA is left /// to check for const QString alpha = readAlphaCharacters(input, i + 1); int nextPosAfterAlpha = i + 1 + alpha.size(); if (alpha.size() >= 1 && alpha.at(0).isLetter()) { /// We are dealing actually with a string like \AA or \o /// Check which command it is, /// insert corresponding Unicode character bool foundCommand = false; for (const EncoderLaTeXCharacterCommand &encoderLaTeXCharacterCommand : encoderLaTeXCharacterCommands) { if (encoderLaTeXCharacterCommand.command == alpha) { output.append(QChar(encoderLaTeXCharacterCommand.unicode)); foundCommand = true; break; } } if (foundCommand) { /// Now, after a command, a whitespace may follow /// which has to get "eaten" as it acts as a command /// delimiter if (nextPosAfterAlpha < input.length() && (input[nextPosAfterAlpha] == QLatin1Char(' ') || input[nextPosAfterAlpha] == QLatin1Char('\r') || input[nextPosAfterAlpha] == QLatin1Char('\n'))) ++nextPosAfterAlpha; else { /// If no whitespace follows, still /// check for extra curly brackets checkForExtraCurlyAtEnd = true; } i = nextPosAfterAlpha - 1; } else { /// No command found? Just copy input char to output output.append(c); } } else { /// Maybe we are dealing with a string like \& or \_ /// Check which command it is bool foundCommand = false; for (const QChar &encoderLaTeXProtectedSymbol : encoderLaTeXProtectedSymbols) if (encoderLaTeXProtectedSymbol == input[i + 1]) { output.append(encoderLaTeXProtectedSymbol); foundCommand = true; break; } if (!foundCommand && !inMathMode) for (const QChar &encoderLaTeXProtectedTextOnlySymbol : encoderLaTeXProtectedTextOnlySymbols) if (encoderLaTeXProtectedTextOnlySymbol == input[i + 1]) { output.append(encoderLaTeXProtectedTextOnlySymbol); foundCommand = true; break; } /// If command has been found, nothing has to be done /// except for hopping over this backslash if (foundCommand) ++i; else if (i < len - 1 && input[i + 1] == QChar(0x002c /* comma */)) { /// Found a thin space: \, /// Replacing Latex-like thin space with Unicode thin space output.append(QChar(0x2009)); // foundCommand = true; ///< only necessary if more tests will follow in the future ++i; } else { /// Nothing special, copy input char to output output.append(c); } } } else { /// Nothing special, copy input char to output output.append(c); } /// Finally, check if there may be extra curly brackets /// like {} and hop over them if (checkForExtraCurlyAtEnd && i < len - 2 && input[i + 1] == QLatin1Char('{') && input[i + 2] == QLatin1Char('}')) i += 2; } else { /// So far, no opening curly bracket and no backslash /// May still be a symbol sequence like --- bool isSymbolSequence = false; /// Go through all known symbol sequnces for (const EncoderLaTeXSymbolSequence &encoderLaTeXSymbolSequence : encoderLaTeXSymbolSequences) { /// First, check if read input character matches beginning of symbol sequence /// and input buffer as enough characters left to potentially contain /// symbol sequence const int latexLen = encoderLaTeXSymbolSequence.latex.length(); if ((encoderLaTeXSymbolSequence.direction & DirectionCommandToUnicode) && encoderLaTeXSymbolSequence.latex[0] == c && i <= len - latexLen) { /// Now actually check if symbol sequence is in input buffer isSymbolSequence = true; for (int p = 1; isSymbolSequence && p < latexLen; ++p) isSymbolSequence &= encoderLaTeXSymbolSequence.latex[p] == input[i + p]; if (isSymbolSequence) { /// Ok, found sequence: insert Unicode character in output /// and hop over sequence in input buffer output.append(QChar(encoderLaTeXSymbolSequence.unicode)); i += encoderLaTeXSymbolSequence.latex.length() - 1; break; } } } if (!isSymbolSequence) { /// No symbol sequence found, so just copy input to output output.append(c); /// Still, check if input character is a dollar sign /// without a preceding backslash, means toggling between /// text mode and math mode if (c == QLatin1Char('$') && (i == 0 || input[i - 1] != QLatin1Char('\\'))) inMathMode = !inMathMode; } } } output.squeeze(); return output; } bool EncoderLaTeX::testAndCopyVerbatimCommands(const QString &input, int &pos, QString &output) const { int copyBytesCount = 0; int openedClosedCurlyBrackets = 0; /// check for \url if (pos < input.length() - 6 && input.mid(pos, 5) == QStringLiteral("\\url{")) { copyBytesCount = 5; openedClosedCurlyBrackets = 1; } if (copyBytesCount > 0) { while (openedClosedCurlyBrackets > 0 && pos + copyBytesCount < input.length()) { ++copyBytesCount; if (input[pos + copyBytesCount] == QLatin1Char('{') && input[pos + copyBytesCount - 1] != QLatin1Char('\\')) ++openedClosedCurlyBrackets; else if (input[pos + copyBytesCount] == QLatin1Char('}') && input[pos + copyBytesCount - 1] != QLatin1Char('\\')) --openedClosedCurlyBrackets; } output.append(input.midRef(pos, copyBytesCount)); pos += copyBytesCount; } return copyBytesCount > 0; } QString EncoderLaTeX::encode(const QString &ninput, const TargetEncoding targetEncoding) const { /// Perform Canonical Decomposition followed by Canonical Composition const QString input = ninput.normalized(QString::NormalizationForm_C); int len = input.length(); QString output; output.reserve(len); bool inMathMode = false; /// Go through input char by char for (int i = 0; i < len; ++i) { /** * Repeatedly check if input data contains a verbatim command * like \url{...}, append it to output, and update i to point * to the next character after the verbatim command. */ while (testAndCopyVerbatimCommands(input, i, output)); if (i >= len) break; const QChar c = input[i]; if (targetEncoding == TargetEncodingASCII && c.unicode() > 127) { /// If current char is outside ASCII boundaries ... bool found = false; /// Handle special cases of i without a dot (\i) for (const DotlessIJCharacter &dotlessIJCharacter : dotlessIJCharacters) if (c.unicode() == dotlessIJCharacter.unicode && (dotlessIJCharacter.direction & DirectionUnicodeToCommand)) { output.append(QString(QStringLiteral("{\\%1\\%2}")).arg(dotlessIJCharacter.modifier, dotlessIJCharacter.letter)); found = true; break; } if (!found) { /// ... test if there is a symbol sequence like --- /// to encode it for (const EncoderLaTeXSymbolSequence &encoderLaTeXSymbolSequence : encoderLaTeXSymbolSequences) if (encoderLaTeXSymbolSequence.unicode == c.unicode() && (encoderLaTeXSymbolSequence.direction & DirectionUnicodeToCommand)) { for (int l = 0; l < encoderLaTeXSymbolSequence.latex.length(); ++l) output.append(encoderLaTeXSymbolSequence.latex[l]); found = true; break; } } if (!found) { /// Ok, no symbol sequence. Let's test character /// commands like \ss for (const EncoderLaTeXCharacterCommand &encoderLaTeXCharacterCommand : encoderLaTeXCharacterCommands) if (encoderLaTeXCharacterCommand.unicode == c.unicode() && (encoderLaTeXCharacterCommand.direction & DirectionUnicodeToCommand)) { output.append(QString(QStringLiteral("{\\%1}")).arg(encoderLaTeXCharacterCommand.command)); found = true; break; } } if (!found) { /// Ok, neither a character command. Let's test /// escaped characters with modifiers like \"a for (const EncoderLaTeXEscapedCharacter &encoderLaTeXEscapedCharacter : encoderLaTeXEscapedCharacters) if (encoderLaTeXEscapedCharacter.unicode == c.unicode() && (encoderLaTeXEscapedCharacter.direction & DirectionUnicodeToCommand)) { const QString formatString = isAsciiLetter(encoderLaTeXEscapedCharacter.modifier) ? QStringLiteral("{\\%1 %2}") : QStringLiteral("{\\%1%2}"); output.append(formatString.arg(encoderLaTeXEscapedCharacter.modifier).arg(encoderLaTeXEscapedCharacter.letter)); found = true; break; } } if (!found) { /// Ok, test for math commands for (const MathCommand &mathCommand : mathCommands) if (mathCommand.unicode == c.unicode() && (mathCommand.direction & DirectionUnicodeToCommand)) { if (inMathMode) output.append(QString(QStringLiteral("\\%1{}")).arg(mathCommand.command)); else output.append(QString(QStringLiteral("\\ensuremath{\\%1}")).arg(mathCommand.command)); found = true; break; } } if (!found && c.unicode() == 0x2009) { /// Thin space output.append(QStringLiteral("\\,")); found = true; } if (!found) { qCWarning(LOG_KBIBTEX_IO) << "Don't know how to encode Unicode char" << QString(QStringLiteral("0x%1")).arg(c.unicode(), 4, 16, QLatin1Char('0')); output.append(c); } } else { /// Current character is normal ASCII /// and targetEncoding was set to accept only ASCII characters /// -- or -- targetEncoding was set to accept UTF-8 characters /// Still, some characters have special meaning /// in TeX and have to be preceded with a backslash bool found = false; for (const QChar &encoderLaTeXProtectedSymbol : encoderLaTeXProtectedSymbols) if (encoderLaTeXProtectedSymbol == c) { output.append(QLatin1Char('\\')); found = true; break; } if (!found && !inMathMode) for (const QChar &encoderLaTeXProtectedTextOnlySymbol : encoderLaTeXProtectedTextOnlySymbols) if (encoderLaTeXProtectedTextOnlySymbol == c) { output.append(QLatin1Char('\\')); break; } /// Dump character to output output.append(c); /// Finally, check if input character is a dollar sign /// without a preceding backslash, means toggling between /// text mode and math mode if (c == QLatin1Char('$') && (i == 0 || input[i - 1] != QLatin1Char('\\'))) inMathMode = !inMathMode; } } output.squeeze(); return output; } -#ifdef HAVE_ICU -QString EncoderLaTeX::convertToPlainAscii(const QString &ninput) const -{ - /// Previously, iconv's //TRANSLIT feature had been used here. - /// However, the transliteration is locale-specific as discussed - /// here: - /// http://taschenorakel.de/mathias/2007/11/06/iconv-transliterations/ - /// Therefore, iconv is not an acceptable solution. - /// - /// Instead, "International Components for Unicode" (ICU) is used. - /// It is already a dependency for Qt, so there is no "cost" involved - /// in using it. - - /// Preprocessing where ICU may give unexpected results otherwise - QString input = ninput; - input = input.replace(QChar(0x2013), QStringLiteral("--")).replace(QChar(0x2014), QStringLiteral("---")); - - const int inputLen = input.length(); - /// Make a copy of the input string into an array of UChar - UChar *uChars = new UChar[inputLen]; - for (int i = 0; i < inputLen; ++i) - uChars[i] = input.at(i).unicode(); - /// Create an ICU-specific unicode string - icu::UnicodeString uString = icu::UnicodeString(uChars, inputLen); - /// Perform the actual transliteration, modifying Unicode string - if (m_trans != nullptr) m_trans->transliterate(uString); - /// Create regular C++ string from Unicode string - std::string cppString; - uString.toUTF8String(cppString); - /// Clean up any mess - delete[] uChars; - /// Convert regular C++ to Qt-specific QString, - /// should work as cppString contains only ASCII text - return QString::fromStdString(cppString); -} -#endif // HAVE_ICU - -bool EncoderLaTeX::containsOnlyAscii(const QString &ntext) -{ - /// Perform Canonical Decomposition followed by Canonical Composition - const QString text = ntext.normalized(QString::NormalizationForm_C); - - for (const QChar &c : text) - if (c.unicode() > 127) return false; - return true; -} - int EncoderLaTeX::modifierInLookupTable(const QChar modifier) const { for (int m = 0; m < lookupTableNumModifiers && lookupTable[m] != nullptr; ++m) if (lookupTable[m]->modifier == modifier) return m; return -1; } QString EncoderLaTeX::readAlphaCharacters(const QString &base, int startFrom) const { const int len = base.size(); for (int j = startFrom; j < len; ++j) { if (!isAsciiLetter(base[j])) return base.mid(startFrom, j - startFrom); } return base.mid(startFrom); } const EncoderLaTeX &EncoderLaTeX::instance() { static const EncoderLaTeX self; return self; } #ifdef BUILD_TESTING bool EncoderLaTeX::writeLaTeXTables(QIODevice &output) { if (!output.isOpen() || !output.isWritable()) return false; output.write("\\documentclass{article}\n"); output.write("\\usepackage[utf8]{inputenc}% required for pdflatex, remove for lualatex or xelatex\n"); output.write("\\usepackage[T1]{fontenc}% required for pdflatex, remove for lualatex or xelatex\n"); output.write("\\usepackage{longtable}% tables breaking across multiple pages\n"); output.write("\\usepackage{booktabs}% nicer table lines\n"); output.write("\\usepackage{amssymb,textcomp}% more symbols\n"); output.write("\n"); output.write("\\begin{document}\n"); output.write("\\begin{longtable}{ccccc}\n"); output.write("\\toprule\n"); output.write("Modifier & Letter & Unicode & Command & Symbol \\\\\n"); output.write("\\midrule\n"); output.write("\\endfirsthead\n"); output.write("\\toprule\n"); output.write("Modifier & Letter & Unicode & Command & Symbol \\\\\n"); output.write("\\midrule\n"); output.write("\\endhead\n"); output.write("\\midrule\n"); output.write("Modifier & Letter & Unicode & Command & Symbol \\\\\n"); output.write("\\bottomrule\n"); output.write("\\endfoot\n"); output.write("\\midrule\n"); output.write("Modifier & Letter & Unicode & Command & Symbol \\\\\n"); output.write("\\bottomrule\n"); output.write("\\endlastfoot\n"); for (const EncoderLaTeXEscapedCharacter &encoderLaTeXEscapedCharacter : encoderLaTeXEscapedCharacters) { output.write("\\verb|"); output.write(toUtf8(encoderLaTeXEscapedCharacter.modifier)); output.write("| & \\verb|"); output.write(toUtf8(encoderLaTeXEscapedCharacter.letter)); output.write("| & \\texttt{0x"); const QString unicodeStr = QStringLiteral("00000") + QString::number(encoderLaTeXEscapedCharacter.unicode, 16); output.write(unicodeStr.right(4).toLatin1()); output.write("} & \\verb|\\"); output.write(toUtf8(encoderLaTeXEscapedCharacter.modifier)); output.write("|\\{\\verb|"); output.write(toUtf8(encoderLaTeXEscapedCharacter.letter)); output.write("|\\} & "); if ((encoderLaTeXEscapedCharacter.direction & DirectionUnicodeToCommand) == 0) output.write("\\emph{?}"); else { output.write("{\\"); output.write(toUtf8(encoderLaTeXEscapedCharacter.modifier)); output.write("{"); output.write(toUtf8(encoderLaTeXEscapedCharacter.letter)); output.write("}}"); } output.write(" \\\\\n"); } output.write("\\end{longtable}\n\n"); output.write("\\begin{longtable}{ccccc}\n"); output.write("\\toprule\n"); output.write("Modifier & Letter & Unicode & Command & Symbol \\\\\n"); output.write("\\midrule\n"); output.write("\\endfirsthead\n"); output.write("\\toprule\n"); output.write("Modifier & Letter & Unicode & Command & Symbol \\\\\n"); output.write("\\midrule\n"); output.write("\\endhead\n"); output.write("\\midrule\n"); output.write("Modifier & Letter & Unicode & Command & Symbol \\\\\n"); output.write("\\bottomrule\n"); output.write("\\endfoot\n"); output.write("\\midrule\n"); output.write("Modifier & Letter & Unicode & Command & Symbol \\\\\n"); output.write("\\bottomrule\n"); output.write("\\endlastfoot\n"); for (const DotlessIJCharacter &dotlessIJCharacter : dotlessIJCharacters) { output.write("\\verb|"); output.write(toUtf8(dotlessIJCharacter.modifier)); output.write("| & \\verb|"); output.write(toUtf8(dotlessIJCharacter.letter)); output.write("| & \\texttt{0x"); const QString unicodeStr = QStringLiteral("00000") + QString::number(dotlessIJCharacter.unicode, 16); output.write(unicodeStr.right(4).toLatin1()); output.write("} & \\verb|\\"); output.write(toUtf8(dotlessIJCharacter.modifier)); output.write("|\\{\\verb|\\"); output.write(toUtf8(dotlessIJCharacter.letter)); output.write("|\\} & "); if ((dotlessIJCharacter.direction & DirectionUnicodeToCommand) == 0) output.write("\\emph{?}"); else { output.write("{\\"); output.write(toUtf8(dotlessIJCharacter.modifier)); output.write("{\\"); output.write(toUtf8(dotlessIJCharacter.letter)); output.write("}}"); } output.write(" \\\\\n"); } output.write("\\end{longtable}\n\n"); output.write("\\begin{longtable}{cccc}\n"); output.write("\\toprule\n"); output.write("Text & Unicode & Command & Symbol \\\\\n"); output.write("\\midrule\n"); output.write("\\endfirsthead\n"); output.write("\\toprule\n"); output.write("Text & Unicode & Command & Symbol \\\\\n"); output.write("\\midrule\n"); output.write("\\endhead\n"); output.write("\\midrule\n"); output.write("Text & Unicode & Command & Symbol \\\\\n"); output.write("\\bottomrule\n"); output.write("\\endfoot\n"); output.write("\\midrule\n"); output.write("Text & Unicode & Command & Symbol \\\\\n"); output.write("\\bottomrule\n"); output.write("\\endlastfoot\n"); for (const MathCommand &mathCommand : mathCommands) { output.write("\\texttt{"); output.write(mathCommand.command.toUtf8()); output.write("} & \\texttt{0x"); const QString unicodeStr = QStringLiteral("00000") + QString::number(mathCommand.unicode, 16); output.write(unicodeStr.right(4).toLatin1()); output.write("} & \\verb|$\\"); output.write(mathCommand.command.toUtf8()); output.write("$| & "); if ((mathCommand.direction & DirectionUnicodeToCommand) == 0) output.write("\\emph{?}"); else { output.write("{$\\"); output.write(mathCommand.command.toUtf8()); output.write("$}"); } output.write(" \\\\\n"); } output.write("\\end{longtable}\n\n"); output.write("\\begin{longtable}{cccc}\n"); output.write("\\toprule\n"); output.write("Text & Unicode & Command & Symbol \\\\\n"); output.write("\\midrule\n"); output.write("\\endfirsthead\n"); output.write("\\toprule\n"); output.write("Text & Unicode & Command & Symbol \\\\\n"); output.write("\\midrule\n"); output.write("\\endhead\n"); output.write("\\midrule\n"); output.write("Text & Unicode & Command & Symbol \\\\\n"); output.write("\\bottomrule\n"); output.write("\\endfoot\n"); output.write("\\midrule\n"); output.write("Text & Unicode & Command & Symbol \\\\\n"); output.write("\\bottomrule\n"); output.write("\\endlastfoot\n"); for (const EncoderLaTeXCharacterCommand &encoderLaTeXCharacterCommand : encoderLaTeXCharacterCommands) { output.write("\\texttt{"); output.write(encoderLaTeXCharacterCommand.command.toUtf8()); output.write("} & \\texttt{0x"); const QString unicodeStr = QStringLiteral("00000") + QString::number(encoderLaTeXCharacterCommand.unicode, 16); output.write(unicodeStr.right(4).toLatin1()); output.write("} & \\verb|\\"); output.write(encoderLaTeXCharacterCommand.command.toUtf8()); output.write("| & "); if ((encoderLaTeXCharacterCommand.direction & DirectionUnicodeToCommand) == 0) output.write("\\emph{?}"); else { output.write("{\\"); output.write(encoderLaTeXCharacterCommand.command.toUtf8()); output.write("}"); } output.write(" \\\\\n"); } output.write("\\end{longtable}\n\n"); output.write("\\end{document}\n\n"); return true; } #endif // BUILD_TESTING diff --git a/src/io/encoderlatex.h b/src/io/encoderlatex.h index f929cbd7..dda2ff00 100644 --- a/src/io/encoderlatex.h +++ b/src/io/encoderlatex.h @@ -1,109 +1,94 @@ /*************************************************************************** - * Copyright (C) 2004-2018 by Thomas Fischer * + * Copyright (C) 2004-2019 by Thomas Fischer * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program; if not, see . * ***************************************************************************/ #ifndef ENCODERLATEX_H #define ENCODERLATEX_H #ifdef HAVE_KF5 #include "kbibtexio_export.h" #endif // HAVE_KF5 -#ifdef HAVE_ICU -#include -#endif // HAVE_ICU - #include #include "encoder.h" /** * Base class for that convert between different textual representations * for non-ASCII characters, specialized for LaTeX. For example, this * class can "translate" between \"a and its UTF-8 representation. * @author Thomas Fischer */ class KBIBTEXIO_EXPORT EncoderLaTeX: public Encoder { public: QString decode(const QString &text) const override; QString encode(const QString &text, const TargetEncoding targetEncoding) const override; -#ifdef HAVE_ICU - QString convertToPlainAscii(const QString &input) const; -#else // HAVE_ICU - /// Dummy implementation without ICU - inline QString convertToPlainAscii(const QString &input) const { return input; } -#endif // HAVE_ICU - static bool containsOnlyAscii(const QString &text); static const EncoderLaTeX &instance(); ~EncoderLaTeX() override; #ifdef BUILD_TESTING static bool writeLaTeXTables(QIODevice &output); #endif // BUILD_TESTING protected: EncoderLaTeX(); /** * This data structure keeps individual characters that have * a special purpose in LaTeX and therefore needs to be escaped * both in text and in math mode by prefixing with a backlash. */ static const QChar encoderLaTeXProtectedSymbols[]; /** * This data structure keeps individual characters that have * a special purpose in LaTeX in text mode and therefore needs * to be escaped by prefixing with a backlash. In math mode, * those have a different purpose and may not be escaped there. */ static const QChar encoderLaTeXProtectedTextOnlySymbols[]; /** * Check if input data contains a verbatim command like \url{...}, * append it to output, and update the position to point to the next * character after the verbatim command. * @return 'true' if a verbatim command has been copied, otherwise 'false'. */ bool testAndCopyVerbatimCommands(const QString &input, int &pos, QString &output) const; private: Q_DISABLE_COPY(EncoderLaTeX) /** * Check if character c represents a modifier like * a quotation mark in \"a. Return the modifier's * index in the lookup table or -1 if not a known * modifier. */ int modifierInLookupTable(const QChar modifier) const; /** * Return a string that represents the part of * the base string starting from startFrom contains * only alpha characters (a-z,A-Z). * Return value may be an empty string. */ QString readAlphaCharacters(const QString &base, int startFrom) const; - -#ifdef HAVE_ICU - icu::Transliterator *m_trans; -#endif // HAVE_ICU }; #endif // ENCODERLATEX_H diff --git a/src/io/fileexporterbibtex.cpp b/src/io/fileexporterbibtex.cpp index 71a9fc7d..7314f37f 100644 --- a/src/io/fileexporterbibtex.cpp +++ b/src/io/fileexporterbibtex.cpp @@ -1,678 +1,676 @@ /*************************************************************************** * Copyright (C) 2004-2019 by Thomas Fischer * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program; if not, see . * ***************************************************************************/ #include "fileexporterbibtex.h" #include #include #include #include #include #include "preferences.h" #include "file.h" #include "element.h" #include "entry.h" #include "macro.h" #include "preamble.h" #include "value.h" #include "comment.h" -#include "encoderlatex.h" +#include "encoder.h" #include "bibtexentries.h" #include "bibtexfields.h" #include "textencoder.h" #include "logging_io.h" FileExporterBibTeX *FileExporterBibTeX::staticFileExporterBibTeX = nullptr; class FileExporterBibTeX::FileExporterBibTeXPrivate { private: FileExporterBibTeX *p; public: QChar stringOpenDelimiter; QChar stringCloseDelimiter; KBibTeX::Casing keywordCasing; Preferences::QuoteComment quoteComment; QString encoding, forcedEncoding; Qt::CheckState protectCasing; QString personNameFormatting; QString listSeparator; bool cancelFlag; QTextCodec *destinationCodec; FileExporterBibTeXPrivate(FileExporterBibTeX *parent) : p(parent), keywordCasing(KBibTeX::cLowerCase), quoteComment(Preferences::qcNone), protectCasing(Qt::PartiallyChecked), cancelFlag(false), destinationCodec(nullptr) { /// nothing } void loadState() { #ifdef HAVE_KF5 encoding = Preferences::instance().bibTeXEncoding(); QString stringDelimiter = Preferences::instance().bibTeXStringDelimiter(); if (stringDelimiter.length() != 2) stringDelimiter = Preferences::defaultBibTeXStringDelimiter; #else // HAVE_KF5 encoding = QStringLiteral("LaTeX"); const QString stringDelimiter = QStringLiteral("{}"); #endif // HAVE_KF5 stringOpenDelimiter = stringDelimiter[0]; stringCloseDelimiter = stringDelimiter[1]; #ifdef HAVE_KF5 keywordCasing = Preferences::instance().bibTeXKeywordCasing(); quoteComment = Preferences::instance().bibTeXQuoteComment(); protectCasing = Preferences::instance().bibTeXProtectCasing() ? Qt::Checked : Qt::Unchecked; listSeparator = Preferences::instance().bibTeXListSeparator(); #else // HAVE_KF5 keywordCasing = KBibTeX::cLowerCase; quoteComment = qcNone; protectCasing = Qt::PartiallyChecked; listSeparator = QStringLiteral("; "); #endif // HAVE_KF5 personNameFormatting = Preferences::instance().personNameFormat(); } void loadStateFromFile(const File *bibtexfile) { if (bibtexfile == nullptr) return; if (bibtexfile->hasProperty(File::Encoding)) encoding = bibtexfile->property(File::Encoding).toString(); if (!forcedEncoding.isEmpty()) encoding = forcedEncoding; applyEncoding(encoding); if (bibtexfile->hasProperty(File::StringDelimiter)) { QString stringDelimiter = bibtexfile->property(File::StringDelimiter).toString(); if (stringDelimiter.length() != 2) stringDelimiter = Preferences::defaultBibTeXStringDelimiter; stringOpenDelimiter = stringDelimiter[0]; stringCloseDelimiter = stringDelimiter[1]; } if (bibtexfile->hasProperty(File::QuoteComment)) quoteComment = static_cast(bibtexfile->property(File::QuoteComment).toInt()); if (bibtexfile->hasProperty(File::KeywordCasing)) keywordCasing = static_cast(bibtexfile->property(File::KeywordCasing).toInt()); if (bibtexfile->hasProperty(File::ProtectCasing)) protectCasing = static_cast(bibtexfile->property(File::ProtectCasing).toInt()); if (bibtexfile->hasProperty(File::NameFormatting)) { /// if the user set "use global default", this property is an empty string /// in this case, keep default value const QString buffer = bibtexfile->property(File::NameFormatting).toString(); personNameFormatting = buffer.isEmpty() ? personNameFormatting : buffer; } if (bibtexfile->hasProperty(File::ListSeparator)) listSeparator = bibtexfile->property(File::ListSeparator).toString(); } bool writeEntry(QIODevice *iodevice, const Entry &entry) { - const EncoderLaTeX &laTeXEncoder = EncoderLaTeX::instance(); - /// write start of a entry (entry type and id) in plain ASCII iodevice->putChar('@'); iodevice->write(BibTeXEntries::instance().format(entry.type(), keywordCasing).toLatin1().data()); iodevice->putChar('{'); - iodevice->write(laTeXEncoder.convertToPlainAscii(entry.id()).toLatin1()); + iodevice->write(Encoder::instance().convertToPlainAscii(entry.id()).toLatin1()); for (Entry::ConstIterator it = entry.constBegin(); it != entry.constEnd(); ++it) { const QString key = it.key(); Value value = it.value(); if (value.isEmpty()) continue; ///< ignore empty key-value pairs QString text = p->internalValueToBibTeX(value, key, leUTF8); if (text.isEmpty()) { /// ignore empty key-value pairs qCWarning(LOG_KBIBTEX_IO) << "Value for field " << key << " is empty" << endl; continue; } // FIXME hack! const QSharedPointer first = *value.constBegin(); if (PlainText::isPlainText(*first) && (key == Entry::ftTitle || key == Entry::ftBookTitle || key == Entry::ftSeries)) { if (protectCasing == Qt::Checked) addProtectiveCasing(text); else if (protectCasing == Qt::Unchecked) removeProtectiveCasing(text); } iodevice->putChar(','); iodevice->putChar('\n'); iodevice->putChar('\t'); - iodevice->write(laTeXEncoder.convertToPlainAscii(BibTeXFields::instance().format(key, keywordCasing)).toLatin1()); + iodevice->write(Encoder::instance().convertToPlainAscii(BibTeXFields::instance().format(key, keywordCasing)).toLatin1()); iodevice->putChar(' '); iodevice->putChar('='); iodevice->putChar(' '); iodevice->write(TextEncoder::encode(text, destinationCodec)); } iodevice->putChar('\n'); iodevice->putChar('}'); iodevice->putChar('\n'); iodevice->putChar('\n'); return true; } bool writeMacro(QIODevice *iodevice, const Macro ¯o) { QString text = p->internalValueToBibTeX(macro.value(), QString(), leUTF8); if (protectCasing == Qt::Checked) addProtectiveCasing(text); else if (protectCasing == Qt::Unchecked) removeProtectiveCasing(text); iodevice->putChar('@'); iodevice->write(BibTeXEntries::instance().format(QStringLiteral("String"), keywordCasing).toLatin1().data()); iodevice->putChar('{'); iodevice->write(TextEncoder::encode(macro.key(), destinationCodec)); iodevice->putChar(' '); iodevice->putChar('='); iodevice->putChar(' '); iodevice->write(TextEncoder::encode(text, destinationCodec)); iodevice->putChar('}'); iodevice->putChar('\n'); iodevice->putChar('\n'); return true; } bool writeComment(QIODevice *iodevice, const Comment &comment) { QString text = comment.text() ; if (comment.useCommand() || quoteComment == Preferences::qcCommand) { iodevice->putChar('@'); iodevice->write(BibTeXEntries::instance().format(QStringLiteral("Comment"), keywordCasing).toLatin1().data()); iodevice->putChar('{'); iodevice->write(TextEncoder::encode(text, destinationCodec)); iodevice->putChar('}'); iodevice->putChar('\n'); iodevice->putChar('\n'); } else if (quoteComment == Preferences::qcPercentSign) { QStringList commentLines = text.split('\n', QString::SkipEmptyParts); for (QStringList::Iterator it = commentLines.begin(); it != commentLines.end(); ++it) { const QByteArray line = TextEncoder::encode(*it, destinationCodec); if (line.length() == 0 || line[0] != QLatin1Char('%')) { /// Guarantee that every line starts with /// a percent sign iodevice->putChar('%'); } iodevice->write(line); iodevice->putChar('\n'); } iodevice->putChar('\n'); } else { iodevice->write(TextEncoder::encode(text, destinationCodec)); iodevice->putChar('\n'); iodevice->putChar('\n'); } return true; } bool writePreamble(QIODevice *iodevice, const Preamble &preamble) { iodevice->putChar('@'); iodevice->write(BibTeXEntries::instance().format(QStringLiteral("Preamble"), keywordCasing).toLatin1().data()); iodevice->putChar('{'); /// Remember: strings from preamble do not get encoded, /// may contain raw LaTeX commands and code iodevice->write(TextEncoder::encode(p->internalValueToBibTeX(preamble.value(), QString(), leRaw), destinationCodec)); iodevice->putChar('}'); iodevice->putChar('\n'); iodevice->putChar('\n'); return true; } QString addProtectiveCasing(QString &text) { /// Check if either /// - text is too short (less than two characters) or /// - text neither starts/stops with double quotation marks /// nor starts with { and stops with } if (text.length() < 2 || ((text[0] != QLatin1Char('"') || text[text.length() - 1] != QLatin1Char('"')) && (text[0] != QLatin1Char('{') || text[text.length() - 1] != QLatin1Char('}')))) { /// Nothing to protect, as this is no text string return text; } bool addBrackets = true; if (text[1] == QLatin1Char('{') && text[text.length() - 2] == QLatin1Char('}')) { /// If the given text looks like this: {{...}} or "{...}" /// still check that it is not like this: {{..}..{..}} addBrackets = false; for (int i = text.length() - 2, count = 0; !addBrackets && i > 1; --i) { if (text[i] == QLatin1Char('{')) ++count; else if (text[i] == QLatin1Char('}')) --count; if (count == 0) addBrackets = true; } } if (addBrackets) text.insert(1, QStringLiteral("{")).insert(text.length() - 1, QStringLiteral("}")); return text; } QString removeProtectiveCasing(QString &text) { /// Check if either /// - text is too short (less than two characters) or /// - text neither starts/stops with double quotation marks /// nor starts with { and stops with } if (text.length() < 2 || ((text[0] != QLatin1Char('"') || text[text.length() - 1] != QLatin1Char('"')) && (text[0] != QLatin1Char('{') || text[text.length() - 1] != QLatin1Char('}')))) { /// Nothing to protect, as this is no text string return text; } if (text[1] != QLatin1Char('{') || text[text.length() - 2] != QLatin1Char('}')) /// Nothing to remove return text; /// If the given text looks like this: {{...}} or "{...}" /// still check that it is not like this: {{..}..{..}} bool removeBrackets = true; for (int i = text.length() - 2, count = 0; removeBrackets && i > 1; --i) { if (text[i] == QLatin1Char('{')) ++count; else if (text[i] == QLatin1Char('}')) --count; if (count == 0) removeBrackets = false; } if (removeBrackets) text.remove(text.length() - 2, 1).remove(1, 1); return text; } QString &protectQuotationMarks(QString &text) { int p = -1; while ((p = text.indexOf(QLatin1Char('"'), p + 1)) > 0) if (p == 0 || text[p - 1] != QLatin1Char('\\')) { text.insert(p + 1, QStringLiteral("}")).insert(p, QStringLiteral("{")); ++p; } return text; } void applyEncoding(QString &encoding) { encoding = encoding.isEmpty() ? QStringLiteral("latex") : encoding.toLower(); destinationCodec = QTextCodec::codecForName(encoding == QStringLiteral("latex") ? "us-ascii" : encoding.toLatin1()); } bool requiresPersonQuoting(const QString &text, bool isLastName) { if (isLastName && !text.contains(QChar(' '))) /** Last name contains NO spaces, no quoting necessary */ return false; else if (!isLastName && !text.contains(QStringLiteral(" and "))) /** First name contains no " and " no quoting necessary */ return false; else if (isLastName && !text.isEmpty() && text[0].isLower()) /** Last name starts with lower-case character (von, van, de, ...) */ // FIXME does not work yet return false; else if (text[0] != '{' || text[text.length() - 1] != '}') /** as either last name contains spaces or first name contains " and " and there is no protective quoting yet, there must be a protective quoting added */ return true; int bracketCounter = 0; for (int i = text.length() - 1; i >= 0; --i) { if (text[i] == '{') ++bracketCounter; else if (text[i] == '}') --bracketCounter; if (bracketCounter == 0 && i > 0) return true; } return false; } }; FileExporterBibTeX::FileExporterBibTeX(QObject *parent) : FileExporter(parent), d(new FileExporterBibTeXPrivate(this)) { /// nothing } FileExporterBibTeX::~FileExporterBibTeX() { delete d; } void FileExporterBibTeX::setEncoding(const QString &encoding) { d->forcedEncoding = encoding; } bool FileExporterBibTeX::save(QIODevice *iodevice, const File *bibtexfile, QStringList *errorLog) { Q_UNUSED(errorLog) if (!iodevice->isWritable() && !iodevice->open(QIODevice::WriteOnly)) { qCWarning(LOG_KBIBTEX_IO) << "Output device not writable"; return false; } bool result = true; const int totalElements = bibtexfile->count(); int currentPos = 0; d->loadState(); d->loadStateFromFile(bibtexfile); QBuffer outputBuffer; outputBuffer.open(QBuffer::WriteOnly); /// Memorize which entries are used in a crossref field QHash crossRefMap; for (File::ConstIterator it = bibtexfile->constBegin(); it != bibtexfile->constEnd() && result && !d->cancelFlag; ++it) { QSharedPointer entry = (*it).dynamicCast(); if (!entry.isNull()) { const QString crossRef = PlainTextValue::text(entry->value(Entry::ftCrossRef)); if (!crossRef.isEmpty()) { QStringList crossRefList = crossRefMap.value(crossRef, QStringList()); crossRefList.append(entry->id()); crossRefMap.insert(crossRef, crossRefList); } } } bool allPreamblesAndMacrosProcessed = false; QSet processedEntryIds; for (File::ConstIterator it = bibtexfile->constBegin(); it != bibtexfile->constEnd() && result && !d->cancelFlag; ++it) { QSharedPointer element = (*it); QSharedPointer entry = element.dynamicCast(); if (!entry.isNull()) { processedEntryIds.insert(entry->id()); /// Postpone entries that are crossref'ed QStringList crossRefList = crossRefMap.value(entry->id(), QStringList()); if (!crossRefList.isEmpty()) { bool allProcessed = true; for (const QString &origin : crossRefList) allProcessed &= processedEntryIds.contains(origin); if (allProcessed) crossRefMap.remove(entry->id()); else continue; } if (!allPreamblesAndMacrosProcessed) { /// Guarantee that all macros and the preamble are written /// before the first entry (@article, ...) is written for (File::ConstIterator msit = it + 1; msit != bibtexfile->constEnd() && result && !d->cancelFlag; ++msit) { QSharedPointer preamble = (*msit).dynamicCast(); if (!preamble.isNull()) { result &= d->writePreamble(&outputBuffer, *preamble); emit progress(++currentPos, totalElements); } else { QSharedPointer macro = (*msit).dynamicCast(); if (!macro.isNull()) { result &= d->writeMacro(&outputBuffer, *macro); emit progress(++currentPos, totalElements); } } } allPreamblesAndMacrosProcessed = true; } result &= d->writeEntry(&outputBuffer, *entry); emit progress(++currentPos, totalElements); } else { QSharedPointer comment = element.dynamicCast(); if (!comment.isNull() && !comment->text().startsWith(QStringLiteral("x-kbibtex-"))) { result &= d->writeComment(&outputBuffer, *comment); emit progress(++currentPos, totalElements); } else if (!allPreamblesAndMacrosProcessed) { QSharedPointer preamble = element.dynamicCast(); if (!preamble.isNull()) { result &= d->writePreamble(&outputBuffer, *preamble); emit progress(++currentPos, totalElements); } else { QSharedPointer macro = element.dynamicCast(); if (!macro.isNull()) { result &= d->writeMacro(&outputBuffer, *macro); emit progress(++currentPos, totalElements); } } } } } /// Crossref'ed entries are written last if (!crossRefMap.isEmpty()) for (File::ConstIterator it = bibtexfile->constBegin(); it != bibtexfile->constEnd() && result && !d->cancelFlag; ++it) { QSharedPointer entry = (*it).dynamicCast(); if (entry.isNull()) continue; if (!crossRefMap.contains(entry->id())) continue; result &= d->writeEntry(&outputBuffer, *entry); emit progress(++currentPos, totalElements); } outputBuffer.close(); ///< close writing operation outputBuffer.open(QBuffer::ReadOnly); const QByteArray outputData = outputBuffer.readAll(); outputBuffer.close(); bool hasNonAsciiCharacters = false; for (const unsigned char c : outputData) if ((c & 128) > 0) { hasNonAsciiCharacters = true; break; } if (hasNonAsciiCharacters) { const QString encoding = d->encoding.toLower() == QStringLiteral("latex") ? QStringLiteral("utf-8") : d->encoding; Comment encodingComment(QStringLiteral("x-kbibtex-encoding=") + encoding, true); result &= d->writeComment(iodevice, encodingComment); } iodevice->write(outputData); iodevice->close(); return result && !d->cancelFlag; } bool FileExporterBibTeX::save(QIODevice *iodevice, const QSharedPointer element, const File *bibtexfile, QStringList *errorLog) { Q_UNUSED(errorLog) if (!iodevice->isWritable() && !iodevice->open(QIODevice::WriteOnly)) { qCWarning(LOG_KBIBTEX_IO) << "Output device not writable"; return false; } bool result = false; d->loadState(); d->loadStateFromFile(bibtexfile); if (!d->forcedEncoding.isEmpty()) d->encoding = d->forcedEncoding; d->applyEncoding(d->encoding); const QSharedPointer entry = element.dynamicCast(); if (!entry.isNull()) result |= d->writeEntry(iodevice, *entry); else { const QSharedPointer macro = element.dynamicCast(); if (!macro.isNull()) result |= d->writeMacro(iodevice, *macro); else { const QSharedPointer comment = element.dynamicCast(); if (!comment.isNull()) result |= d->writeComment(iodevice, *comment); else { const QSharedPointer preamble = element.dynamicCast(); if (!preamble.isNull()) result |= d->writePreamble(iodevice, *preamble); } } } iodevice->close(); return result && !d->cancelFlag; } void FileExporterBibTeX::cancel() { d->cancelFlag = true; } QString FileExporterBibTeX::valueToBibTeX(const Value &value, const QString &key, UseLaTeXEncoding useLaTeXEncoding) { if (staticFileExporterBibTeX == nullptr) { staticFileExporterBibTeX = new FileExporterBibTeX(nullptr); staticFileExporterBibTeX->d->loadState(); } return staticFileExporterBibTeX->internalValueToBibTeX(value, key, useLaTeXEncoding); } QString FileExporterBibTeX::applyEncoder(const QString &input, UseLaTeXEncoding useLaTeXEncoding) const { switch (useLaTeXEncoding) { - case leLaTeX: return EncoderLaTeX::instance().encode(input, Encoder::TargetEncodingASCII); - case leUTF8: return EncoderLaTeX::instance().encode(input, Encoder::TargetEncodingUTF8); + case leLaTeX: return Encoder::instance().encode(input, Encoder::TargetEncodingASCII); + case leUTF8: return Encoder::instance().encode(input, Encoder::TargetEncodingUTF8); default: return input; } } QString FileExporterBibTeX::internalValueToBibTeX(const Value &value, const QString &key, UseLaTeXEncoding useLaTeXEncoding) { if (value.isEmpty()) return QString(); QString result; bool isOpen = false; QSharedPointer prev; for (const auto &valueItem : value) { QSharedPointer macroKey = valueItem.dynamicCast(); if (!macroKey.isNull()) { if (isOpen) result.append(d->stringCloseDelimiter); isOpen = false; if (!result.isEmpty()) result.append(" # "); result.append(macroKey->text()); prev = macroKey; } else { QSharedPointer plainText = valueItem.dynamicCast(); if (!plainText.isNull()) { QString textBody = applyEncoder(plainText->text(), useLaTeXEncoding); if (!isOpen) { if (!result.isEmpty()) result.append(" # "); result.append(d->stringOpenDelimiter); } else if (!prev.dynamicCast().isNull()) result.append(' '); else if (!prev.dynamicCast().isNull()) { /// handle "et al." i.e. "and others" result.append(" and "); } else { result.append(d->stringCloseDelimiter).append(" # ").append(d->stringOpenDelimiter); } isOpen = true; if (d->stringOpenDelimiter == QLatin1Char('"')) d->protectQuotationMarks(textBody); result.append(textBody); prev = plainText; } else { QSharedPointer verbatimText = valueItem.dynamicCast(); if (!verbatimText.isNull()) { QString textBody = verbatimText->text(); if (!isOpen) { if (!result.isEmpty()) result.append(" # "); result.append(d->stringOpenDelimiter); } else if (!prev.dynamicCast().isNull()) { const QString keyToLower(key.toLower()); if (keyToLower.startsWith(Entry::ftUrl) || keyToLower.startsWith(Entry::ftLocalFile) || keyToLower.startsWith(Entry::ftFile) || keyToLower.startsWith(Entry::ftDOI)) /// Filenames and alike have be separated by a semicolon, /// as a plain comma may be part of the filename or URL result.append(QStringLiteral("; ")); else result.append(' '); } else { result.append(d->stringCloseDelimiter).append(" # ").append(d->stringOpenDelimiter); } isOpen = true; if (d->stringOpenDelimiter == QLatin1Char('"')) d->protectQuotationMarks(textBody); result.append(textBody); prev = verbatimText; } else { QSharedPointer person = valueItem.dynamicCast(); if (!person.isNull()) { QString firstName = person->firstName(); if (!firstName.isEmpty() && d->requiresPersonQuoting(firstName, false)) firstName = firstName.prepend("{").append("}"); QString lastName = person->lastName(); if (!lastName.isEmpty() && d->requiresPersonQuoting(lastName, true)) lastName = lastName.prepend("{").append("}"); QString suffix = person->suffix(); /// Fall back and enforce comma-based name formatting /// if name contains a suffix like "Jr." /// Otherwise name could not be parsed again reliable const QString pnf = suffix.isEmpty() ? d->personNameFormatting : Preferences::personNameFormatLastFirst; QString thisName = applyEncoder(Person::transcribePersonName(pnf, firstName, lastName, suffix), useLaTeXEncoding); if (!isOpen) { if (!result.isEmpty()) result.append(" # "); result.append(d->stringOpenDelimiter); } else if (!prev.dynamicCast().isNull()) result.append(" and "); else { result.append(d->stringCloseDelimiter).append(" # ").append(d->stringOpenDelimiter); } isOpen = true; if (d->stringOpenDelimiter == QLatin1Char('"')) d->protectQuotationMarks(thisName); result.append(thisName); prev = person; } else { QSharedPointer keyword = valueItem.dynamicCast(); if (!keyword.isNull()) { QString textBody = applyEncoder(keyword->text(), useLaTeXEncoding); if (!isOpen) { if (!result.isEmpty()) result.append(" # "); result.append(d->stringOpenDelimiter); } else if (!prev.dynamicCast().isNull()) result.append(d->listSeparator); else { result.append(d->stringCloseDelimiter).append(" # ").append(d->stringOpenDelimiter); } isOpen = true; if (d->stringOpenDelimiter == QLatin1Char('"')) d->protectQuotationMarks(textBody); result.append(textBody); prev = keyword; } } } } } prev = valueItem; } if (isOpen) result.append(d->stringCloseDelimiter); return result; } bool FileExporterBibTeX::isFileExporterBibTeX(const FileExporter &other) { return typeid(other) == typeid(FileExporterBibTeX); } diff --git a/src/io/fileimporterbibtex.cpp b/src/io/fileimporterbibtex.cpp index fdd0bc7d..8efe79ee 100644 --- a/src/io/fileimporterbibtex.cpp +++ b/src/io/fileimporterbibtex.cpp @@ -1,1304 +1,1305 @@ /*************************************************************************** * Copyright (C) 2004-2019 by Thomas Fischer * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program; if not, see . * ***************************************************************************/ #include "fileimporterbibtex.h" #include #include #include #include #include #include "preferences.h" #include "file.h" #include "comment.h" #include "macro.h" #include "preamble.h" #include "entry.h" #include "element.h" #include "value.h" +#include "encoder.h" #include "encoderlatex.h" #include "bibtexentries.h" #include "bibtexfields.h" #include "logging_io.h" #define qint64toint(a) (static_cast(qMax(0LL,qMin(0x7fffffffLL,(a))))) FileImporterBibTeX::FileImporterBibTeX(QObject *parent) : FileImporter(parent), m_cancelFlag(false), m_textStream(nullptr), m_commentHandling(IgnoreComments), m_keywordCasing(KBibTeX::cLowerCase), m_lineNo(1) { m_keysForPersonDetection.append(Entry::ftAuthor); m_keysForPersonDetection.append(Entry::ftEditor); m_keysForPersonDetection.append(QStringLiteral("bookauthor")); /// used by JSTOR } File *FileImporterBibTeX::load(QIODevice *iodevice) { m_cancelFlag = false; if (!iodevice->isReadable() && !iodevice->open(QIODevice::ReadOnly)) { qCWarning(LOG_KBIBTEX_IO) << "Input device not readable"; emit message(SeverityError, QStringLiteral("Input device not readable")); return nullptr; } File *result = new File(); /// Used to determine if file prefers quotation marks over /// curly brackets or the other way around m_statistics.countCurlyBrackets = 0; m_statistics.countQuotationMarks = 0; m_statistics.countFirstNameFirst = 0; m_statistics.countLastNameFirst = 0; m_statistics.countNoCommentQuote = 0; m_statistics.countCommentPercent = 0; m_statistics.countCommentCommand = 0; m_statistics.countProtectedTitle = 0; m_statistics.countUnprotectedTitle = 0; m_statistics.mostRecentListSeparator.clear(); m_textStream = new QTextStream(iodevice); m_textStream->setCodec(Preferences::defaultBibTeXEncoding.toLatin1()); ///< unless we learn something else, assume default codec result->setProperty(File::Encoding, Preferences::defaultBibTeXEncoding); QString rawText; rawText.reserve(qint64toint(iodevice->size())); while (!m_textStream->atEnd()) { QString line = m_textStream->readLine(); bool skipline = evaluateParameterComments(m_textStream, line.toLower(), result); // FIXME XML data should be removed somewhere else? onlinesearch ... if (line.startsWith(QStringLiteral(""))) /// Hop over XML declarations skipline = true; if (!skipline) rawText.append(line).append("\n"); } delete m_textStream; /** Remove HTML code from the input source */ // FIXME HTML data should be removed somewhere else? onlinesearch ... const int originalLength = rawText.length(); rawText = rawText.remove(KBibTeX::htmlRegExp); const int afterHTMLremovalLength = rawText.length(); if (originalLength != afterHTMLremovalLength) { qCInfo(LOG_KBIBTEX_IO) << (originalLength - afterHTMLremovalLength) << "characters of HTML tags have been removed"; emit message(SeverityInfo, QString(QStringLiteral("%1 characters of HTML tags have been removed")).arg(originalLength - afterHTMLremovalLength)); } // TODO really necessary to pipe data through several QTextStreams? m_textStream = new QTextStream(&rawText, QIODevice::ReadOnly); m_textStream->setCodec(Preferences::defaultBibTeXEncoding.toLower() == QStringLiteral("latex") ? "us-ascii" : Preferences::defaultBibTeXEncoding.toLatin1()); m_lineNo = 1; m_prevLine = m_currentLine = QString(); m_knownElementIds.clear(); readChar(); while (!m_nextChar.isNull() && !m_cancelFlag && !m_textStream->atEnd()) { emit progress(qint64toint(m_textStream->pos()), rawText.length()); Element *element = nextElement(); if (element != nullptr) { if (m_commentHandling == KeepComments || !Comment::isComment(*element)) result->append(QSharedPointer(element)); else delete element; } } emit progress(100, 100); if (m_cancelFlag) { qCWarning(LOG_KBIBTEX_IO) << "Loading bibliography data has been canceled"; emit message(SeverityError, QStringLiteral("Loading bibliography data has been canceled")); delete result; result = nullptr; } delete m_textStream; if (result != nullptr) { /// Set the file's preferences for string delimiters /// deduced from statistics built while parsing the file result->setProperty(File::StringDelimiter, m_statistics.countQuotationMarks > m_statistics.countCurlyBrackets ? QStringLiteral("\"\"") : QStringLiteral("{}")); /// Set the file's preferences for name formatting result->setProperty(File::NameFormatting, m_statistics.countFirstNameFirst > m_statistics.countLastNameFirst ? Preferences::personNameFormatFirstLast : Preferences::personNameFormatLastFirst); /// Set the file's preferences for title protected Qt::CheckState triState = (m_statistics.countProtectedTitle > m_statistics.countUnprotectedTitle * 4) ? Qt::Checked : ((m_statistics.countProtectedTitle * 4 < m_statistics.countUnprotectedTitle) ? Qt::Unchecked : Qt::PartiallyChecked); result->setProperty(File::ProtectCasing, static_cast(triState)); /// Set the file's preferences for quoting of comments if (m_statistics.countNoCommentQuote > m_statistics.countCommentCommand && m_statistics.countNoCommentQuote > m_statistics.countCommentPercent) result->setProperty(File::QuoteComment, static_cast(Preferences::qcNone)); else if (m_statistics.countCommentCommand > m_statistics.countNoCommentQuote && m_statistics.countCommentCommand > m_statistics.countCommentPercent) result->setProperty(File::QuoteComment, static_cast(Preferences::qcCommand)); else result->setProperty(File::QuoteComment, static_cast(Preferences::qcPercentSign)); if (!m_statistics.mostRecentListSeparator.isEmpty()) result->setProperty(File::ListSeparator, m_statistics.mostRecentListSeparator); // TODO gather more statistics for keyword casing etc. } iodevice->close(); return result; } bool FileImporterBibTeX::guessCanDecode(const QString &rawText) { static const QRegularExpression bibtexLikeText(QStringLiteral("@\\w+\\{.+\\}")); QString text = EncoderLaTeX::instance().decode(rawText); return bibtexLikeText.match(text).hasMatch(); } void FileImporterBibTeX::cancel() { m_cancelFlag = true; } Element *FileImporterBibTeX::nextElement() { Token token = nextToken(); if (token == tAt) { const QString elementType = readSimpleString(); const QString elementTypeLower = elementType.toLower(); if (elementTypeLower == QStringLiteral("comment")) { ++m_statistics.countCommentCommand; return readCommentElement(); } else if (elementTypeLower == QStringLiteral("string")) return readMacroElement(); else if (elementTypeLower == QStringLiteral("preamble")) return readPreambleElement(); else if (elementTypeLower == QStringLiteral("import")) { qCDebug(LOG_KBIBTEX_IO) << "Skipping potential HTML/JavaScript @import statement near line" << m_lineNo; emit message(SeverityInfo, QString(QStringLiteral("Skipping potential HTML/JavaScript @import statement near line %1")).arg(m_lineNo)); return nullptr; } else if (!elementType.isEmpty()) return readEntryElement(elementType); else { qCWarning(LOG_KBIBTEX_IO) << "Element type after '@' is empty or invalid near line" << m_lineNo; emit message(SeverityError, QString(QStringLiteral("Element type after '@' is empty or invalid near line %1")).arg(m_lineNo)); return nullptr; } } else if (token == tUnknown && m_nextChar == QLatin1Char('%')) { /// do not complain about LaTeX-like comments, just eat them ++m_statistics.countCommentPercent; return readPlainCommentElement(QString()); } else if (token == tUnknown) { if (m_nextChar.isLetter()) { qCDebug(LOG_KBIBTEX_IO) << "Unknown character" << m_nextChar << "near line" << m_lineNo << "(" << m_prevLine << endl << m_currentLine << ")" << ", treating as comment"; emit message(SeverityInfo, QString(QStringLiteral("Unknown character '%1' near line %2, treating as comment")).arg(m_nextChar).arg(m_lineNo)); } else if (m_nextChar.isPrint()) { qCDebug(LOG_KBIBTEX_IO) << "Unknown character" << m_nextChar << "(" << QString(QStringLiteral("0x%1")).arg(m_nextChar.unicode(), 4, 16, QLatin1Char('0')) << ") near line" << m_lineNo << "(" << m_prevLine << endl << m_currentLine << ")" << ", treating as comment"; emit message(SeverityInfo, QString(QStringLiteral("Unknown character '%1' (0x%2) near line %3, treating as comment")).arg(m_nextChar).arg(m_nextChar.unicode(), 4, 16, QLatin1Char('0')).arg(m_lineNo)); } else { qCDebug(LOG_KBIBTEX_IO) << "Unknown character" << QString(QStringLiteral("0x%1")).arg(m_nextChar.unicode(), 4, 16, QLatin1Char('0')) << "near line" << m_lineNo << "(" << m_prevLine << endl << m_currentLine << ")" << ", treating as comment"; emit message(SeverityInfo, QString(QStringLiteral("Unknown character 0x%1 near line %2, treating as comment")).arg(m_nextChar.unicode(), 4, 16, QLatin1Char('0')).arg(m_lineNo)); } ++m_statistics.countNoCommentQuote; return readPlainCommentElement(QString(m_prevChar) + m_nextChar); } if (token != tEOF) { qCWarning(LOG_KBIBTEX_IO) << "Don't know how to parse next token of type" << tokenidToString(token) << "in line" << m_lineNo << "(" << m_prevLine << endl << m_currentLine << ")" << endl; emit message(SeverityError, QString(QStringLiteral("Don't know how to parse next token of type %1 in line %2")).arg(tokenidToString(token)).arg(m_lineNo)); } return nullptr; } Comment *FileImporterBibTeX::readCommentElement() { if (!readCharUntil(QStringLiteral("{("))) return nullptr; return new Comment(EncoderLaTeX::instance().decode(readBracketString())); } Comment *FileImporterBibTeX::readPlainCommentElement(const QString &prefix) { QString result = EncoderLaTeX::instance().decode(prefix + readLine()); while (m_nextChar == QLatin1Char('\n') || m_nextChar == QLatin1Char('\r')) readChar(); while (!m_nextChar.isNull() && m_nextChar != QLatin1Char('@')) { const QChar nextChar = m_nextChar; const QString line = readLine(); while (m_nextChar == QLatin1Char('\n') || m_nextChar == QLatin1Char('\r')) readChar(); result.append(EncoderLaTeX::instance().decode((nextChar == QLatin1Char('%') ? QString() : QString(nextChar)) + line)); } if (result.startsWith(QStringLiteral("x-kbibtex"))) { qCWarning(LOG_KBIBTEX_IO) << "Plain comment element starts with 'x-kbibtex', this should not happen"; emit message(SeverityWarning, QStringLiteral("Plain comment element starts with 'x-kbibtex', this should not happen")); /// ignore special comments return nullptr; } return new Comment(result); } Macro *FileImporterBibTeX::readMacroElement() { Token token = nextToken(); while (token != tBracketOpen) { if (token == tEOF) { qCWarning(LOG_KBIBTEX_IO) << "Error in parsing macro near line" << m_lineNo << "(" << m_prevLine << endl << m_currentLine << "): Opening curly brace '{' expected"; emit message(SeverityError, QString(QStringLiteral("Error in parsing macro near line %1: Opening curly brace '{' expected")).arg(m_lineNo)); return nullptr; } token = nextToken(); } QString key = readSimpleString(); if (key.isEmpty()) { /// Cope with empty keys, /// duplicates are handled further below key = QStringLiteral("EmptyId"); - } else if (!EncoderLaTeX::containsOnlyAscii(key)) { + } else if (!Encoder::containsOnlyAscii(key)) { /// Try to avoid non-ascii characters in ids - const QString newKey = EncoderLaTeX::instance().convertToPlainAscii(key); + const QString newKey = Encoder::instance().convertToPlainAscii(key); qCWarning(LOG_KBIBTEX_IO) << "Macro key" << key << "near line" << m_lineNo << "contains non-ASCII characters, converted to" << newKey; emit message(SeverityWarning, QString(QStringLiteral("Macro key '%1' near line %2 contains non-ASCII characters, converted to '%3'")).arg(key).arg(m_lineNo).arg(newKey)); key = newKey; } /// Check for duplicate entry ids, avoid collisions if (m_knownElementIds.contains(key)) { static const QString newIdPattern = QStringLiteral("%1-%2"); int idx = 2; QString newKey = newIdPattern.arg(key).arg(idx); while (m_knownElementIds.contains(newKey)) newKey = newIdPattern.arg(key).arg(++idx); qCDebug(LOG_KBIBTEX_IO) << "Duplicate macro key" << key << ", using replacement key" << newKey; emit message(SeverityWarning, QString(QStringLiteral("Duplicate macro key '%1', using replacement key '%2'")).arg(key, newKey)); key = newKey; } m_knownElementIds.insert(key); if (nextToken() != tAssign) { qCCritical(LOG_KBIBTEX_IO) << "Error in parsing macro" << key << "near line" << m_lineNo << "(" << m_prevLine << endl << m_currentLine << "): Assign symbol '=' expected"; emit message(SeverityError, QString(QStringLiteral("Error in parsing macro '%1' near line %2: Assign symbol '=' expected")).arg(key).arg(m_lineNo)); return nullptr; } Macro *macro = new Macro(key); do { bool isStringKey = false; QString text = readString(isStringKey); if (text.isNull()) { qCWarning(LOG_KBIBTEX_IO) << "Error in parsing macro" << key << "near line" << m_lineNo << "(" << m_prevLine << endl << m_currentLine << "): Could not read macro's text"; emit message(SeverityError, QString(QStringLiteral("Error in parsing macro '%1' near line %2: Could not read macro's text")).arg(key).arg(m_lineNo)); delete macro; } text = EncoderLaTeX::instance().decode(bibtexAwareSimplify(text)); if (isStringKey) macro->value().append(QSharedPointer(new MacroKey(text))); else macro->value().append(QSharedPointer(new PlainText(text))); token = nextToken(); } while (token == tDoublecross); return macro; } Preamble *FileImporterBibTeX::readPreambleElement() { Token token = nextToken(); while (token != tBracketOpen) { if (token == tEOF) { qCWarning(LOG_KBIBTEX_IO) << "Error in parsing preamble near line" << m_lineNo << "(" << m_prevLine << endl << m_currentLine << "): Opening curly brace '{' expected"; emit message(SeverityError, QString(QStringLiteral("Error in parsing preamble near line %1: Opening curly brace '{' expected")).arg(m_lineNo)); return nullptr; } token = nextToken(); } Preamble *preamble = new Preamble(); do { bool isStringKey = false; QString text = readString(isStringKey); if (text.isNull()) { qCWarning(LOG_KBIBTEX_IO) << "Error in parsing preamble near line" << m_lineNo << "(" << m_prevLine << endl << m_currentLine << "): Could not read preamble's text"; emit message(SeverityError, QString(QStringLiteral("Error in parsing preamble near line %1: Could not read preamble's text")).arg(m_lineNo)); delete preamble; return nullptr; } /// Remember: strings from preamble do not get encoded, /// may contain raw LaTeX commands and code text = bibtexAwareSimplify(text); if (isStringKey) preamble->value().append(QSharedPointer<MacroKey>(new MacroKey(text))); else preamble->value().append(QSharedPointer<PlainText>(new PlainText(text))); token = nextToken(); } while (token == tDoublecross); return preamble; } Entry *FileImporterBibTeX::readEntryElement(const QString &typeString) { Token token = nextToken(); while (token != tBracketOpen) { if (token == tEOF) { qCWarning(LOG_KBIBTEX_IO) << "Error in parsing entry near line" << m_lineNo << "(" << m_prevLine << endl << m_currentLine << "): Opening curly brace '{' expected"; emit message(SeverityError, QString(QStringLiteral("Error in parsing entry near line %1: Opening curly brace '{' expected")).arg(m_lineNo)); return nullptr; } token = nextToken(); } QString id = readSimpleString(QStringLiteral(",}"), true).trimmed(); if (id.isEmpty()) { if (m_nextChar == QLatin1Char(',') || m_nextChar == QLatin1Char('}')) { /// Cope with empty ids, /// duplicates are handled further below id = QStringLiteral("EmptyId"); } else { qCWarning(LOG_KBIBTEX_IO) << "Error in parsing entry near line" << m_lineNo << ":" << m_prevLine << endl << m_currentLine << "): Could not read entry id"; emit message(SeverityError, QString(QStringLiteral("Error in parsing preambentryle near line %1: Could not read entry id")).arg(m_lineNo)); return nullptr; } } else { if (id.contains(QStringLiteral("\\")) || id.contains(QStringLiteral("{"))) { const QString newId = EncoderLaTeX::instance().decode(id); qCWarning(LOG_KBIBTEX_IO) << "Entry id" << id << "near line" << m_lineNo << "contains backslashes or curly brackets, converted to" << newId; emit message(SeverityWarning, QString(QStringLiteral("Entry id '%1' near line %2 contains backslashes or curly brackets, converted to '%3'")).arg(id).arg(m_lineNo).arg(newId)); id = newId; } - if (!EncoderLaTeX::containsOnlyAscii(id)) { + if (!Encoder::containsOnlyAscii(id)) { /// Try to avoid non-ascii characters in ids - const QString newId = EncoderLaTeX::instance().convertToPlainAscii(id); + const QString newId = Encoder::instance().convertToPlainAscii(id); qCWarning(LOG_KBIBTEX_IO) << "Entry id" << id << "near line" << m_lineNo << "contains non-ASCII characters, converted to" << newId; emit message(SeverityWarning, QString(QStringLiteral("Entry id '%1' near line %2 contains non-ASCII characters, converted to '%3'")).arg(id).arg(m_lineNo).arg(newId)); id = newId; } } static const QVector<QChar> invalidIdCharacters = {QLatin1Char('{'), QLatin1Char('}'), QLatin1Char(',')}; for (const QChar &invalidIdCharacter : invalidIdCharacters) if (id.contains(invalidIdCharacter)) { qCWarning(LOG_KBIBTEX_IO) << "Entry id" << id << "near line" << m_lineNo << "contains invalid character" << invalidIdCharacter; emit message(SeverityError, QString(QStringLiteral("Entry id '%1' near line %2 contains invalid character '%3'")).arg(id).arg(m_lineNo).arg(invalidIdCharacter)); return nullptr; } /// Check for duplicate entry ids, avoid collisions if (m_knownElementIds.contains(id)) { static const QString newIdPattern = QStringLiteral("%1-%2"); int idx = 2; QString newId = newIdPattern.arg(id).arg(idx); while (m_knownElementIds.contains(newId)) newId = newIdPattern.arg(id).arg(++idx); qCDebug(LOG_KBIBTEX_IO) << "Duplicate id" << id << "near line" << m_lineNo << ", using replacement id" << newId; emit message(SeverityInfo, QString(QStringLiteral("Duplicate id '%1' near line %2, using replacement id '%3'")).arg(id).arg(m_lineNo).arg(newId)); id = newId; } m_knownElementIds.insert(id); Entry *entry = new Entry(BibTeXEntries::instance().format(typeString, m_keywordCasing), id); token = nextToken(); do { if (token == tBracketClose) break; else if (token == tEOF) { qCWarning(LOG_KBIBTEX_IO) << "Unexpected end of data in entry" << id << "near line" << m_lineNo << ":" << m_prevLine << endl << m_currentLine; emit message(SeverityError, QString(QStringLiteral("Unexpected end of data in entry '%1' near line %2")).arg(id).arg(m_lineNo)); delete entry; return nullptr; } else if (token != tComma) { if (m_nextChar.isLetter()) { qCWarning(LOG_KBIBTEX_IO) << "Error in parsing entry" << id << "near line" << m_lineNo << "(" << m_prevLine << endl << m_currentLine << "): Comma symbol ',' expected but got character" << m_nextChar << "(token" << tokenidToString(token) << ")"; emit message(SeverityError, QString(QStringLiteral("Error in parsing entry '%1' near line %2: Comma symbol ',' expected but got character '%3' (token %4)")).arg(id).arg(m_lineNo).arg(m_nextChar).arg(tokenidToString(token))); } else if (m_nextChar.isPrint()) { qCWarning(LOG_KBIBTEX_IO) << "Error in parsing entry" << id << "near line" << m_lineNo << "(" << m_prevLine << endl << m_currentLine << "): Comma symbol ',' expected but got character" << m_nextChar << "(" << QString(QStringLiteral("0x%1")).arg(m_nextChar.unicode(), 4, 16, QLatin1Char('0')) << ", token" << tokenidToString(token) << ")"; emit message(SeverityError, QString(QStringLiteral("Error in parsing entry '%1' near line %2: Comma symbol ',' expected but got character '%3' (0x%4, token %5)")).arg(id).arg(m_lineNo).arg(m_nextChar).arg(m_nextChar.unicode(), 4, 16, QLatin1Char('0')).arg(tokenidToString(token))); } else { qCWarning(LOG_KBIBTEX_IO) << "Error in parsing entry" << id << "near line" << m_lineNo << "(" << m_prevLine << endl << m_currentLine << "): Comma symbol (,) expected but got character" << QString(QStringLiteral("0x%1")).arg(m_nextChar.unicode(), 4, 16, QLatin1Char('0')) << "(token" << tokenidToString(token) << ")"; emit message(SeverityError, QString(QStringLiteral("Error in parsing entry '%1' near line %2: Comma symbol ',' expected but got character 0x%3 (token %4)")).arg(id).arg(m_lineNo).arg(m_nextChar.unicode(), 4, 16, QLatin1Char('0')).arg(tokenidToString(token))); } delete entry; return nullptr; } QString keyName = BibTeXFields::instance().format(readSimpleString(), m_keywordCasing); if (keyName.isEmpty()) { token = nextToken(); if (token == tBracketClose) { /// Most often it is the case that the previous line ended with a comma, /// implying that this entry continues, but instead it gets closed by /// a closing curly bracket. qCDebug(LOG_KBIBTEX_IO) << "Issue while parsing entry" << id << "near line" << m_lineNo << "(" << m_prevLine << endl << m_currentLine << "): Last key-value pair ended with a non-conformant comma, ignoring that"; emit message(SeverityInfo, QString(QStringLiteral("Issue while parsing entry '%1' near line %2: Last key-value pair ended with a non-conformant comma, ignoring that")).arg(id).arg(m_lineNo)); break; } else { /// Something looks terribly wrong qCWarning(LOG_KBIBTEX_IO) << "Error in parsing entry" << id << "near line" << m_lineNo << "(" << m_prevLine << endl << m_currentLine << "): Closing curly bracket expected, but found" << tokenidToString(token); emit message(SeverityError, QString(QStringLiteral("Error in parsing entry '%1' near line %2: Closing curly bracket expected, but found %3")).arg(id).arg(m_lineNo).arg(tokenidToString(token))); delete entry; return nullptr; } } /// Try to avoid non-ascii characters in keys - const QString newkeyName = EncoderLaTeX::instance().convertToPlainAscii(keyName); + const QString newkeyName = Encoder::instance().convertToPlainAscii(keyName); if (newkeyName != keyName) { qCWarning(LOG_KBIBTEX_IO) << "Field name " << keyName << "near line" << m_lineNo << "contains non-ASCII characters, converted to" << newkeyName; emit message(SeverityWarning, QString(QStringLiteral("Field name '%1' near line %2 contains non-ASCII characters, converted to '%3'")).arg(keyName).arg(m_lineNo).arg(newkeyName)); keyName = newkeyName; } token = nextToken(); if (token != tAssign) { qCWarning(LOG_KBIBTEX_IO) << "Error in parsing entry" << id << ", field name" << keyName << "near line" << m_lineNo << "(" << m_prevLine << endl << m_currentLine << "): Assign symbol '=' expected after field name"; emit message(SeverityError, QString(QStringLiteral("Error in parsing entry '%1', field name '%2' near line %3: Assign symbol '=' expected after field name")).arg(id, keyName).arg(m_lineNo)); delete entry; return nullptr; } Value value; /// check for duplicate fields if (entry->contains(keyName)) { if (keyName.toLower() == Entry::ftKeywords || keyName.toLower() == Entry::ftUrl) { /// Special handling of keywords and URLs: instead of using fallback names /// like "keywords2", "keywords3", ..., append new keywords to /// already existing keyword value value = entry->value(keyName); } else if (m_keysForPersonDetection.contains(keyName.toLower())) { /// Special handling of authors and editors: instead of using fallback names /// like "author2", "author3", ..., append new authors to /// already existing author value value = entry->value(keyName); } else { int i = 2; QString appendix = QString::number(i); while (entry->contains(keyName + appendix)) { ++i; appendix = QString::number(i); } qCDebug(LOG_KBIBTEX_IO) << "Entry" << id << "already contains a key" << keyName << "near line" << m_lineNo << "(" << m_prevLine << endl << m_currentLine << "), using" << (keyName + appendix); emit message(SeverityWarning, QString(QStringLiteral("Entry '%1' already contains a key '%2' near line %4, using '%3'")).arg(id, keyName, keyName + appendix).arg(m_lineNo)); keyName += appendix; } } token = readValue(value, keyName); if (token != tBracketClose && token != tComma) { qCWarning(LOG_KBIBTEX_IO) << "Failed to read value in entry" << id << ", field name" << keyName << "near line" << m_lineNo << "(" << m_prevLine << endl << m_currentLine << ")"; emit message(SeverityError, QString(QStringLiteral("Failed to read value in entry '%1', field name '%2' near line %3")).arg(id, keyName).arg(m_lineNo)); delete entry; return nullptr; } entry->insert(keyName, value); } while (true); return entry; } FileImporterBibTeX::Token FileImporterBibTeX::nextToken() { if (!skipWhiteChar()) { /// Some error occurred while reading from data stream return tEOF; } Token result = tUnknown; switch (m_nextChar.toLatin1()) { case '@': result = tAt; break; case '{': case '(': result = tBracketOpen; break; case '}': case ')': result = tBracketClose; break; case ',': result = tComma; break; case '=': result = tAssign; break; case '#': result = tDoublecross; break; default: if (m_textStream->atEnd()) result = tEOF; } if (m_nextChar != QLatin1Char('%')) { /// Unclean solution, but necessary for comments /// that have a percent sign as a prefix readChar(); } return result; } QString FileImporterBibTeX::readString(bool &isStringKey) { /// Most often it is not a string key isStringKey = false; if (!skipWhiteChar()) { /// Some error occurred while reading from data stream return QString::null; } switch (m_nextChar.toLatin1()) { case '{': case '(': { ++m_statistics.countCurlyBrackets; const QString result = readBracketString(); return result; } case '"': { ++m_statistics.countQuotationMarks; const QString result = readQuotedString(); return result; } default: isStringKey = true; const QString result = readSimpleString(); return result; } } QString FileImporterBibTeX::readSimpleString(const QString &until, const bool readNestedCurlyBrackets) { static const QString extraAlphaNumChars = QString(QStringLiteral("?'`-_:.+/$\\\"&")); QString result; ///< 'result' is Null on purpose: simple strings cannot be empty in contrast to e.g. quoted strings if (!skipWhiteChar()) { /// Some error occurred while reading from data stream return QString::null; } QChar prevChar = QChar(0x00); while (!m_nextChar.isNull()) { if (readNestedCurlyBrackets && m_nextChar == QLatin1Char('{') && prevChar != QLatin1Char('\\')) { int depth = 1; while (depth > 0) { result.append(m_nextChar); prevChar = m_nextChar; if (!readChar()) return result; if (m_nextChar == QLatin1Char('{') && prevChar != QLatin1Char('\\')) ++depth; else if (m_nextChar == QLatin1Char('}') && prevChar != QLatin1Char('\\')) --depth; } result.append(m_nextChar); prevChar = m_nextChar; if (!readChar()) return result; } const ushort nextCharUnicode = m_nextChar.unicode(); if (!until.isEmpty()) { /// Variable "until" has user-defined value if (m_nextChar == QLatin1Char('\n') || m_nextChar == QLatin1Char('\r') || until.contains(m_nextChar)) { /// Force break on line-breaks or if one of the "until" chars has been read break; } else { /// Append read character to final result result.append(m_nextChar); } } else if ((nextCharUnicode >= (ushort)'a' && nextCharUnicode <= (ushort)'z') || (nextCharUnicode >= (ushort)'A' && nextCharUnicode <= (ushort)'Z') || (nextCharUnicode >= (ushort)'0' && nextCharUnicode <= (ushort)'9') || extraAlphaNumChars.contains(m_nextChar)) { /// Accept default set of alpha-numeric characters result.append(m_nextChar); } else break; prevChar = m_nextChar; if (!readChar()) break; } return result; } QString FileImporterBibTeX::readQuotedString() { QString result(0, QChar()); ///< Construct an empty but non-null string Q_ASSERT_X(m_nextChar == QLatin1Char('"'), "QString FileImporterBibTeX::readQuotedString()", "m_nextChar is not '\"'"); if (!readChar()) return QString::null; while (!m_nextChar.isNull()) { if (m_nextChar == QLatin1Char('"') && m_prevChar != QLatin1Char('\\') && m_prevChar != QLatin1Char('{')) break; else result.append(m_nextChar); if (!readChar()) return QString::null; } if (!readChar()) return QString::null; /// Remove protection around quotation marks result.replace(QStringLiteral("{\"}"), QStringLiteral("\"")); return result; } QString FileImporterBibTeX::readBracketString() { static const QChar backslash = QLatin1Char('\\'); QString result(0, QChar()); ///< Construct an empty but non-null string const QChar openingBracket = m_nextChar; const QChar closingBracket = openingBracket == QLatin1Char('{') ? QLatin1Char('}') : (openingBracket == QLatin1Char('(') ? QLatin1Char(')') : QChar()); Q_ASSERT_X(!closingBracket.isNull(), "QString FileImporterBibTeX::readBracketString()", "openingBracket==m_nextChar is neither '{' nor '('"); int counter = 1; if (!readChar()) return QString::null; while (!m_nextChar.isNull()) { if (m_nextChar == openingBracket && m_prevChar != backslash) ++counter; else if (m_nextChar == closingBracket && m_prevChar != backslash) --counter; if (counter == 0) { break; } else result.append(m_nextChar); if (!readChar()) return QString::null; } if (!readChar()) return QString::null; return result; } FileImporterBibTeX::Token FileImporterBibTeX::readValue(Value &value, const QString &key) { Token token = tUnknown; const QString iKey = key.toLower(); static const QSet<QString> verbatimKeys {Entry::ftColor.toLower(), Entry::ftCrossRef.toLower(), Entry::ftXData.toLower()}; do { bool isStringKey = false; const QString rawText = readString(isStringKey); if (rawText.isNull()) return tEOF; QString text = EncoderLaTeX::instance().decode(rawText); /// for all entries except for abstracts ... if (iKey != Entry::ftAbstract && !(iKey.startsWith(Entry::ftUrl) && !iKey.startsWith(Entry::ftUrlDate)) && !iKey.startsWith(Entry::ftLocalFile) && !iKey.startsWith(Entry::ftFile)) { /// ... remove redundant spaces including newlines text = bibtexAwareSimplify(text); } /// abstracts will keep their formatting (regarding line breaks) /// as requested by Thomas Jensch via mail (20 October 2010) /// Maintain statistics on if (book) titles are protected /// by surrounding curly brackets if (iKey == Entry::ftTitle || iKey == Entry::ftBookTitle) { if (text[0] == QLatin1Char('{') && text[text.length() - 1] == QLatin1Char('}')) ++m_statistics.countProtectedTitle; else ++m_statistics.countUnprotectedTitle; } if (m_keysForPersonDetection.contains(iKey)) { if (isStringKey) value.append(QSharedPointer<MacroKey>(new MacroKey(text))); else { CommaContainment comma = ccContainsComma; parsePersonList(text, value, &comma, m_lineNo, this); /// Update statistics on name formatting if (comma == ccContainsComma) ++m_statistics.countLastNameFirst; else ++m_statistics.countFirstNameFirst; } } else if (iKey == Entry::ftPages) { static const QRegularExpression rangeInAscii(QStringLiteral("\\s*--?\\s*")); text.replace(rangeInAscii, QChar(0x2013)); if (isStringKey) value.append(QSharedPointer<MacroKey>(new MacroKey(text))); else value.append(QSharedPointer<PlainText>(new PlainText(text))); } else if ((iKey.startsWith(Entry::ftUrl) && !iKey.startsWith(Entry::ftUrlDate)) || iKey.startsWith(Entry::ftLocalFile) || iKey.startsWith(Entry::ftFile) || iKey == QStringLiteral("ee") || iKey == QStringLiteral("biburl")) { if (isStringKey) value.append(QSharedPointer<MacroKey>(new MacroKey(text))); else { /// Assumption: in fields like Url or LocalFile, file names are separated by ; static const QRegularExpression semicolonSpace = QRegularExpression(QStringLiteral("[;]\\s*")); const QStringList fileList = rawText.split(semicolonSpace, QString::SkipEmptyParts); for (const QString &filename : fileList) { value.append(QSharedPointer<VerbatimText>(new VerbatimText(filename))); } } } else if (iKey.startsWith(Entry::ftFile)) { if (isStringKey) value.append(QSharedPointer<MacroKey>(new MacroKey(text))); else { /// Assumption: this field was written by Mendeley, which uses /// a very strange format for file names: /// :C$\backslash$:/Users/BarisEvrim/Documents/Mendeley Desktop/GeversPAMI10.pdf:pdf /// :: /// :Users/Fred/Library/Application Support/Mendeley Desktop/Downloaded/Hasselman et al. - 2011 - (Still) Growing Up What should we be a realist about in the cognitive and behavioural sciences Abstract.pdf:pdf const QRegularExpressionMatch match = KBibTeX::mendeleyFileRegExp.match(rawText); if (match.hasMatch()) { static const QString backslashLaTeX = QStringLiteral("$\\backslash$"); QString filename = match.captured(1).remove(backslashLaTeX); if (filename.startsWith(QStringLiteral("home/")) || filename.startsWith(QStringLiteral("Users/"))) { /// Mendeley doesn't have a slash at the beginning of absolute paths, /// so, insert one /// See bug 19833, comment 5: https://gna.org/bugs/index.php?19833#comment5 filename.prepend(QLatin1Char('/')); } value.append(QSharedPointer<VerbatimText>(new VerbatimText(filename))); } else value.append(QSharedPointer<VerbatimText>(new VerbatimText(text))); } } else if (iKey == Entry::ftMonth) { if (isStringKey) { static const QRegularExpression monthThreeChars(QStringLiteral("^[a-z]{3}"), QRegularExpression::CaseInsensitiveOption); if (monthThreeChars.match(text).hasMatch()) text = text.left(3).toLower(); value.append(QSharedPointer<MacroKey>(new MacroKey(text))); } else value.append(QSharedPointer<PlainText>(new PlainText(text))); } else if (iKey.startsWith(Entry::ftDOI)) { if (isStringKey) value.append(QSharedPointer<MacroKey>(new MacroKey(text))); else { /// Take care of "; " which separates multiple DOIs, but which may baffle the regexp QString preprocessedText = rawText; preprocessedText.replace(QStringLiteral("; "), QStringLiteral(" ")); /// Extract everything that looks like a DOI using a regular expression, /// ignore everything else QRegularExpressionMatchIterator doiRegExpMatchIt = KBibTeX::doiRegExp.globalMatch(preprocessedText); while (doiRegExpMatchIt.hasNext()) { const QRegularExpressionMatch doiRegExpMatch = doiRegExpMatchIt.next(); value.append(QSharedPointer<VerbatimText>(new VerbatimText(doiRegExpMatch.captured(0)))); } } } else if (iKey == Entry::ftKeywords) { if (isStringKey) value.append(QSharedPointer<MacroKey>(new MacroKey(text))); else { char splitChar; const QList<QSharedPointer<Keyword> > keywords = splitKeywords(text, &splitChar); for (const auto &keyword : keywords) value.append(keyword); /// Memorize (some) split characters for later use /// (e.g. when writing file again) if (splitChar == ';') m_statistics.mostRecentListSeparator = QStringLiteral("; "); else if (splitChar == ',') m_statistics.mostRecentListSeparator = QStringLiteral(", "); } } else if (verbatimKeys.contains(iKey)) { if (isStringKey) value.append(QSharedPointer<MacroKey>(new MacroKey(text))); else value.append(QSharedPointer<VerbatimText>(new VerbatimText(rawText))); } else { if (isStringKey) value.append(QSharedPointer<MacroKey>(new MacroKey(text))); else value.append(QSharedPointer<PlainText>(new PlainText(text))); } token = nextToken(); } while (token == tDoublecross); return token; } bool FileImporterBibTeX::readChar() { /// Memorize previous char m_prevChar = m_nextChar; if (m_textStream->atEnd()) { /// At end of data stream m_nextChar = QChar::Null; return false; } /// Read next char *m_textStream >> m_nextChar; /// Test for new line if (m_nextChar == QLatin1Char('\n')) { /// Update variables tracking line numbers and line content ++m_lineNo; m_prevLine = m_currentLine; m_currentLine.clear(); } else { /// Add read char to current line m_currentLine.append(m_nextChar); } return true; } bool FileImporterBibTeX::readCharUntil(const QString &until) { Q_ASSERT_X(!until.isEmpty(), "bool FileImporterBibTeX::readCharUntil(const QString &until)", "\"until\" is empty or invalid"); bool result = true; while (!until.contains(m_nextChar) && (result = readChar())); return result; } bool FileImporterBibTeX::skipWhiteChar() { bool result = true; while ((m_nextChar.isSpace() || m_nextChar == QLatin1Char('\t') || m_nextChar == QLatin1Char('\n') || m_nextChar == QLatin1Char('\r')) && result) result = readChar(); return result; } QString FileImporterBibTeX::readLine() { QString result; while (m_nextChar != QLatin1Char('\n') && m_nextChar != QLatin1Char('\r') && readChar()) result.append(m_nextChar); return result; } QList<QSharedPointer<Keyword> > FileImporterBibTeX::splitKeywords(const QString &text, char *usedSplitChar) { QList<QSharedPointer<Keyword> > result; static const QHash<char, QRegularExpression> splitAlong = { {'\n', QRegularExpression(QStringLiteral("\\s*\n\\s*"))}, {';', QRegularExpression(QStringLiteral("\\s*;\\s*"))}, {',', QRegularExpression(QString("\\s*,\\s*"))} }; if (usedSplitChar != nullptr) *usedSplitChar = '\0'; for (auto it = splitAlong.constBegin(); it != splitAlong.constEnd(); ++it) { /// check if character is contained in text (should be cheap to test) if (text.contains(QLatin1Char(it.key()))) { /// split text along a pattern like spaces-splitchar-spaces /// extract keywords static const QRegularExpression unneccessarySpacing(QStringLiteral("[ \n\r\t]+")); const QStringList keywords = text.split(it.value(), QString::SkipEmptyParts).replaceInStrings(unneccessarySpacing, QStringLiteral(" ")); /// build QList of Keyword objects from keywords for (const QString &keyword : keywords) { result.append(QSharedPointer<Keyword>(new Keyword(keyword))); } /// Memorize (some) split characters for later use /// (e.g. when writing file again) if (usedSplitChar != nullptr) *usedSplitChar = it.key(); /// no more splits necessary break; } } /// no split was performed, so whole text must be a single keyword if (result.isEmpty()) result.append(QSharedPointer<Keyword>(new Keyword(text))); return result; } QList<QSharedPointer<Person> > FileImporterBibTeX::splitNames(const QString &text, const int line_number, QObject *parent) { /// Case: Smith, John and Johnson, Tim /// Case: Smith, John and Fulkerson, Ford and Johnson, Tim /// Case: Smith, John, Fulkerson, Ford, and Johnson, Tim /// Case: John Smith and Tim Johnson /// Case: John Smith and Ford Fulkerson and Tim Johnson /// Case: Smith, John, Johnson, Tim /// Case: Smith, John, Fulkerson, Ford, Johnson, Tim /// Case: John Smith, Tim Johnson /// Case: John Smith, Tim Johnson, Ford Fulkerson /// Case: Smith, John ; Johnson, Tim ; Fulkerson, Ford (IEEE Xplore) /// German case: Robert A. Gehring und Bernd Lutterbeck QString internalText = text; /// Remove invalid characters such as dots or (double) daggers for footnotes static const QList<QChar> invalidChars {QChar(0x00b7), QChar(0x2020), QChar(0x2217), QChar(0x2021), QChar(0x002a), QChar(0x21d1) /** Upwards double arrow */}; for (const auto &invalidChar : invalidChars) /// Replacing daggers with commas ensures that they act as persons' names separator internalText = internalText.replace(invalidChar, QChar(',')); /// Remove numbers to footnotes static const QRegularExpression numberFootnoteRegExp(QStringLiteral("(\\w)\\d+\\b")); internalText = internalText.replace(numberFootnoteRegExp, QStringLiteral("\\1")); /// Remove academic degrees static const QRegularExpression academicDegreesRegExp(QStringLiteral("(,\\s*)?(MA|PhD)\\b")); internalText = internalText.remove(academicDegreesRegExp); /// Remove email addresses static const QRegularExpression emailAddressRegExp(QStringLiteral("\\b[a-zA-Z0-9][a-zA-Z0-9._-]+[a-zA-Z0-9]@[a-z0-9][a-z0-9-]*([.][a-z0-9-]+)*([.][a-z]+)+\\b")); internalText = internalText.remove(emailAddressRegExp); /// Split input string into tokens which are either name components (first or last name) /// or full names (composed of first and last name), depending on the input string's structure static const QRegularExpression split(QStringLiteral("\\s*([,]+|[,]*\\b[au]nd\\b|[;]|&|\\n|\\s{4,})\\s*")); const QStringList authorTokenList = internalText.split(split, QString::SkipEmptyParts); bool containsSpace = true; for (QStringList::ConstIterator it = authorTokenList.constBegin(); containsSpace && it != authorTokenList.constEnd(); ++it) containsSpace = (*it).contains(QChar(' ')); QList<QSharedPointer<Person> > result; result.reserve(authorTokenList.size()); if (containsSpace) { /// Tokens look like "John Smith" for (const QString &authorToken : authorTokenList) { QSharedPointer<Person> person = personFromString(authorToken, nullptr, line_number, parent); if (!person.isNull()) result.append(person); } } else { /// Tokens look like "Smith" or "John" /// Assumption: two consecutive tokens form a name for (QStringList::ConstIterator it = authorTokenList.constBegin(); it != authorTokenList.constEnd(); ++it) { QString lastname = *it; ++it; if (it != authorTokenList.constEnd()) { lastname += QStringLiteral(", ") + (*it); QSharedPointer<Person> person = personFromString(lastname, nullptr, line_number, parent); if (!person.isNull()) result.append(person); } else break; } } return result; } void FileImporterBibTeX::parsePersonList(const QString &text, Value &value, const int line_number, QObject *parent) { parsePersonList(text, value, nullptr, line_number, parent); } void FileImporterBibTeX::parsePersonList(const QString &text, Value &value, CommaContainment *comma, const int line_number, QObject *parent) { static const QString tokenAnd = QStringLiteral("and"); static const QString tokenOthers = QStringLiteral("others"); static QStringList tokens; contextSensitiveSplit(text, tokens); if (tokens.count() > 0) { if (tokens[0] == tokenAnd) { qCInfo(LOG_KBIBTEX_IO) << "Person list starts with" << tokenAnd << "near line" << line_number; if (parent != nullptr) QMetaObject::invokeMethod(parent, "message", Qt::DirectConnection, QGenericReturnArgument(), Q_ARG(FileImporter::MessageSeverity, SeverityWarning), Q_ARG(QString, QString(QStringLiteral("Person list starts with 'and' near line %1")).arg(line_number))); } else if (tokens.count() > 1 && tokens[tokens.count() - 1] == tokenAnd) { qCInfo(LOG_KBIBTEX_IO) << "Person list ends with" << tokenAnd << "near line" << line_number; if (parent != nullptr) QMetaObject::invokeMethod(parent, "message", Qt::DirectConnection, QGenericReturnArgument(), Q_ARG(FileImporter::MessageSeverity, SeverityWarning), Q_ARG(QString, QString(QStringLiteral("Person list ends with 'and' near line %1")).arg(line_number))); } if (tokens[0] == tokenOthers) { qCInfo(LOG_KBIBTEX_IO) << "Person list starts with" << tokenOthers << "near line" << line_number; if (parent != nullptr) QMetaObject::invokeMethod(parent, "message", Qt::DirectConnection, QGenericReturnArgument(), Q_ARG(FileImporter::MessageSeverity, SeverityWarning), Q_ARG(QString, QString(QStringLiteral("Person list starts with 'others' near line %1")).arg(line_number))); } else if (tokens[tokens.count() - 1] == tokenOthers && (tokens.count() < 3 || tokens[tokens.count() - 2] != tokenAnd)) { qCInfo(LOG_KBIBTEX_IO) << "Person list ends with" << tokenOthers << "but is not preceeded with name and" << tokenAnd << "near line" << line_number; if (parent != nullptr) QMetaObject::invokeMethod(parent, "message", Qt::DirectConnection, QGenericReturnArgument(), Q_ARG(FileImporter::MessageSeverity, SeverityWarning), Q_ARG(QString, QString(QStringLiteral("Person list ends with 'others' but is not preceeded with name and 'and' near line %1")).arg(line_number))); } } int nameStart = 0; QString prevToken; for (int i = 0; i < tokens.count(); ++i) { if (tokens[i] == tokenAnd) { if (prevToken == tokenAnd) { qCInfo(LOG_KBIBTEX_IO) << "Two subsequent" << tokenAnd << "found in person list near line" << line_number; if (parent != nullptr) QMetaObject::invokeMethod(parent, "message", Qt::DirectConnection, QGenericReturnArgument(), Q_ARG(FileImporter::MessageSeverity, SeverityWarning), Q_ARG(QString, QString(QStringLiteral("Two subsequent 'and' found in person list near line %1")).arg(line_number))); } else if (nameStart < i) { const QSharedPointer<Person> person = personFromTokenList(tokens.mid(nameStart, i - nameStart), comma, line_number, parent); if (!person.isNull()) value.append(person); else { qCInfo(LOG_KBIBTEX_IO) << "Text" << tokens.mid(nameStart, i - nameStart).join(' ') << "does not form a name near line" << line_number; if (parent != nullptr) QMetaObject::invokeMethod(parent, "message", Qt::DirectConnection, QGenericReturnArgument(), Q_ARG(FileImporter::MessageSeverity, SeverityWarning), Q_ARG(QString, QString(QStringLiteral("Text '%1' does not form a name near line %2")).arg(tokens.mid(nameStart, i - nameStart).join(' ')).arg(line_number))); } } else { qCInfo(LOG_KBIBTEX_IO) << "Found" << tokenAnd << "but no name before it near line" << line_number; if (parent != nullptr) QMetaObject::invokeMethod(parent, "message", Qt::DirectConnection, QGenericReturnArgument(), Q_ARG(FileImporter::MessageSeverity, SeverityWarning), Q_ARG(QString, QString(QStringLiteral("Found 'and' but no name before it near line %1")).arg(line_number))); } nameStart = i + 1; } else if (tokens[i] == tokenOthers) { if (i < tokens.count() - 1) { qCInfo(LOG_KBIBTEX_IO) << "Special word" << tokenOthers << "found before last position in person name near line" << line_number; if (parent != nullptr) QMetaObject::invokeMethod(parent, "message", Qt::DirectConnection, QGenericReturnArgument(), Q_ARG(FileImporter::MessageSeverity, SeverityWarning), Q_ARG(QString, QString(QStringLiteral("Special word 'others' found before last position in person name near line %1")).arg(line_number))); } else value.append(QSharedPointer<PlainText>(new PlainText(QStringLiteral("others")))); nameStart = tokens.count() + 1; } prevToken = tokens[i]; } if (nameStart < tokens.count()) { const QSharedPointer<Person> person = personFromTokenList(tokens.mid(nameStart), comma, line_number, parent); if (!person.isNull()) value.append(person); else { qCInfo(LOG_KBIBTEX_IO) << "Text" << tokens.mid(nameStart).join(' ') << "does not form a name near line" << line_number; if (parent != nullptr) QMetaObject::invokeMethod(parent, "message", Qt::DirectConnection, QGenericReturnArgument(), Q_ARG(FileImporter::MessageSeverity, SeverityWarning), Q_ARG(QString, QString(QStringLiteral("Text '%1' does not form a name near line %2")).arg(tokens.mid(nameStart).join(' ')).arg(line_number))); } } } QSharedPointer<Person> FileImporterBibTeX::personFromString(const QString &name, const int line_number, QObject *parent) { return personFromString(name, nullptr, line_number, parent); } QSharedPointer<Person> FileImporterBibTeX::personFromString(const QString &name, CommaContainment *comma, const int line_number, QObject *parent) { static QStringList tokens; contextSensitiveSplit(name, tokens); return personFromTokenList(tokens, comma, line_number, parent); } QSharedPointer<Person> FileImporterBibTeX::personFromTokenList(const QStringList &tokens, CommaContainment *comma, const int line_number, QObject *parent) { if (comma != nullptr) *comma = ccNoComma; /// Simple case: provided list of tokens is empty, return invalid Person if (tokens.isEmpty()) return QSharedPointer<Person>(); /** * Sequence of tokens may contain somewhere a comma, like * "Tuckwell," "Peter". In this case, fill two string lists: * one with tokens before the comma, one with tokens after the * comma (excluding the comma itself). Example: * partA = ( "Tuckwell" ); partB = ( "Peter" ); partC = ( "Jr." ) * If a comma was found, boolean variable gotComma is set. */ QStringList partA, partB, partC; int commaCount = 0; for (const QString &token : tokens) { /// Position where comma was found, or -1 if no comma in token int p = -1; if (commaCount < 2) { /// Only check if token contains comma /// if no comma was found before int bracketCounter = 0; for (int i = 0; i < token.length(); ++i) { /// Consider opening curly brackets if (token[i] == QChar('{')) ++bracketCounter; /// Consider closing curly brackets else if (token[i] == QChar('}')) --bracketCounter; /// Only if outside any open curly bracket environments /// consider comma characters else if (bracketCounter == 0 && token[i] == QChar(',')) { /// Memorize comma's position and break from loop p = i; break; } else if (bracketCounter < 0) { /// Should never happen: more closing brackets than opening ones qCWarning(LOG_KBIBTEX_IO) << "Opening and closing brackets do not match near line" << line_number; if (parent != nullptr) QMetaObject::invokeMethod(parent, "message", Qt::DirectConnection, QGenericReturnArgument(), Q_ARG(FileImporter::MessageSeverity, SeverityWarning), Q_ARG(QString, QString(QStringLiteral("Opening and closing brackets do not match near line %1")).arg(line_number))); } } } if (p >= 0) { if (commaCount == 0) { if (p > 0) partA.append(token.left(p)); if (p < token.length() - 1) partB.append(token.mid(p + 1)); } else if (commaCount == 1) { if (p > 0) partB.append(token.left(p)); if (p < token.length() - 1) partC.append(token.mid(p + 1)); } ++commaCount; } else if (commaCount == 0) partA.append(token); else if (commaCount == 1) partB.append(token); else if (commaCount == 2) partC.append(token); } if (commaCount > 0) { if (comma != nullptr) *comma = ccContainsComma; return QSharedPointer<Person>(new Person(partC.isEmpty() ? partB.join(QChar(' ')) : partC.join(QChar(' ')), partA.join(QChar(' ')), partC.isEmpty() ? QString() : partB.join(QChar(' ')))); } /** * PubMed uses a special writing style for names, where the * last name is followed by single capital letters, each being * the first letter of each first name. Example: Tuckwell P H * So, check how many single capital letters are at the end of * the given token list */ partA.clear(); partB.clear(); bool singleCapitalLetters = true; QStringList::ConstIterator it = tokens.constEnd(); while (it != tokens.constBegin()) { --it; if (singleCapitalLetters && it->length() == 1 && it->at(0).isUpper()) partB.prepend(*it); else { singleCapitalLetters = false; partA.prepend(*it); } } if (!partB.isEmpty()) { /// Name was actually given in PubMed format return QSharedPointer<Person>(new Person(partB.join(QChar(' ')), partA.join(QChar(' ')))); } /** * Normally, the last upper case token in a name is the last name * (last names consisting of multiple space-separated parts *have* * to be protected by {...}), but some languages have fill words * in lower case belonging to the last name as well (example: "van"). * In addition, some languages have capital case letters as well * (example: "Di Cosmo"). * Exception: Special keywords such as "Jr." can be appended to the * name, not counted as part of the last name. */ partA.clear(); partB.clear(); partC.clear(); static const QSet<QString> capitalCaseLastNameFragments {QStringLiteral("Di")}; it = tokens.constEnd(); while (it != tokens.constBegin()) { --it; if (partB.isEmpty() && (it->toLower().startsWith(QStringLiteral("jr")) || it->toLower().startsWith(QStringLiteral("sr")) || it->toLower().startsWith(QStringLiteral("iii")))) /// handle name suffices like "Jr" or "III." partC.prepend(*it); else if (partB.isEmpty() || it->at(0).isLower() || capitalCaseLastNameFragments.contains(*it)) partB.prepend(*it); else partA.prepend(*it); } if (!partB.isEmpty()) { /// Name was actually like "Peter Ole van der Tuckwell", /// split into "Peter Ole" and "van der Tuckwell" return QSharedPointer<Person>(new Person(partA.join(QChar(' ')), partB.join(QChar(' ')), partC.isEmpty() ? QString() : partC.join(QChar(' ')))); } qCWarning(LOG_KBIBTEX_IO) << "Don't know how to handle name" << tokens.join(QLatin1Char(' ')) << "near line" << line_number; if (parent != nullptr) QMetaObject::invokeMethod(parent, "message", Qt::DirectConnection, QGenericReturnArgument(), Q_ARG(FileImporter::MessageSeverity, SeverityWarning), Q_ARG(QString, QString(QStringLiteral("Don't know how to handle name '%1' near line %2")).arg(tokens.join(QLatin1Char(' '))).arg(line_number))); return QSharedPointer<Person>(); } void FileImporterBibTeX::contextSensitiveSplit(const QString &text, QStringList &segments) { int bracketCounter = 0; ///< keep track of opening and closing brackets: {...} QString buffer; int len = text.length(); segments.clear(); ///< empty list for results before proceeding for (int pos = 0; pos < len; ++pos) { if (text[pos] == '{') ++bracketCounter; else if (text[pos] == '}') --bracketCounter; if (text[pos].isSpace() && bracketCounter == 0) { if (!buffer.isEmpty()) { segments.append(buffer); buffer.clear(); } } else buffer.append(text[pos]); } if (!buffer.isEmpty()) segments.append(buffer); } QString FileImporterBibTeX::bibtexAwareSimplify(const QString &text) { QString result; int i = 0; /// Consume initial spaces ... while (i < text.length() && text[i].isSpace()) ++i; /// ... but if there have been spaces (i.e. i>0), then record a single space only if (i > 0) result.append(QStringLiteral(" ")); while (i < text.length()) { /// Consume non-spaces while (i < text.length() && !text[i].isSpace()) { result.append(text[i]); ++i; } /// String may end with a non-space if (i >= text.length()) break; /// Consume spaces, ... while (i < text.length() && text[i].isSpace()) ++i; /// ... but record only a single space result.append(QStringLiteral(" ")); } return result; } bool FileImporterBibTeX::evaluateParameterComments(QTextStream *textStream, const QString &line, File *file) { /// Assertion: variable "line" is all lower-case /** check if this file requests a special encoding */ if (line.startsWith(QStringLiteral("@comment{x-kbibtex-encoding=")) && line.endsWith(QLatin1Char('}'))) { const QString encoding = line.mid(28, line.length() - 29).toLower(); textStream->setCodec(encoding.toLower() == QStringLiteral("latex") ? "us-ascii" : encoding.toLatin1()); file->setProperty(File::Encoding, encoding.toLower() == QStringLiteral("latex") ? encoding : QString::fromLatin1(textStream->codec()->name())); return true; } else if (line.startsWith(QStringLiteral("@comment{x-kbibtex-personnameformatting=")) && line.endsWith(QLatin1Char('}'))) { // TODO usage of x-kbibtex-personnameformatting is deprecated, // as automatic detection is in place QString personNameFormatting = line.mid(40, line.length() - 41); file->setProperty(File::NameFormatting, personNameFormatting); return true; } else if (line.startsWith(QStringLiteral("% encoding:"))) { /// Interprete JabRef's encoding information QString encoding = line.mid(12); qCDebug(LOG_KBIBTEX_IO) << "Using JabRef's encoding:" << encoding; textStream->setCodec(encoding.toLatin1()); file->setProperty(File::Encoding, QString::fromLatin1(textStream->codec()->name())); return true; } return false; } QString FileImporterBibTeX::tokenidToString(Token token) { switch (token) { case tAt: return QString(QStringLiteral("At")); case tBracketClose: return QString(QStringLiteral("BracketClose")); case tBracketOpen: return QString(QStringLiteral("BracketOpen")); case tAlphaNumText: return QString(QStringLiteral("AlphaNumText")); case tAssign: return QString(QStringLiteral("Assign")); case tComma: return QString(QStringLiteral("Comma")); case tDoublecross: return QString(QStringLiteral("Doublecross")); case tEOF: return QString(QStringLiteral("EOF")); case tUnknown: return QString(QStringLiteral("Unknown")); default: return QString(QStringLiteral("<Unknown>")); } } void FileImporterBibTeX::setCommentHandling(CommentHandling commentHandling) { m_commentHandling = commentHandling; } diff --git a/src/networking/onlinesearch/onlinesearchabstract.cpp b/src/networking/onlinesearch/onlinesearchabstract.cpp index da266529..6bbe3559 100644 --- a/src/networking/onlinesearch/onlinesearchabstract.cpp +++ b/src/networking/onlinesearch/onlinesearchabstract.cpp @@ -1,677 +1,677 @@ /*************************************************************************** * Copyright (C) 2004-2019 by Thomas Fischer <fischer@unix-ag.uni-kl.de> * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program; if not, see <https://www.gnu.org/licenses/>. * ***************************************************************************/ #include "onlinesearchabstract.h" #include <QFileInfo> #include <QNetworkReply> #include <QDir> #include <QTimer> #include <QStandardPaths> #include <QRegularExpression> #ifdef HAVE_QTWIDGETS #include <QListWidgetItem> #include <QDBusConnection> #include <QDBusConnectionInterface> #endif // HAVE_QTWIDGETS #ifdef HAVE_KF5 #include <KLocalizedString> #include <KMessageBox> #endif // HAVE_KF5 -#include "encoderlatex.h" +#include "encoder.h" #include "internalnetworkaccessmanager.h" #include "kbibtex.h" #include "logging_networking.h" const QString OnlineSearchAbstract::queryKeyFreeText = QStringLiteral("free"); const QString OnlineSearchAbstract::queryKeyTitle = QStringLiteral("title"); const QString OnlineSearchAbstract::queryKeyAuthor = QStringLiteral("author"); const QString OnlineSearchAbstract::queryKeyYear = QStringLiteral("year"); const int OnlineSearchAbstract::resultNoError = 0; const int OnlineSearchAbstract::resultCancelled = 0; /// may get redefined in the future! const int OnlineSearchAbstract::resultUnspecifiedError = 1; const int OnlineSearchAbstract::resultAuthorizationRequired = 2; const int OnlineSearchAbstract::resultNetworkError = 3; const int OnlineSearchAbstract::resultInvalidArguments = 4; const char *OnlineSearchAbstract::httpUnsafeChars = "%:/=+$?&\0"; #ifdef HAVE_QTWIDGETS QStringList OnlineSearchQueryFormAbstract::authorLastNames(const Entry &entry) { - const EncoderLaTeX &encoder = EncoderLaTeX::instance(); + const Encoder &encoder = Encoder::instance(); const Value v = entry[Entry::ftAuthor]; QStringList result; result.reserve(v.size()); for (const QSharedPointer<ValueItem> &vi : v) { QSharedPointer<const Person> p = vi.dynamicCast<const Person>(); if (!p.isNull()) result.append(encoder.convertToPlainAscii(p->lastName())); } return result; } QString OnlineSearchQueryFormAbstract::guessFreeText(const Entry &entry) const { /// If there is a DOI value in this entry, use it as free text static const QStringList doiKeys = {Entry::ftDOI, Entry::ftUrl}; for (const QString &doiKey : doiKeys) if (!entry.value(doiKey).isEmpty()) { const QString text = PlainTextValue::text(entry[doiKey]); const QRegularExpressionMatch doiRegExpMatch = KBibTeX::doiRegExp.match(text); if (doiRegExpMatch.hasMatch()) return doiRegExpMatch.captured(0); } /// If there is no free text yet (e.g. no DOI number), try to identify an arXiv eprint number static const QStringList arxivKeys = {QStringLiteral("eprint"), Entry::ftNumber}; for (const QString &arxivKey : arxivKeys) if (!entry.value(arxivKey).isEmpty()) { const QString text = PlainTextValue::text(entry[arxivKey]); const QRegularExpressionMatch arXivRegExpMatch = KBibTeX::arXivRegExpWithPrefix.match(text); if (arXivRegExpMatch.hasMatch()) return arXivRegExpMatch.captured(1); } return QString(); } #endif // HAVE_QTWIDGETS OnlineSearchAbstract::OnlineSearchAbstract(QObject *parent) : QObject(parent), m_hasBeenCanceled(false), numSteps(0), curStep(0), m_previousBusyState(false), m_delayedStoppedSearchReturnCode(0) { m_parent = parent; } #ifdef HAVE_QTWIDGETS QIcon OnlineSearchAbstract::icon(QListWidgetItem *listWidgetItem) { static const QRegularExpression invalidChars(QStringLiteral("[^-a-z0-9_]"), QRegularExpression::CaseInsensitiveOption); const QString cacheDirectory = QStandardPaths::writableLocation(QStandardPaths::CacheLocation) + QStringLiteral("/favicons/"); QDir().mkpath(cacheDirectory); const QString fileNameStem = cacheDirectory + QString(favIconUrl()).remove(invalidChars); const QStringList fileNameExtensions {QStringLiteral(".ico"), QStringLiteral(".png"), QString()}; for (const QString &extension : fileNameExtensions) { const QString fileName = fileNameStem + extension; if (QFileInfo::exists(fileName)) return QIcon(fileName); } QNetworkRequest request(favIconUrl()); QNetworkReply *reply = InternalNetworkAccessManager::instance().get(request); reply->setObjectName(fileNameStem); if (listWidgetItem != nullptr) m_iconReplyToListWidgetItem.insert(reply, listWidgetItem); connect(reply, &QNetworkReply::finished, this, &OnlineSearchAbstract::iconDownloadFinished); return QIcon::fromTheme(QStringLiteral("applications-internet")); } OnlineSearchQueryFormAbstract *OnlineSearchAbstract::customWidget(QWidget *) { return nullptr; } void OnlineSearchAbstract::startSearchFromForm() { m_hasBeenCanceled = false; curStep = numSteps = 0; delayedStoppedSearch(resultNoError); } #endif // HAVE_QTWIDGETS QString OnlineSearchAbstract::name() { static const QRegularExpression invalidChars(QStringLiteral("[^-a-z0-9]"), QRegularExpression::CaseInsensitiveOption); if (m_name.isEmpty()) m_name = label().remove(invalidChars); return m_name; } bool OnlineSearchAbstract::busy() const { return numSteps > 0 && curStep < numSteps; } void OnlineSearchAbstract::cancel() { m_hasBeenCanceled = true; curStep = numSteps = 0; refreshBusyProperty(); } QStringList OnlineSearchAbstract::splitRespectingQuotationMarks(const QString &text) { int p1 = 0, p2, max = text.length(); QStringList result; while (p1 < max) { while (text[p1] == ' ') ++p1; p2 = p1; if (text[p2] == '"') { ++p2; while (p2 < max && text[p2] != '"') ++p2; } else while (p2 < max && text[p2] != ' ') ++p2; result << text.mid(p1, p2 - p1 + 1).simplified(); p1 = p2 + 1; } return result; } bool OnlineSearchAbstract::handleErrors(QNetworkReply *reply) { QUrl url; return handleErrors(reply, url); } bool OnlineSearchAbstract::handleErrors(QNetworkReply *reply, QUrl &newUrl) { /// The URL to be shown or logged shall not contain any API key const QUrl urlToShow = InternalNetworkAccessManager::removeApiKey(reply->url()); newUrl = QUrl(); if (m_hasBeenCanceled) { stopSearch(resultCancelled); return false; } else if (reply->error() != QNetworkReply::NoError) { m_hasBeenCanceled = true; const QString errorString = reply->errorString(); qCWarning(LOG_KBIBTEX_NETWORKING) << "Search using" << label() << "failed (error code" << reply->error() << "," << errorString << "), HTTP code" << reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt() << ":" << reply->attribute(QNetworkRequest::HttpReasonPhraseAttribute).toByteArray() << ") for URL" << urlToShow.toDisplayString(); const QNetworkRequest &request = reply->request(); /// Dump all HTTP headers that were sent with the original request (except for API keys) const QList<QByteArray> rawHeadersSent = request.rawHeaderList(); for (const QByteArray &rawHeaderName : rawHeadersSent) { if (rawHeaderName.toLower().contains("apikey") || rawHeaderName.toLower().contains("api-key")) continue; ///< skip dumping header values containing an API key qCDebug(LOG_KBIBTEX_NETWORKING) << "SENT " << rawHeaderName << ":" << request.rawHeader(rawHeaderName); } /// Dump all HTTP headers that were received const QList<QByteArray> rawHeadersReceived = reply->rawHeaderList(); for (const QByteArray &rawHeaderName : rawHeadersReceived) { if (rawHeaderName.toLower().contains("apikey") || rawHeaderName.toLower().contains("api-key")) continue; ///< skip dumping header values containing an API key qCDebug(LOG_KBIBTEX_NETWORKING) << "RECVD " << rawHeaderName << ":" << reply->rawHeader(rawHeaderName); } #ifdef HAVE_KF5 sendVisualNotification(errorString.isEmpty() ? i18n("Searching '%1' failed for unknown reason.", label()) : i18n("Searching '%1' failed with error message:\n\n%2", label(), errorString), label(), QStringLiteral("kbibtex"), 7 * 1000); #endif // HAVE_KF5 int resultCode = resultUnspecifiedError; if (reply->error() == QNetworkReply::AuthenticationRequiredError || reply->error() == QNetworkReply::ProxyAuthenticationRequiredError) resultCode = resultAuthorizationRequired; else if (reply->error() == QNetworkReply::HostNotFoundError || reply->error() == QNetworkReply::TimeoutError) resultCode = resultNetworkError; stopSearch(resultCode); return false; } /** * Check the reply for various problems that might point to * more severe issues. Remember: those are only indicators * to problems which have to be handled elsewhere (therefore, * returning 'true' is totally ok here). */ if (reply->attribute(QNetworkRequest::RedirectionTargetAttribute).isValid()) { newUrl = reply->url().resolved(reply->attribute(QNetworkRequest::RedirectionTargetAttribute).toUrl()); } else if (reply->size() == 0) qCWarning(LOG_KBIBTEX_NETWORKING) << "Search using" << label() << "on url" << urlToShow.toDisplayString() << "returned no data"; return true; } QString OnlineSearchAbstract::htmlAttribute(const QString &htmlCode, const int startPos, const QString &attribute) const { const int endPos = htmlCode.indexOf(QLatin1Char('>'), startPos); if (endPos < 0) return QString(); ///< no closing angle bracket found const QString attributePattern = QString(QStringLiteral(" %1=")).arg(attribute); const int attributePatternPos = htmlCode.indexOf(attributePattern, startPos, Qt::CaseInsensitive); if (attributePatternPos < 0 || attributePatternPos > endPos) return QString(); ///< attribute not found within limits const int attributePatternLen = attributePattern.length(); const int openingQuotationMarkPos = attributePatternPos + attributePatternLen; const QChar quotationMark = htmlCode[openingQuotationMarkPos]; if (quotationMark != QLatin1Char('"') && quotationMark != QLatin1Char('\'')) { /// No valid opening quotation mark found int spacePos = openingQuotationMarkPos; while (spacePos < endPos && !htmlCode[spacePos].isSpace()) ++spacePos; if (spacePos > endPos) return QString(); ///< no closing space found return htmlCode.mid(openingQuotationMarkPos, spacePos - openingQuotationMarkPos); } else { /// Attribute has either single or double quotation marks const int closingQuotationMarkPos = htmlCode.indexOf(quotationMark, openingQuotationMarkPos + 1); if (closingQuotationMarkPos < 0 || closingQuotationMarkPos > endPos) return QString(); ///< closing quotation mark not found within limits return htmlCode.mid(openingQuotationMarkPos + 1, closingQuotationMarkPos - openingQuotationMarkPos - 1); } } bool OnlineSearchAbstract::htmlAttributeIsSelected(const QString &htmlCode, const int startPos, const QString &attribute) const { const int endPos = htmlCode.indexOf(QLatin1Char('>'), startPos); if (endPos < 0) return false; ///< no closing angle bracket found const QString attributePattern = QStringLiteral(" ") + attribute; const int attributePatternPos = htmlCode.indexOf(attributePattern, startPos, Qt::CaseInsensitive); if (attributePatternPos < 0 || attributePatternPos > endPos) return false; ///< attribute not found within limits const int attributePatternLen = attributePattern.length(); const QChar nextAfterAttributePattern = htmlCode[attributePatternPos + attributePatternLen]; if (nextAfterAttributePattern.isSpace() || nextAfterAttributePattern == QLatin1Char('>') || nextAfterAttributePattern == QLatin1Char('/')) /// No value given for attribute (old-style HTML), so assuming it means checked/selected return true; else if (nextAfterAttributePattern == QLatin1Char('=')) { /// Expecting value to attribute, so retrieve it and check for 'selected' or 'checked' const QString attributeValue = htmlAttribute(htmlCode, attributePatternPos, attribute).toLower(); return attributeValue == QStringLiteral("selected") || attributeValue == QStringLiteral("checked"); } /// Reaching this point only if HTML code is invalid return false; } #ifdef HAVE_KF5 /** * Display a passive notification popup using the D-Bus interface. * Copied from KDialog with modifications. */ void OnlineSearchAbstract::sendVisualNotification(const QString &text, const QString &title, const QString &icon, int timeout) { static const QString dbusServiceName = QStringLiteral("org.freedesktop.Notifications"); static const QString dbusInterfaceName = QStringLiteral("org.freedesktop.Notifications"); static const QString dbusPath = QStringLiteral("/org/freedesktop/Notifications"); // check if service already exists on plugin instantiation QDBusConnectionInterface *interface = QDBusConnection::sessionBus().interface(); if (interface == nullptr || !interface->isServiceRegistered(dbusServiceName)) { return; } if (timeout <= 0) timeout = 10 * 1000; QDBusMessage m = QDBusMessage::createMethodCall(dbusServiceName, dbusPath, dbusInterfaceName, QStringLiteral("Notify")); const QList<QVariant> args {QStringLiteral("kdialog"), 0U, icon, title, text, QStringList(), QVariantMap(), timeout}; m.setArguments(args); QDBusMessage replyMsg = QDBusConnection::sessionBus().call(m); if (replyMsg.type() == QDBusMessage::ReplyMessage) { if (!replyMsg.arguments().isEmpty()) { return; } // Not displaying any error messages as this is optional for kdialog // and KPassivePopup is a perfectly valid fallback. //else { // qCDebug(LOG_KBIBTEX_NETWORKING) << "Error: received reply with no arguments."; //} } else if (replyMsg.type() == QDBusMessage::ErrorMessage) { //qCDebug(LOG_KBIBTEX_NETWORKING) << "Error: failed to send D-Bus message"; //qCDebug(LOG_KBIBTEX_NETWORKING) << replyMsg; } else { //qCDebug(LOG_KBIBTEX_NETWORKING) << "Unexpected reply type"; } } #endif // HAVE_KF5 QString OnlineSearchAbstract::encodeURL(QString rawText) { const char *cur = httpUnsafeChars; while (*cur != '\0') { rawText = rawText.replace(QChar(*cur), '%' + QString::number(*cur, 16)); ++cur; } rawText = rawText.replace(QLatin1Char(' '), QLatin1Char('+')); return rawText; } QString OnlineSearchAbstract::decodeURL(QString rawText) { static const QRegularExpression mimeRegExp(QStringLiteral("%([0-9A-Fa-f]{2})")); QRegularExpressionMatch mimeRegExpMatch; while ((mimeRegExpMatch = mimeRegExp.match(rawText)).hasMatch()) { bool ok = false; QChar c(mimeRegExpMatch.captured(1).toInt(&ok, 16)); if (ok) rawText = rawText.replace(mimeRegExpMatch.captured(0), c); } rawText = rawText.replace(QStringLiteral("&amp;"), QStringLiteral("&")).replace(QLatin1Char('+'), QStringLiteral(" ")); return rawText; } QMap<QString, QString> OnlineSearchAbstract::formParameters(const QString &htmlText, int startPos) const { /// how to recognize HTML tags static const QString formTagEnd = QStringLiteral("</form>"); static const QString inputTagBegin = QStringLiteral("<input "); static const QString selectTagBegin = QStringLiteral("<select "); static const QString selectTagEnd = QStringLiteral("</select>"); static const QString optionTagBegin = QStringLiteral("<option "); /// initialize result map QMap<QString, QString> result; /// determined boundaries of (only) "form" tag int endPos = htmlText.indexOf(formTagEnd, startPos, Qt::CaseInsensitive); if (startPos < 0 || endPos < 0) { qCWarning(LOG_KBIBTEX_NETWORKING) << "Could not locate form in text"; return result; } /// search for "input" tags within form int p = htmlText.indexOf(inputTagBegin, startPos, Qt::CaseInsensitive); while (p > startPos && p < endPos) { /// get "type", "name", and "value" attributes const QString inputType = htmlAttribute(htmlText, p, QStringLiteral("type")).toLower(); const QString inputName = htmlAttribute(htmlText, p, QStringLiteral("name")); const QString inputValue = htmlAttribute(htmlText, p, QStringLiteral("value")); if (!inputName.isEmpty()) { /// get value of input types if (inputType == QStringLiteral("hidden") || inputType == QStringLiteral("text") || inputType == QStringLiteral("submit")) result[inputName] = inputValue; else if (inputType == QStringLiteral("radio")) { /// must be selected if (htmlAttributeIsSelected(htmlText, p, QStringLiteral("checked"))) { result[inputName] = inputValue; } } else if (inputType == QStringLiteral("checkbox")) { /// must be checked if (htmlAttributeIsSelected(htmlText, p, QStringLiteral("checked"))) { /// multiple checkbox values with the same name are possible result.insertMulti(inputName, inputValue); } } } /// ignore input type "image" p = htmlText.indexOf(inputTagBegin, p + 1, Qt::CaseInsensitive); } /// search for "select" tags within form p = htmlText.indexOf(selectTagBegin, startPos, Qt::CaseInsensitive); while (p > startPos && p < endPos) { /// get "name" attribute from "select" tag const QString selectName = htmlAttribute(htmlText, p, QStringLiteral("name")); /// "select" tag contains one or several "option" tags, search all int popt = htmlText.indexOf(optionTagBegin, p, Qt::CaseInsensitive); int endSelect = htmlText.indexOf(selectTagEnd, p, Qt::CaseInsensitive); while (popt > p && popt < endSelect) { /// get "value" attribute from "option" tag const QString optionValue = htmlAttribute(htmlText, popt, QStringLiteral("value")); if (!selectName.isEmpty() && !optionValue.isEmpty()) { /// if this "option" tag is "selected", store value if (htmlAttributeIsSelected(htmlText, popt, QStringLiteral("selected"))) { result[selectName] = optionValue; } } popt = htmlText.indexOf(optionTagBegin, popt + 1, Qt::CaseInsensitive); } p = htmlText.indexOf(selectTagBegin, p + 1, Qt::CaseInsensitive); } return result; } #ifdef HAVE_QTWIDGETS void OnlineSearchAbstract::iconDownloadFinished() { QNetworkReply *reply = static_cast<QNetworkReply *>(sender()); if (reply->error() == QNetworkReply::NoError) { const QUrl redirUrl = reply->attribute(QNetworkRequest::RedirectionTargetAttribute).toUrl(); if (redirUrl.isValid()) { QNetworkRequest request(redirUrl); QNetworkReply *newReply = InternalNetworkAccessManager::instance().get(request); newReply->setObjectName(reply->objectName()); QListWidgetItem *listWidgetItem = m_iconReplyToListWidgetItem.value(reply, nullptr); m_iconReplyToListWidgetItem.remove(reply); if (listWidgetItem != nullptr) m_iconReplyToListWidgetItem.insert(newReply, listWidgetItem); connect(newReply, &QNetworkReply::finished, this, &OnlineSearchAbstract::iconDownloadFinished); return; } const QByteArray iconData = reply->readAll(); if (iconData.size() < 10) { /// Unlikely that an icon's data is less than 10 bytes, /// must be an error. qCWarning(LOG_KBIBTEX_NETWORKING) << "Received invalid icon data from " << InternalNetworkAccessManager::removeApiKey(reply->url()).toDisplayString(); return; } QString extension; if (iconData[1] == 'P' && iconData[2] == 'N' && iconData[3] == 'G') { /// PNG files have string "PNG" at second to fourth byte extension = QStringLiteral(".png"); } else if (iconData[0] == (char)0x00 && iconData[1] == (char)0x00 && iconData[2] == (char)0x01 && iconData[3] == (char)0x00) { /// Microsoft Icon have first two bytes always 0x0000, /// third and fourth byte is 0x0001 (for .ico) extension = QStringLiteral(".ico"); } else if (iconData[0] == '<') { /// HTML or XML code const QString htmlCode = QString::fromUtf8(iconData); qCDebug(LOG_KBIBTEX_NETWORKING) << "Received XML or HTML data from " << InternalNetworkAccessManager::removeApiKey(reply->url()).toDisplayString() << ": " << htmlCode.left(128); return; } else { qCWarning(LOG_KBIBTEX_NETWORKING) << "Favicon is of unknown format: " << InternalNetworkAccessManager::removeApiKey(reply->url()).toDisplayString(); return; } const QString filename = reply->objectName() + extension; QFile iconFile(filename); if (iconFile.open(QFile::WriteOnly)) { iconFile.write(iconData); iconFile.close(); QListWidgetItem *listWidgetItem = m_iconReplyToListWidgetItem.value(reply, nullptr); if (listWidgetItem != nullptr) listWidgetItem->setIcon(QIcon(filename)); } else { qCWarning(LOG_KBIBTEX_NETWORKING) << "Could not save icon data from URL" << InternalNetworkAccessManager::removeApiKey(reply->url()).toDisplayString() << "to file" << filename; return; } } else qCWarning(LOG_KBIBTEX_NETWORKING) << "Could not download icon from URL " << InternalNetworkAccessManager::removeApiKey(reply->url()).toDisplayString() << ": " << reply->errorString(); } #endif // HAVE_QTWIDGETS void OnlineSearchAbstract::dumpToFile(const QString &filename, const QString &text) { const QString usedFilename = QDir::tempPath() + QLatin1Char('/') + filename; QFile f(usedFilename); if (f.open(QFile::WriteOnly)) { qCDebug(LOG_KBIBTEX_NETWORKING) << "Dumping text" << KBibTeX::squeezeText(text, 96) << "to" << usedFilename; f.write(text.toUtf8()); f.close(); } } void OnlineSearchAbstract::delayedStoppedSearch(int returnCode) { m_delayedStoppedSearchReturnCode = returnCode; QTimer::singleShot(500, this, &OnlineSearchAbstract::delayedStoppedSearchTimer); } void OnlineSearchAbstract::delayedStoppedSearchTimer() { stopSearch(m_delayedStoppedSearchReturnCode); } void OnlineSearchAbstract::sanitizeEntry(QSharedPointer<Entry> entry) { if (entry.isNull()) return; /// Sometimes, there is no identifier, so set a random one if (entry->id().isEmpty()) entry->setId(QString(QStringLiteral("entry-%1")).arg(QString::number(qrand(), 36))); /// Missing entry type? Set it to 'misc' if (entry->type().isEmpty()) entry->setType(Entry::etMisc); static const QString ftIssue = QStringLiteral("issue"); if (entry->contains(ftIssue)) { /// ACM's Digital Library uses "issue" instead of "number" -> fix that Value v = entry->value(ftIssue); entry->remove(ftIssue); entry->insert(Entry::ftNumber, v); } /// If entry contains a description field but no abstract, /// rename description field to abstract static const QString ftDescription = QStringLiteral("description"); if (!entry->contains(Entry::ftAbstract) && entry->contains(ftDescription)) { Value v = entry->value(ftDescription); entry->remove(ftDescription); entry->insert(Entry::ftAbstract, v); } /// Remove "dblp" artifacts in abstracts and keywords if (entry->contains(Entry::ftAbstract)) { const QString abstract = PlainTextValue::text(entry->value(Entry::ftAbstract)); if (abstract == QStringLiteral("dblp")) entry->remove(Entry::ftAbstract); } if (entry->contains(Entry::ftKeywords)) { const QString keywords = PlainTextValue::text(entry->value(Entry::ftKeywords)); if (keywords == QStringLiteral("dblp")) entry->remove(Entry::ftKeywords); } if (entry->contains(Entry::ftMonth)) { /// Fix strings for months: "September" -> "sep" Value monthValue = entry->value(Entry::ftMonth); bool updated = false; for (Value::Iterator it = monthValue.begin(); it != monthValue.end(); ++it) { const QString valueItem = PlainTextValue::text(*it); static const QRegularExpression longMonth = QRegularExpression(QStringLiteral("(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)[a-z]*"), QRegularExpression::CaseInsensitiveOption); const QRegularExpressionMatch longMonthMatch = longMonth.match(valueItem); if (longMonthMatch.hasMatch()) { it = monthValue.erase(it); it = monthValue.insert(it, QSharedPointer<MacroKey>(new MacroKey(longMonthMatch.captured(1).toLower()))); updated = true; } } if (updated) entry->insert(Entry::ftMonth, monthValue); } if (entry->contains(Entry::ftDOI) && entry->contains(Entry::ftUrl)) { /// Remove URL from entry if contains a DOI and the DOI field matches the DOI in the URL const Value &doiValue = entry->value(Entry::ftDOI); for (const auto &doiValueItem : doiValue) { const QString doi = PlainTextValue::text(doiValueItem); Value v = entry->value(Entry::ftUrl); bool gotChanged = false; for (Value::Iterator it = v.begin(); it != v.end();) { const QSharedPointer<ValueItem> &vi = (*it); if (vi->containsPattern(QStringLiteral("/") + doi)) { it = v.erase(it); gotChanged = true; } else ++it; } if (v.isEmpty()) entry->remove(Entry::ftUrl); else if (gotChanged) entry->insert(Entry::ftUrl, v); } } else if (!entry->contains(Entry::ftDOI) && entry->contains(Entry::ftUrl)) { /// If URL looks like a DOI, remove URL and add a DOI field QSet<QString> doiSet; ///< using a QSet here to keep only unique DOIs Value v = entry->value(Entry::ftUrl); bool gotChanged = false; for (Value::Iterator it = v.begin(); it != v.end();) { const QString viText = PlainTextValue::text(*it); const QRegularExpressionMatch doiRegExpMatch = KBibTeX::doiRegExp.match(viText); if (doiRegExpMatch.hasMatch()) { doiSet.insert(doiRegExpMatch.captured()); it = v.erase(it); gotChanged = true; } else ++it; } if (v.isEmpty()) entry->remove(Entry::ftUrl); else if (gotChanged) entry->insert(Entry::ftUrl, v); if (!doiSet.isEmpty()) { Value doiValue; /// Rewriting QSet<QString> doiSet into a (sorted) list for reproducibility /// (required for automated test in KBibTeXNetworkingTest) QStringList list; for (const QString &doi : doiSet) list.append(doi); list.sort(); for (const QString &doi : const_cast<const QStringList &>(list)) doiValue.append(QSharedPointer<PlainText>(new PlainText(doi))); entry->insert(Entry::ftDOI, doiValue); } } else if (!entry->contains(Entry::ftDOI)) { const QRegularExpressionMatch doiRegExpMatch = KBibTeX::doiRegExp.match(entry->id()); if (doiRegExpMatch.hasMatch()) { /// If entry id looks like a DOI, add a DOI field Value doiValue; doiValue.append(QSharedPointer<PlainText>(new PlainText(doiRegExpMatch.captured()))); entry->insert(Entry::ftDOI, doiValue); } } /// Referenced strings or entries do not exist in the search result /// and BibTeX breaks if it finds a reference to a non-existing string or entry entry->remove(Entry::ftCrossRef); } bool OnlineSearchAbstract::publishEntry(QSharedPointer<Entry> entry) { if (entry.isNull()) return false; Value v; v.append(QSharedPointer<PlainText>(new PlainText(label()))); entry->insert(QStringLiteral("x-fetchedfrom"), v); sanitizeEntry(entry); emit foundEntry(entry); return true; } void OnlineSearchAbstract::stopSearch(int errorCode) { if (errorCode == resultNoError) curStep = numSteps; else curStep = numSteps = 0; emit progress(curStep, numSteps); emit stoppedSearch(errorCode); } void OnlineSearchAbstract::refreshBusyProperty() { const bool newBusyState = busy(); if (newBusyState != m_previousBusyState) { m_previousBusyState = newBusyState; emit busyChanged(); } } diff --git a/src/networking/onlinesearch/onlinesearchspringerlink.cpp b/src/networking/onlinesearch/onlinesearchspringerlink.cpp index d69acd7d..a6e402d1 100644 --- a/src/networking/onlinesearch/onlinesearchspringerlink.cpp +++ b/src/networking/onlinesearch/onlinesearchspringerlink.cpp @@ -1,357 +1,357 @@ /*************************************************************************** * Copyright (C) 2004-2018 by Thomas Fischer <fischer@unix-ag.uni-kl.de> * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program; if not, see <https://www.gnu.org/licenses/>. * ***************************************************************************/ #include "onlinesearchspringerlink.h" #ifdef HAVE_QTWIDGETS #include <QFormLayout> #include <QSpinBox> #include <QLabel> #endif // HAVE_QTWIDGETS #include <QRegularExpression> #include <QNetworkRequest> #include <QNetworkAccessManager> #include <QNetworkReply> #include <QUrlQuery> #ifdef HAVE_KF5 #include <KLocalizedString> #include <KLineEdit> #include <KConfigGroup> #else // HAVE_KF5 #define i18n(text) QObject::tr(text) #endif // HAVE_KF5 #include "internalnetworkaccessmanager.h" -#include "encoderlatex.h" +#include "encoder.h" #include "encoderxml.h" #include "fileimporterbibtex.h" #include "xsltransform.h" #include "logging_networking.h" #ifdef HAVE_QTWIDGETS /** * @author Thomas Fischer <fischer@unix-ag.uni-kl.de> */ class OnlineSearchSpringerLink::OnlineSearchQueryFormSpringerLink : public OnlineSearchQueryFormAbstract { Q_OBJECT private: QString configGroupName; void loadState() { KConfigGroup configGroup(config, configGroupName); lineEditFreeText->setText(configGroup.readEntry(QStringLiteral("free"), QString())); lineEditTitle->setText(configGroup.readEntry(QStringLiteral("title"), QString())); lineEditBookTitle->setText(configGroup.readEntry(QStringLiteral("bookTitle"), QString())); lineEditAuthorEditor->setText(configGroup.readEntry(QStringLiteral("authorEditor"), QString())); lineEditYear->setText(configGroup.readEntry(QStringLiteral("year"), QString())); numResultsField->setValue(configGroup.readEntry(QStringLiteral("numResults"), 10)); } public: KLineEdit *lineEditFreeText, *lineEditTitle, *lineEditBookTitle, *lineEditAuthorEditor, *lineEditYear; QSpinBox *numResultsField; OnlineSearchQueryFormSpringerLink(QWidget *parent) : OnlineSearchQueryFormAbstract(parent), configGroupName(QStringLiteral("Search Engine SpringerLink")) { QFormLayout *layout = new QFormLayout(this); layout->setMargin(0); lineEditFreeText = new KLineEdit(this); lineEditFreeText->setClearButtonEnabled(true); QLabel *label = new QLabel(i18n("Free Text:"), this); label->setBuddy(lineEditFreeText); layout->addRow(label, lineEditFreeText); connect(lineEditFreeText, &KLineEdit::returnPressed, this, &OnlineSearchQueryFormSpringerLink::returnPressed); lineEditTitle = new KLineEdit(this); lineEditTitle->setClearButtonEnabled(true); label = new QLabel(i18n("Title:"), this); label->setBuddy(lineEditTitle); layout->addRow(label, lineEditTitle); connect(lineEditTitle, &KLineEdit::returnPressed, this, &OnlineSearchQueryFormSpringerLink::returnPressed); lineEditBookTitle = new KLineEdit(this); lineEditBookTitle->setClearButtonEnabled(true); label = new QLabel(i18n("Book/Journal title:"), this); label->setBuddy(lineEditBookTitle); layout->addRow(label, lineEditBookTitle); connect(lineEditBookTitle, &KLineEdit::returnPressed, this, &OnlineSearchQueryFormSpringerLink::returnPressed); lineEditAuthorEditor = new KLineEdit(this); lineEditAuthorEditor->setClearButtonEnabled(true); label = new QLabel(i18n("Author or Editor:"), this); label->setBuddy(lineEditAuthorEditor); layout->addRow(label, lineEditAuthorEditor); connect(lineEditAuthorEditor, &KLineEdit::returnPressed, this, &OnlineSearchQueryFormSpringerLink::returnPressed); lineEditYear = new KLineEdit(this); lineEditYear->setClearButtonEnabled(true); label = new QLabel(i18n("Year:"), this); label->setBuddy(lineEditYear); layout->addRow(label, lineEditYear); connect(lineEditYear, &KLineEdit::returnPressed, this, &OnlineSearchQueryFormSpringerLink::returnPressed); numResultsField = new QSpinBox(this); label = new QLabel(i18n("Number of Results:"), this); label->setBuddy(numResultsField); layout->addRow(label, numResultsField); numResultsField->setMinimum(3); numResultsField->setMaximum(100); lineEditFreeText->setFocus(Qt::TabFocusReason); loadState(); } bool readyToStart() const override { return !(lineEditFreeText->text().isEmpty() && lineEditTitle->text().isEmpty() && lineEditBookTitle->text().isEmpty() && lineEditAuthorEditor->text().isEmpty()); } void copyFromEntry(const Entry &entry) override { lineEditTitle->setText(PlainTextValue::text(entry[Entry::ftTitle])); QString bookTitle = PlainTextValue::text(entry[Entry::ftBookTitle]); if (bookTitle.isEmpty()) bookTitle = PlainTextValue::text(entry[Entry::ftJournal]); lineEditBookTitle->setText(bookTitle); lineEditAuthorEditor->setText(authorLastNames(entry).join(QStringLiteral(" "))); } void saveState() { KConfigGroup configGroup(config, configGroupName); configGroup.writeEntry(QStringLiteral("free"), lineEditFreeText->text()); configGroup.writeEntry(QStringLiteral("title"), lineEditTitle->text()); configGroup.writeEntry(QStringLiteral("bookTitle"), lineEditBookTitle->text()); configGroup.writeEntry(QStringLiteral("authorEditor"), lineEditAuthorEditor->text()); configGroup.writeEntry(QStringLiteral("year"), lineEditYear->text()); configGroup.writeEntry(QStringLiteral("numResults"), numResultsField->value()); config->sync(); } }; #endif // HAVE_QTWIDGETS class OnlineSearchSpringerLink::OnlineSearchSpringerLinkPrivate { private: static const QString xsltFilenameBase; public: static const QString springerMetadataKey; const XSLTransform xslt; #ifdef HAVE_QTWIDGETS OnlineSearchQueryFormSpringerLink *form; #endif // HAVE_QTWIDGETS OnlineSearchSpringerLinkPrivate(OnlineSearchSpringerLink *) : xslt(XSLTransform::locateXSLTfile(xsltFilenameBase)) #ifdef HAVE_QTWIDGETS , form(nullptr) #endif // HAVE_QTWIDGETS { if (!xslt.isValid()) qCWarning(LOG_KBIBTEX_NETWORKING) << "Failed to initialize XSL transformation based on file '" << xsltFilenameBase << "'"; } #ifdef HAVE_QTWIDGETS QUrl buildQueryUrl() { if (form == nullptr) return QUrl(); QUrl queryUrl = QUrl(QString(QStringLiteral("http://api.springer.com/metadata/pam/?api_key=")).append(springerMetadataKey)); QString queryString = form->lineEditFreeText->text(); const QStringList titleChunks = OnlineSearchAbstract::splitRespectingQuotationMarks(form->lineEditTitle->text()); for (const QString &titleChunk : titleChunks) { - queryString += QString(QStringLiteral(" title:%1")).arg(EncoderLaTeX::instance().convertToPlainAscii(titleChunk)); + queryString += QString(QStringLiteral(" title:%1")).arg(Encoder::instance().convertToPlainAscii(titleChunk)); } const QStringList bookTitleChunks = OnlineSearchAbstract::splitRespectingQuotationMarks(form->lineEditBookTitle->text()); for (const QString &titleChunk : bookTitleChunks) { - queryString += QString(QStringLiteral(" ( journal:%1 OR book:%1 )")).arg(EncoderLaTeX::instance().convertToPlainAscii(titleChunk)); + queryString += QString(QStringLiteral(" ( journal:%1 OR book:%1 )")).arg(Encoder::instance().convertToPlainAscii(titleChunk)); } const QStringList authors = OnlineSearchAbstract::splitRespectingQuotationMarks(form->lineEditAuthorEditor->text()); for (const QString &author : authors) { - queryString += QString(QStringLiteral(" name:%1")).arg(EncoderLaTeX::instance().convertToPlainAscii(author)); + queryString += QString(QStringLiteral(" name:%1")).arg(Encoder::instance().convertToPlainAscii(author)); } const QString year = form->lineEditYear->text(); if (!year.isEmpty()) queryString += QString(QStringLiteral(" year:%1")).arg(year); queryString = queryString.simplified(); QUrlQuery query(queryUrl); query.addQueryItem(QStringLiteral("q"), queryString); queryUrl.setQuery(query); return queryUrl; } #endif // HAVE_QTWIDGETS QUrl buildQueryUrl(const QMap<QString, QString> &query) { QUrl queryUrl = QUrl(QString(QStringLiteral("http://api.springer.com/metadata/pam/?api_key=")).append(springerMetadataKey)); QString queryString = query[queryKeyFreeText]; const QStringList titleChunks = OnlineSearchAbstract::splitRespectingQuotationMarks(query[queryKeyTitle]); for (const QString &titleChunk : titleChunks) { - queryString += QString(QStringLiteral(" title:%1")).arg(EncoderLaTeX::instance().convertToPlainAscii(titleChunk)); + queryString += QString(QStringLiteral(" title:%1")).arg(Encoder::instance().convertToPlainAscii(titleChunk)); } const QStringList authors = OnlineSearchAbstract::splitRespectingQuotationMarks(query[queryKeyAuthor]); for (const QString &author : authors) { - queryString += QString(QStringLiteral(" name:%1")).arg(EncoderLaTeX::instance().convertToPlainAscii(author)); + queryString += QString(QStringLiteral(" name:%1")).arg(Encoder::instance().convertToPlainAscii(author)); } QString year = query[queryKeyYear]; if (!year.isEmpty()) { static const QRegularExpression yearRegExp("\\b(18|19|20)[0-9]{2}\\b"); const QRegularExpressionMatch yearRegExpMatch = yearRegExp.match(year); if (yearRegExpMatch.hasMatch()) { year = yearRegExpMatch.captured(0); queryString += QString(QStringLiteral(" year:%1")).arg(year); } } queryString = queryString.simplified(); QUrlQuery q(queryUrl); q.addQueryItem(QStringLiteral("q"), queryString); queryUrl.setQuery(q); return queryUrl; } }; const QString OnlineSearchSpringerLink::OnlineSearchSpringerLinkPrivate::xsltFilenameBase = QStringLiteral("pam2bibtex.xsl"); const QString OnlineSearchSpringerLink::OnlineSearchSpringerLinkPrivate::springerMetadataKey(InternalNetworkAccessManager::reverseObfuscate("\xce\xb8\x4d\x2c\x8d\xba\xa9\xc4\x61\x9\x58\x6c\xbb\xde\x86\xb5\xb1\xc6\x15\x71\x76\x45\xd\x79\x12\x65\x95\xe1\x5d\x2f\x1d\x24\x10\x72\x2a\x5e\x69\x4\xdc\xba\xab\xc3\x28\x58\x8a\xfa\x5e\x69")); OnlineSearchSpringerLink::OnlineSearchSpringerLink(QObject *parent) : OnlineSearchAbstract(parent), d(new OnlineSearchSpringerLink::OnlineSearchSpringerLinkPrivate(this)) { /// nothing } OnlineSearchSpringerLink::~OnlineSearchSpringerLink() { delete d; } #ifdef HAVE_QTWIDGETS void OnlineSearchSpringerLink::startSearchFromForm() { m_hasBeenCanceled = false; emit progress(curStep = 0, numSteps = 1); QUrl springerLinkSearchUrl = d->buildQueryUrl(); QNetworkRequest request(springerLinkSearchUrl); QNetworkReply *reply = InternalNetworkAccessManager::instance().get(request); InternalNetworkAccessManager::instance().setNetworkReplyTimeout(reply); connect(reply, &QNetworkReply::finished, this, &OnlineSearchSpringerLink::doneFetchingPAM); if (d->form != nullptr) d->form->saveState(); refreshBusyProperty(); } #endif // HAVE_QTWIDGETS void OnlineSearchSpringerLink::startSearch(const QMap<QString, QString> &query, int numResults) { m_hasBeenCanceled = false; QUrl springerLinkSearchUrl = d->buildQueryUrl(query); QUrlQuery q(springerLinkSearchUrl); q.addQueryItem(QStringLiteral("p"), QString::number(numResults)); springerLinkSearchUrl.setQuery(q); emit progress(curStep = 0, numSteps = 1); QNetworkRequest request(springerLinkSearchUrl); QNetworkReply *reply = InternalNetworkAccessManager::instance().get(request); InternalNetworkAccessManager::instance().setNetworkReplyTimeout(reply); connect(reply, &QNetworkReply::finished, this, &OnlineSearchSpringerLink::doneFetchingPAM); refreshBusyProperty(); } QString OnlineSearchSpringerLink::label() const { #ifdef HAVE_KF5 return i18n("SpringerLink"); #else // HAVE_KF5 //= onlinesearch-springerlink-label return QObject::tr("SpringerLink"); #endif // HAVE_KF5 } QString OnlineSearchSpringerLink::favIconUrl() const { return QStringLiteral("http://link.springer.com/static/0.6623/sites/link/images/favicon.ico"); } #ifdef HAVE_QTWIDGETS OnlineSearchQueryFormAbstract *OnlineSearchSpringerLink::customWidget(QWidget *parent) { if (d->form == nullptr) d->form = new OnlineSearchQueryFormSpringerLink(parent); return d->form; } #endif // HAVE_QTWIDGETS QUrl OnlineSearchSpringerLink::homepage() const { return QUrl(QStringLiteral("http://www.springerlink.com/")); } void OnlineSearchSpringerLink::doneFetchingPAM() { QNetworkReply *reply = static_cast<QNetworkReply *>(sender()); if (handleErrors(reply)) { /// ensure proper treatment of UTF-8 characters const QString xmlSource = QString::fromUtf8(reply->readAll().constData()); const QString bibTeXcode = EncoderXML::instance().decode(d->xslt.transform(xmlSource).remove(QStringLiteral("<?xml version=\"1.0\" encoding=\"UTF-8\"?>"))); if (bibTeXcode.isEmpty()) { qCWarning(LOG_KBIBTEX_NETWORKING) << "XSL tranformation failed for data from " << InternalNetworkAccessManager::removeApiKey(reply->url()).toDisplayString(); stopSearch(resultInvalidArguments); } else { FileImporterBibTeX importer(this); const File *bibtexFile = importer.fromString(bibTeXcode); bool hasEntries = false; if (bibtexFile != nullptr) { for (const QSharedPointer<Element> &element : *bibtexFile) { QSharedPointer<Entry> entry = element.dynamicCast<Entry>(); hasEntries |= publishEntry(entry); } stopSearch(resultNoError); delete bibtexFile; } else { qCWarning(LOG_KBIBTEX_NETWORKING) << "No valid BibTeX file results returned on request on" << InternalNetworkAccessManager::removeApiKey(reply->url()).toDisplayString(); stopSearch(resultUnspecifiedError); } } } refreshBusyProperty(); } #include "onlinesearchspringerlink.moc" diff --git a/src/processing/idsuggestions.cpp b/src/processing/idsuggestions.cpp index 94d403ee..605f6104 100644 --- a/src/processing/idsuggestions.cpp +++ b/src/processing/idsuggestions.cpp @@ -1,568 +1,568 @@ /*************************************************************************** * Copyright (C) 2004-2019 by Thomas Fischer <fischer@unix-ag.uni-kl.de> * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program; if not, see <https://www.gnu.org/licenses/>. * ***************************************************************************/ #include "idsuggestions.h" #include <QRegularExpression> #include <KLocalizedString> #include "journalabbreviations.h" -#include "encoderlatex.h" +#include "encoder.h" #include "preferences.h" class IdSuggestions::IdSuggestionsPrivate { private: IdSuggestions *p; static const QStringList smallWords; public: IdSuggestionsPrivate(IdSuggestions *parent) : p(parent) { /// nothing } QString normalizeText(const QString &input) const { static const QRegularExpression unwantedChars(QStringLiteral("[^-_:/=+a-zA-Z0-9]+")); - return EncoderLaTeX::instance().convertToPlainAscii(input).remove(unwantedChars); + return Encoder::instance().convertToPlainAscii(input).remove(unwantedChars); } int numberFromEntry(const Entry &entry, const QString &field) const { static const QRegularExpression firstDigits(QStringLiteral("^[0-9]+")); const QString text = PlainTextValue::text(entry.value(field)); const QRegularExpressionMatch match = firstDigits.match(text); if (!match.hasMatch()) return -1; bool ok = false; const int result = match.captured(0).toInt(&ok); return ok ? result : -1; } QString pageNumberFromEntry(const Entry &entry) const { static const QRegularExpression whitespace(QStringLiteral("[ \t]+")); static const QRegularExpression pageNumber(QStringLiteral("[a-z0-9+:]+"), QRegularExpression::CaseInsensitiveOption); const QString text = PlainTextValue::text(entry.value(Entry::ftPages)).remove(whitespace).remove(QStringLiteral("mbox")); const QRegularExpressionMatch match = pageNumber.match(text); if (!match.hasMatch()) return QString(); return match.captured(0); } QString translateTitleToken(const Entry &entry, const struct IdSuggestionTokenInfo &tti, bool removeSmallWords) const { QString result; bool first = true; static const QRegularExpression sequenceOfSpaces(QStringLiteral("\\s+")); const QStringList titleWords = PlainTextValue::text(entry.value(Entry::ftTitle)).split(sequenceOfSpaces, QString::SkipEmptyParts); int index = 0; for (QStringList::ConstIterator it = titleWords.begin(); it != titleWords.end(); ++it, ++index) { const QString lowerText = normalizeText(*it).toLower(); if ((removeSmallWords && smallWords.contains(lowerText)) || index < tti.startWord || index > tti.endWord) continue; if (first) first = false; else result.append(tti.inBetween); QString titleComponent = lowerText.left(tti.len); if (tti.caseChange == IdSuggestions::ccToCamelCase) titleComponent = titleComponent[0].toUpper() + titleComponent.mid(1); result.append(titleComponent); } switch (tti.caseChange) { case IdSuggestions::ccToUpper: result = result.toUpper(); break; case IdSuggestions::ccToLower: result = result.toLower(); break; case IdSuggestions::ccToCamelCase: /// already processed above case IdSuggestions::ccNoChange: /// nothing break; } return result; } QString translateAuthorsToken(const Entry &entry, const struct IdSuggestionTokenInfo &ati) const { QString result; /// Already some author inserted into result? bool firstInserted = false; /// Get list of authors' last names const QStringList authors = entry.authorsLastName(); /// Keep track of which author (number/position) is processed int index = 0; /// Go through all authors for (QStringList::ConstIterator it = authors.constBegin(); it != authors.constEnd(); ++it, ++index) { /// Get current author, normalize name (remove unwanted characters), cut to maximum length QString author = normalizeText(*it).left(ati.len); /// Check if camel case is requests if (ati.caseChange == IdSuggestions::ccToCamelCase) { /// Get components of the author's last name const QStringList nameComponents = author.split(QStringLiteral(" "), QString::SkipEmptyParts); QStringList newNameComponents; newNameComponents.reserve(nameComponents.size()); /// Camel-case each name component for (const QString &nameComponent : nameComponents) { newNameComponents.append(nameComponent[0].toUpper() + nameComponent.mid(1)); } /// Re-assemble name from camel-cased components author = newNameComponents.join(QStringLiteral(" ")); } if ( (index >= ati.startWord && index <= ati.endWord) ///< check for requested author range || (ati.lastWord && index == authors.count() - 1) ///< explicitly insert last author if requested in lastWord flag ) { if (firstInserted) result.append(ati.inBetween); result.append(author); firstInserted = true; } } switch (ati.caseChange) { case IdSuggestions::ccToUpper: result = result.toUpper(); break; case IdSuggestions::ccToLower: result = result.toLower(); break; case IdSuggestions::ccToCamelCase: /// already processed above break; case IdSuggestions::ccNoChange: /// nothing break; } return result; } QString translateJournalToken(const Entry &entry, const struct IdSuggestionTokenInfo &jti, bool removeSmallWords) const { static const QRegularExpression sequenceOfSpaces(QStringLiteral("\\s+")); QString journalName = PlainTextValue::text(entry.value(Entry::ftJournal)); journalName = JournalAbbreviations::instance().toShortName(journalName); const QStringList journalWords = journalName.split(sequenceOfSpaces, QString::SkipEmptyParts); bool first = true; int index = 0; QString result; for (QStringList::ConstIterator it = journalWords.begin(); it != journalWords.end(); ++it, ++index) { QString journalComponent = normalizeText(*it); const QString lowerText = journalComponent.toLower(); if ((removeSmallWords && smallWords.contains(lowerText)) || index < jti.startWord || index > jti.endWord) continue; if (first) first = false; else result.append(jti.inBetween); /// Try to keep sequences of capital letters at the start of the journal name, /// those may already be abbreviations. unsigned int countCaptialCharsAtStart = 0; while (journalComponent[countCaptialCharsAtStart].isUpper()) ++countCaptialCharsAtStart; journalComponent = journalComponent.left(qMax(jti.len, countCaptialCharsAtStart)); if (jti.caseChange == IdSuggestions::ccToCamelCase) journalComponent = journalComponent[0].toUpper() + journalComponent.mid(1); result.append(journalComponent); } switch (jti.caseChange) { case IdSuggestions::ccToUpper: result = result.toUpper(); break; case IdSuggestions::ccToLower: result = result.toLower(); break; case IdSuggestions::ccToCamelCase: /// already processed above case IdSuggestions::ccNoChange: /// nothing break; } return result; } QString translateTypeToken(const Entry &entry, const struct IdSuggestionTokenInfo &eti) const { QString entryType(entry.type()); switch (eti.caseChange) { case IdSuggestions::ccToUpper: return entryType.toUpper().left(eti.len); case IdSuggestions::ccToLower: return entryType.toLower().left(eti.len); case IdSuggestions::ccToCamelCase: { if (entryType.isEmpty()) return QString(); ///< empty entry type? Return immediately to avoid problems with entryType[0] /// Apply some heuristic replacements to make the entry type look like CamelCase entryType = entryType.toLower(); ///< start with lower case /// Then, replace known words with their CamelCase variant entryType = entryType.replace(QStringLiteral("report"), QStringLiteral("Report")).replace(QStringLiteral("proceedings"), QStringLiteral("Proceedings")).replace(QStringLiteral("thesis"), QStringLiteral("Thesis")).replace(QStringLiteral("book"), QStringLiteral("Book")).replace(QStringLiteral("phd"), QStringLiteral("PhD")); /// Finally, guarantee that first letter is upper case entryType[0] = entryType[0].toUpper(); return entryType.left(eti.len); } default: return entryType.left(eti.len); } } QString translateToken(const Entry &entry, const QString &token) const { switch (token[0].toLatin1()) { case 'a': ///< deprecated but still supported case { /// Evaluate the token string, store information in struct IdSuggestionTokenInfo ati struct IdSuggestionTokenInfo ati = p->evalToken(token.mid(1)); ati.startWord = ati.endWord = 0; ///< only first author return translateAuthorsToken(entry, ati); } case 'A': { /// Evaluate the token string, store information in struct IdSuggestionTokenInfo ati const struct IdSuggestionTokenInfo ati = p->evalToken(token.mid(1)); return translateAuthorsToken(entry, ati); } case 'z': ///< deprecated but still supported case { /// Evaluate the token string, store information in struct IdSuggestionTokenInfo ati struct IdSuggestionTokenInfo ati = p->evalToken(token.mid(1)); /// All but first author ati.startWord = 1; ati.endWord = 0x00ffffff; return translateAuthorsToken(entry, ati); } case 'y': { int year = numberFromEntry(entry, Entry::ftYear); if (year > -1) return QString::number(year % 100 + 100).mid(1); break; } case 'Y': { const int year = numberFromEntry(entry, Entry::ftYear); if (year > -1) return QString::number(year % 10000 + 10000).mid(1); break; } case 't': case 'T': { /// Evaluate the token string, store information in struct IdSuggestionTokenInfo jti const struct IdSuggestionTokenInfo tti = p->evalToken(token.mid(1)); return translateTitleToken(entry, tti, token[0].isUpper()); } case 'j': case 'J': { /// Evaluate the token string, store information in struct IdSuggestionTokenInfo jti const struct IdSuggestionTokenInfo jti = p->evalToken(token.mid(1)); return translateJournalToken(entry, jti, token[0].isUpper()); } case 'e': { /// Evaluate the token string, store information in struct IdSuggestionTokenInfo eti const struct IdSuggestionTokenInfo eti = p->evalToken(token.mid(1)); return translateTypeToken(entry, eti); } case 'v': { return normalizeText(PlainTextValue::text(entry.value(Entry::ftVolume))); } case 'p': { return pageNumberFromEntry(entry); } case '"': return token.mid(1); } return QString(); } }; /// List of small words taken from OCLC: /// https://www.oclc.org/developer/develop/web-services/worldcat-search-api/bibliographic-resource.en.html const QStringList IdSuggestions::IdSuggestionsPrivate::smallWords = i18nc("Small words that can be removed from titles when generating id suggestions; separated by pipe symbol", "a|als|am|an|are|as|at|auf|aus|be|but|by|das|dass|de|der|des|dich|dir|du|er|es|for|from|had|have|he|her|his|how|ihr|ihre|ihres|im|in|is|ist|it|kein|la|le|les|mein|mich|mir|mit|of|on|sein|sie|that|the|this|to|un|une|von|was|wer|which|wie|wird|with|yousie|that|the|this|to|un|une|von|was|wer|which|wie|wird|with|you").split(QStringLiteral("|"), QString::SkipEmptyParts); IdSuggestions::IdSuggestions() : d(new IdSuggestionsPrivate(this)) { /// nothing } IdSuggestions::~IdSuggestions() { delete d; } QString IdSuggestions::formatId(const Entry &entry, const QString &formatStr) const { QString id; const QStringList tokenList = formatStr.split(QStringLiteral("|"), QString::SkipEmptyParts); for (const QString &token : tokenList) { id.append(d->translateToken(entry, token)); } return id; } QString IdSuggestions::defaultFormatId(const Entry &entry) const { return formatId(entry, Preferences::instance().activeIdSuggestionFormatString()); } bool IdSuggestions::hasDefaultFormat() const { return !Preferences::instance().activeIdSuggestionFormatString().isEmpty(); } bool IdSuggestions::applyDefaultFormatId(Entry &entry) const { const QString dfs = Preferences::instance().activeIdSuggestionFormatString(); if (!dfs.isEmpty()) { entry.setId(defaultFormatId(entry)); return true; } else return false; } QStringList IdSuggestions::formatIdList(const Entry &entry) const { const QStringList formatStrings = Preferences::instance().idSuggestionFormatStrings(); QStringList result; result.reserve(formatStrings.size()); for (const QString &formatString : formatStrings) { result << formatId(entry, formatString); } return result; } QStringList IdSuggestions::formatStrToHuman(const QString &formatStr) const { QStringList result; const QStringList tokenList = formatStr.split(QStringLiteral("|"), QString::SkipEmptyParts); for (const QString &token : tokenList) { QString text; if (token[0] == 'a' || token[0] == 'A' || token[0] == 'z') { struct IdSuggestionTokenInfo info = evalToken(token.mid(1)); if (token[0] == 'a') info.startWord = info.endWord = 0; else if (token[0] == 'z') { info.startWord = 1; info.endWord = 0x00ffffff; } text = formatAuthorRange(info.startWord, info.endWord, info.lastWord); int n = info.len; if (info.len < 0x00ffffff) text.append(i18np(", but only first letter of each last name", ", but only first %1 letters of each last name", n)); switch (info.caseChange) { case IdSuggestions::ccToUpper: text.append(i18n(", in upper case")); break; case IdSuggestions::ccToLower: text.append(i18n(", in lower case")); break; case IdSuggestions::ccToCamelCase: text.append(i18n(", in CamelCase")); break; case IdSuggestions::ccNoChange: break; } if (!info.inBetween.isEmpty()) text.append(i18n(", with '%1' in between", info.inBetween)); } else if (token[0] == 'y') text.append(i18n("Year (2 digits)")); else if (token[0] == 'Y') text.append(i18n("Year (4 digits)")); else if (token[0] == 't' || token[0] == 'T') { struct IdSuggestionTokenInfo info = evalToken(token.mid(1)); text.append(i18n("Title")); if (info.startWord == 0 && info.endWord <= 0xffff) text.append(i18np(", but only the first word", ", but only first %1 words", info.endWord + 1)); else if (info.startWord > 0 && info.endWord > 0xffff) text.append(i18n(", but only starting from word %1", info.startWord + 1)); else if (info.startWord > 0 && info.endWord <= 0xffff) text.append(i18n(", but only from word %1 to word %2", info.startWord + 1, info.endWord + 1)); if (info.len < 0x00ffffff) text.append(i18np(", but only first letter of each word", ", but only first %1 letters of each word", info.len)); switch (info.caseChange) { case IdSuggestions::ccToUpper: text.append(i18n(", in upper case")); break; case IdSuggestions::ccToLower: text.append(i18n(", in lower case")); break; case IdSuggestions::ccToCamelCase: text.append(i18n(", in CamelCase")); break; case IdSuggestions::ccNoChange: break; } if (!info.inBetween.isEmpty()) text.append(i18n(", with '%1' in between", info.inBetween)); if (token[0] == 'T') text.append(i18n(", small words removed")); } else if (token[0] == 'j') { struct IdSuggestionTokenInfo info = evalToken(token.mid(1)); text.append(i18n("Journal")); if (info.len < 0x00ffffff) text.append(i18np(", but only first letter of each word", ", but only first %1 letters of each word", info.len)); switch (info.caseChange) { case IdSuggestions::ccToUpper: text.append(i18n(", in upper case")); break; case IdSuggestions::ccToLower: text.append(i18n(", in lower case")); break; case IdSuggestions::ccToCamelCase: text.append(i18n(", in CamelCase")); break; case IdSuggestions::ccNoChange: break; } } else if (token[0] == 'e') { struct IdSuggestionTokenInfo info = evalToken(token.mid(1)); text.append(i18n("Type")); if (info.len < 0x00ffffff) text.append(i18np(", but only first letter of each word", ", but only first %1 letters of each word", info.len)); switch (info.caseChange) { case IdSuggestions::ccToUpper: text.append(i18n(", in upper case")); break; case IdSuggestions::ccToLower: text.append(i18n(", in lower case")); break; case IdSuggestions::ccToCamelCase: text.append(i18n(", in CamelCase")); break; default: break; } } else if (token[0] == 'v') { text.append(i18n("Volume")); } else if (token[0] == 'p') { text.append(i18n("First page number")); } else if (token[0] == '"') text.append(i18n("Text: '%1'", token.mid(1))); else text.append("?"); result.append(text); } return result; } QString IdSuggestions::formatAuthorRange(int minValue, int maxValue, bool lastAuthor) { if (minValue == 0) { if (maxValue == 0) { if (lastAuthor) return i18n("First and last authors only"); else return i18n("First author only"); } else if (maxValue > 0xffff) return i18n("All authors"); else { if (lastAuthor) return i18n("From first author to author %1 and last author", maxValue + 1); else return i18n("From first author to author %1", maxValue + 1); } } else if (minValue == 1) { if (maxValue > 0xffff) return i18n("All but first author"); else { if (lastAuthor) return i18n("From author %1 to author %2 and last author", minValue + 1, maxValue + 1); else return i18n("From author %1 to author %2", minValue + 1, maxValue + 1); } } else { if (maxValue > 0xffff) return i18n("From author %1 to last author", minValue + 1); else if (lastAuthor) return i18n("From author %1 to author %2 and last author", minValue + 1, maxValue + 1); else return i18n("From author %1 to author %2", minValue + 1, maxValue + 1); } } struct IdSuggestions::IdSuggestionTokenInfo IdSuggestions::evalToken(const QString &token) const { int pos = 0; struct IdSuggestionTokenInfo result; result.len = 0x00ffffff; result.startWord = 0; result.endWord = 0x00ffffff; result.lastWord = false; result.caseChange = IdSuggestions::ccNoChange; result.inBetween = QString(); if (token.length() > pos) { int dv = token[pos].digitValue(); if (dv > -1) { result.len = dv; ++pos; } } if (token.length() > pos) { switch (token[pos].unicode()) { case 0x006c: // 'l' result.caseChange = IdSuggestions::ccToLower; ++pos; break; case 0x0075: // 'u' result.caseChange = IdSuggestions::ccToUpper; ++pos; break; case 0x0063: // 'c' result.caseChange = IdSuggestions::ccToCamelCase; ++pos; break; default: result.caseChange = IdSuggestions::ccNoChange; } } int dvStart = -1, dvEnd = 0x00ffffff; if (token.length() > pos + 2 ///< sufficiently many characters to follow && token[pos] == 'w' ///< identifier to start specifying a range of words && (dvStart = token[pos + 1].digitValue()) > -1 ///< first word index correctly parsed && ( token[pos + 2] == QLatin1Char('I') ///< infinitely many words || (dvEnd = token[pos + 2].digitValue()) > -1) ///< last word index finite and correctly parsed ) { result.startWord = dvStart; result.endWord = dvEnd; pos += 3; /// Optionally, the last word (e.g. last author) is explicitly requested if (token.length() > pos && token[pos] == QLatin1Char('L')) { result.lastWord = true; ++pos; } } if (token.length() > pos + 1 && token[pos] == '"') result.inBetween = token.mid(pos + 1); return result; } diff --git a/src/test/kbibtexfilestest-rawdata.h b/src/test/kbibtexfilestest-rawdata.h index 7c62e83e..e82c2a94 100644 --- a/src/test/kbibtexfilestest-rawdata.h +++ b/src/test/kbibtexfilestest-rawdata.h @@ -1,780 +1,780 @@ /******************************************************************************** Copyright 2019 Thomas Fischer <fischer@unix-ag.uni-kl.de> and others Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ********************************************************************************/ #ifndef KBIBTEX_FILES_TEST_RAWDATA_H #define KBIBTEX_FILES_TEST_RAWDATA_H static const char *bug19489LastAuthors("Ralph"); static const char *bug19489FilesUrlsDois("bart.04.1242.pdf"); static const char *nameswithbracesLastAuthors("{{{{{LastName3A LastName3B}}}}}"); static const char *nameswithbracesFilesUrlsDois(""); static const char *duplicatesLastAuthors("FlajoletSedgewickSedgewickSedgewickSedgewickSedgewickSedgewickSedgewickSedgewickSedgewickSedgewickSedgewickSedgewickSedgewickSedgewickSedgewickSedgewickSedgewickSedgewickSedgewickSedgewickSedgewickWayne"); static const char *duplicatesFilesUrlsDois("http://dblp.uni-trier.de/db/conf/esa/esa96.html#Sedgewick96" "http://dblp.uni-trier.de/db/conf/esa/esa96.html#Sedgewick96http://dblp.uni-trier.de/db/conf/esa/esa96.html#Sedgewick96http://dblp.uni-trier.de/db/journals/jal/jal15.html#SchafferS93http://portal.acm.org/citation.cfm?id=159277.159281&coll=Portal&dl=GUIDE&CFID=89127717&CFTOKEN=92605832" "10.1006/jagm.1993.1031http://portal.acm.org/citation.cfm?id=159277.159281&coll=Portal&dl=GUIDE&CFID=89127717&CFTOKEN=9260583210.1006/jagm.1993.1031full text:Sedgewick1983.pdf:PDF"); static const char *minixLastAuthors("ACMACMACMAasAltingAnglinAnonymousAnonymousAnonymousAnonymousAnonymousAnonymousAnonymousAnonymousAnonymousArbaughAshtonBosChangChenChigiraChittoorChizmadiaChristieCushingDasDasDurrEganFerenceFresquezGallardGallardGallardGer\u0151fiGrehanGuerriniGuhaGuoHartleyHartley" - "HaysHerHerderHernesHernesHowattHsiehIEEEIEEEIEEEJenKachelKanapoulosKellyKimKnudsonKobylanskiKochLakshmiLarribeauLevittLevittLiLouboutinMaginnisMaginnisMartellaMeierMeursMullerNakamaNaniwadekarNaniwadekarNavauxNettoNollOlabeOmuraRameshRennhackkampRennhackkamp" - "RoskosSandSilveiraSmithSmithStevensonSuarezTanenbaumTanenbaumTanenbaumTanenbaumTanenbaumTanenbaumTanenbaumTanenbaumTanenbaumTanenbaumTanenbaumTanenbaumTanenbaumTanenbaumTanenbaumTanenbaumTanenbaumTanenbaumTiwanaTsaiVaidyanathanVikenWainerWangWeiWilliamsWinkler" - "WoodhullWoodhullXuYagerYangde V. Smitvan Moolenbroek"); + "HaysHerHerderHernesHernesHowattHsiehIEEEIEEEIEEEJenKachelKanapoulosKellyKimKnudsonKobylanskiKochLakshmiLarribeauLevittLevittLiLouboutinMaginnisMaginnisMartellaMeierMeursMullerNakamaNaniwadekarNaniwadekarNavauxNettoNollOlabeOmuraRameshRennhackkampRennhackkamp" + "RoskosSandSilveiraSmithSmithStevensonSuarezTanenbaumTanenbaumTanenbaumTanenbaumTanenbaumTanenbaumTanenbaumTanenbaumTanenbaumTanenbaumTanenbaumTanenbaumTanenbaumTanenbaumTanenbaumTanenbaumTanenbaumTanenbaumTiwanaTsaiVaidyanathanVikenWainerWangWeiWilliamsWinkler" + "WoodhullWoodhullXuYagerYangde V. Smitvan Moolenbroek"); static const char *minixFilesUrlsDois("10.1145/322609.32313510.1145/322609.32315310.1145/322609.32315210.1109/ACSAC.1988.11333810.1145/74091.7409310.1145/122153.12216510.1145/101085.10109610.1145/122572.12257510.1109/IWRSP.1991.21862310.1145/163640.163647" - "10.1145/160551.16055810.1145/155848.15585610.1109/EURMIC.1994.39033910.1145/206826.20684610.1145/820127.820179http://www.minix3.org/doc/herder_thesis.pdfhttp://www.minix3.org/doc/alting_thesis.pdf10.1145/1134744.1134747http://www.minix3.org/doc/gerofi_thesis.pdf" - "http://www.minix3.org/doc/EDCC-2006.pdfhttp://www.eu-egee.org/egee_events/events/edcc-6-sixth-european-dependable-computing-conference-18-20-october-2006-coimbra-portugal/http://www.minix3.org/doc/reliable-os.pdfhttp://www.minix3.org/doc/OSR-2006.pdf10.1145/1151374.1151391" - "http://www.usenix.org/publications/login/2006-04/openpdfs/herder.pdfhttp://www.minix3.org/http://www.minix3.org/doc/ACSAC-2006.pdfhttp://minixonxen.skynet.ie/cgi-bin/trac.cgi/attachment/wiki/Report/Report.pdf?format=rawhttp://www.minix3.org/doc/meurs_thesis.pdf" - "10.1109/MC.2006.156http://www.minix3.org/doc/moolenbroek_thesis.pdf10.1145/1348713.1348716"); + "10.1145/160551.16055810.1145/155848.15585610.1109/EURMIC.1994.39033910.1145/206826.20684610.1145/820127.820179http://www.minix3.org/doc/herder_thesis.pdfhttp://www.minix3.org/doc/alting_thesis.pdf10.1145/1134744.1134747http://www.minix3.org/doc/gerofi_thesis.pdf" + "http://www.minix3.org/doc/EDCC-2006.pdfhttp://www.eu-egee.org/egee_events/events/edcc-6-sixth-european-dependable-computing-conference-18-20-october-2006-coimbra-portugal/http://www.minix3.org/doc/reliable-os.pdfhttp://www.minix3.org/doc/OSR-2006.pdf10.1145/1151374.1151391" + "http://www.usenix.org/publications/login/2006-04/openpdfs/herder.pdfhttp://www.minix3.org/http://www.minix3.org/doc/ACSAC-2006.pdfhttp://minixonxen.skynet.ie/cgi-bin/trac.cgi/attachment/wiki/Report/Report.pdf?format=rawhttp://www.minix3.org/doc/meurs_thesis.pdf" + "10.1109/MC.2006.156http://www.minix3.org/doc/moolenbroek_thesis.pdf10.1145/1348713.1348716"); static const char *bug19484refsLastAuthors("AUAIAbell\u00e1nAeyelsAeyelsAeyelsAitchisonAsaiAugustinAugustinAugustinAugustinAugustinAugustinAugustinAugustinAugustinAugustinAvisBN@WorkBachmanBalakrishnanBarndorff-NielsenBayerBeerelBen-HaimBergerBernardBernardBernardBernardBickisBillingsleyBooleBoraty\u0144skaBorodovsky" "BoseBoseBouchon-MeunierBouckaertBouteBouteBrokkenBrownBrownBuckleyBuehlerBurrillBurtonBushellCamererCarnapCasalisChatfieldChojnackiChoquetChrismanChurchCoolenCoolenCoolenCoolenCoolenCooperCooperCoup\u00e9CousoCousoCozmanCozmanCozmanCozmanCozmanCozmanCozmanCram\u00e9r" "DaboniDaboniDaniellDantzigDarwicheDavisDavisonDawidDayhoffDe CoomanDe CoomanDe CoomanDe CoomanDe CoomanDe CoomanDe CoomanDe CoomanDe CoomanDe CoomanDe CoomanDe CoomanDe CoomanDe CoomanDe CoomanDe CoomanDe CoomanDe CoomanDe CoomanDe CoomanDe CoomanDe CoomanDe Cooman" "De CoomanDe MunckDe PalmaDeGrootDegrauweDelbaenDempsterDempsterDennebergDennebergDerriennicDesterckeDhaenensDietzenbacherDoseDoumontDoumontDoumontDoumontDoumontDoumontDoumontDoumontDoumontDoumontDyerECCAIEckelEckelEdwardsEfronEisenEl GhaouiEl GhaouiEl-Atoum" "ElbersEricsonFagiuoliFauserFeronFersonFineFinessoFinkFiorettiFishburnFishburnFishburnFisherFortetFreedmanFreedmanFriedmanFriedmanFriedmanFriedmanFriendFr\u00e9chetFudenbergFukudaFukudaFukudaGaifmanGeisserGhahramaniGhahramaniGilGilGoldbergGoldsteinGoldsteinGoodGood" "GrabischGrafGrapsGroenendaalGr\u00fcnbaumGunawardenaGutinGuti\u00e9rrez-Pe\u00f1aHaddawyHaldaneHaldaneHallHalpernHalpernHammerHampelHanksHarsanyiHarsanyiHartHartfielHartfielHatcherHausslerHermansHermansHermansHerrmannHillHillHippHirschHlad\u00edkHofbauerHogarthHogeveenHolmes" "HumeHutterHuygensHuzurbazarInuiguchiInuiguchiIserlesJacobJaegerJaffrayJaffrayJaffrayJaynesJeffreysJiJohnsonJohnsonJohnsonJohnsonJordanKadaneKadaneKadaneKadaneKadaneKadaneKadaneKallenbergKarassaKarlinKarypisKatzoffKerreKerreKerreKeynesKleeKleeKlee, Jr. Koller" "KolmogorovKoopmanKoopmanKoopmanKoopmansKotzKrieglerKroghKroghKrymskyKubi\u015bKunischKunreutherKutateladzeKuznetsovKyburgLaValleLambrakisLangeLangleyLaplaceLaplaceLarkeyLarkeyLarra\u00f1agaLaskeyLauritzenLauritzenLawryLawryLetacLeviLeviLeviLevineLevineLiuLiuLoLodwick" "LoeffenLoeffenLoeligerMaa\u00dfMaa\u00dfMacKayMaceManskiMantelMarcotMartinMarzettaMas-ColellMazzuchiMcKinneyMevelMillerMilmanMilneMinkaMirandaMirandaMirandaMirandaMirandaMirandaMirandaMirandaMirandaMirandaMirandaMirandaMirandaMitchisonMoralMoralMoralMoralMoralMoreaux" "MorishimaMorrisMosimannMosimannMoslehianMr\u00e1zMunroMurphyM\u00fcllerNadarajahNashNasriNauNauNemirovskiNeumaierNeumaierNeumaierNorthropNuutilaO'HaraOliphantOltvaiOrcuttOshimeOshimePalusznyPapadimitriouPardalosParsonsPatilPazzaniPearlPearlPereiraPereiraPetersPeterson" "PetriniPinkusPradePradePrautzschPriestleyProdonP\u00f3lyaQuQuaeghebeurQuaeghebeurQuaeghebeurQuaeghebeurQuaeghebeurQuaeghebeurQuaeghebeurQuaeghebeurQuaeghebeurQuaeghebeurQuaeghebeurQuaeghebeurQuaeghebeurQuaeghebeurQuaeghebeurQuaeghebeurQuaeghebeurQuaeghebeurQuaeghebeur" "RafteryRam\u00edkRegazziniRenooijRenooijRenooijRevuzRiabackeRiosRobertsRobinsonRockafellarRohnRommelfangerRommelfangerRosenthalRotaRoubensRoyRubinRudolphRuedaSIKSSIPTASabbadinSakawaSarabiaSarukkaiSavageSchechterSchemppSchervishSchlaiferSchneierSchwartzSch\u00f6lkopf" "SegaleSeidelSeidenfeldSeidenfeldSeidenfeldSeidenfeldSeidenfeldSeidenfeldSeidenfeldSenetaSentzSentzSeoShaferShaferShaferShannonShapleyShapleyShepardShimonySigmundSigmundSineSivaganesanSkyrmsSmithSmithSmithSmithSnellSnellSousaSoysterSpiegelhalterStegunSteuerSteuer" "StoyeStrassenStrensStroblSudderthSuppesSuppesSuvritSzaniawskiTaalTaalTaalTallonTanakaTaylorTessemThapaThatcherThompsonTroffaesTroffaesTroffaesTroffaesTroffaesTroffaesTsaiTsitsiklisTukeyUtkinVan LoanVandenbergheVanstoneVaraiyaVerdegayVeroneseVeroneseVicigVicig" "VicigVicigVicigVicigWagnerWagnerWagnerWagnerWagnerWagnerWagnerWagnerWagnerWagnerWagnerWagnerWalleyWalleyWalleyWalleyWalleyWalleyWalleyWalleyWalleyWalleyWalleyWalleyWalleyWallnerWallnerWalterWankaWassermanWatsonWatsonWeichselbergerWellmanWhittleWhittleWilliams" "WilliamsWilliamsWilliamsWilliamsWilliamsWilsonWongYeYlvisakerYuZabellZabellZabellZabellZabellZadehZaffalonZaffalonZaffalonZaffalonZaffalonZaffalonZaffalonZaffalonZaffalonZaffalonZaffalonZaffalonZaffalonZaffalonZaffalonZaffalonZagoraiouZelenyZieglerZieglerZimmermann" "ZimmermannZimmermannZimmermannZimmermannde Boorde Finettide Finettide Finettide Finettide Finettide Finettide Finettide Finettide Finettide Finettide Finettide Finettide Finettide Finettide Finettide Finettide Finettide Jongvan der Gaagvan der Gaagvan der Gaag" "van der Gaagvan der Gaagvan der Gaagvan der Gaagvan der Gaagvan der Gaagvan der Gaagvon Neumannvon Winterfeldt\u0160kulj\u0160kulj"); static const char *bug19484refsFilesUrlsDois("10.1016/j.ijar.2011.04.004article/Couso-Moral-2011.pdfinbook/Morishima-1964-Perron-Frobenius.pdf10.1016/j.ijar.2010.12.002inbook/Dayhoff-Schwartz-Orcutt-1978.pdf" "http://users.ugent.be/~equaeghe/#EQ-2010-SSS10.1016/0165-0114(94)00353-9article/Buckley-1995.pdfhttp://www.jstor.org/stable/2318065article/Peterson-1972-Radon.pdf10.1016/S0004-3702(98)00089-7article/Fagiuoli-Zaffalon-1998-2U.pdfhttp://www.jstor.org/stable/1402732" "article/Edwards-1983-Pascal.pdfhttp://www.jstor.org/stable/295834410.1214/aosarticle/Hipp-1974.pdfhttp://www.jstor.org/stable/2984504article/Dempster-1968.pdfhttp://www.ams.org/bull/1940-46-10/S0002-9904-1940-07294-5/S0002-9904-1940-0729\n4-5.pdfhttp://projecteuclid.org/euclid.bams/1183503229" "article/Koopman-1940-ams.pdf10.1016/j.ijar.2004.10.003article/Cozman-2005-graphical.pdf10.1023/A:1018936829318article/Ha-etal-1998.pdfarticle/Daboni-1975.pdf10.1016/S0378-3758(01)00201-4article/Zaffalon-2002-ncc.pdf10.1016/j.envsoft.2004.10.006http://www.sciencedirect.com/science/article/B6V05-4RM881N-1/1/385e96ea2df064e7\nab875367eafbf9f9" "10.1016/j.fss.2007.12.021article/Combarro-Miranda-2008-polytope.pdfhttp://www.jstor.org/stable/2984417article/Tatcher-1964.pdf10.1080/15598608.2009.10411926article/Aughenbaugh-Herrmann-2009.pdf10.1023/A:1014745904458article/Kozine-Utkin-2002.pdfarticle/DeFinetti-1933c.pdf" "10.1007/s00500-002-0217-3article/Gilbert-DeCooman-Kerre-2003.pdfarticle/DeFinetti-1933a.pdf10.1186/1471-2105-7-263article/Munch-Krogh-2006.pdfhttp://www.jstor.org/stable/25050444article/Basu-Pereira-1983b.pdf10.1215/S0012-7094-51-01835-210.1142/S0218488502001867" "article/Miranda-Grabisch-Gil-2002.pdfinbook/VanDorp-Mazzuchi-2003.pdfarticle/Fodor-Marichal-Roubens-1995.pdfhttp://www.jstor.org/stable/1403571article/Pericchi-Walley-1991.pdfhttp://www.jstor.org/stable/3689397article/Fishburn-1980.pdfhttp://www.jstor.org/stable/2346164" "article/Walley-1996-IDM.pdf10.1016/0024-3795(86)90319-8article/Bushell-1986-Hilbert-metric.pdfhttp://diglib.cib.unibo.it/diglib.php?inv=35&term_ptnum=1&format=jpg10.4134/JKMS.2010.47.1.017article/Bot-Lorenz-Wanka-2010.pdfhttp://www.jstor.org/stable/2984207article/Ericson-1969.pdf" "http://www.jstor.org/stable/213265910.1137/1037083article/Rosenthal-1995-Markov-rate.pdfhttp://www.jstor.org/stable/2238958article/Bloch-Watson-1967.pdf10.1214/aosarticle/Zabell-1982.pdf10.1214/ssarticle/Cifarelli-Regazzini-1996.pdf10.1007/s10700-004-4200-6" "article/Rommelfanger-2004.pdfhttp://www.jstor.org/stable/2983842article/Smith-1961.pdfhttp://books.google.com/books?id=0bTK5uWzbYwChttp://www.jstor.org/stable/687102article/Williams-1978.pdfhttp://www.jstor.org/stable/263276510.1287/mnsc.40.2.263article/Luce-VonWinterfeld-1994.pdf" "http://www.jstor.org/stable/2983957article/Whittle-1955.pdfhttp://www.jstor.org/stable/2291525article/GutierrezPena-Smith-1995.pdfarticle/Krein-Milman-1940.pdfhttp://www.jstor.org/stable/2683137article/Tukey-1986-sunset.pdf10.1215/S0012-7094-55-02209-2article/Hammer-1955.pdf" "10.1016/S0047-259X(03)00095-2article/Consonni-Veronese-GutierrezPena-2004.pdf10.1016/j.ijar.2008.03.01210.1080/03081070500190839article/Augustin-2005.pdf10.1016/0888-613X(88)90117-Xarticle/Pearl-1988-intervals.pdfarticle/DeFinetti-1933b.pdf10.1111/1467-9469.00075" "article/Walley-1997-bounded.pdfhttp://www.jstor.org/stable/2984811article/Suppes-1974.pdfhttp://www.numdam.org/item?id=AIF_1956__6__187_0article/Revuz-1956.pdfhttp://www.nsc.ru/interval/Library/InteBooks/InexactLP.pdfhttp://cgm.cs.mcgill.ca/~avis/C/lrs.html" "10.1080/03081077508960870http://www.mscand.dk/article.php?id=1449article/Klee-1956.pdf10.1007/s10472-005-9006-xarticle/DeCooman-2005-order.pdftechreport/Williams-1975.pdfhttp://www.jstor.org/stable/2268039article/Shimony-1955.pdf10.1016/j.ijar.2006.06.001article/Troffaes-2007-decision.pdf" "http://www.cs.hut.fi/~enu/thesis.htmlhttp://www.jstor.org/stable/2283728article/Conner-Mosimann-1969.pdf10.1007/s10959-007-0055-4article/Miranda-DeCooman-Quaeghebeur-2007-Hausdorff.pdf10.1007/s12543-009-0002-4article/Ovaere-deschrijver-Kerre-2009.pdfhttp://www.jstor.org/stable/2631295" "article/Harsanyi-1982-comment.pdf10.1007/s11225-007-9064-7article/Wagner-2007-Smith-Walley.pdf10.1080/0196972730854591210.1214/aosarticle/Diaconis-Ylvisaker-1979.pdf10.1016/j.ejor.2005.03.005article/Miranda-Combarro-Gil-2006-extreme.pdf10.1016/j.jspi.2004.03.005" "article/Miranda-DeCooman-Couso-2005-multivalued.pdf10.1016/j.ijar.2006.11.003article/Bruening-Dennenberg-2007-belELP.pdf10.3982/TE596article/Epstein-Seo-2010.pdf10.1093/nararticle/Rho-Tang-Ye-2010.pdfarticle/Utkin-Augustin-2007.pdf10.1186/1471-2105-7-239article/Munch-etal-2006.pdf" "10.1023/A:1016705331195article/DeCooman-2001.pdfhttp://www.jstor.org/stable/224275210.1214/aosarticle/Casalis-1996.pdf10.1016/j.ijar.2010.08.011article/DeCooman-etal-2010.pdfhttp://www.jstor.org/stable/2631294article/Kadane-Larkey-1982.pdf10.1287/mnsc.17.4.B141" "article/Bellman-Zadeh-1970.pdfhttp://www.sciencedirect.com/science/article/pii/S037837580100206310.1016/S0378-3758(01)00206-3article/Zaffalon-2002-missing.pdf10.1016/j.artint.2004.05.006article/DeCooman-Zaffalon-2004-incomplete.pdf10.1093/bioinformaticsarticle/Liu-Mueller-2003.pdf" "10.1006/game.1999.0717http://bcn.boulder.co.us/government/approvalvote/altvote.htmlhttp://www.worldscibooks.com/compsci/6747.html10.1016/S0377-2217(99)00473-7article/Dubois-Prade-Sabbadin-2001.pdf10.1016/j.ijar.2006.07.014article/Gillett-et-al-2007.pdf10.1093/nar" "http://www.people.cornell.edu/pages/df36/CONJINTRnewTEX.pdf10.1007/BF00485351article/Zabell-1992.pdf10.1016/S0165-0114(98)00449-7article/Inuiguchi-Ramik-2000.pdf10.1006/jeth.2000.2746article/Hart-MasColell-2001.pdf10.1017/S1357530900000156article/Couso-Moral-Walley-2000-independence.pdf" "10.1016/S0378-3758(01)00209-9article/DeCooman-2002.pdfhttp://www.jstor.org/stable/295857810.1214/aosarticle/Buehler-1976.pdfhttp://www.amsta.leeds.ac.uk/~charles/statloghttp://repository.cmu.edu/statistics/3810.1287/mnsc.28.2.124article/Kadane-Larkey-1982-reply.pdf" "10.1023/A:102582232174310.1007/s101070100286article/BenTal-Nemirovski-2002.pdf10.1214/aosarticle/Morris-1982.pdf10.1006/jmbi.1994.1104article/Krogh-etal-1994.pdfhttp://www.jstor.org/stable/224306310.1214/aoparticle/Diaconis-Freedman-1980-partial-xch.pdfhttp://people.cs.ubc.ca/~murphyk/Papers/intro_gm.pdf" "http://www.jstor.org/stable/2291741article/Kadane-Schervish-Seidenfeld-1996-foregone.pdf10.1007/s10472-005-9011-0article/Moral-2005-desir.pdfhttp://www.stat.cmu.edu/tr/tr660/tr660.html10.1016/0165-0114(91)90019-Marticle/Buckley-Qu-1991.pdfhttp://www.jstor.org/stable/3689308" "article/Dyer-1983.pdfhttp://www.jstor.org/stable/168933article/Soyster-1973.pdf10.1007/BF02564426article/GutierrezPena-Smith-1997-review.pdf10.1007/BF01448847article/vonNeumann-1928.pdf10.1007/978-3-540-85027-4_2910.1016/j.ijar.2008.02.005article/Antonucci-Zaffalon-2008.pdf" "10.1109/18.910572article/Kschischang-Frey-Loeliger-2001.pdfhttp://www.jstor.org/stable/187511article/Seidenfeld-1985.pdfhttp://www.digizeitschriften.de/dms/img/?PPN=GDZPPN00036554810.1007/BF02293050article/Avis-Fukuda-1992.pdf10.1016/0885-064X(88)90006-4article/Georgakopoulos-Kavvadias-Papadimitriou-1988.pdf" "10.1007/3-540-31182-3_66incollection/Jimenez-etal-2005.pdf10.1016/j.ijar.2007.09.003article/Ide-Cozman-2008.pdf10.1007/BF0104925910.1016/0304-4068(94)90033-7article/Dietzenbacher-1994-Perron-Frobenius.pdfhttp://decsai.ugr.es/~lci/journal-papers-pdf/ijuf94.pdf" "10.1142/S0218488594000146article/DeCampos-Huete-Moral-1994-intervals.pdf10.1016/j.artint.2008.03.001article/DeCooman-Hermans-2008-bridging.pdf10.3150/09-BEJ182http://www.jstor.org/stable/2237603article/Billingsley-1961.pdf10.1016/j.jspi.2003.07.003article/Augustin-Coolen-2004.pdf" "http://www.jstor.org/stable/1969529article/Nash-1951.pdfhttp://www.stat.uni-muenchen.de/~thomas/team/diplomathesis_GeroWalter.pdfmastersthesis/Walter-2006.pdf10.1016/0167-8396(95)00031-3article/Trump-Prautzsch-1996.pdf10.1007/s10472-011-9231-4article/Miranda-Zaffalon-2011.pdf" "http://www.sipta.org/isipta09/proceedings/063.htmlhttp://www.jstor.org/stable/2682880article/Mantel-1976-tails.pdfhttp://cm.bell-labs.com/cm/ms/what/shannonday/shannon1948.pdfarticle/Shannon-1948.pdfhttp://decsai.ugr.es/~smc/isipta99/proc/072.html10.1023/A:1020287225409" "article/Kunreuther-et-al-2002.pdfhttp://www.ams.org/journals/tran/1962-103-01/S0002-9947-1962-0147879-X/S0002-99\n47-1962-0147879-X.pdf10.1090/S0002-9947-1962-0147879-Xarticle/McKinney-1962.pdfhttp://www.jstor.org/stable/3214695article/Hartfiel-1991.pdf10.1016/j.ijar.2008.03.011" "article/Coolen-Augustin-2008-IDM-alternative.pdfhttp://www.jstor.org/stable/1969003article/Koopman-1940-axioms.pdfhttp://hdl.handle.net/10338.dmlcz/135726article/Inuiguchi-2006.pdfhttp://www.jstor.org/stable/184348article/Northrop-1936-prob-in-QM.pdf10.1016/S0925-7721(96)00023-5" "article/Avis-Bremner-Seidel-1997.pdf10.1046/j.1464-410x.1999.0830s1079.xarticle/OHara-OHara-1999.pdfhttp://www.jstor.org/stable/2684602article/Genest-MacKay-1986.pdf10.1016/0024-3795(94)00222-3article/Rudolph-1996-duality.pdfarticle/Benavoli-et-al-2010.pdfhttp://www.jstor.org/stable/2284229" "article/Savage-1971.pdf10.1007/BF01441156article/Lange-1995.pdfhttp://www.jstor.org/stable/2981696article/Goodhardt-Ehrenberg-Chatfield-1984.pdfhttp://iospress.metapress.com/content/22bh7djyjk86a55harticle/DeCooman-Troffaes-Miranda-2005-Kerre.pdf10.1007/978-3-642-14055-6_7" "10.1007/s10472-005-9009-7http://www.schneier.com/book-applied.html10.1287/mnsc.28.2.124aarticle/Harsanyi-1982-rejoinder.pdfhttp://www.m-hikari.com/imf-password2007/13-16-2007/mazaheriIMF13-16-2007-3.pdf\narticle/Mazaheri-Nasri-2007.pdf10.1016/j.ijar.2009.01.005" "article/Antonucci-etal-2009-milident.pdfhttp://www.gutenberg.org/ebooks/1511410.1214/aomsarticle/Bildikar-Patil-1968.pdfhttp://books.google.com/books?id=Ovo3AAAAMAAJhttp://www.ams.org/journals/tran/1936-039-03/S0002-9947-1936-1501854-3/S0002-99\n47-1936-1501854-3.pdf" "article/Koopman-1936.pdf10.1098/rspa.1934.0050article/Fisher-1934.pdf10.1016/S0165-0114(02)00248-8article/Neumaier-2003-surprise.pdf10.1142/S0218488503002156article/Pelessoni-Vicig-2003-risk.pdf10.1088/0957-0233article/Dose-2007-gravity.pdf10.1109/TPC.2002.805164" "article/Doumont-2002.pdf10.1016/j.geb.2009.03.013article/Halpern-2010.pdf10.1023/A:1018911830478article/Fishburn-LaValle-1998.pdfhttp://www.jstor.org/stable/2332299article/Haldane-1945.pdf10.1613/jair.1292article/Halpern-Koller-2004.pdfhttp://www.handleidinghtml.nl" "http://projecteuclid.org/euclid.kjm/1250521436article/Oshime-1983-Perron.pdf10.1007/978-3-540-68996-6_5inbook/VanderGaag-Renooij-Coupe-2007.pdfhttp://www.jstor.org/stable/2282931article/Johnson-1967.pdf10.1007/978-3-540-44792-4_2010.1016/S0020-0255(01)00090-1" "article/Walley-DeCooman-2001.pdfhttp://hdl.handle.net/1854/LU-1863955http://www.jstor.org/stable/224166810.1214/aosarticle/Schervish-1989-forecaster.pdfhttp://www.jstor.org/stable/2284038article/Hill-1968-An.pdf10.1016/S0888-613X(99)00007-9article/Walley-DeCooman-1999.pdf" "10.1016/S0933-3657(03)00046-010.1214/ssarticle/Fishburn-1986.pdfhttp://users.ugent.be/~equaeghe/content/EQ-2002-UCL-memoire-hyperlinked.pdfmastersthesis/Quaeghebeur-2002.pdf10.1142/S0218001401000836article/Ghahramani-2001-HMM+BN-intro.pdfhttp://frameindex.htm" "http://www.jstor.org/stable/25050417article/Basu-Pereira-1983a.pdf10.1006/game.1993.1021article/Fudenberg-Kreps-1993.pdf10.1016/0165-4896(89)90056-5article/Chateauneuf-Jaffray-1989.pdf10.1016/j.ijar.2006.07.017article/Wallner-2007-extremepoints.pdf10.1016/j.fss.2007.11.020" "article/Quaeghebeur-DeCooman-2008-ELP-FSS.pdfhttp://www.jstor.org/stable/2683760article/Heath-Sudderth-1976-exchangeability.pdfhttp://books.google.com/books?id=4UY-ucucWucC10.1016/0020-0255(85)90025-810.1023/A:1009778005914article/Friedman-1997.pdfhttp://uivtx.cs.cas.cz/~rohn/handbook" "10.1016/S0096-3003(97)10140-0article/Wong-1998.pdf10.1016/j.ress.2005.11.042article/Hall-2006-sensitivity-indices.pdf10.1007/BF00531932article/Rota-1964-moebius.pdf10.1016/j.jspi.2003.09.005article/Walley-Pelessoni-Vicig-2004.pdfhttp://www.jstor.org/stable/3689148" "article/Matheiss-Rubin-1980.pdf10.1126/science.1094068article/Friedman-2004.pdfhttp://www.cs.unb.ca/profs/bremner/pd10.1007/PL00009389http://www.jstor.org/stable/2288190article/Goldstein-1983.pdf10.1016/S1389-1286(00)00044-Xarticle/Sarukkai-2000-link-prediction.pdf" "10.1016/S0378-3758(01)00204-Xarticle/Walley-2002-reconciling.pdf10.1016/S0004-3702(00)00029-1article/Cozman-2000-cn.pdfhttp://www.tramy.us/numpybook.pdfarticle/Daboni-1953.pdf10.1016/j.ijar.2004.10.009article/Ferreira-Cozman-2005-AR+.pdfhttp://www.numdam.org/item?id=AIHP_1930__1_2_117_0" "article/Polya-1930.pdfhttp://www.jstor.org/stable/3009940article/Inuiguchi-Sakawa-1997.pdf10.1016/j.ijar.2006.07.019article/Williams-2007-notes.pdf10.1016/0022-247X(74)90133-4article/Delbaen-1974.pdf10.1016/0167-6377(89)90010-2article/Jaffray-1989.pdfhttp://www.jstor.org/stable/687182" "article/Williams-1980.pdf10.1214/aosarticle/Huber-Strassen-1973.pdf10.1111/j.1365-2362.2010.02272.xarticle/Ioannidis-et-al-2010-afraid.pdf10.1198/016214506000001437article/Gneiting-Raftery-2007.pdf10.1016/j.jsc.2003.08.007article/Fukuda-2004-Minkowski-addition.pdf" "10.1007/978-1-4020-8202-310.1016/j.ijar.2006.07.018article/Vicig-Zaffalon-Cozman-2007-notes.pdfhttp://www.jstor.org/stable/224236610.1214/aosarticle/Nau-1992.pdfhttp://links.jstor.org/sici?sici=0035-9246(1969)31:2%3C195:SBMISF%3E2.0.CO10.1016/0305-0548(83)90004-7" "10.1016/j.ijar.2004.10.002article/Bernard-2005.pdf10.1023/A:1007413511361article/Domingos-Pazzani-1997.pdf10.1016/0888-613X(92)90006-Lhttp://hdl.handle.net/1854/LU-18236510.1080/03081079708945160article/DeCooman-1997-postheo1.pdf10.1016/0377-2217(95)00008-9" "article/Rommelfanger-1996.pdfbook/Walley-1991-book.pdfbook/Walley-1991.pdf10.1016/j.ijar.2006.12.009article/Miranda-DeCooman-2007-margext.pdf10.1016/0004-3702(95)00009-7article/Walley-1996-expert.pdf10.1007/978-1-4020-8202-3http://portal.acm.org/citation.cfm?doid=1086642.1086647" "10.1145/1086642.1086647article/Boute-2005.pdf10.1007/s10472-005-9004-zarticle/Cozman-Walley-2005-graphoid.pdf10.1007/BF02213460article/Zabell-1995.pdfhttp://www.jstor.org/stable/1268384article/Miller-1980-gamma.pdf10.1016/0304-4068(94)90028-0article/Fujimoto-Oshime-1994-Perron-Frobenius.pdf" "10.1109/3468.833093article/DeCooman-Aeyels-2000.pdf10.1016/j.ijar.2010.01.007article/Antonucci-etal-2010-GL2U.pdfhttp://journal.sjdm.org/jdm7303b.pdfarticle/Krantz-Kunreuther-2007.pdf10.1093/biometarticle/Mardia-ElAtoum-1976.pdfhttp://www.jstor.org/stable/1969530" "article/Robinson-1951.pdfhttp://books.google.com/books?id=SsBPTDFwnpoChttp://www.cs.utexas.edu/~suvrit/work/research.html10.1023/B:SYNT.0000029944.99888.a7article/Gaifman-2004.pdfhttp://hdl.handle.net/1854/6279mastersthesis/Quaeghebeur-2001.pdfhttp://www.ams.org/journals/tran/2004-356-12/S0002-9947-04-03470-1" "article/Gaubert-Gunawardena-2004-Perron.pdf10.1016/j.ijar.2009.06.007article/Skulj-2009-impmarkov.pdfhttp://links.jstor.org/stable/2984416article/Aitchison-1964-tolerance.pdf10.1016/j.ijar.2005.03.001article/Baroni-Vicig-2005-interchange.pdf10.1007/978-1-4020-8202-3" "http://www.jstor.org/stable/2290285article/Wasserman-Kadane-1992.pdf10.1016/S0888-613X(00)00031-1article/Walley-2000-towards.pdfhttp://www.jstor.org/stable/2287313article/Diaconis-Zabell-1982.pdfhttp://www.jstor.org/stable/2250183article/Johnson-1932.pdfhttp://www.sipta.org/isipta07/proceedings/proceedings-optimised.pdf" "proceedings/ISIPTA-2007.pdf10.1016/j.ijar.2006.07.020article/Cano-etal-2007-cn.pdf10.1214/aosarticle/Lo-1986-finite-sampling.pdf10.1016/j.ress.2004.03.005article/Hall-Lawry-2004-approx.pdf10.1109/43.736573article/Xie-Beerel-1998-stateclassif.pdfhttp://www.jstor.org/stable/2332350" "article/Haldane-1948.pdfhttp://www.math.technion.ac.il/sat/papers/1article/Pinkus-2005-approx.pdfhttp://www.jstor.org/stable/2239146article/Dempster-1967.pdf10.1038/415530aarticle/VantVeer-etal-2002.pdf10.1016/S0165-0114(99)00082-2article/Jamison-Lodwick-2001.pdf" "http://www.jstor.org/stable/3689177article/Steuer-1981.pdfhttp://books.google.com/books?id=MuEFJR7Ek4EC10.1016/j.ejor.2005.08.016article/Haddad-Moreaux-2007.pdf10.1016/S0167-7152(97)00060-6article/Boratynska-1997.pdfhttp://repository.cmu.edu/statistics/29article/Schervish-Seidenfeld-Kadane-2002-incoherence.pdf" "http://www.jstor.org/stable/232272510.2307/2322725article/Roy-1987.pdf10.1214/aosarticle/Seidenfeld-Wasserman-1993.pdf10.1007/BF02888345article/Giron-Rios-1980.pdfhttp://www.ams.org/proc/1990-109-02/S0002-9939-1990-0948156-X/S0002-9939-1990-0\n948156-X.pdfarticle/Sine-1990-Perron-Frobenius.pdf" "http://www.jstor.org/stable/188357article/Skyrms-1993.pdf10.1016/0165-1889(94)00819-4article/Fudenberg-Levine-1995.pdfhttp://www.numdam.org/item?id=AIHP_1937__7_1_1_0article/DeFinetti-1937.pdf10.1080/02331889308802432article/Arnold-Castillo-Sarabia-1993.pdf" "http://www.jstor.org/stable/2025732article/Levi-1977.pdfhttp://www.jstor.org/stable/2333468article/Mosimann-1962.pdfhttp://www.jstor.org/stable/2242823article/Diaconis-Freedman-1982-exchangeability.pdf10.1016/0167-7152(93)90066-Rarticle/Coolen-1993.pdfhttp://www.sciencedirect.com/science/article/pii/S0888613X0600096X" "10.1016/j.ijar.2006.07.013article/Campos-Cozman-2007-epistemic.pdf10.1016/j.ijar.2005.12.001article/Kreinovich-Xiang-Ferson-2006.pdf10.1016/j.fss.2007.04.004article/Inuiguchi-2007.pdfhttp://hdl.handle.net/2115/30499article/Tanaka-1993.pdf10.1016/j.ijar.2008.03.010" "article/DeCooman-Miranda-Quaeghebeur-2009-RIP.pdfhttp://www.stanford.edu/~boyd/cvxbook10.1007/BF01753431article/Shapley-1971.pdfhttp://www.numdam.org/item?id=AIHP_1948__10_4_215_0article/Frechet-1948.pdf10.1016/j.ijar.2007.12.001article/Miranda-2008-survey.pdf" "10.1007/978-1-4020-8202-310.1017/S0269964809990039http://www.gutenberg.org/ebooks/32625article/Moslehian-2006.pdfhttp://www.jstor.org/stable/2988546article/Walley-Gurrin-Burton-1996.pdf10.1016/S0888-613X(02)00087-7article/Miranda-DeCooman-2003.pdf10.1093/bjps" "article/Dawid-1985-symmetry.pdfhttp://www.jstor.org/stable/2290650article/Consonni-Veronese-1992.pdf10.1016/S0378-3758(01)00281-6article/GutierrezPena-Rueda-2003.pdfarticle/Bernard-1997-specificity.pdf10.1007/PL00012529article/Kubis-2002.pdf10.1016/j.ijar.2004.10.007" "article/Pelessoni-Vicig-2005-convex.pdf10.1007/BF0256267610.1126/science.1115327article/Hsu-et-al-2005.pdfhttp://www.jstor.org/stable/2984087article/Good-1952.pdf10.1016/S0020-0255(99)00007-9article/DeCooman-Aeyels-1999.pdf10.1038/nrg1272article/Barabasi-Oltvai-2004.pdf" "10.1214/088342304000000026article/Jordan-2004-graphical.pdf10.1016/j.jmaa.2008.05.071article/DeCooman-Troffaes-Miranda-2008-exact.pdfhttp://www.ifor.math.ethz.ch/~fukuda/polyfaq/polyfaq.htmlhttp://www.jstor.org/stable/1967495article/Daniell-1918.pdfhttp://books.google.com/books?id=79wZAQAAIAAJ" "10.1214/aosarticle/Seidenfeld-Schervish-Kadane-1995-preference.pdf10.1371/journal.pgen.1001290article/Kaplan-etal-2011.pdf10.1214/aosarticle/Efron-1978-expfam.pdf10.1111/1467-9469.00243article/Consonni-Veronese-2001.pdf10.1007/s10700-005-3663-4article/Lodwick-Bachman-2005.pdf" "http://portal.acm.org/citation.cfm?doid=103162.10316310.1145/103162.103163article/Goldberg-1991-float.pdfhttp://www.jstor.org/stable/2372648article/Davis-1954.pdfarticle/Grabisch-1995.pdfhttp://www.jstor.org/stable/1427899article/Hartfiel-Seneta-1994.pdf10.1016/j.ijar.2008.07.003" "article/Destercke-etal-2008-unifying1.pdfhttp://fma2.math.uni-magdeburg.de/~henk/preprints/henkrichter-gebert ziegler&basic properties of convex polytopes.pdfhttp://www.jstor.org/stable/2025161article/Levi-1974.pdf10.1016/j.laa.2005.08.024article/Huang-Huang-Tsai-2006-Hilbert-metric.pdf" "http://hdl.handle.net/1854/LU-470245mastersthesis/Dhaenens-2007.pdf10.1214/009053606000000740article/Nau-2006-shape.pdf10.1016/j.ijar.2007.07.007article/Miranda-DeCooman-Quaeghebeur-2007-finitely.pdfhttp://www.ifor.math.ethz.ch/~fukuda/cdd_home10.1007/3-540-61576-8_77" "10.1023/A:1018985914065article/Mraz-1998.pdf10.1093/bioinformaticsarticle/Aach-Church-2001.pdfhttp://repub.eur.nl/res/pub/8510.1016/j.ress.2004.03.007article/DeCooman-Troffaes-2004.pdfhttp://www.numdam.org/item?id=AIF_1954__5__131_010.5802/aif.53article/Choquet-1954.pdf" "10.1214/aoparticle/Hartman-Watson-1974.pdf10.1112/blmsarticle/Grunbaum-Shepard-1969.pdfhttp://equaeghe.github.com/murasyphttp://www.cs.uu.nl/dazzle10.1145/1088348.108835110.1023/A:1016398407857inbook/deFinetti-1937-foresight.pdf10.1080/15598608.2009.10411920" "article/DeCampos-etal-2009.pdfarticle/DeFinetti-Jacob-1935.pdf10.1080/15598608.2009.10411908article/Hampel-2009.pdf10.1080/15598608.2009.10411909article/Kozine-Krymsky-2009.pdf10.1080/15598608.2009.10411923article/Stoye-2009.pdf10.1080/15598608.2009.10411907" "article/CoolenSchrijner-etal-2009.pdf10.1080/15598608.2009.10411913article/Pelessoni-Vicig-2009.pdf10.1080/15598608.2009.10411910article/Bose-2009-imposition.pdf10.1080/15598608.2009.10411921article/Wilson-Huzurbazar-Sentz-2009.pdfhttp://www.jstor.org/stable/687386" "10.1093/bjpsarticle/deFinetti-1981-BJPS.pdf10.1080/15598608.2009.10411922article/Fuchs-Neumaier-2009.pdf10.1080/15598608.2009.10411924article/Walter-Augustin-2009.pdf10.1080/15598608.2009.10411917article/Danielson-Ekenberg-Riabacke-2009.pdf10.1080/15598608.2009.10411915" "article/Strobl-Augustin-2009.pdf10.1080/15598608.2009.10411912article/Montgomery-Coolen-Hart-2009.pdf10.1080/15598608.2009.10411916article/Farrow-Goldstein-2009.pdf10.1080/15598608.2009.10411919article/Bickis-2009.pdf10.1007/BFb0086576inbook/Schempp-1977-Bernstein.pdf" "10.1080/15598608.2009.10411914article/Crossman-CoolenSchrijner-Coolen-2009.pdf10.1080/15598608.2009.10411918article/Smithson-Segale-2009.pdf10.1080/15598608.2009.10411925article/CoolenSchrijner-Maturi-Coolen-2009.pdf10.1080/15598608.2009.10411911article/Bose-2009-smoothness.pdf" "10.1016/j.artint.2008.04.00110.1016/j.ijar.2004.05.00910.1016/S0004-3702(02)00247-310.1016/0004-3702(90)90026-V10.3168/jds.2009-302010.1613/jair.337410.1016/S0933-3657(02)00012-X10.1109/21.384252http://www.bnatwork.orghttp://www.siks.nlhttp://www.auai.orghttp://www.eccai.org" "http://www.sipta.org10.1016/j.ijar.2005.10.00310.1007/978-3-642-03070-3_5910.1007/3-540-60112-0_14inbook/Chateauneuf-Jaffray-1995.pdfhttp://www.jstor.org/stable/262747610.1287/mnsc.6.1.73article/Charnes-Cooper-1959.pdfhttp://www.jstor.org/stable/262715910.1287/mnsc.1.3-4.197" "article/Dantzig-1955.pdf10.1016/0022-247X(75)90189-410.1007/BF0158011110.1007/b97283book/Dantzig-Thapa-2003.pdfhttp://bugseng.com/products/ppl/documentation/BagnaraRZH02.pdf10.1007/3-540-45789-5_17inproceedings/Bagnara-etal-2002.pdf"); static const char *bug19362file15701databaseLastAuthors("AbeAbeAlazzawiArakiArakiArakiArakiArakiArakiArakiArnoldArvesonArzanoAudretschBagarelloBahnsBahnsBalachandranBaumannBaumg\u00e4rtnerBerkowitzBernardBertrandBieliavskyBieliavskyBischoffBoasBollerBollerBorchersBorchersBorchersBorchersBorchersBorchersBorchersBorchers" "BorchersBorchersBorchersBorchersBorchersBorchersBorchersBorchersBorchersBorchersBorchersBorchersBorchersBorchersBostelmannBostelmannBrandenbergerBuchholzBuchholzBuchholzBuchholzBuchholzBuchholzBuchholzBuchholzBuchholzBuchholzBuchholzBuchholzBuchholzBuchholz" "BuchholzBuchholzBuchholzBuchholzBuchholzBuchholzB\u00f6ckenhauerCamassaCamassaCarpiCarpiCasiniCastro-AlvaredoChandrasekharChiconeClaessensClarkConnesConnesConnesConwayConwayCornwellCornwellCuntzD'AntoniDamekDappiaggiDavidsonDerezinskiDimockDimockDixmierDonoghue" "DoplicherDoplicherDoplicherDoreyDriesslerDriesslerDurenDybalskiDybalskiDybalskiDybalskiEbrahimi-FardEckmannEckmannEllisEllisEmchEmchEngli\u00c5{{{{{{{{{{{{{{{{{{{{\u00a1}}}}}}}}}}}}}}}}}}}}EpsteinEpsteinFaddeevFerrariFewsterFewsterFewsterFewsterFewsterFewsterFewster" "FewsterFewsterFidaleoFigueroaFilkFioreFleischhackFleischhackFleischhackFleischhackFleischhackFleischhackFleischhackFleischhackFleischhackFleischhackFleischhackFleischhackFlorigFlorigFoitFolacciFollandFollandFrancoFredenhagenFredenhagenFredenhagenFredenhagen" "FredenhagenFredenhagenFredenhagenFringFr\u00f6hlichFr\u00f6hlichFr\u00f6hlichFr\u00f6hlichFr\u00f6hlichFr\u00f6hlichFr\u00f6hlichGallavottiGarberGarberGarnettGawedzkiGayralGeGerochGerochGerstenhaberGlaserGlaserGlaserGlaserGlimmGracia-BondiaGrosseGrundlingGrundlingGuichardetHaagHaagHaag" "HaagHaagHaagHalvorsonHauerHauerHegerfeldtHegerfeldtHelgasonHellerHeppHeppHerbstHertelHeuserHeuserHighamHillierHofmannHofmannHogeHollandsHollandsHollandsHollandsHollandsHollandsHuHurdH\u00f6lzlerH\u00f6rmanderH\u00f6rmanderH\u00f6rmanderH\u00f6rmanderH\u00f6rmanderH\u00f6rmanderIagolnitzer" "IagolnitzerIagolnitzerIagolnitzerInamiIshamIshamJacksonJacobiJaffeJaffeJaffeJaffeJaffeJarchowJohnsonJosephJosephJostJostJunglasJunglasJ\u00e4kelJ\u00e4kelJ\u00e4kelJ\u00e4kelJ\u00e4kelJ\u00e4kelJ\u00e4kelJ\u00e4kelJ\u00e4kelJ\u00e4kelJ\u00e4nichJ\u00e4nichJ\u00e4nichJ\u00f6r\u00dfJ\u00f6r\u00dfJ\u00f6r\u00dfKadisonKaiblingerKarowski" "KarowskiKarowskiKarowskiKaschekKasprzakKasprzakKastlerKastlerKatoKauffmanKawahigashiKawahigashiKayKayKayKayKeeganKellerKeylKeylKirillovKishimotoKleinKniemeyerKnightKopperKosterKrantzKrantzKreimerKuckertKuckertKulishKunhardtK\u00f6hlerK\u00f6theK\u00f6theLachi\u00e8ze-ReyLance" "LandauLandauLandiLandsmanLangLangmannLarkinLashkevichLauridsen-RibeiroLechnerLechnerLechnerLechnerLechnerLechnerLechnerLechnerLechnerLechnerLehmannLesniewskiLesterLewandowskiLewkeeratiyutkulLichtLichtLledoLledoLled\u00f3Lled\u00f3LongoLongoLongoLongoLongoLongoLongo" "LongoLongoLongoLongoLongoLongoLongoLongoLongoLongoLongoLongoLongoLongoLongoLongoLorenzenLorenzenL\u00fcckeMackMackMaedaMaisonManchakMandelstamMandulaMartinMartinettiMasielloMassarMehenMeinrenkenMeistersMerkliMichelMichorMillingtoMintchevMintchevMorettiMorfa-Morales" "Morfa-MoralesMorfa-MoralesMorsellaMorsellaMorsellaMorsellaMoschellaMoschellaMoschellaMoschellaMotovilovMundMundMundMundMundMundMundMundMussardoM\u00fcgerM\u00fcgerM\u00fcgerM\u00fcgerNachbinNekrasovNelsonNestNestNewmanNiedermaierNowakNowakO'NeillOecklOecklOjimaOkolowOlafsson" "OlbermannOliveOsterwalderOsterwalderPaschkePaschkePascualPascualPedersenPfenningPf\u00e4fflePiacitelliPiacitelliPiacitelliPiacitelliPiacitelliPiacitelliPiacitelliPiacitelliPinamontiPinamontiPinamontiPinamontiPinamontiPizzoPohlmeyerPolitoPolkinghornePorrmannPorrmann" "PorrmannQuellaQureshiRadulescuRadzikowskiRadzikowskiRainerRamacherRaschhoferRehrenRehrenRehrenRehrenRehrenRehrenRehrenRehrenRehrenRehrenRehrenRehrenRehrenRehrenRehrenRehrenRehrenRehrenRehrenRehrenRennieRennieRieffelRieffelRieffelRieffelRieffelRieffelRieffel" "RieffelRieffelRingroseRingroseRingroseRitzRivasseauRivasseauRivasseauRivasseauRivasseauRivasseauRobertsRobertsRobertsRobertsRobertsRobertsRobertsRobertsRobertsRobertsRobertsRobinsonRobinsonRobinsonRobinsonRobinsonRobinsonRoepstorffRoosRossiRossiRotheRudinRudin" "RudinRuelleRuelleRuelleSaffarySahlmannSahlmannSahlmannSakaiSakaiSaleurSalvittiSandersSandersSandersSandersSandhasScharfSchenkelSchiffSchlemmerSchlemmerSchliederSchlingemannSchlingemannSchlingemannSchm\u00fcdgenSchomerusSchomerusSchomerusSchraderSchraderSchrader" "SchroerSchroerSchroerSchroerSchroerSchroerSchroerSchroerSchroerSchroerSchroerSchroerSchroerSchroerSchroerSchroerSchroerSchroerSchroerSchroerSchroerSchroerSchroerSchroerSchroerSchroerSchroerSchroerSchroerSchroerSchroerSchroerSchumannSchwartzSchweigertSchweitzer" "SchwingerSeilerSeilerSeilerSeilerSenSenSiboldSiboldSiboldSimonSimonSimonSimonSimonSimonettiSj\u00f6strandSmirnovSmirnovSmolinSolovievSolovievSpindelSpindelSteinackerSteinackerSteinmannSteinmannSternheimerSternheimerStichelStolerStraussStreaterStreaterStrichStrocchi" "StrohmaierStrohmaierSummersSummersSummersSummersSummersSummersSummersSummersSummersSummersSummersSummersSummersSummersSummersSummersSummersSummersSummersSummersSummersSummersSummersSunderSvegstrupSwiecaSwiecaSwiecaSymanzikSzaboSzaboSzaboSzaboSzaboS\u00e1nchezS\u00e1nchez" "S\u00e9n\u00e9chalTakesakiTakesakiTakesakiTanasaTanimotoTanimotoTanimotoTanimotoTanimotoTateoTaylorTeoTeotonio-SobrinhoTeotonio-SobrinhoTeschlTeschnerTestardTestardTestardThallerThiemannThiemannThiemannThiemannThiemannThiemannThirringThirringThirringThrelfallTitchmarsh" "TitchmarshTodorovTodorovTodorovTodorovTodorov.TomassiniTongTrevesTruongTruongTruongTruongTruongTureanuTureanuTureanuTureanuTureanuTuynmanUhlmannUhlmannUllrichUllrichVaidyaVaidyaVaidyaVaidyaVaidyaVaidyaVaradarajanVarillyVarillyVarillyVarillyVasselliVassilevich" "Vazquez-MozoVerbeureVerbeureVerchVerchVerchVerchVerchVerchVerchVerchVerchVerchVerchVerchVerchVerchVerchVernovVernovVernovVernovVernovVignes-TourneretVignes-TourneretVilenkinVitaleVoelkelVoganWaldWaldWaldWaldWaldmannWaldmannWaldmannWaldmannWaldmannWaldmannWaldmann" "WaldmannWaldmannWaldmannWaldmannWaldmannWallWallWallWalletWangWanzenbergWassermannWeaverWeinerWeinerWeinerWeissWeiszWeiszWeiszWeiszWeiszWernerWernerWernerWessWessWessWessWhiteWichmannWichmannWichmannWichmannWichmannWichmannWichmannWiesbrockWiesbrockWiesbrock" "WiesbrockWiesbrockWiesbrockWiesbrockWiesbrockWiesbrockWiesbrockWiesbrockWiesbrockWiesbrockWiesbrockWiesbrockWiesbrockWiesbrockWightmanWignerWilanskyWildeWilliamsWinninkWittenWittenWittenWohlgenanntWohlgenanntWollenbergWollenbergWollenbergWollenbergWollenberg" "WollenbergWoodardWoodsWoronowiczWoronowiczWoronowiczWoronowiczWoronowiczWuWuWulkenhaarWulkenhaarWulkenhaarWulkenhaarWyssWyssXiaYngvasonYngvasonYngvasonYngvasonYngvasonYngvasonYngvasonYngvasonYngvasonYngvasonYngvasonYngvasonYngvasonYngvasonYngvasonYngvasonYngvason" "YngvasonYngvasonZahabiZahnZahnZahnZakharovZamolodchikovZamolodchikovZamolodchikovZhangZhouZimmermannZinovievZsidoZsidode Goursact'Hooft t'Hooft t'Hooft t'Hooft t'Hooft t'Hooft t'Hooft t'Hooft t'Hooft t'Hooft t'Hooft t'Hooft t'Hooft t'Hooft t'Hooft t'Hooft t'Hooft t'Hooft t'Hooft t'Hooft t'Hooft t'Hooft t'Hooft t'Hooft t'Hooft t'Hooft t'Hooft t'Hooft t'Hooft t'Hooft t'Hooft t'Hooft t'Hooft t'Hooft t'Hooft t'Hooft t'Hooft t'Hooft t'Hooft t'Hooft t'Hooft t'Hooft t'Hooft t'Hooft t'Hooft t'Hooft t'Hooft t'Hooft t'Hooft t'Hooft t'Hooft t'Hooft t'Hooft t'Hooft t'Hooft t'Hooft t'Hooft t'Hooft t'Hooft t'Hooft t'Hooft t'Hooft t'Hooft t'Hooft t'Hooft t'Hooft t'Hooft t'Hooft t'Hooft t'Hooft t'Hooft t'Hooft t'Hooft t'Hooft t'Hooft t'Hooft t'Hooft t'Hooft t'Hooft t'Hooft t'Hooft t'Hooft t'Hooft t'Hooft t'Hooft t'Hooft t'Hooft t'Hooft t'Hooft t'Hooft t'Hooft t'Hooft t'Hooft t'Hooft t'Hooft" "van Suijlekomvan der Kallenvon Neumann\u00c5ks"); static const char *bug19362file15701databaseFilesUrlsDois("http://projecteuclid.org/euclid.cmp/1103757611http://projecteuclid.org/euclid.cmp/11038418191969 - Borchers - On the Implementability of Automorphism Groups.pdfhttp://projecteuclid.org/euclid.cmp/11038416271969 - Epstein, Glaser, Martin - Polynomial behaviour of scattering amplitudes at fixed momentum transfer in theories with local observables.pdf" "http://projecteuclid.org/euclid.cmp/11038574091971 - Glimm, Jaffe - The energy momentum spectrum and vacuum expectation values in quantum field theory II.pdfhttp://projecteuclid.org/euclid.cmp/11038584081972 - Borchers, Hegerfeldt - The Structure of Space-Time Transformations.pdf" "1972 - Woronowicz - On the Purification of Factor States.pdf1974 - Buchholz - Collision theory for massless Fermions.pdf1974 - Buchholz - Haag-Ruelle approximation of collision states.pdf1974 - Buchholz - Product states for local algebras.pdf1974 - Fannes, Verbeure - On the time evolution automorphisms of the CCR-algebra for quantum mechanics.pdf" "1975 - Borchers, Sen - Relativity groups in the presence of matter.pdf1975 - Borchers, Yngvason - Integral representations for Schwinger functionals and the moment problem over nuclear spaces.pdf1975 - Borchers, Yngvason - On the algebra of field operators. The weak commutant and integral decompositions of states.pdf" "1975 - Driessler - Comments on lightlike translations and applications in relativistic quantum field theory.pdf1976 - Borchers, Yngvason - Necessary and sufficient conditions for integral representations of Wightman functionals at Schwinger points.pdf1976 - Buchholz, Roberts - Bounded perturbations of dynamics.pdf" "1977 - Buchholz - Collision theory for massless bosons.pdf1977 - Buchholz, Fredenhagen - A note on the inverse scattering problem in quantum field theory.pdf1978 - Iagolnitzer - Factorization of the multiparticle S-matrix in two-dimensional space-time models.pdf" "1978 - Pusz, Woronowicz - Passive States and KMS States for General Quantum Systems.pdf1978 - Shankar, Witten - S-matrix of the supersymmetric nonlinear sigma model.pdf1979 - Longo - Notes on algebraic invariants for noncommutative dynamical systems.pdf1981 - Epstein, Glaser, Iagolnitzer - SOME ANALYTICITY PROPERTIES ARISING FROM ASYMPTOTIC COMPLETENESS IN QUANTUM FIELD THEORY.pdf" "1981 - Emch - Prequantization and KMS structures.pdf1982 - Buchholz - THE PHYSICAL STATE SPACE OF QUANTUM ELECTRODYNAMICS.pdf1982 - Hislop, Longo - Modular structure of the local algebras associated with the free massless scalar field theory.pdf1982 - Steinmann - A JOST-SCHROER THEOREM FOR STRING FIELDS.pdf" "1983 - Doplicher, Longo - LOCAL ASPECTS OF SUPERSELECTION RULES. II.pdf1983 - Wichmann - ON SYSTEMS OF LOCAL OPERATORS AND THE DUALITY CONDITION.pdf1984 - Baumg\\\"artel, Wollenberg - A class of nontrivial weakly local massive Wightman fields with interpolating properties.pdf" "1984 - Borchers - Translation Group and Spectrum Condition.pdf1985 - Borchers, Buchholz - The Energy-Momentum Spectrum in Local Field Theories with Broken Lorentz-Symmetry.pdf1985 - Buchholz, Epstein - Spin and Statistics of Quantum Topological Charges.pdf1986 - Buchholz, Junglas - LOCAL PROPERTIES OF EQUILIBRIUM STATES AND THE PARTICLE SPECTRUM IN QUANTUM FIELD THEORY.pdf" "10.1007/BF012123411986 - Driessler, Summers, Wichmann - On the connection between quantum fields and von Neumann algebras of local operators.pdf1986 - Pohlmeyer, Rehren - ALGEBRAIC PROPERTIES OF THE INVARIANT CHARGES OF THE NAMBU- GOTO THEORY.pdf1987 - Buchholz, D'Antoni, Fredenhagen - The universal structure of local algebras.pdf" "1987 - Buchholz, Jacobi - On the Nuclearity Condition for Massless Fields.pdf1988 - Pohlmeyer, Rehren - THE ALGEBRA FORMED BY THE INVARIANT CHARGES OF THE NAMBU- GOTO THEORY: IDENTIFICATION OF A MAXIMAL ABELIAN SUBALGEBRA.pdf1988 - Pohlmeyer, Rehren - THE INVARIANT CHARGES OF THE NAMBU-GOTO THEORY: THEIR GEOMETRIC ORIGIN AND THEIR COMPLETENESS.pdf" "1989 - Buchholz, Junglas - On the existence of equilibrium states in local quantum field theory.pdf1990 - Borchers - Translation group and modular automorphisms for local regions.pdfhttp://projecteuclid.org/euclid.cmp/110418022310.1007/BF021045051990 - Borchers, Yngvason - Positivity of Wightman functionals and the existence of local nets.pdf" "1990 - Rehren - SPACE-TIME FIELDS AND EXCHANGE FIELDS.pdf1991 - Borchers, Wollenberg - On the relation between types of local algebras in different global representations.pdf1991 - Kay, Wald - Theorems on the Uniqueness and Thermal Properties of Stationary, Nonsingular, Quasifree States on Space-Times with a Bifurcate Killing Horizon.pdf" "http://arxiv.org/abs/hep-th/92020531992 - Ashtekar, Isham - Representations of the holonomy algebras of gravity and non-Abelian gauge theories.pdf1992 - Buchholz, Wanzenberg - The realm of the vacuum.pdf1993 - Kay - Sufficient conditions for quasifree states and an improved uniqueness theorem for quantum fields on space-times with horizons.pdf" "1992 - Rehren - Field operators for anyons and plektons.pdf1992 - Thirring - Ergodic Properties in Quantum Systems.pdfhttp://arxiv.org/abs/funct-an/93020081993 - Brunetti, Guido, Longo - Modular Structure and Duality in Conformal Quantum Field Theory.pdf1993 - Buchholz, Doplicher, Longo, Roberts - Extensions of automorphisms and gauge symmetries.pdf" "http://arxiv.org/abs/hep-th/93031081993 - Fring, Mussardo, Simonetti - Form Factors of the Elementary Field in the Bullough-Dodd Model.pdfhttp://arxiv.org/abs/hep-th/94030271994 - Buchholz, Yngvason - There are no causality problems for Fermis Two Atom System.pdf" "http://arxiv.org/abs/hep-th/03030371994 - Doplicher, Fredenhagen, Roberts - The Quantum Structure of Spacetime at the Planck Scale and Quantum Fields.pdfhttp://arxiv.org/abs/hep-th/94061181994 - Lashkevich - Sectors of mutually local fields in integrable models of quantum field theory.pdf" "http://arxiv.org/abs/hep-th/93120391994 - Smirnov - A New set of exact form-factors.pdf1994 - Verch - Local definiteness, primarity and quasiequivalence of quasifree Hadamard quantum states in curved spacetime.pdf1995 - Borchers - On the use of modular groups in quantum field theory.pdf" "http://arxiv.org/abs/hep-th/94030391995 - Liguori, Mintchev - Fock representations of quantum fields with generalized statistics.pdf1995 - Liguori, Mintchev, Rossi - Unitary Group Representations in Fock Spaces with Generalized Exchange Properties.pdf1996 - Florig, Summers - On the statistical independence of algebras of observables.pdf" "http://arxiv.org/abs/hep-th/96090201996 - Jorss - From conformal Haag-Kastler nets to Wightman functions.pdf1996 - Rehren - Comments on a recent solution to Wightman's axioms.pdfhttp://arxiv.org/abs/hep-th/94091651995 - Rehren, Stanev, TodorovIvan T - Characterizing invariants for local extensions of current algebras.pdf" "http://arxiv.org/abs/hep-th/96080831997 - Schroer - Motivations and physical aims of algebraic QFT.pdf1996 - Schumann - Operator Ideals and the Statistical Independence in Quantum Field Theory.pdf1996 - Yngvason - Tomita Conjugations and Transitivity of Locality.pdf" "1997 - Liguori, Mintchev, Rossi - Fock representations of exchange algebras with involution.pdfhttp://arxiv.org/abs/hep-th/97061721997 - Niedermaier - A Derivation of the Cyclic Form Factor Equation.pdfhttp://arxiv.org/abs/hep-th/97110851998 - Rehren - Spin statistics and CPT for solitons.pdf" "10.1063/1.5319541997 - Thomas, Wichmann - On the Causal Structure of Minkowski Spacetime.pdfhttp://arxiv.org/abs/math-ph/98050261998 - Buchholz, Dreyer, Florig, Summers - Geometric modular action and spacetime symmetry groups.pdfhttp://arxiv.org/abs/math-ph/0006011" "2000 - Florig, Summers - Further representations of the canonical commutation relations.pdfhttp://arxiv.org/abs/hep-th/98122511998 - Schroer, Wiesbrock - Modular constructions of quantum field theories with interactions.pdf1998 - Thomas, Wichmann - Standard Forms of local nets in quantum field theory.pdf" "http://arxiv.org/abs/hep-th/99091531999 - Babujian, Karowski - The Exact Quantum Sine-Gordon Field Equation and Other Non-Perturbative Results.pdfhttp://arxiv.org/abs/gr-qc/99100602000 - Fewster - A general worldline quantum inequality.pdfhttp://arxiv.org/abs/gr-qc/9812032" "1999 - Fewster, Teo - Bounds on negative energy densities in static space-times.pdf1999 - Gaier, Yngvason - Geometric Modular Action, Wedge Duality and Lorentz Covariance are Equivalent for Generalized Free Fields.pdfhttp://arxiv.org/abs/math-ph/990601910.1142/S0129055X01000557" "1999 - Guido, Longo, Roberts, Verch - Charged sectors, spin and statistics in quantum field theory on curved spacetimes.pdfhttp://arxiv.org/abs/gr-qc/99120111999 - Rainer - Is loop quantum gravity a QFT?.pdf2000 - Borchers - On Revolutionizing Quantum Field Theory.pdf" "http://arxiv.org/abs/hep-th/00110152000 - Buchholz, Doplicher, Morchio, Roberts, Strocchi - Quantum Delocalization of the Electric Charge.pdfhttp://arxiv.org/abs/hep-th/00112372000 - Buchholz, Mund, Summers - Transplantation of Local Nets and Geometric Modular Action on Robertson-Walker Space-Times.pdf" "http://arxiv.org/abs/math-ph/00010062000 - Fleischhack - Gauge Orbit Types for Generalized Connections.pdfhttp://arxiv.org/abs/math-ph/00010072000 - Fleischhack - Hyphs and the Ashtekar-Lewandowski measure.pdfhttp://arxiv.org/abs/math-ph/00010082000 - Fleischhack - Stratification of the Generalized Gauge Orbit Space.pdf" "http://arxiv.org/abs/hep-th/00030182000 - Oeckl - Untwisting noncommutative R**d and the equivalence of quantum field theories.pdf2000 - Ramacher - Modular localization of elementary systems in the theory of Wigner.pdfhttp://arxiv.org/abs/hep-th/00011292001 - D\\\"utsch, Fedenhagen - Perturbative Algebraic Field Theory, and Deformation Quantization.pdf" "http://arxiv.org/abs/hep-th/01060642001 - Fassarella, Schroer - The fuzzy analog of chiral diffeomorphisms in higher dimensional quantum field theories.pdfhttp://arxiv.org/abs/math-ph/010502710.1007/s0022001005842001 - Fewster, Verch - A Quantum weak energy inequality for Dirac fields in curved space-time.pdf" "http://arxiv.org/abs/math-ph/01110012001 - Fleischhack, Lewandowski - Breakdown of the action method in gauge theories.pdfhttp://arxiv.org/abs/math-ph/00070012003 - Fleischhack - On the Gribov problem for generalized connections.pdfhttp://arxiv.org/abs/math-ph/0107022" "2001 - Fleischhack - On the structure of physical measures in gauge theories.pdfhttp://arxiv.org/abs/math-ph/01090302001 - Fleischhack - On the support of physical measures in gauge theories.pdfhttp://arxiv.org/abs/math-ph/01090012001 - Kunhardt - On Infravacua and the Superselection Structure of Theories with Massless Particles.pdf" "http://arxiv.org/abs/hep-th/01012272001 - Mund - The Bisognano Wichmann theorem for massive theories.pdfhttp://arxiv.org/abs/hep-th/01082032001 - Schroer - Lightfront Formalism versus Holography + Chiral Scanning.pdfhttp://arxiv.org/abs/hep-th/01060662001 - Schroer - Uniqueness of Inverse Scattering Problem in Local Quantum Physics.pdf" "http://arxiv.org/abs/math-ph/00080432000 - Strohmaier - On the local structure of the Klein-Gordon field on curved spacetimes.pdfhttp://arxiv.org/abs/gr-qc/01100342001 - Thiemann - Introduction to modern canonical quantum general relativity.pdfhttp://arxiv.org/abs/gr-qc/0211012" "2002 - Ashtekar, Lewandowski, Sahlmann - Polymer and Fock representations for a Scalar field.pdfhttp://arxiv.org/abs/hep-th/020122210.1016/S0370-2693(02)01563-02002 - Bahns, Doplicher, Fredenhagen, Piacitelli - On the unitarity problem in space-time noncommutative theories.pdf" "http://arxiv.org/abs/hep-th/02070572002 - Buchholz, Mund, Summers - Covariant and quasi-covariant quantum dynamics in Robertson-Walker space-times.pdfhttp://arxiv.org/abs/hep-th/02050762003 - Castro-Alvaredo, Fring - From integrability to conductance, impurity systems.pdf" "http://arxiv.org/abs/hep-th/01121682002 - Fassarella, Schroer - Wigner Particle Theory and Local Quantum Physics.pdf2003 - Fleischhack - Regular connections among generalized connections.pdfhttp://arxiv.org/abs/gr-qc/02071112002 - Sahlmann - Some comments on the representation theory of the algebra underlying loop quantum gravity.pdf" "http://arxiv.org/abs/gr-qc/02100942003 - Thiemann - Lectures on loop quantum gravity.pdfhttp://arxiv.org/abs/hep-th/03050932003 - Alvarez-Gaume, Vazquez-Mozo - General Properties of Noncommutative Field Theories.pdfhttp://arxiv.org/abs/hep-th/03010882003 - Babujian, Karowski - Towards the Construction of Wightman Functions of Integrable Quantum Field Theories.pdf" "http://arxiv.org/abs/hep-th/02090082003 - Chaichian, Nishijima, Tureanu - Spin-Statistics and CPT Theorems in Noncommutative Field Theory.pdfhttp://arxiv.org/abs/math-ph/03040012003 - Fleischhack - Parallel Transports in Webs.pdfhttp://arxiv.org/abs/math-ph/0304002" "2004 - Fleischhack - Proof of a Conjecture by Lewandowski and Thiemann.pdfhttp://arxiv.org/abs/hep-th/98032452004 - J\\\"akel -%20 The Relation between KMS states for different temperatures.pdfhttp://arxiv.org/abs/quant-ph/03021152003 - Redei, Summers - Remarks On Causality in Relativistic Quantum Field Theory.pdf" "http://arxiv.org/abs/hep-th/04080802003 - Wess - Deformed coordinate spaces: Derivatives.pdfhttp://arxiv.org/abs/math-ph/04090702004 - Bostelmann - Phase space properties and the short distance structure in quantum field theory.pdfhttp://arxiv.org/abs/math-ph/0402072" "10.1007/s00023-004-0190-82004 - Buchholz, Lechner - Modular nuclearity and localization.pdfhttp://arxiv.org/abs/hep-th/04022122004 - Chaichian, Mnatsakanova, Nishijima, Tureanu, Vernov - Towards an Axiomatic Formulation of Noncommutative Quantum Field Theory.pdf" "http://arxiv.org/abs/gr-qc/04090432004 - Fewster - Comments on 'Counter example to the quantum inequality'.pdfhttp://arxiv.org/abs/gr-qc/04111142004 - Fewster - Quantum energy inequalities in two dimensions.pdfhttp://arxiv.org/abs/math-ph/04050372004 - Kawahigashi, Longo - Noncommutative Spectral Invariants and Black Hole Entropy.pdf" "http://arxiv.org/abs/math-ph/040506210.1088/0305-44702005 - Lechner - On the existence of local observables in theories with a factorizing S-Matrix.pdfhttp://arxiv.org/abs/math-ph/040506710.1142/S0129055X040021632004 - Longo, Rehren - Local fields in boundary conformal QFT.pdf" "http://arxiv.org/abs/hep-th/04051052005 - Schroer - An anthology of non-local QFT and QFT on noncommutative spacetime.pdf2004 - Ullrich - On the restriction of quantum fields to a lightlike surface.pdfhttp://arxiv.org/abs/math-ph/04110582004 - Yngvason - The role of type III factors in quantum field theory.pdf" "http://arxiv.org/abs/hep-th/04082042005 - Bahns, Doplicher, Fredenhagen, Piacitelli - Field Theory on Noncommutative Spacetimes - Quasiplanar Wick Products.pdfhttp://arxiv.org/abs/hep-th/05080022005 - Balachandran, Mangano, Pinzul, Vaidya - Spin and Statistics on the Groenewold-Moyal Plane - Pauli-Forbidden Levels and Transitions.pdf" "http://arxiv.org/abs/math-ph/05090472005 - Buchholz, Summers - Scattering in Relativistic Quantum Field Theory - Fundamental Concepts and Tools.pdfhttp://arxiv.org/abs/math-ph/04120282005 - Fewster, Hollands - Quantum energy inequalities in two-dimensional conformal field theory.pdf" "http://arxiv.org/abs/hep-th/04011282005 - Grosse, Wulkenhaar - Renormalisation of phi**4 theory on noncommutative R**4 in the matrix base.pdfhttp://arxiv.org/abs/hep-th/05021842005 - Lechner - Towards the construction of quantum field theories from a factorizing S-matrix.pdf" "http://arxiv.org/abs/hep-th/04030332005 - Mnatsakanova, Vernov - Jost-Lehmann-Dyson representation, analyticity in angle variable and upper bounds in noncommutative quantum field theory.pdfhttp://arxiv.org/abs/math-ph/051104210.1007/s00220-006-0067-42005 - Mund, Schroer, Yngvason - String-localized quantum fields and modular localization.pdf" "http://arxiv.org/abs/math-ph/05120462005 - Saffary - Modular action on the massive algebra.pdfhttp://arxiv.org/abs/hep-th/05071072007 - Salvitti - Generalized particle statistics in two-dimensions: Examples from the theory of free massive Dirac field.pdfhttp://arxiv.org/abs/hep-th/0406016" "2005 - Schroer - Constructive proposals for QFT based on the crossing property and on lightfront holography.pdfhttp://arxiv.org/abs/math/06077452006 - Bahns, Waldmann - Locally Noncommutative Space-Times.pdfhttp://arxiv.org/abs/hep-th/06081792006 - Balachandran, Govindarajan, Mangano, Pinzul, Qureshi, Vaidya - Statistics and UV-IR Mixing with Twisted Poincare Invariance.pdf" "http://arxiv.org/abs/hep-th/06081382006 - Balachandran, Pinzul, Qureshi, Vaidya - Poincare Invariant Gauge and Gravity Theories on the Groenewold-Moyal Plane.pdfhttp://arxiv.org/abs/gr-qc/06081332006 - Buchholz, Schlemmer - Local Temperature in Curved Spacetime.pdf" "http://arxiv.org/abs/hep-th/06020932006 - Bytsko, Teschner - Quantization of models with non-compact quantum group symmetry: Modular XXZ magnet and lattice sinh-Gordon model.pdfhttp://arxiv.org/abs/math-ph/06020422006 - Fewster, Pfenning - Quantum energy inequalities and local covariance. I: Globally hyperbolic spacetimes.pdf" "http://arxiv.org/abs/math-ph/06010052005 - Fleischhack - Construction of generalized connections.pdfhttp://arxiv.org/abs/math-ph/04070062004 - Fleischhack - Representations of the Weyl algebra in quantum geometry.pdfhttp://arxiv.org/abs/math-ph/06090592006 - J\\\"akel, Wreszinski - Stability and related properties of vacua and ground states.pdf" "http://arxiv.org/abs/hep-th/06060562006 - Kulish - Twists of quantum groups and noncommutative field theory.pdfhttp://arxiv.org/abs/gr-qc/05041472005 - Lewandowski, Okolow, Sahlmann - Uniqueness of diffeomorphism invariant states on holonomy- flux algebras.pdf" "http://arxiv.org/abs/hep-th/06032312006 - Zahn - Remarks on twisted noncommutative quantum field theory.pdfhttp://arxiv.org/abs/0704.02322007 - Bergbauer, Kreimer - New Algebraic Aspects of Perturbative and Non-Perturbative Quantum Field Theory.pdfhttp://arxiv.org/abs/math-ph/0203021" "10.1142/S0129055X020013872002 - Brunetti, Guido, Longo - Modular localization and Wigner particles.pdfhttp://arxiv.org/abs/0705.19882007 - Buchholz, Grundling - The resolvent algebra: A new approach to canonical quantum systems.pdfhttp://arxiv.org/abs/hep-th/9905102" "2000 - Buchholz, Longo - Graded KMS Functionals and the Breakdown of Supersymmetry.pdfhttp://arxiv.org/abs/math-ph/06110582006 - Fewster - Quantum energy inequalities and local covariance. II: Categorical formulation.pdfhttp://arxiv.org/abs/0705.1120http://arxiv.org/abs/hep-th/0701078" "2007 - Fiore, Wess - On full twisted Poincare' symmetry and QFT on Moyal-Weyl spaces.pdfhttp://arxiv.org/abs/hep-th/97031291998 - Guido, Longo, Wiesbrock - Extensions of Conformal Nets and Superselection Structures.pdfhttp://arxiv.org/abs/0704.3392http://arxiv.org/abs/math-ph/0611050" "2006 - Lechner - On the Construction of Quantum Field Theories with Factorizing S-Matrices-PhD-Thesis.pdf2007 - Lorenzen - From Spin Groups and Modular P_1CT Symmetry to Covariant Representations and the Spin-Statistics Theorem.pdfhttp://arxiv.org/abs/0704.2986" "http://arxiv.org/abs/hep-th/07020962007 - Schlemmer - Local Thermal Equilibrium States and Unruh Detectors in Quantum Field Theory.pdfhttp://arxiv.org/abs/math/0703336http://arxiv.org/abs/math/04071902005 - Carpi, Weiner - On the uniqueness of diffeomorphism symmetry in conformal field theory.pdf" "http://arxiv.org/abs/0705.36092007 - Carpi, Kawahigashi, Longo - Structure and Classification of Superconformal Nets.pdfhttp://arxiv.org/abs/math-ph/06100702007 - Pinamonti - On localization and position operators in Moebius covariant theories.pdfhttp://arxiv.org/abs/0708.1379" "http://arxiv.org/abs/0708.1283http://arxiv.org/abs/math-ph/03110522003 - Bros, Moschella - Fourier analysis and holomorphic decomposition on the one- sheeted hyperboloid.pdfhttp://arxiv.org/abs/math-ph/06090802006 - Bertola, Corbetta, Moschella - Massless scalar field in two-dimensional de Sitter universe.pdf" "http://arxiv.org/abs/gr-qc/95110191996 - Bros, Moschella - Two-point Functions and Quantum Fields in de Sitter Universe.pdfhttp://arxiv.org/abs/0706.399210.1088/1126-67082007 - Grosse, Lechner - Wedge-Local Quantum Fields and Noncommutative Minkowski Space.pdf" "http://scitation.aip.org/getabs/servlet/GetabsServlet?prog=normal&id=JMAPAQ000002000004000459000001&idtype=cvips&gifs=yes10.1063/1.17037311961 - Knight - Strict Localization in Quantum Field Theory.pdfhttp://arxiv.org/abs/hep-ph/92092241993 - Chamseddine, Felder, Frohlich - Grand unification in noncommutative geometry.pdf" "http://arxiv.org/abs/math/04115072004 - Fr\\\"ohlich, Fuchs, Runkel - Picard groups in rational conformal field theory.pdfhttp://arxiv.org/abs/hep-th/02081952003 - Mund - Modular localization of massive particles with any spin in.pdfhttp://arxiv.org/abs/hep-th/9712119" "1997 - Mund - No-Go Theorem for Free Relativistic Anyons in d=2+1.pdfhttp://arxiv.org/abs/hep-th/05020142005 - Mund - String-localized covariant quantum fields.pdf10.2307/19685511939 - Wigner - On unitary representations of the inhomogeneous Lorentz group.pdf" "http://arxiv.org/abs/0708.17792007 - Balachandran, Pinzul, Qureshi - Twisted Poincar'e Invariant Quantum Field Theories.pdfhttp://arxiv.org/abs/0708.2426http://arxiv.org/abs/0705.3340http://arxiv.org/abs/gr-qc/06050722007 - Hollands - The operator product expansion for perturbative quantum field theory in curved spacetime.pdf" "http://arxiv.org/abs/gr-qc/02120282004 - Hollands - A general PCT theorem for the operator product expansion in curved spacetime.pdfhttp://arxiv.org/abs/math-ph/07030132006 - Gerard, J\\\"akel - On the relativistic KMS condition for the P(phi)(2) model.pdfhttp://arxiv.org/abs/math-ph/0609088" "2005 - Gerard, J\\\"akel - Thermal quantum fields without cut-offs in 1+1 space-time dimensions.pdfhttp://arxiv.org/abs/math-ph/03070532003 - Gerard, J\\\"akel - Thermal quantum fields with spatially cut-off interactions in 1+1 space-time dimensions.pdfhttp://arxiv.org/abs/math-ph/0507047" "2006 - Jaffe, J\\\"akel - An exchange identity for non-linear fields.pdfhttp://arxiv.org/abs/0709.101010.1016/0003-4916(79)90391-91979 - Zamolodchikov, Zamolodchikov - Factorized S-matrices in two dimensions as the exact solutions of certain relativistic quantum field theory models.pdf" "/home/gandalf/Physik/Fachb\\\"ucher/Glimm, Jaffe - Quantum Physics - A Functional Integral Point of View.djvu10.1007/BF020990111992 - Borchers - The CPT-theorem in two-dimensional theories of local observables.pdfhttp://arxiv.org/abs/math-ph/98090031998 - Schroer, Wiesbrock - Modular Theory and Geometry.pdf" "1997 - Wiesbrock - Symmetries and Modular Intersections of Von Neumann Algebras.pdf1998 - Wiesbrock - Modular Intersections of von Neumann Algebras in Quantum Field Theory.pdf1994 - Wiesbrock - A note on strongly additive conformal field theory and half-sided modular conormal standard inclusions.pdf" "1993 - Wiesbrock - Conformal quantum field theory and half-sided modular inclusions of von Neumann algebras.pdf1993 - Wiesbrock - Half-sided modular inclusions of von-Neumann-algebras.pdf1992 - Wiesbrock - A comment on a recent work of Borchers.pdfhttp://arxiv.org/abs/hep-th/0003243" "10.1007/s0022001004112000 - Borchers, Buchholz, Schroer - Polarization-free generators and the S-matrix.pdfhttp://projecteuclid.org/euclid.cmp/11038425351970 - Yngvason - Zero-mass infinite spin representations of the Poincare group and quantum field theory.pdf" "1990 - Buchholz, D'Antoni, Longo - Nuclear maps and modular structures. II. Applications to quantum field theory.pdf1990 - Buchholz, D'Antoni, Longo - Nuclear maps and modular structures 1 - general properties.pdfhttp://www.arxiv.org/abs/math-ph/040701110.1063/1.1804230" "2004 - Buchholz, Summers - Stable quantum systems in anti-de Sitter space: Causality, independence and spectral properties.pdfhttp://arxiv.org/abs/0705.07052007 - Rivasseau - Non-commutative renormalization.pdf10.1063/1.17043051965 - Aks - Proof that Scattering Implies Production in Quantum Field Theory.pdf" "/home/gandalf/Physik/Fachb\\\"ucher/Araki - Mathematical Theory of Quantum Fields.djvuhttp://arxiv.org/abs/hep-th/04080692004 - Chaichian, Kulish, Nishijima - On a Lorentz-invariant interpretation of noncommutative space-time and its implications on noncommutative QFT.pdf" "http://arxiv.org/abs/hep-th/01060482001 - Douglas, Nekrasov - Noncommutative field theory.pdfhttp://arxiv.org/abs/math-ph/051206010.1088/1751-81132007 - Buchholz, Summers - String- and Brane-Localized Causal Fields in a Strongly Nonlocal Model.pdf1979 - Grosse - On the construction of m\\\"oller operators for the nonlinear schr\\\"odinger equation.pdf" "10.1007/BF016464941965 - Hepp - On the connection between the LSZ and Wightman quantum field theory.pdfhttp://arxiv.org/abs/math-ph/05120682007 - Kuckert, Lorenzen - Spin, statistics, and reflections. II: Lorentz invariance.pdfhttp://arxiv.org/abs/hep-th/0303062" "10.1023/A:10257723048042003 - Lechner - Polarization-Free Quantum Fields and Interaction.pdfhttp://arxiv.org/abs/math-ph/060102210.1007/s00220-007-0381-52007 - Lechner - Construction of Quantum Field Theories with Factorizing S-matrices.pdfhttp://arxiv.org/abs/hep-th/9702145v1" "1997 - Schroer - Modular Localization and the Bootstrap-Formfactor Program.pdfhttp://arxiv.org/abs/hep-th/99081421999 - Seiberg, Witten - String theory and noncommutative geometry.pdfhttp://arxiv.org/abs/hep-th/01091622003 - Szabo - Quantum field theory on noncommutative spaces.pdf" "/home/gandalf/Physik/Fachb\\\"ucher/Streater R.F., Wightman A.S. PCT, spin and statistics and all that (Benjamin, 1964)(T)(189s)_PQft_.djvuhttp://arxiv.org/abs/0704.00972007 - Kawahigashi - Conformal Field Theory and Operator Algebras.pdfhttp://arxiv.org/abs/math-ph/0602036" "2006 - Halvorson, M\\\"uger - Algebraic Quantum Field Theory.pdfhttp://arxiv.org/abs/math/02111412002 - Kawahigashi - Classification of operator algebraic conformal field theories.pdfhttp://arxiv.org/abs/hep-th/94120941996 - Davidson - Endomorphism semigroups and lightlike translations.pdf" "http://arxiv.org/abs/math-ph/06100272007 - Svegstrup - Endomorphisms on Half-Sided Modular Inclusions.pdf1993 - Wiesbrock - Symmetries and half-sided modular inclusions of von Neumann algebras.pdfhttp://arxiv.org/abs/hep-th/01051782001 - Babujian, Karowski - Exact form factors in integrable quantum field theories: the sine-Gordon model (II).pdf" "http://arxiv.org/abs/hep-th/06091302006 - Babujian, Foerster, Karowski - The Form Factor Program: a Review and New Results - the Nested SU(N) Off-Shell Bethe Ansatz.pdfhttp://arxiv.org/abs/hep-th/03011002003 - Bahns, Doplicher, Fredenhagen, Piacitelli - Ultraviolet Finite Quantum Field Theory on Quantum Spacetime.pdf" "http://arxiv.org/abs/hep-th/06080812007 - Balachandran, Queiroz, Marques, Teotonio-Sobrinho - Deformed Kac-Moody and Virasoro Algebras.pdfhttp://arxiv.org/abs/0706.00212007 - Balachandran, Queiroz, Marques, Teotonio-Sobrinho - Quantum Fields with Noncommutative Target Spaces.pdf" "1976 - Bisognano, Wichmann - On the Duality Condition for Quantum Fields.pdf1974 - Bisognano, Wichmann - On the Duality Condition for a Hermitian Quantum Field.pdfhttp://arxiv.org/abs/0710.10831999 - Borchers - On the embedding of von Neumann subalgebras.pdf" "http://www.springerlink.com/content/un027304k4m253q7/?p=1a14bec3579d46e3a219897d6845164b&pi=51997 - Borchers - On the Lattice of Subalgebras Associated with the Principle of Half-sided Modular Inclusion.pdfhttp://www.springerlink.com/content/pn7wp853n1666537/?p=98c19fdbd87648f79f623d3d44e9bf70&pi=8" "1996 - Borchers - Half-sided modular inclusion and the construction of the Poincare group.pdf2005 - Araki, Zsido - Extension of the structure theorem of Borchers and its application to half-sided modular inclusions.pdfhttp://arxiv.org/abs/0709.24931993 - Fr\\\"ohlich, Gabbiani - Operator algebras and conformal field theory.pdf" "1999 - J\\\"akel - Two algebraic properties of thermal quantum field theories.pdf1963 - Araki - A Lattice of Von Neumann Algebras Associated with the Quantum Theory of a Free Bose Field.pdf1963 - Licht - Strict Localization.pdf1964 - Araki - Von Neumann Algebras of Local Observables for Free Scalar Field.pdf" "1965 - Borchers - Local rings and the connection of spin with statistics.pdf1965 - Borchers - On the structure of the algebra of field operators. II.pdf1965 - Borchers - On the vacuum state in quantum field theory II.pdf1965 - Bros, Epstein, Glaser - A proof of the crossing property for two-particle amplitudes in general quantum field theory.pdf" "2002 - Birke, Fr\\\"ohlich - KMS, etc.pdf1965 - Haag, Swieca - When does a quantum field theory describe particles.pdf1965 - Jaffe - Divergence of perturbation theory for bosons.pdf1965 - Kastler - The Cstar-algebras of a free Boson field. I. Discussion of the basic facts.pdf" "1965 - Langerholc, Schroer - On the structure of the von Neumann algebras generated by local functions of the free Bose field.pdf1965 - Robinson - A theorem concerning the positive metric.pdf1965 - Robinson - The ground state of the Bose gas.pdf1965 - Schlieder - Some remarks about the localization of states in a quantum field theory.pdf" "1966 - Borchers - Energy and momentum as observables in quantum field theory.pdf1966 - Dell'Antonio, Doplicher, Ruelle - A theorem on canonical commutation and anticommutation relations.pdf1966 - Doplicher, Kastler, Robinson - Covariance algebras in field theory and statistical mechanics.pdf" "1966 - Kadison, Ringrose - Derivations and automorphisms of operator algebras.pdf1966 - Kastler, Robinson, Swieca - Conserved currents and associated symmetries Goldstone's theorem.pdf1966 - Kupsch, Sandhas - Moeller operators for scattering on singular potentials.pdf" "1966 - Lehmann - Analytic properties of scattering amplitudes in two variables in general quantum field theory.pdf1966 - Licht - Local States.pdf1966 - Schroer, Stichel - Current commutation relations in the framework of general quantum field theory.pdf1966 - Streater - Canonical quantization.pdf" "1967 - Araki, Haag - Collision cross sections in terms of local observables.pdf1967 - Borchers - A remark on a theorem of B. Misra.pdf1967 - Bros, Epstein, Glaser - On the connection between analyticity and Lorentz covariance of Wightman functions.pdf1967 - Ezawa, Swieca - Spontaneous breakdown of symmetries and zero-mass states.pdf" "1967 - Glimm - Yukawa coupling of quantum fields in two dimensions. I.pdf1967 - Haag, Hugenholtz, Winnink - On the equilibrium states in quantum statistical mechanics.pdf1967 - Kadison - The energy momentum spectrum of quantum fields.pdf1968 - Borchers - On the converse of the Reeh-Schlieder theorem.pdf" "1968 - Borchers, Pohlmeyer - Eine scheinbare Abschw\\\"achung der Lokalit\\\"atsbedingung II.pdf1968 - Manuceau, Verbeure - Quasi-free states of the CCR-algebra and Bogoliubov transformations.pdf1970 - Steinmann - Scattering formalism for non-localizable fields.pdf" "1971 - Glimm, Jaffe - Positivity and self adjointness of the P(phi)_2 Hamiltonian.pdf1973 - Osterwalder, Schrader - Axioms for Euclidean Green's functions.pdf1973 - Woronowicz - On the Purification Map.pdf1974 - Buchholz - Threshold singularities of the S-matrix and convergence of Haag-Ruelle approximations.pdf" "1974 - Connes - Caract\\'erisation des espaces vectoriels ordonn\\'es sous-jacents aux alg\\`ebres de von Neumann.pdf1975 - Buchholz - Collision theory for waves in two dimensions and a characterization of models with trivial S-matrix.pdf1975 - Fr\\\"ohlich - Quantized Sine-Gordon Equation with a Nonvanishing Mass Term in Two Space-Time Dimensions.pdf" "1975 - Mandelstam - Soliton operators for the quantized sine-Gordon equation.pdf1976 - Bros, Buchholz, Glaser - Constants of motion in local field theory (Coleman's theorem revisited).pdf1976 - Dimock, Eckmann - On the bound state in weakly coupled lambda(phi6-ph4)_2.pdf" "1976 - Fr\\\"ohlich - New super-selection sectors (``soliton-states'') in two dimensional Bose quantum field models.pdf1977 - Perez, Wilde - Localization and causality in relativistic quantum mechanics.pdf1979 - Berg, Karowski, Weisz - Construction of Green's functions from an exact S matrix.pdf" "1979 - L\\\"ucke - PCT, Spin and Statistics, and All That for Nonlocal Wightman Fields.pdf1980 - Borchers, Garber - Local theory of solutions for the O(2k+1) sigma-model.pdf1980 - Borchers, Garber - Analyticity of solutions of the O(N) nonlinear sigma-model.pdf" "1980 - Dimock - Algebras of local observables on a manifold.pdf1982 - Buchholz, Fredenhagen - Locality and the structure of particle states.pdf1983 - Borchers - C-star-algebras and automorphism groups.pdf1983 - Driessler, Summers - Nonexistence of quantum fields associated with two-dimensional spacelike planes.pdf" "1984 - Doplicher, Longo - Standard and split inclusions of von Neumann algebras.pdf1984 - Longo - Solution of the Factorial Stone-Weierstrass conjecture.pdf1985 - Woronowicz - On the Existence of KMS states.pdf1986 - Buchholz, Wichmann - Causal independence and the energy-level density of states in local quantum field theory.pdf" "1987 - D'Antoni, Doplicher, Fredenhagen, Longo - Convergence of Local Charges and Continuity Properties of W-Inclusions.pdf1988 - Bros, Iagolnitzer - 2-particle asymptotic completeness and bound states in weakly coupled quantum field theories.pdf1988 - Rehren - Locality of conformal fields in two dimensions - exchange algebra on the light-cone.pdf" "1989 - Fredenhagen, Rehren, Schroer - Superselection Sectors with Braid Group Statistics and Exchange Algebras I General Theory.pdf1990 - Borchers, Sen - Theory of ordered spaces.pdf1990 - Buchholz - Harmonic analysis of local operators.pdf10.1063/1.5286801990 - Buchholz - On quantum fields that generate local algebras.pdf" "1992 - Babelon, Bernard - From Form Factors to Correlation Functions - The Ising Model.pdf1993 - Dimock, Hurd - Construction of the two-dimensional sine-Gordon model for beta less than 8 pi.pdf1994 - Balog, Hauer - Polynomial Form Factors in the O(3) nonlinear sigma-model.pdf" "1994 - Hegerfeldt - Causality Problems for Fermis Two Atom System.pdfhttp://projecteuclid.org/euclid.cmp/11038409821968 - Maison - Eine Bemerkung zu Clustereigenschaften.pdfhttp://arxiv.org/abs/hep-th/04122262004 - Dybalski - Haag-Ruelle scattering theory in presence of massless particles.pdf" "http://www.pubmedcentral.nih.gov/articlerender.fcgi?artid=5286741958 - Schwinger - On the Euclidian Structure of Relativistic Field Theory.pdfhttp://projecteuclid.org/euclid.cmp/11038991821975 - Baumann - When is a field theory a generalized free field.pdfhttp://arxiv.org/abs/hep-th/9501063" "1995 - Buchholz, Verch - Scaling Algebras and Renormalization Group in Algebraic Quantum Field Theory.pdfhttp://arxiv.org/abs/hep-th/97080951997 - Buchholz, Verch - Scaling Algebras and Renormalization Group in Algebraic Quantum Field Theory. II. Instructive Examples.pdf" "http://arxiv.org/abs/0705.42942007 - Strelchenko, Vassilevich - On space-time noncommutative theories at finite temperature.pdfhttp://arxiv.org/abs/0711.0371http://arxiv.org/abs/0711.1525http://www.lqp.uni-goettingen.de/papers/07/11/07111201.html2007 - Schroer - Localization and the interface between quantum mechanics, quantum field theory and quantum gravity.pdf" "http://www.lqp.uni-goettingen.de/papers/07/11/07111200.html2007 - Schroer - Constructive use of holographic projections.pdfhttp://arxiv.org/abs/hep-th/97050191997 - M\\\"uger - Superselection structure in massive quantum field theories in 1+1 dimensions.pdfhttp://arxiv.org/abs/0711.4237" "http://arxiv.org/abs/hep-th/06061832007 - Abe - Noncommutative quantization for noncommutative field theory.pdfhttp://arxiv.org/abs/0708.1561http://arxiv.org/abs/hep-th/05070302006 - Grosse, Wohlgenannt - On kappa-deformation and UV-IR-mixing.pdfhttp://arxiv.org/abs/hep-th/0612170" "2007 - Freidel, Kowalski-Glikman, Nowak - From noncommutative kappa-Minkowski to Minkowski space- time.pdfhttp://arxiv.org/abs/0706.3658http://www-library.desy.de/cgi-bin/showprep.pl?thesis04-0042003 - Bahns - Perturbative Methods on the Noncommutative Minkowski space.pdf" "http://arxiv.org/abs/hep-th/06121122006 - Chaichian, Mnatsakanova, Tureanu, Vernov - Classical Theorems in Noncommutative Quantum Field Theory.pdfhttp://arxiv.org/abs/hep-th/06110972006 - Chaichian, Mnatsakanova, Tureanu - Generalized Haag's theorem in SO(1,1) and SO(1,3) invariant quantum field theory.pdf" "http://arxiv.org/abs/0708.00692007 - Balachandran, Pinzul, Qureshi - Twisted Gauge and Gravity Theories on the Groenewold-Moyal Plane.pdfhttp://arxiv.org/abs/hep-ph/01050512002 - Buchholz, Ojima, Roos - Thermodynamic properties of non-equilibrium states in quantum field theory.pdf" "http://arxiv.org/abs/hep-th/03011152003 - Buchholz - On hot bangs and the arrow of time in relativistic quantum field theory.pdfhttp://arxiv.org/abs/math-ph/06070572006 - Camassa - Relative Haag duality for the free field in Fock representation.pdfhttp://arxiv.org/abs/0712.2140" "2007 - Longo, Rehren - How to remove the boundary.pdfhttp://arxiv.org/abs/hep-th/03120152003 - Seiler - The case against asymptotic freedom.pdfhttp://arxiv.org/abs/0712.44032007 - Schroer - Localization-Entropy from Holography on Null-Surfaces and the Split Property.pdf" "http://arxiv.org/abs/hep-th/93101871993 - Fr\\\"ohlich, Gawedzki - Conformal Field Theory and Geometry of Strings.pdfhttp://arxiv.org/abs/math-ph/01060282006 - D'Antoni, Hollands - Nuclearity, local quasiequivalence and split property for Dirac quantum fields in curved spacetime.pdf" "http://arxiv.org/abs/math/98100031998 - D'Antoni, Longo, Radulescu - Conformal Nets, Maximal Temperature and Models from Free Probability.pdfhttp://spaces.djvu/home/gandalf/Physik/Fachb\\\"ucher/Conway - Functions of One Complex Variable I.djvu/home/gandalf/Physik/Fachb\\\"ucher/Boas - Entire Functions.djvu" "1987 - Rehren, Schroer - Exchange algebra on the lightcone and order-disorder 2n-point functions in the Ising field theory.pdf1978 - Schroer, Truong - The Relativistic Quantum Fields of the d=2 Ising Model.pdf1977 - Schroer, Truong - Equivilance of the Sine-Gordon and Thirring models and cumulative mass effects.pdf" "1979 - Schroer, Truong - Z_2 Duality Algebra in d=2 Quantum Field Theory.pdf1979 - Schroer, Truong, Weisz - Supersymmetric Ising Field Theory.pdf1978 - Schroer, Truong - The Order-Disorder Quantum Field Operators associated with the tw-dimensional Ising Model in the Continuum Limit.pdf" "1976 - Schroer, Truong, Weisz - Towards an Explicit Construction of the Sine-Gordon Field Theory.pdf1976 - Schroer, Truong - Model Study of Nonleading Mass Singularities I.pdf1978 - Schroer, Truong - Direct Construction of the Quantum Field Operators of the d=2 Ising Model.pdf" "http://arxiv.org/abs/0801.352910.1063/1.28381552008 - Strich - Passive States for Essential Observers.pdfhttp://arxiv.org/abs/0801.3621http://arxiv.org/abs/math-ph/99060201999 - Ilieva, Thirring - Anyons and the Bose-Fermi duality in the finite-temperature Thirring model.pdf" "1977 - Cuntz - Simple Cstar-algebras generated by isometries.pdfhttp://arxiv.org/abs/gr-qc/9605073http://arxiv.org/abs/math-ph/05110342005 - Summers - Tomita-Takesaki Modular Theory.pdf1975 - Araki - Relative entropy of states of von Neumann algebras.pdf1977 - Araki - Relative entropy for states of von Neumann algebras II.pdf" "1974 - Eckmann, Fr\\\"ohlich - Unitary equivalence of local algebras in the quasifree representation.pdf1993 - Buchholz, Summers - An algebraic characterization of vacuum states in Minkowski space.pdf1994 - Langmann - Fermion current algebras and Schwinger terms in (3+1)-dimensions.pdf" "1994 - Longo, Rehren - Nets of Subfactors.pdf1994 - Mund, Schrader - Hilbert Spaces for Nonrelativistic and Relativistic Free Plektons (Particles with Braid Group Statistics).pdfhttp://arxiv.org/abs/hep-th/95060161995 - J\\\"or\\ss - The Construction of Pointlike Localized Charged Fields from Conformal Haag-Kastler Nets.pdf" "1995 - Liguori, Mintchev - Fock Spaces with Generalized Statistics.pdfhttp://arxiv.org/abs/hep-th/96041611996 - Balog, Niedermaier, Hauer - Perturbative versus Non-perturbative QFT Lessons from the O(3) NLS Model.pdf1996 - Filk - Divergenices of a field theory on quantum space.pdf" "http://arxiv.org/abs/hep-th/96092061996 - Grosse, Langmann, Raschhofer - The Luttinger--Schwinger Model.pdf1997 - Borchers - Half-sided Translations in Connection with Modular Groups as a Tool in Quantum Field Theory.pdf1997 - M\\\"uger - Superselection Structure of Quantum Field Theories in 1+1 Dimenions PhD.pdf" "http://arxiv.org/abs/hep-th/96080921997 - Schroer - Wigner Representation Theory of the Poincare Group, Localization, Statistics and the S-Matrix.pdf1997 - Wulkenhaar - Non-Associative Geometry - Unified Models Based on L-Cycles -- PhD Thesis.pdfhttp://arxiv.org/abs/hep-th/9810026" "1998 - Dorey - Exact S-matrices.pdf1998 - Eveson, Fewster - Bounds on negative energy densities in flat spacetime.pdf1998 - Schroer - Localization and Nonperturbative Local Quantum Physics.pdfhttp://arxiv.org/abs/hep-th/97121241998 - Schroer - Modular Wedge Localization and the d=1+1 Formfactor Program.pdf" "http://arxiv.org/abs/math/98060311998 - Wassermann - OPERATOR ALGEBRAS AND CONFORMAL FIELD THEORY III.pdf1999 - Florig - Geometric Modular Action -- PhD-Thesis.pdfhttp://arxiv.org/abs/hep-th/99062251999 - Oeckl - Braided Quantum Field Theory.pdfhttp://arxiv.org/abs/hep-th/9908021" "1999 - Schroer - New Concepts in Particle Physics from Solution of an Old Problem.pdf2000 - Bostelmann - Lokale Algebren und Operatorprodukte am Punkt.pdfhttp://arxiv.org/abs/0801.46052008 - Carey, Phillips, Rennie - Twisted cyclic theory and an index theory for the gauge invariant KMS state on Cuntz algebras.pdf" "http://arxiv.org/abs/0802.0317http://arxiv.org/abs/0802.18542008 - Summers - Yet More Ado About Nothing: The Remarkable Relativistic Vacuum State.pdfhttp://arxiv.org/abs/0802.20982008 - Schroer - Is inert matter from indecomposable positive energy infinite spin representations the much sought-after dark matter.pdf" "1993 - Verch - Antilocality and a Reeh-Schlieder Theorem on Manifolds.pdfhttp://arxiv.org/abs/0802.29352008 - Summers - ``On the Impossibility of a Poincare-Invariant Vacuum State with Unit Norm'' Refuted.pdfhttp://arxiv.org/abs/0802.02161989 - Longo - Index of subfactors and statistics of quantum fields I.pdf" "1990 - Mack, Schomerus - Conformal field algebras with quantum symmetry from the theory of superselection sectors.pdf2000 - Jaffe - Constructive Quantum Field Theory.pdf1999 - Schroer - New Concepts in Particle Physics from Solution of an Old Problem.pdfhttp://arxiv.org/abs/gr-qc/0001050" "2000 - Varadarajan - Fock representations from U(1) holonomy algebras.pdf1998 - Borchers - Half-sided Translations and the Type of von Neumann Algebras.pdf2001 - Fidaleo - On the split property for inclusions of W-algebras.pdf2002 - Ebrahimi-Fard - On the relation between modular theory and geometry.pdf" "1981 - Ojima - Gauge Fields at Finite Temperature - ``Thermo Field Dynamics'' and the KMS Condition and Their Extension to Gauge Theories.pdf2007 - Zahn - Dispersion relations in quantum electrodynamics on the noncommutative Minkowski space - PhD-Thesis.pdf" "2007 - Kopf, Paschke - Generally covariant quantum mechanics on noncommutative configuration spaces.pdf2007 - Dybalski - A sharpened nuclearity condition and the uniqueness of the vacuum in QFT.pdf2004 - Kuckert, Mund - Spin and Statistics in Nonrelativistic Quantum Mechanics II.pdf" "2007 - Tureanu - Twisted Poincare Symmetry and Some Implications on Noncommutative Quantum Field Theory.pdf2007 - t'Hooft - The Grand Views of Physics.pdfhttp://arxiv.org/abs/math-ph/011204110.1007/s00220-003-0815-72001 - Brunetti, Fredenhagen, Verch - The generally covariant locality principle - A new paradigm for local quantum physics.pdf" "2003 - Camassa - Quasi-Free States and KMS States of the Scalar Free Field.pdfhttp://www.staff.city.ac.uk/o.castro-alvaredo/heptese.pdf2001 - Castro-Alvaredo - Bootstrap Methods in 1+1-Dimensional Quantum Field Theories - the Homogeneous Sine-Gordon Models - PhD thesis.pdf" "2001 - Schroer - Lectures on Algebraic Quantum Field Theory and Operator Algebras.pdf2002 - Kniemeyer - Untersuchungen am erzeugenden Funktional der AdS-CFT-Korrespondenz.pdf2003 - Kawahigashi, Longo - Classification of Two-dimensional Local Conformal Nets with c smaller 1 and 2-cohomology Vanishing for Tensor Categories.pdf" "2004 - Buchholz, Summers - Quantum statistics and locality.pdf\u00a9 symmetry and its implications.pdf2004 - Fewster, Ojima, Porrmann - p-Nuclearity in a New Perspective.pdf2004 - Heslop, Sibold - Quantized equations of motion in non-commutative theories.pdfhttp://arxiv.org/abs/math-ph/0402043" "2004 - Mund, Schroer, Yngvason - String-Localized quantum fields from Wigner representations.pdf2004 - Ullrich - Uniqueness in the Characteristic Cauchy Problem of the Klein-Gordon Equation and Tame Restrictions of Generalized Functions.pdf2005 - Gallavotii - Constructive Quantum Field Theory.pdf" "2006 - D'Antoni, Morsella - Scaling algebras and superselection sectors: Study of a class of models.pdf2006 - Fleischhack - Kinematical Uniqueness of Loop Quantum Gravity.pdf2006 - Giesel, Thiemann - Algebraic Quantum Gravity (AQG) I. Conceptual Setup.pdf2006 - Kawahigashi, Longo, Pennig, Rehren - The classification of non-local chiral CFT with c less than 1.pdf" "2006 - Lewandowski, Kaminski, Okolow - Background independent quantizations: the scalar field II.pdf2006 - Redei, Summers - Quantum Probability Theory.pdf2006 - Sahlmann - Exploring the diffeomorphism invariant Hilbert space of a scalar field.pdf2006 - Thiemann - Ein Universum aus brodelnden Schleifen.pdf" "2006 - Thiemann - Loop Quantum Gravity - An Inside View.pdf2007 - Balog, Weisz - Construction and clustering properties of the 2-d non-linear sigma model form factors - O(3), O(4), large n examples.pdf2007 - Baumg\\\"artner - Thermodynamic Stability: A note on a footnote in Ruelle's book.pdf" "http://arxiv.org/abs/0803.1468http://www.sciencedirect.com/science?_ob=ArticleURL&_udi=B6VN0-3YMWKX2-J&_user=162904&_rdoc=1&_fmt=&_orig=search&_sort=d&view=c&_acct=C000013078&_version=1&_urlVersion=0&_userid=162904&md5=eda241c67a6639fb4bd486d8ad51ecdc10.1016/0034-4877(96)83512-9" "1995 - Baumg\\\"artel, Jurke, Lled\\'o - On Free Nets Over Minkowski Space.pdfhttp://www.sciencedirect.com/science?_ob=ArticleURL&_udi=B6WJJ-4CRHYBM-4Y&_user=162904&_coverDate=05%2F31%2F1973&_alid=703919693&_rdoc=2&_fmt=full&_orig=search&_cdi=6880&_sort=d&_docanchor=&view=c&_ct=2&_acct=C000013078&_version=1&_urlVersion=0&_userid=162904&md5=1f33ae207b04b63eb9040ca7df0b088e" "10.1016/0022-1236(73)90062-11972 - Eckmann, Osterwalder - An application of Tomita's theory of modular Hilbert algebras: Duality for free Bose fields.pdfhttp://arxiv.org/abs/hep-th/05081432005 - Kopper - Renormalization Theory based on Flow Equations.pdfhttp://projecteuclid.org/euclid.cmp/1103922129" "1983 - Klein, Landau - From the Euclidean group to the Poincar\\'e group via Osterwalder-Schrader positivity.pdfhttp://projecteuclid.org/euclid.cmp/11038989091975 - L\\\"uscher, Mack - Global Conformal Invariance in Quantum Field Theory.pdf2001 - Paschke - Von Nichtkommutativen Geometrien, ihren Symmetrien und etwas Hochenergiephysik.pdf" "http://arxiv.org/abs/0804.35632008 - Schroer - A note on Infraparticles and Unparticles.pdf10.1007/BF020965481992 - Guido, Longo - Relativistic invariance and charge conjugation in quantum field theory.pdfhttp://arxiv.org/abs/hep-th/030724110.1007/s00220-004-1057-z" "2003 - Gayral, Gracia-Bondia, Iochum, Schucker, Varilly - Moyal planes are spectral triples.pdfhttp://projecteuclid.org/euclid.cmp/110385859010.1007/BF016461341973 - Swieca, V\\\"olkel - Remarks on Conformal Invariance.pdfhttp://arxiv.org/abs/0802.35262008 - Schroer - Do confinement and darkness have the same conceptual roots - The crucial role of localization.pdf" "http://arxiv.org/abs/0805.3500http://www.numdam.org/numdam-bin/fitem?id=AIHPA_1986__45_2_117_01986 - Yngvason - Invariant states on Borchers\\rq tensor algebra.pdfhttp://projecteuclid.org/euclid.cmp/110392032510.1007/BF012090751981 - Yngvason - Translationally invariant states and the spectrum ideal in the algebra of test functions for quantum fields.pdf" "http://projecteuclid.org/euclid.cmp/110385947610.1007/BF016464761973 - Yngvason - On the Algebra of Test Functions for Field Operators - Decomposition of Linear Functionals into Positive Ones.pdf10.1007/BF027456451962 - Borchers - On Structure of the Algebra of Field Operators.pdf" "10.1088/0305-44702005 - Franco - On the Borchers Class of a Non-Commutative Field.pdf2001 - Borchers, Yngvason - On the PCT--Theorem in the Theory of Local Observables.pdfhttp://arxiv.org/abs/0806.03492008 - Buchholz, Summers - Warped Convolutions: A Novel Tool in the Construction of Quantum Field Theories.pdf" "http://arxiv.org/abs/0707.38532007 - Carey, Phillips, Rennie - Semifinite spectral triples associated with graph Cstar-algebras.pdfhttp://arxiv.org/abs/0803.10352008 - Grosse, Vignes-Tourneret - Minimalist translation-invariant non-commutative scalar field theory.pdf" "http://arxiv.org/abs/0802.0791http://arxiv.org/abs/0806.1940http://arxiv.org/abs/0802.099710.1103/PhysRevD.77.1250132008 - Soloviev - On the failure of microcausality in noncommutative field theories.pdfhttp://arxiv.org/abs/0706.171210.1016/0370-2693(94)90940-7" "1994 - Doplicher, Fredenhagen, Roberts - Space-time quantization induced by classical gravity.pdfhttp://theory.djvuhttp://arxiv.org/abs/0803.4351http://arxiv.org/abs/0706.12592007 - Akofor, Balachandran, Jo, Joseph - Quantum Fields on the Groenwald-Moyal Plane: C, P, T and CPT.pdf" "10.1016/S0550-3213(02)00937-92002 - Aschieri, Jurco, Schupp, Wess - Noncommutative GUTs, standard model and C,P,T..pdfhttp://arxiv.org/abs/hep-th/06052492006 - Soloviev - Axiomatic formulations of nonlocal and noncommutative field theories.pdf2006 - Chu, Furuta, Inami - Locality, Causality and Noncommutative Geometry.pdf" "2004 - Franco , Polito - A New Derivation of the CPT and Spin-Statistics Theorems in Non-Commutative Field Theories.pdf10.1140/epjc2004 - Grosse, Wulkenhaar - The beta-function in duality-covariant noncommutative phi^4-theory.pdf10.1140/epjc2007 - Disertori, Rivasseau - Two and Three Loops Beta Function of Non Commutative Phi^4_4 Theory.pdf" "10.1016/j.physletb.2007.04.0072007 - Disertori, Gurau, Magnen, Rivasseau - Vanishing of Beta Function of Non Commutative Phi^4_4 Theory to all orders.pdf10.2977/prims1984 - Yngvason - On the Locality Ideal in the Algebra of Test Functions for Quantum Fields.pdf" "1968 - Lassner, Uhlmann - On positive functionals on algebras of test functions for quantum fields.pdf2008 - Hollands, Wald - Axiomatic quantum field theory in curved spacetime.pdf1978 - Leyland, Roberts, Testard - Duality for Quantum Free Fields.pdf2008 - Buchholz - Ein alternativer Zugang zur Teilchenphysik.pdf" "http://arxiv.org/abs/0808.345910.1088/1126-67082008 - Grosse, Lechner - Noncommutative Deformations of Wightman Quantum Field Theories.pdfhttp://arxiv.org/abs/0803.10352008 - Grosse, Vignes-Tourneret - Quantum field theory on the degenerate Moyal space.pdfhttp://arxiv.org/abs/0810.1195" "10.1088/1126-67082008 - Fischer, Szabo - Duality covariant quantum field theory on noncommutative Minkowski space.pdfhttp://arxiv.org/abs/hep-th/99102431999 - Buchholz, Haag - The Quest for Understanding in Relativistic Quantum Physics.pdf1966 - Symanzik - Euclidean Quantum Field Theory. I. Equations for a Scalar Model.pdf" "1999 - Schlingemann - Short-distance analysis for algebraic euclidean field theory.pdfhttp://arxiv.org/abs/hep-th/98020351999 - Schlingemann - From Euclidean Field Theory to Quantum Field Theory.pdfhttp://arxiv.org/abs/0810.52942008 - Redei, Summers - When are quantum systems operationally independent.pdf" "http://arxiv.org/abs/math-ph/98050131999 - Borchers, Yngvason - Modular groups of quantum fields in thermal states.pdf10.1016/0370-2693(79)90561-6http://arxiv.org/abs/hep-th/93100581993 - Fendley, Saleur - Massless integrable quantum field theories and massless scattering in 1+1 dimensions.pdf" "10.1007/BF020992491996 - Fredenhagen, J\\\"or\\ss - Conformal Haag-Kastler nets, pointlike localized fields and the existence of operator product expansions.pdf10.1103/PhysRevD.67.08500110.1023/B:MATH.0000035040.57943.7e10.1088/1751-8113http://arxiv.org/abs/math/0606333" "2008 - Kasprzak - Rieffel Deformations via Crossed Products.pdf1990 - Rieffel - Deformation Quantization and Operator Algebras.pdfhttp://arxiv.org/abs/math/04082172004 - Waldmann - States and representations in deformation quantization.pdfhttp://arxiv.org/abs/math/0609850" "2006 - Heller, Neumaier, Waldmann - A C-Algebraic Model for Locally Noncommutative Spacetimes.pdfhttp://arxiv.org/abs/math/99030531999 - Waldmann - Locality in GNS Representations of Deformation Quantization.pdfhttp://arxiv.org/abs/0901.10042009 - Lledo - Modular Theory by Example.pdf" "http://arxiv.org/abs/0812.47622008 - Bostelmann, D'Antoni, Morsella - On dilation symmetries arising from scaling limits.pdfhttp://arxiv.org/abs/0812.47602008 - Bostelmann, Fewster - Quantum Inequalities from Operator Product Expansions.pdfhttp://arxiv.org/abs/0809.2206" "10.4171/JNCG2008 - Kaschek, Neumaier, Waldmann - Complete Positivity of Rieffel's Deformation Quantization by Actions of Rd.pdf10.1007/BF016456931972 - Wyss - The Field algebra and its positive linear functionals.pdf10.1023/A:10075465073921998 - Florig - On Borchers' theorem.pdf" "2009 - Piacitelli - Twisted Covariance vs Weyl Quantisation.pdfhttp://arxiv.org/abs/math-ph/06040232006 - De Bievre, Merkli - The Unruh effect revisited.pdfhttp://arxiv.org/abs/0812.15172008 - Summers - Subsystems and Independence in Relativistic Microscopic Physics.pdf" "http://arxiv.org/abs/0901.31272008 - Dybalski - Spectral Theory of Automorphism Groups and Particle Structures in Quantum Field Theory.pdfhttp://analysis.djvu/home/gandalf/Physik/Fachb\\\"ucher/Kadison, Ringrose - Fundamentals of the Theory of Operator Algebras I - Elementary Theory.pdf" "/home/gandalf/Physik/Fachb\\\"ucher/Kadison, Ringrose - Fundamentals of the Theory of Operator Algebras II - Advanced Theory.pdf/home/gandalf/Physik/Lecture Notes/1997 - Landi - An Introduction to Noncommutative Spaces and their Geometry.pdfhttp://theory.djvu" "/home/gandalf/Physik/Fachb\\\"ucher/Bratteli, Robinson - Operator Algebras and Quantum Statistical Mechanics. Vol. 1.djvu/home/gandalf/Physik/Fachb\\\"ucher/Bratteli, Robinson - Operator Algebras and Quantum Statistical Mechanics. Vol. 2.djvuhttp://algebras.djvu" "/home/gandalf/Physik/Fachb\\\"ucher/Jost - General theory of quantized fields (AMS, 1964)(L)(T)(86s).djvu2002 - Boller - Spectral Theory of Modular Operators for von Neumann Algebras and Related Inverse Problems.pdfhttp://www.emis.de/journals/ZAA/1901/2.html2000 - Leitz-Martini, Wollenberg - Notes on Modular Conjugations of von Neumann Factors.pdf" "http://arxiv.org/abs/0902.05752009 - Piacitelli - Twisted Covariance as a Non Invariant Restriction of the Fully Covariant DFR Model.pdf/home/gandalf/Physik/Fachb\\\"ucher/Takesaki M. Theory of operator algebras 1 (Enc.Math.Sci.124, Springer, 2001)(ISBN 354042248X)(600dpi)(T)(435s)_MCf_.djvu" "/home/gandalf/Physik/Fachb\\\"ucher/Takesaki M. Theory of operator algebras 2 (Enc.Math.Sci.125, Springer, 2003)(ISBN 354042914X)(600dpi)(T)(540s)_MCf_.djvu/home/gandalf/Physik/Fachb\\\"ucher/Takesaki M. Theory of operator algebras 3 (Enc.Math.Sci.127, Springer, 2003)(ISBN 3540429131)(600dpi)(T)(570s)_MCf_.djvu" "/home/gandalf/Physik/Fachb\\\"ucher/Connes - Noncommutative Geometry.pdf/home/gandalf/Physik/Fachb\\\"ucher/Reed, Simon - Methods of Modern Mathematical Physics I - Functional Analysis.pdf/home/gandalf/Physik/Fachb\\\"ucher/Reed, Simon - Methods of Modern Mathematical Physics II - Fourier Analysis, Self-Adjointness.pdf" "/home/gandalf/Physik/Fachb\\\"ucher/Reed, Simon - Methods of Modern Mathematical Physics III - Scattering Theory.pdf/home/gandalf/Physik/Fachb\\\"ucher/Reed, Simon - Methods of Modern Mathematical Physics IV - Analysis of Operators.pdfhttp://i.djvu/home/gandalf/Physik/Fachb\\\"ucher/Neumann - Mathematische Grundlagen der Quantenmechanik.pdf" "/home/gandalf/Physik/Fachb\\\"ucher/Landsman - Mathematical topics between classical and quantum mechanics.djvu1962 - Uhlmann - \\\"Uber die Definition der Quantenfelder nach Wightman und Haag.pdf1972 - Borchers - Algebraic Aspects of Wightman Field Theory.pdfhttp://arxiv.org/abs/0812.0786" "10.1007/s00220-009-0905-22008 - Borris, Verch - Dirac field on Moyal-Minkowski spacetime and non-commutative potential scattering.pdf/home/gandalf/Physik/Fachb\\\"ucher/Rieffel - Deformation Quantization for Actions of Rd.pdf10.1023/A:10073680125571997 - Rehren - Bounded Bose fields.pdf" "1997 - Rehren - Konforme Quantenfeldtheorie.pdf/home/gandalf/Physik/Lecture Notes/1997 - Rehren - Konforme Quantenfeldtheorie.pdf/home/gandalf/Physik/Fachb\\\"ucher/Di Francesco P., Mathieu P., Senechal D. Conformal field theory (Springer 1997)(no preface)(K)(T)(908s)_PQft_.djvu" "http://arxiv.org/abs/hep-th/940707910.1007/BF021018941996 - B\\\"ockenhauer - Localized endomorphisms of the chiral Ising model.pdf2008 - Fewster - Lectures on quantum field theory in curved spacetime.pdf1988 - Furlan, Sotkov, Todorov - Two-dimensional conformal quantum field theory.pdf" "2004 - Kawahigashi, Longo - Classification of Local Conformal Nets. Case c < 1.pdf10.1103/PhysRevLett.38.7931977 - McCoy, Tracy, Wu - Two-Dimensional Ising Model as an Exactly Solvable Relativistic Quantum Field Theory: Explicit Formulas for n-Point Functions.pdf" "10.1023/A:10075171311431999 - Carpi - Classification of Subsystems for the Haag--Kastler Nets Generated by c = 1 Chiral Current Algebras.pdf10.1023/A:10074664201141998 - Carpi - Absence of Subsystems for the Haag--Kastler Net Generated by the Energy-Momentum Tensor in Two-Dimensional Conformal Field Theory.pdf" "/home/gandalf/Physik/Fachb\\\"ucher/Heuser H. Gewoehnliche Differentialgleichungen (Teubner, 1995)(de)(600dpi)(T)(628s)_MCde_.djvu2000 - Boller - Characterization of Cyclic and Separating Vectors and Application to an Inverse Problem in Modular Theory I. Finite Factors.pdf" "http://algebras.djvu2008 - Longo - Lectures on Conformal Nets - part1.pdf2008 - Longo - Lectures on Conformal Nets - part2.pdf2001 - D\\\"utsch, Fedenhagen - Perturbative Algebraic Field Theory, and Deformation Quantization.pdf2003 - Ritz - Normalit\\\"atseigenschaften lokaler Gleichgewichtszust\\\"ande in der relativistischen Quantenfeldtheorie.pdf" "1996 - Brunetti, Fredenhagen, K\\\"ohler - The microlocal spectrum condition and Wick polynomials of free fields on curved spacetimes.pdfhttp://arxiv.org/abs/0802.21982008 - Hollands - Quantum field theory in terms of consistency conditions I: General framework, and perturbation theory via Hochschild cohomology.pdf" "http://www.jstor.org/stable/19704841964 - Gerstenhaber - On the deformation of rings and algebras.pdfhttp://arxiv.org/abs/0905.37762009 - Nahm, Keegan - Integrable deformations of CFTs and the discrete Hirota equations.pdfhttp://arxiv.org/abs/hep-th/9411203" "10.1016/0370-2693(95)00125-51995 - Gliozzi, Tateo - ADE functional dilogarithm identities and integrable models.pdfhttp://geometry.djvu1996 - Weaver - Deformations of von Neumann algebras.pdf1981 - Rieffel - Von Neumann algebras associated with pairs of lattices in Lie groups.pdf" "1990 - Rieffel - Non-commutative tori - a case study of non-commutative differentiable manifolds.pdfhttp://arxiv.org/abs/0905.44352009 - Schroer - BMS symmetry, holography on null-surfaces and area proportionality of light-slice entropy.pdfhttp://link.aip.org/link/?JMP/25/113/1" "10.1063/1.5260051982 - Lester - The causal automorphism of de Sitter and Einstein cylinder spacetimes.pdfhttp://arxiv.org/abs/math-ph/03100092003 - Suijlekom - The noncommutative Lorentzian cylinder as an isospectral deformation.pdf10.1007/BF020995821995 - Coburn, Xia - Toeplitz Algebras and Rieffel Deformations.pdf" "http://arxiv.org/abs/math/02092952002 - Bieliavsky, Maeda - Convergent Star Product Algebras on 'ax+b'.pdfhttp://arxiv.org/abs/math/00100042000 - Bieliavsky - Strict Quantization of Solvable Symmetric Spaces.pdf2006 - Heller - Lokal nichtkommutative Raumzeiten und Strikte Deformationsquantisierung - Diplom.pdf" "2008 - Kaschek - Nichtperturbative Deformationstheorie physikalischer Zust\\\"ande - Diplomarbeit.pdf/home/gandalf/Physik/Fachb\\\"ucher/Lance E.C. Hilbert C-Modules.. a toolkit for operator algebraists (CUP, 1995)(600dpi)(T)(ISBN 052147910X)(138s).djvu10.1007/BF01941663" "1981 - Fredenhagen, Hertel - Local algebras of observables and pointlike localized fields.pdf/home/gandalf/Physik/Fachb\\\"ucher/Schiff J.L. Laplace Transformation.. Theory and Applications (UTM, Springer,1999)(ISBN 0387986987)(245s)_MCat_.pdfhttp://arxiv.org/abs/0906.3524" "2009 - Rivasseau - Constructive Field Theory in Zero Dimension.pdf10.1007/BF015651141992 - Bros, Buchholz - Particles and propagators in relativistic thermo field theory.pdfhttp://arxiv.org/abs/hep-th/980709910.1016/0550-3213(94)00298-31994 - Bros, Buchholz - Towards a Relativistic KMS Condition.pdf" "http://arxiv.org/abs/hep-th/95110221995 - Bros, Buchholz - Relativistic KMS-condition and Kaellen-Lehmann type representatios of thermal propagators.pdfhttp://arxiv.org/abs/hep-th/96060461996 - Bros, Buchholz - Axiomatic analyticity properties and representations of particles in thermal quantum field theory.pdf" "http://arxiv.org/abs/hep-th/960813910.1103/PhysRevD.58.1250121998 - Bros, Buchholz - The unmasking of thermal Goldstone bosons.pdfhttp://arxiv.org/abs/hep-ph/010913610.1016/S0550-3213(02)00059-72002 - Bros, Buchholz - Asymptotic dynamics of thermal quantum fields.pdf" "http://arxiv.org/abs/hep-th/98040171999 - J\\\"akel - Cluster Estimates for Modular Structures.pdfhttp://www.math.berkeley.edu/~rieffel/papers/compact.pdf1993 - Rieffel - Compact quantum groups associated with toral subgroups.pdf1995 - Rieffel - Non-compact quantum groups associated with abelian subgroups.pdf" "1974 - Rieffel - Induced Representations of C-Algebras.pdfhttp://arxiv.org/abs/0907.09052009 - Akofor, Balachandran - Finite Temperature Field Theory on the Moyal Plane.pdfhttp://arxiv.org/abs/physics/970802710.1063/1.5324841998 - Bertrand, Bertrand - Symbolic calculus on the time-frequency half-plane.pdf" "10.1016/0370-2693(79)90523-91978 - Karowski, Kurak, Schroer - Confinement in two-dimensional models with factorization.pdf1999 - Quella - Formfaktoren und Lokalit\\\"at in integrablen Modellen der Quantenfeldtheorie in 1+1 Dimensionen.pdfhttp://arxiv.org/abs/0907.3640" "2009 - Galluccio, Lizzi, Vitale - Translation Invariance, Commutation Relations and Ultraviolet-Infrared Mixing.pdf/home/gandalf/Physik/Fachb\\\"ucher/Arnold V.I. Ordinary differential equations (MIT, 1978)(no TOC)(400dpi)(T)(273s).djvu/home/gandalf/Physik/Fachb\\\"ucher/Teschl G. Ordinary differential equations (lecture notes, web draft, 2004)(243s).pdf" "/home/gandalf/Physik/Fachb\\\"ucher/Chicone C. Ordinary Differential Equations with Applications(TAM 34,Springer,1999)(ISBN 0387985352)(571s)_MCde_.pdf10.1016/0003-4916(89)90262-51989 - Varilly, Gracia-Bondia - The Moyal Representation for Spin.pdf/home/gandalf/Physik/Fachb\\\"ucher/Williams - Crossed products of C-algebras.djvu" "http://arxiv.org/abs/0908.45372009 - Bahns - Schwinger functions in noncommutative quantum field theory.pdfhttp://arxiv.org/abs/0906.20672009 - Schroer - Geometry and Localization, a metaphorically related pair.pdf/home/gandalf/Physik/Fachb\\\"ucher/Jaenich K. Funktionentheorie (5ed., Springer, 1999)(de)(L)(T)(ISBN 3540661522)(66s).djvu" "http://arxiv.org/abs/0909.18992009 - Brunetti, Fredenhagen, Hoge - Time in quantum physics: From an external parameter to an intrinsic observable.pdfhttp://space.djvuhttp://arxiv.org/abs/0909.32152009 - Dabrowski, Piacitelli - The k-Minkowski Spacetime: Trace, Classical Limit and uncertainty Relations.pdf" "http://arxiv.org/abs/hep-th/060315510.1007/978-3-540-71117-9_42006 - Fredenhagen, Rehren, Seiler - Quantum Field Theory: Where We Are.pdf/home/gandalf/Physik/Fachb\\\"ucher/Connes A., Cuntz J., et al., Noncommutative geometry, CIME lectures, 2000, LNM1831, Springer, 2004, 359s.pdf" "1998 - M\\\"uger - Quantum Double Actions on Operator Algebras and Orbifold Quantum Field Theories.pdf2005 - Albeverio, Motovilov - Operator integrals with respect to a spectral measure and solutions to some operator equations.pdf/home/gandalf/Physik/Fachb\\\"ucher/Pedersen G.K. C-algebras and their authomorphism groups (AP, 1979)(600dpi)(T)(ISBN 0125494505)(426s).djvu" "2005 - Moschella - The de Sitter and anti-de Sitter sightseeing tour.pdfhttp://arxiv.org/abs/1005.265610.1007/s00220-010-1137-12010 - Buchholz, Lechner, Summers - Warped Convolutions, Rieffel Deformations and the Construction of Quantum Field Theories.pdfhttp://arxiv.org/abs/1006.3548" "10.1007/s00220-011-1210-42010 - Dappiaggi, Lechner, Morfa-Morales - Deformations of quantum field theories on spacetimes with Killing fields.pdf2009 - Lechner - Deformations of Operator Algebras and the Construction of Quantum Field Theories.pdfhttp://arxiv.org/abs/0911.5136" "2009 - Doplicher - The Principle of Locality. Effectiveness, fate and challenges.pdf/home/gandalf/Physik/Fachb\\\"ucher/Waldmann - Poisson-Geometrie und Deformationsquantisierung.pdfhttp://arxiv.org/abs/0712.17702007 - Dappiaggi, Moretti, Pinamonti - Cosmological horizons and reconstruction of quantum field theories.pdf" "2008 - Dappiaggi, Moretti, Pinamonti - Distinguished quantum states in a class of cosmological spacetimes and their Hadamard property.pdf2009 - Manchak - Is spacetime hole free.pdf2000 - Kuckert - Localization Regions of Local Observables.pdf1994 - Masiello - Convex regions of Lorentzian manifolds.pdf" "http://arxiv.org/abs/0912.09062009 - Cagnache, D'Andrea, Martinetti, Wallet - The spectral distance on the Moyal plane.pdfhttp://arxiv.org/abs/0912.11062009 - Longo, Martinetti, Rehren - Geometric modular action for disjoint intervals and boundary conformal field theory.pdf" "http://arxiv.org/abs/math-ph/00020212000 - Sahlmann, Verch - Passivity and microlocal spectrum condition.pdfhttp://arxiv.org/abs/gr-qc/98030361999 - Borchers, Buchholz - Global properties of vacuum states in de Sitter space.pdf/home/gandalf/Physik/Fachb\\\"ucher/Wald R.M. General relativity (1984)(T)(ISBN 0226870332)(494s).djvu" "http://www.lqp.uni-goe.de/papers/09/12/09120802.html2009 - Borchers - On the Net of von Neumann algebras associated with a Wedge and Wedge-causal Manifolds.pdf2009 - Claessens - Locally anti de Sitter spaces and deformation quantization.pdfhttp://arxiv.org/abs/0912.2252" "2009 - Ohl, Schenkel - Algebraic approach to quantum field theory on a class of noncommutative curved spacetimes.pdf/home/gandalf/Physik/Fachb\\\"ucher/Sachs R.K., Wu H. General relativity for mathematicians (Springer, 1977)(T)(ISBN 038790218X)(301s).djvuhttp://arxiv.org/abs/1001.1882" "2010 - Streater - A Scattering Theory based on Free Fields.pdf/home/gandalf/Physik/Fachb\\\"ucher/Sakai S. C-star-algebras and W-star-algebras (Springer, 1971)(600dpi)(T)(270s).djvu/home/gandalf/Physik/Fachb\\\"ucher/Arveson W. An invitation to C-algebras (Springer, 1976)(600dpi)(T)(116s).djvu" "1966 - Araki, Woods - Complete Boolean algebras of type I factors.pdf/home/gandalf/Physik/Fachb\\\"ucher/Guichardet. Symmetric Hilbert Spaces and Related Topics (LNM0261, Springer, 1972)(ISBN 3540058036)(T)(202s).djvuhttp://arxiv.org/abs/1002.09562010 - L\\aangvik, Zahabi - On Finite Noncommutativity in Quantum Field Theory.pdf" "http://arxiv.org/abs/hep-th/00050572000 - Porrmann - The Concept of Particle Weights in Local Quantum Field Theory - PhD-Thesis.pdfhttp://arxiv.org/abs/0809.48282008 - Sanders - Aspects of locally covariant quantum field theory - PhD-Thesis.pdfhttp://arxiv.org/abs/0903.1021" "2009 - Sanders - Equivalence of the (generalised) Hadamard and microlocal spectrum condition for (generalised) free fields in curved spacetime.pdfhttp://arxiv.org/abs/0801.46762008 - Sanders - On the Reeh-Schlieder Property in Curved Spacetime.pdfhttp://arxiv.org/abs/1001.0858" "2010 - Dappiaggi, Pinamonti, Porrmann - Local causal structures, Hadamard states and the principle of local covariance in quantum field theory.pdfhttp://arxiv.org/abs/0806.080310.1007/s00220-009-0780-x2008 - Pinamonti - Conformal generally covariant quantum field theory: The scalar field and its Wick products.pdf" "2009 - Waldmann - Geometric Wave Equations.pdfhttp://arxiv.org/abs/0712.04012007 - Lauridsen-Ribeiro - Structural and Dynamical Aspects of the AdS-CFT Correspondence - a Rigorous Approach - PhD-Thesis.pdf/home/gandalf/Physik/Fachb\\\"ucher/Jaenich K. Vektoranalysis (2ed., Springer, 1993)(de)(L)(T)(ISBN 3540571426)(143s).djvu" "/home/gandalf/Physik/Fachb\\\"ucher/Isham C.J. Modern Differential Geometry for Physicists (WS, 2001)(T)(306s).djvu/home/gandalf/Physik/Fachb\\\"ucher/J\\\"anich - Topologie.djvu/home/gandalf/Physik/Fachb\\\"ucher/Rudin - Functional Analysis.djvuhttp://arxiv.org/abs/math-ph/0001034" "2000 - Longo - The Bisognano-Wichmann Theorem for Charged States and the Conformal Boundary of a Black Hole.pdf/home/gandalf/Physik/Fachb\\\"ucher/Galindo A., Pascual P. Quantum mechanics I (Springer, 1990)(ISBN 0387514066)(T) (431s).djvu/home/gandalf/Physik/Fachb\\\"ucher/Galindo A., Pascual P. Quantum mechanics II (Springer, 1991)(ISBN 038752309X)(T)(388s).djvu" "http://geometry.djvuhttp://analysis.djvuhttp://qft.djvuhttp://arxiv.org/abs/gr-qc/040111210.1007/s00220-005-1346-12005 - Bernal, Sanchez - Smoothness of time functions and the metric splitting of globally hyperbolic spacetimes.pdfhttp://arxiv.org/abs/gr-qc/0512095" "10.1007/s11005-006-0091-52006 - Bernal, Sanchez - Further results on the smoothability of Cauchy hypersurfaces and Cauchy time functions.pdfhttp://topology.djvuhttp://holes.djvu10.1007/s10714-006-0283-42006 - Ellis - The Bianchi Models - Then and Now.pdf10.1103/PhysRevD.10.3905" "http://thermodynamics.djvu10.1007/BF0210118010.1007/BF0210009610.1103/PhysRevD.35.377110.1063/1.166450710.1063/1.1665067http://spacetime.djvuhttp://sciences.djvuhttp://arxiv.org/abs/hep-th/99051791999 - Rehren - Algebraic Holography.pdf10.1142/S0129055X96000093" "2000 - Buchholz - Algebraic quantum field theory: A Status report.pdfhttp://projecteuclid.org/euclid.cmp/110394333710.1007/BF012126871985 - Kay - The double-wedge algebra for quantum fields on Schwarzschild and Minkowski spacetimes.pdfhttp://arxiv.org/abs/0709.1110" "2007 - Bieliavsky - Deformation quantization for actions of the affine group.pdfhttp://arxiv.org/abs/hep-th/04032572004 - Bieliavsky, Detournay, Rooman, Spindel - Star products on extended massive non-rotating BTZ black holes.pdfhttp://arxiv.org/abs/math/0011144" "2001 - Bieliavsky, Massar - Strict Deformation Quantization for Actions of a Class of Symplectic Lie Groups.pdfhttp://integral.djvuhttp://arxiv.org/abs/1004.06162010 - Longo, Witten - An Algebraic Construction of Boundary Quantum Field Theory.pdfhttp://www.ems-ph.org/journals/show_abstract.php?issn=0034-5318&vol=6&iss=3&rank=1&srch=searchterm%7COn+quasifree+states+of+CAR+and+Bogoliubov+automorphisms" "10.2977/prims1970 - Araki - On Quasifree States of CAR and Bogoliubov Automorphisms.pdf1968 - Araki - On the Diagonalization of a Bilinear Hamiltonian by a Bogoliubov Transformation.pdfhttp://arxiv.org/abs/0904.061210.1142/S0129055X090038642009 - Dappiaggi, Hack, Pinamonti - The extended algebra of observables for Dirac fields and the trace anomaly of their stress-energy tensor.pdf" "10.2307/19985971982 - Dimock - Dirac Quantum Fields on a Manifold.pdf10.1007/s0022000002992000 - Strohmaier - The Reeh--Schlieder Property for Quantum Fields on Stationary Spacetimes.pdfhttp://projecteuclid.org/euclid.cmp/11038414811969 - Doplicher, Haag, Roberts - Fields, observables and gauge transformations I.pdf" "http://www.ems-ph.org/journals/show_abstract.php?issn=0034-5318&vol=19&iss=2&rank=11&srch=searchterm%7CAbstract+Twisted+Duality+for+Quantum+Free+Fermi+Fields1983 - Foit - Abstract Twisted Duality for Quantum Free Fermi Fields.pdf10.1007/BF012056641981 - Summers - Normal product states for fermions and twisted duality for CCR- and CAR-type algebras with application to the Yukawa2 quantum field model.pdf" "10.1007/s0022001005262001 - Verch - A Spin-Statistics Theorem for Quantum Fields on Curved Spacetime Manifolds in a Generally Covariant Framework.pdf2000 - Verch - On Generalizations of the Spectrum Condition.pdfhttp://dx.doi.org/10.1142/S0129167X9300031510.1142/S0129167X93000315" "1993 - Schweitzer - Dense m-convex Frechet Subalgebras of Operator Algebra Crossed Products by Lie Groups.pdf/home/gandalf/Physik/Fachb\\\"ucher/Taylor - Noncommutative Harmonic Analysis.pdfhttp://arxiv.org/abs/quant-ph/02021222008 - Keyl - Fundamentals of Quantum Information Theory.pdf" "http://arxiv.org/abs/gr-qc/04050572004 - Paschke, Verch - Local covariant quantum field theory over spectral geometries.pdfhttp://arxiv.org/abs/1005.05412010 - Zahn - Divergences in quantum field theory on the noncommutative two-dimensional Minkowski space with Grosse-Wulkenhaar potential.pdf" "http://arxiv.org/abs/0907.55102009 - Aastrup, Grimstrup, Paschke, Nest - On Semi-Classical States of Quantum Gravity and Noncommutative Geometry.pdfhttp://arxiv.org/abs/0802.178310.1088/0264-93812008 - Aastrup, Grimstrup, Nest - On Spectral Triples in Quantum Gravity.pdf" "http://arxiv.org/abs/0804.191410.1088/1751-81132008 - Blaschke, Gieres, Kronberger, Schweda, Wohlgenannt - Translation-invariant models for non-commutative gauge fields.pdfhttp://arxiv.org/abs/hep-th/050418310.1088/0264-93812005 - Aschieri, Blohmann, Dimitrijevic, Meyer, Schupp, Wess - A Gravity Theory on Noncommutative Spaces.pdf" "http://projecteuclid.org/euclid.cmp/110389905010.1007/BF016089781975 - Osterwalder, Schrader - Axioms for Euclidean Green's functions II.pdfhttp://arxiv.org/abs/hep-th/94080091995 - Zinoviev - Equivalence of Euclidean and Wightman field theories.pdfhttp://arxiv.org/abs/1005.2130" "2010 - Bahns, Doplicher, Fredenhagen, Piacitelli - Quantum Geometry on Quantum Spacetime: Distance, Area and Volume Operators.pdf10.1063/1.5277331987 - Summers, Werner - Bell's Inequalities and quantum field theory I. General setting.pdfhttp://arxiv.org/abs/funct-an/9701011" "1997 - Rieffel - On the operator algebra for the space-time uncertainty relations.pdf/home/gandalf/Physik/Fachb\\\"ucher/Lang - SL(2,R).djvuhttp://arxiv.org/abs/math-ph/06030832006 - Buchholz, D'Antoni, Longo - Nuclearity and Thermal States in Conformal Field Theory.pdf" "http://c-algebras.djvuhttp://arxiv.org/abs/hep-th/99040491999 - J\\\"akel - The Reeh-Schlieder property for thermal field theories.pdfhttp://arxiv.org/abs/0911.130410.1142/S0129055X100039902010 - Sanders - The locally covariant Dirac field.pdf10.1016/0370-1573(92)90044-Z" "10.1063/1.5285141989 - Estrada, Gracia-Bondia, Varilly - On asymptotic expansions of twisted products.pdf/home/gandalf/Physik/Fachb\\\"ucher/Jackson J.D. Classical electrodynamics (Wiley, 1962)(T)(656s).djvuhttp://arxiv.org/abs/1006.34162010 - Kasprzak - Rieffel deformation of group coactions.pdf" "http://theory.djvuhttp://arxiv.org/abs/hep-th/01062052001 - Chu, Madore, Steinacker - Scaling Limits of the Fuzzy Sphere at one Loop.pdfhttp://arxiv.org/abs/math/01080052001 - Rieffel - Matrix algebras converge to the sphere for quantum Gromov-Hausdorff distance.pdf" "http://arxiv.org/abs/1006.54302010 - Dybalski, Tanimoto - Asymptotic completeness in a class of massless relativistic quantum field theories.pdfhttp://www.jstor.org/stable/20069791983 - Fr\\\"ohlich, Osterwalder, Seiler - On Virtual representations of symmetric spaces and their analytic continuation.pdf" "http://spaces.djvuhttp://mechanics.djvuhttp://arxiv.org/abs/1005.46662010 - Acharyya, Vaidya - Uniformly Accelerated Observer in Moyal Spacetime.pdf/home/gandalf/Physik/Fachb\\\"ucher/Kirillov - Lectures on the Orbit Method.pdfhttp://arxiv.org/abs/0806.42552008 - Bieliavsky, Gurau, Rivasseau - Non Commutative Field Theory on Rank One Symmetric Spaces.pdf" "http://arxiv.org/abs/math/03054422006 - Cushman, van der Kallen - Adjoint and Coadjoint Orbits of the Poincare Group.pdfVogan - Corrections to Lectures on the Orbit Methods by Kirillov.pdfhttp://equation.djvu1982 - Dimock, Kay - Classical wave operators and asymptotic quantum field operators on curved spacetimes.pdf" "1982 - Kay - Quantum Fields in Curved Spacetimes and Scattering Theory.pdf10.1063/1.5233701976 - Buchholz, Fredenhagen - Dilations and Interaction.pdfhttp://arxiv.org/abs/1006.47262010 - Weiner - An algebraic Haag's theorem.pdf2000 - D'Antoni, Zsido - The Flat Tube Theorem for Vector Valued Functions.pdf" "Hyperfunctions_and_theoretical_physics-Springer(1975).djvuhttp://arxiv.org/abs/0806.47412009 - Bieliavsky, Detournay, Spindel - The Deformation Quantizations of the Hyperbolic Plane.pdf1992 - Klimek, Lesniewski - Quantum Riemann Surfaces I, The Unit Disc.pdf" "http://arxiv.org/abs/1007.40942010 - Bertozzini, Conti, Lewkeeratiyutkul - Modular Theory, Non-commutative Geometry and Quantum Gravity.pdf1981 - Klein, Landau - Construction of a Unique Self-Adjoint Generator for a Symmetric Local Semigroup.pdf1976 - Klein - The semigroup characterization of Osterwalder-Schrader path spaces and the construction of Euclidean fields.pdf" "http://arxiv.org/abs/1009.38322010 - Casini - Wedge Reflection Positivity.pdf10.1007/BF028216771963 - Borchers, Zimmermann - On the Self-Adjointness of Field Operators.pdfhttp://electrodynamics.djvuhttp://i.djvuhttp://ii.djvuhttp://iii.djvuhttp://iv.djvuhttp://analysis.djvu" "http://i.djvu1971 - H\\\"ormander - Fourier Integral Operators I.pdfhttp://applications.djvu/home/gandalf/Physik/Fachb\\\"ucher/Jarchow - Locally Convex Spaces.djvuhttp://kernels.djvuhttp://arxiv.org/abs/1011.23702010 - Bieliavsky, de Goursac, Tuynman - Deformation Quantization for Heisenberg Supergroup.pdf" "10.1007/BF012134091985 - Fredenhagen - A remark on the cluster theorem.pdfhttp://arxiv.org/abs/quant-ph/00070602001 - Halvorson - Reeh-Schlieder Defeats Newton-Wigner: On Alternative Localization Schemes in Relativistic Quantum Field Theory.pdf2004 - J\\\"akel - Mathematical Foundations of Thermal Field Theory .pdf" "10.1063/1.17036881960 - Epstein - Generalization of the Edge-of-the-Wedge Theorem.pdf10.1007/BF007501471994 - Yngvason - A note on essential duality.pdfhttp://arxiv.org/abs/1012.14542010 - Mund - An Algebraic Jost-Schroer Theorem for Massive Theories.pdfhttp://arxiv.org/abs/1012.1417" "2010 - Bagarello - Modular Structures and Landau Levels.pdf2001 - Dubois-Violette, Kriegel, Maeda, Michor - Smooth Star-Algebras.pdfhttp://distributions.djvuhttp://introduction.djvu10.1142/S0129055X940002011994 - Borchers, Yngvason - Transitivity of locality and duality in quantum field theory - Some modular aspects.pdf" "http://arxiv.org/abs/math/04103502004 - Bursztyn, Waldmann - Hermitian star products are completely positive deformations.pdf10.1063/1.5282001988 - Gracia-Bondia, Varilly - Algebras of distributions suitable for phase space quantum mechanics. I.pdf10.1063/1.527984" "1988 - Gracia-Bondia, Varilly - Algebras of distributions suitable for phase-space quantum mechanics II. Topologies on the Moyal algebra.pdfhttp://arxiv.org/abs/1101.09312011 - Amelino-Camelia, Freidel, Kowalski-Glikman, Smolin - The principle of relative locality.pdf" "http://introduction.djvu1963 - Hepp - Kovariante analytische Funktionen - PhD-Thesis.pdfhttp://functions.djvu1992 - Zamolodchikov, Zamolodchikov - Massless factorized scattering and sigma models with topological terms.pdfhttp://spaces.djvu1960 - H\\\"ormander - Estimates for translation invariant operators in Lp spaces.pdf" "1989 - Meisters - Linear operators commuting with translations on D(R) are continuous.pdf1993 - Dales, Millington - Translation-invariant operators.pdf2006 - Feichtinger, F\\\"uhr, Gr\\\"ochenig, Kaiblinger - Operators commuting with a discrete subgroup of translations.pdf" "/home/gandalf/Physik/Fachb\\\"ucher/Donoghue - Distributions and Fourier transforms.pdfhttp://analysis.djvuhttp://arxiv.org/abs/1102.5270http://s-matrix.djvuhttp://arxiv.org/abs/1103.11412011 - Longo, Rehren - Boundary Quantum Field Theory on the Interior of the Lorentz Hyperboloid.pdf" "http://arxiv.org/abs/hep-th/06102962006 - Gazeau, Lachieze-Rey - Quantum Field Theory in de Sitter space : A survey of recent approaches.pdf10.1016/0034-4877(96)87678-61996 - Hofmann - On the GNS representation of generalized free fields with indefinite metric.pdf" "10.1007/s0022000502701998 - Hofmann - On GNS representations on indefinite inner product spaces. 1. The Structure of the representation space.pdfhttp://relations.ps/home/gandalf/Physik/Fachb\\\"ucher/Kato - Perturbation theory for linear operators (1995).djvu" "/home/gandalf/Physik/Fachb\\\"ucher/Garnett - Bounded Analytic Functions (2006).pdf/home/gandalf/Physik/Fachb\\\"ucher/Titchmarsh - Introduction to the theory of Fourier integrals(1948).djvu2001 - Boller, Wollenerg - An inverse problem in Tomita-Takesaki modular theory.pdf" "1992 - Wollenberg - Notes on Perturbations of Causal Nets of Operator Algebras.pdfhttp://variables.djvuhttp://variable.djvuhttp://arxiv.org/abs/1104.19482011 - Lechner - Deformations of quantum field theories and integrable models.pdfhttp://physics.djvuhttp://mechanics.djvu" "1977 - Driessler, Fr\\\"ohlich - The reconstruction of local observable algebras from the Euclidean Green's functions of relativistic quantum field theory.pdf1959 - Nelson - Analytic Vectors.pdf10.1016/0370-1573(92)90047-41992 - Mussardo - Off-critical statistical models: Factorized scattering theories and bootstrap program.pdf" "1999 - Jorgensen, Olafsson - Unitary representations and Osterwalder-Schrader duality.pdfhttp://arxiv.org/abs/1105.2781http://www.worldscinet.com/rmp/23/2310/S0129055X11004539.html10.1142/S0129055X110045392011 - Bostelmann, Lechner, Morsella - Scaling Limits of Integrable Quantum Field Theories.pdf" "http://arxiv.org/abs/1105.29632011 - Kukhtina, Rehren - Local Commutators and Deformations in Conformal Chiral Quantum Field Theories.pdf1970 - Roberts - The structure of sectors reached by a field algebra.pdf2011 - Schroer - Causality and dispersion relations and the role of the S-matrix in the ongoing research.pdf" "1977 - Driessler - On the Structure of Fields and Algebras on Null Planes.pdf10.1063/1.14833762002 - Baumg\\\"artel, Jurke, Lled\\'o - Twisted duality of the CAR algebra.pdf10.1016/0034-4877(96)83512-91995 - Baumg\\\"artel, Jurke, Lled\\'o - On Free Nets Over Minkowski Space.pdf" "10.1142/S0217751X030122172003 - Schroer - Lightfront holography and area density of entropy associated with localization on wedge-horizons.pdfhttp://arxiv.org/abs/1105.48562011 - Morfa-Morales - Deformations of quantum field theories on de Sitter spacetime.pdf" "http://arxiv.org/abs/0901.38652009 - Wall - Ten Proofs of the Generalized Second Law.pdfhttp://arxiv.org/abs/1007.14932010 - Wall - A proof of the generalized second law for rapidly-evolving Rindler horizons.pdfhttp://arxiv.org/abs/1105.34452011 - Wall - A proof of the generalized second law for rapidly changing fields and arbitrary horizon slices.pdf" "http://arxiv.org/abs/hep-th/99122191999 - Schlingemann - Application of Tomita-Takesaki theory in algebraic euclidean field theories.pdfhttp://arxiv.org/abs/0908.04802009 - Doplicher - The Measurement Process in Local Quantum Theory and the EPR Paradox.pdfhttp://arxiv.org/abs/1101.5700" "2011 - Dybalski, Tanimoto - Infraparticles with superselected direction of motion in two-dimensional conformal field theory.pdfhttp://arxiv.org/abs/1105.6202http://arxiv.org/abs/1106.47852011 - Fewster, Verch - Dynamical locality and covariance - What makes a physical theory the same in all spacetimes.pdf" "10.1007/BF025063881996 - Connes - Gravity coupled with matter and the foundation of non-commutative geometry.pdf10.1007/BF016459411974 - Glaser - On the equivalence of the Euclidean and Wightman formulation of field theory.pdf10.1007/s00023-003-0141-92003 - D\\\"utsch, Rehren - Generalized Free Fields and the AdS-CFT Correspondence.pdf" "http://arxiv.org/abs/1107.26292011 - Tanimoto - Construction of wedge-local nets of observables through Longo-Witten endomorphisms.pdfhttp://arxiv.org/abs/1107.26622011 - Tanimoto - Noninteraction of waves in two-dimensional conformal field theory.pdfhttp://arxiv.org/abs/1009.4990" "2010 - Brunetti, Moretti - Modular dynamics in diamonds.pdfhttp://arxiv.org/abs/1108.20042011 - Beiser, Waldmann - Fr\\'echet algebraic deformation quantization of the Poincar\\'e disk.pdfhttp://spaces.djvuhttp://i.djvuhttp://ii.djvuhttp://arxiv.org/abs/1108.3947" "2011 - Goursac - Non-formal deformation quantization of abelian supergroups.pdfhttp://arxiv.org/abs/1108.48892011 - Bischoff - Models in Boundary Quantum Field Theory Associated with Lattices and Loop Group Models.pdf2011 - Bieliavsky, Gayral - Deformation Quantization for Actions of Kahlerian Lie Groups Part I - Frechet Algebras.pdf" "http://arxiv.org/abs/1109.4824http://arxiv.org/abs/1109.12122011 - Schroer - The foundational origin of integrability in quantum field theory.pdfhttp://arxiv.org/abs/1109.59502011 - Lechner, Waldmann - Strict deformation quantization of locally convex algebras and modules - arXiv version 1.pdf" "/home/gandalf/Physik/Lecture Notes/Meinrenken - Symplectic geometry.pdfhttp://arxiv.org/abs/hep-th/030417910.1007/s00220-003-0865-x2003 - Summers, White - On Deriving Space-Time From Quantum Observables and States.pdfhttp://arxiv.org/abs/gr-qc/02120252003 - Guido, Longo - A Converse Hawking-Unruh Effect and dS^2-CFT Correspondance.pdf" "2011 - Summers - A Perspective on Constructive Quantum Field Theory.pdf1972 - Flato, Simon, Snellman, Sternheimer - Simple facts about analytic vectors and integrability.pdfhttp://arxiv.org/abs/1111.1671v1http://arxiv.org/pdf/1111.1671v12011 - Bischoff, Tanimoto - Construction of wedge-local nets of observables through Longo-Witten endomorphisms II.pdf" "http://algebras.djvu1993 - Rehren - A new view of the Virasoro algebra.pdfhttp://renormalization.djvuhttp://arxiv.org/abs/1106.1138v1http://arxiv.org/pdf/1106.1138v12011 - Verch - Quantum Dirac Field on Moyal-Minkowski Spacetime - Illustrating Quantum Field Theory over Lorentzian Spectral Geometry.pdf" "http://arxiv.org/abs/hep-th/0202039v2http://arxiv.org/pdf/hep-th/0202039v210.1016/S0370-2693(02)01650-72002 - Langmann, Szabo - Duality in Scalar Field Theory on Noncommutative Phase Spaces.pdf/home/gandalf/Physik/Fachb\\\"ucher/Olver, Lozier, Boisvert, Clark - NIST handbook of mathematical functions.pdf" "http://arxiv.org/abs/1004.5261v3http://arxiv.org/pdf/1004.5261v310.3842/SIGMA.2010.073http://arxiv.org/abs/1106.6166v2http://arxiv.org/pdf/1106.6166v2http://arxiv.org/abs/hep-th/0005129v2http://arxiv.org/pdf/hep-th/0005129v210.1016/S0550-3213(00)00525-3http://arxiv.org/abs/hep-th/0206011v2" "http://arxiv.org/pdf/hep-th/0206011v210.1007/s10052-002-1018-7http://arxiv.org/abs/hep-th/0205269v2http://arxiv.org/pdf/hep-th/0205269v210.1007/s10052-002-1017-8http://arxiv.org/abs/0909.1389v1http://arxiv.org/pdf/0909.1389v1http://arxiv.org/abs/1104.3750v2" "http://arxiv.org/pdf/1104.3750v21971 - Herbst - One\u2010Particle Operators and Local Internal Symmetries.pdfhttp://arxiv.org/abs/1112.5785v1http://arxiv.org/pdf/1112.5785v12011 - Bros, Mund - Braid group statistics implies scattering in three-dimensional local quantum physics.pdf" "http://www.bibsonomy.org/bibtex/23f4ad4b7cec0eed95efd7a954c28dc0a/brouder1958 - Haag - Quantum field theories with composite particles and asymptotic conditions.pdf1961 - Ruelle - On the asymptotic condition in quantum field theory.pdf10.1016/0370-1573(84)90021-8" "1984 - Novikov, Shifman, Vainstein, Zakharov - Two-Dimensional Sigma Models: Modeling Nonperturbative Effects of Quantum Chromodynamics.pdfhttp://arxiv.org/abs/quant-ph/9601017v1http://arxiv.org/pdf/quant-ph/9601017v110.1007/BF02099630/home/gandalf/Physik/Fachb\\\"ucher/Roepstorff G. Path integral approach to quantum physics (Springer, 1994)(ISBN 0387552138)(K)(T)(399s)_PQft_.djvu" "1969 - Doplicher, Haag, Roberts - Fields, observables and gauge transformations II.pdf1971 - Doplicher, Haag, Roberst - Local observables and particle statistics I.pdf1974 - Doplicher, Haag, Roberts - Local observables and particle statistics II.pdfhttp://arxiv.org/abs/math-ph/0307048v1" "http://arxiv.org/pdf/math-ph/0307048v110.1007/s00023-004-0183-72004 - D'Antoni, Morsella, Verch - Scaling Algebras for Charged Fields and Short-Distance Analysis for Localizable and Topological Charges.pdf1968 - Doplicher, Kastler - Ergodic states in a non commutative ergodic theory.pdf" "1967 - Doplicher, Kadison, Kastler, Robinson - Asymptotically abelian systems.pdfhttp://groups.djvuhttp://theory.djvuhttp://dx.doi.org/10.1007/BF020976801990 - Doplicher, Roberts - Why there is a field algebra with a compact gauge group describing the superselection structure in particle physics.pdf" "http://link.aps.org/doi/10.1103/PhysRev.159.125110.1103/PhysRev.159.12511967 - Coleman, Mandula - All Possible Symmetries of the S-Matrix.pdfhttp://dx.doi.org/10.1007/BF0210180610.1007/BF021018061995 - Guido, Longo - An algebraic spin and statistics theorem.pdf" "2012 - Todorov - Quantization is a Mystery.pdfhttp://physics.djvu/home/gandalf/Physik/Fachb\\\"ucher/Cornwell - Group Theory in Physics Vol 3.pdfhttp://theory.djvu/home/gandalf/Physik/Fachb\\\"ucher/Thirring - A Course in Mathematical Physics 4: Quantum Mechanics of Large Systems.pdf" "http://arxiv.org/abs/1203.2058v1http://arxiv.org/pdf/1203.2058v12012 - Alazzawi - Deformations of Fermionic Quantum Field Theories and Integrable Models.pdf/home/gandalf/Physik/Artikelsammlung/2012 - Morfa-Morales - Deformations of Quantum Field Theories on Curved Spacetimes - PhD-Thesis.pdf" "http://arxiv.org/abs/1203.2705v1http://arxiv.org/pdf/1203.2705v12012 - Johnson - Algebras without Involution and Quantum Field Theories.pdf/home/gandalf/Physik/Lecture Notes/2009 - Waldmann - Vector-Valued Functions.pdfhttp://arxiv.org/abs/1203.3184v1http://arxiv.org/pdf/1203.3184v1" "http://arxiv.org/abs/1110.6164v3http://arxiv.org/pdf/1110.6164v3http://dx.doi.org/10.1007/BF0040097810.1007/BF004009781984 - Basart, Flato, Lichnerowicz, Sternheimer - Deformation theory applied to quantization and statistical mechanics.pdfhttp://dx.doi.org/10.1007/s002200050402" "10.1007/s0022000504021998 - Bordemann, Waldmann - Formal GNS Construction and States in Deformation Quantization.pdfhttp://arxiv.org/abs/math-ph/0405065v1http://arxiv.org/pdf/math-ph/0405065v110.1142/S0129055X050023762004 - Ali, Englis - Quantization Methods: A Guide for Physicists and Analysts.pdf" "http://www.sciencedirect.com/science/article/pii/037596017290240X10.1016/0375-9601(72)90240-X1971 - Stoler, Newman - Minimum Uncertainty and Density Matrices.pdfhttp://link.aps.org/doi/10.1103/PhysRevD.1.321710.1103/PhysRevD.1.32171970 - Stoler - Equivalence Classes of Minimum Uncertainty Packets.pdf" "1973 - Osterwalder - Euclidean Green's functions and Wightman distributions.pdfhttp://arxiv.org/abs/0905.4006v5http://arxiv.org/pdf/0905.4006v510.1007/s10701-010-9492-5http://arxiv.org/abs/math-ph/0504012v1http://arxiv.org/pdf/math-ph/0504012v12005 - Damek - Continuity of KMS states for quantum fields on manifolds.pdf" "http://arxiv.org/abs/quant-ph/0101061v1http://arxiv.org/pdf/quant-ph/0101061v12000 - Werner - Quantum Information Theory - an Invitation.pdf/home/gandalf/Physik/Fachb\\\"ucher/Audretsch - Verschr\\\"ankte Systeme.pdf1972 - Kastler, Mebkhout, Loupias, Michel - Central decomposition of invariant states applications to the groups of time translations and of Euclidean transformations in algebraic field theory.pdf" "1974 - Powers, Sakai - Existence of ground states and KMS states for approximately inner dynamics.pdf1977 - Araki, Kishimoto - Symmetry and equilibrium states.pdf/home/gandalf/Physik/Fachb\\\"ucher/Ruelle - Statistical mechanics.djvu1977 - Araki, Haag, Kastler, Takesaki - Extension of KMS States and Chemical Potential.pdf" "http://arxiv.org/abs/1204.5078v1http://arxiv.org/pdf/1204.5078v12012 - Hillier - On Super-KMS Functionals for Graded-Local Conformal Nets.pdfhttp://arxiv.org/abs/math-ph/0604044v2http://arxiv.org/pdf/math-ph/0604044v210.1007/s00220-006-0177-z2006 - Buchholz, Grundling - Algebraic Supersymmetry: A case study.pdf" "http://dx.doi.org/10.1007/BF0164541610.1007/BF016454161969 - Rocca, Sirugue, Testard - On a class of equilibrium states under the Kubo-Martin-Schwinger condition. I. Fermions .pdf1969 - Rocca, Sirugue, Testard - On a class of equilibrium states under the Kubo-Martin-Schwinger condition. II. Bosons .pdf" "/home/gandalf/Physik/Fachb\\\"ucher/Sunder - An Invitation to von Neumann Algebras.pdf"); static const char *digiplayLastAuthors("(ed)A.AarsethAarsethAarsethAarsethAarsethAarsethAarsethAarsethAarsethAarsethAbanesAbenhaimAbramsonAdamoAdamovichAdamsAdamsAdamsAdamsAdamsAdamsAedoAgababyanAgababyanAgahAhaAhaAhlersAhmadAhnAitkinAkaiAkessonAlbertAlbertAlbrechtslundAlbrechtslundAlexaAlexander" - "AlinierAliyaAllansonAllansonAllenAllenAlmeidaAltAltmanAltmanAltunbasAlvaresAlvisiAmoryAnacletoAnandAndersAndersonAndersonAndersonAndersonAndersonAndersonAndersonAndersonAndersonAndrewsAndrewsAngAngelidesAnnaAnnettaAnsteyAntleAoyamaApperleyApperleyApperleyApperley" - "ArbingerArbiserArchambaultArchambaultArendashArlenArmandAronssonAronssonArpanArsenaultArthurAsakuraAscioneAsgariAsgariAshtonAshtonAtkinsAtkinsAtkinsAtkinsAtkinsAtkinsAtkinsAtkinsAuAuberAugeraudAverchAveryAvetisovaAxelssonAylettBabaBabicBacklundBadiruBaerBaerg" - "BagnallBaileyBainbridgeBainbridgeBaldwinBallanceBallanceBallanceBallardBalsamBaltraBalzeraniBanksBanseBanthorpeBar-onBaranowskiBarberBarellaBarendregtBarnesBarnesBarrowcliffBarryBarthesBartholowBartleBartonBatemanBauckhageBauckhageBaumgardnerBaurBavelierBavelier" - "BavelierBayindir-UpmannBeanBeavisBebkoBechtoldtBeckerBeckerBeckerBeckerBeckerBeckerBehrenshausenBekebredeBekebredeBekkerBekkerBelavinaBellBenfordBenjaminBentonBenturBeresinBergerBergerBergmanBergmanBerkemeierBerlinerBernhardtBernsteinBerryBertrandBestBetzBevc" - "BialystokBidarraBiddleBiddleBiddleBischofBissellBissettBiswasBittantiBittantiBizzocchiBizzocchiBizzocchiBizzocchiBizzocchiBizzochiBjornstadBj\u00f6rkBj\u00f6rkBlackBlackBlackBlahutaBlanchfieldBlascovichBlashkiBleeckerBlighBlockBlowBlumbergBlumbergBlumbergBluntBlunt" - "BoalBodeBoehrerBoellstorffBoellstorffBogostBogostBogostBogostBogostBogostBojinBojinBojinBojinBoleskinaBonenfantBoningerBoningerBoonBoothBoothBoppBorderBorodziczBoronBossomaierBosworthBoudreauBousteadBouvardBovillBowersBowlesBowmanBoydBoydenBozionelosBozionelos" - "BozionelosBozionelosBradleyBradleyBranchBrancoBrandBrathwaiteBrazBreglerBreidenbachBrennerBreretonBrissBristowBrockBrodyBromBrownBrownBrownBrownBrownBruderBruillardBrunerBryantBryceBryceBryceBryceBryceBryceBryceBryceBrysonBuchananBuchmanBuchmanBuckalewBuckingham" - "BuckleyBuddBufanoBungayBurgessBurkBurkeBurkeBurkeBurnBurnsBuroBuroBurrillBurtBuschBuschBuseBushinskyBushmanBushmanBushmanBushmanBushnellButerButlandButlerButlerButlerBuusBuysByersByrneByronB\u00f6ttgerCaceresCagiltayCagiltayCagiltayCagiltayCaiCaldwellCallejaCalleja" - "CalvertCalvertCameronCameronCameronCammaranoCampbellCampbellCampionCannon-BowersCannon-BowersCaplanCaplovitzCappelCarbonaroCardadorCareyCariniCarleyCarlsonCarrCarrCarrCarrCarrCarrCarrollCarrollCarsonCarverCaseCaseyCassellCastronovaCastronovaCastronovaCastronova" - "CathcartCavanaughCavazzaCazenaveCerankoskyCeranogluChabayChadwickChaikaChaill\u00e9ChalabiChamberlainChambersChambersChampionChanChanChanChanChanChanChanChanChangChangChangChappellChappellChappellCharlesCharlesCharltonCharmanteCharskyChathamChaykaCheeCheeChenChen" - "ChenChenChenChenChenChenChenChenChenChenChenChenChengChengChengCheokCheokChiChiangChienChiharaChildren NowChiouChiouChisholmChiuChiuChoChoiChoiChoiChoverChristenChristiansenChuChuangChuangClancyClarkClarkClarkClarkeClaypoolClaypoolClaypoolClaysonCleareClements" - "ClippingerCloutierCoelhoCohenCohenCohenColditzColditzColditzColemanColleyCollinsColwellCombettoCompton-LillyConnollyConsalvoConsalvoConsalvoConsalvoConsalvoConsalvoConsalvoContractorContractorContractorContractorContractorContractorContractorContractorConway" - "CookCookCookeCoopermanCooperstockCopierCoppolaCorlissCorlissCorlissCorreiaCorrubleCorrubleCorsiniCostaCostelloCostikyanCostikyanCourtyCoviCowanCrawfordCrawfordCrawfordCrawfordCrawfordCrawfordCrawfordCrawfordCrawfordCrawfordCrawfordCressyCrickCrissmanCroganCrogan" - "CroganCrookallCruzCunninghamCunninghamCuretCurlewCutlerCzakDachseltDachseltDaleDancasterDanforthDantasDantasDantonDantonDarleyDavidsonDaviesDaviesDavisDavisDavisDavisDavisDavisDavisonDe FraineDe SchutterDeCostaDeFillippiDealDeckDekovenDelphinDelwicheDemartines" - "DemersDemetriouDemirchoglyanDenegri-KnottDeneveDengDengeri-KnottDerevenskyDeshpandeDeussenDeussenDevlinDiamondDiasDiazDibbellDickeyDickeyDickeyDickeyDieckmannDietzDietzDietzDillDillDillDillenbourgDittlerDixDixitDoddDodgsonDodsworthDollmanDominickDonchinDonelan" - "DonelanDonovanDoolittleDopfnerDormanDormansDourishDoveyDownesDownesDoyleDoyleDrachenDrakeDrettakisDriskellDrummondDryfhoutDuatoDuatoDucheneautDucrestDuffyDufnerDugganDuhDuretDurkinDurkinDuttonDu\u2019MontDwyerDyer-WithefordDziabenkoELSPAELSPAEarnshawEatonEbiEccles" - "EchtEddyEdelmannEdmondsEdmondsEdsonEdwardsEdwardsEffelsbergEffelsbergEgenfeldt-NielsenEgenfeldt-NielsenEggermontEhrenbergEikaasEisenackEkebladEklundEl-NasrEl-NasrEl-NasrEl-NasrEl-NasrEl-NasrEl-NasrEl-NasrEl-NasrEl-NasrEl-NasrEl-NasrEladhariEladhariElangoElias" - "EllisEllisEllisonEllisonEmbreyEmesEngeliEnglandEnglandEnochssonEpsteinErikssonErlebenErmiErnkvistEspinozaEspositoEspositoEssEsselmanEstevesEtterEverettEvertsenEvstigneevaFASFASFaberFaganFakotakisFarmerFaure-PragierFazekasFederoffFedorovFeenbergFeingoldFeixFeldman" - "FeldonFeldonFengFerdigFern\u00e1ndez-Manj\u00f3nFern\u00e1ndez-Manj\u00f3nFern\u00e1ndez-Manj\u00f3nFerrellFerrerFerriFerrisFeustelFicocelliFieldsFigaFinchFinkelsteinFinnFinnFinneyFirinciogullariFischerFischerFischettiFishFlaggFlahertyFlanaganFletcherFletcherFlyenFlynnFlynnFlynnFoley" - "FoleyFolmannFolmannForbisFordForemanForlinesFormentinForooshForrestForstenForteFosterFoutsFoutsFoxFoxFrancisFrascaFrascaFrascaFrascaFrascaFreemanFreemanFreyFreyFridayFriedmanFriedmanFriedmanFriesFrommeFrommeFronFukuiFullertonFullgrabeFungeFunkFunkFunkFunkFunk" - "FunkFurgerFurlongFurnessFurnkranzFyfeFyfeGDCGabbardGabrielGackenbachGagnonGaileyGajicGalGalGalantucciGalarneauGalarneauGalarneauGallegoGalliniGallowayGallowayGaoGarciaMolinaGardenforsGardnerGarreltsGarreltsGeakeGeeGeeGeeGeeGeeGeeGeeGellersenGeminoGenoveseGentile" - "GentileGentileGenvoGermannGermannGestwickiGettmanGhellalGhersiniGibbsGiddingsGieselmannGilbertGilbertGilbertGilbertGillesGillisGingoldGiovanettoGirouxGlassGlassnerGlaubkeGleanGlissovGlithoGodwinGoebelsGoebelsGogginGoldbergerGoldsmithGoldsteinGoldsteinGoldstein" - "GoldsteinGomesGonzalezGonzalezGoochGoodhewGoodithGoodmanGoodmanGoodmanGoodmanGorlatchGortmakerGorvitsGoslingGoslingGosneyGotestamGothGotsmanGottschalkGouadecGraceGraceGraceGraceGraceGrahamGrandclementGrandjeanGraner-RayGrangerGranthamGrascaGrazianoGrebnevaGreen" - "GreenfieldGreenfieldGreenfieldGreenfieldGreenfieldGreenhalghGreenhalghGreenleafGreenspanGreggGregoryGriffeyGriffinGriffithGriffithsGriffithsGriffithsGriffithsGriffithsGriffithsGriffithsGriffithsGriffithsGriffithsGriffithsGriffithsGriffithsGriffithsGriffiths" - "GriffithsGriffithsGriffithsGriffithsGriffithsGriffithsGriffithsGriggGrillGrimesGrimesGrimesGrimesGrimesGrimesGrimesGrimesGrimesGrimshawGrimshawGrimshawGrimshawGrimshawGrimshawGrimshawGrimshawGrimshawGrinterGrodalGroenGroenGrollmanGrondinGrosGrosGrossGrossGross" - "GrossGrossmanGrossmanGrundyGrutzmacherGr\u00fcnvogelGuGuGuardiniGuerriniGuerriniGuinsGunkelGunkelGunterGunterGuoGuoGurrGurtnerGutwinG\u00f3mez-Mart\u00ednHackettHaddonHaddonHaddonHaddonHadfieldHaenniHagiuHagstr\u00f6mHagstr\u00f6mHainesHaineyHainleyHakkinenHakonenHakonenHalbrecht" - "HalcombHallHallHallHallamHallamHallamHalloranHamalainenHamiltonHamilton-GiachritsisHanaire-BroutinHancockHanebeckHaningerHaningerHannaHanzlikHar-ElHaradaHardingHargreavesHarperHarperHarpoldHarriganHarrisHartHarteveldHarveyHasegawaHateckeHaussmannHawnHawthorn" - "HaydelHayesHayesHaylesHaylesHaynesHaynesHealdHeckerHeddenHeidenreichHeleHeli\u00f6Heli\u00f6HellisonHelmuthHemnesHendersonHendersonHendlerHennessyHermanHermkesHerreraHertzogHerzHerzHessHexmoorHianesHickeyHigginsHillHillHillingerHiltHiltonHirakiHiroseHjorthHoHoffman" - "HoffosHogleHoglundHolanHollandHollingsheadHolmquistHolmquistHolmstromHolzingerHoneyHooperHopsonHornHorneHorngHorrelHorshamHorswillHorswillHoshinoHoshinoHoskingHouHoutmanHoweHowellsHoweryHsiHsiaoHsiaoHsuHsuHsuHsuHsuHuHuHuangHuangHuangHuangHubbardHuberHuberHudiburg" - "HuesmannHuesmannHuffHuhtamoHuizingaHumbleHumphreysHumphreysHumphreysHuntHuntHuntemannHurleyHussHutchinsonHwangHymanIDCIDSAIbrahimIbrahimIbrahimIbrahimIbrahimIbrahimIchiharaIddingsIjzermanInceInoueInteractive Digital Software AssociationIoergerIonesIowa Intervention" - "IpIpIpIrvineIsbisterIsbisterIshiguroIshikawaItoItoItoIurgelIversenIvoryIvoryIvoryIwamuraIzmirliIzushiJJacksonJacksonJacobsJacobsJacobsenJacobsonJacobsonJahn-SudmannJahreJainJakobssonJamesJanszJanszJardinesJarzabekJayakanthanJayemanneJayemanneJehlenJellinekJen" - "JenkinsJenkinsJenkinsJenkinsJenkinsJenkinsJenkinsJenkinsJenkinsJenkinsJenningsJensenJensonJeongJeppesenJeppesenJesselJohannessonJohanssonJohnJohnsJohnsonJohnsonJohnsonJohnsonJohnsonJohnsonJohnsonJohnssonJohnstonJoinerJoinerJolivaltJoltonJonesJonesJonesJones" - "JonesJonesJonesJonesJonesJonesJordanJordanJorgensenJuhlinJuhlinJungJungJungJungJungJuulJuulJuulJuulJuulJuulJuulJuulJuulJuulJuulJuulJuulJuulJuulJ\u00e4rvinenJ\u00e4rvinenJ\u00e4rvinenJ\u00e4rvinenJ\u00e4rvinenJ\u00e4rvinenJ\u00f8rgensenJ\u00f8rgensenJ\u00f8rgensenJ\u00f8rgensenJ\u00f8rgensenJ\u00f8rgensen" - "J\u00f8rgensenJ\u00f8rgensenJ\u00f8rgensenJ\u00f8rgensenJ\u00f8rgensenKafaiKafaiKafaiKafaiKafaiKafaiKafaiKafaiKafaiKafaiKafaiKafaiKafaiKafaiKafaiKahnKaipainenKaipainenKaiserKaiserKallinenKalyanaramanKalyanaramanKantorKanungoKaplanKaplanKappesKaptelininKaptelininKapukuKapukuKarlsson-Bkarlsson" - "KasperekKassisKataokaKatchabawKatoKaufmanKaufmanKavakliKavakliKavakliKaviKayKayamaKayeKayeKayeKayeKayeKayeKearneyKearneyKearneyKearneyKearneyKeeganKeekerKeepersKeepersKeirKeithKellyKellyKeltikangas-J\u00e4rvinenKempfKennedyKennedyKennedyKennedyKennedyKentKentKerbs" - "KerrKerrKerrKerrKerrKerrKerrKerrKerrKerrKestnbaumKeumKeunekeKiernanKillenKillenKimKimKimKimKimKimKimKimKimKimKimKimKimKimKimKimataKinderKinderKinderKinderKingKingKingseppKinkleyKinnearKirklandKirkmanKirkpatrickKirks\u00e6therKirriemuirKirriemuirKirriemuirKirshKirsh" - "KitamotoKivikangasKizilkayaKlabbersKlabbersKlabbersKlabbersKlabbersKlassKlassKlassKlastrupKlastrupKlevjerKlevjerKlimmtKlimmtKlingemannKlionsKnaussKnightKnipphalsKnollKoKoch-MohrKohKolkoKolkoKolkoKomisarKonigsmannKonijnKonoKonradKonradKonzackKooKortKorvaKoskinen" - "KoufterosKozbeltKozmaKramerKratchmerKrautKrcmarKrcmarKreimeierKretchmerKroomanKrosnickKrugmanKrzywinskaKrzywinskaKrzywinskaKrzywinskaKrzywinskaKrzywinskaKrzywinskaKrzywinskaKuanKuhaneckKujanp\u00e4\u00e4KukafkaKullerKunichKuntscheKuoKuritaKurkovskyKushnerKustraKuwada" - "KyumaK\u00fccklichK\u00fccklichK\u00fccklichK\u00fccklichK\u00fccklichLaffLahiriLainemaLairdLairdLairdLambertLambertLamersLammesLammesLanderholmLaneyLangLangeLangeLange deLangloisLankfordLankoskiLankoskiLankoskiLapollaLarkinLarsenLarsonLarssonLastowkaLastowkaLastowkaLauLauLaurel" - "LauterenLautonLauwaertLavenderLavrenkoLawsonLawtonLazzaroLeafLeanLebeltelLebramLebramLeeLeeLeeLeeLeeLeeLeeLeeLeeLeeLeeLeeLeeLeggatLehdonvirtaLehdonvirtaLehmannLeiLeighLeiteLennerforsLennonLeonardLepperLesgoldLeungLevinLevinLevineLevineLevineLevineLevinsonLevy" - "LevyLewisLiLiLiLiLiangLichtiLichtmanLiebermanLiebermanLiebermanLiebermanLinLinLinLinLinLinLindbergLindbladLinderothLinderothLindleyLindleyLindleyLindleyLindleyLindleyLindleyLindleyLindleyLindleyLindleyLindlofLindmarkLindofLinebergerLintonenLinzieLitchinskyLittleton" - "LiuLiuLiuLiuLivingLlauradoLoLoftusLohrLoiphaLondonLongLonguetLossadaLouckyLoviscachLowoodLowoodLowoodLowoodLowoodLowoodLowoodLuLucasLudvigsenLuepkerLundeLuritLynchLynchLytleL\u00f6ckeltL\u00f6ckeltL\u00f8vlieMacCallum-StewartMacDormanMacGregorMacInnesMacKenzieMacedonia" - "MackeyMackeyMackieMacleodMacredieMaddenMaddenMadillMadillMaedaMageeMagerkoMagnussenMagosMaherMaherMahmoodMahoneyMakinouchiMalabyMalabyMaldonadoMaldonadoMallietMaloneMaloneMaloufManciniManninenManninenManninenManninenMannistoManosManovichManskeMansourMaragoudakis" - "MarckmannMarcusMarcusMargaroneMargaroneMaria Cutumisu Matthew McNaughtonMarkMarksMarksMarksonMarriottMarshMartensMarteyMartiMartinMartinMartinMartisMart\u00edn C\u00e1ceresMaryMasendorfMastinMasuchMasuchMasuchMatarazzoMateasMateasMatherMathiakMatsuishiMattanMatthews" - "MattilaMauveMauveMawdesleyMayMayerMayerMayerkressMayhornMayoMayraMayraMazalekMazorMcAlisterMcAllisterMcAllisterMcBroomMcCabeMcCormacMcCrackenMcDonaldMcDonnellMcDougallMcDowellMcEachenMcFarlaneMcFedriesMcGonigalMcIlvaneMcKeeMcKennaMcKnightMcMurrayMcNameeMcNeese" - "McShaffreyMcWilliamsMcowanMedia Analysis LaboratoryMedinaMedinaMeierMeisterMelloneMelotMemisogluMenacheMenchacaMendelsonMendizMennieMennieMergetMerolaMerrellMerzenichMeshefedjianMesserlyMetaxasMeyerMichaudMichodMiesenbergerMiettinenMiikkulainenMike Klaas Tristram Southey" - "MiklaucicMilamMilesMilesMillardMillerMillerMillerMillerMillerMillerMillerMillingtonMilnerMirrezaieMistreeMitchellMiyaokuMohanMokMollaMollerMollickMoll\u00e1Moll\u00e1MoltenbreyMonicaMonteiroMontfortMontolaMooreMooreMooreMooreMooreMooreMoosbruggerMorMoradMoranMordkoff" - "MorelMorenaMorenoMoriMoriMorieMorilloMorphettMorrisMorrisMorrisMorrisonMorrowMortensenMortensenMosleyMosleyMossMoulthropMountsMountsMtenziMuellerMuijsMuirMuirMuktiMullerMulliganMulveyMumtazMurakiMurariMurphieMurphyMurphyMurrayMurrayMyersMyersMyersMyersMyers" - "MyersMyllyahoM\u00e4yr\u00e4M\u00e4yr\u00e4M\u00e4yr\u00e4M\u00e4yr\u00e4M\u00fcllerNabiNackeNackeNackeNackeNackeNackrosNagenborgNahum-MoscovociNairNairNakamuraNamatameNandhakumarNapierNaquetNational School Board AssociationNattamNcubeNecessaryNecessaryNeitzelNelsonNelsonNeoNettNeuringerNewcombe" - "NewellNewmanNewmanNgNguyenNickellNickellNickellNickellNieborgNieborgNieborgNieborgNiedenthalNiedenthalNieuwdorpNikolovaNilsenNishitaNitscheNitscheNitscheNivensNiwaNolanNorcioNordliNordlingerNorrisNorthNortonNovakNowakNussbaumNussbaumNusserNymanNymanOConnorOakes" - "OalcleyObataOblingerOchoaOffirOhOhashiOkitaOkuzumiOlczakOlczakOldsOlearyOlsenOlsonOlsonOmernickOndrejkaOoiOpalachOrtizOsakaOsborneOsofskyOstriaOstromOuhyoungOvermarsOvermarsOwenOwensO\u2019BrienO\u2019DonnellO\u2019DonnellO\u2019FarrellO\u2019SullivanP. A.PacePaderewskiPagulayan" - "PaivaPaivaPaivaPajarolaPalazziPalmerPanPanayiotopoulosPanelasPapastergiouPapastergiouParaskevaPargmanParisParisiParkParkParkerParkerParkerParkerParkinParra-CabreraPasnikPastaPatePaternoPaulPaulPaulkPaunovPauschPavelPavlidisPaynePaynePearcePearcePearcePearce" - "PearcePearcePearcePecchinendaPeinadoPeitzPellegriniPelletierPelletierPelletierPendryPengPengPepinPepplerPerezPerlinPerlinPerlinPerronPerronPerryPescePeterPetersPetersonPetrzelaPhillipsPiasPicardPicardPickensPicqPinchbeckPinchbeckPiringerPittsPivecPlattenPleuss" - "PlusquellecPoberPolichPollardPollardPollmullerPollockPollockPonserrePoolePopkinPopkinPopkinPopkinPopkinPorembaPorterPorterPostigoPostigoPostmaPostmaPostmaPotamianosPottsPowellPowerPradaPrattPreecePrendergastPrenskyPrenskyPrenskyPricePriceProbstProffittProvenzo" - "ProvenzoPrzybylskiPuertaPurushotmaPuschQuagliaraQuandtQuinnQu\u00e9auQu\u00e9retteRaessensRaessensRailtonRaisamoRaisamoRaiterRaittRajagopalanRamalhoRandellRansdellRaoRaoRaoRaschkeRatyRatzonRauRaudenbushRavajaRayRaybournRaynauldReeley JrReeseReggiaRehakRehakReidReimann" - "ReinsteinReissRemagninoRenaudRenaudRenneckerRepenningReveillereRexfordReynoldsRhaitiRheingoldRhodesRhodyRhyneRhyneRiceRiceRichardRickardfigueroaRickwoodRiddochRiegerRimpelaRinerRinerRitterRitterfeldRizoRobertsRobertsRobertsonRobertsonRobertsonRobertsonRobinson" - "RobinsonRobleyRoccettiRocheleauRockwellRockwellRodastaRodastaRodrigoRodriguezRodriguez-HenriquezRodriguez-VivesRoemmichRogersRonan Boulic Branislav UlicnyRooneyRoperRoqueRoqueRoqueRosasRosasRosenbergRosenthalRossRossiRothermundRothkrantzRotterRouchierRoughgarden" - "RouseRouseRouseRoussakisRuanRubinRuddRuddockRudolphRuedaRujanRuncoRushRushkoffRushkoffRushkoffRushkoffRussellRutterRutterRutterRutterRutterRutterRutterRutterRutterRutterRutterRutterRutterRutterRyanRyanRyanRyanRybkaR\u00f6berSaariSabouretSachdevSacherSafaeiSagerer" - "SagererSaitoSakamotoSakataSaklofskeSalazarSalenSalenSalinasSalisburySalminenSalonius-PasternakSaltzmanSalvendySalvendySalverdaSamuelSanchezSandfordSandfordSangerSangsupawanichSantorumSargentSastronSatohSattarSavolainenSawyerSaxeSayirScaranoScatteiaScattergood" - "SchaeferSchaefferSchaefferSchaefferSchaefferSchaefferScharrerSchenkSchererSchimmingSchirraSchlackSchlechtweg-JahnSchleinerSchleinerSchleinerSchlossSchlosserSchmierbachSchmollSchneiderSchneiderSchottSchottSchottSchottSchottSchreierSchreinerSchulzkeSchulzrinne" - "SchulzrinneSchusterSchutSchutSchutSchwaigerSchwartzSchwingelerScottScottScullicaSefton-GreenSegalSegalSegersSegersSeidnerSeilerSeinoSeiterSellersSelnowSelnowSeneffSeneffSengersSennerstenSennerstenSeoSerpanosSestirSethiSgarbossaShadeShafferShafferShafferShapiro" - "ShapkinSharpSharpSharrittSharrittSharrittSharrittSharrittSharrittSharrittShawShawSheffSheldonSheldonSheldonSheltonShenShenShenShepherdSheppardShererShererShererSheridanShermanShernoffSherrySherryShewokisShewokisShifrinShihShihShihShimShinShinShinShinkleShintani" - "ShiuShmelyovShortShumShybaSicartSicartSicartSicartSicartSicartSicartSiediSiegelSifuentesSigfusdottirSignerSiitonenSikoraSilcoxSillsSilvaSilvaSilvernSilverstoneSimonSimonSimonSimonSimonSimonSimonSimonsSimonsSimpsonSinclairSingerSislerSislerSislerSislerSisler" - "SislerSislerSiuSkirrowSkoricSkrzypczykSkurzynskiSlaterSlavikSlavikSlimaneSlusallekSlusallekSmartSmithSmithSmithSmithSmithSmithSmithSmithSmithSmithSmithSmithSmithSmithSmithSmithSmithSmithSmythSnowSoetersSokolSoldatovaSolowaySolowaySorensenSorensenSotamaaSotamaa" - "SotamaaSotamaaSotamaaSotirchosSouvignierSpenceSpenceSpencerSpierlingSpittleSquireSquireSrivastavaSrivastavaSsuStablerStablesStahlStaldStallabrassStamatoudiStapletonStarbuckStarnSteeleSteimleSteinSteinbergSteinbergSteinbergSteinhardtSteinkuehlerSteinkuehlerSteinkuehler" - "SteinkuehlerSteinmullerStellmachStengerStephaniStephanidisSternSternSternSternSternSternStevensonStockbridgeStockburgerStockmannStoffregenStoneStoreyStorg\u00e5rdsStrangStrasburgerStrattonStrehovecStringerStrothotteStrouseStruckStudtStumpfSuSuddendorfSuddendorf" - "SudnowSugiyamaSuhSuhSullivanSullivanSullivanSulskySummersSunSunSunSunSuretteSuterSuthersSuthersSuttonSutton-SmithSuzorSwalwellSwalwellSwankSwannSwansonSweeneySwellerSykesSykesSykesSykesSzafronSzerSzulborskiTafallaTainioTakahashiTakahashiTakasakaTallalTamborini" - "TanTanTanakaTanenbaumTanenbaumTanenbaumTanisTantleff-DunnTapleyTashakkoriTavellaTavinorTaylorTaylorTaylorTaylorTaylorTaylorTaylorTaylorTaylorTaylorTaylorTaylorTejadaTellermanTenhulaTeoTerashimaTerranovaTettehThagardThaiThalemannThalmannThalmannTheintzTheodoropoulos" - "TheodoropoulosThies-BrandnerThilmanyThissenThobenTholanderThomasThomasThomasThomasThomasThomasThomasThomasThompsonThompsonThompsonThompsonThompsonThorntonThottanTinwellTirritoTobiasTobiasTobiasToetToftsTolesTolinoTomesTomlinsonToriyamaTorresTorres CanteroTosca" - "TracyTranTreiberTremblayTreniteTreniteTreniteTreniteTrentTrinkausTrivediTsaiTsaiTsai-FellanderTsunodaTsvetanovaTuckerTulupmanTurkleTurkleTurkleTurnerTurnerTurpeinenTurpeinenTuysuzTychsenTylerTylerTzengT\u00f6yliT\u00fcz\u00fcnUdokaUnderwoodUpitisUpitisUricchioV. Kloten" - "VaculikVaculikVaculikVaculikValdezValentineValkyrieValkyrieVan EckVan EenwykVan LooyVan LooyVan den BulckVan den BulckVan den BulckVanEenwykVandewaterVaradyVaseekaranVasilevskiiVasudevanVaupelVeltumVenousiouVenturiVerbraeckVerbruggeVerhoeffVerhoevenVeugenVeugen" - "VexoVezinaVicenteVidaverVigevanoVigevanoVikVillaniVincentVitakVockingVogelVogelVoigtVorrasiVosmeerVossWaddingtonWadeWadleyWaelbroeckWaernWagnerWagnerWakefieldWakkaryWalkerWalkerdineWalkerdineWallerWallichWallinWallsWalshWalshWalshWaltherWaltherWalzWalzWangWang" - "WangWangWangWardWardWardWardWardleWardrip-FruinWardynskiWarfWarkWarkWarnerWarnesWarrenWartellaWatersWatersWatersWatsonWatsonWattersWayWebbWebbWebbWebbWeberWeberWeberWeickerWeilWeilerWeimerWeinbrenWeinsteinWeirichWeisWeiseWeiseWeismanWeismanWeissWeissWeisscher" - "WelburyWeldonWelsbyWengWenliWenningerWernerWerningWestermannWestmancottWhalenWhalenWhangWheatleyWhinstonWhitcombWhiteWhiteWhiteWhitfordWhitingWhitingWiederholdWiegmanWijersWiklundWildeWilesWilhelmssonWilkinsWillemsWillemseWillettWilliamsWilliamsWilliamsWilliams" - "WilliamsWilliamsWilliamsWilliamsWilliamsWilliamsWilliamsWilliamsWilliamsWilliamsWilliamsWilliamsWilliamsWilliamsWilliamsWilliamsWilliamsWilliamsWilliamsWilliamsonWilliamsonWilliamsonWilloughbyWilsonWilsonWilsonWilsonWilsonWilsonWilsonWilsonWilsonWilsonWindisch" - "WingroveWinklerWinmanWinnicottWinogradWinterWinterWirenWitfeltWitherfordWixenWolfWolfWolfWolfWolfisWolflingWolfordWollmanWongWongWongWooWooWoodWoodsWoytiukWrightWrightWrightWuWuWuWuWuWyethWyethXiXiongXuXuYamadaYamaokaYanYanYanYanagiYangYangYangYeYeYeYeatesYee" - "YeeYeeYeeYeeYeeYehYenYokotaYoungYoungYoungYoungYoungYujiYulishZackariassonZackariassonZagalZamarianZammittoZarembaZeiglerZelinskyZengZhaiZhangZhangZhangZhaoZhengZhengZhouZhouZhouZhouZhukovZieglerZieglerZielinskiZimmermanZimmermanZimmermanZimmermanZimmermanZimmerman" - "ZindalZivkovicZoiaZollZootaZubekZumbachZupkoZydaZydade Antoniode Araujode Cardalhode Castellde Castellde Castellde Freitasde Grootde Laetde Meyerde Mulde Mulde PeuterdeHaandeHaandeHaanvan Hornvan Lentvan Lentvan Mechelenvan Oostendorpvan Schievan de Wallevan den Herik" - "von Bulow-Faerbervon Salisch"); + "AlinierAliyaAllansonAllansonAllenAllenAlmeidaAltAltmanAltmanAltunbasAlvaresAlvisiAmoryAnacletoAnandAndersAndersonAndersonAndersonAndersonAndersonAndersonAndersonAndersonAndersonAndrewsAndrewsAngAngelidesAnnaAnnettaAnsteyAntleAoyamaApperleyApperleyApperleyApperley" + "ArbingerArbiserArchambaultArchambaultArendashArlenArmandAronssonAronssonArpanArsenaultArthurAsakuraAscioneAsgariAsgariAshtonAshtonAtkinsAtkinsAtkinsAtkinsAtkinsAtkinsAtkinsAtkinsAuAuberAugeraudAverchAveryAvetisovaAxelssonAylettBabaBabicBacklundBadiruBaerBaerg" + "BagnallBaileyBainbridgeBainbridgeBaldwinBallanceBallanceBallanceBallardBalsamBaltraBalzeraniBanksBanseBanthorpeBar-onBaranowskiBarberBarellaBarendregtBarnesBarnesBarrowcliffBarryBarthesBartholowBartleBartonBatemanBauckhageBauckhageBaumgardnerBaurBavelierBavelier" + "BavelierBayindir-UpmannBeanBeavisBebkoBechtoldtBeckerBeckerBeckerBeckerBeckerBeckerBehrenshausenBekebredeBekebredeBekkerBekkerBelavinaBellBenfordBenjaminBentonBenturBeresinBergerBergerBergmanBergmanBerkemeierBerlinerBernhardtBernsteinBerryBertrandBestBetzBevc" + "BialystokBidarraBiddleBiddleBiddleBischofBissellBissettBiswasBittantiBittantiBizzocchiBizzocchiBizzocchiBizzocchiBizzocchiBizzochiBjornstadBj\u00f6rkBj\u00f6rkBlackBlackBlackBlahutaBlanchfieldBlascovichBlashkiBleeckerBlighBlockBlowBlumbergBlumbergBlumbergBluntBlunt" + "BoalBodeBoehrerBoellstorffBoellstorffBogostBogostBogostBogostBogostBogostBojinBojinBojinBojinBoleskinaBonenfantBoningerBoningerBoonBoothBoothBoppBorderBorodziczBoronBossomaierBosworthBoudreauBousteadBouvardBovillBowersBowlesBowmanBoydBoydenBozionelosBozionelos" + "BozionelosBozionelosBradleyBradleyBranchBrancoBrandBrathwaiteBrazBreglerBreidenbachBrennerBreretonBrissBristowBrockBrodyBromBrownBrownBrownBrownBrownBruderBruillardBrunerBryantBryceBryceBryceBryceBryceBryceBryceBryceBrysonBuchananBuchmanBuchmanBuckalewBuckingham" + "BuckleyBuddBufanoBungayBurgessBurkBurkeBurkeBurkeBurnBurnsBuroBuroBurrillBurtBuschBuschBuseBushinskyBushmanBushmanBushmanBushmanBushnellButerButlandButlerButlerButlerBuusBuysByersByrneByronB\u00f6ttgerCaceresCagiltayCagiltayCagiltayCagiltayCaiCaldwellCallejaCalleja" + "CalvertCalvertCameronCameronCameronCammaranoCampbellCampbellCampionCannon-BowersCannon-BowersCaplanCaplovitzCappelCarbonaroCardadorCareyCariniCarleyCarlsonCarrCarrCarrCarrCarrCarrCarrollCarrollCarsonCarverCaseCaseyCassellCastronovaCastronovaCastronovaCastronova" + "CathcartCavanaughCavazzaCazenaveCerankoskyCeranogluChabayChadwickChaikaChaill\u00e9ChalabiChamberlainChambersChambersChampionChanChanChanChanChanChanChanChanChangChangChangChappellChappellChappellCharlesCharlesCharltonCharmanteCharskyChathamChaykaCheeCheeChenChen" + "ChenChenChenChenChenChenChenChenChenChenChenChenChengChengChengCheokCheokChiChiangChienChiharaChildren NowChiouChiouChisholmChiuChiuChoChoiChoiChoiChoverChristenChristiansenChuChuangChuangClancyClarkClarkClarkClarkeClaypoolClaypoolClaypoolClaysonCleareClements" + "ClippingerCloutierCoelhoCohenCohenCohenColditzColditzColditzColemanColleyCollinsColwellCombettoCompton-LillyConnollyConsalvoConsalvoConsalvoConsalvoConsalvoConsalvoConsalvoContractorContractorContractorContractorContractorContractorContractorContractorConway" + "CookCookCookeCoopermanCooperstockCopierCoppolaCorlissCorlissCorlissCorreiaCorrubleCorrubleCorsiniCostaCostelloCostikyanCostikyanCourtyCoviCowanCrawfordCrawfordCrawfordCrawfordCrawfordCrawfordCrawfordCrawfordCrawfordCrawfordCrawfordCressyCrickCrissmanCroganCrogan" + "CroganCrookallCruzCunninghamCunninghamCuretCurlewCutlerCzakDachseltDachseltDaleDancasterDanforthDantasDantasDantonDantonDarleyDavidsonDaviesDaviesDavisDavisDavisDavisDavisDavisDavisonDe FraineDe SchutterDeCostaDeFillippiDealDeckDekovenDelphinDelwicheDemartines" + "DemersDemetriouDemirchoglyanDenegri-KnottDeneveDengDengeri-KnottDerevenskyDeshpandeDeussenDeussenDevlinDiamondDiasDiazDibbellDickeyDickeyDickeyDickeyDieckmannDietzDietzDietzDillDillDillDillenbourgDittlerDixDixitDoddDodgsonDodsworthDollmanDominickDonchinDonelan" + "DonelanDonovanDoolittleDopfnerDormanDormansDourishDoveyDownesDownesDoyleDoyleDrachenDrakeDrettakisDriskellDrummondDryfhoutDuatoDuatoDucheneautDucrestDuffyDufnerDugganDuhDuretDurkinDurkinDuttonDu\u2019MontDwyerDyer-WithefordDziabenkoELSPAELSPAEarnshawEatonEbiEccles" + "EchtEddyEdelmannEdmondsEdmondsEdsonEdwardsEdwardsEffelsbergEffelsbergEgenfeldt-NielsenEgenfeldt-NielsenEggermontEhrenbergEikaasEisenackEkebladEklundEl-NasrEl-NasrEl-NasrEl-NasrEl-NasrEl-NasrEl-NasrEl-NasrEl-NasrEl-NasrEl-NasrEl-NasrEladhariEladhariElangoElias" + "EllisEllisEllisonEllisonEmbreyEmesEngeliEnglandEnglandEnochssonEpsteinErikssonErlebenErmiErnkvistEspinozaEspositoEspositoEssEsselmanEstevesEtterEverettEvertsenEvstigneevaFASFASFaberFaganFakotakisFarmerFaure-PragierFazekasFederoffFedorovFeenbergFeingoldFeixFeldman" + "FeldonFeldonFengFerdigFern\u00e1ndez-Manj\u00f3nFern\u00e1ndez-Manj\u00f3nFern\u00e1ndez-Manj\u00f3nFerrellFerrerFerriFerrisFeustelFicocelliFieldsFigaFinchFinkelsteinFinnFinnFinneyFirinciogullariFischerFischerFischettiFishFlaggFlahertyFlanaganFletcherFletcherFlyenFlynnFlynnFlynnFoley" + "FoleyFolmannFolmannForbisFordForemanForlinesFormentinForooshForrestForstenForteFosterFoutsFoutsFoxFoxFrancisFrascaFrascaFrascaFrascaFrascaFreemanFreemanFreyFreyFridayFriedmanFriedmanFriedmanFriesFrommeFrommeFronFukuiFullertonFullgrabeFungeFunkFunkFunkFunkFunk" + "FunkFurgerFurlongFurnessFurnkranzFyfeFyfeGDCGabbardGabrielGackenbachGagnonGaileyGajicGalGalGalantucciGalarneauGalarneauGalarneauGallegoGalliniGallowayGallowayGaoGarciaMolinaGardenforsGardnerGarreltsGarreltsGeakeGeeGeeGeeGeeGeeGeeGeeGellersenGeminoGenoveseGentile" + "GentileGentileGenvoGermannGermannGestwickiGettmanGhellalGhersiniGibbsGiddingsGieselmannGilbertGilbertGilbertGilbertGillesGillisGingoldGiovanettoGirouxGlassGlassnerGlaubkeGleanGlissovGlithoGodwinGoebelsGoebelsGogginGoldbergerGoldsmithGoldsteinGoldsteinGoldstein" + "GoldsteinGomesGonzalezGonzalezGoochGoodhewGoodithGoodmanGoodmanGoodmanGoodmanGorlatchGortmakerGorvitsGoslingGoslingGosneyGotestamGothGotsmanGottschalkGouadecGraceGraceGraceGraceGraceGrahamGrandclementGrandjeanGraner-RayGrangerGranthamGrascaGrazianoGrebnevaGreen" + "GreenfieldGreenfieldGreenfieldGreenfieldGreenfieldGreenhalghGreenhalghGreenleafGreenspanGreggGregoryGriffeyGriffinGriffithGriffithsGriffithsGriffithsGriffithsGriffithsGriffithsGriffithsGriffithsGriffithsGriffithsGriffithsGriffithsGriffithsGriffithsGriffiths" + "GriffithsGriffithsGriffithsGriffithsGriffithsGriffithsGriffithsGriggGrillGrimesGrimesGrimesGrimesGrimesGrimesGrimesGrimesGrimesGrimshawGrimshawGrimshawGrimshawGrimshawGrimshawGrimshawGrimshawGrimshawGrinterGrodalGroenGroenGrollmanGrondinGrosGrosGrossGrossGross" + "GrossGrossmanGrossmanGrundyGrutzmacherGr\u00fcnvogelGuGuGuardiniGuerriniGuerriniGuinsGunkelGunkelGunterGunterGuoGuoGurrGurtnerGutwinG\u00f3mez-Mart\u00ednHackettHaddonHaddonHaddonHaddonHadfieldHaenniHagiuHagstr\u00f6mHagstr\u00f6mHainesHaineyHainleyHakkinenHakonenHakonenHalbrecht" + "HalcombHallHallHallHallamHallamHallamHalloranHamalainenHamiltonHamilton-GiachritsisHanaire-BroutinHancockHanebeckHaningerHaningerHannaHanzlikHar-ElHaradaHardingHargreavesHarperHarperHarpoldHarriganHarrisHartHarteveldHarveyHasegawaHateckeHaussmannHawnHawthorn" + "HaydelHayesHayesHaylesHaylesHaynesHaynesHealdHeckerHeddenHeidenreichHeleHeli\u00f6Heli\u00f6HellisonHelmuthHemnesHendersonHendersonHendlerHennessyHermanHermkesHerreraHertzogHerzHerzHessHexmoorHianesHickeyHigginsHillHillHillingerHiltHiltonHirakiHiroseHjorthHoHoffman" + "HoffosHogleHoglundHolanHollandHollingsheadHolmquistHolmquistHolmstromHolzingerHoneyHooperHopsonHornHorneHorngHorrelHorshamHorswillHorswillHoshinoHoshinoHoskingHouHoutmanHoweHowellsHoweryHsiHsiaoHsiaoHsuHsuHsuHsuHsuHuHuHuangHuangHuangHuangHubbardHuberHuberHudiburg" + "HuesmannHuesmannHuffHuhtamoHuizingaHumbleHumphreysHumphreysHumphreysHuntHuntHuntemannHurleyHussHutchinsonHwangHymanIDCIDSAIbrahimIbrahimIbrahimIbrahimIbrahimIbrahimIchiharaIddingsIjzermanInceInoueInteractive Digital Software AssociationIoergerIonesIowa Intervention" + "IpIpIpIrvineIsbisterIsbisterIshiguroIshikawaItoItoItoIurgelIversenIvoryIvoryIvoryIwamuraIzmirliIzushiJJacksonJacksonJacobsJacobsJacobsenJacobsonJacobsonJahn-SudmannJahreJainJakobssonJamesJanszJanszJardinesJarzabekJayakanthanJayemanneJayemanneJehlenJellinekJen" + "JenkinsJenkinsJenkinsJenkinsJenkinsJenkinsJenkinsJenkinsJenkinsJenkinsJenningsJensenJensonJeongJeppesenJeppesenJesselJohannessonJohanssonJohnJohnsJohnsonJohnsonJohnsonJohnsonJohnsonJohnsonJohnsonJohnssonJohnstonJoinerJoinerJolivaltJoltonJonesJonesJonesJones" + "JonesJonesJonesJonesJonesJonesJordanJordanJorgensenJuhlinJuhlinJungJungJungJungJungJuulJuulJuulJuulJuulJuulJuulJuulJuulJuulJuulJuulJuulJuulJuulJ\u00e4rvinenJ\u00e4rvinenJ\u00e4rvinenJ\u00e4rvinenJ\u00e4rvinenJ\u00e4rvinenJ\u00f8rgensenJ\u00f8rgensenJ\u00f8rgensenJ\u00f8rgensenJ\u00f8rgensenJ\u00f8rgensen" + "J\u00f8rgensenJ\u00f8rgensenJ\u00f8rgensenJ\u00f8rgensenJ\u00f8rgensenKafaiKafaiKafaiKafaiKafaiKafaiKafaiKafaiKafaiKafaiKafaiKafaiKafaiKafaiKafaiKahnKaipainenKaipainenKaiserKaiserKallinenKalyanaramanKalyanaramanKantorKanungoKaplanKaplanKappesKaptelininKaptelininKapukuKapukuKarlsson-Bkarlsson" + "KasperekKassisKataokaKatchabawKatoKaufmanKaufmanKavakliKavakliKavakliKaviKayKayamaKayeKayeKayeKayeKayeKayeKearneyKearneyKearneyKearneyKearneyKeeganKeekerKeepersKeepersKeirKeithKellyKellyKeltikangas-J\u00e4rvinenKempfKennedyKennedyKennedyKennedyKennedyKentKentKerbs" + "KerrKerrKerrKerrKerrKerrKerrKerrKerrKerrKestnbaumKeumKeunekeKiernanKillenKillenKimKimKimKimKimKimKimKimKimKimKimKimKimKimKimKimataKinderKinderKinderKinderKingKingKingseppKinkleyKinnearKirklandKirkmanKirkpatrickKirks\u00e6therKirriemuirKirriemuirKirriemuirKirshKirsh" + "KitamotoKivikangasKizilkayaKlabbersKlabbersKlabbersKlabbersKlabbersKlassKlassKlassKlastrupKlastrupKlevjerKlevjerKlimmtKlimmtKlingemannKlionsKnaussKnightKnipphalsKnollKoKoch-MohrKohKolkoKolkoKolkoKomisarKonigsmannKonijnKonoKonradKonradKonzackKooKortKorvaKoskinen" + "KoufterosKozbeltKozmaKramerKratchmerKrautKrcmarKrcmarKreimeierKretchmerKroomanKrosnickKrugmanKrzywinskaKrzywinskaKrzywinskaKrzywinskaKrzywinskaKrzywinskaKrzywinskaKrzywinskaKuanKuhaneckKujanp\u00e4\u00e4KukafkaKullerKunichKuntscheKuoKuritaKurkovskyKushnerKustraKuwada" + "KyumaK\u00fccklichK\u00fccklichK\u00fccklichK\u00fccklichK\u00fccklichLaffLahiriLainemaLairdLairdLairdLambertLambertLamersLammesLammesLanderholmLaneyLangLangeLangeLange deLangloisLankfordLankoskiLankoskiLankoskiLapollaLarkinLarsenLarsonLarssonLastowkaLastowkaLastowkaLauLauLaurel" + "LauterenLautonLauwaertLavenderLavrenkoLawsonLawtonLazzaroLeafLeanLebeltelLebramLebramLeeLeeLeeLeeLeeLeeLeeLeeLeeLeeLeeLeeLeeLeggatLehdonvirtaLehdonvirtaLehmannLeiLeighLeiteLennerforsLennonLeonardLepperLesgoldLeungLevinLevinLevineLevineLevineLevineLevinsonLevy" + "LevyLewisLiLiLiLiLiangLichtiLichtmanLiebermanLiebermanLiebermanLiebermanLinLinLinLinLinLinLindbergLindbladLinderothLinderothLindleyLindleyLindleyLindleyLindleyLindleyLindleyLindleyLindleyLindleyLindleyLindlofLindmarkLindofLinebergerLintonenLinzieLitchinskyLittleton" + "LiuLiuLiuLiuLivingLlauradoLoLoftusLohrLoiphaLondonLongLonguetLossadaLouckyLoviscachLowoodLowoodLowoodLowoodLowoodLowoodLowoodLuLucasLudvigsenLuepkerLundeLuritLynchLynchLytleL\u00f6ckeltL\u00f6ckeltL\u00f8vlieMacCallum-StewartMacDormanMacGregorMacInnesMacKenzieMacedonia" + "MackeyMackeyMackieMacleodMacredieMaddenMaddenMadillMadillMaedaMageeMagerkoMagnussenMagosMaherMaherMahmoodMahoneyMakinouchiMalabyMalabyMaldonadoMaldonadoMallietMaloneMaloneMaloufManciniManninenManninenManninenManninenMannistoManosManovichManskeMansourMaragoudakis" + "MarckmannMarcusMarcusMargaroneMargaroneMaria Cutumisu Matthew McNaughtonMarkMarksMarksMarksonMarriottMarshMartensMarteyMartiMartinMartinMartinMartisMart\u00edn C\u00e1ceresMaryMasendorfMastinMasuchMasuchMasuchMatarazzoMateasMateasMatherMathiakMatsuishiMattanMatthews" + "MattilaMauveMauveMawdesleyMayMayerMayerMayerkressMayhornMayoMayraMayraMazalekMazorMcAlisterMcAllisterMcAllisterMcBroomMcCabeMcCormacMcCrackenMcDonaldMcDonnellMcDougallMcDowellMcEachenMcFarlaneMcFedriesMcGonigalMcIlvaneMcKeeMcKennaMcKnightMcMurrayMcNameeMcNeese" + "McShaffreyMcWilliamsMcowanMedia Analysis LaboratoryMedinaMedinaMeierMeisterMelloneMelotMemisogluMenacheMenchacaMendelsonMendizMennieMennieMergetMerolaMerrellMerzenichMeshefedjianMesserlyMetaxasMeyerMichaudMichodMiesenbergerMiettinenMiikkulainenMike Klaas Tristram Southey" + "MiklaucicMilamMilesMilesMillardMillerMillerMillerMillerMillerMillerMillerMillingtonMilnerMirrezaieMistreeMitchellMiyaokuMohanMokMollaMollerMollickMoll\u00e1Moll\u00e1MoltenbreyMonicaMonteiroMontfortMontolaMooreMooreMooreMooreMooreMooreMoosbruggerMorMoradMoranMordkoff" + "MorelMorenaMorenoMoriMoriMorieMorilloMorphettMorrisMorrisMorrisMorrisonMorrowMortensenMortensenMosleyMosleyMossMoulthropMountsMountsMtenziMuellerMuijsMuirMuirMuktiMullerMulliganMulveyMumtazMurakiMurariMurphieMurphyMurphyMurrayMurrayMyersMyersMyersMyersMyers" + "MyersMyllyahoM\u00e4yr\u00e4M\u00e4yr\u00e4M\u00e4yr\u00e4M\u00e4yr\u00e4M\u00fcllerNabiNackeNackeNackeNackeNackeNackrosNagenborgNahum-MoscovociNairNairNakamuraNamatameNandhakumarNapierNaquetNational School Board AssociationNattamNcubeNecessaryNecessaryNeitzelNelsonNelsonNeoNettNeuringerNewcombe" + "NewellNewmanNewmanNgNguyenNickellNickellNickellNickellNieborgNieborgNieborgNieborgNiedenthalNiedenthalNieuwdorpNikolovaNilsenNishitaNitscheNitscheNitscheNivensNiwaNolanNorcioNordliNordlingerNorrisNorthNortonNovakNowakNussbaumNussbaumNusserNymanNymanOConnorOakes" + "OalcleyObataOblingerOchoaOffirOhOhashiOkitaOkuzumiOlczakOlczakOldsOlearyOlsenOlsonOlsonOmernickOndrejkaOoiOpalachOrtizOsakaOsborneOsofskyOstriaOstromOuhyoungOvermarsOvermarsOwenOwensO\u2019BrienO\u2019DonnellO\u2019DonnellO\u2019FarrellO\u2019SullivanP. A.PacePaderewskiPagulayan" + "PaivaPaivaPaivaPajarolaPalazziPalmerPanPanayiotopoulosPanelasPapastergiouPapastergiouParaskevaPargmanParisParisiParkParkParkerParkerParkerParkerParkinParra-CabreraPasnikPastaPatePaternoPaulPaulPaulkPaunovPauschPavelPavlidisPaynePaynePearcePearcePearcePearce" + "PearcePearcePearcePecchinendaPeinadoPeitzPellegriniPelletierPelletierPelletierPendryPengPengPepinPepplerPerezPerlinPerlinPerlinPerronPerronPerryPescePeterPetersPetersonPetrzelaPhillipsPiasPicardPicardPickensPicqPinchbeckPinchbeckPiringerPittsPivecPlattenPleuss" + "PlusquellecPoberPolichPollardPollardPollmullerPollockPollockPonserrePoolePopkinPopkinPopkinPopkinPopkinPorembaPorterPorterPostigoPostigoPostmaPostmaPostmaPotamianosPottsPowellPowerPradaPrattPreecePrendergastPrenskyPrenskyPrenskyPricePriceProbstProffittProvenzo" + "ProvenzoPrzybylskiPuertaPurushotmaPuschQuagliaraQuandtQuinnQu\u00e9auQu\u00e9retteRaessensRaessensRailtonRaisamoRaisamoRaiterRaittRajagopalanRamalhoRandellRansdellRaoRaoRaoRaschkeRatyRatzonRauRaudenbushRavajaRayRaybournRaynauldReeley JrReeseReggiaRehakRehakReidReimann" + "ReinsteinReissRemagninoRenaudRenaudRenneckerRepenningReveillereRexfordReynoldsRhaitiRheingoldRhodesRhodyRhyneRhyneRiceRiceRichardRickardfigueroaRickwoodRiddochRiegerRimpelaRinerRinerRitterRitterfeldRizoRobertsRobertsRobertsonRobertsonRobertsonRobertsonRobinson" + "RobinsonRobleyRoccettiRocheleauRockwellRockwellRodastaRodastaRodrigoRodriguezRodriguez-HenriquezRodriguez-VivesRoemmichRogersRonan Boulic Branislav UlicnyRooneyRoperRoqueRoqueRoqueRosasRosasRosenbergRosenthalRossRossiRothermundRothkrantzRotterRouchierRoughgarden" + "RouseRouseRouseRoussakisRuanRubinRuddRuddockRudolphRuedaRujanRuncoRushRushkoffRushkoffRushkoffRushkoffRussellRutterRutterRutterRutterRutterRutterRutterRutterRutterRutterRutterRutterRutterRutterRyanRyanRyanRyanRybkaR\u00f6berSaariSabouretSachdevSacherSafaeiSagerer" + "SagererSaitoSakamotoSakataSaklofskeSalazarSalenSalenSalinasSalisburySalminenSalonius-PasternakSaltzmanSalvendySalvendySalverdaSamuelSanchezSandfordSandfordSangerSangsupawanichSantorumSargentSastronSatohSattarSavolainenSawyerSaxeSayirScaranoScatteiaScattergood" + "SchaeferSchaefferSchaefferSchaefferSchaefferSchaefferScharrerSchenkSchererSchimmingSchirraSchlackSchlechtweg-JahnSchleinerSchleinerSchleinerSchlossSchlosserSchmierbachSchmollSchneiderSchneiderSchottSchottSchottSchottSchottSchreierSchreinerSchulzkeSchulzrinne" + "SchulzrinneSchusterSchutSchutSchutSchwaigerSchwartzSchwingelerScottScottScullicaSefton-GreenSegalSegalSegersSegersSeidnerSeilerSeinoSeiterSellersSelnowSelnowSeneffSeneffSengersSennerstenSennerstenSeoSerpanosSestirSethiSgarbossaShadeShafferShafferShafferShapiro" + "ShapkinSharpSharpSharrittSharrittSharrittSharrittSharrittSharrittSharrittShawShawSheffSheldonSheldonSheldonSheltonShenShenShenShepherdSheppardShererShererShererSheridanShermanShernoffSherrySherryShewokisShewokisShifrinShihShihShihShimShinShinShinShinkleShintani" + "ShiuShmelyovShortShumShybaSicartSicartSicartSicartSicartSicartSicartSiediSiegelSifuentesSigfusdottirSignerSiitonenSikoraSilcoxSillsSilvaSilvaSilvernSilverstoneSimonSimonSimonSimonSimonSimonSimonSimonsSimonsSimpsonSinclairSingerSislerSislerSislerSislerSisler" + "SislerSislerSiuSkirrowSkoricSkrzypczykSkurzynskiSlaterSlavikSlavikSlimaneSlusallekSlusallekSmartSmithSmithSmithSmithSmithSmithSmithSmithSmithSmithSmithSmithSmithSmithSmithSmithSmithSmithSmythSnowSoetersSokolSoldatovaSolowaySolowaySorensenSorensenSotamaaSotamaa" + "SotamaaSotamaaSotamaaSotirchosSouvignierSpenceSpenceSpencerSpierlingSpittleSquireSquireSrivastavaSrivastavaSsuStablerStablesStahlStaldStallabrassStamatoudiStapletonStarbuckStarnSteeleSteimleSteinSteinbergSteinbergSteinbergSteinhardtSteinkuehlerSteinkuehlerSteinkuehler" + "SteinkuehlerSteinmullerStellmachStengerStephaniStephanidisSternSternSternSternSternSternStevensonStockbridgeStockburgerStockmannStoffregenStoneStoreyStorg\u00e5rdsStrangStrasburgerStrattonStrehovecStringerStrothotteStrouseStruckStudtStumpfSuSuddendorfSuddendorf" + "SudnowSugiyamaSuhSuhSullivanSullivanSullivanSulskySummersSunSunSunSunSuretteSuterSuthersSuthersSuttonSutton-SmithSuzorSwalwellSwalwellSwankSwannSwansonSweeneySwellerSykesSykesSykesSykesSzafronSzerSzulborskiTafallaTainioTakahashiTakahashiTakasakaTallalTamborini" + "TanTanTanakaTanenbaumTanenbaumTanenbaumTanisTantleff-DunnTapleyTashakkoriTavellaTavinorTaylorTaylorTaylorTaylorTaylorTaylorTaylorTaylorTaylorTaylorTaylorTaylorTejadaTellermanTenhulaTeoTerashimaTerranovaTettehThagardThaiThalemannThalmannThalmannTheintzTheodoropoulos" + "TheodoropoulosThies-BrandnerThilmanyThissenThobenTholanderThomasThomasThomasThomasThomasThomasThomasThomasThompsonThompsonThompsonThompsonThompsonThorntonThottanTinwellTirritoTobiasTobiasTobiasToetToftsTolesTolinoTomesTomlinsonToriyamaTorresTorres CanteroTosca" + "TracyTranTreiberTremblayTreniteTreniteTreniteTreniteTrentTrinkausTrivediTsaiTsaiTsai-FellanderTsunodaTsvetanovaTuckerTulupmanTurkleTurkleTurkleTurnerTurnerTurpeinenTurpeinenTuysuzTychsenTylerTylerTzengT\u00f6yliT\u00fcz\u00fcnUdokaUnderwoodUpitisUpitisUricchioV. Kloten" + "VaculikVaculikVaculikVaculikValdezValentineValkyrieValkyrieVan EckVan EenwykVan LooyVan LooyVan den BulckVan den BulckVan den BulckVanEenwykVandewaterVaradyVaseekaranVasilevskiiVasudevanVaupelVeltumVenousiouVenturiVerbraeckVerbruggeVerhoeffVerhoevenVeugenVeugen" + "VexoVezinaVicenteVidaverVigevanoVigevanoVikVillaniVincentVitakVockingVogelVogelVoigtVorrasiVosmeerVossWaddingtonWadeWadleyWaelbroeckWaernWagnerWagnerWakefieldWakkaryWalkerWalkerdineWalkerdineWallerWallichWallinWallsWalshWalshWalshWaltherWaltherWalzWalzWangWang" + "WangWangWangWardWardWardWardWardleWardrip-FruinWardynskiWarfWarkWarkWarnerWarnesWarrenWartellaWatersWatersWatersWatsonWatsonWattersWayWebbWebbWebbWebbWeberWeberWeberWeickerWeilWeilerWeimerWeinbrenWeinsteinWeirichWeisWeiseWeiseWeismanWeismanWeissWeissWeisscher" + "WelburyWeldonWelsbyWengWenliWenningerWernerWerningWestermannWestmancottWhalenWhalenWhangWheatleyWhinstonWhitcombWhiteWhiteWhiteWhitfordWhitingWhitingWiederholdWiegmanWijersWiklundWildeWilesWilhelmssonWilkinsWillemsWillemseWillettWilliamsWilliamsWilliamsWilliams" + "WilliamsWilliamsWilliamsWilliamsWilliamsWilliamsWilliamsWilliamsWilliamsWilliamsWilliamsWilliamsWilliamsWilliamsWilliamsWilliamsWilliamsWilliamsWilliamsWilliamsonWilliamsonWilliamsonWilloughbyWilsonWilsonWilsonWilsonWilsonWilsonWilsonWilsonWilsonWilsonWindisch" + "WingroveWinklerWinmanWinnicottWinogradWinterWinterWirenWitfeltWitherfordWixenWolfWolfWolfWolfWolfisWolflingWolfordWollmanWongWongWongWooWooWoodWoodsWoytiukWrightWrightWrightWuWuWuWuWuWyethWyethXiXiongXuXuYamadaYamaokaYanYanYanYanagiYangYangYangYeYeYeYeatesYee" + "YeeYeeYeeYeeYeeYehYenYokotaYoungYoungYoungYoungYoungYujiYulishZackariassonZackariassonZagalZamarianZammittoZarembaZeiglerZelinskyZengZhaiZhangZhangZhangZhaoZhengZhengZhouZhouZhouZhouZhukovZieglerZieglerZielinskiZimmermanZimmermanZimmermanZimmermanZimmermanZimmerman" + "ZindalZivkovicZoiaZollZootaZubekZumbachZupkoZydaZydade Antoniode Araujode Cardalhode Castellde Castellde Castellde Freitasde Grootde Laetde Meyerde Mulde Mulde PeuterdeHaandeHaandeHaanvan Hornvan Lentvan Lentvan Mechelenvan Oostendorpvan Schievan de Wallevan den Herik" + "von Bulow-Faerbervon Salisch"); static const char *digiplayFilesUrlsDois("http://papers.ssrn.com/sol3/papers.cfm?abstract_id=1939241http://gac.sagepub.com/cgi/content/abstract/1555412010364983v110.1177/155541201036498310.1177/155541201036498110.1177/155541201036497710.1177/155541201036498010.1177/1555412010364979" "http://gac.sagepub.com/cgi/content/abstract/1555412010364982v110.1177/155541201036497810.1177/1461444810370949http://gac.sagepub.com/content/6/1/61.abstracthttp://gac.sagepub.com/content/6/1/3.abstracthttp://gac.sagepub.com/content/6/1/17.abstracthttp://gac.sagepub.com/content/6/1/83.abstract" "http://gac.sagepub.com/content/6/1/38.abstracthttp://gac.sagepub.com/content/6/5/414.abstracthttp://gac.sagepub.com/content/6/5/453.abstracthttp://gac.sagepub.com/content/6/5/395.abstract10.1177/1555412011402675http://gac.sagepub.com/content/6/5/429.abstract" "http://eprints.ecs.soton.ac.uk/21567/http://www.uic.edu/htbin/cgiwrap/bin/ojs/index.php/fm/article/view/3624/3006http://www.uic.edu/htbin/cgiwrap/bin/ojs/index.php/fm/article/view/3517/302010.1177/135485651039709610.1177/1354856510397111http://www.digitalcultureandeducation.com/volume-3/teaching-and-learning-english-through-digital-game-projects/" "http://arcticpenguin.files.wordpress.com/2011/01/pid1058556.pdfhttp://eprints.ecs.soton.ac.uk/21566/http://gac.sagepub.com/content/6/4/327.abstract10.1177/155541201039108910.1177/1555412010391091http://con.sagepub.com/content/17/3/287.abstract10.1177/1354856511407802" "http://www.vwobservatory.com/wp/?p=207http://con.sagepub.com/content/17/3/323.abstract10.1177/1354856511406472http://digitalcommons.bolton.ac.uk/gcct_journalspr/14/10.1016/j.chb.2010.10.018http://ecs.sagepub.com/content/14/3/299.abstract10.1177/1367549410393232" "http://www.amazon.co.uk/Game-Sound-Technology-Player-Interaction/dp/161692828X/ref=sr_1_1?ie=UTF8\\&qid=1294291419\\&sr=8-1http://con.sagepub.com/content/17/3/271.abstract10.1177/1354856511405766http://www.uapress.ua.edu/product/Gaming-Matters,5078.aspx10.1177/1555412010391090" "http://gac.sagepub.com/content/6/5/479.abstracthttp://gac.sagepub.com/content/6/4/291.abstract10.1177/1555412010391088http://gac.sagepub.com/content/6/4/373.abstract10.1177/1555412010391092http://triadicgamedesign.comhttp://www.vwobservatory.com/wp/?p=62http://con.sagepub.com/content/17/3/307.abstract" "10.1177/1354856511405758http://sri.sagepub.com/content/18/2/160.abstract10.1177/1553350610392064http://digitalcommons.bolton.ac.uk/cgi/viewcontent.cgi?article=1013\\&context=gcct_conferencepr10.1145/1859799.1859809http://con.sagepub.com/content/16/4/395.abstract" "http://gac.sagepub.com/cgi/content/abstract/1555412010361953v1http://gac.sagepub.com/cgi/content/abstract/1555412009359764v1http://gac.sagepub.com/cgi/content/abstract/1555412009360414v1http://gac.sagepub.com/cgi/content/abstract/1555412009359765v1http://gac.sagepub.com/cgi/content/abstract/1555412009360413v2" "http://gac.sagepub.com/cgi/content/abstract/1555412010364976v1http://sag.sagepub.com/cgi/content/abstract/41/3/316http://sag.sagepub.com/cgi/content/abstract/41/3/390http://sag.sagepub.com/cgi/content/abstract/41/3/341http://sag.sagepub.com/cgi/content/abstract/41/3/400" "http://sag.sagepub.com/cgi/content/abstract/41/3/360http://nms.sagepub.com/cgi/content/abstract/1461444809343563v1http://gac.sagepub.com/cgi/content/abstract/5/1/43http://gac.sagepub.com/cgi/content/abstract/5/1/116http://gac.sagepub.com/cgi/content/abstract/5/1/88" "http://gac.sagepub.com/cgi/content/abstract/5/1/64http://gac.sagepub.com/cgi/content/abstract/5/1/3http://gac.sagepub.com/cgi/content/abstract/5/1/23<Go to ISI>://000272728400001http://sag.sagepub.com/cgi/content/abstract/41/1/72http://sag.sagepub.com/cgi/content/abstract/41/1/51" "http://sag.sagepub.com/cgi/content/abstract/41/1/51http://sag.sagepub.com/cgi/content/abstract/41/1/94http://sag.sagepub.com/cgi/content/abstract/41/1/6http://sag.sagepub.com/cgi/content/abstract/41/1/20http://sag.sagepub.com/cgi/content/abstract/41/1/116http://pss.sagepub.com/content/21/4/463.full.pdf+html" "http://sag.sagepub.com/cgi/content/abstract/1046878110366070v1http://cpj.sagepub.com/cgi/content/abstract/49/4/337http://sag.sagepub.com/cgi/content/abstract/41/2/145http://sag.sagepub.com/cgi/content/abstract/41/2/238http://sag.sagepub.com/cgi/content/abstract/41/2/170" "http://sag.sagepub.com/cgi/content/abstract/41/2/260http://eprints.ecs.soton.ac.uk/21564/http://www.ludoscience.com/files/ressources/seriousgames_gaming20.pdfhttp://www.digra.org:8080/Plone/Members/malteelson/Too\\%20fast\\%20or\\%20too\\%20furious.pdf/viewhttp://sag.sagepub.com/content/41/5/743.abstract" "http://sag.sagepub.com/content/41/5/705.abstracthttp://sag.sagepub.com/content/41/5/724.abstracthttp://gac.sagepub.com/cgi/content/abstract/5/1/116http://gac.sagepub.com/cgi/content/abstract/5/1/88http://gac.sagepub.com/cgi/content/abstract/5/1/64http://gac.sagepub.com/cgi/content/abstract/5/1/3" "http://gac.sagepub.com/cgi/content/abstract/5/1/23http://eprints.ecs.soton.ac.uk/21669/http://portal.acm.org/ft_gateway.cfm?id=1753910\\&type=pdf\\&coll=GUIDE\\&dl=GUIDE\\&CFID=15151515\\&CFTOKEN=618461810.1145/1753846.1753910http://eprints.ecs.soton.ac.uk/21606/" "http://eprints.ecs.soton.ac.uk/21563/http://eprints.ecs.soton.ac.uk/21565/http://www.professorgrace.com/documents/ACHI_paper_Music_Box2_IEEE.pdf10.1109/ACHI.2010.18http://langcom.u-shizuoka-ken.ac.jp/dehaanhttp://www.situatedresearch.com/CogTech14-2-15-1.pdf" "http://llt.msu.edu/vol14num2/abstracts.html$\\#$dehaanreedkuwadahttp://www.glsconference.org/2010/program/event/199http://www.glsconference.org/2010/program/event/12910.1177/1087054709347205http://www.springerlink.com/openurl.asp?genre=article\\&id=doi:10.1007/s00530-009-0174-0" "10.1007/s00530-009-0174-0http://www.thechineseroom.co.uk/pinchbeckbuild.pdfhttp://hci.usask.ca/publications/view.php?id=188http://portal.acm.org/citation.cfm?doid=1743666.174369310.1145/1743666.1743693http://www.informaworld.com/smpp/content~db=all~content=a922546769~frm=abslink" "10.1080/14626261003654509https://www.taik.fi/kirjakauppa/product_info.php?cPath=23\\&products_id=163http://www.vwobservatory.com/wp/?p=110http://www.vwobservatory.com/wp/?p=143http://www.vwobservatory.com/wp/?p=14510.1177/1555412009354727http://www.eludamos.org/index.php/eludamos/article/view/vol4no2-13" "http://www.business-and-management.org/paper.php?id=48http://ssrn.com/paper=158007910.1177/1555412009354728http://telearn.noe-kaleidoscope.org/open-archive/browse?resource=223210.1177/1555412010377322http://crx.sagepub.com/cgi/content/abstract/37/2/25610.1177/0093650209356394" "http://www.ludoliteracy.com/http://www.vwobservatory.com/wp?p=124http://dx.doi.org/10.1016/j.intcom.2010.04.00510.1016/j.intcom.2010.04.005http://hci.usask.ca/publications/view.php?id=181http://www.vwobservatory.com/wp/?p=138http://nms.sagepub.com/cgi/content/abstract/12/2/235" "10.1177/146144480934226710.1177/0267323110373456http://www.vwobservatory.com//wp/?p=14010.1145/1785455.1785474http://digitalcommons.bolton.ac.uk/gcct_journalspr/510.3916/C34-2010-02-07http://www.vwobservatory.com/wp/?p=126http://hdl.handle.net/1956/4287http://www.lulu.com/content/8042752" "http://digitalcommons.bolton.ac.uk/gcct_journalspr/13/http://langcom.u-shizuoka-ken.ac.jp/dehaan-games-language-learninghttp://bit.ly/virtualjustice10.1177/1555412009354729http://hci.usask.ca/publications/view.php?id=18210.1177/1476718X09345406http://digitalcommons.bolton.ac.uk/gcct_conferencepr/10/" "http://digitalcommons.bolton.ac.uk/gcct_conferencepr/9<Go to ISI>://000269646100060<Go to ISI>://000270242200004<Go to ISI>://000269941100011<Go to ISI>://000268927700003<Go to ISI>://000270656000017<Go to ISI>://000270656000006<Go to ISI>://000270336800006" "<Go to ISI>://000269092500016<Go to ISI>://000270627500013<Go to ISI>://000269069200039<Go to ISI>://000269069200033<Go to ISI>://000271490000012<Go to ISI>://000269069200006<Go to ISI>://000269069200040<Go to ISI>://000271910900005<Go to ISI>://000270829000002" "<Go to ISI>://000272073800015<Go to ISI>://000270643200003<Go to ISI>://000271447500002<Go to ISI>://000266418500018<Go to ISI>://000265774700013<Go to ISI>://000271090500003<Go to ISI>://000264505700006<Go to ISI>://000264057100001<Go to ISI>://000263825500034" "<Go to ISI>://000263779000039<Go to ISI>://000266763100009http://nms.sagepub.com/cgi/content/abstract/11/4/509http://nms.sagepub.com/cgi/content/abstract/11/4/621<Go to ISI>://000266632400019<Go to ISI>://000268143600001<Go to ISI>://000270221200006<Go to ISI>://000266069600003" "<Go to ISI>://000267622000007http://digitalcommons.bolton.ac.uk/gcct_conferencepr/12/10.1007/978-3-642-02774-1_67<Go to ISI>://000269443300005<Go to ISI>://000267628500008<Go to ISI>://000268361100001<Go to ISI>://000267720400006<Go to ISI>://000262859000016" "<Go to ISI>://000262105300002<Go to ISI>://000264354600009<Go to ISI>://000263701900001<Go to ISI>://000264182300011<Go to ISI>://000263701900007<Go to ISI>://000261636800035<Go to ISI>://000261931400003<Go to ISI>://000263225300002<Go to ISI>://000263251900021" "<Go to ISI>://000264084900012<Go to ISI>://000271397300006http://escholarship.org/uc/item/6f49r74nhttp://sag.sagepub.com/cgi/content/abstract/40/6/752http://sag.sagepub.com/cgi/content/abstract/40/6/802http://vcu.sagepub.com/cgi/content/abstract/8/3/279<Go to ISI>://000271414100005" "http://nms.sagepub.com/cgi/content/abstract/11/5/685http://nms.sagepub.com/cgi/content/abstract/11/5/815<Go to ISI>://000268468800003<Go to ISI>://000268812600010<Go to ISI>://000266928500007<Go to ISI>://000268377000013<Go to ISI>://000266187700017http://digitalcommons.bolton.ac.uk/gcct_conferencepr/11/" "<Go to ISI>://000265384800008<Go to ISI>://000265087100020http://www.bth.se/fou/forskinfo.nsf/8ea71836fbadac09c125733300214ab9/4771af1c725ee1f4c12575c500452fa2!OpenDocumenthttp://www.jesperjuul.net/text/easydifficult/10.1145/1536513.1536539http://www2.fcsh.unl.pt/docentes/hbarbas/Textos/instory_euromedia_hb_nc_2009.pdf" "http://www.idunn.no/file/ci/38198929/nmt_2009_04_pdf.pdfhttp://www.bth.se/fou/forskinfo.nsf/8ea71836fbadac09c125733300214ab9/55cdcbe9e175f256c12575c50057d7a0!OpenDocumenthttp://eprints.ecs.soton.ac.uk/21569/http://www.gamecareerguide.com/features/791/educational_.php" "http://www.liebertonline.com/doi/abs/10.1089/cpb.2009.001310.1089/cpb.2009.0013http://dmitriwilliams.com/Profanity.pdf10.1089/cpb.2008.0337http://www.gamecareerguide.com/features/776/truly_independent_game_.phphttp://underthemask.wdfiles.com/local--files/key-note/Garry\\%20Crawford.doc" "http://www.liebertonline.com/doi/abs/10.1089/cpb.2008.027910.1089/cpb.2008.0279http://www.humankinetics.com/SSJ/viewarticle.cfm?jid=XbPvtE4KXgVfhGMTXgAubr2cXaKymypVXeJnfe2rXcEkqkyzX\\&aid=16853\\&site=XbPvtE4KXgVfhGMTXgAubr2cXaKymypVXeJnfe2rXcEkqkyzXhttp://eprints.ecs.soton.ac.uk/21562/" "http://filebox.vt.edu/users/jivory/IvoryKalyanaraman2009CommReportsContentAbstractionPerceivedEffects.pdf10.1080/08934210902798536http://www.digra.org/dl/db/09287.20429.pdfhttp://www.bth.se/fou/forskinfo.nsf/17e96a0dab8ab6a1c1257457004d59ab/e0a8cdd8cfc0c7e6c125762c005557c0!OpenDocument" "http://www.eludamos.org/index.php/eludamos/article/view/71http://mitpress.mit.edu/catalog/item/default.asp?ttype=2\\&tid=11549<Go to ISI>://000266435000016http://facsrv.cs.depaul.edu/~jzagal/Papers/Zagal_et_al_GameReviews.pdfhttp://www.vwobservatory.com/wp/?p=203" "http://www.mellenpress.com/mellenpress.cfm?bookid=7897\\&pc=9http://www.vwobservatory.com/wp/?p=272http://www.jesperjuul.net/text/fearoffailing/http://www.vwobservatory.com/wp/?p=149http://www.vwobservatory.com/wp/?p=156http://www.vwobservatory.com/wp/?p=194" "http://www.vwobservatory.com/wp?p=161http://gamingmoms.wordpress.com/publications/http://www.digitalislam.eu/article.do?articleId=2515http://www.igi-global.com/Bookstore/TitleDetails.aspx?TitleId=448\\&DetailsType=Description10.4018/978-1-60566-352-4http://mitpress.mit.edu/catalog/item/default.asp?ttype=2\\&tid=11696" "http://www.informaworld.com/smpp/content~content=a909230753~db=all~jumptype=rss10.1145/1581073.1581093http://www.vwobservatory.com/wp/?p=153<Go to ISI>://000268061500012http://www.cyberchimp.co.uk/research/testoftime.htmhttp://www3.interscience.wiley.com/journal/122598460/abstract?CRETRY=1\\&SRETRY=0" "http://religion.info/english/interviews/article_413.shtmlhttp://www.digitalislam.eu/article.do?articleId=2550http://www.vwobservatory.com/wp/?p=151http://www.vwobservatory.com/wp/?p=201<Go to ISI>://000269212200012<Go to ISI>://000272798500001<Go to ISI>://000266634600053" "<Go to ISI>://000272675500019<Go to ISI>://000264269800004<Go to ISI>://000265992600006<Go to ISI>://000267262400038<Go to ISI>://000270315200005<Go to ISI>://000265769200046<Go to ISI>://000265299800005<Go to ISI>://000264525500006<Go to ISI>://000269762300005" "<Go to ISI>://000270735700003<Go to ISI>://000271971800004<Go to ISI>://000269930300045<Go to ISI>://000269934000015<Go to ISI>://000269191600002<Go to ISI>://000267757200037<Go to ISI>://000264525500002<Go to ISI>://000264099000003<Go to ISI>://000269034700041" "<Go to ISI>://000265013400005<Go to ISI>://000270937300024<Go to ISI>://000264525500005<Go to ISI>://000269930300024<Go to ISI>://000263926900004<Go to ISI>://000269961200028<Go to ISI>://000269934000019<Go to ISI>://000267512400008<Go to ISI>://000272798300002" "<Go to ISI>://000265530200001<Go to ISI>://000265542001617<Go to ISI>://000267731500002<Go to ISI>://000269934000033<Go to ISI>://000270531200024<Go to ISI>://000267755700030<Go to ISI>://000269034700045<Go to ISI>://000269934000036<Go to ISI>://000271451400025" "<Go to ISI>://000272569400001<Go to ISI>://000265103800064<Go to ISI>://000270543400017<Go to ISI>://000271485600015<Go to ISI>://000265786800035<Go to ISI>://000271509500004<Go to ISI>://000269034700036<Go to ISI>://000269934000055<Go to ISI>://000267137900044" "<Go to ISI>://000269934000001<Go to ISI>://000269304600068<Go to ISI>://000272585900086<Go to ISI>://000270899000038<Go to ISI>://000267137900047<Go to ISI>://000271545700064<Go to ISI>://000264744600040<Go to ISI>://000271451400051<Go to ISI>://000269972300036" "<Go to ISI>://000269304600065<Go to ISI>://000272165400045<Go to ISI>://000271485600009<Go to ISI>://000271485600017<Go to ISI>://000270597500078<Go to ISI>://000269934000020<Go to ISI>://000272138200006<Go to ISI>://000269212200136<Go to ISI>://000269934000002" "<Go to ISI>://000263872300001<Go to ISI>://000265740800001<Go to ISI>://000270884800008<Go to ISI>://000270543400092<Go to ISI>://000265736800050<Go to ISI>://000264525500011<Go to ISI>://000270434800002<Go to ISI>://000268998000029<Go to ISI>://000265679301121" "<Go to ISI>://000269034700034<Go to ISI>://000264137700002<Go to ISI>://000267475900003<Go to ISI>://000270204900055<Go to ISI>://000269024500055<Go to ISI>://000269034000069<Go to ISI>://000271799300069<Go to ISI>://000268378000005<Go to ISI>://000269934000026" "<Go to ISI>://000270315200002<Go to ISI>://000264525500001<Go to ISI>://000271922200001<Go to ISI>://000264878000024<Go to ISI>://000269212200025<Go to ISI>://000269869600013<Go to ISI>://000269034000025<Go to ISI>://000269934000034<Go to ISI>://000266594800003" "<Go to ISI>://000269934000024<Go to ISI>://000263788400008http://digitalcommons.bolton.ac.uk/gcct_conferencepr/7http://digitalcommons.bolton.ac.uk/gcct_conferencepr/1<Go to ISI>://000264047400007<Go to ISI>://000270196700009<Go to ISI>://000259264307693<Go to ISI>://000268325500003" "<Go to ISI>://000262311900005<Go to ISI>://000268949900002http://gamingmoms.wordpress.com/publications/https://bora.uib.no/bitstream/1956/3895/1/jorgensen-researching\\%20players.pdfhttp://gamescience.bth.se/download/16/https://bora.uib.no/bitstream/1956/3896/3/KJorgensen-digicult.pdf" "http://www.hindawi.com/GetArticle.aspx?doi=10.1155/2008/72028010.1155/2008/720280http://www.springerlink.com/content/f3560134p7017541/10.1007/978-3-540-88322-7http://gamestudies.org/0802/articles/tylerhttp://journals.sfu.ca/loading/index.php/loading/article/view/51" "http://journals.sfu.ca/loading/index.php/loading/article/view/40http://journals.sfu.ca/loading/index.php/loading/article/view/50http://journals.sfu.ca/loading/index.php/loading/article/view/41http://eprints.ecs.soton.ac.uk/21568/http://journals.sfu.ca/loading/index.php/loading/article/view/43" "http://journals.sfu.ca/loading/index.php/loading/article/view/52http://journals.sfu.ca/loading/index.php/loading/article/view/39http://journals.sfu.ca/loading/index.php/loading/article/view/44http://journals.sfu.ca/loading/index.php/loading/article/view/46http://www.pewinternet.org/PPF/r/263/report_display.asp" "http://www.eludamos.org/index.php/eludamos/article/view/50http://uisk.jinonice.cuni.cz/sisler/publications/ACM_MindTrek_Europe_2045.pdfhttp://www.digitalislam.eu/article.do?articleId=170410.1177/1367549407088333http://www.informaworld.com/smpp/content~content=a789782126~db=all~order=page" "10.1080/17430430701823380http://portal.acm.org/citation.cfm?id=1496984.149699810.1145/1496984.1496998http://www.eludamos.org/index.php/eludamos/article/view/38/66http://knol.google.com/k/ravi-purushotma/10-key-principles-for-designing-video/27mkxqba7b13d/2http://gamestudies.org/0802/articles/jorgensen" "http://journals.sfu.ca/loading/index.php/loading/article/view/42http://judyrobertson.typepad.com/judy_robertson/files/RobertsonHowellsComputersEducationInPress.dochttp://www.palgrave-usa.com/catalog/product.aspx?isbn=0230545440http://digiplay.info/files/CoC.pdf" "http://uisk.jinonice.cuni.cz/sisler/publications/SislerBromEdutainment2008.pdf10.1007/978-3-540-69744-2_1http://www.islp.uni-koeln.de/venus/Material/Gloor_Schoder.pdfhttp://io-noi-aldo.sonance.net/gaming-2-0/Gaming_2_0_Thesis_lowres.pdfhttp://spnl.stanford.edu/publications/pdfs/Hoeft_2008JPsychiatrRes.pdf" "http://www.minkhollow.ca/KB/PhD/Thesis07/doku.php?id=thesis:mainhttp://www.ijclp.net/files/ijclp_web-doc_8-12-2008.pdfhttp://www.eludamos.org/index.php/eludamos/article/view/21http://www.liebertonline.com/doi/abs/10.1089/cpb.2007.0014http://opus.kobv.de/ubp/volltexte/2008/2455/pdf/digarec01_03.pdf" "http://www.uq.edu.au/emsah/mia/issues/mia126.html$\\#$grimeshttp://ja.games.free.fr/ludoscience/PDF/EtudeIDATE08_UK.pdfhttp://www.psychology.iastate.edu/~dgentile/pdfs/G2_Exemplary_Teachers_2007.pdfhttp://www.vwobservatory.com/wp/?p=205<Go to ISI>://000262977300014" "<Go to ISI>://000264585800012<Go to ISI>://000264585800004<Go to ISI>://000264585800009<Go to ISI>://000264585800010<Go to ISI>://000264099100001<Go to ISI>://000270113900005<Go to ISI>://000261729700004<Go to ISI>://000264099100004<Go to ISI>://000264585800005" "<Go to ISI>://000272333000021<Go to ISI>://000264585800001http://gac.sagepub.com/content/vol2/issue4/http://gac.sagepub.com/content/vol2/issue4/http://gac.sagepub.com/content/vol2/issue4/http://gac.sagepub.com/content/vol2/issue4/http://gac.sagepub.com/content/vol2/issue4/" "http://www.aera.net/meetings/Default.aspx?menu_id=24\\&id=2116http://gamescience.bth.se/download/14/http://synlab.gatech.edu/workshops/tangibleplay2007/files/IUI-workshop_TangiblePlay.pdfhttp://www.iitsec.orghttp://www.editlib.org/index.cfm/files/paper_24920.pdf?fuseaction=Reader.DownloadFullText\\&paper_id=24920" "http://www.iitsec.org/http://www.danpinchbeck.co.uk/ludicreality.pdfhttp://www.jesperjuul.net/text/acertainlevel/http://www.digra.org/dl/db/07311.06195.pdfhttp://www.salt.org/dc/washingtonP.asphttp://pkearney.radical.ac.nz/page2/page2.htmlhttp://www.holymeatballs.org/pdfs/P4K_Year_2-Report.pdf" "http://www.hindawi.com/GetPDF.aspx?doi=10.1155/2008/21678410.1155/2008/216784http://www.atypon-link.com/INT/doi/pdf/10.1386/nl.5.1.105_1http://www.jesperjuul.net/text/swapadjacent/10.1080/17493460601173366http://portal.acm.org/citation.cfm?id=1272535http://www.nsba.org/site/docs/41400/41340.pdf" "http://portal.acm.org/citation.cfm?id=1272516.1272537http://portal.acm.org/citation.cfm?id=1272516.1272538http://www.e-ucm.es/publications/articles.html10.1016/j.scico.2006.07.003http://langcom.u-shizuoka-ken.ac.jp/dehaanhttp://journals.sfu.ca/loading/index.php/loading/article/view/6/11" "http://journals.sfu.ca/loading/index.php/loading/article/view/23/9http://journals.sfu.ca/loading/index.php/loading/article/view/5/2http://journals.sfu.ca/loading/index.php/loading/article/view/8/10http://journals.sfu.ca/loading/index.php/loading/article/view/12/15" "http://journals.sfu.ca/loading/index.php/loading/article/view/24/23http://journals.sfu.ca/loading/index.php/loading/article/view/2/14http://journals.sfu.ca/loading/index.php/loading/article/view/19/16http://journals.sfu.ca/loading/index.php/loading/article/view/4/7" "http://journals.sfu.ca/loading/index.php/loading/article/view/1/1http://journals.sfu.ca/loading/index.php/loading/article/view/13/17http://journals.sfu.ca/loading/index.php/loading/article/view/15/4http://journals.sfu.ca/loading/index.php/loading/article/view/18/18" "http://journals.sfu.ca/loading/index.php/loading/article/view/10/21http://journals.sfu.ca/loading/index.php/loading/article/view/7/13http://journals.sfu.ca/loading/index.php/loading/article/view/17/20http://journals.sfu.ca/loading/index.php/loading/article/view/21/6" "http://journals.sfu.ca/loading/index.php/loading/article/view/20/3http://journals.sfu.ca/loading/index.php/loading/article/view/16/8http://journals.sfu.ca/loading/index.php/loading/article/view/3/19http://journals.sfu.ca/loading/index.php/loading/article/view/14/12" "http://journals.sfu.ca/loading/index.php/loading/article/view/11/5http://www.his.se/upload/19354/HS-\\%20IKI\\%20-TR-07-001.pdfhttp://sirfragalot.com/mainsite/phd.htmlhttp://www.bcs.rochester.edu/people/daphne/csg_ps_07.pdfhttp://gac.sagepub.com/cgi/content/abstract/2/2/95" "http://gac.sagepub.com/cgi/content/abstract/2/1/59http://www.sussex.ac.uk/Units/spru/events/ocs/viewpaper.php?id=237http://portal.acm.org/ft_gateway.cfm?id=1228234\\&type=pdfhttp://gac.sagepub.com/cgi/content/abstract/2/3/194http://web.cs.wpi.edu/~gogo/hive/papers/Rueda_VR2007.pdf" "http://mitpress.mit.edu/catalog/item/default.asp?ttype=2\\&tid=11153http://pkearney.radical.ac.nz/page2/page2.htmlhttp://hci.yonsei.ac.kr/paper/eng_journal/2007-CPB-Collaborate\\%20and\\%20Share.pdfhttp://www.lit-verlag.de/isbn/3-8258-0332-2http://www2.parc.com/spl/members/bobmoore/bio/CHI2007-706-Moore-etal-FINAL.pdf" "http://gac.sagepub.com/cgi/content/abstract/2/3/236http://www.digitalislam.eu/http://gac.sagepub.com/cgi/content/abstract/2/2/114http://www2.parc.com/spl/members/bobmoore/research/DoingVirtuallyNothing.pdfhttp://www.cs.wpi.edu/~claypool/papers/rez/paper.pdf" "http://julian.togelius.com/Agapitos2007Evolving.pdfhttp://www.lingualgamers.com/thesis/http://web.cs.wpi.edu/~claypool/papers/fr/fulltext.pdfhttp://gac.sagepub.com/cgi/content/abstract/2/1/3http://www.futureofthebook.org/mckenziewark/gamertheory2.0/http://tampub.uta.fi/index.php?tiedot=202" "http://gac.sagepub.com/cgi/content/abstract/2/3/175http://gac.sagepub.com/cgi/content/abstract/2/1/23http://www.getrichgaming.com/http://www.techlearning.com/story/showArticle.php?articleID=196604665http://research.microsoft.com/users/kunzhou/publications/mesh-animation.pdf" "http://www.popsci.com/popsci/technology/d997f0209dd15110vgnvcm1000004eecbccdrcrd.htmlhttp://portal.acm.org/ft_gateway.cfm?id=1255106\\&type=pdf\\&coll=GUIDE\\&dl=\\&CFID=15151515\\&CFTOKEN=6184618http://www.psychology.iastate.edu/FACULTY/dgentile/pdfs/Rosser\\%20et\\%20al\\%20(2007).pdf" "http://www.futurelab.org.uk/resources/documents/external_publications/Teaching_with_Games_IJATL.pdfhttp://telearn.noe-kaleidoscope.org/open-archive/browse?resource=530http://www.eludamos.org/index.php/eludamos/article/view/4http://www.futurelab.org.uk/resources/publications_reports_articles/web_articles/Web_Article794" "http://www.1up.com/do/feature?cId=3163635http://portal.acm.org/ft_gateway.cfm?id=1255097\\&type=pdf\\&coll=GUIDE\\&dl=\\&CFID=15151515\\&CFTOKEN=6184618http://portal.acm.org/ft_gateway.cfm?id=1255073\\&type=pdf\\&coll=GUIDE\\&dl=\\&CFID=15151515\\&CFTOKEN=6184618http://www.merl.com/papers/docs/TR2006-009.pdf" "http://cmsprod.bgu.ac.il/NR/rdonlyres/34396BDB-6C0E-4931-A077-697451885123/38246/MicrosoftWordtom.pdfhttp://www.cigital.com/papers/download/attack-trends-EOG.pdfhttp://www.cs.unibo.it/~cpalazzi/papers/Palazzi-OOS.pdfhttp://portal.acm.org/ft_gateway.cfm?id=1255059\\&type=pdf\\&coll=GUIDE\\&dl=\\&CFID=15151515\\&CFTOKEN=6184618" "http://mitpress.mit.edu/catalog/item/default.asp?ttype=2\\&tid=11152http://www.digra.org/dl/db/07312.21221.pdfhttp://gac.sagepub.com/cgi/content/abstract/2/2/149http://jonassmith.dk/weblog/players-realm/http://portal.acm.org/ft_gateway.cfm?id=1255140\\&type=pdf\\&coll=GUIDE\\&dl=\\&CFID=15151515\\&CFTOKEN=6184618" "http://portal.acm.org/ft_gateway.cfm?id=1255051\\&type=pdf\\&coll=GUIDE\\&dl=\\&CFID=15151515\\&CFTOKEN=6184618http://gac.sagepub.com/cgi/content/abstract/2/1/49http://lisa.socialstudiesgames.com/productive_play.pdfhttp://www.cs.cmu.edu/~kraut/RKraut.site.files/articles/seay07-GamePlay\\&PsychologicalWellbeing.pdf" "http://ro.uow.edu.au/cgi/viewcontent.cgi?article=1500\\&context=infopapershttp://www.cs.cornell.edu/johannes/papers/2007/2007-SIGMOD-Games.pdfhttp://portal.acm.org/ft_gateway.cfm?id=1272399\\&type=pdf\\&coll=GUIDE\\&dl=ACM\\&CFID=15151515\\&CFTOKEN=6184618http://portal.acm.org/ft_gateway.cfm?id=1255057\\&type=pdf\\&coll=GUIDE\\&dl=\\&CFID=15151515\\&CFTOKEN=6184618" "http://www.cs.bath.ac.uk/~cspmaw/ieeesmcb.pdfhttp://www.spacetimeplay.org/http://uisk.jinonice.cuni.cz/sisler/publications/Story_Manager_Europe2045_Petri_Nets.pdf10.1007/978-3-540-77039-8http://gac.sagepub.com/cgi/content/abstract/2/3/213http://www.ee.surrey.ac.uk/CVSSP/VMRG/Publications/starck07cga.pdf" "http://gac.sagepub.com/cgi/content/abstract/2/3/261http://synlab.gatech.edu/papers/mazalek_ace2007_tui3d.pdfhttp://learningfromsocialworlds.wordpress.com/interview-teaching-machinima-at-schome-parkhttp://www.escapistmagazine.com/articles/view/issues/issue_121/2575-Ten-Myths-About-Serious-Games" "http://www.mcfarlandpub.com/book-2.php?isbn=0-7864-2832-5http://gac.sagepub.com/cgi/content/abstract/2/2/134http://ace2007.org/download/p307-bardzell.pdfhttp://portal.acm.org/ft_gateway.cfm?id=1255052\\&type=pdf\\&coll=GUIDE\\&dl=\\&CFID=15151515\\&CFTOKEN=6184618" "http://www.cs.uta.fi/~tarja/irisWG/cr1042165089399.pdfhttp://www.sk.tsukuba.ac.jp/SSM/libraries/pdf1051/1097.pdfhttp://www.sellmorevideogames.com/VideogameMarketingAndPR.pdfhttp://www.gamestyleguide.com/http://www.gamestyleguide.com/http://www.press.uchicago.edu/cgi-bin/hfs.cgi/00/226001.ctl" "http://www.youtube.com/view_play_list?p=77B70E50BFC0A98Chttp://www.jesperjuul.net/text/withoutagoal/http://www.eludamos.org/index.php/eludamos/article/view/7<Go to ISI>://000272330700011http://www.eludamos.org/index.php/eludamos/article/view/2/1http://www.eludamos.org/index.php/eludamos/article/view/9" "http://www.eludamos.org/index.php/eludamos/article/view/3<Go to ISI>://000272219300037http://www.eludamos.org/index.php/eludamos/article/view/8<Go to ISI>://00026712330009610.1177/104687810628794410.1177/1046878106287943http://ejov.org/Projects/408/ICE\\%202006/Training,\\%20Eductaion\\%20and\\%20Legal\\%20Issues/p49-47.pdf" "http://www.fas.org/gamesummit/www.comp.dit.ie/bduggan/Research/Using\\%20the\\%20Source\\%20engine\\%20for\\%20Serious\\%20Games.pdfhttp://journal.fibreculture.org/issue8/issue8_chan.htmlhttp://journal.fibreculture.org/issue8/issue8_andrews.htmlhttp://journal.fibreculture.org/issue8/issue8_hjorth.html" "http://www.fas.org/gamesummit/Resources/RD\\%20Games.pdfhttp://gac.sagepub.com/cgi/content/abstract/1/4/362http://www.educause.edu/apps/eq/eqm06/eqm0633.asphttp://www.futurelab.org.uk/projects/teaching_with_games/research/final_reporthttp://www.unaustralia.com/electronicpdf/Unapperley.pdf" "http://www.units.muohio.edu/codeconference/papers/papers/VG\\%20and\\%20project\\%20management\\%20\\%5BMcDaniel\\%20et\\%20al\\%5D.pdfhttp://www-cdn.educause.edu/ir/library/pdf/ELI3004.pdfhttp://www.zgdv.de/TIDSE06/10.1207/s15327825mcs0901_6http://www.uvka.de/univerlag/volltexte/2006/144/" "http://gac.sagepub.com/cgi/content/abstract/1/1/89http://www.cs.unimaas.nl/p.spronck/Pubs/DynamicScripting.pdfhttp://www.ofcom.org.uk/research/tv/reports/videoregulation/http://vrlab.epfl.ch/Publications/pdf/Salamin_Thalmann_Vexo_VRST_06.pdfhttp://gac.sagepub.com/cgi/content/abstract/1/1/62" "http://gac.sagepub.com/cgi/content/abstract/1/4/383http://gac.sagepub.com/cgi/content/abstract/1/4/281http://digiplay.ino/UDG/http://journal.fibreculture.org/issue8/issue8_taylor.htmlhttp://doi.ieeecomputersociety.org/10.1109/ICPR.2006.370http://www-static.cc.gatech.edu/~jp/Papers/Zagal\\%20et\\%20al\\%20-\\%20Collaborative\\%20Games\\%20-\\%20Lessons\\%20learned\\%20from\\%20boardgames.pdf" "http://digiplay.info/UDGhttp://gac.sagepub.com/cgi/content/abstract/1/1/41http://www.informaworld.com/smpp/content~content=a755296191~db=all~order=page10.1080/13691180600858721http://digiplay.info/UDGhttp://ajp.psychiatryonline.org/cgi/content/full/163/3/381" "http://connect.educause.edu/library/abstract/DigitalGameBasedLear/40614http://digiplay.info/UDGhttp://digiplay.ino/UDG/http://digiplay.info/UDGhttp://digiplay.info/UDGhttp://www.digitalislam.eu/article.do?articleId=1419http://www.peostri.army.mil/CTO/FILES/DisruptivePotential.pdf" "http://gac.sagepub.com/cgi/content/abstract/1/4/318http://www.nda.ac.jp/~nama/Top/Papers/research-namatame/07-01.pdfhttp://digiplay.info/UDGhttp://pediatrics.aappublications.org/cgi/content/full/118/6/e1831http://digiplay.info/UDGhttp://gac.sagepub.com/cgi/content/abstract/1/1/111" "http://gac.sagepub.com/cgi/content/abstract/1/4/338http://mcgraw-hill.co.uk/html/033521357X.htmlhttp://www.ctonet.org/documents/SmithR_GameImpactTheory.pdfhttp://gac.sagepub.com/cgi/content/abstract/1/1/116http://ihobo.com/WP/http://www.sfu.ca/cprost/docs/06Chee.pdf" "http://www.gamingcultures.comhttp://gac.sagepub.com/cgi/content/abstract/1/1/5http://www.culture-communication.unimelb.edu.au/research-students/tom-apperley.pdfhttp://gac.sagepub.comhttp://dare.ubvu.vu.nl/bitstream/1871/11014/2/HereBeDragonsbw.pdfhttp://www.atypon-link.com/INT/doi/abs/10.1386/jmpr.7.1.25/1" "http://digiplay.info/UDGhttp://gac.sagepub.com/cgi/content/abstract/1/3/231http://web.cs.wpi.edu/~claypool/iqp/fr-rez/paper.pdfhttp://booksonline.iospress.com/Content/View.aspx?piid=2408http://faculty-gsb.stanford.edu/nair/PDF-s/VGames_Dynamic_2006.pdfhttp://www.digitalislam.eu/article.do?articleId=1418" "http://userinnovation.mit.edu/papers/SIMS_R\\&D_final.pdfhttp://telearn.noe-kaleidoscope.org/open-archive/browse?resource=257http://digiplay.ino/UDG/http://gac.sagepub.com/cgi/content/abstract/1/1/29https://www.sensepublishers.com/product_info.php?products_id=202\\&osCsid=1a7" "http://www.lulu.com/content/376076http://doi.acm.org/10.1145/1142405.1142433http://gac.sagepub.com/cgi/content/abstract/1/1/103http://www1.umn.edu/umnnews/Feature_Stories/22Neverwinter_Nights22_in_the_classroom.htmlhttp://nms.sagepub.com/content/8/6/969.full.pdf" "http://papers.ssrn.com/sol3/papers.cfm?abstract_id=946987http://www.sciencedirect.com/science/article/B6V8J-4KWK0VK-1/2/29dd929f136a00e9c5cfefba1858d21chttp://jonassmith.dk/weblog/phd-plans-and-purposes/http://digiplay.info/UDGhttp://cee.nd.edu/news/documents/PracticingGoodnessReportFINAL.pdf" "http://doi.ieeecomputersociety.org/10.1109/ITNG.2006.110http://www.stockburger.co.uk/research/abstract.htmlhttp://www.digitalislam.eu/article.do?articleId=1423http://gac.sagepub.com/cgi/content/abstract/1/2/163http://www.charlesriver.com/Books/BookDetail.aspx?productID=124865" "http://eprints.nuim.ie/archive/00000436/01/GTAKerr_final06.pdfhttp://www.leaonline.com/doi/abs/10.1207/s15327825mcs0901_6http://www.rickblunt.com/phd/blunt_richard_dissertation_final.pdfhttp://www.ict.usc.edu/~leuski/publications/papers/fp674-leuski-cikm.pdf" "http://digiplay.info/UDGhttp://digiplay.ino/UDG/http://mitpress.mit.edu/catalog/item/default.asp?ttype=2\\&tid=10917http://www.uib.no/people/smkrk/docs/RuneKlevjer_What\\%20is\\%20the\\%20Avatar_finalprint.pdfhttp://gamestudies.org/0701/articles/malliethttp://gamestudies.org/0601/articles/montfort" "http://gamestudies.org/0701/articles/elnasr_niedenthal_knez_almeida_zupkohttp://gamestudies.org/0601/articles/consalvo_duttonhttp://gac.sagepub.com/cgi/content/abstract/1/1/78http://gamestudies.org/0601/articles/heide_smithhttp://gac.sagepub.com/cgi/content/abstract/1/1/68" "http://gac.sagepub.com/cgi/content/abstract/1/1/25http://gac.sagepub.com/cgi/content/abstract/1/3/252http://gac.sagepub.com/cgi/content/abstract/1/3/199http://journal.fibreculture.org/issue8/issue8_nieborg.htmlhttp://gamestudies.org/0701/articles/wallinhttp://gamestudies.org/0701/articles/simons" "http://gac.sagepub.com/cgi/content/abstract/1/1/83http://gac.sagepub.com/cgi/content/abstract/1/2/141http://journal.fibreculture.org/issue8/issue8_walther.htmlhttp://doi.acm.org/10.1145/1125451.1125774http://gamestudies.org/0601/articles/rodrigeshttp://gac.sagepub.com/cgi/content/abstract/1/1/52" "http://gac.sagepub.com/cgi/content/abstract/1/1/36http://gac.sagepub.com/cgi/content/abstract/1/1/119http://gac.sagepub.com/cgi/content/abstract/1/1/17http://gac.sagepub.com/cgi/content/abstract/1/1/72http://gac.sagepub.com/cgi/content/abstract/1/3/214http://gamestudies.org/0601/articles/dormans" "http://gamestudies.org/0701/articles/harpoldhttp://gamestudies.org/0601/articles/paulkhttp://gac.sagepub.com/cgi/content/abstract/1/1/47http://gamestudies.org/0601/articles/nghttp://gamestudies.org/0701/articles/smithhttp://gac.sagepub.com/cgi/content/abstract/1/2/127" "http://gac.sagepub.com/cgi/content/abstract/1/1/97http://gac.sagepub.com/cgi/content/abstract/1/1/13http://gac.sagepub.com/cgi/content/abstract/1/1/58http://gac.sagepub.com/cgi/content/abstract/1/1/107http://gac.sagepub.com/cgi/content/abstract/1/4/397http://www.oecd.org/dataoecd/19/5/34884414.pdf" "http://www.comp.dit.ie/bduggan/Research/games_0539.PDFhttp://homepage.mac.com/markdouglaswagner/.Public/Ibbitson.dochttp://www.digra.org/dl/db/06276.14516.pdfhttp://www.digra.org/dl/http://www.digra.org/dl/http://www.digra.org/dl/db/06276.32151.pdfhttp://www.uta.fi/hyper/gamelab/creativegamers/" "www.metromagazine.com.auhttp://www.journal.fibreculture.org/issue5/kucklich.htmlhttp://portal.acm.org/citation.cfm?id=1073954http://csdl2.computer.org/persagen/DLAbsToc.jsp?resourcePath=/dl/proceedings/\\&toc=comp/proceedings/iv/2005/2397/00/2397toc.xml\\&DOI=10.1109/IV.2005.64" "http://www.ascilite.org.au/conferences/brisbane05/blogs/proceedings/25_Fladen.pdfhttp://www.uvka.de/univerlag/volltexte/2006/144/pdf/Digital_Game_Based_Learning.pdfhttp://www.uvka.de/univerlag/volltexte/2006/144/pdf/Digital_Game_Based_Learning.pdfhttp://ihobo.com/WP/" "http://www.digra.org/dl/http://www.digra.org/dl/db/06276.49210.pdfhttp://www.sapientia.pucsp.br//tde_busca/arquivo.php?codArquivo=783http://www.intelligentagent.com/http://www.digra.org/dl/db/06278.47142.pdfhttp://www.digra.org/dl/db/06276.47486.pdfhttp://www.digra.org/dl/db/06276.04067.pdf" "http://www.digra.org/dl/db/06276.52412.pdfhttp://www.digra.org/dl/db/06276.39174.pdfhttp://www.digra.org/dl/db/06276.00539.pdfhttp://www.digra.org/dl/db/06278.41489.pdfhttp://www.digra.org/dl/db/06278.03293.pdfhttp://csdl2.computer.org/comp/proceedings/hicss/2005/2268/07/22680191a.pdf" "http://www.digra.org/dl/db/06276.28131.pdfhttp://www.digra.org/dl/db/06276.50521.pdfhttp://www.digra.org/dl/db/06276.10020.pdfhttp://oak.cats.ohiou.edu/~consalvo/Cheating_good_for_you.pdfhttp://www.digra.org/dl/db/06276.58345.pdfhttp://www.digra.org/dl/db/06276.20328.pdf" "http://www.digra.org/dl/db/06278.50594.pdfhttp://www.digra.org/dl/db/06276.28330.pdfhttp://www.childrenyouthandmediacentre.co.uk/Pics/SimAndGameCarr.pdfhttp://www.cjc-online.ca/index.php/journal/article/view/1525/1654http://www.digra.org/dl/db/06276.21047.pdf" "http://www.digra.org/dl/db/06276.39565.pdfhttp://www.digra.org/dl/db/06278.11008.pdfhttp://www.digra.org/dl/db/06276.30561.pdfhttp://www.digra.org/dl/db/06278.02012.pdfhttp://www.psychology.iastate.edu/faculty/caa/abstracts/2005-2009/05CA.pdfhttp://www.digra.org/dl/db/06276.38324.pdf" "http://www.digra.org/dl/db/06276.55524.pdfhttp://eric.ed.gov/ERICWebPortal/custom/portlets/recordDetails/detailmini.jsp?_nfpb=true\\&_\\&ERICExtSearch_SearchValue_0=EJ737691\\&ERICExtSearch_SearchType_0=eric_accno\\&accno=EJ737691http://www.digra.org/dl/http://www.digra.org/dl/db/06278.05074.pdf" "http://www.digra.org/dl/db/06276.25259.pdfhttp://eprints.qut.edu.au/archive/00005010/http://www.digra.org/dl/db/06276.00216.pdfhttp://www.lcc.gatech.edu/~nitsche/download/Nitsche_machinima_DRAFT4.pdfhttp://www.gamestudies.org/0501/gruenvogel/http://www.digra.org/dl/db/06276.36533.pdf" "http://www.digra.org/dl/db/06276.41516.pdfhttp://www.digra.org/dl/db/06275.15203.pdfhttp://www.digra.org/dl/db/06278.34239.pdfhttp://www.digra.org/dl/db/06276.06108.pdfhttp://www.digra.org/dl/db/05150.48223http://www.digra.org/dl/db/06278.39122.pdfhttp://www.digra.org/dl/db/06276.18065.pdf" "http://www.darkshire.net/jhkim/rpg/theory/styles.htmlhttp://www.digra.org/dl/db/06276.44285.pdfhttp://www.digra.org/dl/db/06276.11074.pdfhttp://www.digra.org/dl/http://www.digra.org/dl/db/06278.12199.pdfhttp://www.gamestudies.org/0501/nakamura_wirman/http://www.digra.org/dl/db/06276.04321.pdf" "http://www.digra.org/dl/db/06276.58368.pdfhttp://tesi.fabio.web.cs.unibo.it/Tesi/UsabilitaEVideoGiochihttp://www.psychnology.org/336.phphttp://www.fair-play.se/source.php/42930/Lancet\\%202005.pdfhttp://www.digra.org/dl/http://www.ltss.bristol.ac.uk/interact/31/INTERACT_31.pdf" "http://www.digra.org/dl/db/06276.35222.pdfhttp://www.i-r-i-e.net/inhalt/004/Buchanan-Ess.pdfhttp://www.digra.org/dl/http://mitpress.mit.edu/books/chapters/0262182408intro1.pdfhttp://www.digra.org/dl/db/06278.37511.pdfhttp://portal.acm.org/citation.cfm?id=1111293.1111301" "http://www.digra.org/dl/db/06276.47199.pdfhttp://www.digra.org/dl/db/06276.15163.pdfhttp://www.digra.org/dl/http://www.digra.org/dl/http://www.libraryjournal.com/article/CA516033.htmlhttp://www.digra.org/dl/http://www.digra.org/dl/db/06276.13262.pdfhttp://www.digra.org/dl/" "http://www.digra.org/dl/db/06276.26370.pdfhttp://www.digra.org/dl/http://www.digra.org/dl/db/06275.08442.pdfhttp://www.intellectbooks.co.uk/journals/view-Article,id=5081/http://www.digra.org/dl/http://www.digra.org/dl/db/06276.21027.pdfhttp://www.digra.org/dl/" "http://www.digra.org/dl/db/06276.11525.pdfhttp://www.digra.org/dl/http://www.digra.org/dl/db/06276.30483.pdfhttp://www.digra.org/dl/db/06276.36443.pdfhttp://www.digra.org/dl/db/06276.19386.pdfhttp://www.digra.org/dl/http://www.digra.org/dl/db/06276.06512.pdf" "http://www.digra.org/dl/db/06278.49263.pdfhttp://www.digra.org/dl/db/06276.54243.pdfhttp://www.digra.org/dl/db/06276.15565.pdfhttp://www.digra.org/dl/db/06276.30120.pdfhttp://www.digra.org/dl/db/06278.24323.pdfhttp://www.i-r-i-e.net/inhalt/004/Chan.pdfhttp://www.digra.org/dl/db/06276.24389.pdf" "http://www.digra.org/dl/db/06276.33335.pdfhttp://www.digra.org/dl/db/06278.00101.pdfhttp://www.digra.org/dl/db/06276.16354.pdfhttp://eprints.qut.edu.au/archive/00005232/http://www.law.unimelb.edu.au/cmcl/malr/10-4-4\\%20Humphreys\\%20formatted\\%20for\\%20web.pdf" "http://www.digra.org/dl/http://www.digra.org/dl/db/06276.19076.pdfhttp://www.cse.unr.edu/~bdbryant/papers/stanley.ieeetec05.pdfhttp://www.digra.org/dl/db/06278.40383.pdfhttp://www.i-r-i-e.net/inhalt/004/Consalvo.pdfhttp://gamestudies.org/0501/lindley/http://www.digra.org/dl/db/06276.54317.pdf" "http://www.digra.org/dl/db/06276.29242.pdfhttp://mitpress.mit.edu/books/chapters/0262182408chap1.pdfhttp://www.digra.org/dl/db/06276.45288.pdfhttp://www.digra.org/dl/db/06276.35072.pdfhttp://www.digra.org/dl/db/06276.22478.pdfhttp://www.digra.org/dl/db/06278.36260.pdf" "http://www.digra.org/dl/db/06276.43287.pdfhttp://www.digra.org/dl/db/06276.22378.pdfhttp://www.immersivegaming.com/http://www.digra.org/dl/db/06276.05114.pdfhttp://www.digra.org/dl/db/06276.09313.pdfhttp://www.digra.org/dl/db/06278.06445.pdfhttp://www.digra.org/dl/db/06278.09267.pdf" "http://www.socresonline.org.uk/10/1/crawford.htmlhttp://www.digra.org/dl/db/06278.14520.pdfhttp://www.digra.org/dl/db/06278.58570.pdfhttp://education.waikato.ac.nz/journal/english_journal/uploads/files/2005v4n1art3.pdfhttp://www.digra.org/dl/db/06276.11341.pdf" "http://www.bmj.com/cgi/content/full/bmj\\%3B331/7509/122http://www.digra.org/dl/db/06276.02460.pdfhttp://www.digra.org/dl/db/06278.08106.pdfhttp://www.digra.org/dl/db/06276.08169.pdfhttp://www.digra.org/dl/http://ir.lib.sfu.ca/handle/1892/1600?mode=fullhttp://www.digra.org/dl/db/06276.23429.pdf" "http://www.digra.org/dl/http://www.digra.org/dl/http://www.digra.org/dl/http://www.digra.org/dl/http://www.digra.org/dl/http://www.digra.org/dl/http://www.digra.org/dl/http://www.digra.org/dl/http://www.maxwell.lambda.ele.puc-rio.br/cgi-bin/db2www/PRG_0651.D2W/SHOW?CdLinPrg=pt\\&Cont=7861:pt" "http://www.digra.org/dl/http://www.digra.org/dl/http://www.digra.org/dl/http://www.digra.org/dl/http://www.digra.org/dl/http://www.digra.org/dl/http://www.digra.org/dl/http://www.gamestudies.org/0501/burkehttp://www.digra.org/dl/http://www.digra.org/dl/http://www.digra.org/dl/" "http://www.digra.org/dl/http://www.digra.org/dl/http://www.digra.org/dl/http://www.digra.org/dl/http://www.digra.org/dl/http://www.digra.org/dl/http://www.digra.org/dl/http://www.gamestudies.org/0501/pearcehttp://www.digra.org/dl/http://www.digra.org/dl/http://www.digra.org/dl/" "http://www.digra.org/dl/http://www.digra.org/dl/http://www.digra.org/dl/http://www.digra.org/dl/http://www.i-r-i-e.net/inhalt/004/Chen-Park.pdfhttp://www.digra.org/dl/http://www.digra.org/dl/http://www.digra.org/dl/http://www.i-r-i-e.net/inhalt/004/Burk.pdf" "http://www.digra.org/dl/http://www.digra.org/dl/http://www.i-r-i-e.net/inhalt/004/Kimppa-Bissett.pdfhttp://www.digra.org/dl/http://www.digra.org/dl/http://www.digra.org/dl/http://www.digra.org/dl/http://www.digra.org/dl/http://www.digra.org/dl/http://www.digra.org/dl/" "http://www.digra.org/dl/http://www.i-r-i-e.net/inhalt/004/Larrson-Dodig-Crnkovic.pdfhttp://www.digra.org/dl/http://www.digra.org/dl/http://www.digra.org/dl/http://www.digra.org/dl/http://www.digra.org/dl/http://www.i-r-i-e.net/inhalt/004/Sicart.pdfhttp://www.digra.org/dl/" "http://www.digra.org/dl/http://www.digra.org/dl/http://www.digra.org/dl/http://www.digra.org/dl/http://www.digra.org/dl/http://www.digra.org/dl/http://www.digra.org/dl/http://www.digra.org/dl/http://www.digra.org/dl/http://www.digra.org/dl/http://www.digra.org/dl/" "http://www.digra.org/dl/http://www.digra.org/dl/http://www.digra.org/dl/http://www.gamestudies.org/0501/manninen_kujanpaa/http://www.digra.org/dl/http://www.digra.org/dl/http://ssrn.com/abstract=870634http://www.digra.org/dl/http://www.digra.org/dl/http://www.digra.org/dl/" "http://www.digra.org/dl/http://www.digra.org/dl/http://www.digra.org/dl/http://www.digra.org/dl/http://www.digra.org/dl/http://www.digra.org/dl/http://www.digra.org/dl/http://www.digra.org/dl/http://www.digra.org/dl/http://www.digra.org/dl/http://www.digra.org/dl/" "http://www.digra.org/dl/http://www.digra.org/dl/http://www.digra.org/dl/http://www.digra.org/dl/http://www.digra.org/dl/http://www.digra.org/dl/http://www.cs.ubc.ca/~sulingy/540.pdfhttp://www.digra.org/dl/http://www.digra.org/dl/http://www.digra.org/dl/http://www.gamestudies.org/0501/ermi_mayra" "http://www.digra.org/dl/http://www.digra.org/dl/http://www.digra.org/dl/http://www.digra.org/dl/http://www.digra.org/dl/http://www.digra.org/dl/http://www.digra.org/dl/http://www.digra.org/dl/http://www.digra.org/dl/http://www.digra.org/dl/http://www.digra.org/dl/" "http://www.digra.org/dl/http://www.digra.org/dl/http://www.digra.org/dl/http://www.digra.org/dl/http://www.digra.org/dl/http://www.digra.org/dl/http://www.digra.org/dl/http://www.digra.org/dl/http://www.digra.org/dl/http://www.i-r-i-e.net/inhalt/004/Warner-Raiter.pdf" "http://www.digra.org/dl/http://www.digra.org/dl/http://www.digra.org/dl/http://www.digra.org/dl/http://www.digra.org/dl/http://www.digra.org/dl/http://www.digra.org/dl/http://www.digra.org/dl/http://www.digra.org/dl/http://www.gamestudies.org/0501/davis_steury_pagulayan/" "http://ssrn.com/abstract=618982http://www.digra.org/dl/http://www.digra.org/dl/http://www.digra.org/dl/http://www.digra.org/dl/http://www.digra.org/dl/http://www.digra.org/dl/http://www.digra.org/dl/http://www.digra.org/dl/http://www.digra.org/dl/http://www.gamesconference.org/digra2005/viewabstract.php?id=144" "http://www.digra.org/dl/http://www.digra.org/dl/http://www.gamestudies.org/0501/gingoldhttp://www.digra.org/dl/http://www.digra.org/dl/http://www.digra.org/dl/http://www.digra.org/dl/http://www.digra.org/dl/http://www.cvm.uiuc.edu/courses/path671/video\\%20game\\%20intro.pdf" "http://doi.acm.org/10.1145/985921.98606810.1145/985921.986068http://www.sisostds.org/index.php?tg=articles\\&idx=More\\&article=219\\&topics=72http://ieeexplore.ieee.org/iel5/9429/29917/01366208.pdfhttp://www.gamespace.nl/content/ISAGA_Nieborg.PDFhttp://www.clim.nl/personal/docs/final_presentation.ppt" "http://www.ye-brothers.com/documents/HCIGAMEDESIGN.pdfhttp://www.jesperjuul.net/text/timetoplay/http://www.techcomm-online.org/http://www.cric.ac.uk/cric/staff/Jason_Rutter/papers/ME1.pdfhttp://www.gamespot.com/features/6106009/p-1.htmlhttp://www.hollywoodreporter.com/hr/search/article_display.jsp?vnu_content_id=1000484956" "http://www.cs.mdx.ac.uk/research/PhDArea/j_salisbury/john_salisburys_game_design_research_symposium_and_workshop_submission.rtfhttp://doi.acm.org/10.1145/1028014.1028069http://doi.acm.org/10.1145/1028014.1028083http://citeseer.ist.psu.edu/675898.htmlhttp://informatica.uv.es/~pmorillo/papers/pmorillo_cgi04.pdf" "http://www.gamestudies.org/0401/rau/http://www.system.tstc.edu/forecasting/reports/dgames.asphttp://visinfo.zib.de/EVlib/Show?EVL-2004-72http://springerlink.metapress.com/openurl.asp?genre=article\\&ampissn=0302-9743\\&ampvolume=3166\\&ampspage=598http://dialnet.unirioja.es/servlet/oaiart?codigo=1335389" "http://www.gamestudies.org/0401/kolo/http://www.gamestudies.org/0401/woods/http://portal.acm.org/citation.cfm?id=1028078\\&dl=acm\\&coll=\\&CFID=15151515\\&CFTOKEN=6184618http://www.gamestudies.org/0401/jarvinen/http://www.gamestudies.org/0401/whalen/http://www.gamestudies.org/0401/galloway/" "http://doi.acm.org/10.1145/1067343.1067372http://www.digra.org/dl/db/display_html?chid=http://www.digra.org/dl/db/05150.01496http://www.digra.org/dl/db/05150.21522.pdfhttp://www.jesperjuul.net/text/gameplayerworld/http://old.imv.au.dk/eng/academic/pdf_files/Sotamaa.pdf" "http://www.nytimes.com/2003/12/04/technology/circuits/04modd.html?ex=1385874000\\&en=1bff37ae5c48d16b\\&ei=5007\\&partner=USERLANDhttp://www.cric.ac.uk/cric/staff/Jason_Rutter/papers/LSA.pdfhttp://www.digra.org/dl/display_html?chid=http://www.digra.org/dl/db/05150.07598" "http://www.psychologicalscience.org/pdf/pspi/pspi43.pdfhttp://www.igda.org/columns/ivorytower/ivory_Apr03.phphttp://www.cs.berkeley.edu/~daf/games/webpage/AIpapers/Bauckhage2003-LHL.pdfhttp://www.desq.co.uk/doomed/pdf/Making_the_case.pdfhttp://www.digra.org/dl/display_html?chid=http://www.digra.org/dl/db/05163.32071" "http://www.gamespace.nl/content/NieborgVanderGraaf_TogetherWeBrand_2003.pdfhttp://mcgraw-hill.co.uk/html/0072228997.htmlhttp://www.gamestudies.org/0302/castronova/http://www.digra.org/dl/display_html?chid=http://www.digra.org/dl/db/05150.01496http://www.gamestudies.org/0301/fromme/" "http://www.gamestudies.org/0301/fromme/http://doi.acm.org/10.1145/958720.958735http://www.gamestudies.org/0301/pearce/http://www.gamestudies.org/0302/lee/http://firstmonday.org/issues/issue8_7/gros/index.htmlhttp://www.gamestudies.org/0301/manninen/http://doi.acm.org/10.1145/950566.950575" "http://www.gamestudies.org/0301/kucklich/http://www.gamestudies.org/0301/carr/http://www.gamestudies.org/0301/walther/http://www.gamestudies.org/0302/frasca/http://www.gamestudies.org/0302/vanlooy/http://doi.acm.org/10.1145/950566.950583http://www.scit.wlv.ac.uk/~cm1822/ijkurt.pdf" "http://doi.acm.org/10.1145/950566.950595http://www.gamestudies.org/0302/taylor/http://sag.sagepub.com/cgi/reprint/33/4/441http://www.oss.net/dynamaster/file_archive/041017/96a13ea1954b4fa57ad78d790077637a/JC Herz\\%20on\\%20Harnessing\\%20the\\%20Hive\\%20Via\\%20Online Games.pdf" "http://www.gamesconference.org/digra2003/2003/index.php?Games+conferencehttp://portal.acm.org/http://portal.acm.org/http://portal.acm.org/http://mcgraw-hill.co.uk/html/0072226609.htmlhttp://www.gamestudies.org/0202/wright/http://citeseer.ist.psu.edu/612839.html" "http://gn.www.media.mit.edu/groups/gn/pubs/gender.hci.just.pdfhttp://gamepipe.usc.edu/~zyda/pubs/ShillingGameon2002.pdfhttp://digiplay.info/files/cgdc.pdfhttp://www.gamestudies.org/0202/lugo/http://www.arts.ulster.ac.uk/media/kerr/source\\%20files/text/executive\\%20summary_final\\%20report2.pdf" "http://www.futureofchildren.org/usr_doc/tfoc_12-2f.pdfhttp://www.rcgd.isr.umich.edu/garp/articles/durkin02.pdfwww.teem.org.uk/publications/teem_gamesined_full.pdfhttp://www.mediajournal.org/modules/pub/view.php/mediajournal-5http://dir.salon.com/story/tech/feature/2002/04/16/modding/index.html" "http://www.gamestudies.org/0202/smith/http://www.gamestudies.org/0102/squire/http://www.gamestudies.org/0102/editorial.htmlhttp://www.gamestudies.org/0202/editorial/http://www.gamestudies.org/0102/jarvinen/http://www.gamestudies.org/0202/kennedy/http://www.gamestudies.org/0102/newman/" "http://www.gamestudies.org/0202/pearce/http://www.gamestudies.org/0102/mortensen/http://www.gamestudies.org/0102/pearce/http://ntsa.metapress.com/app/home/contribution.asp?referrer=parent\\&backto=issue,6,151journal,6,7linkingpublicationresults,1:113340,1http://www.math-info.univ-paris5.fr/~bouzy/publications/CG-AISurvey.pdf" "http://digiplay.info/flowhttp://www.druid.dk/uploads/tx_picturedb/wp01-10.pdfhttp://www.computervisualistik.de/~schirra/Work/Papers/P01/P01-1/http://www.childrennow.org/media/video-games/2001/fair-play-2001.pdfhttp://www.technologyreview.com/Infotech/12189/" "http://psych-server.iastate.edu/faculty/caa/abstracts/2000-2004/00senate.pdfhttp://stevenpoole.net/blog/trigger-happier/http://www.jesperjuul.net/text/wcgcacd.htmlhttp://www.gamasutra.com/features/20000301/carson_01.htmhttp://www.gdconference.com/archives/proceedings/2000/game_papers.html" "http://www.childrennow.org/media/video-games/video-games-girls.pdfhttp://www.utoledo.edu/psychology/funktestimony.htmlhttp://www.mediaandthefamily.org/press/senateviolence-full.shtmlhttp://www.senate.gov/~commerce/hearings/0504hue.pdfhttp://www.senate.gov/~commerce/hearings/0504jen.pdf" "http://commerce.senate.gov/hearings/0321pro.pdfhttp://www.senate.gov/~commerce/hearings/0321gol.pdfhttp://www.geoffreyrockwell.com/publications/Gore.Galore.pdfhttp://www.ludology.org/articles/ludology.htmhttp://www.blackwell-synergy.com/doi/pdf/10.1111/j.1528-1157.1999.tb00903.x" "http://www.media-awareness.ca/english/resources/research_documents/studies/video_games/video_game_culture.cfmhttp://www.hf.uib.no/hi/espen/papers/spacehttp://www.jesperjuul.net/thesis/http://lingo.uib.no/dac98/papers/frasca.htmlhttp://lingo.uib.no/dac98/papers/kirksaether.html" "www.ed.ac.uk/rcss/SLIM/SLIMhome.htmlhttp://www.wired.com/wired/archive/5.01/esschilling.htmlhttp://twinpinefarm.com/pdfs/games.pdfhttp://portal.acm.org/ft_gateway.cfm?id=232852\\&type=pdf\\&coll=GUIDE\\&dl=ACM\\&CFID=15151515\\&CFTOKEN=6184618http://www.geekcomix.com/vgh/genracinequal.shtml" "http://portal.acm.org/citation.cfm?id=232025\\&jmp=cit\\&coll=GUIDE\\&dl=GUIDE\\&CFID=48113042\\&CFTOKEN=94606531$\\#$http://links.jstor.org/sici?sici=0024-094X(1995)28\\%3A5\\%3C403\\%3AMCGIIA\\%3E2.0.CO\\%3B2-3www.wired.com/wired/archive/2.05/tetris_pr.htmlhttp://web.archive.org/web/20000815110856/http://www.media-awareness.ca/eng/issues/violence/resource/reports/gamedoc.htm" "http://www.ullrich-dittler.de/Inhaltbuch1.pdfhttp://www.blackwell-synergy.com/doi/pdf/10.1111/j.0022-3840.1983.1702_61.x?cookieSet=1http://www.pubmedcentral.nih.gov/picrender.fcgi?artid=1498660\\&blobtype=pdf"); static const char *backslashLastAuthors("Doe"); static const char *backslashFilesUrlsDois("http://www.example.com/file\\_aaa1.bibhttp://www.example.com/file_aaa2.bib/tmp/file\\_bbb1.bib/tmp/file_bbb2.bib"); static const char *bug379443attachment105313IOPEXPORTBIBLastAuthors("Yuldashev"); static const char *bug379443attachment105313IOPEXPORTBIBFilesUrlsDois("http://stacks.iop.org/1748-0221/3/i=08/a=S08004"); static const char *bug21870politoLastAuthors("AlbrechtAllhoffAntosArducArendtBandhauerBassnettBeller-ReuseBergsdorfBergsdorfBergsdorfBertelsmann-StiftungBiedenkopfBiereBlommaertBlommaertBlommaertBockBockBockBockBockBockBockBockBockBohlenBohlenderBoventerBramstedtBresserBrosiusBr\u00e4uerBubenhoferBurgerBurger" "BurkhardtBurkhardtBurkhardtBurkhardtBurkhardtBurkhardtBurkhardtBurkhardtBurkhardtBurkhardtBurkhardtBurkhardtBurkhardtBurkhardtBurkhardtBurkhardtBurkhardtBurkhardtBurkhardtBurkhardtBurkhardtBurkhardtBurkhardtBurkhardtBurkhardtBurkhardtBurkhardtBurkhardtBurkhardt" "BurkhardtBurkhardtBurkhardtBurkhardtBurkhardtBurkhardtBurkhardtBurkhardtBurkhardtBurkhardtBurkhardtBurkhardtBurkhardtBurkhardtBurkhardtBurkhardtBurkhardtBurkhardtBurkhardtBurkhardtBurkhardtBuschBusseBusseBusseBusseBusseBusseBusseBusseBusseBusseBusseBusseBusse" "BusseB\u00f6ckelmannB\u00f6keB\u00f6keB\u00f6keB\u00f6keCariusCoenenCzerwickDieckmannDieckmannDieckmannDieckmannDieckmannDiekmannshenkeDiekmannshenkeDiekmannshenkeDiekmannshenkeDiekmannshenkeDongesDumontDuttD\u00f6rnerD\u00f6rnerD\u00fcrscheidD\u00fcrscheidEggsEichingerElsner-PetriElterEnglebretson" "EpplerEpplerEpplerEpplerEromsEromsFaircloughFaircloughFelderFischerFixFixForsterForsterForsterForsterFritzscheFrohningFuhseGanselGaugerGaugerGei\u00dflerGirnthGirnthGirnthGirnthGirnthGoodGreiffenhagenGrewenigGrewenigGrewenigGrewenigGrewenigGrewenigGrewenigGrewenig" "GrewenigGrewenigGrewenigGrewenigGrewenigGrewenigGrewenigGrewenigGrewenigGrewenigGrieswelleGronkeGro\u00dfGrunerGrunerHausendorfHeringerHeringerHeringerHermannsHermannsHermannsHermannsHobergHoffmannHoinleHollyHollyHollyHollyHollyHollyHollyHollyIcklerJaffeJanuschek" "JungJ\u00e4ckelJ\u00e4ckelJ\u00e4gerJ\u00e4gerJ\u00e4gerJ\u00e4gerKarglKellerKepplingerKerstingKilianKilianKilianKilianKilianKilianKilianKilianKilianKilianKilianKilianKilianKilianKindelmannKindtKindtKindtKindtKindtKindtKindtKindtKindtKirstKleinKleinKleinKleinKleinKleinKleinKleinKlein" "KleinKleinKleinKleinKleinKleinKleinKleinKleinKleinKleinKleinKleinKleinKleinKleinKleinKleinKleinKleinKleinKleinKleinKleinKleinKleinKleinKleinKleinKleinKleinKleinKleinKleinKleinKleinKleinKleinKleinKleinKleinKleinKleinKleinKleinKleinKleinKleinKleinKleinKleinKlein" "KleinKleinKleinKleinKleinKleinKleinKleinKleinKleinKleinKleinKleinheyerKlemmKlemmKlingemannKnapeKnapeKopperschmidtKopperschmidtKopperschmidtKopperschmidtKrebsKressKrzy\u017canowskiKuhlmannKuhnK\u00e4mperK\u00e4mperK\u00e4mperK\u00e4mperK\u00e4mperK\u00e4mperK\u00e4mperK\u00e4mperK\u00e4mperK\u00e4mper" "K\u00e4mperK\u00e4mperK\u00e4mperK\u00e4mperK\u00e4mperK\u00e4mperK\u00e4mperK\u00e4mperK\u00e4mperK\u00e4mperK\u00e4mperK\u00e4mperK\u00fchnLangenbucherLangerLatniakLeyendeckerLiebertLiedtkeLinkeLucasLuginb\u00fchlL\u00e4zerMei\u00dfnerMei\u00dfnerMetzeltinMetzeltinMeyerMeyerMeyerMeyerMusahlM\u00fcnklerNiehrNiehrNiehrNiehrNiehr" "NiehrNiehrNiehrNiehrNiehrNiehrNiehrNiehrNiehrNiehrNiehrNiehrNiehrNiehrNiehrNiehrNiehrNosOsterkampPanaglPapePapePapePappertPappertPappertPappertPappertPappertPappertPappertPappertPappertPappertPappertPatzeltPaulPetter-ZimmerPlatzPlettPollmannPorschP\u00f6rksenP\u00f6rksen" "P\u00f6rksenP\u00fcschelP\u00fcschelP\u00fcschelP\u00fcschelRaschkeReiherReissen-KoschReissen-KoschRickenbacherRothRothRothRothRothRothRothRothRothRothRothRothRothRothRothRothRothRothRothRothRothRothRothenh\u00f6ferRuchtRybarczykR\u00fcttenSagerSagerSarcinelliSarcinelliSarcinelliSarcinelli" "SarcinelliSauerSauerSauerSauerSauerSauerSauerSauerSauerSauerSauerSauerSauerSauerSauerSauerSauerSauerSauerSauerSauerSauerSauerSauerSauerSauerSauerSauerSauerSauerSauerSauerSauerSauerSauerSaxerSchalkScharlothScharlothScharlothScharlothSchieweSchildSchildenSchlosser" "SchlosserSchmitt-BeckSchneiderSchoenSchr\u00f6terSchr\u00f6terSchr\u00f6terSchr\u00f6terSchr\u00f6terSchr\u00f6terSchr\u00f6terSchr\u00f6terSchr\u00f6terSchr\u00f6terSchr\u00f6terSchr\u00f6terSchr\u00f6terSchr\u00f6terSchr\u00f6terSchr\u00f6terSchultzeSchulzSchumannSchwerSch\u00e4ferSch\u00e4ffnerSch\u00e4ffnerSch\u00e4ffnerSch\u00e4ffnerSch\u00e4ffner" "Sch\u00e4ffnerSch\u00e4ffnerSch\u00e4ffnerSch\u00e4ffnerSch\u00e4ffnerSch\u00e4ffnerSch\u00e4ffnerSch\u00e4ffnerSch\u00e4ffnerSch\u00e4ffnerSch\u00e4ffnerSch\u00e4ffnerSch\u00e4ffnerSch\u00e4ffnerSch\u00e4ffnerSch\u00e4ffnerSch\u00e4ffnerSch\u00e4ffnerSch\u00e4ffnerSch\u00e4ffnerSch\u00e4ffnerSch\u00e4ffnerSch\u00e4ffnerSch\u00e4ffnerSch\u00e4ubleSch\u00fctzScott" "SondereggerSpiegelSpie\u00dfSpie\u00dfSpie\u00dfSpie\u00dfSpie\u00dfSpie\u00dfSpie\u00dfSpie\u00dfSpie\u00dfSpie\u00dfSpie\u00dfSpie\u00dfSpie\u00dfSpie\u00dfSpie\u00dfSpie\u00dfSpie\u00dfSpie\u00dfSpie\u00dfSpillnerSpitzm\u00fcllerSpitzm\u00fcllerSpitzm\u00fcllerStammenSteyerSteyerStickelStickelStra\u00dfnerSt\u00f6tzelSt\u00fcrmerSuplieTeubertTeubertTiittula" "TillmannTodenhagenTownsonUedingUedingUedingUedingUedingUedingVerschuerenVogtVoigtVolmertWarnkeWarnkeWarnkeWaschkuhnWeber-Sch\u00e4ferWeidacherWeidacherWeidacherWeidacherWeidacherWeidacherWei\u00dfenfelsWelanWellerWendenWengelerWengelerWengelerWengelerWengelerWengeler" "WengelerWengelerWengelerWengelerWengelerWengelerWengelerWengelerWengelerWengelerWengelerWengelerWengelerWengelerWengelerWengelerWengelerWengelerWengelerWengelerWengelerWengelerWengelerWengelerWengelerWengelerWengelerWengelerWengelerWengelerWengelerWengelerWengeler" "WengelerWengelerWiegandWienenWienenWimmerWinterhoff-SpurkWittk\u00e4mperWittk\u00e4mperWodakWodakWollingWongZiemZiemZiemZorbachvon Alemannvon Polenz"); static const char *bug21870politoFilesUrlsDois("http://othes.univie.ac.at/15622/1/2011-07-27_0609377.pdfhttp://www.sprichst-du-politik.de/downloads/sprichst-du-politik_Studie.pdf" "http://www.jostrans.org/issue17/issue17_toc.phphttp://www.bpb.de/politik/grundfragen/sprache-und-politik/42720/schlagwoerterhttp://www.gfl-journal.de/Issue_1_2011.phphttp://www.owid.de/wb/disk45/einleitung.htmlhttp://www.nhh.no/Default.aspx?ID=2242http://www.gfl-journal.de/22008/schroeter.pdf" "http://www.gespraechsforschung-ozs.dehttp://www.soz.uni-frankfurt.de/K.G/B5_2005_Coenen.pdfhttp://www.diss-duisburg.de/internetbibliothek/buecher/volltexte.htm"); static const char *cloudduplicatesLastAuthors("AhmedAhmedAhmedHuylebroeckHuylebroeckHuylebroeckKozirisKozirisKozirisKozirisLancellottiLancellottiLilienLilienReddyReddyReddyZhangZhangZhangZhang"); static const char *cloudduplicatesFilesUrlsDois("http://dl.acm.org/citation.cfm?id=1967425http://securlab.ing.unimo.it/papers/cloudcp2011.pdfhttp://doi.acm.org/10.1145/1967422.1967425" "10.1145/1967422.1967425http://dblp.uni-trier.de/db/conf/middleware/comp2009.html#CerbelaudGH09http://dl.acm.org/citation.cfm?id=1657011http://dl.acm.org/citation.cfm?id=1656980.1657011http://ieeexplore.ieee.org/stamp/stamp.jsp?arnumber=562339010.1109/SRDS.2010.28" "http://ieeexplore.ieee.org/xpls/abs_all.jsp?arnumber=5623390http://www.cs.purdue.edu/homes/bb/SRDS.pdfhttp://ieeexplore.ieee.org/stamp/stamp.jsp?arnumber=612278210.1109/ISIAS.2011.6122782http://ieeexplore.ieee.org/xpls/abs_all.jsp?arnumber=6122782http://faculty.uoit.ca/sartipi/courses/SC/w13/5.Resources/3.Cloud/OpenID%20Authentication%20As%20A%20Service%20in%20OpenStack.pdf" "http://dblp.uni-trier.de/db/conf/IEEEias/IEEEias2011.html#KhanYA11http://dl.acm.org/citation.cfm?id=2063973http://www.cslab.ece.ntua.gr/~ikons/on_the_elasticity_of_nosql_databases_over_cloud_management_platforms.pdfhttp://doi.acm.org/10.1145/2063576.2063973" "10.1145/2063576.2063973http://www.cslab.ece.ntua.gr/~dtsouma/index_files/tira_cikm_ext.pdfhttp://dblp.uni-trier.de/db/conf/cikm/cikm2011.html#KonstantinouABTK11http://dblp.uni-trier.de/db/journals/corr/corr1208.html#abs-1208-4166http://dblp.uni-trier.de/db/journals/pvldb/pvldb5.html#FloratouTDPZ12" "http://dl.acm.org/citation.cfm?id=2367511http://arxiv.org/pdf/1208.4166http://dl.acm.org/citation.cfm?id=2367502.2367511http://dblp.uni-trier.de/db/journals/corr/corr1207.html#abs-1207-0780http://adsabs.harvard.edu/abs/2012arXiv1207.0780Thttp://arxiv.org/abs/1207.0780" "http://arxiv.org/pdf/1207.0780"); #endif // KBIBTEX_FILES_TEST_RAWDATA_H