diff -Nru qttools-opensource-src-5.7.1/debian/changelog qttools-opensource-src-5.9.1/debian/changelog --- qttools-opensource-src-5.7.1/debian/changelog 2017-01-03 08:23:21.000000000 +0000 +++ qttools-opensource-src-5.9.1/debian/changelog 2017-08-16 09:18:33.000000000 +0000 @@ -1,10 +1,50 @@ -qttools-opensource-src (5.7.1-1build1~3) zesty; urgency=medium +qttools-opensource-src (5.9.1-2) unstable; urgency=medium - * Rebuild. - * Disable dependency on qtwebkit temporarily, but package can still - be synced. + * Update symbols files from the current build logs. + * Upload to unstable. + - Fixes build failure with GCC 7 (closes: #853633). - -- Timo Jyrinki Mon, 02 Jan 2017 16:40:29 +0200 + -- Dmitry Shachnev Wed, 16 Aug 2017 12:18:33 +0300 + +qttools-opensource-src (5.9.1-1) experimental; urgency=medium + + * New upstream release. + * Update symbols files from buildds’ logs. + * Bump Qt build-dependencies to 5.9.1. + * Bump Standards-Version to 4.0.0, no changes needed. + + -- Dmitry Shachnev Sun, 02 Jul 2017 16:08:50 +0300 + +qttools-opensource-src (5.9.0-1) experimental; urgency=medium + + * Team upload. + + [ Simon Quigley ] + * New upstream release. + + [ Dmitry Shachnev ] + * Re-enable webkit support. + + -- Simon Quigley Thu, 08 Jun 2017 05:32:04 -0500 + +qttools-opensource-src (5.9.0~beta3-1) experimental; urgency=medium + + [ Alexander Volkov ] + * Add and install desktop files for assistant, designer and linguist + (closes: #775419). + + [ Dmitry Shachnev ] + * New upstream beta release. + * Temporarily disable webkit support (there are no webkit 5.9 tarballs yet). + * Bump the other Qt build dependencies to 5.9.0 beta. + * Drop libqt5clucene5 package, upstream no longer uses a fork of CLucene. + - Drop hurd-path_max.diff, no longer needed. + * Build qtattributionsscanner before building the documentation. + * Update install files. + * Update symbols files from current amd64 and i386 build logs. + * Update debian/copyright. + + -- Dmitry Shachnev Mon, 08 May 2017 15:37:21 +0300 qttools-opensource-src (5.7.1-1) unstable; urgency=medium diff -Nru qttools-opensource-src-5.7.1/debian/control qttools-opensource-src-5.9.1/debian/control --- qttools-opensource-src-5.7.1/debian/control 2017-01-03 07:25:35.000000000 +0000 +++ qttools-opensource-src-5.9.1/debian/control 2017-08-16 09:18:33.000000000 +0000 @@ -9,31 +9,19 @@ Timo Jyrinki , Dmitry Shachnev Build-Depends: debhelper (>= 9.20160114~), - libqt5opengl5-dev (>= 5.7.1+dfsg~), - libqt5sql5-sqlite (>= 5.7.1+dfsg~), -# libqt5webkit5-dev (>= 5.7.1+dfsg~) [!m68k !sh4], + libqt5opengl5-dev (>= 5.9.1+dfsg~), + libqt5sql5-sqlite (>= 5.9.1+dfsg~), + libqt5webkit5-dev (>= 5.9.0+dfsg~) [!m68k !sh4], pkg-kde-tools, - qtbase5-private-dev (>= 5.7.1+dfsg~), - qtdeclarative5-private-dev (>= 5.7.1~20161021~), + qtbase5-private-dev (>= 5.9.1+dfsg~), + qtdeclarative5-private-dev (>= 5.9.1~), zlib1g-dev -Build-Depends-Indep: qtbase5-doc-html (>= 5.7.1+dfsg~) -Standards-Version: 3.9.8 +Build-Depends-Indep: qtbase5-doc-html (>= 5.9.1+dfsg~) +Standards-Version: 4.0.0 Homepage: https://www.qt.io/developers/ Vcs-Git: https://anonscm.debian.org/git/pkg-kde/qt/qttools.git Vcs-Browser: https://anonscm.debian.org/cgit/pkg-kde/qt/qttools.git -Package: libqt5clucene5 -Architecture: any -Multi-Arch: same -Pre-Depends: ${misc:Pre-Depends} -Depends: ${misc:Depends}, ${shlibs:Depends} -Description: Qt 5 CLucene module - Qt is a cross-platform C++ application framework. Qt's primary feature - is its rich set of widgets that provide standard GUI functionality. - . - This package includes the CLucene module. CLucene is a high-performance, - scalable indexing and searching API. - Package: libqt5designer5 Architecture: any Multi-Arch: same @@ -85,8 +73,7 @@ Architecture: any Multi-Arch: same Section: libdevel -Depends: libqt5clucene5 (= ${binary:Version}), - libqt5designer5 (= ${binary:Version}), +Depends: libqt5designer5 (= ${binary:Version}), libqt5designercomponents5 (= ${binary:Version}), libqt5help5 (= ${binary:Version}), qtbase5-dev, diff -Nru qttools-opensource-src-5.7.1/debian/copyright qttools-opensource-src-5.9.1/debian/copyright --- qttools-opensource-src-5.7.1/debian/copyright 2016-12-16 19:21:55.000000000 +0000 +++ qttools-opensource-src-5.9.1/debian/copyright 2017-08-16 09:18:33.000000000 +0000 @@ -21,7 +21,6 @@ Files: src/assistant/help/* src/assistant/shared/* src/designer/src/lib/uilib/* - src/qtestlib/wince/* src/shared/* src/winrtrunner/* Copyright: 2015-2016 The Qt Company Ltd. @@ -73,22 +72,6 @@ Copyright: 2016 The Qt Company Ltd. License: BSD-3-clause -Files: src/assistant/3rdparty/clucene/* -Copyright: 2003-2006 Ben van Klinken and the CLucene Team - 1999 Tom Tromey - 2000 Red Hat, Inc. - 1991, 1999 Free Software Foundation, Inc. - 2003-2006 The Apache Software Foundation - 2003-2006 Jos van den Oever - 2003-2006 Matt J. Weinstein - 2015 The Qt Company Ltd. -License: Apache-2.0 or LGPL-2.1 - -Files: src/assistant/clucene/* -Copyright: 2003-2006 Ben van Klinken and the CLucene Team - 2016 The Qt Company Ltd. -License: LGPL-3 or GPL-2 - License: BSD-3-clause You may use this file under the terms of the BSD license as follows: . @@ -178,19 +161,6 @@ independent modules, but including any changes you have made to this application, under the terms of this license. -License: LGPL-2.1 - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License version 2.1 - as published by the Free Software Foundation. - . - 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 Lesser General Public License for more details. - . - On Debian systems, the complete text of the GNU Lesser General Public - License version 3 can be found in /usr/share/common-licenses/LGPL-2.1. - License: LGPL-3 This program is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 3 @@ -204,22 +174,6 @@ On Debian systems, the complete text of the GNU Lesser General Public License version 3 can be found in /usr/share/common-licenses/LGPL-3. -License: Apache-2.0 - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - . - http://www.apache.org/licenses/LICENSE-2.0 - . - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - . - On Debian systems, the complete text of the Apache License 2.0 - can be found in `/usr/share/common-licenses/Apache-2.0`. - Files: *.qdoc Copyright: 2016 The Qt Company Ltd. License: GFDL-1.3 diff -Nru qttools-opensource-src-5.7.1/debian/desktop/assistant-qt5.desktop qttools-opensource-src-5.9.1/debian/desktop/assistant-qt5.desktop --- qttools-opensource-src-5.7.1/debian/desktop/assistant-qt5.desktop 1970-01-01 00:00:00.000000000 +0000 +++ qttools-opensource-src-5.9.1/debian/desktop/assistant-qt5.desktop 2017-08-16 09:18:33.000000000 +0000 @@ -0,0 +1,87 @@ +[Desktop Entry] +Name=Qt 5 Assistant +Name[bg]=Qt 5 асистент +Name[cs]=Qt 5 asistent +Name[hu]=Qt 5 Asszisztens +Name[ja]=Qt 5アシスタント +Name[km]=អ្នក​ជំនួយការ Qt 5 +Name[nb]=Qt 5-assistent +Name[pa]=Qt 5 ਸਹਾਇਕ +Name[sv]=Qt 5-assistent +Name[zh_CN]=Qt 5 助手 +Name[zh_TW]=Qt 5 助理 +GenericName=Document Browser +GenericName[af]=Dokument Blaaier +GenericName[az]=Sənəd Səyyahı +GenericName[bg]=Преглед на документи +GenericName[bn]=নথী ব্রাউজার +GenericName[br]=Furcher Teulioù +GenericName[bs]=Preglednik QT dokumenata +GenericName[ca]=Navegador de documents +GenericName[cs]=Prohlížeč dokumentace +GenericName[cy]=Porydd Dogfen +GenericName[da]=Dokumentfremviser +GenericName[de]=Dokumentbrowser +GenericName[el]=Προβολέας εγγράφων +GenericName[eo]=Dokumentorigardilo +GenericName[es]=Navegador de documentos +GenericName[et]=Dokumentatsiooni brauser +GenericName[eu]=Dokumentu Ikustailua +GenericName[fa]=مرورگر سند +GenericName[fi]=Asiakirjaselain +GenericName[fo]=Skjalakagari +GenericName[fr]=Explorateur de documentation Qt +GenericName[gl]=Explorador de Documentos +GenericName[he]=דפדפן מסמכים +GenericName[hi]=दस्तावेज़़ ब्राउज़र +GenericName[hr]=Preglednik dokumenata +GenericName[hu]=Dokumentumböngésző +GenericName[is]=Skjalavafri +GenericName[it]=Visualizzatore di documenti +GenericName[ja]=ドキュメントブラウザ +GenericName[km]=កម្មវិធី​រុករក​ឯកសារ +GenericName[ko]=문서 탐색기 +GenericName[lo]=ເຄື່ອງມືເລືອກເບິ່ງແຟ້ມເອກະສານ +GenericName[lt]=Dokumentų žiūriklis +GenericName[lv]=Dokumentu Pārlūks +GenericName[mn]=Баримтын хөтөч +GenericName[ms]=Pelungsur Dokumen +GenericName[mt]=Browser ta' Dokumenti +GenericName[nb]=Dokumentleser +GenericName[nds]=Dokmentkieker +GenericName[nl]=Documentbrowser +GenericName[nn]=Dokumentlesar +GenericName[nso]=Seinyakisi sa Tokomane +GenericName[pa]=ਦਸਤਾਵੇਜ਼ ਝਲਕਾਰਾ +GenericName[pl]=Przeglądarka dokumentów +GenericName[pt]=Navegador de Documentos +GenericName[pt_BR]=Navegador de Documentos +GenericName[ro]=Navigator de documente +GenericName[ru]=Программа просмотра документов +GenericName[se]=Dokumeantalogan +GenericName[sk]=Prehliadač dokumentácie +GenericName[sl]=Pregledovalnik dokumentov +GenericName[sr]=Претраживач докумената +GenericName[sr@Latn]=Pretraživač dokumenata +GenericName[ss]=Ibrawuza yelidokhumente +GenericName[sv]=Dokumentbläddrare +GenericName[ta]=ஆவண உலாவி +GenericName[tg]=Тафсири ҳуҷҷат +GenericName[th]=เครื่องมือเลือกดูแฟ้มเอกสาร +GenericName[tr]=Belge Tarayıcısı +GenericName[uk]=Навігатор документів +GenericName[uz]=Ҳужжат браузери +GenericName[ven]=Buronza ya manwalwa +GenericName[vi]=Trình duyệt tài liệu +GenericName[wa]=Foyteu di documints +GenericName[xh]=Umkhangeli Wencwadi Zoxwebhu +GenericName[xx]=xxDocument Browserxx +GenericName[zh_CN]=文档浏览器 +GenericName[zh_TW]=文件閱讀器 +GenericName[zu]=Umcingi Woshicilelo +Icon=assistant-qt5 +Terminal=false +Type=Application +Categories=Qt;Development;Documentation; +Exec=/usr/bin/qtchooser -run-tool=assistant -qt=qt5 +X-KDE-StartupNotify=true diff -Nru qttools-opensource-src-5.7.1/debian/desktop/designer-qt5.desktop qttools-opensource-src-5.9.1/debian/desktop/designer-qt5.desktop --- qttools-opensource-src-5.7.1/debian/desktop/designer-qt5.desktop 1970-01-01 00:00:00.000000000 +0000 +++ qttools-opensource-src-5.9.1/debian/desktop/designer-qt5.desktop 2017-08-16 09:18:33.000000000 +0000 @@ -0,0 +1,89 @@ +[Desktop Entry] +Name=Qt 5 Designer +Name[el]=Σχεδιαστής Qt 5 +Name[hu]=Qt 5 Tervező +Name[it]=Progettazione Qt 5 +Name[ja]=Qt 5デザイナ +Name[km]=កម្មវិធី​រចនា Qt 5 +Name[nl]=Qt 5 ontwerper +Name[pa]=Qt 5 ਡਿਜ਼ਾਇਨਰ +Name[pl]=Projektowanie interfejsów w Qt 5 +Name[ru]=Qt 5 дизайнер +Name[uk]=Дизайнер Qt 5 +Name[zh_CN]=Qt 5 设计器 +Name[zh_TW]=Qt 5 設計師 +GenericName=Interface Designer +GenericName[af]=Koppelvlak Ontwerper +GenericName[ar]=أداة لتصميم واجهة البرامج +GenericName[az]=Ara Üz Tərtibçisi +GenericName[bg]=Дизайнер на интерфейси +GenericName[bn]=ইন্টারফেস পরিকল্পনা +GenericName[bs]=Qt alat za dizajniranje interfejsa +GenericName[ca]=Dissenyador d'interfícies +GenericName[cs]=Návrhář rozhraní +GenericName[cy]=Dylunydd Rhyngwyneb +GenericName[da]=Grænsefladedesigner +GenericName[de]=Schnittstellen-Designer +GenericName[el]=Σχεδιαστής διασυνδέσεων +GenericName[eo]=Interfacdesegnilo +GenericName[es]=Diseñador de interfaces +GenericName[et]=Kasutajaliidese disainer +GenericName[eu]=Interfaze Diseinatzailea +GenericName[fa]=طراح رابط +GenericName[fi]=Käyttöliittymäsuunnittelija +GenericName[fo]=Nýtaramótssniðari +GenericName[fr]=Concepteur d'interface +GenericName[gl]=Deseñador de Interfaces +GenericName[he]=מעצב ממשקים +GenericName[hi]=इंटरफेस डिज़ाइनर +GenericName[hr]=Dizajner sučelja +GenericName[hu]=Felülettervező +GenericName[is]=Viðmótshönnun +GenericName[it]=Disegnatore di interfacce +GenericName[ja]=インターフェースデザイナー +GenericName[km]=កម្មវិធី​រចនា​ចំណុច​ប្រទាក់ +GenericName[ko]=인터페이스 디자이너 +GenericName[lo]=ເຄື່ອງມືອອກແບບສ່ວນຕິດຕໍ່ຜູ້ໃຊ້ +GenericName[lt]=Sąsajos redaktorius +GenericName[lv]=Starsejas Dizainers +GenericName[mn]=Гадаргуун дизайнер +GenericName[ms]=Pereka Antaramuka +GenericName[mt]=Diżinjatur tal-interfaċċji +GenericName[nb]=Utforming av grensesnitt +GenericName[nl]=Interface-ontwerper +GenericName[nn]=Utforming av grensesnitt +GenericName[nso]=Mohlami wa Interface +GenericName[pa]=ਇੰਟਰਫੇਸ ਡਿਜਾਇਨਰ +GenericName[pl]=Projektowanie interfejsów +GenericName[pt]=Editor de Interfaces +GenericName[pt_BR]=Interface do Designer +GenericName[ro]=Dezvoltator de interfeţe +GenericName[ru]=Редактор интерфейса приложений Qt +GenericName[se]=Laktahábmejeaddji +GenericName[sk]=Návrh rozhrania +GenericName[sl]=Snovalnik vmesnikov +GenericName[sr]=Дизајнер интерфејса +GenericName[sr@Latn]=Dizajner interfejsa +GenericName[ss]=Umhleli wesichumanisi +GenericName[sv]=Gränssnittseditor +GenericName[ta]=முகப்புப் வடிவமைப்பாளர் +GenericName[tg]=Тароҳи робита +GenericName[th]=เครื่องมือออกแบบส่วนติดต่อผู้ใช้ +GenericName[tr]=Arayüz tasarım programı +GenericName[uk]=Дизайн інтерфейсу +GenericName[uz]=Интерфейс дизайнери +GenericName[ven]=Muvhati wa nga Phanda +GenericName[vi]=Trình thiết kế giao diện +GenericName[wa]=Dessineu d' eterfaces +GenericName[xh]=Umyili Wezojongongano +GenericName[xx]=xxInterface Designerxx +GenericName[zh_CN]=界面设计器 +GenericName[zh_TW]=界面設計師 +GenericName[zu]=Umakhi Womxhumanisi +Icon=designer-qt5 +Terminal=false +Type=Application +MimeType=application/x-designer; +Categories=Qt;Development;GUIDesigner; +Exec=/usr/bin/qtchooser -run-tool=designer -qt=qt5 +X-KDE-StartupNotify=true diff -Nru qttools-opensource-src-5.7.1/debian/desktop/linguist-qt5.desktop qttools-opensource-src-5.9.1/debian/desktop/linguist-qt5.desktop --- qttools-opensource-src-5.7.1/debian/desktop/linguist-qt5.desktop 1970-01-01 00:00:00.000000000 +0000 +++ qttools-opensource-src-5.9.1/debian/desktop/linguist-qt5.desktop 2017-08-16 09:18:33.000000000 +0000 @@ -0,0 +1,84 @@ +[Desktop Entry] +Name=Qt 5 Linguist +Name[hu]=Qt 5 Nyelvész +Name[ja]=Qt 5リンギスト +Name[km]=ភាសាវិទូ Qt 5 +Name[nb]=Qt 5-Linguist +Name[pa]=Qt 5 ਅਨੁਵਾਦਕ +Name[pl]=Lingwista Qt 5 +Name[zh_TW]=Qt 5 語言專家 +GenericName=Translation Tool +GenericName[af]=Vertaling Program +GenericName[ar]=أداة للترجمة +GenericName[az]=Tərcümə Vasitəsi +GenericName[bg]=Инструмент за превод +GenericName[bn]=অনুবাদ টুল +GenericName[bs]=Alat za prevođenje +GenericName[ca]=Eina de traducció +GenericName[cs]=Překladatelský nástroj +GenericName[cy]=Erfyn Cyfieithu +GenericName[da]=Oversættelsesværktøj +GenericName[de]=Übersetzungsprogramm +GenericName[el]=Εργαλείο μεταφράσεων +GenericName[eo]=Tradukilo por Qt-programoj +GenericName[es]=Herramienta de traducción +GenericName[et]=Tõlkimise rakendus +GenericName[eu]=Itzulpenerako Tresnak +GenericName[fa]=ابزار ترجمه +GenericName[fi]=Käännöstyökalu +GenericName[fo]=Umsetingaramboð +GenericName[fr]=Outil de traduction +GenericName[gl]=Ferramenta de Traducción +GenericName[he]=כלי תרגום +GenericName[hi]=अनुवाद उपकरण +GenericName[hr]=Uslužni program za prevođenje +GenericName[hu]=Fordítássegítő +GenericName[is]=Þýðingartól +GenericName[it]=Strumento per le traduzioni +GenericName[ja]=翻訳ツール +GenericName[km]=ឧបករណ៍​បកប្រែ +GenericName[ko]=번역 도구 +GenericName[lo]=ເຄື່ອງມືແປພາສາ +GenericName[lt]=Vertimo įrankis +GenericName[lv]=Tulkošanas Rīks +GenericName[mn]=Орчуулгын програм +GenericName[ms]=Perkakasan Penterjemahan +GenericName[mt]=Għodda tat-traduzzjoni +GenericName[nb]=Oversettelsesverktøy +GenericName[nl]=Vertaalprogramma +GenericName[nn]=Omsetjingsverktøy +GenericName[nso]=Sebereka sa Thlathollo +GenericName[pa]=ਅਨੁਵਾਦ ਸੰਦ +GenericName[pl]=Narzędzie dla tłumaczy +GenericName[pt]=Ferramenta de Tradução +GenericName[pt_BR]=Ferramenta de Tradução +GenericName[ro]=Utilitar de traducere +GenericName[ru]=Утилита локализации приложений +GenericName[se]=Jorgalanneavvu +GenericName[sk]=Prekladací nástroj +GenericName[sl]=Orodje za prevajanje +GenericName[sr]=Алат за превођење +GenericName[sr@Latn]=Alat za prevođenje +GenericName[ss]=Lithulusi lekuhumusha +GenericName[sv]=Översättningsverktyg +GenericName[ta]=மொழிபெயர்ப்புக் கருவி +GenericName[tg]=Тарҷумагар барои QT +GenericName[th]=เครื่องมือแปลภาษา +GenericName[tr]=Çeviri Aracı +GenericName[uk]=Засіб для перекладів +GenericName[uz]=Таржима қилиш воситаси +GenericName[ven]=Zwishumiswa zwau Dologa +GenericName[vi]=Công cụ dịch +GenericName[wa]=Usteye di ratournaedje +GenericName[xh]=Isixhobo Soguqulelo lomsebenzi kolunye ulwimi +GenericName[xx]=xxTranslation Toolxx +GenericName[zh_CN]=翻译工具 +GenericName[zh_TW]=翻譯工具 +GenericName[zu]=Ithuluzi Lokuguqulela +Icon=linguist-qt5 +Terminal=false +Type=Application +MimeType=application/x-linguist; +Categories=Qt;Development;Translation; +Exec=/usr/bin/qtchooser -run-tool=linguist -qt=qt5 +X-KDE-StartupNotify=true diff -Nru qttools-opensource-src-5.7.1/debian/libqt5clucene5.install qttools-opensource-src-5.9.1/debian/libqt5clucene5.install --- qttools-opensource-src-5.7.1/debian/libqt5clucene5.install 2016-12-16 19:21:55.000000000 +0000 +++ qttools-opensource-src-5.9.1/debian/libqt5clucene5.install 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -usr/lib/*/libQt5CLucene.so.5* diff -Nru qttools-opensource-src-5.7.1/debian/libqt5clucene5.symbols qttools-opensource-src-5.9.1/debian/libqt5clucene5.symbols --- qttools-opensource-src-5.7.1/debian/libqt5clucene5.symbols 2016-12-16 19:21:55.000000000 +0000 +++ qttools-opensource-src-5.9.1/debian/libqt5clucene5.symbols 1970-01-01 00:00:00.000000000 +0000 @@ -1,558 +0,0 @@ -# SymbolsHelper-Confirmed: 5.7.1 amd64 -libQt5CLucene.so.5 libqt5clucene5 #MINVER# -* Build-Depends-Package: qttools5-private-dev - Qt_5_PRIVATE_API@Qt_5_PRIVATE_API 5.6.0~beta - _ZN12QCLuceneHits2idEi@Qt_5_PRIVATE_API 5.6.0~beta - _ZN12QCLuceneHits5scoreEi@Qt_5_PRIVATE_API 5.6.0~beta - _ZN12QCLuceneHits8documentEi@Qt_5_PRIVATE_API 5.6.0~beta - _ZN12QCLuceneHitsC1ERK16QCLuceneSearcherRK13QCLuceneQueryRK14QCLuceneFilter@Qt_5_PRIVATE_API 5.6.0~beta - _ZN12QCLuceneHitsC1ERK16QCLuceneSearcherRK13QCLuceneQueryRK14QCLuceneFilterRK12QCLuceneSort@Qt_5_PRIVATE_API 5.6.0~beta - _ZN12QCLuceneHitsC2ERK16QCLuceneSearcherRK13QCLuceneQueryRK14QCLuceneFilter@Qt_5_PRIVATE_API 5.6.0~beta - _ZN12QCLuceneHitsC2ERK16QCLuceneSearcherRK13QCLuceneQueryRK14QCLuceneFilterRK12QCLuceneSort@Qt_5_PRIVATE_API 5.6.0~beta - _ZN12QCLuceneHitsD0Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN12QCLuceneHitsD1Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN12QCLuceneHitsD2Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN12QCLuceneSort7setSortERK11QStringList@Qt_5_PRIVATE_API 5.6.0~beta - _ZN12QCLuceneSort7setSortERK7QStringb@Qt_5_PRIVATE_API 5.6.0~beta - _ZN12QCLuceneSortC1ERK11QStringList@Qt_5_PRIVATE_API 5.6.0~beta - _ZN12QCLuceneSortC1ERK7QStringb@Qt_5_PRIVATE_API 5.6.0~beta - _ZN12QCLuceneSortC1Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN12QCLuceneSortC2ERK11QStringList@Qt_5_PRIVATE_API 5.6.0~beta - _ZN12QCLuceneSortC2ERK7QStringb@Qt_5_PRIVATE_API 5.6.0~beta - _ZN12QCLuceneSortC2Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN12QCLuceneSortD0Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN12QCLuceneSortD1Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN12QCLuceneSortD2Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN12QCLuceneTerm3setERK7QStringS2_@Qt_5_PRIVATE_API 5.6.0~beta - _ZN12QCLuceneTerm3setERK7QStringS2_b@Qt_5_PRIVATE_API 5.6.0~beta - _ZN12QCLuceneTerm3setERKS_RK7QString@Qt_5_PRIVATE_API 5.6.0~beta - _ZN12QCLuceneTermC1ERK7QStringS2_@Qt_5_PRIVATE_API 5.6.0~beta - _ZN12QCLuceneTermC1ERKS_RK7QString@Qt_5_PRIVATE_API 5.6.0~beta - _ZN12QCLuceneTermC1Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN12QCLuceneTermC2ERK7QStringS2_@Qt_5_PRIVATE_API 5.6.0~beta - _ZN12QCLuceneTermC2ERKS_RK7QString@Qt_5_PRIVATE_API 5.6.0~beta - _ZN12QCLuceneTermC2Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN12QCLuceneTermD0Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN12QCLuceneTermD1Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN12QCLuceneTermD2Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN13QCLuceneField12setOmitNormsEb@Qt_5_PRIVATE_API 5.6.0~beta - _ZN13QCLuceneField8setBoostEd@Qt_5_PRIVATE_API 5.6.0~beta - _ZN13QCLuceneField9setConfigEi@Qt_5_PRIVATE_API 5.6.0~beta - _ZN13QCLuceneFieldC1ERK7QStringP14QCLuceneReaderi@Qt_5_PRIVATE_API 5.6.0~beta - _ZN13QCLuceneFieldC1ERK7QStringS2_i@Qt_5_PRIVATE_API 5.6.0~beta - _ZN13QCLuceneFieldC1Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN13QCLuceneFieldC2ERK7QStringP14QCLuceneReaderi@Qt_5_PRIVATE_API 5.6.0~beta - _ZN13QCLuceneFieldC2ERK7QStringS2_i@Qt_5_PRIVATE_API 5.6.0~beta - _ZN13QCLuceneFieldC2Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN13QCLuceneFieldD1Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN13QCLuceneFieldD2Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN13QCLuceneQuery8setBoostEd@Qt_5_PRIVATE_API 5.6.0~beta - _ZN13QCLuceneQueryC1Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN13QCLuceneQueryC2Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN13QCLuceneQueryD0Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN13QCLuceneQueryD1Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN13QCLuceneQueryD2Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN13QCLuceneToken10growBufferEj@Qt_5_PRIVATE_API 5.6.0~beta - _ZN13QCLuceneToken11setTermTextERK7QString@Qt_5_PRIVATE_API 5.6.0~beta - _ZN13QCLuceneToken12setEndOffsetEi@Qt_5_PRIVATE_API 5.6.0~beta - _ZN13QCLuceneToken14setStartOffsetEi@Qt_5_PRIVATE_API 5.6.0~beta - _ZN13QCLuceneToken20setPositionIncrementEi@Qt_5_PRIVATE_API 5.6.0~beta - _ZN13QCLuceneToken7setTypeERK7QString@Qt_5_PRIVATE_API 5.6.0~beta - _ZN13QCLuceneTokenC1ERK7QStringiiS2_@Qt_5_PRIVATE_API 5.6.0~beta - _ZN13QCLuceneTokenC1Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN13QCLuceneTokenC2ERK7QStringiiS2_@Qt_5_PRIVATE_API 5.6.0~beta - _ZN13QCLuceneTokenC2Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN13QCLuceneTokenD0Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN13QCLuceneTokenD1Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN13QCLuceneTokenD2Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN14QCLuceneFilterC1Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN14QCLuceneFilterC2Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN14QCLuceneFilterD0Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN14QCLuceneFilterD1Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN14QCLuceneFilterD2Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN14QCLuceneReaderC1Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN14QCLuceneReaderC2Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN14QCLuceneReaderD0Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN14QCLuceneReaderD1Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN14QCLuceneReaderD2Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN16QCLuceneAnalyzerC1Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN16QCLuceneAnalyzerC2Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN16QCLuceneAnalyzerD0Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN16QCLuceneAnalyzerD1Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN16QCLuceneAnalyzerD2Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN16QCLuceneDocument11removeFieldERK7QString@Qt_5_PRIVATE_API 5.6.0~beta - _ZN16QCLuceneDocument12removeFieldsERK7QString@Qt_5_PRIVATE_API 5.6.0~beta - _ZN16QCLuceneDocument3addEP13QCLuceneField@Qt_5_PRIVATE_API 5.6.0~beta - _ZN16QCLuceneDocument5clearEv@Qt_5_PRIVATE_API 5.6.0~beta - _ZN16QCLuceneDocument8setBoostEd@Qt_5_PRIVATE_API 5.6.0~beta - _ZN16QCLuceneDocumentC1Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN16QCLuceneDocumentC2Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN16QCLuceneDocumentD1Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN16QCLuceneDocumentD2Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN16QCLuceneSearcher6searchERK13QCLuceneQuery@Qt_5_PRIVATE_API 5.6.0~beta - _ZN16QCLuceneSearcher6searchERK13QCLuceneQueryRK12QCLuceneSort@Qt_5_PRIVATE_API 5.6.0~beta - _ZN16QCLuceneSearcher6searchERK13QCLuceneQueryRK14QCLuceneFilter@Qt_5_PRIVATE_API 5.6.0~beta - _ZN16QCLuceneSearcher6searchERK13QCLuceneQueryRK14QCLuceneFilterRK12QCLuceneSort@Qt_5_PRIVATE_API 5.6.0~beta - _ZN16QCLuceneSearcherC1Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN16QCLuceneSearcherC2Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN16QCLuceneSearcherD0Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN16QCLuceneSearcherD1Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN16QCLuceneSearcherD2Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN17QCLuceneTermQuery12getClassNameEv@Qt_5_PRIVATE_API 5.6.0~beta - _ZN17QCLuceneTermQueryC1ERK12QCLuceneTerm@Qt_5_PRIVATE_API 5.6.0~beta - _ZN17QCLuceneTermQueryC2ERK12QCLuceneTerm@Qt_5_PRIVATE_API 5.6.0~beta - _ZN17QCLuceneTermQueryD0Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN17QCLuceneTermQueryD1Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN17QCLuceneTermQueryD2Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN17QCLuceneTokenizer4nextER13QCLuceneToken@Qt_5_PRIVATE_API 5.6.0~beta - _ZN17QCLuceneTokenizer5closeEv@Qt_5_PRIVATE_API 5.6.0~beta - _ZN17QCLuceneTokenizerC1ERK14QCLuceneReader@Qt_5_PRIVATE_API 5.6.0~beta - _ZN17QCLuceneTokenizerC1Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN17QCLuceneTokenizerC2ERK14QCLuceneReader@Qt_5_PRIVATE_API 5.6.0~beta - _ZN17QCLuceneTokenizerC2Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN17QCLuceneTokenizerD0Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN17QCLuceneTokenizerD1Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN17QCLuceneTokenizerD2Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN18QCLuceneFileReaderC1ERK7QStringS2_ii@Qt_5_PRIVATE_API 5.6.0~beta - _ZN18QCLuceneFileReaderC2ERK7QStringS2_ii@Qt_5_PRIVATE_API 5.6.0~beta - _ZN18QCLuceneFileReaderD0Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN18QCLuceneFileReaderD1Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN18QCLuceneFileReaderD2Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN18QCLuceneRangeQuery12getClassNameEv@Qt_5_PRIVATE_API 5.6.0~beta - _ZN18QCLuceneRangeQueryC1ERK12QCLuceneTermS2_b@Qt_5_PRIVATE_API 5.6.0~beta - _ZN18QCLuceneRangeQueryC2ERK12QCLuceneTermS2_b@Qt_5_PRIVATE_API 5.6.0~beta - _ZN18QCLuceneRangeQueryD0Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN18QCLuceneRangeQueryD1Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN18QCLuceneRangeQueryD2Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN18QCLuceneSearchableC1Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN18QCLuceneSearchableC2Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN18QCLuceneSearchableD0Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN18QCLuceneSearchableD1Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN18QCLuceneSearchableD2Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN19QCLuceneHitsPrivateC1ERKS_@Qt_5_PRIVATE_API 5.6.0~beta - _ZN19QCLuceneHitsPrivateC1Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN19QCLuceneHitsPrivateC2ERKS_@Qt_5_PRIVATE_API 5.6.0~beta - _ZN19QCLuceneHitsPrivateC2Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN19QCLuceneHitsPrivateD1Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN19QCLuceneHitsPrivateD2Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN19QCLuceneIndexReader10getVersionEv@Qt_5_PRIVATE_API 5.6.0~beta - _ZN19QCLuceneIndexReader11indexExistsERK7QString@Qt_5_PRIVATE_API 5.6.0~beta - _ZN19QCLuceneIndexReader11undeleteAllEv@Qt_5_PRIVATE_API 5.6.0~beta - _ZN19QCLuceneIndexReader12isLuceneFileERK7QString@Qt_5_PRIVATE_API 5.6.0~beta - _ZN19QCLuceneIndexReader12lastModifiedERK7QString@Qt_5_PRIVATE_API 5.6.0~beta - _ZN19QCLuceneIndexReader14deleteDocumentEi@Qt_5_PRIVATE_API 5.6.0~beta - _ZN19QCLuceneIndexReader15deleteDocumentsERK12QCLuceneTerm@Qt_5_PRIVATE_API 5.6.0~beta - _ZN19QCLuceneIndexReader17getCurrentVersionERK7QString@Qt_5_PRIVATE_API 5.6.0~beta - _ZN19QCLuceneIndexReader4openERK7QString@Qt_5_PRIVATE_API 5.6.0~beta - _ZN19QCLuceneIndexReader5closeEv@Qt_5_PRIVATE_API 5.6.0~beta - _ZN19QCLuceneIndexReader6unlockERK7QString@Qt_5_PRIVATE_API 5.6.0~beta - _ZN19QCLuceneIndexReader7setNormEiRK7QStringd@Qt_5_PRIVATE_API 5.6.0~beta - _ZN19QCLuceneIndexReader7setNormEiRK7QStringh@Qt_5_PRIVATE_API 5.6.0~beta - _ZN19QCLuceneIndexReader8documentEiR16QCLuceneDocument@Qt_5_PRIVATE_API 5.6.0~beta - _ZN19QCLuceneIndexReader8hasNormsERK7QString@Qt_5_PRIVATE_API 5.6.0~beta - _ZN19QCLuceneIndexReader8isLockedERK7QString@Qt_5_PRIVATE_API 5.6.0~beta - _ZN19QCLuceneIndexReader9isCurrentEv@Qt_5_PRIVATE_API 5.6.0~beta - _ZN19QCLuceneIndexReaderC1Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN19QCLuceneIndexReaderC2Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN19QCLuceneIndexReaderD0Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN19QCLuceneIndexReaderD1Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN19QCLuceneIndexReaderD2Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN19QCLuceneIndexWriter10addIndexesERK5QListIP19QCLuceneIndexReaderE@Qt_5_PRIVATE_API 5.6.0~beta - _ZN19QCLuceneIndexWriter11addDocumentER16QCLuceneDocumentR16QCLuceneAnalyzer@Qt_5_PRIVATE_API 5.6.0~beta - _ZN19QCLuceneIndexWriter11getAnalyzerEv@Qt_5_PRIVATE_API 5.6.0~beta - _ZN19QCLuceneIndexWriter14setMergeFactorEi@Qt_5_PRIVATE_API 5.6.0~beta - _ZN19QCLuceneIndexWriter15setMaxMergeDocsEi@Qt_5_PRIVATE_API 5.6.0~beta - _ZN19QCLuceneIndexWriter15setMinMergeDocsEi@Qt_5_PRIVATE_API 5.6.0~beta - _ZN19QCLuceneIndexWriter17setMaxFieldLengthEi@Qt_5_PRIVATE_API 5.6.0~beta - _ZN19QCLuceneIndexWriter18setMaxBufferedDocsEi@Qt_5_PRIVATE_API 5.6.0~beta - _ZN19QCLuceneIndexWriter18setUseCompoundFileEb@Qt_5_PRIVATE_API 5.6.0~beta - _ZN19QCLuceneIndexWriter19setWriteLockTimeoutEx@Qt_5_PRIVATE_API 5.6.0~beta - _ZN19QCLuceneIndexWriter20setCommitLockTimeoutEx@Qt_5_PRIVATE_API 5.6.0~beta - _ZN19QCLuceneIndexWriter20setTermIndexIntervalEi@Qt_5_PRIVATE_API 5.6.0~beta - _ZN19QCLuceneIndexWriter5closeEv@Qt_5_PRIVATE_API 5.6.0~beta - _ZN19QCLuceneIndexWriter8docCountEv@Qt_5_PRIVATE_API 5.6.0~beta - _ZN19QCLuceneIndexWriter8optimizeEv@Qt_5_PRIVATE_API 5.6.0~beta - _ZN19QCLuceneIndexWriterC1ERK7QStringR16QCLuceneAnalyzerbb@Qt_5_PRIVATE_API 5.6.0~beta - _ZN19QCLuceneIndexWriterC2ERK7QStringR16QCLuceneAnalyzerbb@Qt_5_PRIVATE_API 5.6.0~beta - _ZN19QCLuceneIndexWriterD0Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN19QCLuceneIndexWriterD1Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN19QCLuceneIndexWriterD2Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN19QCLucenePhraseQuery12getClassNameEv@Qt_5_PRIVATE_API 5.6.0~beta - _ZN19QCLucenePhraseQuery7addTermERK12QCLuceneTerm@Qt_5_PRIVATE_API 5.6.0~beta - _ZN19QCLucenePhraseQuery7addTermERK12QCLuceneTermi@Qt_5_PRIVATE_API 5.6.0~beta - _ZN19QCLucenePhraseQuery7setSlopEi@Qt_5_PRIVATE_API 5.6.0~beta - _ZN19QCLucenePhraseQueryC1Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN19QCLucenePhraseQueryC2Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN19QCLucenePhraseQueryD0Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN19QCLucenePhraseQueryD1Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN19QCLucenePhraseQueryD2Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN19QCLucenePrefixQuery12getClassNameEv@Qt_5_PRIVATE_API 5.6.0~beta - _ZN19QCLucenePrefixQueryC1ERK12QCLuceneTerm@Qt_5_PRIVATE_API 5.6.0~beta - _ZN19QCLucenePrefixQueryC2ERK12QCLuceneTerm@Qt_5_PRIVATE_API 5.6.0~beta - _ZN19QCLucenePrefixQueryD0Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN19QCLucenePrefixQueryD1Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN19QCLucenePrefixQueryD2Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN19QCLuceneQueryParser11getAnalyzerEv@Qt_5_PRIVATE_API 5.6.0~beta - _ZN19QCLuceneQueryParser5parseER14QCLuceneReader@Qt_5_PRIVATE_API 5.6.0~beta - _ZN19QCLuceneQueryParser5parseERK7QString@Qt_5_PRIVATE_API 5.6.0~beta - _ZN19QCLuceneQueryParser5parseERK7QStringS2_R16QCLuceneAnalyzer@Qt_5_PRIVATE_API 5.6.0~beta - _ZN19QCLuceneQueryParser8getFieldEv@Qt_5_PRIVATE_API 5.6.0~beta - _ZN19QCLuceneQueryParserC1ERK7QStringR16QCLuceneAnalyzer@Qt_5_PRIVATE_API 5.6.0~beta - _ZN19QCLuceneQueryParserC2ERK7QStringR16QCLuceneAnalyzer@Qt_5_PRIVATE_API 5.6.0~beta - _ZN19QCLuceneQueryParserD0Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN19QCLuceneQueryParserD1Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN19QCLuceneQueryParserD2Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN19QCLuceneSortPrivateC1ERKS_@Qt_5_PRIVATE_API 5.6.0~beta - _ZN19QCLuceneSortPrivateC1Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN19QCLuceneSortPrivateC2ERKS_@Qt_5_PRIVATE_API 5.6.0~beta - _ZN19QCLuceneSortPrivateC2Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN19QCLuceneSortPrivateD1Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN19QCLuceneSortPrivateD2Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN19QCLuceneTermPrivateC1ERKS_@Qt_5_PRIVATE_API 5.6.0~beta - _ZN19QCLuceneTermPrivateC1Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN19QCLuceneTermPrivateC2ERKS_@Qt_5_PRIVATE_API 5.6.0~beta - _ZN19QCLuceneTermPrivateC2Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN19QCLuceneTermPrivateD1Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN19QCLuceneTermPrivateD2Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN19QCLuceneTokenStream4nextER13QCLuceneToken@Qt_5_PRIVATE_API 5.6.0~beta - _ZN19QCLuceneTokenStream5closeEv@Qt_5_PRIVATE_API 5.6.0~beta - _ZN19QCLuceneTokenStreamC1Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN19QCLuceneTokenStreamC2Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN19QCLuceneTokenStreamD0Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN19QCLuceneTokenStreamD1Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN19QCLuceneTokenStreamD2Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN20QCLuceneBooleanQuery12getClassNameEv@Qt_5_PRIVATE_API 5.6.0~beta - _ZN20QCLuceneBooleanQuery17setMaxClauseCountEj@Qt_5_PRIVATE_API 5.6.0~beta - _ZN20QCLuceneBooleanQuery3addEP13QCLuceneQuerybb@Qt_5_PRIVATE_API 5.6.0~beta - _ZN20QCLuceneBooleanQuery3addEP13QCLuceneQuerybbb@Qt_5_PRIVATE_API 5.6.0~beta - _ZN20QCLuceneBooleanQueryC1Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN20QCLuceneBooleanQueryC2Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN20QCLuceneBooleanQueryD0Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN20QCLuceneBooleanQueryD1Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN20QCLuceneBooleanQueryD2Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN20QCLuceneFieldPrivateC1ERKS_@Qt_5_PRIVATE_API 5.6.0~beta - _ZN20QCLuceneFieldPrivateC1Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN20QCLuceneFieldPrivateC2ERKS_@Qt_5_PRIVATE_API 5.6.0~beta - _ZN20QCLuceneFieldPrivateC2Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN20QCLuceneFieldPrivateD1Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN20QCLuceneFieldPrivateD2Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN20QCLuceneQueryPrivateC1ERKS_@Qt_5_PRIVATE_API 5.6.0~beta - _ZN20QCLuceneQueryPrivateC1Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN20QCLuceneQueryPrivateC2ERKS_@Qt_5_PRIVATE_API 5.6.0~beta - _ZN20QCLuceneQueryPrivateC2Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN20QCLuceneQueryPrivateD1Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN20QCLuceneQueryPrivateD2Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN20QCLuceneStopAnalyzerC1ERK11QStringList@Qt_5_PRIVATE_API 5.6.0~beta - _ZN20QCLuceneStopAnalyzerC1Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN20QCLuceneStopAnalyzerC2ERK11QStringList@Qt_5_PRIVATE_API 5.6.0~beta - _ZN20QCLuceneStopAnalyzerC2Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN20QCLuceneStopAnalyzerD0Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN20QCLuceneStopAnalyzerD1Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN20QCLuceneStopAnalyzerD2Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN20QCLuceneTokenPrivateC1ERKS_@Qt_5_PRIVATE_API 5.6.0~beta - _ZN20QCLuceneTokenPrivateC1Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN20QCLuceneTokenPrivateC2ERKS_@Qt_5_PRIVATE_API 5.6.0~beta - _ZN20QCLuceneTokenPrivateC2Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN20QCLuceneTokenPrivateD1Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN20QCLuceneTokenPrivateD2Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN21QCLuceneFilterPrivateC1ERKS_@Qt_5_PRIVATE_API 5.6.0~beta - _ZN21QCLuceneFilterPrivateC1Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN21QCLuceneFilterPrivateC2ERKS_@Qt_5_PRIVATE_API 5.6.0~beta - _ZN21QCLuceneFilterPrivateC2Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN21QCLuceneFilterPrivateD1Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN21QCLuceneFilterPrivateD2Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN21QCLuceneIndexSearcher3docEiR16QCLuceneDocument@Qt_5_PRIVATE_API 5.6.0~beta - _ZN21QCLuceneIndexSearcher5closeEv@Qt_5_PRIVATE_API 5.6.0~beta - _ZN21QCLuceneIndexSearcher9getReaderEv@Qt_5_PRIVATE_API 5.6.0~beta - _ZN21QCLuceneIndexSearcherC1ERK19QCLuceneIndexReader@Qt_5_PRIVATE_API 5.6.0~beta - _ZN21QCLuceneIndexSearcherC1ERK7QString@Qt_5_PRIVATE_API 5.6.0~beta - _ZN21QCLuceneIndexSearcherC2ERK19QCLuceneIndexReader@Qt_5_PRIVATE_API 5.6.0~beta - _ZN21QCLuceneIndexSearcherC2ERK7QString@Qt_5_PRIVATE_API 5.6.0~beta - _ZN21QCLuceneIndexSearcherD0Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN21QCLuceneIndexSearcherD1Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN21QCLuceneIndexSearcherD2Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN21QCLuceneMultiSearcher3docEiR16QCLuceneDocument@Qt_5_PRIVATE_API 5.6.0~beta - _ZN21QCLuceneMultiSearcher5closeEv@Qt_5_PRIVATE_API 5.6.0~beta - _ZN21QCLuceneMultiSearcherC1E5QListI18QCLuceneSearchableE@Qt_5_PRIVATE_API 5.6.0~beta - _ZN21QCLuceneMultiSearcherC2E5QListI18QCLuceneSearchableE@Qt_5_PRIVATE_API 5.6.0~beta - _ZN21QCLuceneMultiSearcherD0Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN21QCLuceneMultiSearcherD1Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN21QCLuceneMultiSearcherD2Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN21QCLuceneReaderPrivateC1ERKS_@Qt_5_PRIVATE_API 5.6.0~beta - _ZN21QCLuceneReaderPrivateC1Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN21QCLuceneReaderPrivateC2ERKS_@Qt_5_PRIVATE_API 5.6.0~beta - _ZN21QCLuceneReaderPrivateC2Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN21QCLuceneReaderPrivateD1Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN21QCLuceneReaderPrivateD2Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN22QCLuceneSimpleAnalyzerC1Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN22QCLuceneSimpleAnalyzerC2Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN22QCLuceneSimpleAnalyzerD0Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN22QCLuceneSimpleAnalyzerD1Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN22QCLuceneSimpleAnalyzerD2Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN23QCLuceneAnalyzerPrivateC1ERKS_@Qt_5_PRIVATE_API 5.6.0~beta - _ZN23QCLuceneAnalyzerPrivateC1Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN23QCLuceneAnalyzerPrivateC2ERKS_@Qt_5_PRIVATE_API 5.6.0~beta - _ZN23QCLuceneAnalyzerPrivateC2Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN23QCLuceneAnalyzerPrivateD1Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN23QCLuceneAnalyzerPrivateD2Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN23QCLuceneDocumentPrivateC1ERKS_@Qt_5_PRIVATE_API 5.6.0~beta - _ZN23QCLuceneDocumentPrivateC1Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN23QCLuceneDocumentPrivateC2ERKS_@Qt_5_PRIVATE_API 5.6.0~beta - _ZN23QCLuceneDocumentPrivateC2Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN23QCLuceneDocumentPrivateD1Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN23QCLuceneDocumentPrivateD2Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN23QCLuceneKeywordAnalyzerC1Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN23QCLuceneKeywordAnalyzerC2Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN23QCLuceneKeywordAnalyzerD0Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN23QCLuceneKeywordAnalyzerD1Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN23QCLuceneKeywordAnalyzerD2Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN24QCLuceneStandardAnalyzerC1ERK11QStringList@Qt_5_PRIVATE_API 5.6.0~beta - _ZN24QCLuceneStandardAnalyzerC1Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN24QCLuceneStandardAnalyzerC2ERK11QStringList@Qt_5_PRIVATE_API 5.6.0~beta - _ZN24QCLuceneStandardAnalyzerC2Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN24QCLuceneStandardAnalyzerD0Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN24QCLuceneStandardAnalyzerD1Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN24QCLuceneStandardAnalyzerD2Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN25QCLuceneSearchablePrivateC1ERKS_@Qt_5_PRIVATE_API 5.6.0~beta - _ZN25QCLuceneSearchablePrivateC1Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN25QCLuceneSearchablePrivateC2ERKS_@Qt_5_PRIVATE_API 5.6.0~beta - _ZN25QCLuceneSearchablePrivateC2Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN25QCLuceneSearchablePrivateD1Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN25QCLuceneSearchablePrivateD2Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN25QCLuceneStandardTokenizer11readCompanyERK7QStringR13QCLuceneToken@Qt_5_PRIVATE_API 5.6.0~beta - _ZN25QCLuceneStandardTokenizer14readApostropheERK7QStringR13QCLuceneToken@Qt_5_PRIVATE_API 5.6.0~beta - _ZN25QCLuceneStandardTokenizer6readAtERK7QStringR13QCLuceneToken@Qt_5_PRIVATE_API 5.6.0~beta - _ZN25QCLuceneStandardTokenizerC1ERK14QCLuceneReader@Qt_5_PRIVATE_API 5.6.0~beta - _ZN25QCLuceneStandardTokenizerC2ERK14QCLuceneReader@Qt_5_PRIVATE_API 5.6.0~beta - _ZN25QCLuceneStandardTokenizerD0Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN25QCLuceneStandardTokenizerD1Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN25QCLuceneStandardTokenizerD2Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN26QCLuceneIndexReaderPrivateC1ERKS_@Qt_5_PRIVATE_API 5.6.0~beta - _ZN26QCLuceneIndexReaderPrivateC1Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN26QCLuceneIndexReaderPrivateC2ERKS_@Qt_5_PRIVATE_API 5.6.0~beta - _ZN26QCLuceneIndexReaderPrivateC2Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN26QCLuceneIndexReaderPrivateD1Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN26QCLuceneIndexReaderPrivateD2Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN26QCLuceneIndexWriterPrivateC1ERKS_@Qt_5_PRIVATE_API 5.6.0~beta - _ZN26QCLuceneIndexWriterPrivateC1Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN26QCLuceneIndexWriterPrivateC2ERKS_@Qt_5_PRIVATE_API 5.6.0~beta - _ZN26QCLuceneIndexWriterPrivateC2Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN26QCLuceneIndexWriterPrivateD1Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN26QCLuceneIndexWriterPrivateD2Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN26QCLuceneQueryParserPrivateC1ERKS_@Qt_5_PRIVATE_API 5.6.0~beta - _ZN26QCLuceneQueryParserPrivateC1Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN26QCLuceneQueryParserPrivateC2ERKS_@Qt_5_PRIVATE_API 5.6.0~beta - _ZN26QCLuceneQueryParserPrivateC2Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN26QCLuceneQueryParserPrivateD1Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN26QCLuceneQueryParserPrivateD2Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN26QCLuceneTokenStreamPrivateC1ERKS_@Qt_5_PRIVATE_API 5.6.0~beta - _ZN26QCLuceneTokenStreamPrivateC1Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN26QCLuceneTokenStreamPrivateC2ERKS_@Qt_5_PRIVATE_API 5.6.0~beta - _ZN26QCLuceneTokenStreamPrivateC2Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN26QCLuceneTokenStreamPrivateD1Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN26QCLuceneTokenStreamPrivateD2Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN26QCLuceneWhitespaceAnalyzerC1Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN26QCLuceneWhitespaceAnalyzerC2Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN26QCLuceneWhitespaceAnalyzerD0Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN26QCLuceneWhitespaceAnalyzerD1Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN26QCLuceneWhitespaceAnalyzerD2Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN29QCLuceneMultiFieldQueryParser5parseERK7QStringRK11QStringList5QListINS_10FieldFlagsEER16QCLuceneAnalyzer@Qt_5_PRIVATE_API 5.6.0~beta - _ZN29QCLuceneMultiFieldQueryParser5parseERK7QStringRK11QStringListR16QCLuceneAnalyzer@Qt_5_PRIVATE_API 5.6.0~beta - _ZN29QCLuceneMultiFieldQueryParserC1ERK11QStringListR16QCLuceneAnalyzer@Qt_5_PRIVATE_API 5.6.0~beta - _ZN29QCLuceneMultiFieldQueryParserC2ERK11QStringListR16QCLuceneAnalyzer@Qt_5_PRIVATE_API 5.6.0~beta - _ZN29QCLuceneMultiFieldQueryParserD0Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN29QCLuceneMultiFieldQueryParserD1Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN29QCLuceneMultiFieldQueryParserD2Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN31QCLucenePerFieldAnalyzerWrapper11addAnalyzerERK7QStringP16QCLuceneAnalyzer@Qt_5_PRIVATE_API 5.6.0~beta - _ZN31QCLucenePerFieldAnalyzerWrapperC1EP16QCLuceneAnalyzer@Qt_5_PRIVATE_API 5.6.0~beta - _ZN31QCLucenePerFieldAnalyzerWrapperC2EP16QCLuceneAnalyzer@Qt_5_PRIVATE_API 5.6.0~beta - _ZN31QCLucenePerFieldAnalyzerWrapperD0Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN31QCLucenePerFieldAnalyzerWrapperD1Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZN31QCLucenePerFieldAnalyzerWrapperD2Ev@Qt_5_PRIVATE_API 5.6.0~beta - _ZNK12QCLuceneHits6lengthEv@Qt_5_PRIVATE_API 5.6.0~beta - _ZNK12QCLuceneSort8toStringEv@Qt_5_PRIVATE_API 5.6.0~beta - _ZNK12QCLuceneTerm10textLengthEv@Qt_5_PRIVATE_API 5.6.0~beta - _ZNK12QCLuceneTerm4textEv@Qt_5_PRIVATE_API 5.6.0~beta - _ZNK12QCLuceneTerm5fieldEv@Qt_5_PRIVATE_API 5.6.0~beta - _ZNK12QCLuceneTerm6equalsERKS_@Qt_5_PRIVATE_API 5.6.0~beta - _ZNK12QCLuceneTerm8hashCodeEv@Qt_5_PRIVATE_API 5.6.0~beta - _ZNK12QCLuceneTerm8toStringEv@Qt_5_PRIVATE_API 5.6.0~beta - _ZNK12QCLuceneTerm9compareToERKS_@Qt_5_PRIVATE_API 5.6.0~beta - _ZNK13QCLuceneField11isTokenizedEv@Qt_5_PRIVATE_API 5.6.0~beta - _ZNK13QCLuceneField11readerValueEv@Qt_5_PRIVATE_API 5.6.0~beta - _ZNK13QCLuceneField11stringValueEv@Qt_5_PRIVATE_API 5.6.0~beta - _ZNK13QCLuceneField12getOmitNormsEv@Qt_5_PRIVATE_API 5.6.0~beta - _ZNK13QCLuceneField12isCompressedEv@Qt_5_PRIVATE_API 5.6.0~beta - _ZNK13QCLuceneField18isTermVectorStoredEv@Qt_5_PRIVATE_API 5.6.0~beta - _ZNK13QCLuceneField27isStoreOffsetWithTermVectorEv@Qt_5_PRIVATE_API 5.6.0~beta - _ZNK13QCLuceneField29isStorePositionWithTermVectorEv@Qt_5_PRIVATE_API 5.6.0~beta - _ZNK13QCLuceneField4nameEv@Qt_5_PRIVATE_API 5.6.0~beta - _ZNK13QCLuceneField8getBoostEv@Qt_5_PRIVATE_API 5.6.0~beta - _ZNK13QCLuceneField8isBinaryEv@Qt_5_PRIVATE_API 5.6.0~beta - _ZNK13QCLuceneField8isStoredEv@Qt_5_PRIVATE_API 5.6.0~beta - _ZNK13QCLuceneField8toStringEv@Qt_5_PRIVATE_API 5.6.0~beta - _ZNK13QCLuceneField9isIndexedEv@Qt_5_PRIVATE_API 5.6.0~beta - _ZNK13QCLuceneQuery10instanceOfERK7QString@Qt_5_PRIVATE_API 5.6.0~beta - _ZNK13QCLuceneQuery12getQueryNameEv@Qt_5_PRIVATE_API 5.6.0~beta - _ZNK13QCLuceneQuery6equalsERKS_@Qt_5_PRIVATE_API 5.6.0~beta - _ZNK13QCLuceneQuery8getBoostEv@Qt_5_PRIVATE_API 5.6.0~beta - _ZNK13QCLuceneQuery8hashCodeEv@Qt_5_PRIVATE_API 5.6.0~beta - _ZNK13QCLuceneQuery8toStringERK7QString@Qt_5_PRIVATE_API 5.6.0~beta - _ZNK13QCLuceneQuery8toStringEv@Qt_5_PRIVATE_API 5.6.0~beta - _ZNK13QCLuceneToken11startOffsetEv@Qt_5_PRIVATE_API 5.6.0~beta - _ZNK13QCLuceneToken12bufferLengthEv@Qt_5_PRIVATE_API 5.6.0~beta - _ZNK13QCLuceneToken14termTextLengthEv@Qt_5_PRIVATE_API 5.6.0~beta - _ZNK13QCLuceneToken17positionIncrementEv@Qt_5_PRIVATE_API 5.6.0~beta - _ZNK13QCLuceneToken19resetTermTextLengthEv@Qt_5_PRIVATE_API 5.6.0~beta - _ZNK13QCLuceneToken4typeEv@Qt_5_PRIVATE_API 5.6.0~beta - _ZNK13QCLuceneToken8termTextEv@Qt_5_PRIVATE_API 5.6.0~beta - _ZNK13QCLuceneToken8toStringEv@Qt_5_PRIVATE_API 5.6.0~beta - _ZNK13QCLuceneToken9endOffsetEv@Qt_5_PRIVATE_API 5.6.0~beta - _ZNK16QCLuceneAnalyzer11tokenStreamERK7QStringRK14QCLuceneReader@Qt_5_PRIVATE_API 5.6.0~beta - _ZNK16QCLuceneAnalyzer20positionIncrementGapERK7QString@Qt_5_PRIVATE_API 5.6.0~beta - _ZNK16QCLuceneDocument3getERK7QString@Qt_5_PRIVATE_API 5.6.0~beta - _ZNK16QCLuceneDocument8getBoostEv@Qt_5_PRIVATE_API 5.6.0~beta - _ZNK16QCLuceneDocument8getFieldERK7QString@Qt_5_PRIVATE_API 5.6.0~beta - _ZNK16QCLuceneDocument8toStringEv@Qt_5_PRIVATE_API 5.6.0~beta - _ZNK16QCLuceneDocument9getValuesERK7QString@Qt_5_PRIVATE_API 5.6.0~beta - _ZNK17QCLuceneTermQuery7getTermEv@Qt_5_PRIVATE_API 5.6.0~beta - _ZNK18QCLuceneRangeQuery11isInclusiveEv@Qt_5_PRIVATE_API 5.6.0~beta - _ZNK18QCLuceneRangeQuery12getLowerTermEv@Qt_5_PRIVATE_API 5.6.0~beta - _ZNK18QCLuceneRangeQuery12getUpperTermEv@Qt_5_PRIVATE_API 5.6.0~beta - _ZNK18QCLuceneRangeQuery8getFieldEv@Qt_5_PRIVATE_API 5.6.0~beta - _ZNK19QCLuceneIndexWriter14getMergeFactorEv@Qt_5_PRIVATE_API 5.6.0~beta - _ZNK19QCLuceneIndexWriter15getMaxMergeDocsEv@Qt_5_PRIVATE_API 5.6.0~beta - _ZNK19QCLuceneIndexWriter15getMinMergeDocsEv@Qt_5_PRIVATE_API 5.6.0~beta - _ZNK19QCLuceneIndexWriter17getMaxFieldLengthEv@Qt_5_PRIVATE_API 5.6.0~beta - _ZNK19QCLuceneIndexWriter18getMaxBufferedDocsEv@Qt_5_PRIVATE_API 5.6.0~beta - _ZNK19QCLuceneIndexWriter18getUseCompoundFileEv@Qt_5_PRIVATE_API 5.6.0~beta - _ZNK19QCLuceneIndexWriter19getWriteLockTimeoutEv@Qt_5_PRIVATE_API 5.6.0~beta - _ZNK19QCLuceneIndexWriter20getCommitLockTimeoutEv@Qt_5_PRIVATE_API 5.6.0~beta - _ZNK19QCLuceneIndexWriter20getTermIndexIntervalEv@Qt_5_PRIVATE_API 5.6.0~beta - _ZNK19QCLucenePhraseQuery12getFieldNameEv@Qt_5_PRIVATE_API 5.6.0~beta - _ZNK19QCLucenePhraseQuery7getSlopEv@Qt_5_PRIVATE_API 5.6.0~beta - _ZNK19QCLucenePhraseQuery8getTermsEv@Qt_5_PRIVATE_API 5.6.0~beta - _ZNK19QCLucenePrefixQuery9getPrefixEv@Qt_5_PRIVATE_API 5.6.0~beta - _ZNK20QCLuceneBooleanQuery14getClauseCountEv@Qt_5_PRIVATE_API 5.6.0~beta - _ZNK20QCLuceneBooleanQuery17getMaxClauseCountEv@Qt_5_PRIVATE_API 5.6.0~beta - _ZNK20QCLuceneStopAnalyzer16englishStopWordsEv@Qt_5_PRIVATE_API 5.6.0~beta - _ZNK21QCLuceneIndexSearcher6maxDocEv@Qt_5_PRIVATE_API 5.6.0~beta - _ZNK21QCLuceneMultiSearcher11subSearcherEi@Qt_5_PRIVATE_API 5.6.0~beta - _ZNK21QCLuceneMultiSearcher13searcherIndexEi@Qt_5_PRIVATE_API 5.6.0~beta - _ZNK21QCLuceneMultiSearcher6maxDocEv@Qt_5_PRIVATE_API 5.6.0~beta - _ZNK21QCLuceneMultiSearcher6subDocEi@Qt_5_PRIVATE_API 5.6.0~beta - (optional=templinst)_ZNSt6vectorIPKwSaIS1_EE19_M_emplace_back_auxIJS1_EEEvDpOT_@Qt_5_PRIVATE_API 5.6.0~beta - _ZNSt6vectorIPhSaIS0_EE19_M_emplace_back_auxIJRKS0_EEEvDpOT_@Qt_5_PRIVATE_API 5.6.0~beta - _ZNSt6vectorIPwSaIS0_EE19_M_emplace_back_auxIJRKS0_EEEvDpOT_@Qt_5_PRIVATE_API 5.6.0~beta - _ZNSt6vectorIPwSaIS0_EE19_M_emplace_back_auxIJS0_EEEvDpOT_@Qt_5_PRIVATE_API 5.6.0~beta - _ZNSt6vectorIiSaIiEE19_M_emplace_back_auxIJRKiEEEvDpOT_@Qt_5_PRIVATE_API 5.6.0~beta - (optional=templinst)_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_RKS8_@Qt_5_PRIVATE_API 5.6.0~beta - _ZTI12QCLuceneHits@Qt_5_PRIVATE_API 5.6.0~beta - _ZTI12QCLuceneSort@Qt_5_PRIVATE_API 5.6.0~beta - _ZTI12QCLuceneTerm@Qt_5_PRIVATE_API 5.6.0~beta - _ZTI13QCLuceneQuery@Qt_5_PRIVATE_API 5.6.0~beta - _ZTI13QCLuceneToken@Qt_5_PRIVATE_API 5.6.0~beta - _ZTI14QCLuceneFilter@Qt_5_PRIVATE_API 5.6.0~beta - _ZTI14QCLuceneReader@Qt_5_PRIVATE_API 5.6.0~beta - _ZTI16QCLuceneAnalyzer@Qt_5_PRIVATE_API 5.6.0~beta - _ZTI16QCLuceneSearcher@Qt_5_PRIVATE_API 5.6.0~beta - _ZTI17QCLuceneTermQuery@Qt_5_PRIVATE_API 5.6.0~beta - _ZTI17QCLuceneTokenizer@Qt_5_PRIVATE_API 5.6.0~beta - _ZTI18QCLuceneFileReader@Qt_5_PRIVATE_API 5.6.0~beta - _ZTI18QCLuceneRangeQuery@Qt_5_PRIVATE_API 5.6.0~beta - _ZTI18QCLuceneSearchable@Qt_5_PRIVATE_API 5.6.0~beta - _ZTI19QCLuceneIndexReader@Qt_5_PRIVATE_API 5.6.0~beta - _ZTI19QCLuceneIndexWriter@Qt_5_PRIVATE_API 5.6.0~beta - _ZTI19QCLucenePhraseQuery@Qt_5_PRIVATE_API 5.6.0~beta - _ZTI19QCLucenePrefixQuery@Qt_5_PRIVATE_API 5.6.0~beta - _ZTI19QCLuceneQueryParser@Qt_5_PRIVATE_API 5.6.0~beta - _ZTI19QCLuceneTokenStream@Qt_5_PRIVATE_API 5.6.0~beta - _ZTI20QCLuceneBooleanQuery@Qt_5_PRIVATE_API 5.6.0~beta - _ZTI20QCLuceneStopAnalyzer@Qt_5_PRIVATE_API 5.6.0~beta - _ZTI21QCLuceneIndexSearcher@Qt_5_PRIVATE_API 5.6.0~beta - _ZTI21QCLuceneMultiSearcher@Qt_5_PRIVATE_API 5.6.0~beta - _ZTI22QCLuceneSimpleAnalyzer@Qt_5_PRIVATE_API 5.6.0~beta - _ZTI23QCLuceneKeywordAnalyzer@Qt_5_PRIVATE_API 5.6.0~beta - _ZTI24QCLuceneStandardAnalyzer@Qt_5_PRIVATE_API 5.6.0~beta - _ZTI25QCLuceneStandardTokenizer@Qt_5_PRIVATE_API 5.6.0~beta - _ZTI26QCLuceneWhitespaceAnalyzer@Qt_5_PRIVATE_API 5.6.0~beta - _ZTI29QCLuceneMultiFieldQueryParser@Qt_5_PRIVATE_API 5.6.0~beta - _ZTI31QCLucenePerFieldAnalyzerWrapper@Qt_5_PRIVATE_API 5.6.0~beta - _ZTISt12_Vector_baseIPKwSaIS1_EE@Qt_5_PRIVATE_API 5.6.0~beta - _ZTISt12_Vector_baseIPhSaIS0_EE@Qt_5_PRIVATE_API 5.6.0~beta - _ZTISt12_Vector_baseIPwSaIS0_EE@Qt_5_PRIVATE_API 5.6.0~beta - _ZTISt12_Vector_baseIiSaIiEE@Qt_5_PRIVATE_API 5.6.0~beta - _ZTISt6vectorIPKwSaIS1_EE@Qt_5_PRIVATE_API 5.6.0~beta - _ZTISt6vectorIPhSaIS0_EE@Qt_5_PRIVATE_API 5.6.0~beta - _ZTISt6vectorIPwSaIS0_EE@Qt_5_PRIVATE_API 5.6.0~beta - _ZTISt6vectorIiSaIiEE@Qt_5_PRIVATE_API 5.6.0~beta - _ZTS12QCLuceneHits@Qt_5_PRIVATE_API 5.6.0~beta - _ZTS12QCLuceneSort@Qt_5_PRIVATE_API 5.6.0~beta - _ZTS12QCLuceneTerm@Qt_5_PRIVATE_API 5.6.0~beta - _ZTS13QCLuceneQuery@Qt_5_PRIVATE_API 5.6.0~beta - _ZTS13QCLuceneToken@Qt_5_PRIVATE_API 5.6.0~beta - _ZTS14QCLuceneFilter@Qt_5_PRIVATE_API 5.6.0~beta - _ZTS14QCLuceneReader@Qt_5_PRIVATE_API 5.6.0~beta - _ZTS16QCLuceneAnalyzer@Qt_5_PRIVATE_API 5.6.0~beta - _ZTS16QCLuceneSearcher@Qt_5_PRIVATE_API 5.6.0~beta - _ZTS17QCLuceneTermQuery@Qt_5_PRIVATE_API 5.6.0~beta - _ZTS17QCLuceneTokenizer@Qt_5_PRIVATE_API 5.6.0~beta - _ZTS18QCLuceneFileReader@Qt_5_PRIVATE_API 5.6.0~beta - _ZTS18QCLuceneRangeQuery@Qt_5_PRIVATE_API 5.6.0~beta - _ZTS18QCLuceneSearchable@Qt_5_PRIVATE_API 5.6.0~beta - _ZTS19QCLuceneIndexReader@Qt_5_PRIVATE_API 5.6.0~beta - _ZTS19QCLuceneIndexWriter@Qt_5_PRIVATE_API 5.6.0~beta - _ZTS19QCLucenePhraseQuery@Qt_5_PRIVATE_API 5.6.0~beta - _ZTS19QCLucenePrefixQuery@Qt_5_PRIVATE_API 5.6.0~beta - _ZTS19QCLuceneQueryParser@Qt_5_PRIVATE_API 5.6.0~beta - _ZTS19QCLuceneTokenStream@Qt_5_PRIVATE_API 5.6.0~beta - _ZTS20QCLuceneBooleanQuery@Qt_5_PRIVATE_API 5.6.0~beta - _ZTS20QCLuceneStopAnalyzer@Qt_5_PRIVATE_API 5.6.0~beta - _ZTS21QCLuceneIndexSearcher@Qt_5_PRIVATE_API 5.6.0~beta - _ZTS21QCLuceneMultiSearcher@Qt_5_PRIVATE_API 5.6.0~beta - _ZTS22QCLuceneSimpleAnalyzer@Qt_5_PRIVATE_API 5.6.0~beta - _ZTS23QCLuceneKeywordAnalyzer@Qt_5_PRIVATE_API 5.6.0~beta - _ZTS24QCLuceneStandardAnalyzer@Qt_5_PRIVATE_API 5.6.0~beta - _ZTS25QCLuceneStandardTokenizer@Qt_5_PRIVATE_API 5.6.0~beta - _ZTS26QCLuceneWhitespaceAnalyzer@Qt_5_PRIVATE_API 5.6.0~beta - _ZTS29QCLuceneMultiFieldQueryParser@Qt_5_PRIVATE_API 5.6.0~beta - _ZTS31QCLucenePerFieldAnalyzerWrapper@Qt_5_PRIVATE_API 5.6.0~beta - _ZTSSt12_Vector_baseIPKwSaIS1_EE@Qt_5_PRIVATE_API 5.6.0~beta - _ZTSSt12_Vector_baseIPhSaIS0_EE@Qt_5_PRIVATE_API 5.6.0~beta - _ZTSSt12_Vector_baseIPwSaIS0_EE@Qt_5_PRIVATE_API 5.6.0~beta - _ZTSSt12_Vector_baseIiSaIiEE@Qt_5_PRIVATE_API 5.6.0~beta - _ZTSSt6vectorIPKwSaIS1_EE@Qt_5_PRIVATE_API 5.6.0~beta - _ZTSSt6vectorIPhSaIS0_EE@Qt_5_PRIVATE_API 5.6.0~beta - _ZTSSt6vectorIPwSaIS0_EE@Qt_5_PRIVATE_API 5.6.0~beta - _ZTSSt6vectorIiSaIiEE@Qt_5_PRIVATE_API 5.6.0~beta - _ZTV12QCLuceneHits@Qt_5_PRIVATE_API 5.6.0~beta - _ZTV12QCLuceneSort@Qt_5_PRIVATE_API 5.6.0~beta - _ZTV12QCLuceneTerm@Qt_5_PRIVATE_API 5.6.0~beta - _ZTV13QCLuceneQuery@Qt_5_PRIVATE_API 5.6.0~beta - _ZTV13QCLuceneToken@Qt_5_PRIVATE_API 5.6.0~beta - _ZTV14QCLuceneFilter@Qt_5_PRIVATE_API 5.6.0~beta - _ZTV14QCLuceneReader@Qt_5_PRIVATE_API 5.6.0~beta - _ZTV16QCLuceneAnalyzer@Qt_5_PRIVATE_API 5.6.0~beta - _ZTV16QCLuceneSearcher@Qt_5_PRIVATE_API 5.6.0~beta - _ZTV17QCLuceneTermQuery@Qt_5_PRIVATE_API 5.6.0~beta - _ZTV17QCLuceneTokenizer@Qt_5_PRIVATE_API 5.6.0~beta - _ZTV18QCLuceneFileReader@Qt_5_PRIVATE_API 5.6.0~beta - _ZTV18QCLuceneRangeQuery@Qt_5_PRIVATE_API 5.6.0~beta - _ZTV18QCLuceneSearchable@Qt_5_PRIVATE_API 5.6.0~beta - _ZTV19QCLuceneIndexReader@Qt_5_PRIVATE_API 5.6.0~beta - _ZTV19QCLuceneIndexWriter@Qt_5_PRIVATE_API 5.6.0~beta - _ZTV19QCLucenePhraseQuery@Qt_5_PRIVATE_API 5.6.0~beta - _ZTV19QCLucenePrefixQuery@Qt_5_PRIVATE_API 5.6.0~beta - _ZTV19QCLuceneQueryParser@Qt_5_PRIVATE_API 5.6.0~beta - _ZTV19QCLuceneTokenStream@Qt_5_PRIVATE_API 5.6.0~beta - _ZTV20QCLuceneBooleanQuery@Qt_5_PRIVATE_API 5.6.0~beta - _ZTV20QCLuceneStopAnalyzer@Qt_5_PRIVATE_API 5.6.0~beta - _ZTV21QCLuceneIndexSearcher@Qt_5_PRIVATE_API 5.6.0~beta - _ZTV21QCLuceneMultiSearcher@Qt_5_PRIVATE_API 5.6.0~beta - _ZTV22QCLuceneSimpleAnalyzer@Qt_5_PRIVATE_API 5.6.0~beta - _ZTV23QCLuceneKeywordAnalyzer@Qt_5_PRIVATE_API 5.6.0~beta - _ZTV24QCLuceneStandardAnalyzer@Qt_5_PRIVATE_API 5.6.0~beta - _ZTV25QCLuceneStandardTokenizer@Qt_5_PRIVATE_API 5.6.0~beta - _ZTV26QCLuceneWhitespaceAnalyzer@Qt_5_PRIVATE_API 5.6.0~beta - _ZTV29QCLuceneMultiFieldQueryParser@Qt_5_PRIVATE_API 5.6.0~beta - _ZTV31QCLucenePerFieldAnalyzerWrapper@Qt_5_PRIVATE_API 5.6.0~beta diff -Nru qttools-opensource-src-5.7.1/debian/libqt5designer5.symbols qttools-opensource-src-5.9.1/debian/libqt5designer5.symbols --- qttools-opensource-src-5.7.1/debian/libqt5designer5.symbols 2016-12-16 19:21:55.000000000 +0000 +++ qttools-opensource-src-5.9.1/debian/libqt5designer5.symbols 2017-08-16 09:18:33.000000000 +0000 @@ -1,4 +1,4 @@ -# SymbolsHelper-Confirmed: 5.7.1 amd64 i386 +# SymbolsHelper-Confirmed: 5.9.1 amd64 i386 libQt5Designer.so.5 libqt5designer5 #MINVER# * Build-Depends-Package: qttools5-dev Qt_5.0@Qt_5.0 5.6.0~beta @@ -9,6 +9,8 @@ Qt_5.5@Qt_5.5 5.6.0~beta Qt_5.6@Qt_5.6 5.6.0~beta Qt_5.7@Qt_5.7 5.7.0 + Qt_5.8@Qt_5.8 5.9.0~beta3 + Qt_5.9@Qt_5.9 5.9.0~beta3 Qt_5@Qt_5 5.6.0~beta Qt_5_PRIVATE_API@Qt_5_PRIVATE_API 5.6.0~beta _Z20domPropertyToVariantP20QAbstractFormBuilderPK11QMetaObjectPK11DomProperty@Qt_5 5.6.0~beta @@ -756,6 +758,7 @@ _ZN18qdesigner_internal10ZoomWidgetC1EP7QWidget@Qt_5 5.6.0~beta _ZN18qdesigner_internal10ZoomWidgetC2EP7QWidget@Qt_5 5.6.0~beta _ZN18qdesigner_internal10isPromotedEP28QDesignerFormEditorInterfaceP7QWidget@Qt_5 5.6.0~beta + _ZN18qdesigner_internal10qtLogoIconEv@Qt_5 5.9.0~beta3 _ZN18qdesigner_internal11ActionModel11qt_metacallEN11QMetaObject4CallEiPPv@Qt_5 5.6.0~beta _ZN18qdesigner_internal11ActionModel11qt_metacastEPKc@Qt_5 5.6.0~beta _ZN18qdesigner_internal11ActionModel12clearActionsEv@Qt_5 5.6.0~beta @@ -807,6 +810,7 @@ _ZN18qdesigner_internal12ActionEditor16staticMetaObjectE@Qt_5 5.6.0~beta _ZN18qdesigner_internal12ActionEditor17editCurrentActionEv@Qt_5 5.6.0~beta _ZN18qdesigner_internal12ActionEditor17slotActionChangedEv@Qt_5 5.6.0~beta + _ZN18qdesigner_internal12ActionEditor18m_objectNamingModeE@Qt_5 5.9.0~beta3 _ZN18qdesigner_internal12ActionEditor20contextMenuRequestedEP5QMenuP7QAction@Qt_5 5.6.0~beta _ZN18qdesigner_internal12ActionEditor20mainContainerChangedEv@Qt_5 5.6.0~beta _ZN18qdesigner_internal12ActionEditor20resourceImageDroppedERK7QStringP7QAction@Qt_5 5.6.0~beta @@ -1775,6 +1779,7 @@ _ZN18qdesigner_internal23QDesignerSharedSettings15setFormTemplateERK7QString@Qt_5 5.6.0~beta _ZN18qdesigner_internal23QDesignerSharedSettings17setDeviceProfilesERK5QListINS_13DeviceProfileEE@Qt_5 5.6.0~beta _ZN18qdesigner_internal23QDesignerSharedSettings18setUserDeviceSkinsERK11QStringList@Qt_5 5.6.0~beta + _ZN18qdesigner_internal23QDesignerSharedSettings19setObjectNamingModeENS_16ObjectNamingModeE@Qt_5 5.9.0~beta3 _ZN18qdesigner_internal23QDesignerSharedSettings20setFormTemplatePathsERK11QStringList@Qt_5 5.6.0~beta _ZN18qdesigner_internal23QDesignerSharedSettings24defaultFormTemplatePathsEv@Qt_5 5.6.0~beta _ZN18qdesigner_internal23QDesignerSharedSettings28setCurrentDeviceProfileIndexEi@Qt_5 5.6.0~beta @@ -2760,7 +2765,7 @@ _ZN7DomTimeC2Ev@Qt_5 5.6.0~beta _ZN7DomTimeD1Ev@Qt_5 5.6.0~beta _ZN7DomTimeD2Ev@Qt_5 5.6.0~beta - (optional=templinst|arch=arm64 hppa x32)_ZN7QObject7connectIMS_FvPS_EM37QDesignerAbstractPropertySheetFactoryFvS1_EEEN11QMetaObject10ConnectionEPKN9QtPrivate15FunctionPointerIT_E6ObjectESB_PKNSA_IT0_E6ObjectESG_N2Qt14ConnectionTypeE@Qt_5 5.6.0~rc + (optional=templinst|arch=arm64 hppa sh4 x32)_ZN7QObject7connectIMS_FvPS_EM37QDesignerAbstractPropertySheetFactoryFvS1_EEEN11QMetaObject10ConnectionEPKN9QtPrivate15FunctionPointerIT_E6ObjectESB_PKNSA_IT0_E6ObjectESG_N2Qt14ConnectionTypeE@Qt_5 5.6.0~rc _ZN8DomBrush15setElementColorEP8DomColor@Qt_5 5.6.0~beta _ZN8DomBrush16takeElementColorEv@Qt_5 5.6.0~beta _ZN8DomBrush17setElementTextureEP11DomProperty@Qt_5 5.6.0~beta @@ -3311,6 +3316,7 @@ _ZNK18qdesigner_internal23QDesignerSharedSettings15deviceProfileAtEi@Qt_5 5.6.0~beta _ZNK18qdesigner_internal23QDesignerSharedSettings15userDeviceSkinsEv@Qt_5 5.6.0~beta _ZNK18qdesigner_internal23QDesignerSharedSettings16deviceProfileXmlEv@Qt_5 5.6.0~beta + _ZNK18qdesigner_internal23QDesignerSharedSettings16objectNamingModeEv@Qt_5 5.9.0~beta3 _ZNK18qdesigner_internal23QDesignerSharedSettings17formTemplatePathsEv@Qt_5 5.6.0~beta _ZNK18qdesigner_internal23QDesignerSharedSettings20currentDeviceProfileEv@Qt_5 5.6.0~beta _ZNK18qdesigner_internal23QDesignerSharedSettings25currentDeviceProfileIndexEv@Qt_5 5.6.0~beta @@ -3595,7 +3601,7 @@ _ZNK9DomWidget5writeER16QXmlStreamWriterRK7QString@Qt_5 5.6.0~beta (optional=templinst)_ZNSt3_V28__rotateIPiEET_S2_S2_S2_St26random_access_iterator_tag@Qt_5 5.6.0~beta (optional=templinst|subst)_ZSt17__rotate_adaptiveIPiS0_{ssize_t}ET_S1_S1_S1_T1_S2_T0_S2_@Qt_5 5.6.0~beta - (optional=templinst|arch=!amd64)_ZSt4swapIN8QVariant7PrivateEENSt9enable_ifIXsrSt6__and_IJSt21is_move_constructibleIT_ESt18is_move_assignableIS5_EEE5valueEvE4typeERS5_SC_@Qt_5 5.7.1 + (optional=templinst|arch=i386 powerpc)_ZSt4swapIN8QVariant7PrivateEENSt9enable_ifIXsrSt6__and_IJSt6__not_ISt15__is_tuple_likeIT_EESt21is_move_constructibleIS6_ESt18is_move_assignableIS6_EEE5valueEvE4typeERS6_SG_@Qt_5 5.9.1 _ZTI12QFormBuilder@Qt_5 5.6.0~beta _ZTI12QTextBuilder@Qt_5 5.6.0~beta _ZTI13QDesignerMenu@Qt_5 5.6.0~beta diff -Nru qttools-opensource-src-5.7.1/debian/libqt5designercomponents5.symbols qttools-opensource-src-5.9.1/debian/libqt5designercomponents5.symbols --- qttools-opensource-src-5.7.1/debian/libqt5designercomponents5.symbols 2016-12-16 19:21:55.000000000 +0000 +++ qttools-opensource-src-5.9.1/debian/libqt5designercomponents5.symbols 2017-08-16 09:18:33.000000000 +0000 @@ -1,4 +1,4 @@ -# SymbolsHelper-Confirmed: 5.7.1 amd64 i386 +# SymbolsHelper-Confirmed: 5.9.1 amd64 i386 libQt5DesignerComponents.so.5 libqt5designercomponents5 #MINVER# * Build-Depends-Package: qttools5-private-dev Qt_5_PRIVATE_API@Qt_5_PRIVATE_API 5.6.0~beta @@ -12,8 +12,8 @@ _ZN19QDesignerComponents20createResourceEditorEP28QDesignerFormEditorInterfaceP7QWidget@Qt_5_PRIVATE_API 5.6.0~beta _ZN19QDesignerComponents21createObjectInspectorEP28QDesignerFormEditorInterfaceP7QWidget@Qt_5_PRIVATE_API 5.6.0~beta _ZN19QDesignerComponents22createSignalSlotEditorEP28QDesignerFormEditorInterfaceP7QWidget@Qt_5_PRIVATE_API 5.6.0~beta - (optional=templinst|arch=arm64 hppa x32)_ZN7QObject7connectIM16QDialogButtonBoxFvvEM7QDialogFvvEEEN11QMetaObject10ConnectionEPKN9QtPrivate15FunctionPointerIT_E6ObjectESB_PKNSA_IT0_E6ObjectESG_N2Qt14ConnectionTypeE@Qt_5_PRIVATE_API 5.6.0~rc - (optional=templinst|arch=!amd64)_ZSt4swapIN8QVariant7PrivateEENSt9enable_ifIXsrSt6__and_IJSt21is_move_constructibleIT_ESt18is_move_assignableIS5_EEE5valueEvE4typeERS5_SC_@Qt_5_PRIVATE_API 5.7.1 + (optional=templinst|arch=arm64 hppa sh4 x32)_ZN7QObject7connectIM16QDialogButtonBoxFvvEM7QDialogFvvEEEN11QMetaObject10ConnectionEPKN9QtPrivate15FunctionPointerIT_E6ObjectESB_PKNSA_IT0_E6ObjectESG_N2Qt14ConnectionTypeE@Qt_5_PRIVATE_API 5.6.0~rc + (optional=templinst|arch=i386 powerpc)_ZSt4swapIN8QVariant7PrivateEENSt9enable_ifIXsrSt6__and_IJSt6__not_ISt15__is_tuple_likeIT_EESt21is_move_constructibleIS6_ESt18is_move_assignableIS6_EEE5valueEvE4typeERS6_SG_@Qt_5_PRIVATE_API 5.9.1 _ZTI29QDesignerOptionsPageInterface@Qt_5_PRIVATE_API 5.6.0~beta _ZTI34QDesignerFormEditorPluginInterface@Qt_5_PRIVATE_API 5.6.0~beta _ZTI34QDesignerFormWindowCursorInterface@Qt_5_PRIVATE_API 5.6.0~beta diff -Nru qttools-opensource-src-5.7.1/debian/libqt5help5.symbols qttools-opensource-src-5.9.1/debian/libqt5help5.symbols --- qttools-opensource-src-5.7.1/debian/libqt5help5.symbols 2016-12-16 19:21:55.000000000 +0000 +++ qttools-opensource-src-5.9.1/debian/libqt5help5.symbols 2017-08-16 09:18:33.000000000 +0000 @@ -1,4 +1,4 @@ -# SymbolsHelper-Confirmed: 5.7.0 amd64 +# SymbolsHelper-Confirmed: 5.9.0 amd64 libQt5Help.so.5 libqt5help5 #MINVER# * Build-Depends-Package: qttools5-dev Qt_5.0@Qt_5.0 5.6.0~beta @@ -9,6 +9,8 @@ Qt_5.5@Qt_5.5 5.6.0~beta Qt_5.6@Qt_5.6 5.6.0~beta Qt_5.7@Qt_5.7 5.7.0 + Qt_5.8@Qt_5.8 5.9.0~beta3 + Qt_5.9@Qt_5.9 5.9.0~beta3 Qt_5@Qt_5 5.6.0~beta Qt_5_PRIVATE_API@Qt_5_PRIVATE_API 5.6.0~beta _ZN11QHelpEngine11indexWidgetEv@Qt_5 5.6.0~beta @@ -92,7 +94,6 @@ _ZN15QHelpIndexModelD0Ev@Qt_5 5.6.0~beta _ZN15QHelpIndexModelD1Ev@Qt_5 5.6.0~beta _ZN15QHelpIndexModelD2Ev@Qt_5 5.6.0~beta - _ZN16QHelpContentItem11appendChildEPS_@Qt_5 5.6.0~beta _ZN16QHelpContentItemC1ERK7QStringS2_P13QHelpDBReaderPS_@Qt_5 5.6.0~beta _ZN16QHelpContentItemC2ERK7QStringS2_P13QHelpDBReaderPS_@Qt_5 5.6.0~beta _ZN16QHelpContentItemD1Ev@Qt_5 5.6.0~beta @@ -139,12 +140,23 @@ _ZN17QHelpSearchEngine17searchingFinishedEi@Qt_5 5.6.0~beta _ZN17QHelpSearchEngine18indexDocumentationEv@Qt_5 5.6.0~beta _ZN17QHelpSearchEngine20reindexDocumentationEv@Qt_5 5.6.0~beta + _ZN17QHelpSearchEngine26scheduleIndexDocumentationEv@Qt_5 5.9.0~beta3 _ZN17QHelpSearchEngine6searchERK5QListI16QHelpSearchQueryE@Qt_5 5.6.0~beta + _ZN17QHelpSearchEngine6searchERK7QString@Qt_5 5.9.0 _ZN17QHelpSearchEngineC1EP15QHelpEngineCoreP7QObject@Qt_5 5.6.0~beta _ZN17QHelpSearchEngineC2EP15QHelpEngineCoreP7QObject@Qt_5 5.6.0~beta _ZN17QHelpSearchEngineD0Ev@Qt_5 5.6.0~beta _ZN17QHelpSearchEngineD1Ev@Qt_5 5.6.0~beta _ZN17QHelpSearchEngineD2Ev@Qt_5 5.6.0~beta + _ZN17QHelpSearchResultC1ERK4QUrlRK7QStringS5_@Qt_5 5.9.0~beta3 + _ZN17QHelpSearchResultC1ERKS_@Qt_5 5.9.0~beta3 + _ZN17QHelpSearchResultC1Ev@Qt_5 5.9.0~beta3 + _ZN17QHelpSearchResultC2ERK4QUrlRK7QStringS5_@Qt_5 5.9.0~beta3 + _ZN17QHelpSearchResultC2ERKS_@Qt_5 5.9.0~beta3 + _ZN17QHelpSearchResultC2Ev@Qt_5 5.9.0~beta3 + _ZN17QHelpSearchResultD1Ev@Qt_5 5.9.0~beta3 + _ZN17QHelpSearchResultD2Ev@Qt_5 5.9.0~beta3 + _ZN17QHelpSearchResultaSERKS_@Qt_5 5.9.0~beta3 _ZN18QHelpContentWidget11qt_metacallEN11QMetaObject4CallEiPPv@Qt_5 5.6.0~beta _ZN18QHelpContentWidget11qt_metacastEPKc@Qt_5 5.6.0~beta _ZN18QHelpContentWidget13linkActivatedERK4QUrl@Qt_5 5.6.0~beta @@ -172,6 +184,7 @@ _ZN22QHelpSearchQueryWidget11qt_metacastEPKc@Qt_5 5.6.0~beta _ZN22QHelpSearchQueryWidget12focusInEventEP11QFocusEvent@Qt_5 5.6.0~beta _ZN22QHelpSearchQueryWidget14setCompactModeEb@Qt_5 5.6.0~beta + _ZN22QHelpSearchQueryWidget14setSearchInputERK7QString@Qt_5 5.9.0 _ZN22QHelpSearchQueryWidget16staticMetaObjectE@Qt_5 5.6.0~beta _ZN22QHelpSearchQueryWidget20expandExtendedSearchEv@Qt_5 5.6.0~beta _ZN22QHelpSearchQueryWidget22collapseExtendedSearchEv@Qt_5 5.6.0~beta @@ -204,6 +217,7 @@ _ZNK15QHelpEngineCore13customFiltersEv@Qt_5 5.6.0~beta _ZNK15QHelpEngineCore14autoSaveFilterEv@Qt_5 5.6.0~beta _ZNK15QHelpEngineCore14collectionFileEv@Qt_5 5.6.0~beta + _ZNK15QHelpEngineCore15linksForKeywordERK7QString@Qt_5 5.9.0 _ZNK15QHelpEngineCore16filterAttributesERK7QString@Qt_5 5.6.0~beta _ZNK15QHelpEngineCore16filterAttributesEv@Qt_5 5.6.0~beta _ZNK15QHelpEngineCore18linksForIdentifierERK7QString@Qt_5 5.6.0~beta @@ -239,10 +253,16 @@ _ZNK17QHelpContentModel6parentERK11QModelIndex@Qt_5 5.6.0~beta _ZNK17QHelpContentModel8rowCountERK11QModelIndex@Qt_5 5.6.0~beta _ZNK17QHelpSearchEngine10metaObjectEv@Qt_5 5.6.0~beta + _ZNK17QHelpSearchEngine11searchInputEv@Qt_5 5.9.0 + _ZNK17QHelpSearchEngine13searchResultsEii@Qt_5 5.9.0~beta3 + _ZNK17QHelpSearchEngine17searchResultCountEv@Qt_5 5.9.0 _ZNK17QHelpSearchEngine4hitsEii@Qt_5 5.6.0~beta _ZNK17QHelpSearchEngine5queryEv@Qt_5 5.6.0~beta _ZNK17QHelpSearchEngine8hitCountEv@Qt_5 5.6.0~beta _ZNK17QHelpSearchEngine9hitsCountEv@Qt_5 5.6.0~beta + _ZNK17QHelpSearchResult3urlEv@Qt_5 5.9.0~beta3 + _ZNK17QHelpSearchResult5titleEv@Qt_5 5.9.0~beta3 + _ZNK17QHelpSearchResult7snippetEv@Qt_5 5.9.0~beta3 _ZNK18QHelpContentWidget10metaObjectEv@Qt_5 5.6.0~beta _ZNK18QHelpDataIndexItemeqERKS_@Qt_5 5.6.0~beta _ZNK20QHelpDataContentItem5titleEv@Qt_5 5.6.0~beta @@ -253,6 +273,7 @@ _ZNK22QHelpDataFilterSection7indicesEv@Qt_5 5.6.0~beta _ZNK22QHelpDataFilterSection8contentsEv@Qt_5 5.6.0~beta _ZNK22QHelpSearchQueryWidget10metaObjectEv@Qt_5 5.6.0~beta + _ZNK22QHelpSearchQueryWidget11searchInputEv@Qt_5 5.9.0 _ZNK22QHelpSearchQueryWidget13isCompactModeEv@Qt_5 5.6.0~beta _ZNK22QHelpSearchQueryWidget5queryEv@Qt_5 5.6.0~beta _ZNK23QHelpSearchResultWidget10metaObjectEv@Qt_5 5.6.0~beta diff -Nru qttools-opensource-src-5.7.1/debian/patches/hurd-path_max.diff qttools-opensource-src-5.9.1/debian/patches/hurd-path_max.diff --- qttools-opensource-src-5.7.1/debian/patches/hurd-path_max.diff 2016-12-16 19:21:55.000000000 +0000 +++ qttools-opensource-src-5.9.1/debian/patches/hurd-path_max.diff 1970-01-01 00:00:00.000000000 +0000 @@ -1,19 +0,0 @@ -Author: Marc Dequènes -Bug: https://bugreports.qt.io/browse/QTBUG-6960 -Description: PATH_MAX fix - Fix a POSIX incompatibility (as programs should not rely on having PATH_MAX - defined on all systems) and causes FTBFS on Hurd. - ---- a/src/assistant/3rdparty/clucene/src/CLucene/config/compiler.h -+++ b/src/assistant/3rdparty/clucene/src/CLucene/config/compiler.h -@@ -136,6 +136,10 @@ - #define LUCENE_INT32_MAX_SHOULDBE 0x7FFFFFFFL - #define LUCENE_UINT8_MAX_SHOULDBE 0xff - -+#if defined(__GNU__) -+ #define PATH_MAX 4096 -+#endif -+ - //maximum path length. only used for buffers that use fullpath. - //anything else should use a dynamic length. - #if defined(CL_MAX_PATH) diff -Nru qttools-opensource-src-5.7.1/debian/patches/series qttools-opensource-src-5.9.1/debian/patches/series --- qttools-opensource-src-5.7.1/debian/patches/series 2016-12-16 19:21:55.000000000 +0000 +++ qttools-opensource-src-5.9.1/debian/patches/series 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -hurd-path_max.diff diff -Nru qttools-opensource-src-5.7.1/debian/qttools5-dev.install qttools-opensource-src-5.9.1/debian/qttools5-dev.install --- qttools-opensource-src-5.7.1/debian/qttools5-dev.install 2016-12-16 19:21:55.000000000 +0000 +++ qttools-opensource-src-5.9.1/debian/qttools5-dev.install 2017-08-16 09:18:33.000000000 +0000 @@ -1,7 +1,3 @@ -usr/include/*/qt5/QtCLucene/QtCLucene -usr/include/*/qt5/QtCLucene/QtCLuceneDepends -usr/include/*/qt5/QtCLucene/QtCLuceneVersion -usr/include/*/qt5/QtCLucene/qtcluceneversion.h usr/include/*/qt5/QtDesigner/QAbstractExtensionFactory usr/include/*/qt5/QtDesigner/QAbstractExtensionManager usr/include/*/qt5/QtDesigner/QAbstractFormBuilder @@ -102,6 +98,7 @@ usr/include/*/qt5/QtHelp/QHelpSearchEngine usr/include/*/qt5/QtHelp/QHelpSearchQuery usr/include/*/qt5/QtHelp/QHelpSearchQueryWidget +usr/include/*/qt5/QtHelp/QHelpSearchResult usr/include/*/qt5/QtHelp/QHelpSearchResultWidget usr/include/*/qt5/QtHelp/QtHelp usr/include/*/qt5/QtHelp/QtHelpDepends @@ -139,8 +136,6 @@ usr/lib/*/cmake/Qt5UiPlugin/Qt5UiPluginConfigVersion.cmake usr/lib/*/cmake/Qt5UiTools/Qt5UiToolsConfig.cmake usr/lib/*/cmake/Qt5UiTools/Qt5UiToolsConfigVersion.cmake -usr/lib/*/libQt5CLucene.prl -usr/lib/*/libQt5CLucene.so usr/lib/*/libQt5Designer.prl usr/lib/*/libQt5Designer.so usr/lib/*/libQt5DesignerComponents.prl diff -Nru qttools-opensource-src-5.7.1/debian/qttools5-dev-tools.install.in qttools-opensource-src-5.9.1/debian/qttools5-dev-tools.install.in --- qttools-opensource-src-5.7.1/debian/qttools5-dev-tools.install.in 2017-01-03 08:23:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/debian/qttools5-dev-tools.install.in 2017-08-16 09:18:33.000000000 +0000 @@ -13,10 +13,12 @@ usr/lib/*/qt5/bin/qdoc usr/lib/*/qt5/bin/qhelpconverter usr/lib/*/qt5/bin/qhelpgenerator +usr/lib/*/qt5/bin/qtattributionsscanner usr/lib/*/qt5/bin/qtdiag usr/lib/*/qt5/bin/qtpaths usr/lib/*/qt5/bin/qtplugininfo usr/lib/*/qt5/plugins/designer/libqquickwidget.so +usr/lib/*/qt5/plugins/designer/libqwebview.so usr/share/qt5/phrasebooks/danish.qph usr/share/qt5/phrasebooks/dutch.qph usr/share/qt5/phrasebooks/finnish.qph @@ -30,3 +32,6 @@ usr/share/qt5/phrasebooks/russian.qph usr/share/qt5/phrasebooks/spanish.qph usr/share/qt5/phrasebooks/swedish.qph +debian/desktop/assistant-qt5.desktop usr/share/applications/ +debian/desktop/designer-qt5.desktop usr/share/applications/ +debian/desktop/linguist-qt5.desktop usr/share/applications/ diff -Nru qttools-opensource-src-5.7.1/debian/qttools5-private-dev.install qttools-opensource-src-5.9.1/debian/qttools5-private-dev.install --- qttools-opensource-src-5.7.1/debian/qttools5-private-dev.install 2016-12-16 19:21:55.000000000 +0000 +++ qttools-opensource-src-5.9.1/debian/qttools5-private-dev.install 2017-08-16 09:18:33.000000000 +0000 @@ -1,21 +1,3 @@ -usr/include/*/qt5/QtCLucene/*/QtCLucene/private/qanalyzer_p.h -usr/include/*/qt5/QtCLucene/*/QtCLucene/private/qclucene-config_p.h -usr/include/*/qt5/QtCLucene/*/QtCLucene/private/qclucene_global_p.h -usr/include/*/qt5/QtCLucene/*/QtCLucene/private/qdocument_p.h -usr/include/*/qt5/QtCLucene/*/QtCLucene/private/qfield_p.h -usr/include/*/qt5/QtCLucene/*/QtCLucene/private/qfilter_p.h -usr/include/*/qt5/QtCLucene/*/QtCLucene/private/qhits_p.h -usr/include/*/qt5/QtCLucene/*/QtCLucene/private/qindexreader_p.h -usr/include/*/qt5/QtCLucene/*/QtCLucene/private/qindexwriter_p.h -usr/include/*/qt5/QtCLucene/*/QtCLucene/private/qquery_p.h -usr/include/*/qt5/QtCLucene/*/QtCLucene/private/qqueryparser_p.h -usr/include/*/qt5/QtCLucene/*/QtCLucene/private/qreader_p.h -usr/include/*/qt5/QtCLucene/*/QtCLucene/private/qsearchable_p.h -usr/include/*/qt5/QtCLucene/*/QtCLucene/private/qsort_p.h -usr/include/*/qt5/QtCLucene/*/QtCLucene/private/qterm_p.h -usr/include/*/qt5/QtCLucene/*/QtCLucene/private/qtoken_p.h -usr/include/*/qt5/QtCLucene/*/QtCLucene/private/qtokenizer_p.h -usr/include/*/qt5/QtCLucene/*/QtCLucene/private/qtokenstream_p.h usr/include/*/qt5/QtDesigner/*/QtDesigner/private/abstractdialoggui_p.h usr/include/*/qt5/QtDesigner/*/QtDesigner/private/abstractintrospection_p.h usr/include/*/qt5/QtDesigner/*/QtDesigner/private/actioneditor_p.h @@ -103,21 +85,16 @@ usr/include/*/qt5/QtDesigner/*/QtDesigner/private/widgetfactory_p.h usr/include/*/qt5/QtDesigner/*/QtDesigner/private/zoomwidget_p.h usr/include/*/qt5/QtDesignerComponents/*/QtDesignerComponents/private/lib_pch.h -usr/include/*/qt5/QtHelp/*/QtHelp/private/qclucenefieldnames_p.h usr/include/*/qt5/QtHelp/*/QtHelp/private/qhelpcollectionhandler_p.h usr/include/*/qt5/QtHelp/*/QtHelp/private/qhelpdatainterface_p.h usr/include/*/qt5/QtHelp/*/QtHelp/private/qhelpdbreader_p.h usr/include/*/qt5/QtHelp/*/QtHelp/private/qhelpengine_p.h usr/include/*/qt5/QtHelp/*/QtHelp/private/qhelpgenerator_p.h usr/include/*/qt5/QtHelp/*/QtHelp/private/qhelpprojectdata_p.h -usr/include/*/qt5/QtHelp/*/QtHelp/private/qhelpsearchindex_default_p.h -usr/include/*/qt5/QtHelp/*/QtHelp/private/qhelpsearchindexreader_clucene_p.h usr/include/*/qt5/QtHelp/*/QtHelp/private/qhelpsearchindexreader_default_p.h usr/include/*/qt5/QtHelp/*/QtHelp/private/qhelpsearchindexreader_p.h -usr/include/*/qt5/QtHelp/*/QtHelp/private/qhelpsearchindexwriter_clucene_p.h usr/include/*/qt5/QtHelp/*/QtHelp/private/qhelpsearchindexwriter_default_p.h usr/include/*/qt5/QtUiTools/*/QtUiTools/private/quiloader_p.h -usr/lib/*/qt5/mkspecs/modules/qt_lib_clucene_private.pri usr/lib/*/qt5/mkspecs/modules/qt_lib_designer_private.pri usr/lib/*/qt5/mkspecs/modules/qt_lib_designercomponents_private.pri usr/lib/*/qt5/mkspecs/modules/qt_lib_help_private.pri diff -Nru qttools-opensource-src-5.7.1/debian/rules qttools-opensource-src-5.9.1/debian/rules --- qttools-opensource-src-5.7.1/debian/rules 2016-12-16 19:21:55.000000000 +0000 +++ qttools-opensource-src-5.9.1/debian/rules 2017-08-16 09:18:33.000000000 +0000 @@ -28,7 +28,7 @@ override_dh_auto_build-indep: cd src; qmake - dh_auto_build -- -Csrc sub-qdoc + dh_auto_build -- -Csrc sub-qdoc sub-qtattributionsscanner cd src/assistant; qmake dh_auto_build -- -Csrc/assistant sub-qhelpgenerator cd src/qdoc; qmake @@ -55,6 +55,13 @@ endif dh_install --fail-missing + install -D -p -m0644 src/assistant/assistant/images/assistant-128.png \ + debian/qttools5-dev-tools/usr/share/pixmaps/assistant-qt5.png + install -D -p -m0644 src/designer/src/designer/images/designer.png \ + debian/qttools5-dev-tools/usr/share/pixmaps/designer-qt5.png + install -D -p -m0644 src/linguist/linguist/images/icons/linguist-128-32.png \ + debian/qttools5-dev-tools/usr/share/pixmaps/linguist-qt5.png + override_dh_strip: dh_strip -pqttools5-examples --dbgsym-migration='qttools5-examples-dbg (<< 5.7.1-1~)' dh_strip --remaining-packages --dbgsym-migration='qttools5-dbg (<< 5.7.1-1~)' diff -Nru qttools-opensource-src-5.7.1/dist/changes-5.8.0 qttools-opensource-src-5.9.1/dist/changes-5.8.0 --- qttools-opensource-src-5.7.1/dist/changes-5.8.0 1970-01-01 00:00:00.000000000 +0000 +++ qttools-opensource-src-5.9.1/dist/changes-5.8.0 2017-06-23 12:03:39.000000000 +0000 @@ -0,0 +1,41 @@ +Qt 5.8 introduces many new features and improvements as well as bugfixes +over the 5.7.x series. For more details, refer to the online documentation +included in this distribution. The documentation is also available online: + + http://doc.qt.io/qt-5/index.html + +The Qt version 5.8 series is binary compatible with the 5.7.x series. +Applications compiled for 5.7 will continue to run with 5.8. + +Some of the changes listed in this file include issue tracking numbers +corresponding to tasks in the Qt Bug Tracker: + + https://bugreports.qt.io/ + +Each of these identifiers can be entered in the bug tracker to obtain more +information about a particular change. + +androiddeployqt +--------------- + + - [QTBUG-54147] Fixed problem with ANDROID_DEPLOYMENT_DEPENDENCIES where + last entry in directory would be skipped. + +lupdate +------- + + - [QTBUG-34092] Fixed parsing of #includes without a space before the + file name + - [QTBUG-53206] Added qrc resource file support + +linguist +-------- + + - [QTBUG-35144] Translation validation now recognizes the %Ln marker + - [QTBUG-52020] Fixed widget alignment in length variants view + - [QTBUG-56374] Fixed descriptions of file formats not being translated + +macdeployqt +----------- + + - Added option '-libpath' to search libraries in a custom path. diff -Nru qttools-opensource-src-5.7.1/dist/changes-5.9.0 qttools-opensource-src-5.9.1/dist/changes-5.9.0 --- qttools-opensource-src-5.7.1/dist/changes-5.9.0 1970-01-01 00:00:00.000000000 +0000 +++ qttools-opensource-src-5.9.1/dist/changes-5.9.0 2017-06-23 12:03:39.000000000 +0000 @@ -0,0 +1,34 @@ +Qt 5.9 introduces many new features and improvements as well as bugfixes +over the 5.8.x series. For more details, refer to the online documentation +included in this distribution. The documentation is also available online: + +http://doc.qt.io/qt-5/index.html + +The Qt version 5.9 series is binary compatible with the 5.8.x series. +Applications compiled for 5.8 will continue to run with 5.9. + +Some of the changes listed in this file include issue tracking numbers +corresponding to tasks in the Qt Bug Tracker: + +https://bugreports.qt.io/ + +Each of these identifiers can be entered in the bug tracker to obtain more +information about a particular change. + +Linguist +-------- + + - [QTBUG-16368] Added capability of checking that the whitespace + surrounding the translations' text matches that of the source strings. + +Assistant +--------- + + - Removed the clucene dependency, used FTS5 from sqlite instead. + - Search results show now the doc excerpt instead of the explicit link. + - Made search results more reliable (e.g.: charset, "UTF-8"). + +QtHelp +----------- + + - Moved the linksForKeyword() method from QHelpIndexModel into QHelpEngineCore. diff -Nru qttools-opensource-src-5.7.1/dist/changes-5.9.1 qttools-opensource-src-5.9.1/dist/changes-5.9.1 --- qttools-opensource-src-5.7.1/dist/changes-5.9.1 1970-01-01 00:00:00.000000000 +0000 +++ qttools-opensource-src-5.9.1/dist/changes-5.9.1 2017-06-23 12:03:39.000000000 +0000 @@ -0,0 +1,63 @@ +Qt 5.9.1 is a bug-fix release. It maintains both forward and backward +compatibility (source and binary) with Qt 5.9.0. + +For more details, refer to the documentation included in this +distribution. The documentation is also available online: + +http://doc.qt.io/qt-5/index.html + +The Qt version 5.9 series is binary compatible with the 5.8.x series. +Applications compiled for 5.8 will continue to run with 5.9. + +Some of the changes listed in this file include issue tracking numbers +corresponding to tasks in the Qt Bug Tracker: + +https://bugreports.qt.io/ + +Each of these identifiers can be entered in the bug tracker to obtain more +information about a particular change. + +General +------- + +- [QTBUG-60926] Fixed building of qdoc documentation with a static Qt. + +androiddeployqt +--------------- + +- [QTBUG-60918] Fixed deployment of QtQuick.Controls 1 and QtQuick.Dialogs. + +macdeployqt +----------- + +- [QTBUG-59609] Icon engines are now deployed. + +qtdiag +------ + +- Show more useful information about styles and platform themes. +- [QTBUG-60962] Changed logic to determine name of ANGLE libraries by + existence. + +Qt Assistant +------------ + +- Fixed the build with qtwebkit. +- Fixed availability of widget arrows in the search result. + +Qt Designer +----------- + +- [QTBUG-61009] Fixed crash in "Go to slot" dialog when no signal is + selected. + + +Qt Property Browser +------------------- + +- Fixed build breakage when qreal is defined as float. + +windeployqt +----------- + +- [QTBUG-61127] Added support of deploying Qt5GamePad with plugins. diff -Nru qttools-opensource-src-5.7.1/examples/assistant/simpletextviewer/findfiledialog.cpp qttools-opensource-src-5.9.1/examples/assistant/simpletextviewer/findfiledialog.cpp --- qttools-opensource-src-5.7.1/examples/assistant/simpletextviewer/findfiledialog.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/examples/assistant/simpletextviewer/findfiledialog.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -134,10 +134,10 @@ QDir directory(directoryComboBox->currentText()); - QStringList allFiles = directory.entryList(QDir::Files | QDir::NoSymLinks); + const QStringList allFiles = directory.entryList(QDir::Files | QDir::NoSymLinks); QStringList matchingFiles; - foreach (QString file, allFiles) { + for (const QString &file : allFiles) { if (filePattern.exactMatch(file)) matchingFiles << file; } diff -Nru qttools-opensource-src-5.7.1/examples/assistant/simpletextviewer/mainwindow.h qttools-opensource-src-5.9.1/examples/assistant/simpletextviewer/mainwindow.h --- qttools-opensource-src-5.7.1/examples/assistant/simpletextviewer/mainwindow.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/examples/assistant/simpletextviewer/mainwindow.h 2017-06-23 12:03:39.000000000 +0000 @@ -70,7 +70,7 @@ void open(); protected: - void closeEvent(QCloseEvent *event); + void closeEvent(QCloseEvent *event) override; private: void createActions(); diff -Nru qttools-opensource-src-5.7.1/examples/assistant/simpletextviewer/textedit.h qttools-opensource-src-5.9.1/examples/assistant/simpletextviewer/textedit.h --- qttools-opensource-src-5.7.1/examples/assistant/simpletextviewer/textedit.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/examples/assistant/simpletextviewer/textedit.h 2017-06-23 12:03:39.000000000 +0000 @@ -63,7 +63,7 @@ void setContents(const QString &fileName); private: - QVariant loadResource(int type, const QUrl &name); + QVariant loadResource(int type, const QUrl &name) override; QUrl srcUrl; }; diff -Nru qttools-opensource-src-5.7.1/examples/designer/containerextension/multipagewidgetcontainerextension.h qttools-opensource-src-5.9.1/examples/designer/containerextension/multipagewidgetcontainerextension.h --- qttools-opensource-src-5.7.1/examples/designer/containerextension/multipagewidgetcontainerextension.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/examples/designer/containerextension/multipagewidgetcontainerextension.h 2017-06-23 12:03:39.000000000 +0000 @@ -68,13 +68,13 @@ public: explicit MultiPageWidgetContainerExtension(MultiPageWidget *widget, QObject *parent); - void addWidget(QWidget *widget) Q_DECL_OVERRIDE; - int count() const Q_DECL_OVERRIDE; - int currentIndex() const Q_DECL_OVERRIDE; - void insertWidget(int index, QWidget *widget) Q_DECL_OVERRIDE; - void remove(int index) Q_DECL_OVERRIDE; - void setCurrentIndex(int index) Q_DECL_OVERRIDE; - QWidget *widget(int index) const Q_DECL_OVERRIDE; + void addWidget(QWidget *widget) override; + int count() const override; + int currentIndex() const override; + void insertWidget(int index, QWidget *widget) override; + void remove(int index) override; + void setCurrentIndex(int index) override; + QWidget *widget(int index) const override; private: MultiPageWidget *myWidget; diff -Nru qttools-opensource-src-5.7.1/examples/designer/containerextension/multipagewidgetextensionfactory.h qttools-opensource-src-5.9.1/examples/designer/containerextension/multipagewidgetextensionfactory.h --- qttools-opensource-src-5.7.1/examples/designer/containerextension/multipagewidgetextensionfactory.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/examples/designer/containerextension/multipagewidgetextensionfactory.h 2017-06-23 12:03:39.000000000 +0000 @@ -66,7 +66,7 @@ explicit MultiPageWidgetExtensionFactory(QExtensionManager *parent = 0); protected: - QObject *createExtension(QObject *object, const QString &iid, QObject *parent) const Q_DECL_OVERRIDE; + QObject *createExtension(QObject *object, const QString &iid, QObject *parent) const override; }; //! [0] diff -Nru qttools-opensource-src-5.7.1/examples/designer/containerextension/multipagewidget.h qttools-opensource-src-5.9.1/examples/designer/containerextension/multipagewidget.h --- qttools-opensource-src-5.7.1/examples/designer/containerextension/multipagewidget.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/examples/designer/containerextension/multipagewidget.h 2017-06-23 12:03:39.000000000 +0000 @@ -68,7 +68,7 @@ public: explicit MultiPageWidget(QWidget *parent = 0); - QSize sizeHint() const Q_DECL_OVERRIDE; + QSize sizeHint() const override; int count() const; int currentIndex() const; diff -Nru qttools-opensource-src-5.7.1/examples/designer/containerextension/multipagewidgetplugin.h qttools-opensource-src-5.9.1/examples/designer/containerextension/multipagewidgetplugin.h --- qttools-opensource-src-5.7.1/examples/designer/containerextension/multipagewidgetplugin.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/examples/designer/containerextension/multipagewidgetplugin.h 2017-06-23 12:03:39.000000000 +0000 @@ -69,17 +69,17 @@ public: explicit MultiPageWidgetPlugin(QObject *parent = 0); - QString name() const Q_DECL_OVERRIDE; - QString group() const Q_DECL_OVERRIDE; - QString toolTip() const Q_DECL_OVERRIDE; - QString whatsThis() const Q_DECL_OVERRIDE; - QString includeFile() const Q_DECL_OVERRIDE; - QIcon icon() const Q_DECL_OVERRIDE; - bool isContainer() const Q_DECL_OVERRIDE; - QWidget *createWidget(QWidget *parent) Q_DECL_OVERRIDE; - bool isInitialized() const Q_DECL_OVERRIDE; - void initialize(QDesignerFormEditorInterface *formEditor) Q_DECL_OVERRIDE; - QString domXml() const Q_DECL_OVERRIDE; + QString name() const override; + QString group() const override; + QString toolTip() const override; + QString whatsThis() const override; + QString includeFile() const override; + QIcon icon() const override; + bool isContainer() const override; + QWidget *createWidget(QWidget *parent) override; + bool isInitialized() const override; + void initialize(QDesignerFormEditorInterface *formEditor) override; + QString domXml() const override; private slots: void currentIndexChanged(int index); diff -Nru qttools-opensource-src-5.7.1/examples/designer/customwidgetplugin/analogclock.h qttools-opensource-src-5.9.1/examples/designer/customwidgetplugin/analogclock.h --- qttools-opensource-src-5.7.1/examples/designer/customwidgetplugin/analogclock.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/examples/designer/customwidgetplugin/analogclock.h 2017-06-23 12:03:39.000000000 +0000 @@ -62,7 +62,7 @@ explicit AnalogClock(QWidget *parent = 0); protected: - void paintEvent(QPaintEvent *event) Q_DECL_OVERRIDE; + void paintEvent(QPaintEvent *event) override; }; #endif diff -Nru qttools-opensource-src-5.7.1/examples/designer/customwidgetplugin/customwidgetplugin.h qttools-opensource-src-5.9.1/examples/designer/customwidgetplugin/customwidgetplugin.h --- qttools-opensource-src-5.7.1/examples/designer/customwidgetplugin/customwidgetplugin.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/examples/designer/customwidgetplugin/customwidgetplugin.h 2017-06-23 12:03:39.000000000 +0000 @@ -62,17 +62,17 @@ public: explicit AnalogClockPlugin(QObject *parent = 0); - bool isContainer() const Q_DECL_OVERRIDE; - bool isInitialized() const Q_DECL_OVERRIDE; - QIcon icon() const Q_DECL_OVERRIDE; - QString domXml() const Q_DECL_OVERRIDE; - QString group() const Q_DECL_OVERRIDE; - QString includeFile() const Q_DECL_OVERRIDE; - QString name() const Q_DECL_OVERRIDE; - QString toolTip() const Q_DECL_OVERRIDE; - QString whatsThis() const Q_DECL_OVERRIDE; - QWidget *createWidget(QWidget *parent) Q_DECL_OVERRIDE; - void initialize(QDesignerFormEditorInterface *core) Q_DECL_OVERRIDE; + bool isContainer() const override; + bool isInitialized() const override; + QIcon icon() const override; + QString domXml() const override; + QString group() const override; + QString includeFile() const override; + QString name() const override; + QString toolTip() const override; + QString whatsThis() const override; + QWidget *createWidget(QWidget *parent) override; + void initialize(QDesignerFormEditorInterface *core) override; private: bool initialized; diff -Nru qttools-opensource-src-5.7.1/examples/designer/taskmenuextension/tictactoedialog.h qttools-opensource-src-5.9.1/examples/designer/taskmenuextension/tictactoedialog.h --- qttools-opensource-src-5.7.1/examples/designer/taskmenuextension/tictactoedialog.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/examples/designer/taskmenuextension/tictactoedialog.h 2017-06-23 12:03:39.000000000 +0000 @@ -66,7 +66,7 @@ public: explicit TicTacToeDialog(TicTacToe *plugin = 0, QWidget *parent = 0); - QSize sizeHint() const Q_DECL_OVERRIDE; + QSize sizeHint() const override; private slots: void resetState(); diff -Nru qttools-opensource-src-5.7.1/examples/designer/taskmenuextension/tictactoe.h qttools-opensource-src-5.9.1/examples/designer/taskmenuextension/tictactoe.h --- qttools-opensource-src-5.7.1/examples/designer/taskmenuextension/tictactoe.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/examples/designer/taskmenuextension/tictactoe.h 2017-06-23 12:03:39.000000000 +0000 @@ -67,15 +67,15 @@ public: explicit TicTacToe(QWidget *parent = 0); - QSize minimumSizeHint() const Q_DECL_OVERRIDE; - QSize sizeHint() const Q_DECL_OVERRIDE; + QSize minimumSizeHint() const override; + QSize sizeHint() const override; void setState(const QString &newState); QString state() const; void clearBoard(); protected: - void mousePressEvent(QMouseEvent *event) Q_DECL_OVERRIDE; - void paintEvent(QPaintEvent *event) Q_DECL_OVERRIDE; + void mousePressEvent(QMouseEvent *event) override; + void paintEvent(QPaintEvent *event) override; private: enum { Empty = '-', Cross = 'X', Nought = 'O' }; diff -Nru qttools-opensource-src-5.7.1/examples/designer/taskmenuextension/tictactoeplugin.h qttools-opensource-src-5.9.1/examples/designer/taskmenuextension/tictactoeplugin.h --- qttools-opensource-src-5.7.1/examples/designer/taskmenuextension/tictactoeplugin.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/examples/designer/taskmenuextension/tictactoeplugin.h 2017-06-23 12:03:39.000000000 +0000 @@ -70,17 +70,17 @@ public: TicTacToePlugin(QObject *parent = 0); - QString name() const Q_DECL_OVERRIDE; - QString group() const Q_DECL_OVERRIDE; - QString toolTip() const Q_DECL_OVERRIDE; - QString whatsThis() const Q_DECL_OVERRIDE; - QString includeFile() const Q_DECL_OVERRIDE; - QIcon icon() const Q_DECL_OVERRIDE; - bool isContainer() const Q_DECL_OVERRIDE; - QWidget *createWidget(QWidget *parent) Q_DECL_OVERRIDE; - bool isInitialized() const Q_DECL_OVERRIDE; - void initialize(QDesignerFormEditorInterface *formEditor) Q_DECL_OVERRIDE; - QString domXml() const Q_DECL_OVERRIDE; + QString name() const override; + QString group() const override; + QString toolTip() const override; + QString whatsThis() const override; + QString includeFile() const override; + QIcon icon() const override; + bool isContainer() const override; + QWidget *createWidget(QWidget *parent) override; + bool isInitialized() const override; + void initialize(QDesignerFormEditorInterface *formEditor) override; + QString domXml() const override; private: bool initialized; diff -Nru qttools-opensource-src-5.7.1/examples/designer/taskmenuextension/tictactoetaskmenu.h qttools-opensource-src-5.9.1/examples/designer/taskmenuextension/tictactoetaskmenu.h --- qttools-opensource-src-5.7.1/examples/designer/taskmenuextension/tictactoetaskmenu.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/examples/designer/taskmenuextension/tictactoetaskmenu.h 2017-06-23 12:03:39.000000000 +0000 @@ -69,8 +69,8 @@ public: explicit TicTacToeTaskMenu(TicTacToe *tic, QObject *parent); - QAction *preferredEditAction() const Q_DECL_OVERRIDE; - QList taskActions() const Q_DECL_OVERRIDE; + QAction *preferredEditAction() const override; + QList taskActions() const override; private slots: void editState(); @@ -90,7 +90,7 @@ explicit TicTacToeTaskMenuFactory(QExtensionManager *parent = 0); protected: - QObject *createExtension(QObject *object, const QString &iid, QObject *parent) const Q_DECL_OVERRIDE; + QObject *createExtension(QObject *object, const QString &iid, QObject *parent) const override; }; //! [1] diff -Nru qttools-opensource-src-5.7.1/examples/designer/worldtimeclockplugin/worldtimeclock.h qttools-opensource-src-5.9.1/examples/designer/worldtimeclockplugin/worldtimeclock.h --- qttools-opensource-src-5.7.1/examples/designer/worldtimeclockplugin/worldtimeclock.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/examples/designer/worldtimeclockplugin/worldtimeclock.h 2017-06-23 12:03:39.000000000 +0000 @@ -71,7 +71,7 @@ void updated(QTime currentTime); protected: - void paintEvent(QPaintEvent *event) Q_DECL_OVERRIDE; + void paintEvent(QPaintEvent *event) override; private: int timeZoneOffset; diff -Nru qttools-opensource-src-5.7.1/examples/designer/worldtimeclockplugin/worldtimeclockplugin.h qttools-opensource-src-5.9.1/examples/designer/worldtimeclockplugin/worldtimeclockplugin.h --- qttools-opensource-src-5.7.1/examples/designer/worldtimeclockplugin/worldtimeclockplugin.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/examples/designer/worldtimeclockplugin/worldtimeclockplugin.h 2017-06-23 12:03:39.000000000 +0000 @@ -66,17 +66,17 @@ public: explicit WorldTimeClockPlugin(QObject *parent = 0); - bool isContainer() const Q_DECL_OVERRIDE; - bool isInitialized() const Q_DECL_OVERRIDE; - QIcon icon() const Q_DECL_OVERRIDE; - QString domXml() const Q_DECL_OVERRIDE; - QString group() const Q_DECL_OVERRIDE; - QString includeFile() const Q_DECL_OVERRIDE; - QString name() const Q_DECL_OVERRIDE; - QString toolTip() const Q_DECL_OVERRIDE; - QString whatsThis() const Q_DECL_OVERRIDE; - QWidget *createWidget(QWidget *parent) Q_DECL_OVERRIDE; - void initialize(QDesignerFormEditorInterface *core) Q_DECL_OVERRIDE; + bool isContainer() const override; + bool isInitialized() const override; + QIcon icon() const override; + QString domXml() const override; + QString group() const override; + QString includeFile() const override; + QString name() const override; + QString toolTip() const override; + QString whatsThis() const override; + QWidget *createWidget(QWidget *parent) override; + void initialize(QDesignerFormEditorInterface *core) override; private: bool initialized; diff -Nru qttools-opensource-src-5.7.1/examples/help/contextsensitivehelp/helpbrowser.h qttools-opensource-src-5.9.1/examples/help/contextsensitivehelp/helpbrowser.h --- qttools-opensource-src-5.7.1/examples/help/contextsensitivehelp/helpbrowser.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/examples/help/contextsensitivehelp/helpbrowser.h 2017-06-23 12:03:39.000000000 +0000 @@ -66,7 +66,7 @@ void showHelpForKeyword(const QString &id); private: - QVariant loadResource(int type, const QUrl &name); + QVariant loadResource(int type, const QUrl &name) override; QHelpEngineCore *m_helpEngine; }; diff -Nru qttools-opensource-src-5.7.1/examples/uitools/uitools.pro qttools-opensource-src-5.9.1/examples/uitools/uitools.pro --- qttools-opensource-src-5.7.1/examples/uitools/uitools.pro 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/examples/uitools/uitools.pro 2017-06-23 12:03:39.000000000 +0000 @@ -1,4 +1,4 @@ TEMPLATE = subdirs SUBDIRS = multipleinheritance -!wince: SUBDIRS += textfinder +SUBDIRS += textfinder diff -Nru qttools-opensource-src-5.7.1/include/QtCLucene/5.7.1/QtCLucene/private/qanalyzer_p.h qttools-opensource-src-5.9.1/include/QtCLucene/5.7.1/QtCLucene/private/qanalyzer_p.h --- qttools-opensource-src-5.7.1/include/QtCLucene/5.7.1/QtCLucene/private/qanalyzer_p.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtCLucene/5.7.1/QtCLucene/private/qanalyzer_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/assistant/clucene/qanalyzer_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtCLucene/5.7.1/QtCLucene/private/qclucene-config_p.h qttools-opensource-src-5.9.1/include/QtCLucene/5.7.1/QtCLucene/private/qclucene-config_p.h --- qttools-opensource-src-5.7.1/include/QtCLucene/5.7.1/QtCLucene/private/qclucene-config_p.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtCLucene/5.7.1/QtCLucene/private/qclucene-config_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/assistant/clucene/qclucene-config_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtCLucene/5.7.1/QtCLucene/private/qclucene_global_p.h qttools-opensource-src-5.9.1/include/QtCLucene/5.7.1/QtCLucene/private/qclucene_global_p.h --- qttools-opensource-src-5.7.1/include/QtCLucene/5.7.1/QtCLucene/private/qclucene_global_p.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtCLucene/5.7.1/QtCLucene/private/qclucene_global_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/assistant/clucene/qclucene_global_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtCLucene/5.7.1/QtCLucene/private/qdocument_p.h qttools-opensource-src-5.9.1/include/QtCLucene/5.7.1/QtCLucene/private/qdocument_p.h --- qttools-opensource-src-5.7.1/include/QtCLucene/5.7.1/QtCLucene/private/qdocument_p.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtCLucene/5.7.1/QtCLucene/private/qdocument_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/assistant/clucene/qdocument_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtCLucene/5.7.1/QtCLucene/private/qfield_p.h qttools-opensource-src-5.9.1/include/QtCLucene/5.7.1/QtCLucene/private/qfield_p.h --- qttools-opensource-src-5.7.1/include/QtCLucene/5.7.1/QtCLucene/private/qfield_p.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtCLucene/5.7.1/QtCLucene/private/qfield_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/assistant/clucene/qfield_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtCLucene/5.7.1/QtCLucene/private/qfilter_p.h qttools-opensource-src-5.9.1/include/QtCLucene/5.7.1/QtCLucene/private/qfilter_p.h --- qttools-opensource-src-5.7.1/include/QtCLucene/5.7.1/QtCLucene/private/qfilter_p.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtCLucene/5.7.1/QtCLucene/private/qfilter_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/assistant/clucene/qfilter_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtCLucene/5.7.1/QtCLucene/private/qhits_p.h qttools-opensource-src-5.9.1/include/QtCLucene/5.7.1/QtCLucene/private/qhits_p.h --- qttools-opensource-src-5.7.1/include/QtCLucene/5.7.1/QtCLucene/private/qhits_p.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtCLucene/5.7.1/QtCLucene/private/qhits_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/assistant/clucene/qhits_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtCLucene/5.7.1/QtCLucene/private/qindexreader_p.h qttools-opensource-src-5.9.1/include/QtCLucene/5.7.1/QtCLucene/private/qindexreader_p.h --- qttools-opensource-src-5.7.1/include/QtCLucene/5.7.1/QtCLucene/private/qindexreader_p.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtCLucene/5.7.1/QtCLucene/private/qindexreader_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/assistant/clucene/qindexreader_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtCLucene/5.7.1/QtCLucene/private/qindexwriter_p.h qttools-opensource-src-5.9.1/include/QtCLucene/5.7.1/QtCLucene/private/qindexwriter_p.h --- qttools-opensource-src-5.7.1/include/QtCLucene/5.7.1/QtCLucene/private/qindexwriter_p.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtCLucene/5.7.1/QtCLucene/private/qindexwriter_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/assistant/clucene/qindexwriter_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtCLucene/5.7.1/QtCLucene/private/qqueryparser_p.h qttools-opensource-src-5.9.1/include/QtCLucene/5.7.1/QtCLucene/private/qqueryparser_p.h --- qttools-opensource-src-5.7.1/include/QtCLucene/5.7.1/QtCLucene/private/qqueryparser_p.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtCLucene/5.7.1/QtCLucene/private/qqueryparser_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/assistant/clucene/qqueryparser_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtCLucene/5.7.1/QtCLucene/private/qquery_p.h qttools-opensource-src-5.9.1/include/QtCLucene/5.7.1/QtCLucene/private/qquery_p.h --- qttools-opensource-src-5.7.1/include/QtCLucene/5.7.1/QtCLucene/private/qquery_p.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtCLucene/5.7.1/QtCLucene/private/qquery_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/assistant/clucene/qquery_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtCLucene/5.7.1/QtCLucene/private/qreader_p.h qttools-opensource-src-5.9.1/include/QtCLucene/5.7.1/QtCLucene/private/qreader_p.h --- qttools-opensource-src-5.7.1/include/QtCLucene/5.7.1/QtCLucene/private/qreader_p.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtCLucene/5.7.1/QtCLucene/private/qreader_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/assistant/clucene/qreader_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtCLucene/5.7.1/QtCLucene/private/qsearchable_p.h qttools-opensource-src-5.9.1/include/QtCLucene/5.7.1/QtCLucene/private/qsearchable_p.h --- qttools-opensource-src-5.7.1/include/QtCLucene/5.7.1/QtCLucene/private/qsearchable_p.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtCLucene/5.7.1/QtCLucene/private/qsearchable_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/assistant/clucene/qsearchable_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtCLucene/5.7.1/QtCLucene/private/qsort_p.h qttools-opensource-src-5.9.1/include/QtCLucene/5.7.1/QtCLucene/private/qsort_p.h --- qttools-opensource-src-5.7.1/include/QtCLucene/5.7.1/QtCLucene/private/qsort_p.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtCLucene/5.7.1/QtCLucene/private/qsort_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/assistant/clucene/qsort_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtCLucene/5.7.1/QtCLucene/private/qterm_p.h qttools-opensource-src-5.9.1/include/QtCLucene/5.7.1/QtCLucene/private/qterm_p.h --- qttools-opensource-src-5.7.1/include/QtCLucene/5.7.1/QtCLucene/private/qterm_p.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtCLucene/5.7.1/QtCLucene/private/qterm_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/assistant/clucene/qterm_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtCLucene/5.7.1/QtCLucene/private/qtokenizer_p.h qttools-opensource-src-5.9.1/include/QtCLucene/5.7.1/QtCLucene/private/qtokenizer_p.h --- qttools-opensource-src-5.7.1/include/QtCLucene/5.7.1/QtCLucene/private/qtokenizer_p.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtCLucene/5.7.1/QtCLucene/private/qtokenizer_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/assistant/clucene/qtokenizer_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtCLucene/5.7.1/QtCLucene/private/qtoken_p.h qttools-opensource-src-5.9.1/include/QtCLucene/5.7.1/QtCLucene/private/qtoken_p.h --- qttools-opensource-src-5.7.1/include/QtCLucene/5.7.1/QtCLucene/private/qtoken_p.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtCLucene/5.7.1/QtCLucene/private/qtoken_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/assistant/clucene/qtoken_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtCLucene/5.7.1/QtCLucene/private/qtokenstream_p.h qttools-opensource-src-5.9.1/include/QtCLucene/5.7.1/QtCLucene/private/qtokenstream_p.h --- qttools-opensource-src-5.7.1/include/QtCLucene/5.7.1/QtCLucene/private/qtokenstream_p.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtCLucene/5.7.1/QtCLucene/private/qtokenstream_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/assistant/clucene/qtokenstream_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtCLucene/headers.pri qttools-opensource-src-5.9.1/include/QtCLucene/headers.pri --- qttools-opensource-src-5.7.1/include/QtCLucene/headers.pri 2016-12-02 11:06:42.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtCLucene/headers.pri 1970-01-01 00:00:00.000000000 +0000 @@ -1,6 +0,0 @@ -SYNCQT.HEADER_FILES = ../../../include/QtCLucene/qtcluceneversion.h ../../../include/QtCLucene/QtCLucene -SYNCQT.HEADER_CLASSES = ../../../include/QtCLucene/QtCLuceneVersion -SYNCQT.PRIVATE_HEADER_FILES = qanalyzer_p.h qclucene-config_p.h qclucene_global_p.h qdocument_p.h qfield_p.h qfilter_p.h qhits_p.h qindexreader_p.h qindexwriter_p.h qquery_p.h qqueryparser_p.h qreader_p.h qsearchable_p.h qsort_p.h qterm_p.h qtoken_p.h qtokenizer_p.h qtokenstream_p.h -SYNCQT.QPA_HEADER_FILES = -SYNCQT.CLEAN_HEADER_FILES = -SYNCQT.INJECTIONS = diff -Nru qttools-opensource-src-5.7.1/include/QtCLucene/QtCLucene qttools-opensource-src-5.9.1/include/QtCLucene/QtCLucene --- qttools-opensource-src-5.7.1/include/QtCLucene/QtCLucene 2016-12-02 11:06:42.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtCLucene/QtCLucene 1970-01-01 00:00:00.000000000 +0000 @@ -1,5 +0,0 @@ -#ifndef QT_QTCLUCENE_MODULE_H -#define QT_QTCLUCENE_MODULE_H -#include -#include "qtcluceneversion.h" -#endif diff -Nru qttools-opensource-src-5.7.1/include/QtCLucene/QtCLuceneVersion qttools-opensource-src-5.9.1/include/QtCLucene/QtCLuceneVersion --- qttools-opensource-src-5.7.1/include/QtCLucene/QtCLuceneVersion 2016-12-02 11:06:42.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtCLucene/QtCLuceneVersion 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "qtcluceneversion.h" diff -Nru qttools-opensource-src-5.7.1/include/QtCLucene/qtcluceneversion.h qttools-opensource-src-5.9.1/include/QtCLucene/qtcluceneversion.h --- qttools-opensource-src-5.7.1/include/QtCLucene/qtcluceneversion.h 2016-12-02 11:06:42.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtCLucene/qtcluceneversion.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,9 +0,0 @@ -/* This file was generated by syncqt. */ -#ifndef QT_QTCLUCENE_VERSION_H -#define QT_QTCLUCENE_VERSION_H - -#define QTCLUCENE_VERSION_STR "5.7.1" - -#define QTCLUCENE_VERSION 0x050701 - -#endif // QT_QTCLUCENE_VERSION_H diff -Nru qttools-opensource-src-5.7.1/include/QtDesigner/5.7.1/QtDesigner/private/abstractdialoggui_p.h qttools-opensource-src-5.9.1/include/QtDesigner/5.7.1/QtDesigner/private/abstractdialoggui_p.h --- qttools-opensource-src-5.7.1/include/QtDesigner/5.7.1/QtDesigner/private/abstractdialoggui_p.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtDesigner/5.7.1/QtDesigner/private/abstractdialoggui_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/designer/src/lib/sdk/abstractdialoggui_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtDesigner/5.7.1/QtDesigner/private/abstractintrospection_p.h qttools-opensource-src-5.9.1/include/QtDesigner/5.7.1/QtDesigner/private/abstractintrospection_p.h --- qttools-opensource-src-5.7.1/include/QtDesigner/5.7.1/QtDesigner/private/abstractintrospection_p.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtDesigner/5.7.1/QtDesigner/private/abstractintrospection_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/designer/src/lib/sdk/abstractintrospection_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtDesigner/5.7.1/QtDesigner/private/actioneditor_p.h qttools-opensource-src-5.9.1/include/QtDesigner/5.7.1/QtDesigner/private/actioneditor_p.h --- qttools-opensource-src-5.7.1/include/QtDesigner/5.7.1/QtDesigner/private/actioneditor_p.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtDesigner/5.7.1/QtDesigner/private/actioneditor_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/designer/src/lib/shared/actioneditor_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtDesigner/5.7.1/QtDesigner/private/actionprovider_p.h qttools-opensource-src-5.9.1/include/QtDesigner/5.7.1/QtDesigner/private/actionprovider_p.h --- qttools-opensource-src-5.7.1/include/QtDesigner/5.7.1/QtDesigner/private/actionprovider_p.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtDesigner/5.7.1/QtDesigner/private/actionprovider_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/designer/src/lib/shared/actionprovider_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtDesigner/5.7.1/QtDesigner/private/actionrepository_p.h qttools-opensource-src-5.9.1/include/QtDesigner/5.7.1/QtDesigner/private/actionrepository_p.h --- qttools-opensource-src-5.7.1/include/QtDesigner/5.7.1/QtDesigner/private/actionrepository_p.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtDesigner/5.7.1/QtDesigner/private/actionrepository_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/designer/src/lib/shared/actionrepository_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtDesigner/5.7.1/QtDesigner/private/codedialog_p.h qttools-opensource-src-5.9.1/include/QtDesigner/5.7.1/QtDesigner/private/codedialog_p.h --- qttools-opensource-src-5.7.1/include/QtDesigner/5.7.1/QtDesigner/private/codedialog_p.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtDesigner/5.7.1/QtDesigner/private/codedialog_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/designer/src/lib/shared/codedialog_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtDesigner/5.7.1/QtDesigner/private/connectionedit_p.h qttools-opensource-src-5.9.1/include/QtDesigner/5.7.1/QtDesigner/private/connectionedit_p.h --- qttools-opensource-src-5.7.1/include/QtDesigner/5.7.1/QtDesigner/private/connectionedit_p.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtDesigner/5.7.1/QtDesigner/private/connectionedit_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/designer/src/lib/shared/connectionedit_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtDesigner/5.7.1/QtDesigner/private/csshighlighter_p.h qttools-opensource-src-5.9.1/include/QtDesigner/5.7.1/QtDesigner/private/csshighlighter_p.h --- qttools-opensource-src-5.7.1/include/QtDesigner/5.7.1/QtDesigner/private/csshighlighter_p.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtDesigner/5.7.1/QtDesigner/private/csshighlighter_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/designer/src/lib/shared/csshighlighter_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtDesigner/5.7.1/QtDesigner/private/deviceprofile_p.h qttools-opensource-src-5.9.1/include/QtDesigner/5.7.1/QtDesigner/private/deviceprofile_p.h --- qttools-opensource-src-5.7.1/include/QtDesigner/5.7.1/QtDesigner/private/deviceprofile_p.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtDesigner/5.7.1/QtDesigner/private/deviceprofile_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/designer/src/lib/shared/deviceprofile_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtDesigner/5.7.1/QtDesigner/private/dialoggui_p.h qttools-opensource-src-5.9.1/include/QtDesigner/5.7.1/QtDesigner/private/dialoggui_p.h --- qttools-opensource-src-5.7.1/include/QtDesigner/5.7.1/QtDesigner/private/dialoggui_p.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtDesigner/5.7.1/QtDesigner/private/dialoggui_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/designer/src/lib/shared/dialoggui_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtDesigner/5.7.1/QtDesigner/private/extensionfactory_p.h qttools-opensource-src-5.9.1/include/QtDesigner/5.7.1/QtDesigner/private/extensionfactory_p.h --- qttools-opensource-src-5.7.1/include/QtDesigner/5.7.1/QtDesigner/private/extensionfactory_p.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtDesigner/5.7.1/QtDesigner/private/extensionfactory_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/designer/src/lib/shared/extensionfactory_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtDesigner/5.7.1/QtDesigner/private/formbuilderextra_p.h qttools-opensource-src-5.9.1/include/QtDesigner/5.7.1/QtDesigner/private/formbuilderextra_p.h --- qttools-opensource-src-5.7.1/include/QtDesigner/5.7.1/QtDesigner/private/formbuilderextra_p.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtDesigner/5.7.1/QtDesigner/private/formbuilderextra_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/designer/src/lib/uilib/formbuilderextra_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtDesigner/5.7.1/QtDesigner/private/formlayoutmenu_p.h qttools-opensource-src-5.9.1/include/QtDesigner/5.7.1/QtDesigner/private/formlayoutmenu_p.h --- qttools-opensource-src-5.7.1/include/QtDesigner/5.7.1/QtDesigner/private/formlayoutmenu_p.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtDesigner/5.7.1/QtDesigner/private/formlayoutmenu_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/designer/src/lib/shared/formlayoutmenu_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtDesigner/5.7.1/QtDesigner/private/formwindowbase_p.h qttools-opensource-src-5.9.1/include/QtDesigner/5.7.1/QtDesigner/private/formwindowbase_p.h --- qttools-opensource-src-5.7.1/include/QtDesigner/5.7.1/QtDesigner/private/formwindowbase_p.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtDesigner/5.7.1/QtDesigner/private/formwindowbase_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/designer/src/lib/shared/formwindowbase_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtDesigner/5.7.1/QtDesigner/private/gridpanel_p.h qttools-opensource-src-5.9.1/include/QtDesigner/5.7.1/QtDesigner/private/gridpanel_p.h --- qttools-opensource-src-5.7.1/include/QtDesigner/5.7.1/QtDesigner/private/gridpanel_p.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtDesigner/5.7.1/QtDesigner/private/gridpanel_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/designer/src/lib/shared/gridpanel_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtDesigner/5.7.1/QtDesigner/private/grid_p.h qttools-opensource-src-5.9.1/include/QtDesigner/5.7.1/QtDesigner/private/grid_p.h --- qttools-opensource-src-5.7.1/include/QtDesigner/5.7.1/QtDesigner/private/grid_p.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtDesigner/5.7.1/QtDesigner/private/grid_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/designer/src/lib/shared/grid_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtDesigner/5.7.1/QtDesigner/private/htmlhighlighter_p.h qttools-opensource-src-5.9.1/include/QtDesigner/5.7.1/QtDesigner/private/htmlhighlighter_p.h --- qttools-opensource-src-5.7.1/include/QtDesigner/5.7.1/QtDesigner/private/htmlhighlighter_p.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtDesigner/5.7.1/QtDesigner/private/htmlhighlighter_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/designer/src/lib/shared/htmlhighlighter_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtDesigner/5.7.1/QtDesigner/private/iconloader_p.h qttools-opensource-src-5.9.1/include/QtDesigner/5.7.1/QtDesigner/private/iconloader_p.h --- qttools-opensource-src-5.7.1/include/QtDesigner/5.7.1/QtDesigner/private/iconloader_p.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtDesigner/5.7.1/QtDesigner/private/iconloader_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/designer/src/lib/shared/iconloader_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtDesigner/5.7.1/QtDesigner/private/iconselector_p.h qttools-opensource-src-5.9.1/include/QtDesigner/5.7.1/QtDesigner/private/iconselector_p.h --- qttools-opensource-src-5.7.1/include/QtDesigner/5.7.1/QtDesigner/private/iconselector_p.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtDesigner/5.7.1/QtDesigner/private/iconselector_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/designer/src/lib/shared/iconselector_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtDesigner/5.7.1/QtDesigner/private/invisible_widget_p.h qttools-opensource-src-5.9.1/include/QtDesigner/5.7.1/QtDesigner/private/invisible_widget_p.h --- qttools-opensource-src-5.7.1/include/QtDesigner/5.7.1/QtDesigner/private/invisible_widget_p.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtDesigner/5.7.1/QtDesigner/private/invisible_widget_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/designer/src/lib/shared/invisible_widget_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtDesigner/5.7.1/QtDesigner/private/layoutinfo_p.h qttools-opensource-src-5.9.1/include/QtDesigner/5.7.1/QtDesigner/private/layoutinfo_p.h --- qttools-opensource-src-5.7.1/include/QtDesigner/5.7.1/QtDesigner/private/layoutinfo_p.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtDesigner/5.7.1/QtDesigner/private/layoutinfo_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/designer/src/lib/shared/layoutinfo_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtDesigner/5.7.1/QtDesigner/private/layout_p.h qttools-opensource-src-5.9.1/include/QtDesigner/5.7.1/QtDesigner/private/layout_p.h --- qttools-opensource-src-5.7.1/include/QtDesigner/5.7.1/QtDesigner/private/layout_p.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtDesigner/5.7.1/QtDesigner/private/layout_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/designer/src/lib/shared/layout_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtDesigner/5.7.1/QtDesigner/private/lib_pch.h qttools-opensource-src-5.9.1/include/QtDesigner/5.7.1/QtDesigner/private/lib_pch.h --- qttools-opensource-src-5.7.1/include/QtDesigner/5.7.1/QtDesigner/private/lib_pch.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtDesigner/5.7.1/QtDesigner/private/lib_pch.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/designer/src/lib/lib_pch.h" diff -Nru qttools-opensource-src-5.7.1/include/QtDesigner/5.7.1/QtDesigner/private/metadatabase_p.h qttools-opensource-src-5.9.1/include/QtDesigner/5.7.1/QtDesigner/private/metadatabase_p.h --- qttools-opensource-src-5.7.1/include/QtDesigner/5.7.1/QtDesigner/private/metadatabase_p.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtDesigner/5.7.1/QtDesigner/private/metadatabase_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/designer/src/lib/shared/metadatabase_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtDesigner/5.7.1/QtDesigner/private/morphmenu_p.h qttools-opensource-src-5.9.1/include/QtDesigner/5.7.1/QtDesigner/private/morphmenu_p.h --- qttools-opensource-src-5.7.1/include/QtDesigner/5.7.1/QtDesigner/private/morphmenu_p.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtDesigner/5.7.1/QtDesigner/private/morphmenu_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/designer/src/lib/shared/morphmenu_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtDesigner/5.7.1/QtDesigner/private/newactiondialog_p.h qttools-opensource-src-5.9.1/include/QtDesigner/5.7.1/QtDesigner/private/newactiondialog_p.h --- qttools-opensource-src-5.7.1/include/QtDesigner/5.7.1/QtDesigner/private/newactiondialog_p.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtDesigner/5.7.1/QtDesigner/private/newactiondialog_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/designer/src/lib/shared/newactiondialog_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtDesigner/5.7.1/QtDesigner/private/newformwidget_p.h qttools-opensource-src-5.9.1/include/QtDesigner/5.7.1/QtDesigner/private/newformwidget_p.h --- qttools-opensource-src-5.7.1/include/QtDesigner/5.7.1/QtDesigner/private/newformwidget_p.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtDesigner/5.7.1/QtDesigner/private/newformwidget_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/designer/src/lib/shared/newformwidget_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtDesigner/5.7.1/QtDesigner/private/orderdialog_p.h qttools-opensource-src-5.9.1/include/QtDesigner/5.7.1/QtDesigner/private/orderdialog_p.h --- qttools-opensource-src-5.7.1/include/QtDesigner/5.7.1/QtDesigner/private/orderdialog_p.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtDesigner/5.7.1/QtDesigner/private/orderdialog_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/designer/src/lib/shared/orderdialog_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtDesigner/5.7.1/QtDesigner/private/plaintexteditor_p.h qttools-opensource-src-5.9.1/include/QtDesigner/5.7.1/QtDesigner/private/plaintexteditor_p.h --- qttools-opensource-src-5.7.1/include/QtDesigner/5.7.1/QtDesigner/private/plaintexteditor_p.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtDesigner/5.7.1/QtDesigner/private/plaintexteditor_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/designer/src/lib/shared/plaintexteditor_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtDesigner/5.7.1/QtDesigner/private/plugindialog_p.h qttools-opensource-src-5.9.1/include/QtDesigner/5.7.1/QtDesigner/private/plugindialog_p.h --- qttools-opensource-src-5.7.1/include/QtDesigner/5.7.1/QtDesigner/private/plugindialog_p.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtDesigner/5.7.1/QtDesigner/private/plugindialog_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/designer/src/lib/shared/plugindialog_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtDesigner/5.7.1/QtDesigner/private/pluginmanager_p.h qttools-opensource-src-5.9.1/include/QtDesigner/5.7.1/QtDesigner/private/pluginmanager_p.h --- qttools-opensource-src-5.7.1/include/QtDesigner/5.7.1/QtDesigner/private/pluginmanager_p.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtDesigner/5.7.1/QtDesigner/private/pluginmanager_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/designer/src/lib/shared/pluginmanager_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtDesigner/5.7.1/QtDesigner/private/previewconfigurationwidget_p.h qttools-opensource-src-5.9.1/include/QtDesigner/5.7.1/QtDesigner/private/previewconfigurationwidget_p.h --- qttools-opensource-src-5.7.1/include/QtDesigner/5.7.1/QtDesigner/private/previewconfigurationwidget_p.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtDesigner/5.7.1/QtDesigner/private/previewconfigurationwidget_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/designer/src/lib/shared/previewconfigurationwidget_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtDesigner/5.7.1/QtDesigner/private/previewmanager_p.h qttools-opensource-src-5.9.1/include/QtDesigner/5.7.1/QtDesigner/private/previewmanager_p.h --- qttools-opensource-src-5.7.1/include/QtDesigner/5.7.1/QtDesigner/private/previewmanager_p.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtDesigner/5.7.1/QtDesigner/private/previewmanager_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/designer/src/lib/shared/previewmanager_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtDesigner/5.7.1/QtDesigner/private/promotionmodel_p.h qttools-opensource-src-5.9.1/include/QtDesigner/5.7.1/QtDesigner/private/promotionmodel_p.h --- qttools-opensource-src-5.7.1/include/QtDesigner/5.7.1/QtDesigner/private/promotionmodel_p.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtDesigner/5.7.1/QtDesigner/private/promotionmodel_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/designer/src/lib/shared/promotionmodel_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtDesigner/5.7.1/QtDesigner/private/promotiontaskmenu_p.h qttools-opensource-src-5.9.1/include/QtDesigner/5.7.1/QtDesigner/private/promotiontaskmenu_p.h --- qttools-opensource-src-5.7.1/include/QtDesigner/5.7.1/QtDesigner/private/promotiontaskmenu_p.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtDesigner/5.7.1/QtDesigner/private/promotiontaskmenu_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/designer/src/lib/shared/promotiontaskmenu_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtDesigner/5.7.1/QtDesigner/private/properties_p.h qttools-opensource-src-5.9.1/include/QtDesigner/5.7.1/QtDesigner/private/properties_p.h --- qttools-opensource-src-5.7.1/include/QtDesigner/5.7.1/QtDesigner/private/properties_p.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtDesigner/5.7.1/QtDesigner/private/properties_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/designer/src/lib/uilib/properties_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtDesigner/5.7.1/QtDesigner/private/propertylineedit_p.h qttools-opensource-src-5.9.1/include/QtDesigner/5.7.1/QtDesigner/private/propertylineedit_p.h --- qttools-opensource-src-5.7.1/include/QtDesigner/5.7.1/QtDesigner/private/propertylineedit_p.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtDesigner/5.7.1/QtDesigner/private/propertylineedit_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/designer/src/lib/shared/propertylineedit_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtDesigner/5.7.1/QtDesigner/private/qdesigner_command2_p.h qttools-opensource-src-5.9.1/include/QtDesigner/5.7.1/QtDesigner/private/qdesigner_command2_p.h --- qttools-opensource-src-5.7.1/include/QtDesigner/5.7.1/QtDesigner/private/qdesigner_command2_p.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtDesigner/5.7.1/QtDesigner/private/qdesigner_command2_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/designer/src/lib/shared/qdesigner_command2_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtDesigner/5.7.1/QtDesigner/private/qdesigner_command_p.h qttools-opensource-src-5.9.1/include/QtDesigner/5.7.1/QtDesigner/private/qdesigner_command_p.h --- qttools-opensource-src-5.7.1/include/QtDesigner/5.7.1/QtDesigner/private/qdesigner_command_p.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtDesigner/5.7.1/QtDesigner/private/qdesigner_command_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/designer/src/lib/shared/qdesigner_command_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtDesigner/5.7.1/QtDesigner/private/qdesigner_dnditem_p.h qttools-opensource-src-5.9.1/include/QtDesigner/5.7.1/QtDesigner/private/qdesigner_dnditem_p.h --- qttools-opensource-src-5.7.1/include/QtDesigner/5.7.1/QtDesigner/private/qdesigner_dnditem_p.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtDesigner/5.7.1/QtDesigner/private/qdesigner_dnditem_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/designer/src/lib/shared/qdesigner_dnditem_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtDesigner/5.7.1/QtDesigner/private/qdesigner_dockwidget_p.h qttools-opensource-src-5.9.1/include/QtDesigner/5.7.1/QtDesigner/private/qdesigner_dockwidget_p.h --- qttools-opensource-src-5.7.1/include/QtDesigner/5.7.1/QtDesigner/private/qdesigner_dockwidget_p.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtDesigner/5.7.1/QtDesigner/private/qdesigner_dockwidget_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/designer/src/lib/shared/qdesigner_dockwidget_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtDesigner/5.7.1/QtDesigner/private/qdesigner_formbuilder_p.h qttools-opensource-src-5.9.1/include/QtDesigner/5.7.1/QtDesigner/private/qdesigner_formbuilder_p.h --- qttools-opensource-src-5.7.1/include/QtDesigner/5.7.1/QtDesigner/private/qdesigner_formbuilder_p.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtDesigner/5.7.1/QtDesigner/private/qdesigner_formbuilder_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/designer/src/lib/shared/qdesigner_formbuilder_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtDesigner/5.7.1/QtDesigner/private/qdesigner_formeditorcommand_p.h qttools-opensource-src-5.9.1/include/QtDesigner/5.7.1/QtDesigner/private/qdesigner_formeditorcommand_p.h --- qttools-opensource-src-5.7.1/include/QtDesigner/5.7.1/QtDesigner/private/qdesigner_formeditorcommand_p.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtDesigner/5.7.1/QtDesigner/private/qdesigner_formeditorcommand_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/designer/src/lib/shared/qdesigner_formeditorcommand_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtDesigner/5.7.1/QtDesigner/private/qdesigner_formwindowcommand_p.h qttools-opensource-src-5.9.1/include/QtDesigner/5.7.1/QtDesigner/private/qdesigner_formwindowcommand_p.h --- qttools-opensource-src-5.7.1/include/QtDesigner/5.7.1/QtDesigner/private/qdesigner_formwindowcommand_p.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtDesigner/5.7.1/QtDesigner/private/qdesigner_formwindowcommand_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/designer/src/lib/shared/qdesigner_formwindowcommand_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtDesigner/5.7.1/QtDesigner/private/qdesigner_formwindowmanager_p.h qttools-opensource-src-5.9.1/include/QtDesigner/5.7.1/QtDesigner/private/qdesigner_formwindowmanager_p.h --- qttools-opensource-src-5.7.1/include/QtDesigner/5.7.1/QtDesigner/private/qdesigner_formwindowmanager_p.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtDesigner/5.7.1/QtDesigner/private/qdesigner_formwindowmanager_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/designer/src/lib/shared/qdesigner_formwindowmanager_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtDesigner/5.7.1/QtDesigner/private/qdesigner_introspection_p.h qttools-opensource-src-5.9.1/include/QtDesigner/5.7.1/QtDesigner/private/qdesigner_introspection_p.h --- qttools-opensource-src-5.7.1/include/QtDesigner/5.7.1/QtDesigner/private/qdesigner_introspection_p.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtDesigner/5.7.1/QtDesigner/private/qdesigner_introspection_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/designer/src/lib/shared/qdesigner_introspection_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtDesigner/5.7.1/QtDesigner/private/qdesigner_membersheet_p.h qttools-opensource-src-5.9.1/include/QtDesigner/5.7.1/QtDesigner/private/qdesigner_membersheet_p.h --- qttools-opensource-src-5.7.1/include/QtDesigner/5.7.1/QtDesigner/private/qdesigner_membersheet_p.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtDesigner/5.7.1/QtDesigner/private/qdesigner_membersheet_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/designer/src/lib/shared/qdesigner_membersheet_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtDesigner/5.7.1/QtDesigner/private/qdesigner_menubar_p.h qttools-opensource-src-5.9.1/include/QtDesigner/5.7.1/QtDesigner/private/qdesigner_menubar_p.h --- qttools-opensource-src-5.7.1/include/QtDesigner/5.7.1/QtDesigner/private/qdesigner_menubar_p.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtDesigner/5.7.1/QtDesigner/private/qdesigner_menubar_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/designer/src/lib/shared/qdesigner_menubar_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtDesigner/5.7.1/QtDesigner/private/qdesigner_menu_p.h qttools-opensource-src-5.9.1/include/QtDesigner/5.7.1/QtDesigner/private/qdesigner_menu_p.h --- qttools-opensource-src-5.7.1/include/QtDesigner/5.7.1/QtDesigner/private/qdesigner_menu_p.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtDesigner/5.7.1/QtDesigner/private/qdesigner_menu_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/designer/src/lib/shared/qdesigner_menu_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtDesigner/5.7.1/QtDesigner/private/qdesigner_objectinspector_p.h qttools-opensource-src-5.9.1/include/QtDesigner/5.7.1/QtDesigner/private/qdesigner_objectinspector_p.h --- qttools-opensource-src-5.7.1/include/QtDesigner/5.7.1/QtDesigner/private/qdesigner_objectinspector_p.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtDesigner/5.7.1/QtDesigner/private/qdesigner_objectinspector_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/designer/src/lib/shared/qdesigner_objectinspector_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtDesigner/5.7.1/QtDesigner/private/qdesigner_promotiondialog_p.h qttools-opensource-src-5.9.1/include/QtDesigner/5.7.1/QtDesigner/private/qdesigner_promotiondialog_p.h --- qttools-opensource-src-5.7.1/include/QtDesigner/5.7.1/QtDesigner/private/qdesigner_promotiondialog_p.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtDesigner/5.7.1/QtDesigner/private/qdesigner_promotiondialog_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/designer/src/lib/shared/qdesigner_promotiondialog_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtDesigner/5.7.1/QtDesigner/private/qdesigner_promotion_p.h qttools-opensource-src-5.9.1/include/QtDesigner/5.7.1/QtDesigner/private/qdesigner_promotion_p.h --- qttools-opensource-src-5.7.1/include/QtDesigner/5.7.1/QtDesigner/private/qdesigner_promotion_p.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtDesigner/5.7.1/QtDesigner/private/qdesigner_promotion_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/designer/src/lib/shared/qdesigner_promotion_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtDesigner/5.7.1/QtDesigner/private/qdesigner_propertycommand_p.h qttools-opensource-src-5.9.1/include/QtDesigner/5.7.1/QtDesigner/private/qdesigner_propertycommand_p.h --- qttools-opensource-src-5.7.1/include/QtDesigner/5.7.1/QtDesigner/private/qdesigner_propertycommand_p.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtDesigner/5.7.1/QtDesigner/private/qdesigner_propertycommand_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/designer/src/lib/shared/qdesigner_propertycommand_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtDesigner/5.7.1/QtDesigner/private/qdesigner_propertyeditor_p.h qttools-opensource-src-5.9.1/include/QtDesigner/5.7.1/QtDesigner/private/qdesigner_propertyeditor_p.h --- qttools-opensource-src-5.7.1/include/QtDesigner/5.7.1/QtDesigner/private/qdesigner_propertyeditor_p.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtDesigner/5.7.1/QtDesigner/private/qdesigner_propertyeditor_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/designer/src/lib/shared/qdesigner_propertyeditor_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtDesigner/5.7.1/QtDesigner/private/qdesigner_propertysheet_p.h qttools-opensource-src-5.9.1/include/QtDesigner/5.7.1/QtDesigner/private/qdesigner_propertysheet_p.h --- qttools-opensource-src-5.7.1/include/QtDesigner/5.7.1/QtDesigner/private/qdesigner_propertysheet_p.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtDesigner/5.7.1/QtDesigner/private/qdesigner_propertysheet_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/designer/src/lib/shared/qdesigner_propertysheet_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtDesigner/5.7.1/QtDesigner/private/qdesigner_qsettings_p.h qttools-opensource-src-5.9.1/include/QtDesigner/5.7.1/QtDesigner/private/qdesigner_qsettings_p.h --- qttools-opensource-src-5.7.1/include/QtDesigner/5.7.1/QtDesigner/private/qdesigner_qsettings_p.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtDesigner/5.7.1/QtDesigner/private/qdesigner_qsettings_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/designer/src/lib/shared/qdesigner_qsettings_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtDesigner/5.7.1/QtDesigner/private/qdesigner_stackedbox_p.h qttools-opensource-src-5.9.1/include/QtDesigner/5.7.1/QtDesigner/private/qdesigner_stackedbox_p.h --- qttools-opensource-src-5.7.1/include/QtDesigner/5.7.1/QtDesigner/private/qdesigner_stackedbox_p.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtDesigner/5.7.1/QtDesigner/private/qdesigner_stackedbox_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/designer/src/lib/shared/qdesigner_stackedbox_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtDesigner/5.7.1/QtDesigner/private/qdesigner_tabwidget_p.h qttools-opensource-src-5.9.1/include/QtDesigner/5.7.1/QtDesigner/private/qdesigner_tabwidget_p.h --- qttools-opensource-src-5.7.1/include/QtDesigner/5.7.1/QtDesigner/private/qdesigner_tabwidget_p.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtDesigner/5.7.1/QtDesigner/private/qdesigner_tabwidget_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/designer/src/lib/shared/qdesigner_tabwidget_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtDesigner/5.7.1/QtDesigner/private/qdesigner_taskmenu_p.h qttools-opensource-src-5.9.1/include/QtDesigner/5.7.1/QtDesigner/private/qdesigner_taskmenu_p.h --- qttools-opensource-src-5.7.1/include/QtDesigner/5.7.1/QtDesigner/private/qdesigner_taskmenu_p.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtDesigner/5.7.1/QtDesigner/private/qdesigner_taskmenu_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/designer/src/lib/shared/qdesigner_taskmenu_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtDesigner/5.7.1/QtDesigner/private/qdesigner_toolbar_p.h qttools-opensource-src-5.9.1/include/QtDesigner/5.7.1/QtDesigner/private/qdesigner_toolbar_p.h --- qttools-opensource-src-5.7.1/include/QtDesigner/5.7.1/QtDesigner/private/qdesigner_toolbar_p.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtDesigner/5.7.1/QtDesigner/private/qdesigner_toolbar_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/designer/src/lib/shared/qdesigner_toolbar_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtDesigner/5.7.1/QtDesigner/private/qdesigner_toolbox_p.h qttools-opensource-src-5.9.1/include/QtDesigner/5.7.1/QtDesigner/private/qdesigner_toolbox_p.h --- qttools-opensource-src-5.7.1/include/QtDesigner/5.7.1/QtDesigner/private/qdesigner_toolbox_p.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtDesigner/5.7.1/QtDesigner/private/qdesigner_toolbox_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/designer/src/lib/shared/qdesigner_toolbox_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtDesigner/5.7.1/QtDesigner/private/qdesigner_utils_p.h qttools-opensource-src-5.9.1/include/QtDesigner/5.7.1/QtDesigner/private/qdesigner_utils_p.h --- qttools-opensource-src-5.7.1/include/QtDesigner/5.7.1/QtDesigner/private/qdesigner_utils_p.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtDesigner/5.7.1/QtDesigner/private/qdesigner_utils_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/designer/src/lib/shared/qdesigner_utils_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtDesigner/5.7.1/QtDesigner/private/qdesigner_widgetbox_p.h qttools-opensource-src-5.9.1/include/QtDesigner/5.7.1/QtDesigner/private/qdesigner_widgetbox_p.h --- qttools-opensource-src-5.7.1/include/QtDesigner/5.7.1/QtDesigner/private/qdesigner_widgetbox_p.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtDesigner/5.7.1/QtDesigner/private/qdesigner_widgetbox_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/designer/src/lib/shared/qdesigner_widgetbox_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtDesigner/5.7.1/QtDesigner/private/qdesigner_widgetitem_p.h qttools-opensource-src-5.9.1/include/QtDesigner/5.7.1/QtDesigner/private/qdesigner_widgetitem_p.h --- qttools-opensource-src-5.7.1/include/QtDesigner/5.7.1/QtDesigner/private/qdesigner_widgetitem_p.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtDesigner/5.7.1/QtDesigner/private/qdesigner_widgetitem_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/designer/src/lib/shared/qdesigner_widgetitem_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtDesigner/5.7.1/QtDesigner/private/qdesigner_widget_p.h qttools-opensource-src-5.9.1/include/QtDesigner/5.7.1/QtDesigner/private/qdesigner_widget_p.h --- qttools-opensource-src-5.7.1/include/QtDesigner/5.7.1/QtDesigner/private/qdesigner_widget_p.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtDesigner/5.7.1/QtDesigner/private/qdesigner_widget_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/designer/src/lib/shared/qdesigner_widget_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtDesigner/5.7.1/QtDesigner/private/qlayout_widget_p.h qttools-opensource-src-5.9.1/include/QtDesigner/5.7.1/QtDesigner/private/qlayout_widget_p.h --- qttools-opensource-src-5.7.1/include/QtDesigner/5.7.1/QtDesigner/private/qlayout_widget_p.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtDesigner/5.7.1/QtDesigner/private/qlayout_widget_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/designer/src/lib/shared/qlayout_widget_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtDesigner/5.7.1/QtDesigner/private/qsimpleresource_p.h qttools-opensource-src-5.9.1/include/QtDesigner/5.7.1/QtDesigner/private/qsimpleresource_p.h --- qttools-opensource-src-5.7.1/include/QtDesigner/5.7.1/QtDesigner/private/qsimpleresource_p.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtDesigner/5.7.1/QtDesigner/private/qsimpleresource_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/designer/src/lib/shared/qsimpleresource_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtDesigner/5.7.1/QtDesigner/private/qtresourceeditordialog_p.h qttools-opensource-src-5.9.1/include/QtDesigner/5.7.1/QtDesigner/private/qtresourceeditordialog_p.h --- qttools-opensource-src-5.7.1/include/QtDesigner/5.7.1/QtDesigner/private/qtresourceeditordialog_p.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtDesigner/5.7.1/QtDesigner/private/qtresourceeditordialog_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/designer/src/lib/shared/qtresourceeditordialog_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtDesigner/5.7.1/QtDesigner/private/qtresourcemodel_p.h qttools-opensource-src-5.9.1/include/QtDesigner/5.7.1/QtDesigner/private/qtresourcemodel_p.h --- qttools-opensource-src-5.7.1/include/QtDesigner/5.7.1/QtDesigner/private/qtresourcemodel_p.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtDesigner/5.7.1/QtDesigner/private/qtresourcemodel_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/designer/src/lib/shared/qtresourcemodel_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtDesigner/5.7.1/QtDesigner/private/qtresourceview_p.h qttools-opensource-src-5.9.1/include/QtDesigner/5.7.1/QtDesigner/private/qtresourceview_p.h --- qttools-opensource-src-5.7.1/include/QtDesigner/5.7.1/QtDesigner/private/qtresourceview_p.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtDesigner/5.7.1/QtDesigner/private/qtresourceview_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/designer/src/lib/shared/qtresourceview_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtDesigner/5.7.1/QtDesigner/private/rcc_p.h qttools-opensource-src-5.9.1/include/QtDesigner/5.7.1/QtDesigner/private/rcc_p.h --- qttools-opensource-src-5.7.1/include/QtDesigner/5.7.1/QtDesigner/private/rcc_p.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtDesigner/5.7.1/QtDesigner/private/rcc_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/designer/src/lib/shared/rcc_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtDesigner/5.7.1/QtDesigner/private/resourcebuilder_p.h qttools-opensource-src-5.9.1/include/QtDesigner/5.7.1/QtDesigner/private/resourcebuilder_p.h --- qttools-opensource-src-5.7.1/include/QtDesigner/5.7.1/QtDesigner/private/resourcebuilder_p.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtDesigner/5.7.1/QtDesigner/private/resourcebuilder_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/designer/src/lib/uilib/resourcebuilder_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtDesigner/5.7.1/QtDesigner/private/richtexteditor_p.h qttools-opensource-src-5.9.1/include/QtDesigner/5.7.1/QtDesigner/private/richtexteditor_p.h --- qttools-opensource-src-5.7.1/include/QtDesigner/5.7.1/QtDesigner/private/richtexteditor_p.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtDesigner/5.7.1/QtDesigner/private/richtexteditor_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/designer/src/lib/shared/richtexteditor_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtDesigner/5.7.1/QtDesigner/private/shared_enums_p.h qttools-opensource-src-5.9.1/include/QtDesigner/5.7.1/QtDesigner/private/shared_enums_p.h --- qttools-opensource-src-5.7.1/include/QtDesigner/5.7.1/QtDesigner/private/shared_enums_p.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtDesigner/5.7.1/QtDesigner/private/shared_enums_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/designer/src/lib/shared/shared_enums_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtDesigner/5.7.1/QtDesigner/private/shared_global_p.h qttools-opensource-src-5.9.1/include/QtDesigner/5.7.1/QtDesigner/private/shared_global_p.h --- qttools-opensource-src-5.7.1/include/QtDesigner/5.7.1/QtDesigner/private/shared_global_p.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtDesigner/5.7.1/QtDesigner/private/shared_global_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/designer/src/lib/shared/shared_global_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtDesigner/5.7.1/QtDesigner/private/shared_settings_p.h qttools-opensource-src-5.9.1/include/QtDesigner/5.7.1/QtDesigner/private/shared_settings_p.h --- qttools-opensource-src-5.7.1/include/QtDesigner/5.7.1/QtDesigner/private/shared_settings_p.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtDesigner/5.7.1/QtDesigner/private/shared_settings_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/designer/src/lib/shared/shared_settings_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtDesigner/5.7.1/QtDesigner/private/sheet_delegate_p.h qttools-opensource-src-5.9.1/include/QtDesigner/5.7.1/QtDesigner/private/sheet_delegate_p.h --- qttools-opensource-src-5.7.1/include/QtDesigner/5.7.1/QtDesigner/private/sheet_delegate_p.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtDesigner/5.7.1/QtDesigner/private/sheet_delegate_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/designer/src/lib/shared/sheet_delegate_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtDesigner/5.7.1/QtDesigner/private/signalslotdialog_p.h qttools-opensource-src-5.9.1/include/QtDesigner/5.7.1/QtDesigner/private/signalslotdialog_p.h --- qttools-opensource-src-5.7.1/include/QtDesigner/5.7.1/QtDesigner/private/signalslotdialog_p.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtDesigner/5.7.1/QtDesigner/private/signalslotdialog_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/designer/src/lib/shared/signalslotdialog_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtDesigner/5.7.1/QtDesigner/private/spacer_widget_p.h qttools-opensource-src-5.9.1/include/QtDesigner/5.7.1/QtDesigner/private/spacer_widget_p.h --- qttools-opensource-src-5.7.1/include/QtDesigner/5.7.1/QtDesigner/private/spacer_widget_p.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtDesigner/5.7.1/QtDesigner/private/spacer_widget_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/designer/src/lib/shared/spacer_widget_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtDesigner/5.7.1/QtDesigner/private/stylesheeteditor_p.h qttools-opensource-src-5.9.1/include/QtDesigner/5.7.1/QtDesigner/private/stylesheeteditor_p.h --- qttools-opensource-src-5.7.1/include/QtDesigner/5.7.1/QtDesigner/private/stylesheeteditor_p.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtDesigner/5.7.1/QtDesigner/private/stylesheeteditor_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/designer/src/lib/shared/stylesheeteditor_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtDesigner/5.7.1/QtDesigner/private/textbuilder_p.h qttools-opensource-src-5.9.1/include/QtDesigner/5.7.1/QtDesigner/private/textbuilder_p.h --- qttools-opensource-src-5.7.1/include/QtDesigner/5.7.1/QtDesigner/private/textbuilder_p.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtDesigner/5.7.1/QtDesigner/private/textbuilder_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/designer/src/lib/uilib/textbuilder_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtDesigner/5.7.1/QtDesigner/private/textpropertyeditor_p.h qttools-opensource-src-5.9.1/include/QtDesigner/5.7.1/QtDesigner/private/textpropertyeditor_p.h --- qttools-opensource-src-5.7.1/include/QtDesigner/5.7.1/QtDesigner/private/textpropertyeditor_p.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtDesigner/5.7.1/QtDesigner/private/textpropertyeditor_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/designer/src/lib/shared/textpropertyeditor_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtDesigner/5.7.1/QtDesigner/private/ui4_p.h qttools-opensource-src-5.9.1/include/QtDesigner/5.7.1/QtDesigner/private/ui4_p.h --- qttools-opensource-src-5.7.1/include/QtDesigner/5.7.1/QtDesigner/private/ui4_p.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtDesigner/5.7.1/QtDesigner/private/ui4_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/designer/src/lib/uilib/ui4_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtDesigner/5.7.1/QtDesigner/private/widgetdatabase_p.h qttools-opensource-src-5.9.1/include/QtDesigner/5.7.1/QtDesigner/private/widgetdatabase_p.h --- qttools-opensource-src-5.7.1/include/QtDesigner/5.7.1/QtDesigner/private/widgetdatabase_p.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtDesigner/5.7.1/QtDesigner/private/widgetdatabase_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/designer/src/lib/shared/widgetdatabase_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtDesigner/5.7.1/QtDesigner/private/widgetfactory_p.h qttools-opensource-src-5.9.1/include/QtDesigner/5.7.1/QtDesigner/private/widgetfactory_p.h --- qttools-opensource-src-5.7.1/include/QtDesigner/5.7.1/QtDesigner/private/widgetfactory_p.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtDesigner/5.7.1/QtDesigner/private/widgetfactory_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/designer/src/lib/shared/widgetfactory_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtDesigner/5.7.1/QtDesigner/private/zoomwidget_p.h qttools-opensource-src-5.9.1/include/QtDesigner/5.7.1/QtDesigner/private/zoomwidget_p.h --- qttools-opensource-src-5.7.1/include/QtDesigner/5.7.1/QtDesigner/private/zoomwidget_p.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtDesigner/5.7.1/QtDesigner/private/zoomwidget_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/designer/src/lib/shared/zoomwidget_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtDesigner/5.9.1/QtDesigner/private/abstractdialoggui_p.h qttools-opensource-src-5.9.1/include/QtDesigner/5.9.1/QtDesigner/private/abstractdialoggui_p.h --- qttools-opensource-src-5.7.1/include/QtDesigner/5.9.1/QtDesigner/private/abstractdialoggui_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtDesigner/5.9.1/QtDesigner/private/abstractdialoggui_p.h 2017-06-23 12:03:39.000000000 +0000 @@ -0,0 +1 @@ +#include "../../../../../src/designer/src/lib/sdk/abstractdialoggui_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtDesigner/5.9.1/QtDesigner/private/abstractintrospection_p.h qttools-opensource-src-5.9.1/include/QtDesigner/5.9.1/QtDesigner/private/abstractintrospection_p.h --- qttools-opensource-src-5.7.1/include/QtDesigner/5.9.1/QtDesigner/private/abstractintrospection_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtDesigner/5.9.1/QtDesigner/private/abstractintrospection_p.h 2017-06-23 12:03:39.000000000 +0000 @@ -0,0 +1 @@ +#include "../../../../../src/designer/src/lib/sdk/abstractintrospection_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtDesigner/5.9.1/QtDesigner/private/actioneditor_p.h qttools-opensource-src-5.9.1/include/QtDesigner/5.9.1/QtDesigner/private/actioneditor_p.h --- qttools-opensource-src-5.7.1/include/QtDesigner/5.9.1/QtDesigner/private/actioneditor_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtDesigner/5.9.1/QtDesigner/private/actioneditor_p.h 2017-06-23 12:03:39.000000000 +0000 @@ -0,0 +1 @@ +#include "../../../../../src/designer/src/lib/shared/actioneditor_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtDesigner/5.9.1/QtDesigner/private/actionprovider_p.h qttools-opensource-src-5.9.1/include/QtDesigner/5.9.1/QtDesigner/private/actionprovider_p.h --- qttools-opensource-src-5.7.1/include/QtDesigner/5.9.1/QtDesigner/private/actionprovider_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtDesigner/5.9.1/QtDesigner/private/actionprovider_p.h 2017-06-23 12:03:39.000000000 +0000 @@ -0,0 +1 @@ +#include "../../../../../src/designer/src/lib/shared/actionprovider_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtDesigner/5.9.1/QtDesigner/private/actionrepository_p.h qttools-opensource-src-5.9.1/include/QtDesigner/5.9.1/QtDesigner/private/actionrepository_p.h --- qttools-opensource-src-5.7.1/include/QtDesigner/5.9.1/QtDesigner/private/actionrepository_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtDesigner/5.9.1/QtDesigner/private/actionrepository_p.h 2017-06-23 12:03:39.000000000 +0000 @@ -0,0 +1 @@ +#include "../../../../../src/designer/src/lib/shared/actionrepository_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtDesigner/5.9.1/QtDesigner/private/codedialog_p.h qttools-opensource-src-5.9.1/include/QtDesigner/5.9.1/QtDesigner/private/codedialog_p.h --- qttools-opensource-src-5.7.1/include/QtDesigner/5.9.1/QtDesigner/private/codedialog_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtDesigner/5.9.1/QtDesigner/private/codedialog_p.h 2017-06-23 12:03:39.000000000 +0000 @@ -0,0 +1 @@ +#include "../../../../../src/designer/src/lib/shared/codedialog_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtDesigner/5.9.1/QtDesigner/private/connectionedit_p.h qttools-opensource-src-5.9.1/include/QtDesigner/5.9.1/QtDesigner/private/connectionedit_p.h --- qttools-opensource-src-5.7.1/include/QtDesigner/5.9.1/QtDesigner/private/connectionedit_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtDesigner/5.9.1/QtDesigner/private/connectionedit_p.h 2017-06-23 12:03:39.000000000 +0000 @@ -0,0 +1 @@ +#include "../../../../../src/designer/src/lib/shared/connectionedit_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtDesigner/5.9.1/QtDesigner/private/csshighlighter_p.h qttools-opensource-src-5.9.1/include/QtDesigner/5.9.1/QtDesigner/private/csshighlighter_p.h --- qttools-opensource-src-5.7.1/include/QtDesigner/5.9.1/QtDesigner/private/csshighlighter_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtDesigner/5.9.1/QtDesigner/private/csshighlighter_p.h 2017-06-23 12:03:39.000000000 +0000 @@ -0,0 +1 @@ +#include "../../../../../src/designer/src/lib/shared/csshighlighter_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtDesigner/5.9.1/QtDesigner/private/deviceprofile_p.h qttools-opensource-src-5.9.1/include/QtDesigner/5.9.1/QtDesigner/private/deviceprofile_p.h --- qttools-opensource-src-5.7.1/include/QtDesigner/5.9.1/QtDesigner/private/deviceprofile_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtDesigner/5.9.1/QtDesigner/private/deviceprofile_p.h 2017-06-23 12:03:39.000000000 +0000 @@ -0,0 +1 @@ +#include "../../../../../src/designer/src/lib/shared/deviceprofile_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtDesigner/5.9.1/QtDesigner/private/dialoggui_p.h qttools-opensource-src-5.9.1/include/QtDesigner/5.9.1/QtDesigner/private/dialoggui_p.h --- qttools-opensource-src-5.7.1/include/QtDesigner/5.9.1/QtDesigner/private/dialoggui_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtDesigner/5.9.1/QtDesigner/private/dialoggui_p.h 2017-06-23 12:03:39.000000000 +0000 @@ -0,0 +1 @@ +#include "../../../../../src/designer/src/lib/shared/dialoggui_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtDesigner/5.9.1/QtDesigner/private/extensionfactory_p.h qttools-opensource-src-5.9.1/include/QtDesigner/5.9.1/QtDesigner/private/extensionfactory_p.h --- qttools-opensource-src-5.7.1/include/QtDesigner/5.9.1/QtDesigner/private/extensionfactory_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtDesigner/5.9.1/QtDesigner/private/extensionfactory_p.h 2017-06-23 12:03:39.000000000 +0000 @@ -0,0 +1 @@ +#include "../../../../../src/designer/src/lib/shared/extensionfactory_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtDesigner/5.9.1/QtDesigner/private/formbuilderextra_p.h qttools-opensource-src-5.9.1/include/QtDesigner/5.9.1/QtDesigner/private/formbuilderextra_p.h --- qttools-opensource-src-5.7.1/include/QtDesigner/5.9.1/QtDesigner/private/formbuilderextra_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtDesigner/5.9.1/QtDesigner/private/formbuilderextra_p.h 2017-06-23 12:03:39.000000000 +0000 @@ -0,0 +1 @@ +#include "../../../../../src/designer/src/lib/uilib/formbuilderextra_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtDesigner/5.9.1/QtDesigner/private/formlayoutmenu_p.h qttools-opensource-src-5.9.1/include/QtDesigner/5.9.1/QtDesigner/private/formlayoutmenu_p.h --- qttools-opensource-src-5.7.1/include/QtDesigner/5.9.1/QtDesigner/private/formlayoutmenu_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtDesigner/5.9.1/QtDesigner/private/formlayoutmenu_p.h 2017-06-23 12:03:39.000000000 +0000 @@ -0,0 +1 @@ +#include "../../../../../src/designer/src/lib/shared/formlayoutmenu_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtDesigner/5.9.1/QtDesigner/private/formwindowbase_p.h qttools-opensource-src-5.9.1/include/QtDesigner/5.9.1/QtDesigner/private/formwindowbase_p.h --- qttools-opensource-src-5.7.1/include/QtDesigner/5.9.1/QtDesigner/private/formwindowbase_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtDesigner/5.9.1/QtDesigner/private/formwindowbase_p.h 2017-06-23 12:03:39.000000000 +0000 @@ -0,0 +1 @@ +#include "../../../../../src/designer/src/lib/shared/formwindowbase_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtDesigner/5.9.1/QtDesigner/private/gridpanel_p.h qttools-opensource-src-5.9.1/include/QtDesigner/5.9.1/QtDesigner/private/gridpanel_p.h --- qttools-opensource-src-5.7.1/include/QtDesigner/5.9.1/QtDesigner/private/gridpanel_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtDesigner/5.9.1/QtDesigner/private/gridpanel_p.h 2017-06-23 12:03:39.000000000 +0000 @@ -0,0 +1 @@ +#include "../../../../../src/designer/src/lib/shared/gridpanel_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtDesigner/5.9.1/QtDesigner/private/grid_p.h qttools-opensource-src-5.9.1/include/QtDesigner/5.9.1/QtDesigner/private/grid_p.h --- qttools-opensource-src-5.7.1/include/QtDesigner/5.9.1/QtDesigner/private/grid_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtDesigner/5.9.1/QtDesigner/private/grid_p.h 2017-06-23 12:03:39.000000000 +0000 @@ -0,0 +1 @@ +#include "../../../../../src/designer/src/lib/shared/grid_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtDesigner/5.9.1/QtDesigner/private/htmlhighlighter_p.h qttools-opensource-src-5.9.1/include/QtDesigner/5.9.1/QtDesigner/private/htmlhighlighter_p.h --- qttools-opensource-src-5.7.1/include/QtDesigner/5.9.1/QtDesigner/private/htmlhighlighter_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtDesigner/5.9.1/QtDesigner/private/htmlhighlighter_p.h 2017-06-23 12:03:39.000000000 +0000 @@ -0,0 +1 @@ +#include "../../../../../src/designer/src/lib/shared/htmlhighlighter_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtDesigner/5.9.1/QtDesigner/private/iconloader_p.h qttools-opensource-src-5.9.1/include/QtDesigner/5.9.1/QtDesigner/private/iconloader_p.h --- qttools-opensource-src-5.7.1/include/QtDesigner/5.9.1/QtDesigner/private/iconloader_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtDesigner/5.9.1/QtDesigner/private/iconloader_p.h 2017-06-23 12:03:39.000000000 +0000 @@ -0,0 +1 @@ +#include "../../../../../src/designer/src/lib/shared/iconloader_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtDesigner/5.9.1/QtDesigner/private/iconselector_p.h qttools-opensource-src-5.9.1/include/QtDesigner/5.9.1/QtDesigner/private/iconselector_p.h --- qttools-opensource-src-5.7.1/include/QtDesigner/5.9.1/QtDesigner/private/iconselector_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtDesigner/5.9.1/QtDesigner/private/iconselector_p.h 2017-06-23 12:03:39.000000000 +0000 @@ -0,0 +1 @@ +#include "../../../../../src/designer/src/lib/shared/iconselector_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtDesigner/5.9.1/QtDesigner/private/invisible_widget_p.h qttools-opensource-src-5.9.1/include/QtDesigner/5.9.1/QtDesigner/private/invisible_widget_p.h --- qttools-opensource-src-5.7.1/include/QtDesigner/5.9.1/QtDesigner/private/invisible_widget_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtDesigner/5.9.1/QtDesigner/private/invisible_widget_p.h 2017-06-23 12:03:39.000000000 +0000 @@ -0,0 +1 @@ +#include "../../../../../src/designer/src/lib/shared/invisible_widget_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtDesigner/5.9.1/QtDesigner/private/layoutinfo_p.h qttools-opensource-src-5.9.1/include/QtDesigner/5.9.1/QtDesigner/private/layoutinfo_p.h --- qttools-opensource-src-5.7.1/include/QtDesigner/5.9.1/QtDesigner/private/layoutinfo_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtDesigner/5.9.1/QtDesigner/private/layoutinfo_p.h 2017-06-23 12:03:39.000000000 +0000 @@ -0,0 +1 @@ +#include "../../../../../src/designer/src/lib/shared/layoutinfo_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtDesigner/5.9.1/QtDesigner/private/layout_p.h qttools-opensource-src-5.9.1/include/QtDesigner/5.9.1/QtDesigner/private/layout_p.h --- qttools-opensource-src-5.7.1/include/QtDesigner/5.9.1/QtDesigner/private/layout_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtDesigner/5.9.1/QtDesigner/private/layout_p.h 2017-06-23 12:03:39.000000000 +0000 @@ -0,0 +1 @@ +#include "../../../../../src/designer/src/lib/shared/layout_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtDesigner/5.9.1/QtDesigner/private/lib_pch.h qttools-opensource-src-5.9.1/include/QtDesigner/5.9.1/QtDesigner/private/lib_pch.h --- qttools-opensource-src-5.7.1/include/QtDesigner/5.9.1/QtDesigner/private/lib_pch.h 1970-01-01 00:00:00.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtDesigner/5.9.1/QtDesigner/private/lib_pch.h 2017-06-23 12:03:39.000000000 +0000 @@ -0,0 +1 @@ +#include "../../../../../src/designer/src/lib/lib_pch.h" diff -Nru qttools-opensource-src-5.7.1/include/QtDesigner/5.9.1/QtDesigner/private/metadatabase_p.h qttools-opensource-src-5.9.1/include/QtDesigner/5.9.1/QtDesigner/private/metadatabase_p.h --- qttools-opensource-src-5.7.1/include/QtDesigner/5.9.1/QtDesigner/private/metadatabase_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtDesigner/5.9.1/QtDesigner/private/metadatabase_p.h 2017-06-23 12:03:39.000000000 +0000 @@ -0,0 +1 @@ +#include "../../../../../src/designer/src/lib/shared/metadatabase_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtDesigner/5.9.1/QtDesigner/private/morphmenu_p.h qttools-opensource-src-5.9.1/include/QtDesigner/5.9.1/QtDesigner/private/morphmenu_p.h --- qttools-opensource-src-5.7.1/include/QtDesigner/5.9.1/QtDesigner/private/morphmenu_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtDesigner/5.9.1/QtDesigner/private/morphmenu_p.h 2017-06-23 12:03:39.000000000 +0000 @@ -0,0 +1 @@ +#include "../../../../../src/designer/src/lib/shared/morphmenu_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtDesigner/5.9.1/QtDesigner/private/newactiondialog_p.h qttools-opensource-src-5.9.1/include/QtDesigner/5.9.1/QtDesigner/private/newactiondialog_p.h --- qttools-opensource-src-5.7.1/include/QtDesigner/5.9.1/QtDesigner/private/newactiondialog_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtDesigner/5.9.1/QtDesigner/private/newactiondialog_p.h 2017-06-23 12:03:39.000000000 +0000 @@ -0,0 +1 @@ +#include "../../../../../src/designer/src/lib/shared/newactiondialog_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtDesigner/5.9.1/QtDesigner/private/newformwidget_p.h qttools-opensource-src-5.9.1/include/QtDesigner/5.9.1/QtDesigner/private/newformwidget_p.h --- qttools-opensource-src-5.7.1/include/QtDesigner/5.9.1/QtDesigner/private/newformwidget_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtDesigner/5.9.1/QtDesigner/private/newformwidget_p.h 2017-06-23 12:03:39.000000000 +0000 @@ -0,0 +1 @@ +#include "../../../../../src/designer/src/lib/shared/newformwidget_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtDesigner/5.9.1/QtDesigner/private/orderdialog_p.h qttools-opensource-src-5.9.1/include/QtDesigner/5.9.1/QtDesigner/private/orderdialog_p.h --- qttools-opensource-src-5.7.1/include/QtDesigner/5.9.1/QtDesigner/private/orderdialog_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtDesigner/5.9.1/QtDesigner/private/orderdialog_p.h 2017-06-23 12:03:39.000000000 +0000 @@ -0,0 +1 @@ +#include "../../../../../src/designer/src/lib/shared/orderdialog_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtDesigner/5.9.1/QtDesigner/private/plaintexteditor_p.h qttools-opensource-src-5.9.1/include/QtDesigner/5.9.1/QtDesigner/private/plaintexteditor_p.h --- qttools-opensource-src-5.7.1/include/QtDesigner/5.9.1/QtDesigner/private/plaintexteditor_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtDesigner/5.9.1/QtDesigner/private/plaintexteditor_p.h 2017-06-23 12:03:39.000000000 +0000 @@ -0,0 +1 @@ +#include "../../../../../src/designer/src/lib/shared/plaintexteditor_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtDesigner/5.9.1/QtDesigner/private/plugindialog_p.h qttools-opensource-src-5.9.1/include/QtDesigner/5.9.1/QtDesigner/private/plugindialog_p.h --- qttools-opensource-src-5.7.1/include/QtDesigner/5.9.1/QtDesigner/private/plugindialog_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtDesigner/5.9.1/QtDesigner/private/plugindialog_p.h 2017-06-23 12:03:39.000000000 +0000 @@ -0,0 +1 @@ +#include "../../../../../src/designer/src/lib/shared/plugindialog_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtDesigner/5.9.1/QtDesigner/private/pluginmanager_p.h qttools-opensource-src-5.9.1/include/QtDesigner/5.9.1/QtDesigner/private/pluginmanager_p.h --- qttools-opensource-src-5.7.1/include/QtDesigner/5.9.1/QtDesigner/private/pluginmanager_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtDesigner/5.9.1/QtDesigner/private/pluginmanager_p.h 2017-06-23 12:03:39.000000000 +0000 @@ -0,0 +1 @@ +#include "../../../../../src/designer/src/lib/shared/pluginmanager_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtDesigner/5.9.1/QtDesigner/private/previewconfigurationwidget_p.h qttools-opensource-src-5.9.1/include/QtDesigner/5.9.1/QtDesigner/private/previewconfigurationwidget_p.h --- qttools-opensource-src-5.7.1/include/QtDesigner/5.9.1/QtDesigner/private/previewconfigurationwidget_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtDesigner/5.9.1/QtDesigner/private/previewconfigurationwidget_p.h 2017-06-23 12:03:39.000000000 +0000 @@ -0,0 +1 @@ +#include "../../../../../src/designer/src/lib/shared/previewconfigurationwidget_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtDesigner/5.9.1/QtDesigner/private/previewmanager_p.h qttools-opensource-src-5.9.1/include/QtDesigner/5.9.1/QtDesigner/private/previewmanager_p.h --- qttools-opensource-src-5.7.1/include/QtDesigner/5.9.1/QtDesigner/private/previewmanager_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtDesigner/5.9.1/QtDesigner/private/previewmanager_p.h 2017-06-23 12:03:39.000000000 +0000 @@ -0,0 +1 @@ +#include "../../../../../src/designer/src/lib/shared/previewmanager_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtDesigner/5.9.1/QtDesigner/private/promotionmodel_p.h qttools-opensource-src-5.9.1/include/QtDesigner/5.9.1/QtDesigner/private/promotionmodel_p.h --- qttools-opensource-src-5.7.1/include/QtDesigner/5.9.1/QtDesigner/private/promotionmodel_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtDesigner/5.9.1/QtDesigner/private/promotionmodel_p.h 2017-06-23 12:03:39.000000000 +0000 @@ -0,0 +1 @@ +#include "../../../../../src/designer/src/lib/shared/promotionmodel_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtDesigner/5.9.1/QtDesigner/private/promotiontaskmenu_p.h qttools-opensource-src-5.9.1/include/QtDesigner/5.9.1/QtDesigner/private/promotiontaskmenu_p.h --- qttools-opensource-src-5.7.1/include/QtDesigner/5.9.1/QtDesigner/private/promotiontaskmenu_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtDesigner/5.9.1/QtDesigner/private/promotiontaskmenu_p.h 2017-06-23 12:03:39.000000000 +0000 @@ -0,0 +1 @@ +#include "../../../../../src/designer/src/lib/shared/promotiontaskmenu_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtDesigner/5.9.1/QtDesigner/private/properties_p.h qttools-opensource-src-5.9.1/include/QtDesigner/5.9.1/QtDesigner/private/properties_p.h --- qttools-opensource-src-5.7.1/include/QtDesigner/5.9.1/QtDesigner/private/properties_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtDesigner/5.9.1/QtDesigner/private/properties_p.h 2017-06-23 12:03:39.000000000 +0000 @@ -0,0 +1 @@ +#include "../../../../../src/designer/src/lib/uilib/properties_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtDesigner/5.9.1/QtDesigner/private/propertylineedit_p.h qttools-opensource-src-5.9.1/include/QtDesigner/5.9.1/QtDesigner/private/propertylineedit_p.h --- qttools-opensource-src-5.7.1/include/QtDesigner/5.9.1/QtDesigner/private/propertylineedit_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtDesigner/5.9.1/QtDesigner/private/propertylineedit_p.h 2017-06-23 12:03:39.000000000 +0000 @@ -0,0 +1 @@ +#include "../../../../../src/designer/src/lib/shared/propertylineedit_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtDesigner/5.9.1/QtDesigner/private/qdesigner_command2_p.h qttools-opensource-src-5.9.1/include/QtDesigner/5.9.1/QtDesigner/private/qdesigner_command2_p.h --- qttools-opensource-src-5.7.1/include/QtDesigner/5.9.1/QtDesigner/private/qdesigner_command2_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtDesigner/5.9.1/QtDesigner/private/qdesigner_command2_p.h 2017-06-23 12:03:39.000000000 +0000 @@ -0,0 +1 @@ +#include "../../../../../src/designer/src/lib/shared/qdesigner_command2_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtDesigner/5.9.1/QtDesigner/private/qdesigner_command_p.h qttools-opensource-src-5.9.1/include/QtDesigner/5.9.1/QtDesigner/private/qdesigner_command_p.h --- qttools-opensource-src-5.7.1/include/QtDesigner/5.9.1/QtDesigner/private/qdesigner_command_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtDesigner/5.9.1/QtDesigner/private/qdesigner_command_p.h 2017-06-23 12:03:39.000000000 +0000 @@ -0,0 +1 @@ +#include "../../../../../src/designer/src/lib/shared/qdesigner_command_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtDesigner/5.9.1/QtDesigner/private/qdesigner_dnditem_p.h qttools-opensource-src-5.9.1/include/QtDesigner/5.9.1/QtDesigner/private/qdesigner_dnditem_p.h --- qttools-opensource-src-5.7.1/include/QtDesigner/5.9.1/QtDesigner/private/qdesigner_dnditem_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtDesigner/5.9.1/QtDesigner/private/qdesigner_dnditem_p.h 2017-06-23 12:03:39.000000000 +0000 @@ -0,0 +1 @@ +#include "../../../../../src/designer/src/lib/shared/qdesigner_dnditem_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtDesigner/5.9.1/QtDesigner/private/qdesigner_dockwidget_p.h qttools-opensource-src-5.9.1/include/QtDesigner/5.9.1/QtDesigner/private/qdesigner_dockwidget_p.h --- qttools-opensource-src-5.7.1/include/QtDesigner/5.9.1/QtDesigner/private/qdesigner_dockwidget_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtDesigner/5.9.1/QtDesigner/private/qdesigner_dockwidget_p.h 2017-06-23 12:03:39.000000000 +0000 @@ -0,0 +1 @@ +#include "../../../../../src/designer/src/lib/shared/qdesigner_dockwidget_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtDesigner/5.9.1/QtDesigner/private/qdesigner_formbuilder_p.h qttools-opensource-src-5.9.1/include/QtDesigner/5.9.1/QtDesigner/private/qdesigner_formbuilder_p.h --- qttools-opensource-src-5.7.1/include/QtDesigner/5.9.1/QtDesigner/private/qdesigner_formbuilder_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtDesigner/5.9.1/QtDesigner/private/qdesigner_formbuilder_p.h 2017-06-23 12:03:39.000000000 +0000 @@ -0,0 +1 @@ +#include "../../../../../src/designer/src/lib/shared/qdesigner_formbuilder_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtDesigner/5.9.1/QtDesigner/private/qdesigner_formeditorcommand_p.h qttools-opensource-src-5.9.1/include/QtDesigner/5.9.1/QtDesigner/private/qdesigner_formeditorcommand_p.h --- qttools-opensource-src-5.7.1/include/QtDesigner/5.9.1/QtDesigner/private/qdesigner_formeditorcommand_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtDesigner/5.9.1/QtDesigner/private/qdesigner_formeditorcommand_p.h 2017-06-23 12:03:39.000000000 +0000 @@ -0,0 +1 @@ +#include "../../../../../src/designer/src/lib/shared/qdesigner_formeditorcommand_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtDesigner/5.9.1/QtDesigner/private/qdesigner_formwindowcommand_p.h qttools-opensource-src-5.9.1/include/QtDesigner/5.9.1/QtDesigner/private/qdesigner_formwindowcommand_p.h --- qttools-opensource-src-5.7.1/include/QtDesigner/5.9.1/QtDesigner/private/qdesigner_formwindowcommand_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtDesigner/5.9.1/QtDesigner/private/qdesigner_formwindowcommand_p.h 2017-06-23 12:03:39.000000000 +0000 @@ -0,0 +1 @@ +#include "../../../../../src/designer/src/lib/shared/qdesigner_formwindowcommand_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtDesigner/5.9.1/QtDesigner/private/qdesigner_formwindowmanager_p.h qttools-opensource-src-5.9.1/include/QtDesigner/5.9.1/QtDesigner/private/qdesigner_formwindowmanager_p.h --- qttools-opensource-src-5.7.1/include/QtDesigner/5.9.1/QtDesigner/private/qdesigner_formwindowmanager_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtDesigner/5.9.1/QtDesigner/private/qdesigner_formwindowmanager_p.h 2017-06-23 12:03:39.000000000 +0000 @@ -0,0 +1 @@ +#include "../../../../../src/designer/src/lib/shared/qdesigner_formwindowmanager_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtDesigner/5.9.1/QtDesigner/private/qdesigner_introspection_p.h qttools-opensource-src-5.9.1/include/QtDesigner/5.9.1/QtDesigner/private/qdesigner_introspection_p.h --- qttools-opensource-src-5.7.1/include/QtDesigner/5.9.1/QtDesigner/private/qdesigner_introspection_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtDesigner/5.9.1/QtDesigner/private/qdesigner_introspection_p.h 2017-06-23 12:03:39.000000000 +0000 @@ -0,0 +1 @@ +#include "../../../../../src/designer/src/lib/shared/qdesigner_introspection_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtDesigner/5.9.1/QtDesigner/private/qdesigner_membersheet_p.h qttools-opensource-src-5.9.1/include/QtDesigner/5.9.1/QtDesigner/private/qdesigner_membersheet_p.h --- qttools-opensource-src-5.7.1/include/QtDesigner/5.9.1/QtDesigner/private/qdesigner_membersheet_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtDesigner/5.9.1/QtDesigner/private/qdesigner_membersheet_p.h 2017-06-23 12:03:39.000000000 +0000 @@ -0,0 +1 @@ +#include "../../../../../src/designer/src/lib/shared/qdesigner_membersheet_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtDesigner/5.9.1/QtDesigner/private/qdesigner_menubar_p.h qttools-opensource-src-5.9.1/include/QtDesigner/5.9.1/QtDesigner/private/qdesigner_menubar_p.h --- qttools-opensource-src-5.7.1/include/QtDesigner/5.9.1/QtDesigner/private/qdesigner_menubar_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtDesigner/5.9.1/QtDesigner/private/qdesigner_menubar_p.h 2017-06-23 12:03:39.000000000 +0000 @@ -0,0 +1 @@ +#include "../../../../../src/designer/src/lib/shared/qdesigner_menubar_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtDesigner/5.9.1/QtDesigner/private/qdesigner_menu_p.h qttools-opensource-src-5.9.1/include/QtDesigner/5.9.1/QtDesigner/private/qdesigner_menu_p.h --- qttools-opensource-src-5.7.1/include/QtDesigner/5.9.1/QtDesigner/private/qdesigner_menu_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtDesigner/5.9.1/QtDesigner/private/qdesigner_menu_p.h 2017-06-23 12:03:39.000000000 +0000 @@ -0,0 +1 @@ +#include "../../../../../src/designer/src/lib/shared/qdesigner_menu_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtDesigner/5.9.1/QtDesigner/private/qdesigner_objectinspector_p.h qttools-opensource-src-5.9.1/include/QtDesigner/5.9.1/QtDesigner/private/qdesigner_objectinspector_p.h --- qttools-opensource-src-5.7.1/include/QtDesigner/5.9.1/QtDesigner/private/qdesigner_objectinspector_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtDesigner/5.9.1/QtDesigner/private/qdesigner_objectinspector_p.h 2017-06-23 12:03:39.000000000 +0000 @@ -0,0 +1 @@ +#include "../../../../../src/designer/src/lib/shared/qdesigner_objectinspector_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtDesigner/5.9.1/QtDesigner/private/qdesigner_promotiondialog_p.h qttools-opensource-src-5.9.1/include/QtDesigner/5.9.1/QtDesigner/private/qdesigner_promotiondialog_p.h --- qttools-opensource-src-5.7.1/include/QtDesigner/5.9.1/QtDesigner/private/qdesigner_promotiondialog_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtDesigner/5.9.1/QtDesigner/private/qdesigner_promotiondialog_p.h 2017-06-23 12:03:39.000000000 +0000 @@ -0,0 +1 @@ +#include "../../../../../src/designer/src/lib/shared/qdesigner_promotiondialog_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtDesigner/5.9.1/QtDesigner/private/qdesigner_promotion_p.h qttools-opensource-src-5.9.1/include/QtDesigner/5.9.1/QtDesigner/private/qdesigner_promotion_p.h --- qttools-opensource-src-5.7.1/include/QtDesigner/5.9.1/QtDesigner/private/qdesigner_promotion_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtDesigner/5.9.1/QtDesigner/private/qdesigner_promotion_p.h 2017-06-23 12:03:39.000000000 +0000 @@ -0,0 +1 @@ +#include "../../../../../src/designer/src/lib/shared/qdesigner_promotion_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtDesigner/5.9.1/QtDesigner/private/qdesigner_propertycommand_p.h qttools-opensource-src-5.9.1/include/QtDesigner/5.9.1/QtDesigner/private/qdesigner_propertycommand_p.h --- qttools-opensource-src-5.7.1/include/QtDesigner/5.9.1/QtDesigner/private/qdesigner_propertycommand_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtDesigner/5.9.1/QtDesigner/private/qdesigner_propertycommand_p.h 2017-06-23 12:03:39.000000000 +0000 @@ -0,0 +1 @@ +#include "../../../../../src/designer/src/lib/shared/qdesigner_propertycommand_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtDesigner/5.9.1/QtDesigner/private/qdesigner_propertyeditor_p.h qttools-opensource-src-5.9.1/include/QtDesigner/5.9.1/QtDesigner/private/qdesigner_propertyeditor_p.h --- qttools-opensource-src-5.7.1/include/QtDesigner/5.9.1/QtDesigner/private/qdesigner_propertyeditor_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtDesigner/5.9.1/QtDesigner/private/qdesigner_propertyeditor_p.h 2017-06-23 12:03:39.000000000 +0000 @@ -0,0 +1 @@ +#include "../../../../../src/designer/src/lib/shared/qdesigner_propertyeditor_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtDesigner/5.9.1/QtDesigner/private/qdesigner_propertysheet_p.h qttools-opensource-src-5.9.1/include/QtDesigner/5.9.1/QtDesigner/private/qdesigner_propertysheet_p.h --- qttools-opensource-src-5.7.1/include/QtDesigner/5.9.1/QtDesigner/private/qdesigner_propertysheet_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtDesigner/5.9.1/QtDesigner/private/qdesigner_propertysheet_p.h 2017-06-23 12:03:39.000000000 +0000 @@ -0,0 +1 @@ +#include "../../../../../src/designer/src/lib/shared/qdesigner_propertysheet_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtDesigner/5.9.1/QtDesigner/private/qdesigner_qsettings_p.h qttools-opensource-src-5.9.1/include/QtDesigner/5.9.1/QtDesigner/private/qdesigner_qsettings_p.h --- qttools-opensource-src-5.7.1/include/QtDesigner/5.9.1/QtDesigner/private/qdesigner_qsettings_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtDesigner/5.9.1/QtDesigner/private/qdesigner_qsettings_p.h 2017-06-23 12:03:39.000000000 +0000 @@ -0,0 +1 @@ +#include "../../../../../src/designer/src/lib/shared/qdesigner_qsettings_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtDesigner/5.9.1/QtDesigner/private/qdesigner_stackedbox_p.h qttools-opensource-src-5.9.1/include/QtDesigner/5.9.1/QtDesigner/private/qdesigner_stackedbox_p.h --- qttools-opensource-src-5.7.1/include/QtDesigner/5.9.1/QtDesigner/private/qdesigner_stackedbox_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtDesigner/5.9.1/QtDesigner/private/qdesigner_stackedbox_p.h 2017-06-23 12:03:39.000000000 +0000 @@ -0,0 +1 @@ +#include "../../../../../src/designer/src/lib/shared/qdesigner_stackedbox_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtDesigner/5.9.1/QtDesigner/private/qdesigner_tabwidget_p.h qttools-opensource-src-5.9.1/include/QtDesigner/5.9.1/QtDesigner/private/qdesigner_tabwidget_p.h --- qttools-opensource-src-5.7.1/include/QtDesigner/5.9.1/QtDesigner/private/qdesigner_tabwidget_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtDesigner/5.9.1/QtDesigner/private/qdesigner_tabwidget_p.h 2017-06-23 12:03:39.000000000 +0000 @@ -0,0 +1 @@ +#include "../../../../../src/designer/src/lib/shared/qdesigner_tabwidget_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtDesigner/5.9.1/QtDesigner/private/qdesigner_taskmenu_p.h qttools-opensource-src-5.9.1/include/QtDesigner/5.9.1/QtDesigner/private/qdesigner_taskmenu_p.h --- qttools-opensource-src-5.7.1/include/QtDesigner/5.9.1/QtDesigner/private/qdesigner_taskmenu_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtDesigner/5.9.1/QtDesigner/private/qdesigner_taskmenu_p.h 2017-06-23 12:03:39.000000000 +0000 @@ -0,0 +1 @@ +#include "../../../../../src/designer/src/lib/shared/qdesigner_taskmenu_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtDesigner/5.9.1/QtDesigner/private/qdesigner_toolbar_p.h qttools-opensource-src-5.9.1/include/QtDesigner/5.9.1/QtDesigner/private/qdesigner_toolbar_p.h --- qttools-opensource-src-5.7.1/include/QtDesigner/5.9.1/QtDesigner/private/qdesigner_toolbar_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtDesigner/5.9.1/QtDesigner/private/qdesigner_toolbar_p.h 2017-06-23 12:03:39.000000000 +0000 @@ -0,0 +1 @@ +#include "../../../../../src/designer/src/lib/shared/qdesigner_toolbar_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtDesigner/5.9.1/QtDesigner/private/qdesigner_toolbox_p.h qttools-opensource-src-5.9.1/include/QtDesigner/5.9.1/QtDesigner/private/qdesigner_toolbox_p.h --- qttools-opensource-src-5.7.1/include/QtDesigner/5.9.1/QtDesigner/private/qdesigner_toolbox_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtDesigner/5.9.1/QtDesigner/private/qdesigner_toolbox_p.h 2017-06-23 12:03:39.000000000 +0000 @@ -0,0 +1 @@ +#include "../../../../../src/designer/src/lib/shared/qdesigner_toolbox_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtDesigner/5.9.1/QtDesigner/private/qdesigner_utils_p.h qttools-opensource-src-5.9.1/include/QtDesigner/5.9.1/QtDesigner/private/qdesigner_utils_p.h --- qttools-opensource-src-5.7.1/include/QtDesigner/5.9.1/QtDesigner/private/qdesigner_utils_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtDesigner/5.9.1/QtDesigner/private/qdesigner_utils_p.h 2017-06-23 12:03:39.000000000 +0000 @@ -0,0 +1 @@ +#include "../../../../../src/designer/src/lib/shared/qdesigner_utils_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtDesigner/5.9.1/QtDesigner/private/qdesigner_widgetbox_p.h qttools-opensource-src-5.9.1/include/QtDesigner/5.9.1/QtDesigner/private/qdesigner_widgetbox_p.h --- qttools-opensource-src-5.7.1/include/QtDesigner/5.9.1/QtDesigner/private/qdesigner_widgetbox_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtDesigner/5.9.1/QtDesigner/private/qdesigner_widgetbox_p.h 2017-06-23 12:03:39.000000000 +0000 @@ -0,0 +1 @@ +#include "../../../../../src/designer/src/lib/shared/qdesigner_widgetbox_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtDesigner/5.9.1/QtDesigner/private/qdesigner_widgetitem_p.h qttools-opensource-src-5.9.1/include/QtDesigner/5.9.1/QtDesigner/private/qdesigner_widgetitem_p.h --- qttools-opensource-src-5.7.1/include/QtDesigner/5.9.1/QtDesigner/private/qdesigner_widgetitem_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtDesigner/5.9.1/QtDesigner/private/qdesigner_widgetitem_p.h 2017-06-23 12:03:39.000000000 +0000 @@ -0,0 +1 @@ +#include "../../../../../src/designer/src/lib/shared/qdesigner_widgetitem_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtDesigner/5.9.1/QtDesigner/private/qdesigner_widget_p.h qttools-opensource-src-5.9.1/include/QtDesigner/5.9.1/QtDesigner/private/qdesigner_widget_p.h --- qttools-opensource-src-5.7.1/include/QtDesigner/5.9.1/QtDesigner/private/qdesigner_widget_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtDesigner/5.9.1/QtDesigner/private/qdesigner_widget_p.h 2017-06-23 12:03:39.000000000 +0000 @@ -0,0 +1 @@ +#include "../../../../../src/designer/src/lib/shared/qdesigner_widget_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtDesigner/5.9.1/QtDesigner/private/qlayout_widget_p.h qttools-opensource-src-5.9.1/include/QtDesigner/5.9.1/QtDesigner/private/qlayout_widget_p.h --- qttools-opensource-src-5.7.1/include/QtDesigner/5.9.1/QtDesigner/private/qlayout_widget_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtDesigner/5.9.1/QtDesigner/private/qlayout_widget_p.h 2017-06-23 12:03:39.000000000 +0000 @@ -0,0 +1 @@ +#include "../../../../../src/designer/src/lib/shared/qlayout_widget_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtDesigner/5.9.1/QtDesigner/private/qsimpleresource_p.h qttools-opensource-src-5.9.1/include/QtDesigner/5.9.1/QtDesigner/private/qsimpleresource_p.h --- qttools-opensource-src-5.7.1/include/QtDesigner/5.9.1/QtDesigner/private/qsimpleresource_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtDesigner/5.9.1/QtDesigner/private/qsimpleresource_p.h 2017-06-23 12:03:39.000000000 +0000 @@ -0,0 +1 @@ +#include "../../../../../src/designer/src/lib/shared/qsimpleresource_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtDesigner/5.9.1/QtDesigner/private/qtresourceeditordialog_p.h qttools-opensource-src-5.9.1/include/QtDesigner/5.9.1/QtDesigner/private/qtresourceeditordialog_p.h --- qttools-opensource-src-5.7.1/include/QtDesigner/5.9.1/QtDesigner/private/qtresourceeditordialog_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtDesigner/5.9.1/QtDesigner/private/qtresourceeditordialog_p.h 2017-06-23 12:03:39.000000000 +0000 @@ -0,0 +1 @@ +#include "../../../../../src/designer/src/lib/shared/qtresourceeditordialog_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtDesigner/5.9.1/QtDesigner/private/qtresourcemodel_p.h qttools-opensource-src-5.9.1/include/QtDesigner/5.9.1/QtDesigner/private/qtresourcemodel_p.h --- qttools-opensource-src-5.7.1/include/QtDesigner/5.9.1/QtDesigner/private/qtresourcemodel_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtDesigner/5.9.1/QtDesigner/private/qtresourcemodel_p.h 2017-06-23 12:03:39.000000000 +0000 @@ -0,0 +1 @@ +#include "../../../../../src/designer/src/lib/shared/qtresourcemodel_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtDesigner/5.9.1/QtDesigner/private/qtresourceview_p.h qttools-opensource-src-5.9.1/include/QtDesigner/5.9.1/QtDesigner/private/qtresourceview_p.h --- qttools-opensource-src-5.7.1/include/QtDesigner/5.9.1/QtDesigner/private/qtresourceview_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtDesigner/5.9.1/QtDesigner/private/qtresourceview_p.h 2017-06-23 12:03:39.000000000 +0000 @@ -0,0 +1 @@ +#include "../../../../../src/designer/src/lib/shared/qtresourceview_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtDesigner/5.9.1/QtDesigner/private/rcc_p.h qttools-opensource-src-5.9.1/include/QtDesigner/5.9.1/QtDesigner/private/rcc_p.h --- qttools-opensource-src-5.7.1/include/QtDesigner/5.9.1/QtDesigner/private/rcc_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtDesigner/5.9.1/QtDesigner/private/rcc_p.h 2017-06-23 12:03:39.000000000 +0000 @@ -0,0 +1 @@ +#include "../../../../../src/designer/src/lib/shared/rcc_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtDesigner/5.9.1/QtDesigner/private/resourcebuilder_p.h qttools-opensource-src-5.9.1/include/QtDesigner/5.9.1/QtDesigner/private/resourcebuilder_p.h --- qttools-opensource-src-5.7.1/include/QtDesigner/5.9.1/QtDesigner/private/resourcebuilder_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtDesigner/5.9.1/QtDesigner/private/resourcebuilder_p.h 2017-06-23 12:03:39.000000000 +0000 @@ -0,0 +1 @@ +#include "../../../../../src/designer/src/lib/uilib/resourcebuilder_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtDesigner/5.9.1/QtDesigner/private/richtexteditor_p.h qttools-opensource-src-5.9.1/include/QtDesigner/5.9.1/QtDesigner/private/richtexteditor_p.h --- qttools-opensource-src-5.7.1/include/QtDesigner/5.9.1/QtDesigner/private/richtexteditor_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtDesigner/5.9.1/QtDesigner/private/richtexteditor_p.h 2017-06-23 12:03:39.000000000 +0000 @@ -0,0 +1 @@ +#include "../../../../../src/designer/src/lib/shared/richtexteditor_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtDesigner/5.9.1/QtDesigner/private/shared_enums_p.h qttools-opensource-src-5.9.1/include/QtDesigner/5.9.1/QtDesigner/private/shared_enums_p.h --- qttools-opensource-src-5.7.1/include/QtDesigner/5.9.1/QtDesigner/private/shared_enums_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtDesigner/5.9.1/QtDesigner/private/shared_enums_p.h 2017-06-23 12:03:39.000000000 +0000 @@ -0,0 +1 @@ +#include "../../../../../src/designer/src/lib/shared/shared_enums_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtDesigner/5.9.1/QtDesigner/private/shared_global_p.h qttools-opensource-src-5.9.1/include/QtDesigner/5.9.1/QtDesigner/private/shared_global_p.h --- qttools-opensource-src-5.7.1/include/QtDesigner/5.9.1/QtDesigner/private/shared_global_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtDesigner/5.9.1/QtDesigner/private/shared_global_p.h 2017-06-23 12:03:39.000000000 +0000 @@ -0,0 +1 @@ +#include "../../../../../src/designer/src/lib/shared/shared_global_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtDesigner/5.9.1/QtDesigner/private/shared_settings_p.h qttools-opensource-src-5.9.1/include/QtDesigner/5.9.1/QtDesigner/private/shared_settings_p.h --- qttools-opensource-src-5.7.1/include/QtDesigner/5.9.1/QtDesigner/private/shared_settings_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtDesigner/5.9.1/QtDesigner/private/shared_settings_p.h 2017-06-23 12:03:39.000000000 +0000 @@ -0,0 +1 @@ +#include "../../../../../src/designer/src/lib/shared/shared_settings_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtDesigner/5.9.1/QtDesigner/private/sheet_delegate_p.h qttools-opensource-src-5.9.1/include/QtDesigner/5.9.1/QtDesigner/private/sheet_delegate_p.h --- qttools-opensource-src-5.7.1/include/QtDesigner/5.9.1/QtDesigner/private/sheet_delegate_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtDesigner/5.9.1/QtDesigner/private/sheet_delegate_p.h 2017-06-23 12:03:39.000000000 +0000 @@ -0,0 +1 @@ +#include "../../../../../src/designer/src/lib/shared/sheet_delegate_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtDesigner/5.9.1/QtDesigner/private/signalslotdialog_p.h qttools-opensource-src-5.9.1/include/QtDesigner/5.9.1/QtDesigner/private/signalslotdialog_p.h --- qttools-opensource-src-5.7.1/include/QtDesigner/5.9.1/QtDesigner/private/signalslotdialog_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtDesigner/5.9.1/QtDesigner/private/signalslotdialog_p.h 2017-06-23 12:03:39.000000000 +0000 @@ -0,0 +1 @@ +#include "../../../../../src/designer/src/lib/shared/signalslotdialog_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtDesigner/5.9.1/QtDesigner/private/spacer_widget_p.h qttools-opensource-src-5.9.1/include/QtDesigner/5.9.1/QtDesigner/private/spacer_widget_p.h --- qttools-opensource-src-5.7.1/include/QtDesigner/5.9.1/QtDesigner/private/spacer_widget_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtDesigner/5.9.1/QtDesigner/private/spacer_widget_p.h 2017-06-23 12:03:39.000000000 +0000 @@ -0,0 +1 @@ +#include "../../../../../src/designer/src/lib/shared/spacer_widget_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtDesigner/5.9.1/QtDesigner/private/stylesheeteditor_p.h qttools-opensource-src-5.9.1/include/QtDesigner/5.9.1/QtDesigner/private/stylesheeteditor_p.h --- qttools-opensource-src-5.7.1/include/QtDesigner/5.9.1/QtDesigner/private/stylesheeteditor_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtDesigner/5.9.1/QtDesigner/private/stylesheeteditor_p.h 2017-06-23 12:03:39.000000000 +0000 @@ -0,0 +1 @@ +#include "../../../../../src/designer/src/lib/shared/stylesheeteditor_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtDesigner/5.9.1/QtDesigner/private/textbuilder_p.h qttools-opensource-src-5.9.1/include/QtDesigner/5.9.1/QtDesigner/private/textbuilder_p.h --- qttools-opensource-src-5.7.1/include/QtDesigner/5.9.1/QtDesigner/private/textbuilder_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtDesigner/5.9.1/QtDesigner/private/textbuilder_p.h 2017-06-23 12:03:39.000000000 +0000 @@ -0,0 +1 @@ +#include "../../../../../src/designer/src/lib/uilib/textbuilder_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtDesigner/5.9.1/QtDesigner/private/textpropertyeditor_p.h qttools-opensource-src-5.9.1/include/QtDesigner/5.9.1/QtDesigner/private/textpropertyeditor_p.h --- qttools-opensource-src-5.7.1/include/QtDesigner/5.9.1/QtDesigner/private/textpropertyeditor_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtDesigner/5.9.1/QtDesigner/private/textpropertyeditor_p.h 2017-06-23 12:03:39.000000000 +0000 @@ -0,0 +1 @@ +#include "../../../../../src/designer/src/lib/shared/textpropertyeditor_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtDesigner/5.9.1/QtDesigner/private/ui4_p.h qttools-opensource-src-5.9.1/include/QtDesigner/5.9.1/QtDesigner/private/ui4_p.h --- qttools-opensource-src-5.7.1/include/QtDesigner/5.9.1/QtDesigner/private/ui4_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtDesigner/5.9.1/QtDesigner/private/ui4_p.h 2017-06-23 12:03:39.000000000 +0000 @@ -0,0 +1 @@ +#include "../../../../../src/designer/src/lib/uilib/ui4_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtDesigner/5.9.1/QtDesigner/private/widgetdatabase_p.h qttools-opensource-src-5.9.1/include/QtDesigner/5.9.1/QtDesigner/private/widgetdatabase_p.h --- qttools-opensource-src-5.7.1/include/QtDesigner/5.9.1/QtDesigner/private/widgetdatabase_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtDesigner/5.9.1/QtDesigner/private/widgetdatabase_p.h 2017-06-23 12:03:39.000000000 +0000 @@ -0,0 +1 @@ +#include "../../../../../src/designer/src/lib/shared/widgetdatabase_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtDesigner/5.9.1/QtDesigner/private/widgetfactory_p.h qttools-opensource-src-5.9.1/include/QtDesigner/5.9.1/QtDesigner/private/widgetfactory_p.h --- qttools-opensource-src-5.7.1/include/QtDesigner/5.9.1/QtDesigner/private/widgetfactory_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtDesigner/5.9.1/QtDesigner/private/widgetfactory_p.h 2017-06-23 12:03:39.000000000 +0000 @@ -0,0 +1 @@ +#include "../../../../../src/designer/src/lib/shared/widgetfactory_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtDesigner/5.9.1/QtDesigner/private/zoomwidget_p.h qttools-opensource-src-5.9.1/include/QtDesigner/5.9.1/QtDesigner/private/zoomwidget_p.h --- qttools-opensource-src-5.7.1/include/QtDesigner/5.9.1/QtDesigner/private/zoomwidget_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtDesigner/5.9.1/QtDesigner/private/zoomwidget_p.h 2017-06-23 12:03:39.000000000 +0000 @@ -0,0 +1 @@ +#include "../../../../../src/designer/src/lib/shared/zoomwidget_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtDesigner/headers.pri qttools-opensource-src-5.9.1/include/QtDesigner/headers.pri --- qttools-opensource-src-5.7.1/include/QtDesigner/headers.pri 2016-12-02 11:06:42.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtDesigner/headers.pri 2017-06-28 23:41:09.000000000 +0000 @@ -1,6 +1,7 @@ -SYNCQT.HEADER_FILES = components/qdesigner_components.h components/qdesigner_components_global.h extension/default_extensionfactory.h extension/extension.h extension/extension_global.h extension/qextensionmanager.h sdk/abstractactioneditor.h sdk/abstractdnditem.h sdk/abstractformeditor.h sdk/abstractformeditorplugin.h sdk/abstractformwindow.h sdk/abstractformwindowcursor.h sdk/abstractformwindowmanager.h sdk/abstractformwindowtool.h sdk/abstractintegration.h sdk/abstractlanguage.h sdk/abstractmetadatabase.h sdk/abstractnewformwidget.h sdk/abstractobjectinspector.h sdk/abstractoptionspage.h sdk/abstractpromotioninterface.h sdk/abstractpropertyeditor.h sdk/abstractresourcebrowser.h sdk/abstractsettings.h sdk/abstractwidgetbox.h sdk/abstractwidgetdatabase.h sdk/abstractwidgetfactory.h sdk/container.h sdk/dynamicpropertysheet.h sdk/extrainfo.h sdk/layoutdecoration.h sdk/membersheet.h sdk/propertysheet.h sdk/sdk_global.h sdk/taskmenu.h uilib/abstractformbuilder.h uilib/formbuilder.h uilib/uilib_global.h ../../../../include/QtDesigner/QDesignerExportWidget ../../../../include/QtDesigner/QDesignerCustomWidgetInterface ../../../../include/QtDesigner/QDesignerCustomWidgetCollectionInterface ../../../../include/QtDesigner/customwidget.h ../../../../include/QtDesigner/qdesignerexportwidget.h ../../../../include/QtDesigner/qtdesignerversion.h ../../../../include/QtDesigner/QtDesigner +SYNCQT.HEADER_FILES = components/qdesigner_components.h components/qdesigner_components_global.h extension/default_extensionfactory.h extension/extension.h extension/extension_global.h extension/qextensionmanager.h sdk/abstractactioneditor.h sdk/abstractdnditem.h sdk/abstractformeditor.h sdk/abstractformeditorplugin.h sdk/abstractformwindow.h sdk/abstractformwindowcursor.h sdk/abstractformwindowmanager.h sdk/abstractformwindowtool.h sdk/abstractintegration.h sdk/abstractlanguage.h sdk/abstractmetadatabase.h sdk/abstractnewformwidget.h sdk/abstractobjectinspector.h sdk/abstractoptionspage.h sdk/abstractpromotioninterface.h sdk/abstractpropertyeditor.h sdk/abstractresourcebrowser.h sdk/abstractsettings.h sdk/abstractwidgetbox.h sdk/abstractwidgetdatabase.h sdk/abstractwidgetfactory.h sdk/container.h sdk/dynamicpropertysheet.h sdk/extrainfo.h sdk/layoutdecoration.h sdk/membersheet.h sdk/propertysheet.h sdk/sdk_global.h sdk/taskmenu.h uilib/abstractformbuilder.h uilib/formbuilder.h uilib/uilib_global.h ../../../../include/QtDesigner/QDesignerExportWidget ../../../../include/QtDesigner/QDesignerCustomWidgetInterface ../../../../include/QtDesigner/customwidget.h ../../../../include/QtDesigner/QDesignerCustomWidgetCollectionInterface ../../../../include/QtDesigner/qdesignerexportwidget.h ../../../../include/QtDesigner/qtdesignerversion.h ../../../../include/QtDesigner/QtDesigner SYNCQT.HEADER_CLASSES = ../../../../include/QtDesigner/QDesignerComponents ../../../../include/QtDesigner/QExtensionFactory ../../../../include/QtDesigner/QAbstractExtensionFactory ../../../../include/QtDesigner/QAbstractExtensionManager ../../../../include/QtDesigner/QExtensionManager ../../../../include/QtDesigner/QDesignerActionEditorInterface ../../../../include/QtDesigner/QDesignerDnDItemInterface ../../../../include/QtDesigner/QDesignerFormEditorInterface ../../../../include/QtDesigner/QDesignerFormEditorPluginInterface ../../../../include/QtDesigner/QDesignerFormWindowInterface ../../../../include/QtDesigner/QDesignerFormWindowCursorInterface ../../../../include/QtDesigner/QDesignerFormWindowManagerInterface ../../../../include/QtDesigner/QDesignerFormWindowToolInterface ../../../../include/QtDesigner/QDesignerIntegrationInterface ../../../../include/QtDesigner/QDesignerIntegration ../../../../include/QtDesigner/QDesignerLanguageExtension ../../../../include/QtDesigner/QDesignerMetaDataBaseItemInterface ../../../../include/QtDesigner/QDesignerMetaDataBaseInterface ../../../../include/QtDesigner/QDesignerNewFormWidgetInterface ../../../../include/QtDesigner/QDesignerObjectInspectorInterface ../../../../include/QtDesigner/QDesignerOptionsPageInterface ../../../../include/QtDesigner/QDesignerPromotionInterface ../../../../include/QtDesigner/QDesignerPropertyEditorInterface ../../../../include/QtDesigner/QDesignerResourceBrowserInterface ../../../../include/QtDesigner/QDesignerSettingsInterface ../../../../include/QtDesigner/QDesignerWidgetBoxInterface ../../../../include/QtDesigner/QDesignerWidgetDataBaseItemInterface ../../../../include/QtDesigner/QDesignerWidgetDataBaseInterface ../../../../include/QtDesigner/QDesignerWidgetFactoryInterface ../../../../include/QtDesigner/QDesignerContainerExtension ../../../../include/QtDesigner/QDesignerDynamicPropertySheetExtension ../../../../include/QtDesigner/QDesignerExtraInfoExtension ../../../../include/QtDesigner/QDesignerLayoutDecorationExtension ../../../../include/QtDesigner/QDesignerMemberSheetExtension ../../../../include/QtDesigner/QDesignerPropertySheetExtension ../../../../include/QtDesigner/QDesignerTaskMenuExtension ../../../../include/QtDesigner/QAbstractFormBuilder ../../../../include/QtDesigner/QFormBuilder ../../../../include/QtDesigner/QtDesignerVersion SYNCQT.PRIVATE_HEADER_FILES = lib_pch.h sdk/abstractdialoggui_p.h sdk/abstractintrospection_p.h shared/actioneditor_p.h shared/actionprovider_p.h shared/actionrepository_p.h shared/codedialog_p.h shared/connectionedit_p.h shared/csshighlighter_p.h shared/deviceprofile_p.h shared/dialoggui_p.h shared/extensionfactory_p.h shared/formlayoutmenu_p.h shared/formwindowbase_p.h shared/grid_p.h shared/gridpanel_p.h shared/htmlhighlighter_p.h shared/iconloader_p.h shared/iconselector_p.h shared/invisible_widget_p.h shared/layout_p.h shared/layoutinfo_p.h shared/metadatabase_p.h shared/morphmenu_p.h shared/newactiondialog_p.h shared/newformwidget_p.h shared/orderdialog_p.h shared/plaintexteditor_p.h shared/plugindialog_p.h shared/pluginmanager_p.h shared/previewconfigurationwidget_p.h shared/previewmanager_p.h shared/promotionmodel_p.h shared/promotiontaskmenu_p.h shared/propertylineedit_p.h shared/qdesigner_command2_p.h shared/qdesigner_command_p.h shared/qdesigner_dnditem_p.h shared/qdesigner_dockwidget_p.h shared/qdesigner_formbuilder_p.h shared/qdesigner_formeditorcommand_p.h shared/qdesigner_formwindowcommand_p.h shared/qdesigner_formwindowmanager_p.h shared/qdesigner_introspection_p.h shared/qdesigner_membersheet_p.h shared/qdesigner_menu_p.h shared/qdesigner_menubar_p.h shared/qdesigner_objectinspector_p.h shared/qdesigner_promotion_p.h shared/qdesigner_promotiondialog_p.h shared/qdesigner_propertycommand_p.h shared/qdesigner_propertyeditor_p.h shared/qdesigner_propertysheet_p.h shared/qdesigner_qsettings_p.h shared/qdesigner_stackedbox_p.h shared/qdesigner_tabwidget_p.h shared/qdesigner_taskmenu_p.h shared/qdesigner_toolbar_p.h shared/qdesigner_toolbox_p.h shared/qdesigner_utils_p.h shared/qdesigner_widget_p.h shared/qdesigner_widgetbox_p.h shared/qdesigner_widgetitem_p.h shared/qlayout_widget_p.h shared/qsimpleresource_p.h shared/qtresourceeditordialog_p.h shared/qtresourcemodel_p.h shared/qtresourceview_p.h shared/rcc_p.h shared/richtexteditor_p.h shared/shared_enums_p.h shared/shared_global_p.h shared/shared_settings_p.h shared/sheet_delegate_p.h shared/signalslotdialog_p.h shared/spacer_widget_p.h shared/stylesheeteditor_p.h shared/textpropertyeditor_p.h shared/widgetdatabase_p.h shared/widgetfactory_p.h shared/zoomwidget_p.h uilib/formbuilderextra_p.h uilib/properties_p.h uilib/resourcebuilder_p.h uilib/textbuilder_p.h uilib/ui4_p.h +SYNCQT.INJECTED_PRIVATE_HEADER_FILES = SYNCQT.QPA_HEADER_FILES = SYNCQT.CLEAN_HEADER_FILES = components/qdesigner_components.h components/qdesigner_components_global.h extension/default_extensionfactory.h extension/extension.h extension/extension_global.h extension/qextensionmanager.h sdk/abstractactioneditor.h sdk/abstractdnditem.h sdk/abstractformeditor.h sdk/abstractformeditorplugin.h sdk/abstractformwindow.h sdk/abstractformwindowcursor.h sdk/abstractformwindowmanager.h sdk/abstractformwindowtool.h sdk/abstractintegration.h sdk/abstractlanguage.h sdk/abstractmetadatabase.h sdk/abstractnewformwidget.h sdk/abstractobjectinspector.h sdk/abstractoptionspage.h sdk/abstractpromotioninterface.h sdk/abstractpropertyeditor.h sdk/abstractresourcebrowser.h sdk/abstractsettings.h sdk/abstractwidgetbox.h sdk/abstractwidgetdatabase.h sdk/abstractwidgetfactory.h sdk/container.h sdk/dynamicpropertysheet.h sdk/extrainfo.h sdk/layoutdecoration.h sdk/membersheet.h sdk/propertysheet.h sdk/sdk_global.h sdk/taskmenu.h uilib/abstractformbuilder.h uilib/formbuilder.h uilib/uilib_global.h SYNCQT.INJECTIONS = diff -Nru qttools-opensource-src-5.7.1/include/QtDesigner/QtDesigner qttools-opensource-src-5.9.1/include/QtDesigner/QtDesigner --- qttools-opensource-src-5.7.1/include/QtDesigner/QtDesigner 2016-12-02 11:06:42.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtDesigner/QtDesigner 2017-06-28 23:41:09.000000000 +0000 @@ -1,10 +1,9 @@ #ifndef QT_QTDESIGNER_MODULE_H #define QT_QTDESIGNER_MODULE_H #include -#include "extension.h" -#include "qextensionmanager.h" #include "abstractactioneditor.h" #include "abstractdnditem.h" +#include "abstractformbuilder.h" #include "abstractformeditor.h" #include "abstractformeditorplugin.h" #include "abstractformwindow.h" @@ -26,12 +25,13 @@ #include "abstractwidgetfactory.h" #include "container.h" #include "dynamicpropertysheet.h" +#include "extension.h" #include "extrainfo.h" +#include "formbuilder.h" #include "layoutdecoration.h" #include "membersheet.h" #include "propertysheet.h" +#include "qextensionmanager.h" #include "taskmenu.h" -#include "abstractformbuilder.h" -#include "formbuilder.h" #include "qtdesignerversion.h" #endif diff -Nru qttools-opensource-src-5.7.1/include/QtDesigner/qtdesignerversion.h qttools-opensource-src-5.9.1/include/QtDesigner/qtdesignerversion.h --- qttools-opensource-src-5.7.1/include/QtDesigner/qtdesignerversion.h 2016-12-02 11:06:42.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtDesigner/qtdesignerversion.h 2017-06-28 23:41:09.000000000 +0000 @@ -2,8 +2,8 @@ #ifndef QT_QTDESIGNER_VERSION_H #define QT_QTDESIGNER_VERSION_H -#define QTDESIGNER_VERSION_STR "5.7.1" +#define QTDESIGNER_VERSION_STR "5.9.1" -#define QTDESIGNER_VERSION 0x050701 +#define QTDESIGNER_VERSION 0x050901 #endif // QT_QTDESIGNER_VERSION_H diff -Nru qttools-opensource-src-5.7.1/include/QtDesignerComponents/5.7.1/QtDesignerComponents/private/lib_pch.h qttools-opensource-src-5.9.1/include/QtDesignerComponents/5.7.1/QtDesignerComponents/private/lib_pch.h --- qttools-opensource-src-5.7.1/include/QtDesignerComponents/5.7.1/QtDesignerComponents/private/lib_pch.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtDesignerComponents/5.7.1/QtDesignerComponents/private/lib_pch.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/designer/src/components/lib/lib_pch.h" diff -Nru qttools-opensource-src-5.7.1/include/QtDesignerComponents/5.9.1/QtDesignerComponents/private/lib_pch.h qttools-opensource-src-5.9.1/include/QtDesignerComponents/5.9.1/QtDesignerComponents/private/lib_pch.h --- qttools-opensource-src-5.7.1/include/QtDesignerComponents/5.9.1/QtDesignerComponents/private/lib_pch.h 1970-01-01 00:00:00.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtDesignerComponents/5.9.1/QtDesignerComponents/private/lib_pch.h 2017-06-23 12:03:39.000000000 +0000 @@ -0,0 +1 @@ +#include "../../../../../src/designer/src/components/lib/lib_pch.h" diff -Nru qttools-opensource-src-5.7.1/include/QtDesignerComponents/headers.pri qttools-opensource-src-5.9.1/include/QtDesignerComponents/headers.pri --- qttools-opensource-src-5.7.1/include/QtDesignerComponents/headers.pri 2016-12-02 11:06:42.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtDesignerComponents/headers.pri 2017-06-28 23:41:09.000000000 +0000 @@ -1,6 +1,7 @@ SYNCQT.HEADER_FILES = ../../../../../include/QtDesignerComponents/qtdesignercomponentsversion.h ../../../../../include/QtDesignerComponents/QtDesignerComponents SYNCQT.HEADER_CLASSES = ../../../../../include/QtDesignerComponents/QtDesignerComponentsVersion SYNCQT.PRIVATE_HEADER_FILES = lib_pch.h +SYNCQT.INJECTED_PRIVATE_HEADER_FILES = SYNCQT.QPA_HEADER_FILES = SYNCQT.CLEAN_HEADER_FILES = SYNCQT.INJECTIONS = diff -Nru qttools-opensource-src-5.7.1/include/QtDesignerComponents/qtdesignercomponentsversion.h qttools-opensource-src-5.9.1/include/QtDesignerComponents/qtdesignercomponentsversion.h --- qttools-opensource-src-5.7.1/include/QtDesignerComponents/qtdesignercomponentsversion.h 2016-12-02 11:06:42.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtDesignerComponents/qtdesignercomponentsversion.h 2017-06-28 23:41:09.000000000 +0000 @@ -2,8 +2,8 @@ #ifndef QT_QTDESIGNERCOMPONENTS_VERSION_H #define QT_QTDESIGNERCOMPONENTS_VERSION_H -#define QTDESIGNERCOMPONENTS_VERSION_STR "5.7.1" +#define QTDESIGNERCOMPONENTS_VERSION_STR "5.9.1" -#define QTDESIGNERCOMPONENTS_VERSION 0x050701 +#define QTDESIGNERCOMPONENTS_VERSION 0x050901 #endif // QT_QTDESIGNERCOMPONENTS_VERSION_H diff -Nru qttools-opensource-src-5.7.1/include/QtHelp/5.7.1/QtHelp/private/qclucenefieldnames_p.h qttools-opensource-src-5.9.1/include/QtHelp/5.7.1/QtHelp/private/qclucenefieldnames_p.h --- qttools-opensource-src-5.7.1/include/QtHelp/5.7.1/QtHelp/private/qclucenefieldnames_p.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtHelp/5.7.1/QtHelp/private/qclucenefieldnames_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/assistant/help/qclucenefieldnames_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtHelp/5.7.1/QtHelp/private/qhelpcollectionhandler_p.h qttools-opensource-src-5.9.1/include/QtHelp/5.7.1/QtHelp/private/qhelpcollectionhandler_p.h --- qttools-opensource-src-5.7.1/include/QtHelp/5.7.1/QtHelp/private/qhelpcollectionhandler_p.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtHelp/5.7.1/QtHelp/private/qhelpcollectionhandler_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/assistant/help/qhelpcollectionhandler_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtHelp/5.7.1/QtHelp/private/qhelpdatainterface_p.h qttools-opensource-src-5.9.1/include/QtHelp/5.7.1/QtHelp/private/qhelpdatainterface_p.h --- qttools-opensource-src-5.7.1/include/QtHelp/5.7.1/QtHelp/private/qhelpdatainterface_p.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtHelp/5.7.1/QtHelp/private/qhelpdatainterface_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/assistant/help/qhelpdatainterface_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtHelp/5.7.1/QtHelp/private/qhelpdbreader_p.h qttools-opensource-src-5.9.1/include/QtHelp/5.7.1/QtHelp/private/qhelpdbreader_p.h --- qttools-opensource-src-5.7.1/include/QtHelp/5.7.1/QtHelp/private/qhelpdbreader_p.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtHelp/5.7.1/QtHelp/private/qhelpdbreader_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/assistant/help/qhelpdbreader_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtHelp/5.7.1/QtHelp/private/qhelpengine_p.h qttools-opensource-src-5.9.1/include/QtHelp/5.7.1/QtHelp/private/qhelpengine_p.h --- qttools-opensource-src-5.7.1/include/QtHelp/5.7.1/QtHelp/private/qhelpengine_p.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtHelp/5.7.1/QtHelp/private/qhelpengine_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/assistant/help/qhelpengine_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtHelp/5.7.1/QtHelp/private/qhelpgenerator_p.h qttools-opensource-src-5.9.1/include/QtHelp/5.7.1/QtHelp/private/qhelpgenerator_p.h --- qttools-opensource-src-5.7.1/include/QtHelp/5.7.1/QtHelp/private/qhelpgenerator_p.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtHelp/5.7.1/QtHelp/private/qhelpgenerator_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/assistant/help/qhelpgenerator_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtHelp/5.7.1/QtHelp/private/qhelpprojectdata_p.h qttools-opensource-src-5.9.1/include/QtHelp/5.7.1/QtHelp/private/qhelpprojectdata_p.h --- qttools-opensource-src-5.7.1/include/QtHelp/5.7.1/QtHelp/private/qhelpprojectdata_p.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtHelp/5.7.1/QtHelp/private/qhelpprojectdata_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/assistant/help/qhelpprojectdata_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtHelp/5.7.1/QtHelp/private/qhelpsearchindex_default_p.h qttools-opensource-src-5.9.1/include/QtHelp/5.7.1/QtHelp/private/qhelpsearchindex_default_p.h --- qttools-opensource-src-5.7.1/include/QtHelp/5.7.1/QtHelp/private/qhelpsearchindex_default_p.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtHelp/5.7.1/QtHelp/private/qhelpsearchindex_default_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/assistant/help/qhelpsearchindex_default_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtHelp/5.7.1/QtHelp/private/qhelpsearchindexreader_clucene_p.h qttools-opensource-src-5.9.1/include/QtHelp/5.7.1/QtHelp/private/qhelpsearchindexreader_clucene_p.h --- qttools-opensource-src-5.7.1/include/QtHelp/5.7.1/QtHelp/private/qhelpsearchindexreader_clucene_p.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtHelp/5.7.1/QtHelp/private/qhelpsearchindexreader_clucene_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/assistant/help/qhelpsearchindexreader_clucene_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtHelp/5.7.1/QtHelp/private/qhelpsearchindexreader_default_p.h qttools-opensource-src-5.9.1/include/QtHelp/5.7.1/QtHelp/private/qhelpsearchindexreader_default_p.h --- qttools-opensource-src-5.7.1/include/QtHelp/5.7.1/QtHelp/private/qhelpsearchindexreader_default_p.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtHelp/5.7.1/QtHelp/private/qhelpsearchindexreader_default_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/assistant/help/qhelpsearchindexreader_default_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtHelp/5.7.1/QtHelp/private/qhelpsearchindexreader_p.h qttools-opensource-src-5.9.1/include/QtHelp/5.7.1/QtHelp/private/qhelpsearchindexreader_p.h --- qttools-opensource-src-5.7.1/include/QtHelp/5.7.1/QtHelp/private/qhelpsearchindexreader_p.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtHelp/5.7.1/QtHelp/private/qhelpsearchindexreader_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/assistant/help/qhelpsearchindexreader_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtHelp/5.7.1/QtHelp/private/qhelpsearchindexwriter_clucene_p.h qttools-opensource-src-5.9.1/include/QtHelp/5.7.1/QtHelp/private/qhelpsearchindexwriter_clucene_p.h --- qttools-opensource-src-5.7.1/include/QtHelp/5.7.1/QtHelp/private/qhelpsearchindexwriter_clucene_p.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtHelp/5.7.1/QtHelp/private/qhelpsearchindexwriter_clucene_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/assistant/help/qhelpsearchindexwriter_clucene_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtHelp/5.7.1/QtHelp/private/qhelpsearchindexwriter_default_p.h qttools-opensource-src-5.9.1/include/QtHelp/5.7.1/QtHelp/private/qhelpsearchindexwriter_default_p.h --- qttools-opensource-src-5.7.1/include/QtHelp/5.7.1/QtHelp/private/qhelpsearchindexwriter_default_p.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtHelp/5.7.1/QtHelp/private/qhelpsearchindexwriter_default_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/assistant/help/qhelpsearchindexwriter_default_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtHelp/5.9.1/QtHelp/private/qhelpcollectionhandler_p.h qttools-opensource-src-5.9.1/include/QtHelp/5.9.1/QtHelp/private/qhelpcollectionhandler_p.h --- qttools-opensource-src-5.7.1/include/QtHelp/5.9.1/QtHelp/private/qhelpcollectionhandler_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtHelp/5.9.1/QtHelp/private/qhelpcollectionhandler_p.h 2017-06-23 12:03:39.000000000 +0000 @@ -0,0 +1 @@ +#include "../../../../../src/assistant/help/qhelpcollectionhandler_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtHelp/5.9.1/QtHelp/private/qhelpdatainterface_p.h qttools-opensource-src-5.9.1/include/QtHelp/5.9.1/QtHelp/private/qhelpdatainterface_p.h --- qttools-opensource-src-5.7.1/include/QtHelp/5.9.1/QtHelp/private/qhelpdatainterface_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtHelp/5.9.1/QtHelp/private/qhelpdatainterface_p.h 2017-06-23 12:03:39.000000000 +0000 @@ -0,0 +1 @@ +#include "../../../../../src/assistant/help/qhelpdatainterface_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtHelp/5.9.1/QtHelp/private/qhelpdbreader_p.h qttools-opensource-src-5.9.1/include/QtHelp/5.9.1/QtHelp/private/qhelpdbreader_p.h --- qttools-opensource-src-5.7.1/include/QtHelp/5.9.1/QtHelp/private/qhelpdbreader_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtHelp/5.9.1/QtHelp/private/qhelpdbreader_p.h 2017-06-23 12:03:39.000000000 +0000 @@ -0,0 +1 @@ +#include "../../../../../src/assistant/help/qhelpdbreader_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtHelp/5.9.1/QtHelp/private/qhelpengine_p.h qttools-opensource-src-5.9.1/include/QtHelp/5.9.1/QtHelp/private/qhelpengine_p.h --- qttools-opensource-src-5.7.1/include/QtHelp/5.9.1/QtHelp/private/qhelpengine_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtHelp/5.9.1/QtHelp/private/qhelpengine_p.h 2017-06-23 12:03:39.000000000 +0000 @@ -0,0 +1 @@ +#include "../../../../../src/assistant/help/qhelpengine_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtHelp/5.9.1/QtHelp/private/qhelpgenerator_p.h qttools-opensource-src-5.9.1/include/QtHelp/5.9.1/QtHelp/private/qhelpgenerator_p.h --- qttools-opensource-src-5.7.1/include/QtHelp/5.9.1/QtHelp/private/qhelpgenerator_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtHelp/5.9.1/QtHelp/private/qhelpgenerator_p.h 2017-06-23 12:03:39.000000000 +0000 @@ -0,0 +1 @@ +#include "../../../../../src/assistant/help/qhelpgenerator_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtHelp/5.9.1/QtHelp/private/qhelpprojectdata_p.h qttools-opensource-src-5.9.1/include/QtHelp/5.9.1/QtHelp/private/qhelpprojectdata_p.h --- qttools-opensource-src-5.7.1/include/QtHelp/5.9.1/QtHelp/private/qhelpprojectdata_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtHelp/5.9.1/QtHelp/private/qhelpprojectdata_p.h 2017-06-23 12:03:39.000000000 +0000 @@ -0,0 +1 @@ +#include "../../../../../src/assistant/help/qhelpprojectdata_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtHelp/5.9.1/QtHelp/private/qhelpsearchindexreader_default_p.h qttools-opensource-src-5.9.1/include/QtHelp/5.9.1/QtHelp/private/qhelpsearchindexreader_default_p.h --- qttools-opensource-src-5.7.1/include/QtHelp/5.9.1/QtHelp/private/qhelpsearchindexreader_default_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtHelp/5.9.1/QtHelp/private/qhelpsearchindexreader_default_p.h 2017-06-23 12:03:39.000000000 +0000 @@ -0,0 +1 @@ +#include "../../../../../src/assistant/help/qhelpsearchindexreader_default_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtHelp/5.9.1/QtHelp/private/qhelpsearchindexreader_p.h qttools-opensource-src-5.9.1/include/QtHelp/5.9.1/QtHelp/private/qhelpsearchindexreader_p.h --- qttools-opensource-src-5.7.1/include/QtHelp/5.9.1/QtHelp/private/qhelpsearchindexreader_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtHelp/5.9.1/QtHelp/private/qhelpsearchindexreader_p.h 2017-06-23 12:03:39.000000000 +0000 @@ -0,0 +1 @@ +#include "../../../../../src/assistant/help/qhelpsearchindexreader_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtHelp/5.9.1/QtHelp/private/qhelpsearchindexwriter_default_p.h qttools-opensource-src-5.9.1/include/QtHelp/5.9.1/QtHelp/private/qhelpsearchindexwriter_default_p.h --- qttools-opensource-src-5.7.1/include/QtHelp/5.9.1/QtHelp/private/qhelpsearchindexwriter_default_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtHelp/5.9.1/QtHelp/private/qhelpsearchindexwriter_default_p.h 2017-06-23 12:03:39.000000000 +0000 @@ -0,0 +1 @@ +#include "../../../../../src/assistant/help/qhelpsearchindexwriter_default_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtHelp/headers.pri qttools-opensource-src-5.9.1/include/QtHelp/headers.pri --- qttools-opensource-src-5.7.1/include/QtHelp/headers.pri 2016-12-02 11:06:42.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtHelp/headers.pri 2017-06-28 23:41:09.000000000 +0000 @@ -1,6 +1,7 @@ SYNCQT.HEADER_FILES = qhelp_global.h qhelpcontentwidget.h qhelpengine.h qhelpenginecore.h qhelpindexwidget.h qhelpsearchengine.h qhelpsearchquerywidget.h qhelpsearchresultwidget.h ../../../include/QtHelp/qthelpversion.h ../../../include/QtHelp/QtHelp -SYNCQT.HEADER_CLASSES = ../../../include/QtHelp/QHelpGlobal ../../../include/QtHelp/QHelpContentItem ../../../include/QtHelp/QHelpContentModel ../../../include/QtHelp/QHelpContentWidget ../../../include/QtHelp/QHelpEngine ../../../include/QtHelp/QHelpEngineCore ../../../include/QtHelp/QHelpIndexModel ../../../include/QtHelp/QHelpIndexWidget ../../../include/QtHelp/QHelpSearchQuery ../../../include/QtHelp/QHelpSearchEngine ../../../include/QtHelp/QHelpSearchQueryWidget ../../../include/QtHelp/QHelpSearchResultWidget ../../../include/QtHelp/QtHelpVersion -SYNCQT.PRIVATE_HEADER_FILES = qclucenefieldnames_p.h qhelpcollectionhandler_p.h qhelpdatainterface_p.h qhelpdbreader_p.h qhelpengine_p.h qhelpgenerator_p.h qhelpprojectdata_p.h qhelpsearchindex_default_p.h qhelpsearchindexreader_clucene_p.h qhelpsearchindexreader_default_p.h qhelpsearchindexreader_p.h qhelpsearchindexwriter_clucene_p.h qhelpsearchindexwriter_default_p.h +SYNCQT.HEADER_CLASSES = ../../../include/QtHelp/QHelpGlobal ../../../include/QtHelp/QHelpContentItem ../../../include/QtHelp/QHelpContentModel ../../../include/QtHelp/QHelpContentWidget ../../../include/QtHelp/QHelpEngine ../../../include/QtHelp/QHelpEngineCore ../../../include/QtHelp/QHelpIndexModel ../../../include/QtHelp/QHelpIndexWidget ../../../include/QtHelp/QHelpSearchQuery ../../../include/QtHelp/QHelpSearchResult ../../../include/QtHelp/QHelpSearchEngine ../../../include/QtHelp/QHelpSearchQueryWidget ../../../include/QtHelp/QHelpSearchResultWidget ../../../include/QtHelp/QtHelpVersion +SYNCQT.PRIVATE_HEADER_FILES = qhelpcollectionhandler_p.h qhelpdatainterface_p.h qhelpdbreader_p.h qhelpengine_p.h qhelpgenerator_p.h qhelpprojectdata_p.h qhelpsearchindexreader_default_p.h qhelpsearchindexreader_p.h qhelpsearchindexwriter_default_p.h +SYNCQT.INJECTED_PRIVATE_HEADER_FILES = SYNCQT.QPA_HEADER_FILES = SYNCQT.CLEAN_HEADER_FILES = qhelp_global.h qhelpcontentwidget.h qhelpengine.h qhelpenginecore.h qhelpindexwidget.h qhelpsearchengine.h qhelpsearchquerywidget.h qhelpsearchresultwidget.h SYNCQT.INJECTIONS = diff -Nru qttools-opensource-src-5.7.1/include/QtHelp/QHelpSearchResult qttools-opensource-src-5.9.1/include/QtHelp/QHelpSearchResult --- qttools-opensource-src-5.7.1/include/QtHelp/QHelpSearchResult 1970-01-01 00:00:00.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtHelp/QHelpSearchResult 2017-06-23 12:03:39.000000000 +0000 @@ -0,0 +1 @@ +#include "qhelpsearchengine.h" diff -Nru qttools-opensource-src-5.7.1/include/QtHelp/qthelpversion.h qttools-opensource-src-5.9.1/include/QtHelp/qthelpversion.h --- qttools-opensource-src-5.7.1/include/QtHelp/qthelpversion.h 2016-12-02 11:06:42.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtHelp/qthelpversion.h 2017-06-28 23:41:09.000000000 +0000 @@ -2,8 +2,8 @@ #ifndef QT_QTHELP_VERSION_H #define QT_QTHELP_VERSION_H -#define QTHELP_VERSION_STR "5.7.1" +#define QTHELP_VERSION_STR "5.9.1" -#define QTHELP_VERSION 0x050701 +#define QTHELP_VERSION 0x050901 #endif // QT_QTHELP_VERSION_H diff -Nru qttools-opensource-src-5.7.1/include/QtUiPlugin/headers.pri qttools-opensource-src-5.9.1/include/QtUiPlugin/headers.pri --- qttools-opensource-src-5.7.1/include/QtUiPlugin/headers.pri 2016-12-02 11:06:42.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtUiPlugin/headers.pri 2017-06-28 23:41:09.000000000 +0000 @@ -1,6 +1,7 @@ SYNCQT.HEADER_FILES = customwidget.h qdesignerexportwidget.h ../../../../include/QtUiPlugin/qtuipluginversion.h ../../../../include/QtUiPlugin/QtUiPlugin SYNCQT.HEADER_CLASSES = ../../../../include/QtUiPlugin/QDesignerCustomWidgetInterface ../../../../include/QtUiPlugin/QDesignerCustomWidgetCollectionInterface ../../../../include/QtUiPlugin/QDesignerExportWidget ../../../../include/QtUiPlugin/QtUiPluginVersion SYNCQT.PRIVATE_HEADER_FILES = +SYNCQT.INJECTED_PRIVATE_HEADER_FILES = SYNCQT.QPA_HEADER_FILES = SYNCQT.CLEAN_HEADER_FILES = customwidget.h qdesignerexportwidget.h SYNCQT.INJECTIONS = diff -Nru qttools-opensource-src-5.7.1/include/QtUiPlugin/qtuipluginversion.h qttools-opensource-src-5.9.1/include/QtUiPlugin/qtuipluginversion.h --- qttools-opensource-src-5.7.1/include/QtUiPlugin/qtuipluginversion.h 2016-12-02 11:06:42.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtUiPlugin/qtuipluginversion.h 2017-06-28 23:41:09.000000000 +0000 @@ -2,8 +2,8 @@ #ifndef QT_QTUIPLUGIN_VERSION_H #define QT_QTUIPLUGIN_VERSION_H -#define QTUIPLUGIN_VERSION_STR "5.7.1" +#define QTUIPLUGIN_VERSION_STR "5.9.1" -#define QTUIPLUGIN_VERSION 0x050701 +#define QTUIPLUGIN_VERSION 0x050901 #endif // QT_QTUIPLUGIN_VERSION_H diff -Nru qttools-opensource-src-5.7.1/include/QtUiTools/5.7.1/QtUiTools/private/quiloader_p.h qttools-opensource-src-5.9.1/include/QtUiTools/5.7.1/QtUiTools/private/quiloader_p.h --- qttools-opensource-src-5.7.1/include/QtUiTools/5.7.1/QtUiTools/private/quiloader_p.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtUiTools/5.7.1/QtUiTools/private/quiloader_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/designer/src/uitools/quiloader_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtUiTools/5.9.1/QtUiTools/private/quiloader_p.h qttools-opensource-src-5.9.1/include/QtUiTools/5.9.1/QtUiTools/private/quiloader_p.h --- qttools-opensource-src-5.7.1/include/QtUiTools/5.9.1/QtUiTools/private/quiloader_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtUiTools/5.9.1/QtUiTools/private/quiloader_p.h 2017-06-23 12:03:39.000000000 +0000 @@ -0,0 +1 @@ +#include "../../../../../src/designer/src/uitools/quiloader_p.h" diff -Nru qttools-opensource-src-5.7.1/include/QtUiTools/headers.pri qttools-opensource-src-5.9.1/include/QtUiTools/headers.pri --- qttools-opensource-src-5.7.1/include/QtUiTools/headers.pri 2016-12-02 11:06:42.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtUiTools/headers.pri 2017-06-28 23:41:09.000000000 +0000 @@ -1,6 +1,7 @@ SYNCQT.HEADER_FILES = quiloader.h ../../../../include/QtUiTools/qtuitoolsversion.h ../../../../include/QtUiTools/QtUiTools SYNCQT.HEADER_CLASSES = ../../../../include/QtUiTools/QUiLoader ../../../../include/QtUiTools/QtUiToolsVersion SYNCQT.PRIVATE_HEADER_FILES = quiloader_p.h +SYNCQT.INJECTED_PRIVATE_HEADER_FILES = SYNCQT.QPA_HEADER_FILES = SYNCQT.CLEAN_HEADER_FILES = quiloader.h SYNCQT.INJECTIONS = diff -Nru qttools-opensource-src-5.7.1/include/QtUiTools/qtuitoolsversion.h qttools-opensource-src-5.9.1/include/QtUiTools/qtuitoolsversion.h --- qttools-opensource-src-5.7.1/include/QtUiTools/qtuitoolsversion.h 2016-12-02 11:06:42.000000000 +0000 +++ qttools-opensource-src-5.9.1/include/QtUiTools/qtuitoolsversion.h 2017-06-28 23:41:09.000000000 +0000 @@ -2,8 +2,8 @@ #ifndef QT_QTUITOOLS_VERSION_H #define QT_QTUITOOLS_VERSION_H -#define QTUITOOLS_VERSION_STR "5.7.1" +#define QTUITOOLS_VERSION_STR "5.9.1" -#define QTUITOOLS_VERSION 0x050701 +#define QTUITOOLS_VERSION 0x050901 #endif // QT_QTUITOOLS_VERSION_H diff -Nru qttools-opensource-src-5.7.1/LGPL_EXCEPTION.txt qttools-opensource-src-5.9.1/LGPL_EXCEPTION.txt --- qttools-opensource-src-5.7.1/LGPL_EXCEPTION.txt 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/LGPL_EXCEPTION.txt 1970-01-01 00:00:00.000000000 +0000 @@ -1,22 +0,0 @@ -The Qt Company Qt LGPL Exception version 1.1 - -As an additional permission to the GNU Lesser General Public License version -2.1, the object code form of a "work that uses the Library" may incorporate -material from a header file that is part of the Library. You may distribute -such object code under terms of your choice, provided that: - (i) the header files of the Library have not been modified; and - (ii) the incorporated material is limited to numerical parameters, data - structure layouts, accessors, macros, inline functions and - templates; and - (iii) you comply with the terms of Section 6 of the GNU Lesser General - Public License version 2.1. - -Moreover, you may apply this exception to a modified version of the Library, -provided that such modification does not involve copying material from the -Library into the modified Library's header files unless such material is -limited to (i) numerical parameters; (ii) data structure layouts; -(iii) accessors; and (iv) small macros, templates and inline functions of -five lines or less in length. - -Furthermore, you are not required to apply this additional permission to a -modified version of the Library. diff -Nru qttools-opensource-src-5.7.1/LICENSE.GPLv3 qttools-opensource-src-5.9.1/LICENSE.GPLv3 --- qttools-opensource-src-5.7.1/LICENSE.GPLv3 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/LICENSE.GPLv3 1970-01-01 00:00:00.000000000 +0000 @@ -1,686 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - - The Qt Toolkit is Copyright (C) 2016 The Qt Company Ltd. - Contact: http://www.qt.io/licensing/ - - You may use, distribute and copy the Qt Toolkit under the terms of - GNU Lesser General Public License version 3. That license references - the General Public License version 3, that is displayed below. Other - portions of the Qt Toolkit may be licensed directly under this license. - -------------------------------------------------------------------------- - - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - 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 3 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 . - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - Copyright (C) - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -. diff -Nru qttools-opensource-src-5.7.1/LICENSE.LGPLv21 qttools-opensource-src-5.9.1/LICENSE.LGPLv21 --- qttools-opensource-src-5.7.1/LICENSE.LGPLv21 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/LICENSE.LGPLv21 1970-01-01 00:00:00.000000000 +0000 @@ -1,514 +0,0 @@ - GNU LESSER GENERAL PUBLIC LICENSE - - The Qt Toolkit is Copyright (C) 2016 The Qt Company Ltd. - Contact: http://www.qt.io/licensing/ - - You may use, distribute and copy the Qt Toolkit under the terms of - GNU Lesser General Public License version 2.1, which is displayed below. - -------------------------------------------------------------------------- - - GNU LESSER GENERAL PUBLIC LICENSE - Version 2.1, February 1999 - - Copyright (C) 1991, 1999 Free Software Foundation, Inc. - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - -[This is the first released version of the Lesser GPL. It also counts - as the successor of the GNU Library Public License, version 2, hence - the version number 2.1.] - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -Licenses are intended to guarantee your freedom to share and change -free software--to make sure the software is free for all its users. - - This license, the Lesser General Public License, applies to some -specially designated software packages--typically libraries--of the -Free Software Foundation and other authors who decide to use it. You -can use it too, but we suggest you first think carefully about whether -this license or the ordinary General Public License is the better -strategy to use in any particular case, based on the explanations below. - - When we speak of free software, we are referring to freedom of use, -not price. Our General Public Licenses are designed to make sure that -you have the freedom to distribute copies of free software (and charge -for this service if you wish); that you receive source code or can get -it if you want it; that you can change the software and use pieces of -it in new free programs; and that you are informed that you can do -these things. - - To protect your rights, we need to make restrictions that forbid -distributors to deny you these rights or to ask you to surrender these -rights. These restrictions translate to certain responsibilities for -you if you distribute copies of the library or if you modify it. - - For example, if you distribute copies of the library, whether gratis -or for a fee, you must give the recipients all the rights that we gave -you. You must make sure that they, too, receive or can get the source -code. If you link other code with the library, you must provide -complete object files to the recipients, so that they can relink them -with the library after making changes to the library and recompiling -it. And you must show them these terms so they know their rights. - - We protect your rights with a two-step method: (1) we copyright the -library, and (2) we offer you this license, which gives you legal -permission to copy, distribute and/or modify the library. - - To protect each distributor, we want to make it very clear that -there is no warranty for the free library. Also, if the library is -modified by someone else and passed on, the recipients should know -that what they have is not the original version, so that the original -author's reputation will not be affected by problems that might be -introduced by others. - - Finally, software patents pose a constant threat to the existence of -any free program. We wish to make sure that a company cannot -effectively restrict the users of a free program by obtaining a -restrictive license from a patent holder. Therefore, we insist that -any patent license obtained for a version of the library must be -consistent with the full freedom of use specified in this license. - - Most GNU software, including some libraries, is covered by the -ordinary GNU General Public License. This license, the GNU Lesser -General Public License, applies to certain designated libraries, and -is quite different from the ordinary General Public License. We use -this license for certain libraries in order to permit linking those -libraries into non-free programs. - - When a program is linked with a library, whether statically or using -a shared library, the combination of the two is legally speaking a -combined work, a derivative of the original library. The ordinary -General Public License therefore permits such linking only if the -entire combination fits its criteria of freedom. The Lesser General -Public License permits more lax criteria for linking other code with -the library. - - We call this license the "Lesser" General Public License because it -does Less to protect the user's freedom than the ordinary General -Public License. It also provides other free software developers Less -of an advantage over competing non-free programs. These disadvantages -are the reason we use the ordinary General Public License for many -libraries. However, the Lesser license provides advantages in certain -special circumstances. - - For example, on rare occasions, there may be a special need to -encourage the widest possible use of a certain library, so that it becomes -a de-facto standard. To achieve this, non-free programs must be -allowed to use the library. A more frequent case is that a free -library does the same job as widely used non-free libraries. In this -case, there is little to gain by limiting the free library to free -software only, so we use the Lesser General Public License. - - In other cases, permission to use a particular library in non-free -programs enables a greater number of people to use a large body of -free software. For example, permission to use the GNU C Library in -non-free programs enables many more people to use the whole GNU -operating system, as well as its variant, the GNU/Linux operating -system. - - Although the Lesser General Public License is Less protective of the -users' freedom, it does ensure that the user of a program that is -linked with the Library has the freedom and the wherewithal to run -that program using a modified version of the Library. - - The precise terms and conditions for copying, distribution and -modification follow. Pay close attention to the difference between a -"work based on the library" and a "work that uses the library". The -former contains code derived from the library, whereas the latter must -be combined with the library in order to run. - - GNU LESSER GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License Agreement applies to any software library or other -program which contains a notice placed by the copyright holder or -other authorized party saying it may be distributed under the terms of -this Lesser General Public License (also called "this License"). -Each licensee is addressed as "you". - - A "library" means a collection of software functions and/or data -prepared so as to be conveniently linked with application programs -(which use some of those functions and data) to form executables. - - The "Library", below, refers to any such software library or work -which has been distributed under these terms. A "work based on the -Library" means either the Library or any derivative work under -copyright law: that is to say, a work containing the Library or a -portion of it, either verbatim or with modifications and/or translated -straightforwardly into another language. (Hereinafter, translation is -included without limitation in the term "modification".) - - "Source code" for a work means the preferred form of the work for -making modifications to it. For a library, complete source code means -all the source code for all modules it contains, plus any associated -interface definition files, plus the scripts used to control compilation -and installation of the library. - - Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running a program using the Library is not restricted, and output from -such a program is covered only if its contents constitute a work based -on the Library (independent of the use of the Library in a tool for -writing it). Whether that is true depends on what the Library does -and what the program that uses the Library does. - - 1. You may copy and distribute verbatim copies of the Library's -complete source code as you receive it, in any medium, provided that -you conspicuously and appropriately publish on each copy an -appropriate copyright notice and disclaimer of warranty; keep intact -all the notices that refer to this License and to the absence of any -warranty; and distribute a copy of this License along with the -Library. - - You may charge a fee for the physical act of transferring a copy, -and you may at your option offer warranty protection in exchange for a -fee. - - 2. You may modify your copy or copies of the Library or any portion -of it, thus forming a work based on the Library, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) The modified work must itself be a software library. - - b) You must cause the files modified to carry prominent notices - stating that you changed the files and the date of any change. - - c) You must cause the whole of the work to be licensed at no - charge to all third parties under the terms of this License. - - d) If a facility in the modified Library refers to a function or a - table of data to be supplied by an application program that uses - the facility, other than as an argument passed when the facility - is invoked, then you must make a good faith effort to ensure that, - in the event an application does not supply such function or - table, the facility still operates, and performs whatever part of - its purpose remains meaningful. - - (For example, a function in a library to compute square roots has - a purpose that is entirely well-defined independent of the - application. Therefore, Subsection 2d requires that any - application-supplied function or table used by this function must - be optional: if the application does not supply it, the square - root function must still compute square roots.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Library, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Library, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote -it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Library. - -In addition, mere aggregation of another work not based on the Library -with the Library (or with a work based on the Library) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may opt to apply the terms of the ordinary GNU General Public -License instead of this License to a given copy of the Library. To do -this, you must alter all the notices that refer to this License, so -that they refer to the ordinary GNU General Public License, version 2, -instead of to this License. (If a newer version than version 2 of the -ordinary GNU General Public License has appeared, then you can specify -that version instead if you wish.) Do not make any other change in -these notices. - - Once this change is made in a given copy, it is irreversible for -that copy, so the ordinary GNU General Public License applies to all -subsequent copies and derivative works made from that copy. - - This option is useful when you wish to copy part of the code of -the Library into a program that is not a library. - - 4. You may copy and distribute the Library (or a portion or -derivative of it, under Section 2) in object code or executable form -under the terms of Sections 1 and 2 above provided that you accompany -it with the complete corresponding machine-readable source code, which -must be distributed under the terms of Sections 1 and 2 above on a -medium customarily used for software interchange. - - If distribution of object code is made by offering access to copy -from a designated place, then offering equivalent access to copy the -source code from the same place satisfies the requirement to -distribute the source code, even though third parties are not -compelled to copy the source along with the object code. - - 5. A program that contains no derivative of any portion of the -Library, but is designed to work with the Library by being compiled or -linked with it, is called a "work that uses the Library". Such a -work, in isolation, is not a derivative work of the Library, and -therefore falls outside the scope of this License. - - However, linking a "work that uses the Library" with the Library -creates an executable that is a derivative of the Library (because it -contains portions of the Library), rather than a "work that uses the -library". The executable is therefore covered by this License. -Section 6 states terms for distribution of such executables. - - When a "work that uses the Library" uses material from a header file -that is part of the Library, the object code for the work may be a -derivative work of the Library even though the source code is not. -Whether this is true is especially significant if the work can be -linked without the Library, or if the work is itself a library. The -threshold for this to be true is not precisely defined by law. - - If such an object file uses only numerical parameters, data -structure layouts and accessors, and small macros and small inline -functions (ten lines or less in length), then the use of the object -file is unrestricted, regardless of whether it is legally a derivative -work. (Executables containing this object code plus portions of the -Library will still fall under Section 6.) - - Otherwise, if the work is a derivative of the Library, you may -distribute the object code for the work under the terms of Section 6. -Any executables containing that work also fall under Section 6, -whether or not they are linked directly with the Library itself. - - 6. As an exception to the Sections above, you may also combine or -link a "work that uses the Library" with the Library to produce a -work containing portions of the Library, and distribute that work -under terms of your choice, provided that the terms permit -modification of the work for the customer's own use and reverse -engineering for debugging such modifications. - - You must give prominent notice with each copy of the work that the -Library is used in it and that the Library and its use are covered by -this License. You must supply a copy of this License. If the work -during execution displays copyright notices, you must include the -copyright notice for the Library among them, as well as a reference -directing the user to the copy of this License. Also, you must do one -of these things: - - a) Accompany the work with the complete corresponding - machine-readable source code for the Library including whatever - changes were used in the work (which must be distributed under - Sections 1 and 2 above); and, if the work is an executable linked - with the Library, with the complete machine-readable "work that - uses the Library", as object code and/or source code, so that the - user can modify the Library and then relink to produce a modified - executable containing the modified Library. (It is understood - that the user who changes the contents of definitions files in the - Library will not necessarily be able to recompile the application - to use the modified definitions.) - - b) Use a suitable shared library mechanism for linking with the - Library. A suitable mechanism is one that (1) uses at run time a - copy of the library already present on the user's computer system, - rather than copying library functions into the executable, and (2) - will operate properly with a modified version of the library, if - the user installs one, as long as the modified version is - interface-compatible with the version that the work was made with. - - c) Accompany the work with a written offer, valid for at - least three years, to give the same user the materials - specified in Subsection 6a, above, for a charge no more - than the cost of performing this distribution. - - d) If distribution of the work is made by offering access to copy - from a designated place, offer equivalent access to copy the above - specified materials from the same place. - - e) Verify that the user has already received a copy of these - materials or that you have already sent this user a copy. - - For an executable, the required form of the "work that uses the -Library" must include any data and utility programs needed for -reproducing the executable from it. However, as a special exception, -the materials to be distributed need not include anything that is -normally distributed (in either source or binary form) with the major -components (compiler, kernel, and so on) of the operating system on -which the executable runs, unless that component itself accompanies -the executable. - - It may happen that this requirement contradicts the license -restrictions of other proprietary libraries that do not normally -accompany the operating system. Such a contradiction means you cannot -use both them and the Library together in an executable that you -distribute. - - 7. You may place library facilities that are a work based on the -Library side-by-side in a single library together with other library -facilities not covered by this License, and distribute such a combined -library, provided that the separate distribution of the work based on -the Library and of the other library facilities is otherwise -permitted, and provided that you do these two things: - - a) Accompany the combined library with a copy of the same work - based on the Library, uncombined with any other library - facilities. This must be distributed under the terms of the - Sections above. - - b) Give prominent notice with the combined library of the fact - that part of it is a work based on the Library, and explaining - where to find the accompanying uncombined form of the same work. - - 8. You may not copy, modify, sublicense, link with, or distribute -the Library except as expressly provided under this License. Any -attempt otherwise to copy, modify, sublicense, link with, or -distribute the Library is void, and will automatically terminate your -rights under this License. However, parties who have received copies, -or rights, from you under this License will not have their licenses -terminated so long as such parties remain in full compliance. - - 9. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Library or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Library (or any work based on the -Library), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Library or works based on it. - - 10. Each time you redistribute the Library (or any work based on the -Library), the recipient automatically receives a license from the -original licensor to copy, distribute, link with or modify the Library -subject to these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties with -this License. - - 11. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Library at all. For example, if a patent -license would not permit royalty-free redistribution of the Library by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Library. - -If any portion of this section is held invalid or unenforceable under any -particular circumstance, the balance of the section is intended to apply, -and the section as a whole is intended to apply in other circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 12. If the distribution and/or use of the Library is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Library under this License may add -an explicit geographical distribution limitation excluding those countries, -so that distribution is permitted only in or among countries not thus -excluded. In such case, this License incorporates the limitation as if -written in the body of this License. - - 13. The Free Software Foundation may publish revised and/or new -versions of the Lesser General Public License from time to time. -Such new versions will be similar in spirit to the present version, -but may differ in detail to address new problems or concerns. - -Each version is given a distinguishing version number. If the Library -specifies a version number of this License which applies to it and -"any later version", you have the option of following the terms and -conditions either of that version or of any later version published by -the Free Software Foundation. If the Library does not specify a -license version number, you may choose any version ever published by -the Free Software Foundation. - - 14. If you wish to incorporate parts of the Library into other free -programs whose distribution conditions are incompatible with these, -write to the author to ask for permission. For software which is -copyrighted by the Free Software Foundation, write to the Free -Software Foundation; we sometimes make exceptions for this. Our -decision will be guided by the two goals of preserving the free status -of all derivatives of our free software and of promoting the sharing -and reuse of software generally. - - NO WARRANTY - - 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO -WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. -EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR -OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY -KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE -LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME -THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN -WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY -AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU -FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR -CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE -LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING -RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A -FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF -SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGES. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Libraries - - If you develop a new library, and you want it to be of the greatest -possible use to the public, we recommend making it free software that -everyone can redistribute and change. You can do so by permitting -redistribution under these terms (or, alternatively, under the terms of the -ordinary General Public License). - - To apply these terms, attach the following notices to the library. It is -safest to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least the -"copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - -Also add information on how to contact you by electronic and paper mail. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the library, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the - library `Frob' (a library for tweaking knobs) written by James Random Hacker. - - , 1 April 1990 - Ty Coon, President of Vice - -That's all there is to it! - - diff -Nru qttools-opensource-src-5.7.1/LICENSE.LGPLv3 qttools-opensource-src-5.9.1/LICENSE.LGPLv3 --- qttools-opensource-src-5.7.1/LICENSE.LGPLv3 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/LICENSE.LGPLv3 1970-01-01 00:00:00.000000000 +0000 @@ -1,175 +0,0 @@ - GNU LESSER GENERAL PUBLIC LICENSE - - The Qt Toolkit is Copyright (C) 2016 The Qt Company Ltd. - Contact: http://www.qt.io/licensing/ - - You may use, distribute and copy the Qt Toolkit under the terms of - GNU Lesser General Public License version 3, which is displayed below. - This license makes reference to the version 3 of the GNU General - Public License, which you can find in the LICENSE.GPLv3 file. - -------------------------------------------------------------------------- - - GNU LESSER GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright © 2007 Free Software Foundation, Inc. -Everyone is permitted to copy and distribute verbatim copies of this -licensedocument, but changing it is not allowed. - -This version of the GNU Lesser General Public License incorporates -the terms and conditions of version 3 of the GNU General Public -License, supplemented by the additional permissions listed below. - -0. Additional Definitions. - - As used herein, “this License” refers to version 3 of the GNU Lesser -General Public License, and the “GNU GPL” refers to version 3 of the -GNU General Public License. - - “The Library” refers to a covered work governed by this License, -other than an Application or a Combined Work as defined below. - - An “Application” is any work that makes use of an interface provided -by the Library, but which is not otherwise based on the Library. -Defining a subclass of a class defined by the Library is deemed a mode -of using an interface provided by the Library. - - A “Combined Work” is a work produced by combining or linking an -Application with the Library. The particular version of the Library -with which the Combined Work was made is also called the “Linked -Version”. - - The “Minimal Corresponding Source” for a Combined Work means the -Corresponding Source for the Combined Work, excluding any source code -for portions of the Combined Work that, considered in isolation, are -based on the Application, and not on the Linked Version. - - The “Corresponding Application Code” for a Combined Work means the -object code and/or source code for the Application, including any data -and utility programs needed for reproducing the Combined Work from the -Application, but excluding the System Libraries of the Combined Work. - -1. Exception to Section 3 of the GNU GPL. - - You may convey a covered work under sections 3 and 4 of this License -without being bound by section 3 of the GNU GPL. - -2. Conveying Modified Versions. - - If you modify a copy of the Library, and, in your modifications, a -facility refers to a function or data to be supplied by an Application -that uses the facility (other than as an argument passed when the -facility is invoked), then you may convey a copy of the modified -version: - - a) under this License, provided that you make a good faith effort - to ensure that, in the event an Application does not supply the - function or data, the facility still operates, and performs - whatever part of its purpose remains meaningful, or - - b) under the GNU GPL, with none of the additional permissions of - this License applicable to that copy. - -3. Object Code Incorporating Material from Library Header Files. - - The object code form of an Application may incorporate material from -a header file that is part of the Library. You may convey such object -code under terms of your choice, provided that, if the incorporated -material is not limited to numerical parameters, data structure -layouts and accessors, or small macros, inline functions and templates -(ten or fewer lines in length), you do both of the following: - - a) Give prominent notice with each copy of the object code that - the Library is used in it and that the Library and its use are - covered by this License. - - b) Accompany the object code with a copy of the GNU GPL and this - license document. - -4. Combined Works. - - You may convey a Combined Work under terms of your choice that, taken -together, effectively do not restrict modification of the portions of -the Library contained in the Combined Work and reverse engineering for -debugging such modifications, if you also do each of the following: - - a) Give prominent notice with each copy of the Combined Work that - the Library is used in it and that the Library and its use are - covered by this License. - - b) Accompany the Combined Work with a copy of the GNU GPL and this - license document. - - c) For a Combined Work that displays copyright notices during - execution, include the copyright notice for the Library among - these notices, as well as a reference directing the user to the - copies of the GNU GPL and this license document. - - d) Do one of the following: - - 0) Convey the Minimal Corresponding Source under the terms of - this License, and the Corresponding Application Code in a form - suitable for, and under terms that permit, the user to - recombine or relink the Application with a modified version of - the Linked Version to produce a modified Combined Work, in the - manner specified by section 6 of the GNU GPL for conveying - Corresponding Source. - - 1) Use a suitable shared library mechanism for linking with - the Library. A suitable mechanism is one that (a) uses at run - time a copy of the Library already present on the user's - computer system, and (b) will operate properly with a modified - version of the Library that is interface-compatible with the - Linked Version. - - e) Provide Installation Information, but only if you would - otherwise be required to provide such information under section 6 - of the GNU GPL, and only to the extent that such information is - necessary to install and execute a modified version of the - Combined Work produced by recombining or relinking the Application - with a modified version of the Linked Version. (If you use option - 4d0, the Installation Information must accompany the Minimal - Corresponding Source and Corresponding Application Code. If you - use option 4d1, you must provide the Installation Information in - the manner specified by section 6 of the GNU GPL for conveying - Corresponding Source.) - -5. Combined Libraries. - - You may place library facilities that are a work based on the Library -side by side in a single library together with other library -facilities that are not Applications and are not covered by this -License, and convey such a combined library under terms of your -choice, if you do both of the following: - - a) Accompany the combined library with a copy of the same work - based on the Library, uncombined with any other library - facilities, conveyed under the terms of this License. - - b) Give prominent notice with the combined library that part of - it is a work based on the Library, and explaining where to find - the accompanying uncombined form of the same work. - -6. Revised Versions of the GNU Lesser General Public License. - - The Free Software Foundation may publish revised and/or new versions -of the GNU Lesser General Public License from time to time. Such new -versions will be similar in spirit to the present version, but may -differ in detail to address new problems or concerns. - -Each version is given a distinguishing version number. If the Library -as you received it specifies that a certain numbered version of the -GNU Lesser General Public License “or any later version” applies to -it, you have the option of following the terms and conditions either -of that published version or of any later version published by the -Free Software Foundation. If the Library as you received it does not -specify a version number of the GNU Lesser General Public License, -you may choose any version of the GNU Lesser General Public License -ever published by the Free Software Foundation. - -If the Library as you received it specifies that a proxy can decide -whether future versions of the GNU Lesser General Public License shall -apply, that proxy's public statement of acceptance of any version is -permanent authorization for you to choose that version for the Library. - diff -Nru qttools-opensource-src-5.7.1/.qmake.conf qttools-opensource-src-5.9.1/.qmake.conf --- qttools-opensource-src-5.7.1/.qmake.conf 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/.qmake.conf 2017-06-23 12:03:39.000000000 +0000 @@ -1,3 +1,3 @@ load(qt_build_config) -MODULE_VERSION = 5.7.1 +MODULE_VERSION = 5.9.1 diff -Nru qttools-opensource-src-5.7.1/src/androiddeployqt/androiddeployqt.pro qttools-opensource-src-5.9.1/src/androiddeployqt/androiddeployqt.pro --- qttools-opensource-src-5.7.1/src/androiddeployqt/androiddeployqt.pro 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/androiddeployqt/androiddeployqt.pro 2017-06-23 12:03:39.000000000 +0000 @@ -8,6 +8,7 @@ windows: QMAKE_CXXFLAGS += -U__STRICT_ANSI__ DEFINES += QT_NO_CAST_FROM_ASCII QT_NO_CAST_TO_ASCII +DEFINES += QT_NO_FOREACH load(qt_app) diff -Nru qttools-opensource-src-5.7.1/src/androiddeployqt/main.cpp qttools-opensource-src-5.9.1/src/androiddeployqt/main.cpp --- qttools-opensource-src-5.7.1/src/androiddeployqt/main.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/androiddeployqt/main.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -51,8 +51,8 @@ if (!dir.exists()) return; - QFileInfoList entries = dir.entryInfoList(QDir::NoDotAndDotDot | QDir::Files | QDir::Dirs); - foreach (QFileInfo entry, entries) { + const QFileInfoList entries = dir.entryInfoList(QDir::NoDotAndDotDot | QDir::Files | QDir::Dirs); + for (const QFileInfo &entry : entries) { if (entry.isDir()) deleteRecursively(entry.absoluteFilePath()); else @@ -102,6 +102,7 @@ , internalSf(false) , sectionsOnly(false) , protectedAuthenticationPath(false) + , jarSigner(false) , gdbServer(Auto) , installApk(false) , uninstallApk(false) @@ -181,6 +182,7 @@ bool internalSf; bool sectionsOnly; bool protectedAuthenticationPath; + bool jarSigner; // Gdbserver TriState gdbServer; @@ -281,11 +283,11 @@ if (options.verbose) fprintf(stdout, "Delete missing files %s %s\n", qPrintable(srcDir.absolutePath()), qPrintable(dstDir.absolutePath())); - QFileInfoList srcEntries = srcDir.entryInfoList(QDir::NoDotAndDotDot | QDir::Files | QDir::Dirs); - QFileInfoList dstEntries = dstDir.entryInfoList(QDir::NoDotAndDotDot | QDir::Files | QDir::Dirs); - foreach (const QFileInfo &dst, dstEntries) { + const QFileInfoList srcEntries = srcDir.entryInfoList(QDir::NoDotAndDotDot | QDir::Files | QDir::Dirs); + const QFileInfoList dstEntries = dstDir.entryInfoList(QDir::NoDotAndDotDot | QDir::Files | QDir::Dirs); + for (const QFileInfo &dst : dstEntries) { bool found = false; - foreach (const QFileInfo &src, srcEntries) + for (const QFileInfo &src : srcEntries) if (dst.fileName() == src.fileName()) { if (dst.isDir()) deleteMissingFiles(options, src.absoluteFilePath(), dst.absoluteFilePath()); @@ -446,6 +448,8 @@ options.sectionsOnly = true; } else if (argument.compare(QLatin1String("--protected"), Qt::CaseInsensitive) == 0) { options.protectedAuthenticationPath = true; + } else if (argument.compare(QLatin1String("--jarsigner"), Qt::CaseInsensitive) == 0) { + options.jarSigner = true; } else if (argument.compare(QLatin1String("--no-generated-assets-cache"), Qt::CaseInsensitive) == 0) { options.generateAssetsFileList = false; } @@ -519,6 +523,8 @@ " --internalsf: Include the .SF file inside the signature block.\n" " --sectionsonly: Don't compute hash of entire manifest.\n" " --protected: Keystore has protected authentication path.\n" + " --jarsigner: Force jarsigner usage, otherwise apksigner will be\n" + " used if available.\n" " --gdbserver: Adds the gdbserver to the package. By default the gdbserver\n" " is bundled for debug pacakges.\n" " --no-gdbserver: Prevents the gdbserver from being added to the package\n" @@ -768,8 +774,8 @@ { const QJsonValue deploymentDependencies = jsonObject.value(QStringLiteral("deployment-dependencies")); if (!deploymentDependencies.isUndefined()) { - QStringList dependencies = deploymentDependencies.toString().split(QLatin1Char(',')); - foreach (QString dependency, dependencies) { + const auto dependencies = deploymentDependencies.toString().splitRef(QLatin1Char(',')); + for (const QStringRef &dependency : dependencies) { QString path = options->qtInstallDirectory + QLatin1Char('/') + dependency; if (QFileInfo(path).isDir()) { QDirIterator iterator(path, QDirIterator::Subdirectories); @@ -782,7 +788,7 @@ } } } else { - options->qtDependencies.append(QtDependency(dependency, path)); + options->qtDependencies.append(QtDependency(dependency.toString(), path)); } } } @@ -876,8 +882,8 @@ bool copyFiles(const QDir &sourceDirectory, const QDir &destinationDirectory, bool verbose, bool forceOverwrite = false) { - QFileInfoList entries = sourceDirectory.entryInfoList(QDir::NoDotAndDotDot | QDir::Files | QDir::Dirs); - foreach (QFileInfo entry, entries) { + const QFileInfoList entries = sourceDirectory.entryInfoList(QDir::NoDotAndDotDot | QDir::Files | QDir::Dirs); + for (const QFileInfo &entry : entries) { if (entry.isDir()) { QDir dir(entry.absoluteFilePath()); if (!destinationDirectory.mkpath(dir.dirName())) { @@ -899,7 +905,8 @@ void cleanTopFolders(const Options &options, const QDir &srcDir, const QString &dstDir) { - foreach (const QFileInfo &dir, srcDir.entryInfoList(QDir::NoDotAndDotDot | QDir::Dirs)) { + const auto dirs = srcDir.entryInfoList(QDir::NoDotAndDotDot | QDir::Dirs); + for (const QFileInfo &dir : dirs) { if (dir.fileName() != QLatin1String("libs")) deleteMissingFiles(options, dir.absoluteFilePath(), dstDir + dir.fileName()); } @@ -933,7 +940,7 @@ bool copyGradleTemplate(const Options &options) { - QDir sourceDirectory(options.sdkPath + QLatin1String("/tools/templates/gradle/wrapper")); + QDir sourceDirectory(options.qtInstallDirectory + QLatin1String("/src/3rdparty/gradle")); if (!sourceDirectory.exists()) { fprintf(stderr, "Cannot find template directory %s\n", qPrintable(sourceDirectory.absolutePath())); return false; @@ -990,7 +997,7 @@ if (options.verbose) fprintf(stdout, "Copying %d external libraries to package.\n", options.extraLibs.size()); - foreach (QString extraLib, options.extraLibs) { + for (const QString &extraLib : options.extraLibs) { QFileInfo extraLibInfo(extraLib); if (!extraLibInfo.exists()) { fprintf(stderr, "External library %s does not exist!\n", qPrintable(extraLib)); @@ -1018,14 +1025,17 @@ QStringList allFilesInside(const QDir& current, const QDir& rootDir) { - QStringList files; - foreach (QString dir, current.entryList(QDir::Dirs|QDir::NoDotAndDotDot)) { - files += allFilesInside(QDir(current.filePath(dir)), rootDir); + QStringList result; + const auto dirs = current.entryList(QDir::Dirs|QDir::NoDotAndDotDot); + const auto files = current.entryList(QDir::Files); + result.reserve(dirs.size() + files.size()); + for (const QString &dir : dirs) { + result += allFilesInside(QDir(current.filePath(dir)), rootDir); } - foreach (QString file, current.entryList(QDir::Files)) { - files += rootDir.relativeFilePath(current.filePath(file)); + for (const QString &file : files) { + result += rootDir.relativeFilePath(current.filePath(file)); } - return files; + return result; } bool copyAndroidExtraResources(const Options &options) @@ -1036,7 +1046,7 @@ if (options.verbose) fprintf(stdout, "Copying %d external resources to package.\n", options.extraPlugins.size()); - foreach (QString extraResource, options.extraPlugins) { + for (const QString &extraResource : options.extraPlugins) { QFileInfo extraResourceInfo(extraResource); if (!extraResourceInfo.exists() || !extraResourceInfo.isDir()) { fprintf(stderr, "External resource %s does not exist or not a correct directory!\n", qPrintable(extraResource)); @@ -1047,8 +1057,8 @@ QString assetsDir = options.outputDirectory + QStringLiteral("/assets/") + resourceDir.dirName() + QLatin1Char('/'); QString libsDir = options.outputDirectory + QStringLiteral("/libs/") + options.architecture + QLatin1Char('/'); - QStringList files = allFilesInside(resourceDir, resourceDir); - foreach (const QString &resourceFile, files) { + const QStringList files = allFilesInside(resourceDir, resourceDir); + for (const QString &resourceFile : files) { QString originFile(resourceDir.filePath(resourceFile)); QString destinationFile; if (!resourceFile.endsWith(QLatin1String(".so"))) { @@ -1125,7 +1135,7 @@ QString qtLibs = QLatin1String("gnustl_shared\n"); QString bundledInLibs; QString bundledInAssets; - foreach (Options::BundledFile bundledFile, options.bundledFiles) { + for (const Options::BundledFile &bundledFile : options.bundledFiles) { if (bundledFile.second.startsWith(QLatin1String("lib/"))) { QString s = bundledFile.second.mid(sizeof("lib/lib") - 1); s.chop(sizeof(".so") - 1); @@ -1142,10 +1152,10 @@ } if (!options.extraPlugins.isEmpty()) { - foreach (QString extraRes, options.extraPlugins) { + for (const QString &extraRes : options.extraPlugins) { QDir resourceDir(extraRes); - QStringList files = allFilesInside(resourceDir, resourceDir); - foreach (const QString &file, files) { + const QStringList files = allFilesInside(resourceDir, resourceDir); + for (const QString &file : files) { QString destinationPath = resourceDir.dirName() + QLatin1Char('/') + file; if (!file.endsWith(QLatin1String(".so"))) { bundledInAssets += QStringLiteral("%1:%1\n") @@ -1169,7 +1179,7 @@ QString extraLibs; if (!options.extraLibs.isEmpty()) { - foreach (QString extraLib, options.extraLibs) { + for (const QString extraLib : options.extraLibs) { QFileInfo extraLibInfo(extraLib); QString name = extraLibInfo.fileName().mid(sizeof("lib") - 1); name.chop(sizeof(".so") - 1); @@ -1254,7 +1264,7 @@ // If .pro file overrides dependency detection, we need to see which platform plugin they picked if (localLibs.isEmpty()) { QString plugin; - foreach (QtDependency qtDependency, options.qtDependencies) { + for (const QtDependency &qtDependency : qAsConst(options.qtDependencies)) { if (qtDependency.relativePath.endsWith(QLatin1String("libqtforandroid.so")) || qtDependency.relativePath.endsWith(QLatin1String("libqtforandroidGL.so"))) { if (!plugin.isEmpty() && plugin != qtDependency.relativePath) { @@ -1277,7 +1287,7 @@ } bool usesGL = false; - foreach (QtDependency qtDependency, options.qtDependencies) { + for (const QtDependency &qtDependency : qAsConst(options.qtDependencies)) { if (qtDependency.relativePath.endsWith(QLatin1String("libQt5OpenGL.so")) || qtDependency.relativePath.endsWith(QLatin1String("libQt5Quick.so"))) { usesGL = true; @@ -1298,12 +1308,12 @@ = (options.deploymentMechanism != Options::Ministro) ? QString::fromLatin1("1") : QString::fromLatin1("0"); QString permissions; - foreach (QString permission, options.permissions) + for (const QString &permission : qAsConst(options.permissions)) permissions += QString::fromLatin1(" \n").arg(permission); replacements[QLatin1String("")] = permissions; QString features; - foreach (QString feature, options.features) + for (const QString &feature : qAsConst(options.features)) features += QStringLiteral(" \n").arg(feature); if (usesGL) features += QStringLiteral(" "); @@ -1387,9 +1397,9 @@ QList ret; QDir dir(info.filePath()); - QStringList entries = dir.entryList(QDir::Files | QDir::Dirs | QDir::NoDotAndDotDot); + const QStringList entries = dir.entryList(QDir::Files | QDir::Dirs | QDir::NoDotAndDotDot); - foreach (QString entry, entries) { + for (const QString &entry : entries) { QString s = info.absoluteFilePath() + QLatin1Char('/') + entry; ret += findFilesRecursively(options, s, rootPath); } @@ -1440,8 +1450,8 @@ if (!options->rootPath.isEmpty() && (file == QLatin1String("qml") || file == QLatin1String("qml/"))) continue; - QList fileNames = findFilesRecursively(*options, file); - foreach (QtDependency fileName, fileNames) { + const QList fileNames = findFilesRecursively(*options, file); + for (const QtDependency &fileName : fileNames) { if (usedDependencies->contains(fileName.absolutePath)) continue; @@ -1561,16 +1571,16 @@ QSet *remainingDependencies) { // Get dependencies on libraries in $QTDIR/lib - QStringList dependencies = getQtLibsFromElf(*options, fileName); + const QStringList dependencies = getQtLibsFromElf(*options, fileName); if (options->verbose) { fprintf(stdout, "Reading dependencies from %s\n", qPrintable(fileName)); - foreach (QString dep, dependencies) + for (const QString &dep : dependencies) fprintf(stdout, " %s\n", qPrintable(dep)); } // Recursively add dependencies from ELF and supplementary XML information QList dependenciesToCheck; - foreach (QString dependency, dependencies) { + for (const QString &dependency : dependencies) { if (usedDependencies->contains(dependency)) continue; @@ -1589,7 +1599,7 @@ dependenciesToCheck.append(dependency); } - foreach (QString dependency, dependenciesToCheck) { + for (const QString &dependency : qAsConst(dependenciesToCheck)) { QString qtBaseName = dependency.mid(sizeof("lib/lib") - 1); qtBaseName = qtBaseName.left(qtBaseName.size() - (sizeof(".so") - 1)); if (!readAndroidDependencyXml(options, qtBaseName, usedDependencies, remainingDependencies)) { @@ -1629,7 +1639,7 @@ QStringList importPaths; importPaths += shellQuote(options->qtInstallDirectory + QLatin1String("/qml")); importPaths += rootPath; - foreach (QString qmlImportPath, options->qmlImportPaths) + for (const QString &qmlImportPath : qAsConst(options->qmlImportPaths)) importPaths += shellQuote(qmlImportPath); qmlImportScanner += QString::fromLatin1(" -rootPath %1 -importPath %2") @@ -1690,7 +1700,7 @@ } QString importPathOfThisImport; - foreach (QString importPath, importPaths) { + for (const QString &importPath : qAsConst(importPaths)) { #if defined(Q_OS_WIN32) Qt::CaseSensitivity caseSensitivity = Qt::CaseInsensitive; #else @@ -1711,8 +1721,8 @@ QDir dir(importPathOfThisImport); importPathOfThisImport = dir.absolutePath() + QLatin1Char('/'); - QList fileNames = findFilesRecursively(*options, info, importPathOfThisImport); - foreach (QtDependency fileName, fileNames) { + const QList fileNames = findFilesRecursively(*options, info, importPathOfThisImport); + for (QtDependency fileName : fileNames) { if (usedDependencies->contains(fileName.absolutePath)) continue; @@ -1844,8 +1854,8 @@ QString libraryPath = options.outputDirectory + QLatin1String("/libs/") + options.architecture; - QStringList libraries = QDir(libraryPath).entryList(QDir::Files); - foreach (QString library, libraries) { + const QStringList libraries = QDir(libraryPath).entryList(QDir::Files); + for (const QString &library : libraries) { if (library.endsWith(QLatin1String(".so"))) { if (!stripFile(options, libraryPath + QLatin1Char('/') + library)) return false; @@ -1960,7 +1970,7 @@ if (!ok) continue; - options->remoteModificationDate = QDateTime::fromTime_t(time); + options->remoteModificationDate = QDateTime::fromSecsSinceEpoch(time); break; } @@ -1984,7 +1994,8 @@ return true; bool ret = true; - foreach (const QString &lib, getQtLibsFromElf(*options, file)) { + const auto libs = getQtLibsFromElf(*options, file); + for (const QString &lib : libs) { if (!options->qtDependencies.contains(QtDependency(lib, options->qtInstallDirectory + QLatin1Char('/') + lib))) { ret = false; unmetDependencies->append(lib); @@ -2006,7 +2017,7 @@ QFileInfo fileInfo(options->qtInstallDirectory + QLatin1Char('/') + qtDependency); // Make sure precision is the same as what we get from Android - QDateTime sourceModified = QDateTime::fromTime_t(fileInfo.lastModified().toTime_t()); + QDateTime sourceModified = QDateTime::fromSecsSinceEpoch(fileInfo.lastModified().toSecsSinceEpoch()); if (options->remoteModificationDate.isNull() || options->remoteModificationDate < sourceModified) { if (!copyFileIfNewer(options->qtInstallDirectory + QLatin1Char('/') + qtDependency, @@ -2062,7 +2073,7 @@ } } - foreach (QtDependency qtDependency, options->qtDependencies) + for (const QtDependency &qtDependency : qAsConst(options->qtDependencies)) options->bundledFiles += qMakePair(qtDependency.relativePath, qtDependency.relativePath); } else { if (!options->build) @@ -2073,7 +2084,7 @@ // Copy other Qt dependencies QString libDestinationDirectory = libsDirectory + options->architecture + QLatin1Char('/'); QString assetsDestinationDirectory = QLatin1String("assets/--Added-by-androiddeployqt--/"); - foreach (QtDependency qtDependency, options->qtDependencies) { + for (const QtDependency &qtDependency : qAsConst(options->qtDependencies)) { QString sourceFileName = qtDependency.absolutePath; QString destinationFileName; @@ -2183,8 +2194,8 @@ pclose(androidToolCommand); // If the project has subprojects inside the current folder, we need to also run android update on these. - QStringList libraryProjects = getLibraryProjectsInOutputFolder(options); - foreach (QString libraryProject, libraryProjects) { + const QStringList libraryProjects = getLibraryProjectsInOutputFolder(options); + for (const QString &libraryProject : libraryProjects) { if (options.verbose) fprintf(stdout, "Updating subproject %s\n", qPrintable(libraryProject)); @@ -2217,8 +2228,8 @@ QLatin1Char separator(':'); #endif - QStringList paths = path.split(separator); - foreach (QString path, paths) { + const QStringList paths = path.split(separator); + for (const QString &path : paths) { QFileInfo fileInfo(path + QLatin1Char('/') + fileName); if (fileInfo.exists() && fileInfo.isFile() && fileInfo.isExecutable()) return path + QLatin1Char('/') + fileName; @@ -2294,7 +2305,8 @@ if (!file.open(QIODevice::ReadOnly)) return properties; - foreach (const QByteArray &line, file.readAll().split('\n')) { + const auto lines = file.readAll().split('\n'); + for (const QByteArray &line : lines) { if (line.trimmed().startsWith('#')) continue; @@ -2341,18 +2353,6 @@ return true; } -bool updateGradleDistributionUrl(const QString &path) { - // check if we are using gradle 2.x - GradleProperties gradleProperties = readGradleProperties(path); - QString distributionUrl = QString::fromLocal8Bit(gradleProperties["distributionUrl"]); - QRegExp re(QLatin1String(".*services.gradle.org/distributions/gradle-2..*.zip")); - if (!re.exactMatch(distributionUrl)) { - gradleProperties["distributionUrl"] = "https\\://services.gradle.org/distributions/gradle-2.2.1-all.zip"; - return mergeGradleProperties(path, gradleProperties); - } - return true; -} - bool buildGradleProject(const Options &options) { GradleProperties localProperties; @@ -2372,9 +2372,6 @@ if (!mergeGradleProperties(gradlePropertiesPath, gradleProperties)) return false; - if (!updateGradleDistributionUrl(options.outputDirectory + QLatin1String("gradle/wrapper/gradle-wrapper.properties"))) - return false; - #if defined(Q_OS_WIN32) QString gradlePath(options.outputDirectory + QLatin1String("gradlew.bat")); #else @@ -2554,7 +2551,7 @@ return true; } -bool signPackage(const Options &options) +bool jarSignerSignPackage(const Options &options) { if (options.verbose) fprintf(stdout, "Signing Android package.\n"); @@ -2680,6 +2677,108 @@ return QFile::remove(apkPath(options, UnsignedAPK)); } +bool signPackage(const Options &options) +{ + QString apksignerTool = options.sdkPath + QLatin1String("/build-tools/") + options.sdkBuildToolsVersion + QLatin1String("/apksigner"); +#if defined(Q_OS_WIN32) + apksignerTool += QLatin1String(".bat"); +#endif + + if (options.jarSigner || !QFile::exists(apksignerTool)) + return jarSignerSignPackage(options); + + // APKs signed with apksigner must not be changed after they're signed, therefore we need to zipalign it before we sign it. + + QString zipAlignTool = options.sdkPath + QLatin1String("/tools/zipalign"); +#if defined(Q_OS_WIN32) + zipAlignTool += QLatin1String(".exe"); +#endif + + if (!QFile::exists(zipAlignTool)) { + zipAlignTool = options.sdkPath + QLatin1String("/build-tools/") + options.sdkBuildToolsVersion + QLatin1String("/zipalign"); +#if defined(Q_OS_WIN32) + zipAlignTool += QLatin1String(".exe"); +#endif + if (!QFile::exists(zipAlignTool)) { + fprintf(stderr, "zipalign tool not found: %s\n", qPrintable(zipAlignTool)); + return false; + } + } + + zipAlignTool = QString::fromLatin1("%1%2 -f 4 %3 %4") + .arg(shellQuote(zipAlignTool)) + .arg(options.verbose ? QString::fromLatin1(" -v") : QString()) + .arg(apkPath(options, UnsignedAPK)) + .arg(apkPath(options, SignedAPK)); + + FILE *zipAlignCommand = openProcess(zipAlignTool); + if (zipAlignCommand == 0) { + fprintf(stderr, "Couldn't run zipalign.\n"); + return false; + } + + char buffer[512]; + while (fgets(buffer, sizeof(buffer), zipAlignCommand) != 0) + fprintf(stdout, "%s", buffer); + + int errorCode = pclose(zipAlignCommand); + if (errorCode != 0) { + fprintf(stderr, "zipalign command failed.\n"); + if (!options.verbose) + fprintf(stderr, " -- Run with --verbose for more information.\n"); + return false; + } + + QString apkSignerCommandLine = QString::fromLatin1("%1 sign --ks %2") + .arg(shellQuote(apksignerTool)).arg(shellQuote(options.keyStore)); + + if (!options.keyStorePassword.isEmpty()) + apkSignerCommandLine += QString::fromLatin1(" --ks-pass pass:%1").arg(shellQuote(options.keyStorePassword)); + + if (!options.keyStoreAlias.isEmpty()) + apkSignerCommandLine += QString::fromLatin1(" --ks-key-alias %1").arg(shellQuote(options.keyStoreAlias)); + + if (!options.keyPass.isEmpty()) + apkSignerCommandLine += QString::fromLatin1(" --key-pass pass:%1").arg(shellQuote(options.keyPass)); + + if (options.verbose) + apkSignerCommandLine += QLatin1String(" --verbose"); + + apkSignerCommandLine += QString::fromLatin1(" %1") + .arg(apkPath(options, SignedAPK)); + + auto apkSignerRunner = [&] { + FILE *apkSignerCommand = openProcess(apkSignerCommandLine); + if (apkSignerCommand == 0) { + fprintf(stderr, "Couldn't run apksigner.\n"); + return false; + } + + char buffer[512]; + while (fgets(buffer, sizeof(buffer), apkSignerCommand) != 0) + fprintf(stdout, "%s", buffer); + + errorCode = pclose(apkSignerCommand); + if (errorCode != 0) { + fprintf(stderr, "apksigner command failed.\n"); + if (!options.verbose) + fprintf(stderr, " -- Run with --verbose for more information.\n"); + return false; + } + return true; + }; + + // Sign the package + if (!apkSignerRunner()) + return false; + + apkSignerCommandLine = QString::fromLatin1("%1 verify --verbose %2") + .arg(shellQuote(apksignerTool)).arg(apkPath(options, SignedAPK)); + + // Verify the package and remove the unsigned apk + return apkSignerRunner() && QFile::remove(apkPath(options, UnsignedAPK)); +} + bool copyGdbServer(const Options &options) { if (options.verbose) @@ -2713,6 +2812,19 @@ return false; } + QString addedByAndroidDeployQtPath = options.outputDirectory + QLatin1String("/assets/--Added-by-androiddeployqt--/"); + if (!QDir().mkpath(addedByAndroidDeployQtPath)) { + fprintf(stderr, "Failed to create directory '%s'", qPrintable(addedByAndroidDeployQtPath)); + return false; + } + QFile f(addedByAndroidDeployQtPath + QLatin1String("debugger.command")); + if (!f.open(QIODevice::WriteOnly)) { + fprintf(stderr, "Failed to create directory '%s'", qPrintable(addedByAndroidDeployQtPath)); + return false; + } + f.write("lib/libgdbserver.so --multi +"); + f.close(); + return true; } @@ -2777,11 +2889,10 @@ QDataStream stream(&file); stream.setVersion(QDataStream::Qt_5_3); - QList directories = directoryContents.keys(); - foreach (const QString &directory, directories) { - QStringList entryList = directoryContents.value(directory); - stream << directory << entryList.size(); - foreach (const QString &entry, entryList) + for (auto it = directoryContents.cbegin(), end = directoryContents.cend(); it != end; ++it) { + const QStringList &entryList = it.value(); + stream << it.key() << entryList.size(); + for (const QString &entry : entryList) stream << entry; } } else { diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/APACHE.license qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/APACHE.license --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/APACHE.license 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/APACHE.license 1970-01-01 00:00:00.000000000 +0000 @@ -1,201 +0,0 @@ - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/AUTHORS qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/AUTHORS --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/AUTHORS 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/AUTHORS 1970-01-01 00:00:00.000000000 +0000 @@ -1,22 +0,0 @@ -As with most development projects, contributions come from many people and in -many forms. The CLucene project would like to thank it's many contributors. -Omissions are merely accidental, please e-mail ustramooner@users.sourceforge.net -if you have been left out or a contribution is not mentioned. - -CLucene was originally ported to C++ by Ben van Klinken (ustramooner@users.sourceforge.net) -from Doug Cutting's popular java search engine, Lucene (see http://lucene.apache.org). - -Here is a list of contributors. Please send me an email at ustramooner@users.sourceforge.net -if I have left you out. - -Doug Cutting cutting@users.sourceforge.net -John Wheeler j_wheeler@users.sourceforge.net -Robert G. Ristroph rgristroph@users.sourceforge.net -David Rushby woodsplitter@users.sourceforge.net -Jimmy Pritts jpritts@sdf.lonestar.org -Peter Edwards peter@dragonstaff.co.uk -Jorge Sabater Redondo jsabater@elderecho.com -Daniel Glassey danglassey@ntlworld.com -Peter Gladkikh batyi@mail.ru -Pedja amigo@max3d.com -Peter Hodges hodges.peter@gmail.com diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/COPYING qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/COPYING --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/COPYING 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/COPYING 1970-01-01 00:00:00.000000000 +0000 @@ -1,30 +0,0 @@ -License - -The CLucene Core Library uses a dual license strategy for the source code. -These licenses are the GNU Lesser General Public License (LGPL) and the Apache -License (Version 2.0). Users can choose the license they wish to distribute -their software under. This means that you do not need to abide by *both* -licenses, but rather than you can choose the license which most suits your -needs. - -To rephrase this and to make it perfectly clear: -CLucene is distributed under the GNU Lesser General Public License (LGPL) - *or* -the Apache License, Version 2.0 - -However, we are an open source project, and we encourage users to use the LGPL -license and participate fully in the free software community. Dual licensing -of the CLucene source code provides open and free access to the technology both -for the GPL community and for other developers or companies that cannot use the -GPL. - -You can freely modify, extend, and improve the CLucene source code. The only -question is whether or not you must provide the source code and contribute -modifications to the community. The GNU and Apache licenses allow different -ranges of flexibility in this regard, but in the end, regardless of the license -used, we highly recommend that you submit any bugs, incompatibilities or -added features. - -Note that this same license does *not* apply to the CLucene Contributions -package. You should read the COPYING file in that directory or package for -more information. \ No newline at end of file diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/LGPL.license qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/LGPL.license --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/LGPL.license 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/LGPL.license 1970-01-01 00:00:00.000000000 +0000 @@ -1,475 +0,0 @@ - GNU LESSER GENERAL PUBLIC LICENSE - Version 2.1, February 1999 - - Copyright (C) 1991, 1999 Free Software Foundation, Inc. - 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - -[This is the first released version of the Lesser GPL. It also counts - as the successor of the GNU Library Public License, version 2, hence - the version number 2.1.] - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -Licenses are intended to guarantee your freedom to share and change -free software--to make sure the software is free for all its users. - - This license, the Lesser General Public License, applies to some -specially designated software packages--typically libraries--of the -Free Software Foundation and other authors who decide to use it. You -can use it too, but we suggest you first think carefully about whether -this license or the ordinary General Public License is the better -strategy to use in any particular case, based on the explanations below. - - When we speak of free software, we are referring to freedom of use, -not price. Our General Public Licenses are designed to make sure that -you have the freedom to distribute copies of free software (and charge -for this service if you wish); that you receive source code or can get -it if you want it; that you can change the software and use pieces of -it in new free programs; and that you are informed that you can do -these things. - - To protect your rights, we need to make restrictions that forbid -distributors to deny you these rights or to ask you to surrender these -rights. These restrictions translate to certain responsibilities for -you if you distribute copies of the library or if you modify it. - - For example, if you distribute copies of the library, whether gratis -or for a fee, you must give the recipients all the rights that we gave -you. You must make sure that they, too, receive or can get the source -code. If you link other code with the library, you must provide -complete object files to the recipients, so that they can relink them -with the library after making changes to the library and recompiling -it. And you must show them these terms so they know their rights. - - We protect your rights with a two-step method: (1) we copyright the -library, and (2) we offer you this license, which gives you legal -permission to copy, distribute and/or modify the library. - - To protect each distributor, we want to make it very clear that -there is no warranty for the free library. Also, if the library is -modified by someone else and passed on, the recipients should know -that what they have is not the original version, so that the original -author's reputation will not be affected by problems that might be -introduced by others. - -------------------------------------------------------------------------------- - - Finally, software patents pose a constant threat to the existence of -any free program. We wish to make sure that a company cannot -effectively restrict the users of a free program by obtaining a -restrictive license from a patent holder. Therefore, we insist that -any patent license obtained for a version of the library must be -consistent with the full freedom of use specified in this license. - - Most GNU software, including some libraries, is covered by the -ordinary GNU General Public License. This license, the GNU Lesser -General Public License, applies to certain designated libraries, and -is quite different from the ordinary General Public License. We use -this license for certain libraries in order to permit linking those -libraries into non-free programs. - - When a program is linked with a library, whether statically or using -a shared library, the combination of the two is legally speaking a -combined work, a derivative of the original library. The ordinary -General Public License therefore permits such linking only if the -entire combination fits its criteria of freedom. The Lesser General -Public License permits more lax criteria for linking other code with -the library. - - We call this license the "Lesser" General Public License because it -does Less to protect the user's freedom than the ordinary General -Public License. It also provides other free software developers Less -of an advantage over competing non-free programs. These disadvantages -are the reason we use the ordinary General Public License for many -libraries. However, the Lesser license provides advantages in certain -special circumstances. - - For example, on rare occasions, there may be a special need to -encourage the widest possible use of a certain library, so that it becomes -a de-facto standard. To achieve this, non-free programs must be -allowed to use the library. A more frequent case is that a free -library does the same job as widely used non-free libraries. In this -case, there is little to gain by limiting the free library to free -software only, so we use the Lesser General Public License. - - In other cases, permission to use a particular library in non-free -programs enables a greater number of people to use a large body of -free software. For example, permission to use the GNU C Library in -non-free programs enables many more people to use the whole GNU -operating system, as well as its variant, the GNU/Linux operating -system. - - Although the Lesser General Public License is Less protective of the -users' freedom, it does ensure that the user of a program that is -linked with the Library has the freedom and the wherewithal to run -that program using a modified version of the Library. - - The precise terms and conditions for copying, distribution and -modification follow. Pay close attention to the difference between a -"work based on the library" and a "work that uses the library". The -former contains code derived from the library, whereas the latter must -be combined with the library in order to run. - -------------------------------------------------------------------------------- - - GNU LESSER GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License Agreement applies to any software library or other -program which contains a notice placed by the copyright holder or -other authorized party saying it may be distributed under the terms of -this Lesser General Public License (also called "this License"). -Each licensee is addressed as "you". - - A "library" means a collection of software functions and/or data -prepared so as to be conveniently linked with application programs -(which use some of those functions and data) to form executables. - - The "Library", below, refers to any such software library or work -which has been distributed under these terms. A "work based on the -Library" means either the Library or any derivative work under -copyright law: that is to say, a work containing the Library or a -portion of it, either verbatim or with modifications and/or translated -straightforwardly into another language. (Hereinafter, translation is -included without limitation in the term "modification".) - - "Source code" for a work means the preferred form of the work for -making modifications to it. For a library, complete source code means -all the source code for all modules it contains, plus any associated -interface definition files, plus the scripts used to control compilation -and installation of the library. - - Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running a program using the Library is not restricted, and output from -such a program is covered only if its contents constitute a work based -on the Library (independent of the use of the Library in a tool for -writing it). Whether that is true depends on what the Library does -and what the program that uses the Library does. - - 1. You may copy and distribute verbatim copies of the Library's -complete source code as you receive it, in any medium, provided that -you conspicuously and appropriately publish on each copy an -appropriate copyright notice and disclaimer of warranty; keep intact -all the notices that refer to this License and to the absence of any -warranty; and distribute a copy of this License along with the -Library. - - You may charge a fee for the physical act of transferring a copy, -and you may at your option offer warranty protection in exchange for a -fee. - -------------------------------------------------------------------------------- - - 2. You may modify your copy or copies of the Library or any portion -of it, thus forming a work based on the Library, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) The modified work must itself be a software library. - - b) You must cause the files modified to carry prominent notices - stating that you changed the files and the date of any change. - - c) You must cause the whole of the work to be licensed at no - charge to all third parties under the terms of this License. - - d) If a facility in the modified Library refers to a function or a - table of data to be supplied by an application program that uses - the facility, other than as an argument passed when the facility - is invoked, then you must make a good faith effort to ensure that, - in the event an application does not supply such function or - table, the facility still operates, and performs whatever part of - its purpose remains meaningful. - - (For example, a function in a library to compute square roots has - a purpose that is entirely well-defined independent of the - application. Therefore, Subsection 2d requires that any - application-supplied function or table used by this function must - be optional: if the application does not supply it, the square - root function must still compute square roots.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Library, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Library, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote -it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Library. - -In addition, mere aggregation of another work not based on the Library -with the Library (or with a work based on the Library) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may opt to apply the terms of the ordinary GNU General Public -License instead of this License to a given copy of the Library. To do -this, you must alter all the notices that refer to this License, so -that they refer to the ordinary GNU General Public License, version 2, -instead of to this License. (If a newer version than version 2 of the -ordinary GNU General Public License has appeared, then you can specify -that version instead if you wish.) Do not make any other change in -these notices. - -------------------------------------------------------------------------------- - - Once this change is made in a given copy, it is irreversible for -that copy, so the ordinary GNU General Public License applies to all -subsequent copies and derivative works made from that copy. - - This option is useful when you wish to copy part of the code of -the Library into a program that is not a library. - - 4. You may copy and distribute the Library (or a portion or -derivative of it, under Section 2) in object code or executable form -under the terms of Sections 1 and 2 above provided that you accompany -it with the complete corresponding machine-readable source code, which -must be distributed under the terms of Sections 1 and 2 above on a -medium customarily used for software interchange. - - If distribution of object code is made by offering access to copy -from a designated place, then offering equivalent access to copy the -source code from the same place satisfies the requirement to -distribute the source code, even though third parties are not -compelled to copy the source along with the object code. - - 5. A program that contains no derivative of any portion of the -Library, but is designed to work with the Library by being compiled or -linked with it, is called a "work that uses the Library". Such a -work, in isolation, is not a derivative work of the Library, and -therefore falls outside the scope of this License. - - However, linking a "work that uses the Library" with the Library -creates an executable that is a derivative of the Library (because it -contains portions of the Library), rather than a "work that uses the -library". The executable is therefore covered by this License. -Section 6 states terms for distribution of such executables. - - When a "work that uses the Library" uses material from a header file -that is part of the Library, the object code for the work may be a -derivative work of the Library even though the source code is not. -Whether this is true is especially significant if the work can be -linked without the Library, or if the work is itself a library. The -threshold for this to be true is not precisely defined by law. - - If such an object file uses only numerical parameters, data -structure layouts and accessors, and small macros and small inline -functions (ten lines or less in length), then the use of the object -file is unrestricted, regardless of whether it is legally a derivative -work. (Executables containing this object code plus portions of the -Library will still fall under Section 6.) - - Otherwise, if the work is a derivative of the Library, you may -distribute the object code for the work under the terms of Section 6. -Any executables containing that work also fall under Section 6, -whether or not they are linked directly with the Library itself. - -------------------------------------------------------------------------------- - - 6. As an exception to the Sections above, you may also combine or -link a "work that uses the Library" with the Library to produce a -work containing portions of the Library, and distribute that work -under terms of your choice, provided that the terms permit -modification of the work for the customer's own use and reverse -engineering for debugging such modifications. - - You must give prominent notice with each copy of the work that the -Library is used in it and that the Library and its use are covered by -this License. You must supply a copy of this License. If the work -during execution displays copyright notices, you must include the -copyright notice for the Library among them, as well as a reference -directing the user to the copy of this License. Also, you must do one -of these things: - - a) Accompany the work with the complete corresponding - machine-readable source code for the Library including whatever - changes were used in the work (which must be distributed under - Sections 1 and 2 above); and, if the work is an executable linked - with the Library, with the complete machine-readable "work that - uses the Library", as object code and/or source code, so that the - user can modify the Library and then relink to produce a modified - executable containing the modified Library. (It is understood - that the user who changes the contents of definitions files in the - Library will not necessarily be able to recompile the application - to use the modified definitions.) - - b) Use a suitable shared library mechanism for linking with the - Library. A suitable mechanism is one that (1) uses at run time a - copy of the library already present on the user's computer system, - rather than copying library functions into the executable, and (2) - will operate properly with a modified version of the library, if - the user installs one, as long as the modified version is - interface-compatible with the version that the work was made with. - - c) Accompany the work with a written offer, valid for at - least three years, to give the same user the materials - specified in Subsection 6a, above, for a charge no more - than the cost of performing this distribution. - - d) If distribution of the work is made by offering access to copy - from a designated place, offer equivalent access to copy the above - specified materials from the same place. - - e) Verify that the user has already received a copy of these - materials or that you have already sent this user a copy. - - For an executable, the required form of the "work that uses the -Library" must include any data and utility programs needed for -reproducing the executable from it. However, as a special exception, -the materials to be distributed need not include anything that is -normally distributed (in either source or binary form) with the major -components (compiler, kernel, and so on) of the operating system on -which the executable runs, unless that component itself accompanies -the executable. - - It may happen that this requirement contradicts the license -restrictions of other proprietary libraries that do not normally -accompany the operating system. Such a contradiction means you cannot -use both them and the Library together in an executable that you -distribute. - -------------------------------------------------------------------------------- - - 7. You may place library facilities that are a work based on the -Library side-by-side in a single library together with other library -facilities not covered by this License, and distribute such a combined -library, provided that the separate distribution of the work based on -the Library and of the other library facilities is otherwise -permitted, and provided that you do these two things: - - a) Accompany the combined library with a copy of the same work - based on the Library, uncombined with any other library - facilities. This must be distributed under the terms of the - Sections above. - - b) Give prominent notice with the combined library of the fact - that part of it is a work based on the Library, and explaining - where to find the accompanying uncombined form of the same work. - - 8. You may not copy, modify, sublicense, link with, or distribute -the Library except as expressly provided under this License. Any -attempt otherwise to copy, modify, sublicense, link with, or -distribute the Library is void, and will automatically terminate your -rights under this License. However, parties who have received copies, -or rights, from you under this License will not have their licenses -terminated so long as such parties remain in full compliance. - - 9. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Library or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Library (or any work based on the -Library), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Library or works based on it. - - 10. Each time you redistribute the Library (or any work based on the -Library), the recipient automatically receives a license from the -original licensor to copy, distribute, link with or modify the Library -subject to these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties with -this License. - -------------------------------------------------------------------------------- - - 11. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Library at all. For example, if a patent -license would not permit royalty-free redistribution of the Library by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Library. - -If any portion of this section is held invalid or unenforceable under any -particular circumstance, the balance of the section is intended to apply, -and the section as a whole is intended to apply in other circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 12. If the distribution and/or use of the Library is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Library under this License may add -an explicit geographical distribution limitation excluding those countries, -so that distribution is permitted only in or among countries not thus -excluded. In such case, this License incorporates the limitation as if -written in the body of this License. - - 13. The Free Software Foundation may publish revised and/or new -versions of the Lesser General Public License from time to time. -Such new versions will be similar in spirit to the present version, -but may differ in detail to address new problems or concerns. - -Each version is given a distinguishing version number. If the Library -specifies a version number of this License which applies to it and -"any later version", you have the option of following the terms and -conditions either of that version or of any later version published by -the Free Software Foundation. If the Library does not specify a -license version number, you may choose any version ever published by -the Free Software Foundation. - -------------------------------------------------------------------------------- - - 14. If you wish to incorporate parts of the Library into other free -programs whose distribution conditions are incompatible with these, -write to the author to ask for permission. For software which is -copyrighted by the Free Software Foundation, write to the Free -Software Foundation; we sometimes make exceptions for this. Our -decision will be guided by the two goals of preserving the free status -of all derivatives of our free software and of promoting the sharing -and reuse of software generally. - - NO WARRANTY - - 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO -WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. -EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR -OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY -KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE -LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME -THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN -WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY -AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU -FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR -CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE -LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING -RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A -FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF -SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGES. - - END OF TERMS AND CONDITIONS - diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/README qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/README --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/README 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/README 1970-01-01 00:00:00.000000000 +0000 @@ -1,92 +0,0 @@ -CLucene README -============== - ------------------------------------------------------- -CLucene is a C++ port of Lucene. -It is a high-performance, full-featured text search -engine written in C++. CLucene is faster than lucene -as it is written in C++. ------------------------------------------------------- - -CLucene has contributions from many, see AUTHORS - -CLucene is distributed under the GNU Lesser General Public License (LGPL) - *or* -the Apache License, Version 2.0 -See the LGPL.license and APACHE.license for the respective license information. -Read COPYING for more about the license. - -Installation ------------- -* For Linux, MacOSX, cygwin and MinGW build information, read INSTALL. -* Boost.Jam files are provided in the root directory and subdirectories. -* Microsoft Visual Studio (6&7) are provided in the win32 folder. - -Mailing List ------------- -Questions and discussion should be directed to the CLucene mailing list - at clucene-developers@lists.sourceforge.net -Find subscription instructions at - http://lists.sourceforge.net/lists/listinfo/clucene-developers -Suggestions and bug reports can be made on our bug tracking database - (http://sourceforge.net/tracker/?group_id=80013&atid=558446) - -The latest version ------------------- -Details of the latest version can be found on the CLucene sourceforge project -web site: http://www.sourceforge.net/projects/clucene - -Documentation -------------- -Documentation is provided at http://clucene.sourceforge.net/doc/doxygen/html/ -You can also build your own documentation by running doxygen from the root directory -of clucene. -CLucene is a very close port of Java Lucene, so you can also try looking at the -Java Docs on http://lucene.apache.org/java/ - - -Performance ------------ -Very little benchmarking has been done on clucene. Andi Vajda posted some -limited statistics on the clucene list a while ago with the following results. - -There are 250 HTML files under $JAVA_HOME/docs/api/java/util for about -6108kb of HTML text. -org.apache.lucene.demo.IndexFiles with java and gcj: -on mac os x 10.3.1 (panther) powerbook g4 1ghz 1gb: - . running with java 1.4.1_01-99 : 20379 ms - . running with gcj 3.3.2 -O2 : 17842 ms - . running clucene 0.8.9's demo : 9930 ms - -I recently did some more tests and came up with these rough tests: -663mb (797 files) of Guttenberg texts -on a Pentium 4 running Windows XP with 1 GB of RAM. Indexing max 100,000 fields - Jlucene: 646453ms. peak mem usage ~72mb, avg ~14mb ram - Clucene: 232141. peak mem usage ~60, avg ~4mb ram - -Searching indexing using 10,000 single word queries - Jlucene: ~60078ms and used ~13mb ram - Clucene: ~48359ms and used ~4.2mb ram - -Platform notes --------------- - -'Too many open files' -Some platforms don't provide enough file handles to run CLucene properly. -To solve this, increase the open file limit: - -On Solaris: -ulimit -n 1024 -set rlim_fd_cur=1024 - -Acknowledgments ----------------- - -The Apache Lucene project is the basis for this software, so the biggest -acknoledgment goes to that project. - -We wish to acknowledge the following copyrighted works that -make up portions of the CLucene software: - -CLucene relies heavily on the use of autoconf and libtool to provide -a build environment. diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/analysis/AnalysisHeader.cpp qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/analysis/AnalysisHeader.cpp --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/analysis/AnalysisHeader.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/analysis/AnalysisHeader.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,200 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#include "CLucene/StdHeader.h" -#include "AnalysisHeader.h" -#include "CLucene/util/StringBuffer.h" - -CL_NS_USE(util) -CL_NS_DEF(analysis) - -const TCHAR* Token::defaultType=_T("word"); - -Token::Token(): - _startOffset (0), - _endOffset (0), - _type ( defaultType ), - positionIncrement (1) -{ - _termTextLen = 0; -#ifndef LUCENE_TOKEN_WORD_LENGTH - _termText = NULL; - bufferTextLen = 0; -#else - _termText[0] = 0; //make sure null terminated - bufferTextLen = LUCENE_TOKEN_WORD_LENGTH+1; -#endif -} - -Token::~Token(){ -#ifndef LUCENE_TOKEN_WORD_LENGTH - free(_termText); -#endif -} - -Token::Token(const TCHAR* text, const int32_t start, const int32_t end, const TCHAR* typ): - _startOffset (start), - _endOffset (end), - _type ( typ ), - positionIncrement (1) -{ - _termTextLen = 0; -#ifndef LUCENE_TOKEN_WORD_LENGTH - _termText = NULL; - bufferTextLen = 0; -#else - _termText[0] = 0; //make sure null terminated - bufferTextLen = LUCENE_TOKEN_WORD_LENGTH+1; -#endif - setText(text); -} - -void Token::set(const TCHAR* text, const int32_t start, const int32_t end, const TCHAR* typ){ - _startOffset = start; - _endOffset = end; - _type = typ; - positionIncrement = 1; - setText(text); -} - -void Token::setText(const TCHAR* text){ - _termTextLen = _tcslen(text); - -#ifndef LUCENE_TOKEN_WORD_LENGTH - growBuffer(_termTextLen+1); - _tcsncpy(_termText,text,_termTextLen+1); -#else - if ( _termTextLen > LUCENE_TOKEN_WORD_LENGTH ){ - //in the case where this occurs, we will leave the endOffset as it is - //since the actual word still occupies that space. - _termTextLen=LUCENE_TOKEN_WORD_LENGTH; - } - _tcsncpy(_termText,text,_termTextLen+1); -#endif - _termText[_termTextLen] = 0; //make sure null terminated -} - -void Token::growBuffer(size_t size){ - if(bufferTextLen>=size) - return; -#ifndef LUCENE_TOKEN_WORD_LENGTH - if ( _termText == NULL ) - _termText = (TCHAR*)malloc( size * sizeof(TCHAR) ); - else - _termText = (TCHAR*)realloc( _termText, size * sizeof(TCHAR) ); - bufferTextLen = size; -#else - _CLTHROWA(CL_ERR_TokenMgr,"Couldn't grow Token buffer"); -#endif -} - -void Token::setPositionIncrement(int32_t posIncr) { - if (posIncr < 0) { - _CLTHROWA(CL_ERR_IllegalArgument,"positionIncrement must be >= 0"); - } - positionIncrement = posIncr; -} - -int32_t Token::getPositionIncrement() const { return positionIncrement; } - -// Returns the Token's term text. -const TCHAR* Token::termText() const{ - return (const TCHAR*) _termText; -} -size_t Token::termTextLength() { - if ( _termTextLen == -1 ) //it was invalidated by growBuffer - _termTextLen = _tcslen(_termText); - return _termTextLen; -} -void Token::resetTermTextLen(){ - _termTextLen=-1; -} -bool Token::OrderCompare::operator()( Token* t1, Token* t2 ) const{ - if(t1->startOffset()>t2->startOffset()) - return false; - if(t1->startOffset()startOffset()) - return true; - return true; -} -TCHAR* Token::toString() const{ - StringBuffer sb; - sb.append(_T("(")); - sb.append( _termText ); - sb.append(_T(",")); - sb.appendInt( _startOffset ); - sb.append(_T(",")); - sb.appendInt( _endOffset ); - - if (!_tcscmp( _type, _T("word")) == 0 ){ - sb.append(_T(",type=")); - sb.append(_type); - } - if (positionIncrement != 1){ - sb.append(_T(",posIncr=")); - sb.appendInt(positionIncrement); - } - sb.append(_T(")")); - - return sb.toString(); -} - - -Token* TokenStream::next(){ - Token* t = _CLNEW Token; //deprecated - if ( !next(t) ) - _CLDELETE(t); - return t; -} - - -TokenFilter::TokenFilter(TokenStream* in, bool deleteTS): - input(in), - deleteTokenStream(deleteTS) -{ -} -TokenFilter::~TokenFilter(){ - close(); -} - -// Close the input TokenStream. -void TokenFilter::close() { - if ( input != NULL ){ - input->close(); - if ( deleteTokenStream ) - _CLDELETE( input ); - } - input = NULL; -} - - - -Tokenizer::Tokenizer() { - input = NULL; -} - -Tokenizer::Tokenizer(CL_NS(util)::Reader* _input): - input(_input) -{ -} - -void Tokenizer::close(){ - if (input != NULL) { - // ? delete input; - input = NULL; - } -} - -Tokenizer::~Tokenizer(){ - close(); -} - - -int32_t Analyzer::getPositionIncrementGap(const TCHAR* fieldName) -{ - return 0; -} - -CL_NS_END diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/analysis/AnalysisHeader.h qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/analysis/AnalysisHeader.h --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/analysis/AnalysisHeader.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/analysis/AnalysisHeader.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,234 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#ifndef _lucene_analysis_AnalysisHeader_ -#define _lucene_analysis_AnalysisHeader_ - -#if defined(_LUCENE_PRAGMA_ONCE) -# pragma once -#endif - -#include "CLucene/util/Reader.h" - -CL_NS_DEF(analysis) - - -/** A Token is an occurence of a term from the text of a field. It consists of -* a term's text, the start and end offset of the term in the text of the field, -* and a type string. -* -* The start and end offsets permit applications to re-associate a token with -* its source text, e.g., to display highlighted query terms in a document -* browser, or to show matching text fragments in a KWIC (KeyWord In Context) -* display, etc. -* -* The type is an interned string, assigned by a lexical analyzer -* (a.k.a. tokenizer), naming the lexical or syntactic class that the token -* belongs to. For example an end of sentence marker token might be implemented -* with type "eos". The default token type is "word". -*/ -class Token:LUCENE_BASE{ -private: - int32_t _startOffset; // start in source text - int32_t _endOffset; // end in source text - const TCHAR* _type; // lexical type - int32_t positionIncrement; - size_t bufferTextLen; - -public: - #ifndef LUCENE_TOKEN_WORD_LENGTH - TCHAR* _termText; // the text of the term - #else - TCHAR _termText[LUCENE_TOKEN_WORD_LENGTH+1]; // the text of the term - #endif - int32_t _termTextLen; - static const TCHAR* defaultType; - - Token(); - ~Token(); - // Constructs a Token with the given text, start and end offsets, & type. - Token(const TCHAR* text, const int32_t start, const int32_t end, const TCHAR* typ=defaultType); - void set(const TCHAR* text, const int32_t start, const int32_t end, const TCHAR* typ=defaultType); - - size_t bufferLength(){ return bufferTextLen; } - void growBuffer(size_t size); - - /* Set the position increment. This determines the position of this - * token relative to the previous Token in a TokenStream, used in - * phrase searching. - * - * The default value is 1. - * - * Some common uses for this are: - * - * - Set it to zero to put multiple terms in the same position. This is - * useful if, e.g., a word has multiple stems. Searches for phrases - * including either stem will match. In this case, all but the first stem's - * increment should be set to zero: the increment of the first instance - * should be one. Repeating a token with an increment of zero can also be - * used to boost the scores of matches on that token. - * - * - Set it to values greater than one to inhibit exact phrase matches. - * If, for example, one does not want phrases to match across removed stop - * words, then one could build a stop word filter that removes stop words and - * also sets the increment to the number of stop words removed before each - * non-stop word. Then exact phrase queries will only match when the terms - * occur with no intervening stop words. - */ - void setPositionIncrement(int32_t posIncr); - int32_t getPositionIncrement() const; - const TCHAR* termText() const; - size_t termTextLength(); - void resetTermTextLen(); - void setText(const TCHAR* txt); - - /** - * Returns this Token's starting offset, the position of the first character - * corresponding to this token in the source text. - * - * Note that the difference between endOffset() and startOffset() may not be - * equal to termText.length(), as the term text may have been altered by a - * stemmer or some other filter. - */ - int32_t startOffset() const { return _startOffset; } - void setStartOffset(int32_t val){ _startOffset =val; } - - /** - * Returns this Token's ending offset, one greater than the position of the - * last character corresponding to this token in the source text. - */ - int32_t endOffset() const { return _endOffset; } - void setEndOffset(int32_t val){ _endOffset =val; } - - // Returns this Token's lexical type. Defaults to "word". - const TCHAR* type() const { return _type; } /// - { - public: - bool operator()( Token* t1, Token* t2 ) const; - }; -}; - -/** -* A TokenStream enumerates the sequence of tokens, either from -* fields of a document or from query text. -*

-* This is an abstract class. Concrete subclasses are: -*

    -*
  • {@link Tokenizer}, a TokenStream -* whose input is a Reader; and -*
  • {@link TokenFilter}, a TokenStream -* whose input is another TokenStream. -*
-*/ -class TokenStream:LUCENE_BASE { -public: - /** Sets token to the next token in the stream, returns false at the EOS. */ - virtual bool next(Token* token) = 0; - - /** Releases resources associated with this stream. */ - virtual void close() = 0; - - virtual ~TokenStream(){ - } - - /* This is for backwards compatibility only. You should pass the token you want to fill - * to next(), this will save a lot of object construction and destructions. - * @deprecated. use next(token). Kept only to avoid breaking existing code. - */ - _CL_DEPRECATED(next(Token)) Token* next(); -}; - - -/** An Analyzer builds TokenStreams, which analyze text. It thus represents a - * policy for extracting index terms from text. - *

- * Typical implementations first build a Tokenizer, which breaks the stream of - * characters from the Reader into raw Tokens. One or more TokenFilters may - * then be applied to the output of the Tokenizer. - *

- * WARNING: You must override one of the methods defined by this class in your - * subclass or the Analyzer will enter an infinite loop. - */ -class Analyzer:LUCENE_BASE{ -public: - /** Creates a TokenStream which tokenizes all the text in the provided - Reader. Default implementation forwards to tokenStream(Reader) for - compatibility with older version. Override to allow Analyzer to choose - strategy based on document and/or field. Must be able to handle null - field name for backward compatibility. */ - virtual TokenStream* tokenStream(const TCHAR* fieldName, CL_NS(util)::Reader* reader)=0; - - virtual ~Analyzer(){ - } - - /** - * Invoked before indexing a Field instance if - * terms have already been added to that field. This allows custom - * analyzers to place an automatic position increment gap between - * Field instances using the same field name. The default value - * position increment gap is 0. With a 0 position increment gap and - * the typical default token position increment of 1, all terms in a field, - * including across Field instances, are in successive positions, allowing - * exact PhraseQuery matches, for instance, across Field instance boundaries. - * - * @param fieldName Field name being indexed. - * @return position increment gap, added to the next token emitted from {@link #tokenStream(TCHAR*, Reader*)} - */ - virtual int32_t getPositionIncrementGap(const TCHAR* fieldName); -}; - - -/** A Tokenizer is a TokenStream whose input is a Reader. -

-This is an abstract class. -*/ -class Tokenizer:public TokenStream { -protected: - /** The text source for this Tokenizer. */ - CL_NS(util)::Reader* input; - -public: - /** Construct a tokenizer with null input. */ - Tokenizer(); - /** Construct a token stream processing the given input. */ - Tokenizer(CL_NS(util)::Reader* _input); - - // ** By default, closes the input Reader. */ - virtual void close(); - virtual ~Tokenizer(); -}; - -/** A TokenFilter is a TokenStream whose input is another token stream. -

-This is an abstract class. -*/ -class TokenFilter:public TokenStream { -protected: - /** The source of tokens for this filter. */ - TokenStream* input; - /** If true then input will be deleted in the destructor */ - bool deleteTokenStream; - - /** Construct a token stream filtering the given input. - * - * @param in The TokenStream to filter from - * @param deleteTS If true, input will be deleted in the destructor - */ - TokenFilter(TokenStream* in, bool deleteTS=false); - virtual ~TokenFilter(); -public: - /** Close the input TokenStream. */ - void close(); -}; - -CL_NS_END -#endif diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/analysis/Analyzers.cpp qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/analysis/Analyzers.cpp --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/analysis/Analyzers.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/analysis/Analyzers.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,389 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -* -* Changes are Copyright (C) 2015 The Qt Company Ltd. -------------------------------------------------------------------------------*/ -#include "CLucene/StdHeader.h" -#include "Analyzers.h" -#include "CLucene/util/StringBuffer.h" - -CL_NS_USE(util) -CL_NS_DEF(analysis) - -CharTokenizer::CharTokenizer(Reader* in) : - Tokenizer(in), - offset(0), - bufferIndex(0), - dataLen(0), - ioBuffer(NULL) -{ - buffer[0]=0; -} - -TCHAR CharTokenizer::normalize(const TCHAR c) const -{ - return c; -} -bool CharTokenizer::next(Token* token){ - int32_t length = 0; - int32_t start = offset; - while (true) { - TCHAR c; - offset++; - if (bufferIndex >= dataLen) { - dataLen = input->read(ioBuffer, LUCENE_IO_BUFFER_SIZE); - if (dataLen == -1) - dataLen = 0; - bufferIndex = 0; - } - if (dataLen <= 0 ) { - if (length > 0) - break; - else - return false; - }else - c = ioBuffer[bufferIndex++]; - if (isTokenChar(c)) { // if it's a token TCHAR - - if (length == 0) // start of token - start = offset-1; - - buffer[length++] = normalize(c); // buffer it, normalized - - if (length == LUCENE_MAX_WORD_LEN) // buffer overflow! - break; - - } else if (length > 0) // at non-Letter w/ chars - break; // return 'em - - } - buffer[length]=0; - token->set( buffer, start, start+length); - return true; -} - -bool LetterTokenizer::isTokenChar(const TCHAR c) const { - return _istalpha(c)!=0; -} - - -TCHAR LowerCaseTokenizer::normalize(const TCHAR chr) const { - return _totlower(chr); -} - -bool WhitespaceTokenizer::isTokenChar(const TCHAR c) const{ - return _istspace(c)==0; //(return true if NOT a space) -} - -TokenStream* WhitespaceAnalyzer::tokenStream(const TCHAR* fieldName, Reader* reader) { - return _CLNEW WhitespaceTokenizer(reader); -} - -TokenStream* SimpleAnalyzer::tokenStream(const TCHAR* fieldName, Reader* reader) { - return _CLNEW LowerCaseTokenizer(reader); -} - -bool LowerCaseFilter::next(Token* t){ - if (!input->next(t)) - return false; - stringCaseFold( t->_termText ); - return true; -} - -StopFilter::StopFilter(TokenStream* in, bool deleteTokenStream, const TCHAR** stopWords): - TokenFilter(in, deleteTokenStream), - table(_CLNEW CLSetList(false)) -{ - fillStopTable( table,stopWords ); -} - -void StopFilter::fillStopTable(CLSetList* stopTable, - const TCHAR** stopWords) { - for (int32_t i = 0; stopWords[i]!=NULL; i++) - stopTable->insert(stopWords[i]); -} - -bool StopFilter::next(Token* token) { - // return the first non-stop word found - while (input->next(token)){ - if (table->find(token->_termText)==table->end()){ - return true; - } - } - - // reached EOS -- return nothing - return false; -} - -StopAnalyzer::StopAnalyzer():stopTable(false) -{ - StopFilter::fillStopTable(&stopTable,ENGLISH_STOP_WORDS); -} -StopAnalyzer::~StopAnalyzer() -{ -} -StopAnalyzer::StopAnalyzer( const TCHAR** stopWords) { - StopFilter::fillStopTable(&stopTable,stopWords); -} -TokenStream* StopAnalyzer::tokenStream(const TCHAR* fieldName, Reader* reader) { - return _CLNEW StopFilter(_CLNEW LowerCaseTokenizer(reader),true, &stopTable); -} - -const TCHAR* StopAnalyzer::ENGLISH_STOP_WORDS[] = -{ - _T("a"), _T("an"), _T("and"), _T("are"), _T("as"), _T("at"), _T("be"), _T("but"), _T("by"), - _T("for"), _T("if"), _T("in"), _T("into"), _T("is"), _T("it"), - _T("no"), _T("not"), _T("of"), _T("on"), _T("or"), _T("s"), _T("such"), - _T("t"), _T("that"), _T("the"), _T("their"), _T("then"), _T("there"), _T("these"), - _T("they"), _T("this"), _T("to"), _T("was"), _T("will"), _T("with"), NULL -}; - -PerFieldAnalyzerWrapper::PerFieldAnalyzerWrapper(Analyzer* defaultAnalyzer): - analyzerMap(true,true) -{ - this->defaultAnalyzer = defaultAnalyzer; -} -PerFieldAnalyzerWrapper::~PerFieldAnalyzerWrapper(){ - analyzerMap.clear(); - _CLDELETE(defaultAnalyzer); -} - -void PerFieldAnalyzerWrapper::addAnalyzer(const TCHAR* fieldName, Analyzer* analyzer) { - analyzerMap.put(STRDUP_TtoT(fieldName), analyzer); -} - -TokenStream* PerFieldAnalyzerWrapper::tokenStream(const TCHAR* fieldName, Reader* reader) { - Analyzer* analyzer = (fieldName==NULL?defaultAnalyzer:analyzerMap.get(fieldName)); - if (analyzer == NULL) { - analyzer = defaultAnalyzer; - } - - return analyzer->tokenStream(fieldName, reader); -} - - - -bool ISOLatin1AccentFilter::next(Token* token){ - if ( input->next(token) ){ - int32_t l = token->termTextLength(); - const TCHAR* chars = token->termText(); - bool doProcess = false; - for (int32_t i = 0; i < l; ++i) { -#ifdef _UCS2 - if ( chars[i] >= 0xC0 && chars[i] <= 0x178 ) { -#else - if ( (chars[i] >= 0xC0 && chars[i] <= 0xFF) || chars[i] < 0 ) { -#endif - doProcess = true; - break; - } - } - if ( !doProcess ) { - return true; - } - - StringBuffer output(l*2); - for (int32_t j = 0; j < l; j++) { - #ifdef _UCS2 - TCHAR c = chars[j]; - #else - unsigned char c = chars[j]; - #endif - switch (c) { - case 0xC0 : - case 0xC1 : - case 0xC2 : - case 0xC3 : - case 0xC4 : - case 0xC5 : - output.appendChar('A'); - break; - case 0xC6 : - output.append(_T("AE")); - break; - case 0xC7 : - output.appendChar('C'); - break; - case 0xC8 : - case 0xC9 : - case 0xCA : - case 0xCB : - output.appendChar('E'); - break; - case 0xCC : - case 0xCD : - case 0xCE : - case 0xCF : - output.appendChar('I'); - break; - case 0xD0 : - output.appendChar('D'); - break; - case 0xD1 : - output.appendChar('N'); - break; - case 0xD2 : - case 0xD3 : - case 0xD4 : - case 0xD5 : - case 0xD6 : - case 0xD8 : - output.appendChar('O'); - break; - case 0xDE : - output.append(_T("TH")); - break; - case 0xD9 : - case 0xDA : - case 0xDB : - case 0xDC : - output.appendChar('U'); - break; - case 0xDD : - output.appendChar('Y'); - break; - case 0xE0 : - case 0xE1 : - case 0xE2 : - case 0xE3 : - case 0xE4 : - case 0xE5 : - output.appendChar('a'); - break; - case 0xE6 : - output.append(_T("ae")); - break; - case 0xE7 : - output.appendChar('c'); - break; - case 0xE8 : - case 0xE9 : - case 0xEA : - case 0xEB : - output.appendChar('e'); - break; - case 0xEC : - case 0xED : - case 0xEE : - case 0xEF : - output.appendChar('i'); - break; - case 0xF0 : - output.appendChar('d'); - break; - case 0xF1 : - output.appendChar('n'); - break; - case 0xF2 : - case 0xF3 : - case 0xF4 : - case 0xF5 : - case 0xF6 : - case 0xF8 : - output.appendChar('o'); - break; - case 0xDF : - output.append(_T("ss")); - break; - case 0xFE : - output.append(_T("th")); - break; - case 0xF9 : - case 0xFA : - case 0xFB : - case 0xFC : - output.appendChar('u'); - break; - case 0xFD : - case 0xFF : - output.appendChar('y'); - break; - - #ifdef _UCS2 - case 0x152 : - output.append(_T("OE")); - break; - case 0x153 : - output.append(_T("oe")); - break; - case 0x178 : - output.appendChar('Y'); - break; - #endif - default : - output.appendChar(c); - break; - } - } - token->setText(output.getBuffer()); - return true; - } - return false; -} - - -TokenStream* KeywordAnalyzer::tokenStream(const TCHAR* fieldName, CL_NS(util)::Reader* reader){ - return _CLNEW KeywordTokenizer(reader); -} - -KeywordTokenizer::KeywordTokenizer(CL_NS(util)::Reader* input, int bufferSize): - Tokenizer(input) -{ - this->done = false; - if ( bufferSize < 0 ) - this->bufferSize = DEFAULT_BUFFER_SIZE; -} -KeywordTokenizer::~KeywordTokenizer(){ -} - -bool KeywordTokenizer::next(Token* token){ - if (!done) { - done = true; - int32_t rd; - const TCHAR* buffer=0; - while (true) { - rd = input->read(buffer, bufferSize); - if (rd == -1) - break; - token->growBuffer(token->_termTextLen +rd+1); - - int32_t cp = rd; - if ( token->_termTextLen + cp > token->bufferLength() ) - cp = token->bufferLength() - token->_termTextLen; - _tcsncpy(token->_termText+token->_termTextLen,buffer,cp); - token->_termTextLen+=rd; - } - token->_termText[token->_termTextLen]=0; - token->set(token->_termText,0,token->_termTextLen); - return true; - } - return false; -} - - -LengthFilter::LengthFilter(TokenStream* in, int _min, int _max): - TokenFilter(in) -{ - this->_min = _min; - this->_max = _max; -} - -bool LengthFilter::next(Token* token) -{ - // return the first non-stop word found - while ( input->next(token) ) - { - size_t len = token->termTextLength(); - if (len >= _min && len <= _max) - return true; - // note: else we ignore it but should we index each part of it? - } - // reached EOS -- return null - return false; -} - - -CL_NS_END diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/analysis/Analyzers.h qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/analysis/Analyzers.h --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/analysis/Analyzers.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/analysis/Analyzers.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,309 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#ifndef _lucene_analysis_Analyzers_ -#define _lucene_analysis_Analyzers_ - -#if defined(_LUCENE_PRAGMA_ONCE) -# pragma once -#endif - -#include "CLucene/util/Reader.h" -#include "AnalysisHeader.h" -#include "CLucene/util/Misc.h" - -CL_NS_DEF(analysis) - -/** An abstract base class for simple, character-oriented tokenizers.*/ -class CharTokenizer:public Tokenizer { -private: - int32_t offset, bufferIndex, dataLen; - TCHAR buffer[LUCENE_MAX_WORD_LEN+1]; - const TCHAR* ioBuffer; -protected: - - /** Returns true iff a character should be included in a token. This - * tokenizer generates as tokens adjacent sequences of characters which - * satisfy this predicate. Characters for which this is false are used to - * define token boundaries and are not included in tokens. */ - virtual bool isTokenChar(const TCHAR c) const = 0; - - /** Called on each token character to normalize it before it is added to the - * token. The default implementation does nothing. Subclasses may use this - * to, e.g., lowercase tokens. */ - virtual TCHAR normalize(const TCHAR c) const; - -public: - CharTokenizer(CL_NS(util)::Reader* in); - virtual ~CharTokenizer(){ - } - bool next(Token* token); -}; - - -/** A LetterTokenizer is a tokenizer that divides text at non-letters. That's -to say, it defines tokens as maximal strings of adjacent letters, as defined -by java.lang.Character.isLetter() predicate. - -Note: this does a decent job for most European languages, but does a terrible -job for some Asian languages, where words are not separated by spaces. */ -class LetterTokenizer:public CharTokenizer { -public: - // Construct a new LetterTokenizer. - LetterTokenizer(CL_NS(util)::Reader* in): - CharTokenizer(in) {} - - ~LetterTokenizer(){} -protected: - /** Collects only characters which satisfy _istalpha.*/ - bool isTokenChar(const TCHAR c) const; -}; - - - -/** -* LowerCaseTokenizer performs the function of LetterTokenizer -* and LowerCaseFilter together. It divides text at non-letters and converts -* them to lower case. While it is functionally equivalent to the combination -* of LetterTokenizer and LowerCaseFilter, there is a performance advantage -* to doing the two tasks at once, hence this (redundant) implementation. -*

-* Note: this does a decent job for most European languages, but does a terrible -* job for some Asian languages, where words are not separated by spaces. -*/ -class LowerCaseTokenizer:public LetterTokenizer { -public: - /** Construct a new LowerCaseTokenizer. */ - LowerCaseTokenizer(CL_NS(util)::Reader* in): - LetterTokenizer(in) {} - - ~LowerCaseTokenizer(){} -protected: - /** Collects only characters which satisfy _totlower. */ - TCHAR normalize(const TCHAR chr) const; -}; - - -/** A WhitespaceTokenizer is a tokenizer that divides text at whitespace. - * Adjacent sequences of non-Whitespace characters form tokens. */ -class WhitespaceTokenizer: public CharTokenizer { -public: - /** Construct a new WhitespaceTokenizer. */ - WhitespaceTokenizer(CL_NS(util)::Reader* in):CharTokenizer(in) {} - ~WhitespaceTokenizer(){} -protected: - /** Collects only characters which do not satisfy _istspace. - */ - bool isTokenChar(const TCHAR c) const; -}; - - -/** An Analyzer that uses WhitespaceTokenizer. */ -class WhitespaceAnalyzer: public Analyzer { - public: - TokenStream* tokenStream(const TCHAR* fieldName, CL_NS(util)::Reader* reader); - ~WhitespaceAnalyzer(){} -}; - -/** An Analyzer that filters LetterTokenizer with LowerCaseFilter. */ -class SimpleAnalyzer: public Analyzer { -public: - TokenStream* tokenStream(const TCHAR* fieldName, CL_NS(util)::Reader* reader); - ~SimpleAnalyzer(){} -}; - - - -/** -* Normalizes token text to lower case. -*/ -class LowerCaseFilter: public TokenFilter { -public: - LowerCaseFilter(TokenStream* in, bool deleteTokenStream):TokenFilter(in,deleteTokenStream) {} - ~LowerCaseFilter(){} - bool next(Token* token); -}; - - -/** - * Removes stop words from a token stream. - */ -class StopFilter: public TokenFilter { -private: - //bvk: i found this to work faster with a non-hash table. the number of items - //in the stop table is not like to make it worth having hashing. - CL_NS(util)::CLSetList* table; -public: - // Constructs a filter which removes words from the input - // TokenStream that are named in the array of words. - StopFilter(TokenStream* in, bool deleteTokenStream, const TCHAR** stopWords); - - ~StopFilter(){} - - /** Constructs a filter which removes words from the input - * TokenStream that are named in the CLSetList. - */ - StopFilter(TokenStream* in, bool deleteTokenStream, CL_NS(util)::CLSetList* stopTable): - TokenFilter(in, deleteTokenStream), - table(stopTable) - {} - - - /** - * Builds a Hashtable from an array of stop words, appropriate for passing - * into the StopFilter constructor. This permits this table construction to - * be cached once when an Analyzer is constructed. - * Note: the stopWords list must be a static list because the strings are not copied - */ - static void fillStopTable(CL_NS(util)::CLSetList* stopTable, - const TCHAR** stopWords); - - /** - * Returns the next input Token whose termText() is not a stop word. - */ - bool next(Token* token); -}; - - - - -/** Filters LetterTokenizer with LowerCaseFilter and StopFilter. */ -class StopAnalyzer: public Analyzer { - CL_NS(util)::CLSetList stopTable; - -public: - /** Builds an analyzer which removes words in ENGLISH_STOP_WORDS. */ - StopAnalyzer(); - ~StopAnalyzer(); - - /** Builds an analyzer which removes words in the provided array. */ - StopAnalyzer( const TCHAR** stopWords ); - /** Filters LowerCaseTokenizer with StopFilter. */ - TokenStream* tokenStream(const TCHAR* fieldName, CL_NS(util)::Reader* reader); - - /** An array containing some common English words that are not usually useful - for searching. */ - static const TCHAR* ENGLISH_STOP_WORDS[]; -}; - - - -/** - * This analyzer is used to facilitate scenarios where different - * fields require different analysis techniques. Use {@link #addAnalyzer} - * to add a non-default analyzer on a field name basis. - * - *

Example usage: - * - *

- *   PerFieldAnalyzerWrapper aWrapper =
- *      new PerFieldAnalyzerWrapper(new StandardAnalyzer());
- *   aWrapper.addAnalyzer("firstname", new KeywordAnalyzer());
- *   aWrapper.addAnalyzer("lastname", new KeywordAnalyzer());
- * 
- * - *

In this example, StandardAnalyzer will be used for all fields except "firstname" - * and "lastname", for which KeywordAnalyzer will be used. - * - *

A PerFieldAnalyzerWrapper can be used like any other analyzer, for both indexing - * and query parsing. - */ -class PerFieldAnalyzerWrapper : public Analyzer { -private: - Analyzer* defaultAnalyzer; - CL_NS(util)::CLHashMap > analyzerMap; -public: - /** - * Constructs with default analyzer. - * - * @param defaultAnalyzer Any fields not specifically - * defined to use a different analyzer will use the one provided here. - */ - PerFieldAnalyzerWrapper(Analyzer* defaultAnalyzer); - ~PerFieldAnalyzerWrapper(); - - /** - * Defines an analyzer to use for the specified field. - * - * @param fieldName field name requiring a non-default analyzer - * @param analyzer non-default analyzer to use for field - */ - void addAnalyzer(const TCHAR* fieldName, Analyzer* analyzer); - TokenStream* tokenStream(const TCHAR* fieldName, CL_NS(util)::Reader* reader); -}; - - -/** - * A filter that replaces accented characters in the ISO Latin 1 character set - * (ISO-8859-1) by their unaccented equivalent. The case will not be altered. - *

- * For instance, 'à' will be replaced by 'a'. - *

- */ -class ISOLatin1AccentFilter: public TokenFilter { -public: - ISOLatin1AccentFilter(TokenStream* input, bool deleteTs): - TokenFilter(input,deleteTs) - { - } - - /** - * To replace accented characters in a String by unaccented equivalents. - */ - bool next(Token* token); -}; - - -/** - * Emits the entire input as a single token. - */ -class KeywordTokenizer: public Tokenizer { -private: - LUCENE_STATIC_CONSTANT(int, DEFAULT_BUFFER_SIZE = 256); - bool done; - int bufferSize; -public: - KeywordTokenizer(CL_NS(util)::Reader* input, int bufferSize=-1); - virtual ~KeywordTokenizer(); - bool next(Token* token); -}; - -/** - * "Tokenizes" the entire stream as a single token. This is useful - * for data like zip codes, ids, and some product names. - */ -class KeywordAnalyzer: public Analyzer { -public: - TokenStream* tokenStream(const TCHAR* fieldName, CL_NS(util)::Reader* reader); - virtual ~KeywordAnalyzer(){} -}; - - -/** - * Removes words that are too long and too short from the stream. - * - */ -class LengthFilter: public TokenFilter { -private: - int _min; - int _max; -public: - /** - * Build a filter that removes words that are too long or too - * short from the text. - */ - LengthFilter(TokenStream* in, int _min, int _max); - - /** - * Returns the next input Token whose termText() is the right len - */ - bool next(Token* token); -}; - - -CL_NS_END -#endif diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/analysis/standard/StandardAnalyzer.cpp qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/analysis/standard/StandardAnalyzer.cpp --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/analysis/standard/StandardAnalyzer.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/analysis/standard/StandardAnalyzer.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,46 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#include "CLucene/StdHeader.h" -#include "StandardAnalyzer.h" - -#include "CLucene/util/VoidMap.h" -#include "CLucene/util/Reader.h" -#include "CLucene/analysis/AnalysisHeader.h" -#include "CLucene/analysis/Analyzers.h" -#include "StandardFilter.h" -#include "StandardTokenizer.h" - -CL_NS_USE(util) -CL_NS_USE(analysis) - -CL_NS_DEF2(analysis,standard) - - StandardAnalyzer::StandardAnalyzer(): - stopSet(false) - { - StopFilter::fillStopTable( &stopSet,CL_NS(analysis)::StopAnalyzer::ENGLISH_STOP_WORDS); - } - - StandardAnalyzer::StandardAnalyzer( const TCHAR** stopWords): - stopSet(false) - { - StopFilter::fillStopTable( &stopSet,stopWords ); - } - - StandardAnalyzer::~StandardAnalyzer(){ - } - - - TokenStream* StandardAnalyzer::tokenStream(const TCHAR* fieldName, Reader* reader) - { - TokenStream* ret = _CLNEW StandardTokenizer(reader); - ret = _CLNEW StandardFilter(ret,true); - ret = _CLNEW LowerCaseFilter(ret,true); - ret = _CLNEW StopFilter(ret,true, &stopSet); - return ret; - } -CL_NS_END2 diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/analysis/standard/StandardAnalyzer.h qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/analysis/standard/StandardAnalyzer.h --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/analysis/standard/StandardAnalyzer.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/analysis/standard/StandardAnalyzer.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,47 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#ifndef _lucene_analysis_standard_StandardAnalyzer -#define _lucene_analysis_standard_StandardAnalyzer - -#if defined(_LUCENE_PRAGMA_ONCE) -# pragma once -#endif - -#include "CLucene/util/VoidMap.h" -#include "CLucene/util/Reader.h" -#include "CLucene/analysis/AnalysisHeader.h" -#include "CLucene/analysis/Analyzers.h" -#include "StandardFilter.h" -#include "StandardTokenizer.h" - - -CL_NS_DEF2(analysis,standard) - - /** Represents a standard analyzer. */ - class StandardAnalyzer : public Analyzer - { - private: - CL_NS(util)::CLSetList stopSet; - public: - /** Builds an analyzer.*/ - StandardAnalyzer(); - - /** Builds an analyzer with the given stop words. */ - StandardAnalyzer( const TCHAR** stopWords); - - ~StandardAnalyzer(); - - - /** - * Constructs a StandardTokenizer filtered by a - * StandardFilter, a LowerCaseFilter and a StopFilter. - */ - TokenStream* tokenStream(const TCHAR* fieldName, CL_NS(util)::Reader* reader) - ; - }; -CL_NS_END2 -#endif diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/analysis/standard/StandardFilter.cpp qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/analysis/standard/StandardFilter.cpp --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/analysis/standard/StandardFilter.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/analysis/standard/StandardFilter.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,58 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#include "CLucene/StdHeader.h" -#include "StandardFilter.h" - -#include "../AnalysisHeader.h" -#include "../Analyzers.h" -#include "StandardTokenizerConstants.h" -#include "CLucene/util/StringBuffer.h" - -CL_NS_USE(analysis) -CL_NS_USE(util) -CL_NS_DEF2(analysis,standard) - - StandardFilter::StandardFilter(TokenStream* in, bool deleteTokenStream): - TokenFilter(in, deleteTokenStream) - { - } - - StandardFilter::~StandardFilter(){ - } - - bool StandardFilter::next(Token* t) { - if (!input->next(t)) - return false; - - TCHAR* text = t->_termText; - const int32_t textLength = t->termTextLength(); - const TCHAR* type = t->type(); - - if ( type == tokenImage[APOSTROPHE] && //we can compare the type directy since the type should always come from the tokenImage - ( textLength >= 2 && _tcsicmp(text+textLength-2, _T("'s"))==0 ) ) - { - // remove 's - text[textLength-2]=0; - t->resetTermTextLen(); - - return true; - - } else if ( type == tokenImage[ACRONYM] ) { // remove dots - int32_t j = 0; - for ( int32_t i=0;iin. - StandardFilter(TokenStream* in, bool deleteTokenStream); - - ~StandardFilter(); - - - /** Returns the next token in the stream, or NULL at EOS. - *

Removes 's from the end of words. - *

Removes dots from acronyms. - */ - bool next(Token* token); - }; -CL_NS_END2 -#endif diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/analysis/standard/StandardTokenizerConstants.h qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/analysis/standard/StandardTokenizerConstants.h --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/analysis/standard/StandardTokenizerConstants.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/analysis/standard/StandardTokenizerConstants.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,30 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#ifndef _lucene_analysis_standard_StandardTokenizerConstants -#define _lucene_analysis_standard_StandardTokenizerConstants - -#if defined(_LUCENE_PRAGMA_ONCE) -# pragma once -#endif - -CL_NS_DEF2(analysis,standard) - enum TokenTypes { - _EOF, - UNKNOWN, - ALPHANUM, - APOSTROPHE, - ACRONYM, - COMPANY, - EMAIL, - HOST, - NUM, - CJK - }; - extern const TCHAR** tokenImage; - - CL_NS_END2 -#endif diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/analysis/standard/StandardTokenizer.cpp qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/analysis/standard/StandardTokenizer.cpp --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/analysis/standard/StandardTokenizer.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/analysis/standard/StandardTokenizer.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,446 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#include "CLucene/StdHeader.h" -#include "StandardTokenizer.h" - -CL_NS_USE(analysis) -CL_NS_USE(util) -CL_NS_DEF2(analysis,standard) - - const static TCHAR* tokenImageArray[] = { - _T(""), - _T(""), - _T(""), - _T(""), - _T(""), - _T(""), - _T(""), - _T(""), - _T(""), - _T("") - }; - const TCHAR** tokenImage = tokenImageArray; - - /* A bunch of shortcut macros, many of which make assumptions about variable - ** names. These macros enhance readability, not just convenience! */ - #define EOS (ch==-1 || rd->Eos()) - #define SPACE (_istspace((TCHAR)ch) != 0) - #define ALPHA (_istalpha((TCHAR)ch) != 0) - #define ALNUM (_istalnum(ch) != 0) - #define DIGIT (_istdigit(ch) != 0) - #define UNDERSCORE (ch == '_') - - #define _CJK ( (ch>=0x3040 && ch<=0x318f) || \ - (ch>=0x3300 && ch<=0x337f) || \ - (ch>=0x3400 && ch<=0x3d2d) || \ - (ch>=0x4e00 && ch<=0x9fff) || \ - (ch>=0xf900 && ch<=0xfaff) || \ - (ch>=0xac00 && ch<=0xd7af) ) //korean - - - #define DASH (ch == '-') - #define NEGATIVE_SIGN_ DASH - //#define POSITIVE_SIGN_ (ch == '+') - //#define SIGN (NEGATIVE_SIGN_ || POSITIVE_SIGN_) - - #define DOT (ch == '.') - #define DECIMAL DOT - - - //freebsd seems to have a problem with defines over multiple lines, so this has to be one long line - #define _CONSUME_AS_LONG_AS(conditionFails) while (true) { ch = readChar(); if (ch==-1 || (!(conditionFails) || str.len >= LUCENE_MAX_WORD_LEN)) { break; } str.appendChar(ch);} - - #define CONSUME_ALPHAS _CONSUME_AS_LONG_AS(ALPHA) - - #define CONSUME_DIGITS _CONSUME_AS_LONG_AS(DIGIT) - - /* otherMatches is a condition (possibly compound) under which a character - ** that's not an ALNUM or UNDERSCORE can be considered not to break the - ** span. Callers should pass false if only ALNUM/UNDERSCORE are acceptable. */ - #define CONSUME_WORD _CONSUME_AS_LONG_AS(ALNUM || UNDERSCORE) - - /* - ** Consume CJK characters - */ - #define CONSUME_CJK _CONSUME_AS_LONG_AS(_CJK) - - - /* It is considered that "nothing of value" has been read if: - ** a) The "read head" hasn't moved since specialCharPos was established. - ** or - ** b) The "read head" has moved by one character, but that character was - ** either whitespace or not among the characters found in the body of - ** a token (deliberately doesn't include the likes of '@'/'&'). */ - #define CONSUMED_NOTHING_OF_VALUE (rdPos == specialCharPos || (rdPos == specialCharPos+1 && ( SPACE || !(ALNUM || DOT || DASH || UNDERSCORE) ))) - - #define RIGHTMOST(sb) (sb.getBuffer()[sb.len-1]) - #define RIGHTMOST_IS(sb, c) (RIGHTMOST(sb) == c) - /* To discard the last character in a StringBuffer, we decrement the buffer's - ** length indicator and move the terminator back by one character. */ - #define SHAVE_RIGHTMOST(sb) (sb.getBuffer()[--sb.len] = '\0') - - //#define REMOVE_TRAILING_CHARS(sb, charMatchesCondition) { TCHAR* sbBuf = sb.getBuffer(); for (int32_t i = sb.len-1; i >= 0; i--) { TCHAR c = sbBuf[i]; if (charMatchesCondition) { sbBuf[--sb.len] = '\0'; } else {break;}}} - - /* Does StringBuffer sb contain any of the characters in string ofThese? */ - #define CONTAINS_ANY(sb, ofThese) (_tcscspn(sb.getBuffer(), _T(ofThese)) != static_cast(sb.len)) - - - StandardTokenizer::StandardTokenizer(Reader* reader): - rd(_CLNEW FastCharStream(reader)), - /* rdPos is zero-based. It starts at -1, and will advance to the first - ** position when readChar() is first called. */ - rdPos(-1), - tokenStart(-1) - { - } - - StandardTokenizer::~StandardTokenizer() { - _CLDELETE(rd); - } - - int StandardTokenizer::readChar() { - /* Increment by 1 because we're speaking in terms of characters, not - ** necessarily bytes: */ - rdPos++; - return rd->GetNext(); - } - - void StandardTokenizer::unReadChar() { - rd->UnGet(); - rdPos--; - } - - inline bool StandardTokenizer::setToken(Token* t, StringBuffer* sb, TokenTypes tokenCode) { - t->setStartOffset(tokenStart); - t->setEndOffset(tokenStart+sb->length()); - t->setType(tokenImage[tokenCode]); - sb->getBuffer(); //null terminates the buffer - t->resetTermTextLen(); - return true; - } - - bool StandardTokenizer::next(Token* t) { - int ch=0; - while (!EOS) { - ch = readChar(); - - if ( ch == 0 || ch == -1 ){ - continue; - } else if (SPACE) { - continue; - } else if (ALPHA || UNDERSCORE) { - tokenStart = rdPos; - return ReadAlphaNum(ch,t); - } else if (DIGIT || NEGATIVE_SIGN_ || DECIMAL) { - tokenStart = rdPos; - /* ReadNumber returns NULL if it fails to extract a valid number; in - ** that case, we just continue. */ - if (ReadNumber(NULL, ch,t)) - return true; - } else if ( _CJK ){ - if ( ReadCJK(ch,t) ) - return true; - } - } - return false; - } - - bool StandardTokenizer::ReadNumber(const TCHAR* previousNumber, const TCHAR prev,Token* t) { - /* previousNumber is only non-NULL if this function already read a complete - ** number in a previous recursion, yet has been asked to read additional - ** numeric segments. For example, in the HOST "192.168.1.3", "192.168" is - ** a complete number, but this function will recurse to read the "1.3", - ** generating a single HOST token "192.168.1.3". */ - t->growBuffer(LUCENE_MAX_WORD_LEN+1);//make sure token can hold the next word - StringBuffer str(t->_termText,t->bufferLength(),true); //use stringbuffer to read data onto the termText - TokenTypes tokenType; - bool decExhausted; - if (previousNumber != NULL) { - str.prepend(previousNumber); - tokenType = CL_NS2(analysis,standard)::HOST; - decExhausted = false; - } else { - tokenType = CL_NS2(analysis,standard)::NUM; - decExhausted = (prev == '.'); - } - if ( str.len >= LUCENE_MAX_WORD_LEN ){ - //if a number is too long, i would say there is no point - //storing it, because its going to be the wrong number anyway? - //what do people think? - return false; - } - str.appendChar(prev); - - const bool signExhausted = (prev == '-'); - int ch = prev; - - CONSUME_DIGITS; - - if (str.len < 2 /* CONSUME_DIGITS didn't find any digits. */ - && ( - (signExhausted && !DECIMAL) - || (decExhausted /* && !DIGIT is implied, since CONSUME_DIGITS stopped on a non-digit. */) - ) - ) - { - /* We have either: - ** a) a negative sign that's not followed by either digit(s) or a decimal - ** b) a decimal that's not followed by digit(s) - ** so this is not a valid number. */ - if (!EOS) { - /* Unread the character that stopped CONSUME_DIGITS: */ - unReadChar(); - } - return false; - } - - /* We just read a group of digits. Is it followed by a decimal symbol, - ** implying that there might be another group of digits available? */ - if (!EOS) { - if (DECIMAL) { - if ( str.len >= LUCENE_MAX_WORD_LEN ) - return false; //read above for rationale - str.appendChar(ch); - } else { - unReadChar(); - goto SUCCESSFULLY_EXTRACTED_NUMBER; - } - - CONSUME_DIGITS; - if (!DIGIT && !DECIMAL) { - unReadChar(); - } else if (!EOS && DECIMAL && _istdigit(rd->Peek())) { - /* We just read the fractional digit group, but it's also followed by - ** a decimal symbol and at least one more digit, so this must be a - ** HOST rather than a real number. */ - return ReadNumber(str.getBuffer(), '.',t); - } - } - - SUCCESSFULLY_EXTRACTED_NUMBER: - TCHAR rightmost = RIGHTMOST(str); - /* Don't including a trailing decimal point. */ - if (rightmost == '.') { - SHAVE_RIGHTMOST(str); - unReadChar(); - rightmost = RIGHTMOST(str); - } - /* If all we have left is a negative sign, it's not a valid number. */ - if (rightmost == '-') { - CND_PRECONDITION (str.len == 1, "Number is invalid"); - return false; - } - - return setToken(t,&str,tokenType); - } - - bool StandardTokenizer::ReadAlphaNum(const TCHAR prev, Token* t) { - t->growBuffer(LUCENE_MAX_WORD_LEN+1);//make sure token can hold the next word - StringBuffer str(t->_termText,t->bufferLength(),true); //use stringbuffer to read data onto the termText - if ( str.len < LUCENE_MAX_WORD_LEN ){ - str.appendChar(prev); - int ch = prev; - - CONSUME_WORD; - if (!EOS && str.len < LUCENE_MAX_WORD_LEN-1 ) { //still have space for 1 more character? - switch(ch) { /* What follows the first alphanum segment? */ - case '.': - str.appendChar('.'); - return ReadDotted(&str, CL_NS2(analysis,standard)::UNKNOWN,t); - case '\'': - str.appendChar('\''); - return ReadApostrophe(&str,t); - case '@': - str.appendChar('@'); - return ReadAt(&str,t); - case '&': - str.appendChar('&'); - return ReadCompany(&str,t); - /* default: fall through to end of this function. */ - } - } - } - return setToken(t,&str,CL_NS2(analysis,standard)::ALPHANUM); - } - - bool StandardTokenizer::ReadCJK(const TCHAR prev, Token* t) { - t->growBuffer(LUCENE_MAX_WORD_LEN+1);//make sure token can hold the next word - StringBuffer str(t->_termText,t->bufferLength(),true); //use stringbuffer to read data onto the termText - if ( str.len < LUCENE_MAX_WORD_LEN ){ - str.appendChar(prev); - int ch = prev; - - CONSUME_CJK; - } - return setToken(t,&str,CL_NS2(analysis,standard)::CJK); - } - - - bool StandardTokenizer::ReadDotted(StringBuffer* _str, TokenTypes forcedType, Token* t) { - const int32_t specialCharPos = rdPos; - StringBuffer& str=*_str; - - /* A segment of a "dotted" is not allowed to begin with another dot or a dash. - ** Even though hosts, e-mail addresses, etc., could have a dotted-segment - ** that begins with a dot or a dash, it's far more common in source text - ** for a pattern like "abc.--def" to be intended as two tokens. */ - int ch = rd->Peek(); - if (!(DOT || DASH)) { - bool prevWasDot; - bool prevWasDash; - if (str.len == 0) { - prevWasDot = false; - prevWasDash = false; - } else { - prevWasDot = RIGHTMOST(str) == '.'; - prevWasDash = RIGHTMOST(str) == '-'; - } - while (!EOS && str.len < LUCENE_MAX_WORD_LEN-1 ) { - ch = readChar(); - const bool dot = ch == '.'; - const bool dash = ch == '-'; - - if (!(ALNUM || UNDERSCORE || dot || dash)) { - break; - } - /* Multiple dots or dashes in succession end the token. - ** Consider the following inputs: - ** "Visit windowsupdate.microsoft.com--update today!" - ** "In the U.S.A.--yes, even there!" */ - if ((dot || dash) && (prevWasDot || prevWasDash)) { - /* We're not going to append the character we just read, in any case. - ** As to the character before it (which is currently RIGHTMOST(str)): - ** Unless RIGHTMOST(str) is a dot, in which we need to save it so the - ** acronym-versus-host detection can work, we want to get rid of it. */ - if (!prevWasDot) { - SHAVE_RIGHTMOST(str); - } - break; - } - - str.appendChar(ch); - - prevWasDot = dot; - prevWasDash = dash; - } - } - - /* There's a potential StringBuffer.append call in the code above, which - ** could cause str to reallocate its internal buffer. We must wait to - ** obtain the optimization-oriented strBuf pointer until after the initial - ** potentially realloc-triggering operations on str. - ** Because there can be other such ops much later in this function, strBuf - ** is guarded within a block to prevent its use during or after the calls - ** that would potentially invalidate it. */ - { /* Begin block-guard of strBuf */ - TCHAR* strBuf = str.getBuffer(); - - bool rightmostIsDot = RIGHTMOST_IS(str, '.'); - if (CONSUMED_NOTHING_OF_VALUE) { - /* No more alphanums available for this token; shave trailing dot, if any. */ - if (rightmostIsDot) { - SHAVE_RIGHTMOST(str); - } - /* If there are no dots remaining, this is a generic ALPHANUM. */ - if (_tcschr(strBuf, '.') == NULL) { - forcedType = CL_NS2(analysis,standard)::ALPHANUM; - } - - /* Check the token to see if it's an acronym. An acronym must have a - ** letter in every even slot and a dot in every odd slot, including the - ** last slot (for example, "U.S.A."). */ - } else if (rightmostIsDot) { - bool isAcronym = true; - const int32_t upperCheckLimit = str.len - 1; /* -1 b/c we already checked the last slot. */ - - for (int32_t i = 0; i < upperCheckLimit; i++) { - const bool even = (i % 2 == 0); - ch = strBuf[i]; - if ( (even && !ALPHA) || (!even && !DOT) ) { - isAcronym = false; - break; - } - } - if (isAcronym) { - forcedType = CL_NS2(analysis,standard)::ACRONYM; - } else { - /* If it's not an acronym, we don't want the trailing dot. */ - SHAVE_RIGHTMOST(str); - /* If there are no dots remaining, this is a generic ALPHANUM. */ - if (_tcschr(strBuf, '.') == NULL) { - forcedType = CL_NS2(analysis,standard)::ALPHANUM; - } - } - } - } /* End block-guard of strBuf */ - - if (!EOS) { - if (ch == '@' && str.len < LUCENE_MAX_WORD_LEN-1) { - str.appendChar('@'); - return ReadAt(&str,t); - } else { - unReadChar(); - } - } - - return setToken(t,&str,CL_NS2(analysis,standard)::UNKNOWN - ? forcedType : CL_NS2(analysis,standard)::HOST); - } - - bool StandardTokenizer::ReadApostrophe(StringBuffer* _str, Token* t) { - StringBuffer& str=*_str; - - TokenTypes tokenType = CL_NS2(analysis,standard)::APOSTROPHE; - const int32_t specialCharPos = rdPos; - int ch=0; - - CONSUME_ALPHAS; - if (RIGHTMOST_IS(str, '\'') || CONSUMED_NOTHING_OF_VALUE) { - /* After the apostrophe, no more alphanums were available within this - ** token; shave trailing apostrophe and revert to generic ALPHANUM. */ - SHAVE_RIGHTMOST(str); - tokenType = CL_NS2(analysis,standard)::ALPHANUM; - } - if (!EOS) { - unReadChar(); - } - - return setToken(t,&str,tokenType); - } - - bool StandardTokenizer::ReadAt(StringBuffer* str, Token* t) { - ReadDotted(str, CL_NS2(analysis,standard)::EMAIL,t); - /* JLucene grammar indicates dots/digits not allowed in company name: */ - if (!CONTAINS_ANY((*str), ".0123456789")) { - setToken(t,str,CL_NS2(analysis,standard)::COMPANY); - } - return true; - } - - bool StandardTokenizer::ReadCompany(StringBuffer* _str, Token* t) { - StringBuffer& str = *_str; - const int32_t specialCharPos = rdPos; - int ch=0; - - CONSUME_WORD; - if (CONSUMED_NOTHING_OF_VALUE) { - /* After the ampersand, no more alphanums were available within this - ** token; shave trailing ampersand and revert to ALPHANUM. */ - CND_PRECONDITION(RIGHTMOST_IS(str, '&'),"ReadCompany failed"); - SHAVE_RIGHTMOST(str); - - - return setToken(t,&str,CL_NS2(analysis,standard)::ALPHANUM); - } - if (!EOS) { - unReadChar(); - } - - return setToken(t,&str,CL_NS2(analysis,standard)::COMPANY); - } - -CL_NS_END2 diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/analysis/standard/StandardTokenizer.h qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/analysis/standard/StandardTokenizer.h --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/analysis/standard/StandardTokenizer.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/analysis/standard/StandardTokenizer.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,88 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#ifndef _lucene_analysis_standard_StandardTokenizer -#define _lucene_analysis_standard_StandardTokenizer - -#if defined(_LUCENE_PRAGMA_ONCE) -# pragma once -#endif - -#include "../AnalysisHeader.h" -#include "../Analyzers.h" -#include "StandardTokenizerConstants.h" -#include "CLucene/util/StringBuffer.h" -#include "CLucene/util/FastCharStream.h" -#include "CLucene/util/Reader.h" - - -CL_NS_DEF2(analysis,standard) - -/** A grammar-based tokenizer constructed with JavaCC. - * - *

This should be a good tokenizer for most European-language documents: - * - *

    - *
  • Splits words at punctuation characters, removing punctuation. However, a - * dot that's not followed by whitespace is considered part of a token. - *
  • Splits words at hyphens, unless there's a number in the token, in which case - * the whole token is interpreted as a product number and is not split. - *
  • Recognizes email addresses and internet hostnames as one token. - *
- * - *

Many applications have specific tokenizer needs. If this tokenizer does - * not suit your application, please consider copying this source code - * directory to your project and maintaining your own grammar-based tokenizer. - */ - class StandardTokenizer: public Tokenizer { - private: - int32_t rdPos; - int32_t tokenStart; - - // Advance by one character, incrementing rdPos and returning the character. - int readChar(); - // Retreat by one character, decrementing rdPos. - void unReadChar(); - - // createToken centralizes token creation for auditing purposes. - //Token* createToken(CL_NS(util)::StringBuffer* sb, TokenTypes tokenCode); - inline bool setToken(Token* t, CL_NS(util)::StringBuffer* sb, TokenTypes tokenCode); - - bool ReadDotted(CL_NS(util)::StringBuffer* str, TokenTypes forcedType,Token* t); - - public: - CL_NS(util)::FastCharStream* rd; - - // Constructs a tokenizer for this Reader. - StandardTokenizer(CL_NS(util)::Reader* reader); - - ~StandardTokenizer(); - - /** Returns the next token in the stream, or false at end-of-stream. - * The returned token's type is set to an element of - * StandardTokenizerConstants::tokenImage. */ - bool next(Token* token); - - // Reads for number like "1"/"1234.567", or IP address like "192.168.1.2". - bool ReadNumber(const TCHAR* previousNumber, const TCHAR prev, Token* t); - - bool ReadAlphaNum(const TCHAR prev, Token* t); - - // Reads for apostrophe-containing word. - bool ReadApostrophe(CL_NS(util)::StringBuffer* str, Token* t); - - // Reads for something@... it may be a COMPANY name or a EMAIL address - bool ReadAt(CL_NS(util)::StringBuffer* str, Token* t); - - // Reads for COMPANY name like AT&T. - bool ReadCompany(CL_NS(util)::StringBuffer* str, Token* t); - - // Reads CJK characters - bool ReadCJK(const TCHAR prev, Token* t); - }; - -CL_NS_END2 -#endif diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/CLBackwards.h qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/CLBackwards.h --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/CLBackwards.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/CLBackwards.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,87 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#ifndef _clucene_backwards_h -#define _clucene_backwards_h - -//In light of the recent major changes to clucene, -//this file should help to maintain some backwards compatibility -//include it after including StdHeader.h -// -//Note: I haven't tested this much, so please send me your changes - -//dirent is one of the most major changes that won't easily port. -//you can use the TCHAR copying macros, STRCPY_TtoA and STRCPY_AtoT -//to copy between different character types. - -//If you use stringPrintF, you will need to add the target string -//size parameter, because it is using _sntprintf... Change this if you -//want, but _sntprintf is much safer - -#define char_t TCHAR -#define uchar_t TCHAR -#define l_byte_t byte_t - -//#define stringSpn _tcsspn //not used in clucene anymore -#define stringCSpn _tcscspn -#define stringLength _tcslen -//#define stringToInteger _ttoi //not used in clucene anymore, use integer w/ base -#define stringFind _tcsstr -#define stringFindChar _tcschr -#define stringCompare _tcscmp -#define stringNCopy _tcsncpy -#define stringCopy _tcscpy -#define stringCat _tcscat -//#define stringToken _tcstok //not used in clucene anymore -#define stringPrintF _sntprintf //you will have errors, because now we used printf w/ bufferlen count -#define printFormatted _tprintf - -//conversion functions -#define integerToString _i64tot -#define stringToIntegerBase _tcstoi64 -#define stringToFloat _tcstod - -//file find structures -#define Cmd_Stat fileStat -#define Struct_Stat fileStat -#define stringICompare _tcsicmp -#define stringNCompare _tcsncmp -#define stringDifference _tcscmp - -//character conversion functions -#define isSpace _istspace -#define isDigit _istwdigit -#define isAlNum _istwalnum -#define toLower _totlower -#define stringUpper _tcsupr -//#define stringLower _tcslwr //not used in clucene anymore - -#define _THROWX(y) _THROWT(y) -#define _THROWC(y) _THROWA(y) - -//file naming stuff - remember we have changed all names to file naming lower case -#define fileRename _rename -#define fileFullName(abs,rel) _realpath(rel,abs) -#define makeDirectory _tmkdir -#define unlinkFile _unlink - -//no longer supported definitions -#ifdef _UNICODE - #define TO_CHAR_T STRDUP_AtoT - #define _cout wcout - #define _cin wcin - #define _cerr wcerr -#else - #define TO_CHAR_T STRDUP_WtoT - #define _cout cout - #define _cin cin - #define _cerr cerr -#endif - -//some headers that used to be automatically included: -#include "CLucene/util/dirent.h" //if we have dirent, then the native one will be used - -#endif diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/CLConfig.h qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/CLConfig.h --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/CLConfig.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/CLConfig.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,304 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#ifndef _lucene_Config_ -#define _lucene_Config_ - - -//////////////////////////////////////////////////////////////////// -// this settings should be set up in the compiler, -// but are put here for reference as to what could be defined -//////////////////////////////////////////////////////////////////// -// -//define this if you want debugging code to be enabled -//#define _DEBUG -// -//define this if you want condition debugging to be enabled -#if defined(_DEBUG) && !defined(_CL__CND_DEBUG) - #define _CL__CND_DEBUG -#endif -// -//define this to print out lots of information about merges, etc -//requires __CL__CND_DEBUG to be defined -//#define _CL_DEBUG_INFO stdout -// -//to disable namespaces define this -//#define DISABLE_NAMESPACE -// -//This is mostly for windows. If you have put the google sparse -//map code in your include path somewhere, then define this -//to use it. -//However, for msvc, there are no significant gains since there -//is already a compatible hashmap available. -//#define _CL_HAVE_GOOGLE_DENSE_HASH_MAP -// -//////////////////////////////////////////////////////////////////// - -//////////////////////////////////////////////////////////////////// -// These options can be set depending on the particular needs of -// Your application -//////////////////////////////////////////////////////////////////// -// -//define this to force the build into ascii mode -//#define _ASCII -// -//define this to force the build into ucs2 mode -//#define _UCS2 -// -//if a wide character is being converted to a ascii character and it -//cannot fit, this character is used instead. Required. -#define LUCENE_OOR_CHAR(c) ((char)(((unsigned short)c)&0xFF)) -// -//define if you would like to force clucene to use the internal -//character functions. -//Tests may display unpredictable behaviour if this is not defined. -#define LUCENE_USE_INTERNAL_CHAR_FUNCTIONS -// -//define this to enable mmap support in the fsdirectory IndexInput -//todo: only available for windows so far...need to add MMapInput.cpp to project -//EXPERIMENTAL -//#define LUCENE_FS_MMAP -// -//LOCK_DIR implementation: -//define this to set an exact directory for the lock dir (not recommended) -//all other methods of getting the temporary directory will be ignored -//#define LUCENE_LOCK_DIR "/tmp" -// -//define this to try and load the lock dir from this specified environment variable -#define LUCENE_LOCK_DIR_ENV_1 "TEMP" -//define this if you want to have look up this environment variable if the first one fails -#define LUCENE_LOCK_DIR_ENV_2 "TMP" -//define this if you want to have a fallback directory, if not defined then -//the lockdirectory will be the index directory -#define LUCENE_LOCK_DIR_ENV_FALLBACK "/tmp" -// -//////////////////////////////////////////////////////////////////// - - - -//////////////////////////////////////////////////////////////////// -// The following are search query options -// THe NO_* options can make CLucene faster and/or smaller -// special queries sometime require longer search times or may -// not be required -//////////////////////////////////////////////////////////////////// -// -//Define this to remove fuzzy query and sloppy scoring -//#define NO_FUZZY_QUERY -// -//Define to remove wildcard t*m or te?m to match term -//#define NO_WILDCARD_QUERY -// -//Define to remove prefix term query - ter* to match term or terms -//#define NO_PREFIX_QUERY -// -//Define to remove range (exlusive and inclusive) -//#define NO_RANGE_QUERY -// -//This must always be defined. They can be adjusted if required. But -//general Wildcard string would be '*' and Wildcard Char would be '?' -//Both are Required. -#define LUCENE_WILDCARDTERMENUM_WILDCARD_STRING '*' -#define LUCENE_WILDCARDTERMENUM_WILDCARD_CHAR '?' -// -//////////////////////////////////////////////////////////////////// - -//////////////////////////////////////////////////////////////////// -// memory handling configurations -//////////////////////////////////////////////////////////////////// -// -//If this is defined, lucene's configurations are changed -//to use less memory, but may run slower. -//todo: i dont think this actualy changes speed much, just memory -#define LUCENE_OPTIMIZE_FOR_MEMORY -// -//define this if you want the pointer tracking to be enabled -//this is a useful tool for memory leak tracking -//The LuceneBase can slow down the code a *lot* -#if defined(_DEBUG) - #if !defined(LUCENE_DISABLE_MEMTRACKING) && !defined(LUCENE_ENABLE_MEMLEAKTRACKING) - #define LUCENE_ENABLE_MEMLEAKTRACKING - #endif -#endif -// -//enable use of rich file/line tracking. use CL_FILELINE to pass -//to functions like stringDuplicate (or use CL_STRDUP* functions instead) and -//CLStringIntern::x. -#if defined(LUCENE_ENABLE_MEMLEAKTRACKING) - #define LUCENE_ENABLE_FILELINEINFO -#endif -// -//enable creation of clucene.log file. Logs every -//call to new operator. Must have LUCENE_ENABLE_MEMLEAKTRACKING enabled. -//writes log in this format. -//action,file name,file line,allocation size -//logging can be disabled by setting _lucene_disable_debuglogging to true -#if defined(LUCENE_ENABLE_MEMLEAKTRACKING) && defined(_DEBUG) -//#define LUCENE_ENABLE_CONSTRUCTOR_LOG -#endif -// -// -//enable this if you want to enable reference counting. This is -//not necessary or useful in most cases except when implementing wrappers -//which have reference counting. If the wrapper wraps a StringReader, -//for example, it should expect that the wrapped StringReader should not -//be deleted. However, when the stringreader is added into a Field, -//the Field usually takes over the stringReader and deletes it on completion. -//If reference counting is enabled, the wrapper can add a reference to any class -//and when _CLDECDELETE is called, the reference is decremented and only deleted -//if the refcount is zero. -#define LUCENE_ENABLE_REFCOUNT - - -//////////////////////////////////////////////////////////////////// -// These options allow you to remove certain implementations -// out of clucene so that they can be implemented in the client -// application -//////////////////////////////////////////////////////////////////// -// -//define this to your own setting if you would like to implement your own -//threading locking code. it should have the same sort of functions as -//mutex_default. If not defined, clucene will try and use posix,win32 critical -//sections, or a timer based mutex hack. -//#define _LUCENE_THREADMUTEX CL_NS(util)::mutex_default -// -//define this if you want to implement the _Cnd_OutDebug routine yourself -//you can then easily customise in your own application how to handle debug messages -//#define _CND_DEBUG_DONTIMPLEMENT_OUTDEBUG -// -//define this if you want to implement your own namespace macros -//#define _LUCENE_DONTIMPLEMENT_NS_MACROS -// -//define this if you do not want clucene to include any standard libraries. -//this could be useful if you want to use alternate libraries -//#define LUCENE_DISABLE_INCLUDES -// -//////////////////////////////////////////////////////////////////// - - -//////////////////////////////////////////////////////////////////// -// These options will be changed depending on your compiler/platform -// but can also be changed here if required -//////////////////////////////////////////////////////////////////// -// -//define this if multi-threading support is not required -//if not defined, multi-thread locking will -//occur (and its related processing overhead) -//note: it is recommended to disable multithreading if you do not need it -//there is a lot of overhead that can be avoided. -//#define _CL_DISABLE_MULTITHREADING -// -//if you want to define your own default file encoding. specify it -//here - normally defined in the platform specific headers -//#define PLATFORM_DEFAULT_READER_ENCODING CL_NS(util)::FileReader::ENCODING_ASCII -// -//disable hash implementations (if available) -//#define LUCENE_DISABLE_HASHING -//////////////////////////////////////////////////////////////////// - - - -//////////////////////////////////////////////////////////////////// -// These options should not be changed. But you can experiment with -// them to optimize performance -//////////////////////////////////////////////////////////////////// -// -//some defaults, wouldn't usually need to be changed -//Buffer size for input/output streams. Required. -#define LUCENE_STREAM_BUFFER_SIZE 1024 -// -// DSR:2004.08.19: -// Formerly, StringBuffer used 1024 as the default size of its internal buffer. -// However, StringBuffer is used primarily for token- and term-oriented -// processing, e.g. in StandardTokenizer. I've calculated that the average -// token (as produced by StandardTokenizer) in all .txt files distributed in -// the Project Gutenberg CD Image (August 2003 release) has only 6 characters. -// Although most languages are likely to have a longer average word length than -// English due to the popularity of "non-atomized" conjugation and declension -// mechanisms, 1024 is still vastly excessive. -// I made two changes intended to deliver better overall performance: -// a) Switched to a default StringBuffer character capacity of 32. Though 32 -// is longer than the average token, the high cost of realloc makes a -// slightly liberal default size optimal. I chose the default size of 32 -// after fairly extensive experimentation on the Gutenberg e-texts. The -// results are summarized in the following table: -// ------------------------------------------------------------------------ -// LUCENE_DEFAULT_TOKEN_BUFFER_SIZE value | % faster than default size 1024 -// ------------------------------------------------------------------------ -// 8 : 4% -// 16 : 7% -// 32 : 6% -// 64 : 3% -// A default size of 32 is actually slightly slower than 16, but I was -// experimenting on English text; I expect that 32 will maintain decent -// performance in languages such as German, and in technical documents -// with long tokens. -// -// b) To offset the switch to a smaller default buffer size, I implemented a -// more aggressive growth strategy. A StringBuffer now [at least] doubles -// the size of its internal buffer every time it needs to grow, rather -// than [at least] increasing by LUCENE_DEFAULT_TOKEN_BUFFER_SIZE no -// matter how many times it has already grown. -//Required. -#define LUCENE_DEFAULT_TOKEN_BUFFER_SIZE 32 -//todo: should implement a similar strategy in analysis/token -// -//Expert: The fraction of {@link TermDocs} entries stored in skip tables, -//used to accellerate {@link TermDocs#skipTo(int)}. Larger values result in -//smaller indices, greater acceleration, but fewer accelerable cases, while -//smaller values result in bigger indices, less acceleration and more -//accelerable cases. More detailed experiments would be useful here. */ -#define LUCENE_DEFAULT_TERMDOCS_SKIP_INTERVAL 16 -// -//Size of TermScore cache. Required. -#define LUCENE_SCORE_CACHE_SIZE 32 -// -//analysis options -//maximum length that the CharTokenizer uses. Required. -//By adjusting this value, you can greatly improve the performance of searching -//and especially indexing. Default is 255, but smaller numbers will decrease -//the amount of memory used as well as increasing the speed. -#define LUCENE_MAX_WORD_LEN 255 -//Maximum length of a token word. -//Should be the same or more than LUCENE_MAX_WORD_LEN -//if not defined, then no token limit, but may be slower -//if defined will be faster (up to 15% in some cases), but will use more memory -#ifndef LUCENE_OPTIMIZE_FOR_MEMORY - #define LUCENE_TOKEN_WORD_LENGTH LUCENE_MAX_WORD_LEN -#endif -// -//maximum field length. some optimisation can be done if a maximum field -//length is given... The smaller the better -#define LUCENE_MAX_FIELD_LEN 100 -// -//The initial value set to BooleanQuery::maxClauseCount. Default is 1024 -#define LUCENE_BOOLEANQUERY_MAXCLAUSECOUNT 1024 -// -//bvk: 12.3.2005 -//============================================================================== -//Previously the way the tokenizer has worked has been changed to optionally -//use a a fixed word length. I have implemented this in the Term class as well. -//It seems that by predefining the text length instead of using new TCHAR[x] -//in the constructor greatly improves the performance by 20-30% for certain -//operations. -//Maximum length of a term text. -//Should be the same or more than LUCENE_MAX_WORD_LEN -//if not defined, then no term text limit, but may be slower -//if defined will be faster (up to 30% in some cases), but will use more memory -#ifndef LUCENE_OPTIMIZE_FOR_MEMORY - #define LUCENE_TERM_TEXT_LENGTH LUCENE_MAX_WORD_LEN -#endif -// -//Size of the CharTokenizer buffersize. Required. -#define LUCENE_IO_BUFFER_SIZE 1024 -// -//the minimum amount the segment term enum should grow by. Must be at least 1 -#define LUCENE_SEGMENTTERMENUM_GROWSIZE 8 -// -//////////////////////////////////////////////////////////////////// - -#endif - diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/CLMonolithic.cpp qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/CLMonolithic.cpp --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/CLMonolithic.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/CLMonolithic.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,115 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -* -* Changes are Copyright (C) 2015 The Qt Company Ltd. -------------------------------------------------------------------------------*/ -/* -* this is a monolithic file that can be used to compile clucene using one source file. -* it simplifies some build processes by avoiding static & dynamic compalation pitfalls. -* -* note: when creating a project add either this file, or all the other .cpp files, not both! -*/ -#include "CLucene/StdHeader.cpp" -#include "CLucene/analysis/Analyzers.cpp" -#include "CLucene/analysis/AnalysisHeader.cpp" -#include "CLucene/analysis/standard/StandardAnalyzer.cpp" -#include "CLucene/analysis/standard/StandardFilter.cpp" -#include "CLucene/analysis/standard/StandardTokenizer.cpp" -#include "CLucene/config/gunichartables.cpp" -#include "CLucene/config/repl_tcscasecmp.cpp" -#include "CLucene/config/repl_tcslwr.cpp" -#include "CLucene/config/repl_tcstod.cpp" -#include "CLucene/config/repl_lltot.cpp" -#include "CLucene/config/repl_tcstoll.cpp" -#include "CLucene/config/repl_tprintf.cpp" -#include "CLucene/config/threads.cpp" -#include "CLucene/config/utf8.cpp" -#include "CLucene/debug/condition.cpp" -#include "CLucene/debug/error.cpp" -#include "CLucene/debug/memtracking.cpp" -#include "CLucene/document/DateField.cpp" -#include "CLucene/document/Document.cpp" -#include "CLucene/document/Field.cpp" -#include "CLucene/index/CompoundFile.cpp" -#include "CLucene/index/DocumentWriter.cpp" -#include "CLucene/index/FieldInfos.cpp" -#include "CLucene/index/FieldsReader.cpp" -#include "CLucene/index/FieldsWriter.cpp" -#include "CLucene/index/IndexWriter.cpp" -#include "CLucene/index/IndexReader.cpp" -#include "CLucene/index/MultiReader.cpp" -#include "CLucene/index/SegmentInfos.cpp" -#include "CLucene/index/SegmentMergeInfo.cpp" -#include "CLucene/index/SegmentMergeQueue.cpp" -#include "CLucene/index/SegmentMerger.cpp" -#include "CLucene/index/SegmentReader.cpp" -#include "CLucene/index/SegmentTermDocs.cpp" -#include "CLucene/index/SegmentTermEnum.cpp" -#include "CLucene/index/SegmentTermPositions.cpp" -#include "CLucene/index/SegmentTermVector.cpp" -#include "CLucene/index/Term.cpp" -#include "CLucene/index/TermInfo.cpp" -#include "CLucene/index/TermInfosReader.cpp" -#include "CLucene/index/TermInfosWriter.cpp" -#include "CLucene/index/TermVectorReader.cpp" -#include "CLucene/index/TermVectorWriter.cpp" -#include "CLucene/queryParser/Lexer.cpp" -#include "CLucene/queryParser/MultiFieldQueryParser.cpp" -#include "CLucene/queryParser/QueryParser.cpp" -#include "CLucene/queryParser/QueryParserBase.cpp" -#include "CLucene/queryParser/QueryToken.cpp" -#include "CLucene/queryParser/TokenList.cpp" -#include "CLucene/search/BooleanQuery.cpp" -#include "CLucene/search/BooleanScorer.cpp" -#include "CLucene/search/CachingWrapperFilter.cpp" -#include "CLucene/search/ChainedFilter.cpp" -#include "CLucene/search/DateFilter.cpp" -#include "CLucene/search/ConjunctionScorer.cpp" -#include "CLucene/search/ExactPhraseScorer.cpp" -#include "CLucene/search/Explanation.cpp" -#include "CLucene/search/FieldCache.cpp" -#include "CLucene/search/FieldCacheImpl.cpp" -#include "CLucene/search/FieldDocSortedHitQueue.cpp" -#include "CLucene/search/FieldSortedHitQueue.cpp" -#include "CLucene/search/FilteredTermEnum.cpp" -#include "CLucene/search/FuzzyQuery.cpp" -#include "CLucene/search/Hits.cpp" -#include "CLucene/search/HitQueue.cpp" -#include "CLucene/search/IndexSearcher.cpp" -#include "CLucene/search/MultiSearcher.cpp" -#include "CLucene/search/MultiTermQuery.cpp" -#include "CLucene/search/PhrasePositions.cpp" -#include "CLucene/search/PhraseQuery.cpp" -#include "CLucene/search/PhraseScorer.cpp" -#include "CLucene/search/PrefixQuery.cpp" -#include "CLucene/search/QueryFilter.cpp" -#include "CLucene/search/RangeQuery.cpp" -#include "CLucene/search/RangeFilter.cpp" -#include "CLucene/search/SearchHeader.cpp" -#include "CLucene/search/Similarity.cpp" -#include "CLucene/search/SloppyPhraseScorer.cpp" -#include "CLucene/search/Sort.cpp" -#include "CLucene/search/TermQuery.cpp" -#include "CLucene/search/TermScorer.cpp" -#include "CLucene/search/WildcardQuery.cpp" -#include "CLucene/search/WildcardTermEnum.cpp" -#include "CLucene/store/FSDirectory.cpp" -#include "CLucene/store/IndexInput.cpp" -#include "CLucene/store/Lock.cpp" -#include "CLucene/store/MMapInput.cpp" -#include "CLucene/store/IndexOutput.cpp" -#include "CLucene/store/RAMDirectory.cpp" -#include "CLucene/store/TransactionalRAMDirectory.cpp" -#include "CLucene/util/BitSet.cpp" -#include "CLucene/util/Equators.cpp" -#include "CLucene/util/FastCharStream.cpp" -#include "CLucene/util/fileinputstream.cpp" -#include "CLucene/util/Misc.cpp" -#include "CLucene/util/Reader.cpp" -#include "CLucene/util/StringBuffer.cpp" -#include "CLucene/util/StringIntern.cpp" -#include "CLucene/util/dirent.cpp" -#include "CLucene/util/ThreadLocal.cpp" diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/config/CompilerAcc.h qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/config/CompilerAcc.h --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/config/CompilerAcc.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/config/CompilerAcc.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,166 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -* -* Changes are Copyright (C) 2015 The Qt Company Ltd. -------------------------------------------------------------------------------*/ -#if !defined(_lucene_COMPILER_ACC) -#define _lucene_COMPILER_ACC - -// It is internal CLucene header - DO NOT include it directly -#if !defined(_SUPPRESS_MAKE_BASED_CONFIG) -#if defined(_BUILD_FOR_QT_) -#include "fulltextsearch/qclucene-config_p.h" -#else -#include "CLucene/clucene-config.h" //make clucene-config.h file -#endif -#endif - -#if defined(_ASCII) -#undef _UCS2 -#elif defined(_UCS2) -// -#else -#define CL_CHARSET_GUESS -#endif - -//dont allow FS_MMAP if mmap is not available -#if defined(LUCENE_FS_MMAP) && !defined(_CL_HAVE_MMAP) -#error "LUCENE_FS_MMAP is defined and MMap doesn't appear to be available" -#endif - -#ifdef _CL_HAVE_NO_FUNCTION_TRY_BLOCKS -#undef _LUCENE_DISABLE_EXCEPTIONS -#define _LUCENE_DISABLE_EXCEPTIONS - -#error "this is bad if you made it here... your compiler seems not to have try/catch blocks." -#error "maybe you could implement an alternative solution for us? :)" -#endif - -#ifndef _CL_HAVE_NAMESPACES -#define DISABLE_NAMESPACE -#endif - -#define LUCENE_DISABLE_HASHING //we could enable this, but so far test show that the hashing is slower :( - -//define the file functions -#define fileSeek lseek -#define fileSize _filelength -#define fileStat stat -#define fileHandleStat fstat -#ifdef _CL_HAVE_TELL -#define fileTell tell -#else -//ftell (and probably soon ftell64) are POSIX standard functions, but tell and -//tell64 are not, so we define fileTell in terms of fileSeek. -#define fileTell(fhandle) fileSeek(fhandle, 0, SEEK_CUR) -#endif - -//this is needed early on so that CL_MAX_PATH can be correctly determined -//in the StdHeader.h. This was earlier causing problems with macosx. -//:: crash was due to realpath() that expects an output arguments that -//has at least the size of PATH_MAX (even if the result has a lower size) -#include - -#ifndef _CL_HAVE_WCHAR_T - typedef unsigned short wchar_t; -#endif - -#if defined(__CYGWIN__) -//cygwin seems to incorrectly define that it has wprintf??? -#undef _CL_HAVE_WPRINTF -#elif defined(__MINGW32__) -# ifndef _CL_HAVE_WINDOWS_H -# define _CL_HAVE_WINDOWS_H -# endif -#endif - - -/////////////////////////////////////////////////////////////////////////////// -//end _lucene_COMPILER_ACC -#elif !defined(_lucene_COMPILER_ACC2) -#define _lucene_COMPILER_ACC2 -//second inclusion - - //types - #if defined(_CL_HAVE_SYS_TYPES_H) - #include - #endif - #if defined(_CL_HAVE_INTTYPES_H) - #include - #elif defined(_CL_HAVE_STDINT_H) - #include - #else - #if _CL_SIZEOF_UNSIGNED_LONG_LONG==8 - typedef unsigned long long uint64_t; - typedef long long int64_t; - #elif _CL_SIZEOF_UNSIGNED_LONG==8 - typedef unsigned long uint64_t; - typedef long int64_t; - #else - #error I do not know what to use for a uint64_t. - #endif - - /* Give us an unsigned 32-bit data type. */ - #if _CL_SIZEOF_UNSIGNED_LONG==4 - typedef unsigned long uint32_t; - typedef long int32_t; - #elif _CL_SIZEOF_UNSIGNED_INT==4 - typedef unsigned int uint32_t; - typedef int int32_t; - #else - #error I do not know what to use for a uint32_t. - #endif - - /* An unsigned 8-bit data type */ - #if _CL_SIZEOF_UNSIGNED_CHAR==1 - typedef unsigned char uint8_t; - #else - #error I do not know what to use for a uint8_t. - #endif - #endif - - //second chance to fix default settings - //this must be defined later, otherwise it messes up - //the standard libraries - #if !defined(__MINGW32__) - #define _close ::close - #define _read ::read - #endif - - //now that int64_t is defined, we can define this... - #ifndef _CL_HAVE_FILELENGTH - #undef fileSize - #define fileSize lucene_filelength - int64_t lucene_filelength(int handle); - #endif - -#elif !defined(_lucene_COMPILER_ACC3) -#define _lucene_COMPILER_ACC3 - //third inclusion - - #if !defined(__MINGW32__) - //define replacements - #define O_RANDOM 0 - #undef O_BINARY - #define O_BINARY 0 - #define _S_IREAD 0444 - #define _S_IWRITE 0333 // write and execute permissions - - //some functions that are needed - not charset dependent and not tchar type functions - #define _open open - #define _write write - #define _snprintf snprintf - - //clucene uses ascii for filename interactions - #define _realpath(rel,abs) realpath(rel,abs) - #define _mkdir(x) mkdir(x,0777) - #define _unlink unlink - #else - #define _realpath(rel,abs) _fullpath(abs,rel,CL_MAX_PATH) - #endif - //also required by mingw - #define _rename rename -#endif diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/config/CompilerBcb.h qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/config/CompilerBcb.h --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/config/CompilerBcb.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/config/CompilerBcb.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,68 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#if !defined(_lucene_COMPILER_BCB) -#define _lucene_COMPILER_BCB - -// It is internal CLucene header - DO NOT include it directly - -#include "CLucene/config/define_std.h" -#undef _CL_HAVE_STRTOLL -#undef _CL_HAVE_WCSTOLL - -#define _LUCENE_PRAGMA_ONCE -#define _LUCENE_PRAGMA_WARNINGS //tell lucene to display warnings using pragmas instead of #warning -#define LUCENE_DISABLE_HASHING -#define LUCENE_STATIC_CONSTANT(type, assignment) enum { assignment } - -#undef LUCENE_ENABLE_MEMLEAKTRACKING //it has been reported that this causes problems - -#define fileSize filelength -#define fileSeek lseek -#define fileTell tell -#define fileStat stat -#define fileHandleStat fstat - -#define O_RANDOM 0 - -//java long type -typedef __int64 int64_t; -typedef unsigned __int64 uint64_t; - -//java int type -typedef int int32_t; -typedef unsigned int uint32_t; - -//java byte type -typedef unsigned char uint8_t; - -//floating point type -//we are going to use qreal now -//typedef double float_t; - -//required type -typedef int intptr_t; - -#define _CL_ILONG(x) x ## L -#define _ILONGLONG(x) x ## i64 - - -#elif !defined(_lucene_COMPILER_BCB2) -#define _lucene_COMPILER_BCB2 - //second inclusion - - #define _open open - #define _timeb timeb - #define _ftime ::ftime - #define _rename rename - - #define _realpath(rel,abs) _fullpath(abs,rel,CL_MAX_PATH) - -#elif !defined(_lucene_COMPILER_BCB3) -#define _lucene_COMPILER_BCB3 - //third inclusion - -#endif diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/config/CompilerGcc.h qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/config/CompilerGcc.h --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/config/CompilerGcc.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/config/CompilerGcc.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,175 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -* -* Changes are Copyright (C) 2015 The Qt Company Ltd. -------------------------------------------------------------------------------*/ -#if !defined(_lucene_COMPILER_GCC) -#define _lucene_COMPILER_GCC - -// It is internal CLucene header - DO NOT include it directly -#if !defined(_SUPPRESS_MAKE_BASED_CONFIG) - #if defined(_BUILD_FOR_QT_) - #include "qclucene-config_p.h" - #else - #include "CLucene/clucene-config.h" //make clucene-config.h file - #endif -#endif - -#if defined(_ASCII) - #undef _UCS2 -#elif defined(_UCS2) -// -#else - #define CL_CHARSET_GUESS -#endif - -//dont allow FS_MMAP if mmap is not available -#if defined(LUCENE_FS_MMAP) && !defined(_CL_HAVE_MMAP) - #error "LUCENE_FS_MMAP is defined and MMap doesn't appear to be available" -#endif - -#ifdef _CL_HAVE_NO_FUNCTION_TRY_BLOCKS - #undef _LUCENE_DISABLE_EXCEPTIONS - #define _LUCENE_DISABLE_EXCEPTIONS - - #error "this is bad if you made it here... your compiler seems not to have try/catch blocks." - #error "maybe you could implement an alternative solution for us? :)" -#endif - -#ifndef _CL_HAVE_NAMESPACES - #define DISABLE_NAMESPACE -#endif - -#define CL_NS_HASHING(func) __gnu_cxx::func -#define LUCENE_DISABLE_HASHING //we could enable this, but so far test show that the hashing is slower :( - -//define the file functions -#define fileSeek lseek -#define fileSize _filelength -#define fileStat stat -#define fileHandleStat fstat -#ifdef _CL_HAVE_TELL - #define fileTell tell -#else - //ftell (and probably soon ftell64) are POSIX standard functions, but tell and - //tell64 are not, so we define fileTell in terms of fileSeek. - #define fileTell(fhandle) fileSeek(fhandle, 0, SEEK_CUR) -#endif - -//this is needed early on so that CL_MAX_PATH can be correctly determined -//in the StdHeader.h. This was earlier causing problems with macosx. -//:: crash was due to realpath() that expects an output arguments that -//has at least the size of PATH_MAX (even if the result has a lower size) -#include - -#ifndef _CL_HAVE_WCHAR_T - typedef unsigned short wchar_t; -#endif - -#if defined(__CYGWIN__) - //cygwin seems to incorrectly define that it has wprintf??? - #undef _CL_HAVE_WPRINTF -#elif defined(__MINGW32__) - #ifndef _CL_HAVE_WINDOWS_H - #define _CL_HAVE_WINDOWS_H - #endif -#endif - - -/////////////////////////////////////////////////////////////////////////////// -//end _lucene_COMPILER_GCC1 -#elif !defined(_lucene_COMPILER_GCC2) -#define _lucene_COMPILER_GCC2 - //second inclusion - - //types - #if defined(_CL_HAVE_SYS_TYPES_H) - #include - #endif - #if defined(_CL_HAVE_INTTYPES_H) - #include - #elif defined(_CL_HAVE_STDINT_H) - #include - #else - #if _CL_SIZEOF_UNSIGNED_LONG_LONG==8 - typedef unsigned long long uint64_t; - typedef long long int64_t; - #elif _CL_SIZEOF_UNSIGNED_LONG==8 - typedef unsigned long uint64_t; - typedef long int64_t; - #else - #error I do not know what to use for a uint64_t. - #endif - - /* Give us an unsigned 32-bit data type. */ - #if _CL_SIZEOF_UNSIGNED_LONG==4 - typedef unsigned long uint32_t; - typedef long int32_t; - #elif _CL_SIZEOF_UNSIGNED_INT==4 - typedef unsigned int uint32_t; - typedef int int32_t; - #else - #error I do not know what to use for a uint32_t. - #endif - - /* An unsigned 8-bit data type */ - #if _CL_SIZEOF_UNSIGNED_CHAR==1 - typedef unsigned char uint8_t; - #else - #error I do not know what to use for a uint8_t. - #endif - #endif - - //second chance to fix default settings - //this must be defined later, otherwise it messes up - //the standard libraries - #if !defined(__MINGW32__) - #define _close ::close - #define _read ::read - #endif - - //now that int64_t is defined, we can define this... - #ifndef _CL_HAVE_FILELENGTH - #undef fileSize - #define fileSize lucene_filelength - int64_t lucene_filelength(int handle); - #endif - -#elif !defined(_lucene_COMPILER_GCC3) -#define _lucene_COMPILER_GCC3 - //third inclusion - - #if !defined(__MINGW32__) - //define replacements - #define O_RANDOM 0 - #undef O_BINARY - #define O_BINARY 0 - #define _S_IREAD 0444 - #define _S_IWRITE 0333 // write and execute permissions - - //some functions that are needed - not charset dependent and not tchar type functions - #define _open open - #define _write write - #define _snprintf snprintf - - //clucene uses ascii for filename interactions - #define _realpath(rel,abs) realpath(rel,abs) - #define _mkdir(x) mkdir(x,0777) - #define _unlink unlink - #else - #define _realpath(rel,abs) _fullpath(abs,rel,CL_MAX_PATH) - #endif - //also required by mingw - #define _rename rename -#endif - -#if defined(__GNUC__) && (defined(__sgi) || (defined(Q_OS_SOLARIS) && Q_SOLARIS_VERSION < 10)) - #undef _CL_HAVE_FLOAT_T -#endif - -#if defined(__GNUC__) && defined(Q_OS_SOLARIS) && Q_SOLARIS_VERSION < 10 - #undef _CL_HAVE_WCSTOLL -#endif diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/config/compiler.h qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/config/compiler.h --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/config/compiler.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/config/compiler.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,259 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#if !defined(lucene_compiler_h) -#define lucene_compiler_h - -#if defined(_MBCS) || defined(_ASCII) -#undef _ASCII -#undef _UCS2 -#define _ASCII -#elif defined(_UNICODE) -#define _UCS2 -#elif !defined(_UCS2) -#define _UCS2 -#endif - -//msvc needs unicode define so that it uses unicode library -#ifdef _UCS2 -#undef _UNICODE -#define _UNICODE -#undef _ASCII -#else -#undef _UNICODE -#undef _UCS2 -#endif - - -//////////////////////////////////////////////////////////////////// -// Figure out what compiler we are using -//////////////////////////////////////////////////////////////////// - -#if defined(_MSC_VER) && !defined(__MWERKS__) && !defined (__COMO__) -#define _CLCOMPILER_MSVC _MSC_VER -#endif - -#if defined(__GNUC__) || defined(__SUNPRO_CC) || defined(__xlC__) || defined(__sgi) && defined(__EDG__) -#include "CLucene/config/CompilerGcc.h" - -#elif defined(_CLCOMPILER_MSVC) -/* Microsoft Visual C++ */ -#include "CLucene/config/CompilerMsvc.h" - -#elif defined (__BORLANDC__) -#include "CLucene/config/CompilerBcb.h" - -#elif defined (__HP_aCC) -#include "CLucene/config/CompilerAcc.h" - -#else - //Unable to identify the compiler, issue error diagnostic. - //Edit to set STLport up for your compiler. - //Uncomment this next line -#error "Unable to identify the compiler, issue error diagnostic. Edit to set Lucene up for your compiler." -#include "CLucene/config/LuceneMycomp.h" -#endif /* end of compiler choice */ -//////////////////////////////////////////////////////////////////// - - - -//////////////////////////////////////////////////////////////////// -// Now include platform specific definitions -//////////////////////////////////////////////////////////////////// - -/* Operating system recognition (basic) */ -#if defined (__unix) || defined (__linux__) || defined (__QNX__) || defined (_AIX) || defined (__NetBSD__) || defined (__OpenBSD__) || defined (__Lynx__) || defined(hpux) || defined(__hpux) || defined(__HAIKU__) -#undef _UNIX -#define _UNIX 1 -#include "CLucene/config/PlatformUnix.h" - -#elif defined(macintosh) || defined (_MAC) || defined(__APPLE__) -#undef _MAC -#define _MAC 1 -#include "CLucene/config/PlatformMac.h" - -#elif defined (_WIN32) || defined (__WIN32) || defined (WIN32) || defined (__WIN32__) -#undef _WIN32 -#define _WIN32 -#include "CLucene/config/PlatformWin32.h" - -#elif defined (__WIN16) || defined (WIN16) || defined (_WIN16) -#undef _WIN16 -#define _WIN16 -#error "CLucene has not been tested on this platform. Please send a report to the lucene administrators if you are able to successfully compile" -#else -#error "CLucene could not identify the platform." -#endif /* platforms */ - - - -//////////////////////////////////////////////////////////////////// -// Now we take all that we have learnt, and define some things -//////////////////////////////////////////////////////////////////// - -//lets just say that we can always do unicode! :) -#ifdef CL_CHARSET_GUESS -#define _UCS2 -#endif - -#if defined(_ASCII) -#undef _UCS2 -#elif defined(_UCS2) -#undef _ASCII -#endif - -#ifndef _LUCENE_NO_NEW_STYLE_CASTS -#define __CONST_CAST(typ,var) const_cast(var) -#define __REINTERPRET_CAST(typ,var) reinterpret_cast(var) -#else -#define __CONST_CAST(typ,var) ((typ)(var)) -#define __REINTERPRET_CAST,var) ((typ)(var)) -#endif - -#ifndef _CL_DEPRECATE_TEXT -#define _CL_DEPRECATE_TEXT(_Text) -#endif -#define _CL_DEPRECATED(_NewItem) _CL_DEPRECATE_TEXT("This function or variable has been superceded by newer library or operating system functionality. Consider using" #_NewItem "instead. See online help for details.") - - -//cnd-debug exit command -#ifndef debugFatalExit -#define debugFatalExit(ret) exit(ret) -#endif - -#ifndef _CL_ILONG -#define _CL_ILONG(x) x ## L -#endif -#ifndef _ILONGLONG -#define _ILONGLONG(x) x ## LL -#endif - -//define whats the values of item intergers *should* be. we can check this in a test -#define LUCENE_INT64_MAX_SHOULDBE _ILONGLONG(0x7FFFFFFFFFFFFFFF) -#define LUCENE_INT32_MAX_SHOULDBE 0x7FFFFFFFL -#define LUCENE_UINT8_MAX_SHOULDBE 0xff - -//maximum path length. only used for buffers that use fullpath. -//anything else should use a dynamic length. -#if defined(CL_MAX_PATH) -//do nothing... -#elif defined(PATH_MAX) -#define CL_MAX_PATH PATH_MAX -#elif defined(MAX_PATH) -#define CL_MAX_PATH MAX_PATH -#elif defined(_MAX_PATH) -#define CL_MAX_PATH _MAX_PATH -#else - #error "CL_MAX_PATH could not be determined" -#endif - -//this is the max filename... for now its just the same, -//but this could change, so we use a different name -#define CL_MAX_NAME CL_MAX_PATH -//this used to be CL_MAX_NAME * 32, but as Alex Hudson points out, this could come to be 128kb. -//the above logic for CL_MAX_NAME should be correct enough to handle all file names -#define CL_MAX_DIR CL_MAX_PATH - -#ifdef _LARGE_FILES -#define LUCENE_MAX_FILELENGTH LUCENE_INT64_MAX_SHOULDBE -#else -#define LUCENE_MAX_FILELENGTH LUCENE_INT32_MAX_SHOULDBE -#endif - -//use the LUCENE_STATIC_CONSTANT_SYNTAX to determine LUCENE_STATIC_CONSTANT -#ifndef LUCENE_STATIC_CONSTANT - //autoconf is not properly detecting the correct method for this, and since there's no real big - //harm in always using an enum, we'll probably just make this the default. - /*#if LUCENE_STATIC_CONSTANT_SYNTAX == 1 - #define LUCENE_STATIC_CONSTANT(type, assignment) static const type assignment - #elif LUCENE_STATIC_CONSTANT_SYNTAX == 2*/ - #define LUCENE_STATIC_CONSTANT(type, assignment) enum { assignment } - /*#else - #error "LUCENE_STATIC_CONSTANT not defined, and/or LUCENE_STATIC_CONSTANT_SYNTAX is not defined to a valid value" - #endif*/ -#endif - -//end of lucene_compiler_h -#elif !defined(lucene_compiler_h2) -#define lucene_compiler_h2 -//here we include the compiler header again, this gives the header a -//second chance at including stuff, after the main inclusions are complete - -#if defined (__GNUC__) || defined(__SUNPRO_CC) || defined(__xlC__) || defined(__sgi) && defined(__EDG__) -#include "CLucene/config/CompilerGcc.h" - -#elif defined(_CLCOMPILER_MSVC) -/* Microsoft Visual C++ */ -#include "CLucene/config/CompilerMsvc.h" - -#elif defined __BORLANDC__ -#include "CLucene/config/CompilerBcb.h" - -#elif defined (__HP_aCC) -#include "CLucene/config/CompilerAcc.h" - -#else -//Unable to identify the compiler, issue error diagnostic. -//Edit to set STLport up for your compiler. -//Uncomment this next line -#error "Unable to identify the compiler, issue error diagnostic. Edit to set Lucene up for your compiler." -#include "CLucene/config/LuceneMycomp.h" -#endif /* end of compiler choice */ - -#ifndef _CL_HAVE_FLOAT_T -//#ifdef _CL_HAVE_LONG_DOUBLE -// long double's are not working (reported by Mark Ashworth on Solaris 64) -// typedef long double float_t; /* `float' expressions are evaluated as `long double'. */ -//#else -// we are going to use qreal now -// typedef double float_t; -//#endif -#endif - -/*todo: but need to define SIZEOF_VOID_P #if (SIZEOF_VOID_P > 4 && SIZEOF_VOID_P <= 8) -#ifndef _CL_HAVE_INTPTR_T - typedef int64_t intptr_t; -#endif -#elif (SIZEOF_VOID_P > 2 && SIZEOF_VOID_P <= 4) -# ifndef _CL_HAVE_INTPTR_T - typedef int32_t intptr_t; -# endif -#else -#error "void * is either >8 bytes or <= 2. In either case, I am confused." -#endif*/ - -#ifndef _CL_HAVE_INTPTR_T - typedef int intptr_t; -#endif - -//end of lucene_compiler_h2 -#elif !defined(lucene_compiler_h3) -#define lucene_compiler_h3 -//here we include the compiler header again, this gives the header a -//third chance at including stuff, after the main inclusions are complete - -#if defined (__GNUC__ ) || defined(__SUNPRO_CC) || defined(__xlC__) || defined(__sgi) && defined(__EDG__) -#include "CLucene/config/CompilerGcc.h" - -#elif defined(_CLCOMPILER_MSVC) -/* Microsoft Visual C++ */ -#include "CLucene/config/CompilerMsvc.h" - -#elif defined __BORLANDC__ -#include "CLucene/config/CompilerBcb.h" - -#elif defined (__HP_aCC) -#include "CLucene/config/CompilerAcc.h" - -#else -//Unable to identify the compiler, issue error diagnostic. -//Edit to set STLport up for your compiler. -//Uncomment this next line -#error "Unable to identify the compiler, issue error diagnostic. Edit to set Lucene up for your compiler." -#include "CLucene/config/LuceneMycomp.h" -#endif /* end of compiler choice */ - -#endif diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/config/CompilerMsvc.h qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/config/CompilerMsvc.h --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/config/CompilerMsvc.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/config/CompilerMsvc.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,136 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -* -* Changes are Copyright (C) 2015 The Qt Company Ltd. -------------------------------------------------------------------------------*/ -#if !defined(_lucene_COMPILER_MSVC) -#define _lucene_COMPILER_MSVC - -// It is internal CLucene header - DO NOT include it directly - -#include "CLucene/config/define_std.h" - -#if (_MSC_VER >= 1300) -//>= 7.0 - #if defined(_BUILD_FOR_QT_) - # pragma warning(disable: 4100) // disable unreferenced formal parameter - # pragma warning(disable: 4189) // disable local variable is initialized but not referenced - #endif - # pragma warning(disable: 4512) // This would be very annoying - # pragma warning(disable: 4290) // Ignore exception specification warning - # pragma warning(disable: 4250) // Ignore 'class1' : inherits 'class2::member' via dominance (e.g. in MultiReader) - // Check for STLport presence - #include - #if (_MSC_VER < 1310) || defined(_STLPORT_VERSION) - #define CL_NS_HASHING(func) std::func //the namespace is different on VC 7.0 - #else - #define CL_NS_HASHING(func) stdext::func - #endif - #define LUCENE_STATIC_CONSTANT_SYNTAX 1 - - #if _MSC_FULL_VER >= 140050320 - #define _CL_DEPRECATE_TEXT(_Text) __declspec(deprecated(_Text)) - #else - #define _CL_DEPRECATE_TEXT(_Text) __declspec(deprecated) - #endif - -#elif (_MSC_VER >= 1200) -//6.0 -#ifdef LUCENE_ENABLE_MEMLEAKTRACKING - #define _CLDELETE_CARRAY(x) if (x!=NULL){CL_NS(debug)::LuceneBase::__cl_voidpremove((void*)x,__FILE__,__LINE__);delete[] __CONST_CAST(TCHAR*,x); x=NULL;} - #define _CLDELETE_CaARRAY(x) if (x!=NULL){CL_NS(debug)::LuceneBase::__cl_voidpremove((void*)x,__FILE__,__LINE__);delete[] __CONST_CAST(char*,x); x=NULL;} - #define _CLDELETE_LCARRAY(x) if (x!=NULL){CL_NS(debug)::LuceneBase::__cl_voidpremove((void*)x,__FILE__,__LINE__);delete[] __CONST_CAST(TCHAR*,x);} - #define _CLDELETE_LCaARRAY(x) if (x!=NULL){CL_NS(debug)::LuceneBase::__cl_voidpremove((void*)x,__FILE__,__LINE__);delete[] __CONST_CAST(char*,x);} -#else - #define _CLDELETE_CARRAY(x) if (x!=NULL){delete[] __CONST_CAST(TCHAR*,x); x=NULL;} - #define _CLDELETE_CaARRAY(x) if (x!=NULL){delete[] __CONST_CAST(char*,x); x=NULL;} - #define _CLDELETE_LCARRAY(x) if (x!=NULL){delete[] __CONST_CAST(TCHAR*,x);} - #define _CLDELETE_LCaARRAY(x) if (x!=NULL){delete[] __CONST_CAST(char*,x);} - -#endif - #define LUCENE_STATIC_CONSTANT_SYNTAX 2 - - # pragma warning(disable: 4786) // This would be very annoying - namespace std{ - # undef min // just in case - # undef max // just in case - - #define min(a,b) (a>b?b:a) - #define max(a,b) (a>b?a:b) - } - - //only 7.0+ has these function - #undef _CL_HAVE_LLTOA - #undef _CL_HAVE_LLTOAW - #undef _CL_HAVE_INTPTR_T - #undef _CL_HAVE_WCSTOLL - #undef _CL_HAVE_STRTOLL - #undef _CL_HAVE_HASH_MAP - #undef _CL_HAVE_HASH_SET - -#else -# error "This version of MSVC has not been tested. Please uncomment this line to try anyway. Please send a report to the Clucene's administration if successful" -#endif - -#if _MSC_VER >= 1020 - #define _LUCENE_PRAGMA_ONCE -#endif -#define _LUCENE_PRAGMA_WARNINGS //tell lucene to display warnings using pragmas instead of #warning - -//if we are compiling using single-threaded libraries, we can disable multi-threading stuff -#if !defined(_MT) && !defined(_CL_DISABLE_MULTITHREADING) - #define _CL_DISABLE_MULTITHREADING -#endif - -//msvc supports large files -#ifdef _LARGE_FILES -# define fileSize _filelengthi64 -# define fileSeek _lseeki64 -# define fileTell _telli64 -# define fileStat _stati64 -# define fileHandleStat _fstati64 -#else -# define fileSize _filelength -# define fileSeek _lseek -# define fileTell _tell -# define fileStat _stat -# define fileHandleStat _fstat -#endif - -//_rename is not defined??? -#define _rename rename - -#define CL_MAX_PATH 260 //give the windef.h value for this... -#define _realpath(rel,abs) _fullpath(abs,rel,CL_MAX_PATH) - -//java long type -typedef __int64 int64_t; -typedef unsigned __int64 uint64_t; - -//java int type -typedef int int32_t; -typedef unsigned int uint32_t; - -//java byte type -typedef unsigned char uint8_t; - -//floating point type -//we are going to use qreal now -//typedef double float_t; - -#define _CL_ILONG(x) x ## L -#define _ILONGLONG(x) x ## i64 - - -#elif !defined(_lucene_COMPILER_MSVC2) -#define _lucene_COMPILER_MSVC2 - //second inclusion - - -#elif !defined(_lucene_COMPILER_MSVC3) -#define _lucene_COMPILER_MSVC3 - //third inclusion -#endif diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/config/define_std.h qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/config/define_std.h --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/config/define_std.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/config/define_std.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,113 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#ifndef lucene_define_std -#define lucene_define_std -//define a standard list of defines. -//These defines represents a fairly complete compiler. -//Of course it is preferable to use the autoconf generated -//list, but then not all systems can do this :) - -//we support long files - 64 bit file functions -#define _LARGE_FILES - -//support namespaces -#define _CL_HAVE_NAMESPACES - -//support try/catch blocks -#define _CL_HAVE_FUNCTION_TRY_BLOCKS - -//the normal headers -#define _CL_STDC_HEADERS -#define _CL_HAVE_STDARG_H -#define _CL_HAVE_ALGORITHM -#define _CL_HAVE_FUNCTIONAL -#define _CL_HAVE_MATH_H -#define _CL_HAVE_STL -#define _CL_HAVE_HASH_MAP -#define _CL_HAVE_HASH_SET -#define _CL_HAVE_MAP -#define _CL_HAVE_SET -#define _CL_HAVE_LIST -#define _CL_HAVE_VECTOR -#define _CL_HAVE_STDEXCEPT -#define _CL_HAVE_ERRNO_H -#define _CL_HAVE_SYS_STAT_H -#define _CL_HAVE_FCNTL_H - -//character & std tchar support -#define _CL_HAVE_TCHAR_H -#ifdef _UCS2 - #define _CL_HAVE_WCTYPE_H - - #define _CL_HAVE_WCSCPY - #define _CL_HAVE_WCSNCPY - #define _CL_HAVE_WCSCAT - #define _CL_HAVE_WCSCHR - #define _CL_HAVE_WCSSTR - #define _CL_HAVE_WCSLEN - #define _CL_HAVE_WCSCMP - #define _CL_HAVE_WCSNCMP - #define _CL_HAVE_WCSCSPN -#else - #define _CL_HAVE_CTYPE_H -#endif - -//already have the normal structures -#define _CL_HAVE_FLOAT_T -#define _CL_HAVE_INTPTR_T - -//system dependant: -#define _CL_HAVE_STRING_H //could be HAVE_STRINGS_H && HAVE_STRCHR -#define _CL_HAVE_SYS_TIMEB_H -#define _CL_HAVE_TIME_H - -#if defined (_WIN32) || defined (__WIN32) || defined (WIN32) || defined (__WIN32__) - #define _CL_HAVE_IO_H - #define _CL_HAVE_DIRECT_H - #define _CL_HAVE_WINDOWS_H -#else - #define _CL_HAVE_UNISTD_H -#endif -#ifdef UNDER_CE -#undef _CL_HAVE_SYS_TIMEB_H -#endif - -//////////////////////////////////////////////// -//now for individual functions. some compilers -//miss these, so must individually define what -//we have -//////////////////////////////////////////////// - -//string functions -#define _CL_HAVE_STRLWR -#define _CL_HAVE_WCSLWR -#define _CL_HAVE_WCSCASECMP -#define _CL_HAVE_STRCASECMP - -//formatting functions -#define _CL_HAVE_SNWPRINTF -#define _CL_HAVE_VSNWPRINTF -#define _CL_HAVE_WPRINTF -#define _CL_HAVE_SNPRINTF -#define _CL_HAVE_PRINTF - - -//conversion functions -#define _CL_HAVE_STRTOLL -#define _CL_HAVE_WCSTOLL -#define _CL_HAVE_WCSTOD -#define _CL_HAVE_LLTOA -#define _CL_HAVE_LLTOW -#define _CL_HAVE_INTPTR_T - -//these ones are not standard (msvc) -//so you will probably need to undefine -//if you are not using msvc -#define _CL_HAVE_FILELENGTH - - -#endif diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/config/gunichartables.cpp qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/config/gunichartables.cpp --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/config/gunichartables.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/config/gunichartables.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,386 +0,0 @@ -/* - * Copyright (C) 1999 Tom Tromey - * Copyright (C) 2000 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library 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 - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - * - * - ************************************************ - * Also licensed with permission from Tom Tromey - * and Owen Taylor under the Apache license. - * Original location: - * http://cvs.gnome.org/viewcvs/glib/glib/guniprop.c?view=log - ************************************************ - * - * Copyright 2003-2006 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* - * Changes are Copyright (C) 2015 The Qt Company Ltd. -*/ - -#include "CLucene/StdHeader.h" - -typedef unsigned long gunichar; -typedef unsigned short guint16; -typedef short gint16; -typedef char gchar; -typedef unsigned char guchar; - -/* These are the possible character classifications. - * See http://www.unicode.org/Public/UNIDATA/UnicodeData.txt - or http://www.unicode.org/Public/UNIDATA/UCD.html. - - todo: i think there is a new version of the unicode, which we should use. - data is licensed like this: http://www.unicode.org/copyright.html... not sure but looks apache compatible - */ -typedef enum -{ - G_UNICODE_CONTROL, - G_UNICODE_FORMAT, - G_UNICODE_UNASSIGNED, - G_UNICODE_PRIVATE_USE, - G_UNICODE_SURROGATE, - G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_MODIFIER_LETTER, - G_UNICODE_OTHER_LETTER, - G_UNICODE_TITLECASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_COMBINING_MARK, - G_UNICODE_ENCLOSING_MARK, - G_UNICODE_NON_SPACING_MARK, - G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_LETTER_NUMBER, - G_UNICODE_OTHER_NUMBER, - G_UNICODE_CONNECT_PUNCTUATION, - G_UNICODE_DASH_PUNCTUATION, - G_UNICODE_CLOSE_PUNCTUATION, - G_UNICODE_FINAL_PUNCTUATION, - G_UNICODE_INITIAL_PUNCTUATION, - G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_OPEN_PUNCTUATION, - G_UNICODE_CURRENCY_SYMBOL, - G_UNICODE_MODIFIER_SYMBOL, - G_UNICODE_MATH_SYMBOL, - G_UNICODE_OTHER_SYMBOL, - G_UNICODE_LINE_SEPARATOR, - G_UNICODE_PARAGRAPH_SEPARATOR, - G_UNICODE_SPACE_SEPARATOR -} GUnicodeType; - - -#include "gunichartables.h" - -#define ATTR_TABLE(Page) (((Page) <= G_UNICODE_LAST_PAGE_PART1) \ - ? attr_table_part1[Page] \ - : attr_table_part2[(Page) - 0xe00]) - -#define ATTTABLE(Page, Char) \ - ((ATTR_TABLE(Page) == G_UNICODE_MAX_TABLE_INDEX) ? 0 : (attr_data[ATTR_TABLE(Page)][Char])) - - -#define TTYPE_PART1(Page, Char) \ - ((type_table_part1[Page] >= G_UNICODE_MAX_TABLE_INDEX) \ - ? (type_table_part1[Page] - G_UNICODE_MAX_TABLE_INDEX) \ - : (type_data[type_table_part1[Page]][Char])) - -#define TTYPE_PART2(Page, Char) \ - ((type_table_part2[Page] >= G_UNICODE_MAX_TABLE_INDEX) \ - ? (type_table_part2[Page] - G_UNICODE_MAX_TABLE_INDEX) \ - : (type_data[type_table_part2[Page]][Char])) - -#define TYPE(Char) \ - (((Char) <= G_UNICODE_LAST_CHAR_PART1) \ - ? TTYPE_PART1 ((Char) >> 8, (Char) & 0xff) \ - : (((Char) >= 0xe0000 && (Char) <= G_UNICODE_LAST_CHAR) \ - ? TTYPE_PART2 (((Char) - 0xe0000) >> 8, (Char) & 0xff) \ - : G_UNICODE_UNASSIGNED)) - -/* Count the number of elements in an array. The array must be defined - * as such; using this with a dynamically allocated array will give - * incorrect results. - */ -#define G_N_ELEMENTS(arr) (sizeof (arr) / sizeof ((arr)[0])) - - - - -#if defined(LUCENE_USE_INTERNAL_CHAR_FUNCTIONS) -#ifdef _LUCENE_PRAGMA_WARNINGS - #pragma message ("===== Using internal character function =====") -#else -#if !(defined(Q_OS_SOLARIS) || defined(Q_CC_MIPS)) -#warning "===== Using internal character function =====" -#endif -#endif - -bool cl_isletter(gunichar c) -{ - int t = TYPE (c); - switch(t) - { - case G_UNICODE_LOWERCASE_LETTER: return true; - case G_UNICODE_TITLECASE_LETTER: return true; - case G_UNICODE_UPPERCASE_LETTER: return true; - case G_UNICODE_MODIFIER_LETTER: return true; - case G_UNICODE_OTHER_LETTER: return true; - default: return false; - } -} - -bool cl_isalnum(gunichar c) -{ - int t = TYPE (c); - switch(t) - { - case G_UNICODE_LOWERCASE_LETTER: return true; - case G_UNICODE_TITLECASE_LETTER: return true; - case G_UNICODE_UPPERCASE_LETTER: return true; - case G_UNICODE_MODIFIER_LETTER: return true; - case G_UNICODE_OTHER_LETTER: return true; - case G_UNICODE_DECIMAL_NUMBER: return true; - case G_UNICODE_LETTER_NUMBER: return true; - case G_UNICODE_OTHER_NUMBER: return true; - default: return false; - } -} - -bool cl_isdigit(gunichar c) -{ - int t = TYPE (c); - switch(t) - { - case G_UNICODE_DECIMAL_NUMBER: return true; - case G_UNICODE_LETTER_NUMBER: return true; - case G_UNICODE_OTHER_NUMBER: return true; - default: return false; - } -} - -/** - * cl_isspace: - * @c: a Unicode character - * - * Determines whether a character is a space, tab, or line separator - * (newline, carriage return, etc.). Given some UTF-8 text, obtain a - * character value with lucene_utf8towc(). - * - * (Note: don't use this to do word breaking; you have to use - * Pango or equivalent to get word breaking right, the algorithm - * is fairly complex.) - * - * Return value: %TRUE if @c is a punctuation character - **/ -bool cl_isspace (gunichar c) -{ - switch (c) - { - /* special-case these since Unicode thinks they are not spaces */ - case '\t': - case '\n': - case '\r': - case '\f': - return true; - - default: - { - int t = TYPE ((gunichar)c); - return (t == G_UNICODE_SPACE_SEPARATOR || t == G_UNICODE_LINE_SEPARATOR - || t == G_UNICODE_PARAGRAPH_SEPARATOR); - } - } -} - - - -/** - * cl_tolower: - * @c: a Unicode character. - * - * Converts a character to lower case. - * - * Return value: the result of converting @c to lower case. - * If @c is not an upperlower or titlecase character, - * or has no lowercase equivalent @c is returned unchanged. - **/ -TCHAR cl_tolower (TCHAR ch) -{ - gunichar c=ch; - int t = TYPE ((gunichar)c); - if (t == G_UNICODE_UPPERCASE_LETTER) - { - gunichar val = ATTTABLE (c >> 8, c & 0xff); - if (val >= 0x1000000) - { - const gchar *p = special_case_table + val - 0x1000000; - int len=0; - wchar_t ret=0; - lucene_utf8towc(&ret,p,6); -#ifdef _UCS2 - return ret; -#else - return LUCENE_OOR_CHAR(ret); -#endif - //return cl_utf8_get_char (p, &len); - }else - return val ? val : c; - }else if (t == G_UNICODE_TITLECASE_LETTER){ - unsigned int i; - for (i = 0; i < G_N_ELEMENTS (title_table); ++i) - { - if (title_table[i][0] == c) - return title_table[i][2]; - } - } - return c; -} - -/** - * cl_toupper: - * @c: a Unicode character - * - * Converts a character to uppercase. - * - * Return value: the result of converting @c to uppercase. - * If @c is not an lowercase or titlecase character, - * or has no upper case equivalent @c is returned unchanged. - **/ -TCHAR cl_toupper (TCHAR ch) -{ - gunichar c=ch; - int t = TYPE (c); - if (t == G_UNICODE_LOWERCASE_LETTER) - { - gunichar val = ATTTABLE (c >> 8, c & 0xff); - if (val >= 0x1000000) - { - const gchar *p = special_case_table + val - 0x1000000; - - wchar_t ret=0; - lucene_utf8towc(&ret,p,6); -#ifdef _UCS2 - return ret; -#else - return LUCENE_OOR_CHAR(ret); -#endif - //return lucene_utf8towc (p); - } - else - return val ? val : c; - } - else if (t == G_UNICODE_TITLECASE_LETTER) - { - unsigned int i; - for (i = 0; i < G_N_ELEMENTS (title_table); ++i) - { - if (title_table[i][0] == c) - return title_table[i][1]; - } - } - return c; -} - - - -/** - * cl_tcasefold: - * @str: a unicode string - * - * Converts a string into a form that is independent of case. The - * result will not correspond to any particular case, but can be - * compared for equality or ordered with the results of calling - * cl_tcasefold() on other strings. - * - * Note that calling cl_tcasefold() followed by g_utf8_collate() is - * only an approximation to the correct linguistic case insensitive - * ordering, though it is a fairly good one. Getting this exactly - * right would require a more sophisticated collation function that - * takes case sensitivity into account. GLib does not currently - * provide such a function. - * - * Return value: a newly allocated string, that is a - * case independent form of @str. - **/ -TCHAR cl_tcasefold(const TCHAR ch){ - int start = 0; - int end = G_N_ELEMENTS (casefold_table); - - if (ch >= casefold_table[start].ch && - ch <= casefold_table[end - 1].ch) - { - while (1) - { - int half = (start + end) / 2; - if (ch == casefold_table[half].ch) - { - wchar_t ret=0; - lucene_utf8towc(&ret,casefold_table[half].data,6); - - #ifdef _UCS2 - return ret; - #else - LUCENE_OOR_CHAR(ret) - #endif - }else if (half == start){ - break; - }else if (ch > casefold_table[half].ch){ - start = half; - }else{ - end = half; - } - } - } - return cl_tolower(ch); - -} - - -//this function was not taken from gnome -TCHAR* cl_tcscasefold( TCHAR * str, int len ) //len default is -1 -{ - TCHAR *p = str; - while ((len < 0 || p < str + len) && *p) - { - *p = cl_tcasefold(*p); - p++; - } - return str; -} -//this function was not taken from gnome -int cl_tcscasefoldcmp(const TCHAR * dst, const TCHAR * src){ - TCHAR f,l; - - do{ - f = cl_tcasefold( (*(dst++)) ); - l = cl_tcasefold( (*(src++)) ); - } while ( (f) && (f == l) ); - - return (int)(f - l); -} - -#endif diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/config/gunichartables.h qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/config/gunichartables.h --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/config/gunichartables.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/config/gunichartables.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,11264 +0,0 @@ -/* This file is automatically generated. DO NOT EDIT! - Instead, edit gen-unicode-tables.pl and re-run. */ - -#ifndef CHARTABLES_H -#define CHARTABLES_H - -#define G_UNICODE_DATA_VERSION "4.0" - -#define G_UNICODE_LAST_CHAR 0x10ffff - -#define G_UNICODE_MAX_TABLE_INDEX 10000 - -#define G_UNICODE_LAST_CHAR_PART1 0x2FAFF - -#define G_UNICODE_LAST_PAGE_PART1 762 - -static const char type_data[][256] = { - { /* page 0, index 0 */ - G_UNICODE_CONTROL, G_UNICODE_CONTROL, G_UNICODE_CONTROL, - G_UNICODE_CONTROL, G_UNICODE_CONTROL, G_UNICODE_CONTROL, - G_UNICODE_CONTROL, G_UNICODE_CONTROL, G_UNICODE_CONTROL, - G_UNICODE_CONTROL, G_UNICODE_CONTROL, G_UNICODE_CONTROL, - G_UNICODE_CONTROL, G_UNICODE_CONTROL, G_UNICODE_CONTROL, - G_UNICODE_CONTROL, G_UNICODE_CONTROL, G_UNICODE_CONTROL, - G_UNICODE_CONTROL, G_UNICODE_CONTROL, G_UNICODE_CONTROL, - G_UNICODE_CONTROL, G_UNICODE_CONTROL, G_UNICODE_CONTROL, - G_UNICODE_CONTROL, G_UNICODE_CONTROL, G_UNICODE_CONTROL, - G_UNICODE_CONTROL, G_UNICODE_CONTROL, G_UNICODE_CONTROL, - G_UNICODE_CONTROL, G_UNICODE_CONTROL, G_UNICODE_SPACE_SEPARATOR, - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_CURRENCY_SYMBOL, - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OPEN_PUNCTUATION, - G_UNICODE_CLOSE_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_MATH_SYMBOL, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_DASH_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_CLOSE_PUNCTUATION, G_UNICODE_MODIFIER_SYMBOL, - G_UNICODE_CONNECT_PUNCTUATION, G_UNICODE_MODIFIER_SYMBOL, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_MATH_SYMBOL, - G_UNICODE_CLOSE_PUNCTUATION, G_UNICODE_MATH_SYMBOL, G_UNICODE_CONTROL, - G_UNICODE_CONTROL, G_UNICODE_CONTROL, G_UNICODE_CONTROL, - G_UNICODE_CONTROL, G_UNICODE_CONTROL, G_UNICODE_CONTROL, - G_UNICODE_CONTROL, G_UNICODE_CONTROL, G_UNICODE_CONTROL, - G_UNICODE_CONTROL, G_UNICODE_CONTROL, G_UNICODE_CONTROL, - G_UNICODE_CONTROL, G_UNICODE_CONTROL, G_UNICODE_CONTROL, - G_UNICODE_CONTROL, G_UNICODE_CONTROL, G_UNICODE_CONTROL, - G_UNICODE_CONTROL, G_UNICODE_CONTROL, G_UNICODE_CONTROL, - G_UNICODE_CONTROL, G_UNICODE_CONTROL, G_UNICODE_CONTROL, - G_UNICODE_CONTROL, G_UNICODE_CONTROL, G_UNICODE_CONTROL, - G_UNICODE_CONTROL, G_UNICODE_CONTROL, G_UNICODE_CONTROL, - G_UNICODE_CONTROL, G_UNICODE_CONTROL, G_UNICODE_SPACE_SEPARATOR, - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_CURRENCY_SYMBOL, - G_UNICODE_CURRENCY_SYMBOL, G_UNICODE_CURRENCY_SYMBOL, - G_UNICODE_CURRENCY_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_MODIFIER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_INITIAL_PUNCTUATION, G_UNICODE_MATH_SYMBOL, G_UNICODE_FORMAT, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_MODIFIER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_OTHER_NUMBER, - G_UNICODE_OTHER_NUMBER, G_UNICODE_MODIFIER_SYMBOL, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_MODIFIER_SYMBOL, - G_UNICODE_OTHER_NUMBER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_FINAL_PUNCTUATION, G_UNICODE_OTHER_NUMBER, - G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_MATH_SYMBOL, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_MATH_SYMBOL, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER - }, - { /* page 1, index 1 */ - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_TITLECASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_TITLECASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_TITLECASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_TITLECASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER - }, - { /* page 2, index 2 */ - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_MODIFIER_LETTER, - G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, - G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, - G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, - G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, - G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, - G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, - G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, - G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, - G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_SYMBOL, - G_UNICODE_MODIFIER_SYMBOL, G_UNICODE_MODIFIER_SYMBOL, - G_UNICODE_MODIFIER_SYMBOL, G_UNICODE_MODIFIER_LETTER, - G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, - G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, - G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, - G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, - G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, - G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_SYMBOL, - G_UNICODE_MODIFIER_SYMBOL, G_UNICODE_MODIFIER_SYMBOL, - G_UNICODE_MODIFIER_SYMBOL, G_UNICODE_MODIFIER_SYMBOL, - G_UNICODE_MODIFIER_SYMBOL, G_UNICODE_MODIFIER_SYMBOL, - G_UNICODE_MODIFIER_SYMBOL, G_UNICODE_MODIFIER_SYMBOL, - G_UNICODE_MODIFIER_SYMBOL, G_UNICODE_MODIFIER_SYMBOL, - G_UNICODE_MODIFIER_SYMBOL, G_UNICODE_MODIFIER_SYMBOL, - G_UNICODE_MODIFIER_SYMBOL, G_UNICODE_MODIFIER_LETTER, - G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, - G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, - G_UNICODE_MODIFIER_SYMBOL, G_UNICODE_MODIFIER_SYMBOL, - G_UNICODE_MODIFIER_SYMBOL, G_UNICODE_MODIFIER_SYMBOL, - G_UNICODE_MODIFIER_SYMBOL, G_UNICODE_MODIFIER_SYMBOL, - G_UNICODE_MODIFIER_SYMBOL, G_UNICODE_MODIFIER_SYMBOL, - G_UNICODE_MODIFIER_SYMBOL, G_UNICODE_MODIFIER_LETTER, - G_UNICODE_MODIFIER_SYMBOL, G_UNICODE_MODIFIER_SYMBOL, - G_UNICODE_MODIFIER_SYMBOL, G_UNICODE_MODIFIER_SYMBOL, - G_UNICODE_MODIFIER_SYMBOL, G_UNICODE_MODIFIER_SYMBOL, - G_UNICODE_MODIFIER_SYMBOL, G_UNICODE_MODIFIER_SYMBOL, - G_UNICODE_MODIFIER_SYMBOL, G_UNICODE_MODIFIER_SYMBOL, - G_UNICODE_MODIFIER_SYMBOL, G_UNICODE_MODIFIER_SYMBOL, - G_UNICODE_MODIFIER_SYMBOL, G_UNICODE_MODIFIER_SYMBOL, - G_UNICODE_MODIFIER_SYMBOL, G_UNICODE_MODIFIER_SYMBOL, - G_UNICODE_MODIFIER_SYMBOL - }, - { /* page 3, index 3 */ - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_MODIFIER_SYMBOL, - G_UNICODE_MODIFIER_SYMBOL, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_MODIFIER_LETTER, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_MODIFIER_SYMBOL, G_UNICODE_MODIFIER_SYMBOL, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UNASSIGNED, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UNASSIGNED, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UNASSIGNED, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UNASSIGNED, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_MATH_SYMBOL, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED - }, - { /* page 4, index 4 */ - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_UNASSIGNED, - G_UNICODE_ENCLOSING_MARK, G_UNICODE_ENCLOSING_MARK, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UNASSIGNED, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED - }, - { /* page 5, index 5 */ - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_MODIFIER_LETTER, - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_UNASSIGNED, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_DASH_PUNCTUATION, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_UNASSIGNED, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_UNASSIGNED, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED - }, - { /* page 6, index 6 */ - G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_UNASSIGNED, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_MODIFIER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_LETTER, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_FORMAT, G_UNICODE_ENCLOSING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_LETTER - }, - { /* page 7, index 7 */ - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_UNASSIGNED, G_UNICODE_FORMAT, G_UNICODE_OTHER_LETTER, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED - }, - { /* page 9, index 8 */ - G_UNICODE_UNASSIGNED, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_COMBINING_MARK, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_OTHER_LETTER, G_UNICODE_COMBINING_MARK, - G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, - G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_OTHER_LETTER, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, G_UNICODE_UNASSIGNED, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, - G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_NON_SPACING_MARK, G_UNICODE_OTHER_LETTER, - G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, - G_UNICODE_COMBINING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_COMBINING_MARK, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_CURRENCY_SYMBOL, G_UNICODE_CURRENCY_SYMBOL, - G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, - G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED - }, - { /* page 10, index 9 */ - G_UNICODE_UNASSIGNED, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_COMBINING_MARK, - G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_UNASSIGNED, G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, - G_UNICODE_COMBINING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_COMBINING_MARK, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_OTHER_LETTER, - G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, - G_UNICODE_COMBINING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_UNASSIGNED, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_COMBINING_MARK, - G_UNICODE_UNASSIGNED, G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_UNASSIGNED, - G_UNICODE_CURRENCY_SYMBOL, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED - }, - { /* page 11, index 10 */ - G_UNICODE_UNASSIGNED, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, G_UNICODE_UNASSIGNED, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_NON_SPACING_MARK, G_UNICODE_OTHER_LETTER, - G_UNICODE_COMBINING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_COMBINING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_COMBINING_MARK, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_LETTER, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_NON_SPACING_MARK, G_UNICODE_OTHER_LETTER, - G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, - G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_COMBINING_MARK, - G_UNICODE_COMBINING_MARK, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, - G_UNICODE_COMBINING_MARK, G_UNICODE_UNASSIGNED, G_UNICODE_COMBINING_MARK, - G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_COMBINING_MARK, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_CURRENCY_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED - }, - { /* page 12, index 11 */ - G_UNICODE_UNASSIGNED, G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, - G_UNICODE_COMBINING_MARK, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, - G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, G_UNICODE_UNASSIGNED, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_UNASSIGNED, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_COMBINING_MARK, - G_UNICODE_COMBINING_MARK, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_OTHER_LETTER, - G_UNICODE_COMBINING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, - G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, - G_UNICODE_COMBINING_MARK, G_UNICODE_UNASSIGNED, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_COMBINING_MARK, - G_UNICODE_COMBINING_MARK, G_UNICODE_UNASSIGNED, G_UNICODE_COMBINING_MARK, - G_UNICODE_COMBINING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_COMBINING_MARK, - G_UNICODE_COMBINING_MARK, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, - G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED - }, - { /* page 13, index 12 */ - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_COMBINING_MARK, - G_UNICODE_COMBINING_MARK, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_COMBINING_MARK, - G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, - G_UNICODE_COMBINING_MARK, G_UNICODE_UNASSIGNED, G_UNICODE_COMBINING_MARK, - G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_COMBINING_MARK, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_COMBINING_MARK, - G_UNICODE_COMBINING_MARK, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, - G_UNICODE_COMBINING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_UNASSIGNED, G_UNICODE_NON_SPACING_MARK, G_UNICODE_UNASSIGNED, - G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, - G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, - G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, - G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_COMBINING_MARK, - G_UNICODE_COMBINING_MARK, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED - }, - { /* page 14, index 13 */ - G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_CURRENCY_SYMBOL, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_MODIFIER_LETTER, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, - G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_UNASSIGNED, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_UNASSIGNED, G_UNICODE_MODIFIER_LETTER, G_UNICODE_UNASSIGNED, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED - }, - { /* page 15, index 14 */ - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, - G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, - G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, - G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_OPEN_PUNCTUATION, - G_UNICODE_CLOSE_PUNCTUATION, G_UNICODE_OPEN_PUNCTUATION, - G_UNICODE_CLOSE_PUNCTUATION, G_UNICODE_COMBINING_MARK, - G_UNICODE_COMBINING_MARK, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_COMBINING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_UNASSIGNED, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_SYMBOL, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED - }, - { /* page 16, index 15 */ - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_COMBINING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_COMBINING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_COMBINING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED - }, - { /* page 17, index 16 */ - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED - }, - { /* page 18, index 17 */ - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, - G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, - G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, - G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER - }, - { /* page 19, index 18 */ - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, - G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, - G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, - G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED - }, - { /* page 20, index 19 */ - G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER - }, - { /* page 22, index 20 */ - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_SPACE_SEPARATOR, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OPEN_PUNCTUATION, - G_UNICODE_CLOSE_PUNCTUATION, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER, - G_UNICODE_LETTER_NUMBER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED - }, - { /* page 23, index 21 */ - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_UNASSIGNED, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_FORMAT, - G_UNICODE_FORMAT, G_UNICODE_COMBINING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, - G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, - G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, - G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_COMBINING_MARK, - G_UNICODE_COMBINING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_MODIFIER_LETTER, - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_CURRENCY_SYMBOL, - G_UNICODE_OTHER_LETTER, G_UNICODE_NON_SPACING_MARK, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_NUMBER, - G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, - G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, - G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED - }, - { /* page 24, index 22 */ - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_DASH_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_SPACE_SEPARATOR, G_UNICODE_UNASSIGNED, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_MODIFIER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED - }, - { /* page 25, index 23 */ - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, - G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, - G_UNICODE_COMBINING_MARK, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_COMBINING_MARK, - G_UNICODE_COMBINING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, - G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, - G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL - }, - { /* page 29, index 24 */ - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, - G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, - G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, - G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, - G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, - G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, - G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, - G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, - G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, - G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, - G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, - G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, - G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, - G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, - G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, - G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, - G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, - G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, - G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, - G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, - G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, - G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, - G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, - G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, - G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, - G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, - G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED - }, - { /* page 30, index 25 */ - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED - }, - { /* page 31, index 26 */ - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UNASSIGNED, G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UNASSIGNED, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UNASSIGNED, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UNASSIGNED, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_TITLECASE_LETTER, G_UNICODE_TITLECASE_LETTER, - G_UNICODE_TITLECASE_LETTER, G_UNICODE_TITLECASE_LETTER, - G_UNICODE_TITLECASE_LETTER, G_UNICODE_TITLECASE_LETTER, - G_UNICODE_TITLECASE_LETTER, G_UNICODE_TITLECASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_TITLECASE_LETTER, G_UNICODE_TITLECASE_LETTER, - G_UNICODE_TITLECASE_LETTER, G_UNICODE_TITLECASE_LETTER, - G_UNICODE_TITLECASE_LETTER, G_UNICODE_TITLECASE_LETTER, - G_UNICODE_TITLECASE_LETTER, G_UNICODE_TITLECASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_TITLECASE_LETTER, G_UNICODE_TITLECASE_LETTER, - G_UNICODE_TITLECASE_LETTER, G_UNICODE_TITLECASE_LETTER, - G_UNICODE_TITLECASE_LETTER, G_UNICODE_TITLECASE_LETTER, - G_UNICODE_TITLECASE_LETTER, G_UNICODE_TITLECASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UNASSIGNED, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_TITLECASE_LETTER, G_UNICODE_MODIFIER_SYMBOL, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_MODIFIER_SYMBOL, - G_UNICODE_MODIFIER_SYMBOL, G_UNICODE_MODIFIER_SYMBOL, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UNASSIGNED, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_TITLECASE_LETTER, G_UNICODE_MODIFIER_SYMBOL, - G_UNICODE_MODIFIER_SYMBOL, G_UNICODE_MODIFIER_SYMBOL, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UNASSIGNED, - G_UNICODE_MODIFIER_SYMBOL, G_UNICODE_MODIFIER_SYMBOL, - G_UNICODE_MODIFIER_SYMBOL, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_MODIFIER_SYMBOL, G_UNICODE_MODIFIER_SYMBOL, - G_UNICODE_MODIFIER_SYMBOL, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UNASSIGNED, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_TITLECASE_LETTER, G_UNICODE_MODIFIER_SYMBOL, - G_UNICODE_MODIFIER_SYMBOL, G_UNICODE_UNASSIGNED - }, - { /* page 32, index 27 */ - G_UNICODE_SPACE_SEPARATOR, G_UNICODE_SPACE_SEPARATOR, - G_UNICODE_SPACE_SEPARATOR, G_UNICODE_SPACE_SEPARATOR, - G_UNICODE_SPACE_SEPARATOR, G_UNICODE_SPACE_SEPARATOR, - G_UNICODE_SPACE_SEPARATOR, G_UNICODE_SPACE_SEPARATOR, - G_UNICODE_SPACE_SEPARATOR, G_UNICODE_SPACE_SEPARATOR, - G_UNICODE_SPACE_SEPARATOR, G_UNICODE_SPACE_SEPARATOR, G_UNICODE_FORMAT, - G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, - G_UNICODE_DASH_PUNCTUATION, G_UNICODE_DASH_PUNCTUATION, - G_UNICODE_DASH_PUNCTUATION, G_UNICODE_DASH_PUNCTUATION, - G_UNICODE_DASH_PUNCTUATION, G_UNICODE_DASH_PUNCTUATION, - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_INITIAL_PUNCTUATION, G_UNICODE_FINAL_PUNCTUATION, - G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_INITIAL_PUNCTUATION, - G_UNICODE_INITIAL_PUNCTUATION, G_UNICODE_FINAL_PUNCTUATION, - G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_INITIAL_PUNCTUATION, - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_LINE_SEPARATOR, G_UNICODE_PARAGRAPH_SEPARATOR, - G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, - G_UNICODE_FORMAT, G_UNICODE_SPACE_SEPARATOR, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_INITIAL_PUNCTUATION, G_UNICODE_FINAL_PUNCTUATION, - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_CONNECT_PUNCTUATION, G_UNICODE_CONNECT_PUNCTUATION, - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_MATH_SYMBOL, - G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_CLOSE_PUNCTUATION, - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_MATH_SYMBOL, - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_CONNECT_PUNCTUATION, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_SPACE_SEPARATOR, G_UNICODE_FORMAT, - G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, - G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_OTHER_NUMBER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, - G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_CLOSE_PUNCTUATION, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_OTHER_NUMBER, - G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, - G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, - G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_CLOSE_PUNCTUATION, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_CURRENCY_SYMBOL, - G_UNICODE_CURRENCY_SYMBOL, G_UNICODE_CURRENCY_SYMBOL, - G_UNICODE_CURRENCY_SYMBOL, G_UNICODE_CURRENCY_SYMBOL, - G_UNICODE_CURRENCY_SYMBOL, G_UNICODE_CURRENCY_SYMBOL, - G_UNICODE_CURRENCY_SYMBOL, G_UNICODE_CURRENCY_SYMBOL, - G_UNICODE_CURRENCY_SYMBOL, G_UNICODE_CURRENCY_SYMBOL, - G_UNICODE_CURRENCY_SYMBOL, G_UNICODE_CURRENCY_SYMBOL, - G_UNICODE_CURRENCY_SYMBOL, G_UNICODE_CURRENCY_SYMBOL, - G_UNICODE_CURRENCY_SYMBOL, G_UNICODE_CURRENCY_SYMBOL, - G_UNICODE_CURRENCY_SYMBOL, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_ENCLOSING_MARK, G_UNICODE_ENCLOSING_MARK, - G_UNICODE_ENCLOSING_MARK, G_UNICODE_ENCLOSING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_ENCLOSING_MARK, - G_UNICODE_ENCLOSING_MARK, G_UNICODE_ENCLOSING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED - }, - { /* page 33, index 28 */ - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_UNASSIGNED, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, - G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, - G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, - G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, - G_UNICODE_OTHER_NUMBER, G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER, - G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER, - G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER, - G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER, - G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER, - G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER, - G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER, - G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER, - G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER, - G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER, - G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER, - G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER, - G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER, - G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER, - G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER, - G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER, - G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER, - G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL - }, - { /* page 35, index 29 */ - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_CLOSE_PUNCTUATION, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_OPEN_PUNCTUATION, - G_UNICODE_CLOSE_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED - }, - { /* page 36, index 30 */ - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, - G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, - G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, - G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, - G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, - G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, - G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, - G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, - G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, - G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, - G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, - G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, - G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, - G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, - G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, - G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, - G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, - G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, - G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, - G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, - G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, - G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, - G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, - G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, - G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, - G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, - G_UNICODE_OTHER_NUMBER - }, - { /* page 37, index 31 */ - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL - }, - { /* page 38, index 32 */ - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED - }, - { /* page 39, index 33 */ - G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_UNASSIGNED, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_CLOSE_PUNCTUATION, - G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_CLOSE_PUNCTUATION, - G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_CLOSE_PUNCTUATION, - G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_CLOSE_PUNCTUATION, - G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_CLOSE_PUNCTUATION, - G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_CLOSE_PUNCTUATION, - G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_CLOSE_PUNCTUATION, - G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, - G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, - G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, - G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, - G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, - G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, - G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, - G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, - G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, - G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_OPEN_PUNCTUATION, - G_UNICODE_CLOSE_PUNCTUATION, G_UNICODE_OPEN_PUNCTUATION, - G_UNICODE_CLOSE_PUNCTUATION, G_UNICODE_OPEN_PUNCTUATION, - G_UNICODE_CLOSE_PUNCTUATION, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL - }, - { /* page 41, index 34 */ - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_OPEN_PUNCTUATION, - G_UNICODE_CLOSE_PUNCTUATION, G_UNICODE_OPEN_PUNCTUATION, - G_UNICODE_CLOSE_PUNCTUATION, G_UNICODE_OPEN_PUNCTUATION, - G_UNICODE_CLOSE_PUNCTUATION, G_UNICODE_OPEN_PUNCTUATION, - G_UNICODE_CLOSE_PUNCTUATION, G_UNICODE_OPEN_PUNCTUATION, - G_UNICODE_CLOSE_PUNCTUATION, G_UNICODE_OPEN_PUNCTUATION, - G_UNICODE_CLOSE_PUNCTUATION, G_UNICODE_OPEN_PUNCTUATION, - G_UNICODE_CLOSE_PUNCTUATION, G_UNICODE_OPEN_PUNCTUATION, - G_UNICODE_CLOSE_PUNCTUATION, G_UNICODE_OPEN_PUNCTUATION, - G_UNICODE_CLOSE_PUNCTUATION, G_UNICODE_OPEN_PUNCTUATION, - G_UNICODE_CLOSE_PUNCTUATION, G_UNICODE_OPEN_PUNCTUATION, - G_UNICODE_CLOSE_PUNCTUATION, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_OPEN_PUNCTUATION, - G_UNICODE_CLOSE_PUNCTUATION, G_UNICODE_OPEN_PUNCTUATION, - G_UNICODE_CLOSE_PUNCTUATION, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_OPEN_PUNCTUATION, - G_UNICODE_CLOSE_PUNCTUATION, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL - }, - { /* page 43, index 35 */ - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED - }, - { /* page 46, index 36 */ - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED - }, - { /* page 47, index 37 */ - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED - }, - { /* page 48, index 38 */ - G_UNICODE_SPACE_SEPARATOR, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_MODIFIER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_LETTER_NUMBER, - G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_CLOSE_PUNCTUATION, - G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_CLOSE_PUNCTUATION, - G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_CLOSE_PUNCTUATION, - G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_CLOSE_PUNCTUATION, - G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_CLOSE_PUNCTUATION, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_CLOSE_PUNCTUATION, - G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_CLOSE_PUNCTUATION, - G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_CLOSE_PUNCTUATION, - G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_CLOSE_PUNCTUATION, - G_UNICODE_DASH_PUNCTUATION, G_UNICODE_OPEN_PUNCTUATION, - G_UNICODE_CLOSE_PUNCTUATION, G_UNICODE_CLOSE_PUNCTUATION, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER, - G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER, - G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER, - G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER, - G_UNICODE_LETTER_NUMBER, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_DASH_PUNCTUATION, - G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, - G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, - G_UNICODE_MODIFIER_LETTER, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER, - G_UNICODE_LETTER_NUMBER, G_UNICODE_MODIFIER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_UNASSIGNED, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_MODIFIER_SYMBOL, - G_UNICODE_MODIFIER_SYMBOL, G_UNICODE_MODIFIER_LETTER, - G_UNICODE_MODIFIER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_DASH_PUNCTUATION, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_CONNECT_PUNCTUATION, G_UNICODE_MODIFIER_LETTER, - G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, - G_UNICODE_OTHER_LETTER - }, - { /* page 49, index 39 */ - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_NUMBER, - G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER - }, - { /* page 50, index 40 */ - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_NUMBER, - G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, - G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, - G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, - G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, - G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, - G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, - G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_NUMBER, - G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, - G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, - G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, - G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, - G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, - G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, - G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_UNASSIGNED - }, - { /* page 77, index 41 */ - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL - }, - { /* page 159, index 42 */ - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED - }, - { /* page 164, index 43 */ - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED - }, - { /* page 215, index 44 */ - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED - }, - { /* page 250, index 45 */ - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED - }, - { /* page 251, index 46 */ - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_MATH_SYMBOL, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, - G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER - }, - { /* page 253, index 47 */ - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_CLOSE_PUNCTUATION, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_CURRENCY_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED - }, - { /* page 254, index 48 */ - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_DASH_PUNCTUATION, G_UNICODE_DASH_PUNCTUATION, - G_UNICODE_CONNECT_PUNCTUATION, G_UNICODE_CONNECT_PUNCTUATION, - G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_CLOSE_PUNCTUATION, - G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_CLOSE_PUNCTUATION, - G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_CLOSE_PUNCTUATION, - G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_CLOSE_PUNCTUATION, - G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_CLOSE_PUNCTUATION, - G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_CLOSE_PUNCTUATION, - G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_CLOSE_PUNCTUATION, - G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_CLOSE_PUNCTUATION, - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_CLOSE_PUNCTUATION, - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_CONNECT_PUNCTUATION, G_UNICODE_CONNECT_PUNCTUATION, - G_UNICODE_CONNECT_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_DASH_PUNCTUATION, - G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_CLOSE_PUNCTUATION, - G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_CLOSE_PUNCTUATION, - G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_CLOSE_PUNCTUATION, - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_MATH_SYMBOL, - G_UNICODE_DASH_PUNCTUATION, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_CURRENCY_SYMBOL, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_FORMAT - }, - { /* page 255, index 49 */ - G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_CURRENCY_SYMBOL, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_CLOSE_PUNCTUATION, - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_MATH_SYMBOL, - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_DASH_PUNCTUATION, - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_CLOSE_PUNCTUATION, G_UNICODE_MODIFIER_SYMBOL, - G_UNICODE_CONNECT_PUNCTUATION, G_UNICODE_MODIFIER_SYMBOL, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_MATH_SYMBOL, - G_UNICODE_CLOSE_PUNCTUATION, G_UNICODE_MATH_SYMBOL, - G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_CLOSE_PUNCTUATION, - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OPEN_PUNCTUATION, - G_UNICODE_CLOSE_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_CONNECT_PUNCTUATION, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_MODIFIER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_CURRENCY_SYMBOL, - G_UNICODE_CURRENCY_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MODIFIER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_CURRENCY_SYMBOL, G_UNICODE_CURRENCY_SYMBOL, - G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED - }, - { /* page 256, index 50 */ - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED - }, - { /* page 257, index 51 */ - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_NUMBER, - G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, - G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, - G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, - G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, - G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, - G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, - G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, - G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, - G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, - G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, - G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, - G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, - G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, - G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, - G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED - }, - { /* page 259, index 52 */ - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_NUMBER, - G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_LETTER_NUMBER, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED - }, - { /* page 260, index 53 */ - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED - }, - { /* page 264, index 54 */ - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, - G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED - }, - { /* page 464, index 55 */ - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED - }, - { /* page 465, index 56 */ - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_COMBINING_MARK, - G_UNICODE_COMBINING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, - G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, - G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, G_UNICODE_FORMAT, - G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, - G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED - }, - { /* page 467, index 57 */ - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED - }, - { /* page 468, index 58 */ - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UNASSIGNED, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UNASSIGNED, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UNASSIGNED, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UNASSIGNED, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UNASSIGNED, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UNASSIGNED, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER - }, - { /* page 469, index 59 */ - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UNASSIGNED, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UNASSIGNED, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UNASSIGNED, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UNASSIGNED, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UNASSIGNED, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UNASSIGNED, G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UNASSIGNED, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER - }, - { /* page 470, index 60 */ - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_MATH_SYMBOL, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_MATH_SYMBOL, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_MATH_SYMBOL, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER - }, - { /* page 471, index 61 */ - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_MATH_SYMBOL, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_MATH_SYMBOL, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_MATH_SYMBOL, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_MATH_SYMBOL, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_MATH_SYMBOL, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_MATH_SYMBOL, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_MATH_SYMBOL, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER - }, - { /* page 678, index 62 */ - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED - }, - { /* page 762, index 63 */ - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED - }, - { /* page 3584, index 64 */ - G_UNICODE_UNASSIGNED, G_UNICODE_FORMAT, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_FORMAT, - G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, - G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, - G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, - G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, - G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, - G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, - G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, - G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, - G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, - G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, - G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, - G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, - G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, - G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, - G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, - G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, - G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, - G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, - G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, - G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, - G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, - G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, - G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, - G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED - }, - { /* page 3585, index 65 */ - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED - }, - { /* page 4095, index 66 */ - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED - }, - { /* page 4351, index 67 */ - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED - } -}; - -/* U+0000 through U+2FAFF */ -static const gint16 type_table_part1[763] = { - 0 /* page 0 */, - 1 /* page 1 */, - 2 /* page 2 */, - 3 /* page 3 */, - 4 /* page 4 */, - 5 /* page 5 */, - 6 /* page 6 */, - 7 /* page 7 */, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - 8 /* page 9 */, - 9 /* page 10 */, - 10 /* page 11 */, - 11 /* page 12 */, - 12 /* page 13 */, - 13 /* page 14 */, - 14 /* page 15 */, - 15 /* page 16 */, - 16 /* page 17 */, - 17 /* page 18 */, - 18 /* page 19 */, - 19 /* page 20 */, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - 20 /* page 22 */, - 21 /* page 23 */, - 22 /* page 24 */, - 23 /* page 25 */, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - 24 /* page 29 */, - 25 /* page 30 */, - 26 /* page 31 */, - 27 /* page 32 */, - 28 /* page 33 */, - G_UNICODE_MATH_SYMBOL + G_UNICODE_MAX_TABLE_INDEX, - 29 /* page 35 */, - 30 /* page 36 */, - 31 /* page 37 */, - 32 /* page 38 */, - 33 /* page 39 */, - G_UNICODE_OTHER_SYMBOL + G_UNICODE_MAX_TABLE_INDEX, - 34 /* page 41 */, - G_UNICODE_MATH_SYMBOL + G_UNICODE_MAX_TABLE_INDEX, - 35 /* page 43 */, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - 36 /* page 46 */, - 37 /* page 47 */, - 38 /* page 48 */, - 39 /* page 49 */, - 40 /* page 50 */, - G_UNICODE_OTHER_SYMBOL + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - 41 /* page 77 */, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - 42 /* page 159 */, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - 43 /* page 164 */, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - 44 /* page 215 */, - G_UNICODE_SURROGATE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_SURROGATE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_SURROGATE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_SURROGATE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_SURROGATE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_SURROGATE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_SURROGATE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_SURROGATE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - 45 /* page 250 */, - 46 /* page 251 */, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - 47 /* page 253 */, - 48 /* page 254 */, - 49 /* page 255 */, - 50 /* page 256 */, - 51 /* page 257 */, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - 52 /* page 259 */, - 53 /* page 260 */, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - 54 /* page 264 */, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - 55 /* page 464 */, - 56 /* page 465 */, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - 57 /* page 467 */, - 58 /* page 468 */, - 59 /* page 469 */, - 60 /* page 470 */, - 61 /* page 471 */, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - 62 /* page 678 */, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - 63 /* page 762 */ -}; - -/* U+E0000 through U+10FFFF */ -static const gint16 type_table_part2[768] = { - 64 /* page 3584 */, - 65 /* page 3585 */, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - 66 /* page 4095 */, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - 67 /* page 4351 */ -}; - -static const gunichar attr_data[][256] = { - { /* page 0, index 0 */ - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, - 0x0006, 0x0007, 0x0008, 0x0009, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, - 0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, 0x0070, - 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078, 0x0079, - 0x007a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0041, 0x0042, - 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, 0x0048, 0x0049, 0x004a, 0x004b, - 0x004c, 0x004d, 0x004e, 0x004f, 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, - 0x0055, 0x0056, 0x0057, 0x0058, 0x0059, 0x005a, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x039c, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x00e0, 0x00e1, 0x00e2, 0x00e3, 0x00e4, 0x00e5, - 0x00e6, 0x00e7, 0x00e8, 0x00e9, 0x00ea, 0x00eb, 0x00ec, 0x00ed, 0x00ee, - 0x00ef, 0x00f0, 0x00f1, 0x00f2, 0x00f3, 0x00f4, 0x00f5, 0x00f6, 0x0000, - 0x00f8, 0x00f9, 0x00fa, 0x00fb, 0x00fc, 0x00fd, 0x00fe, 0x1000000, - 0x00c0, 0x00c1, 0x00c2, 0x00c3, 0x00c4, 0x00c5, 0x00c6, 0x00c7, 0x00c8, - 0x00c9, 0x00ca, 0x00cb, 0x00cc, 0x00cd, 0x00ce, 0x00cf, 0x00d0, 0x00d1, - 0x00d2, 0x00d3, 0x00d4, 0x00d5, 0x00d6, 0x0000, 0x00d8, 0x00d9, 0x00da, - 0x00db, 0x00dc, 0x00dd, 0x00de, 0x0178 - }, - { /* page 1, index 1 */ - 0x0101, 0x0100, 0x0103, 0x0102, 0x0105, 0x0104, 0x0107, 0x0106, 0x0109, - 0x0108, 0x010b, 0x010a, 0x010d, 0x010c, 0x010f, 0x010e, 0x0111, 0x0110, - 0x0113, 0x0112, 0x0115, 0x0114, 0x0117, 0x0116, 0x0119, 0x0118, 0x011b, - 0x011a, 0x011d, 0x011c, 0x011f, 0x011e, 0x0121, 0x0120, 0x0123, 0x0122, - 0x0125, 0x0124, 0x0127, 0x0126, 0x0129, 0x0128, 0x012b, 0x012a, 0x012d, - 0x012c, 0x012f, 0x012e, 0x1000007, 0x0049, 0x0133, 0x0132, 0x0135, - 0x0134, 0x0137, 0x0136, 0x0000, 0x013a, 0x0139, 0x013c, 0x013b, 0x013e, - 0x013d, 0x0140, 0x013f, 0x0142, 0x0141, 0x0144, 0x0143, 0x0146, 0x0145, - 0x0148, 0x0147, 0x1000086, 0x014b, 0x014a, 0x014d, 0x014c, 0x014f, - 0x014e, 0x0151, 0x0150, 0x0153, 0x0152, 0x0155, 0x0154, 0x0157, 0x0156, - 0x0159, 0x0158, 0x015b, 0x015a, 0x015d, 0x015c, 0x015f, 0x015e, 0x0161, - 0x0160, 0x0163, 0x0162, 0x0165, 0x0164, 0x0167, 0x0166, 0x0169, 0x0168, - 0x016b, 0x016a, 0x016d, 0x016c, 0x016f, 0x016e, 0x0171, 0x0170, 0x0173, - 0x0172, 0x0175, 0x0174, 0x0177, 0x0176, 0x00ff, 0x017a, 0x0179, 0x017c, - 0x017b, 0x017e, 0x017d, 0x0053, 0x0000, 0x0253, 0x0183, 0x0182, 0x0185, - 0x0184, 0x0254, 0x0188, 0x0187, 0x0256, 0x0257, 0x018c, 0x018b, 0x0000, - 0x01dd, 0x0259, 0x025b, 0x0192, 0x0191, 0x0260, 0x0263, 0x01f6, 0x0269, - 0x0268, 0x0199, 0x0198, 0x0000, 0x0000, 0x026f, 0x0272, 0x0220, 0x0275, - 0x01a1, 0x01a0, 0x01a3, 0x01a2, 0x01a5, 0x01a4, 0x0280, 0x01a8, 0x01a7, - 0x0283, 0x0000, 0x0000, 0x01ad, 0x01ac, 0x0288, 0x01b0, 0x01af, 0x028a, - 0x028b, 0x01b4, 0x01b3, 0x01b6, 0x01b5, 0x0292, 0x01b9, 0x01b8, 0x0000, - 0x0000, 0x01bd, 0x01bc, 0x0000, 0x01f7, 0x0000, 0x0000, 0x0000, 0x0000, - 0x01c6, 0x0000, 0x01c4, 0x01c9, 0x0000, 0x01c7, 0x01cc, 0x0000, 0x01ca, - 0x01ce, 0x01cd, 0x01d0, 0x01cf, 0x01d2, 0x01d1, 0x01d4, 0x01d3, 0x01d6, - 0x01d5, 0x01d8, 0x01d7, 0x01da, 0x01d9, 0x01dc, 0x01db, 0x018e, 0x01df, - 0x01de, 0x01e1, 0x01e0, 0x01e3, 0x01e2, 0x01e5, 0x01e4, 0x01e7, 0x01e6, - 0x01e9, 0x01e8, 0x01eb, 0x01ea, 0x01ed, 0x01ec, 0x01ef, 0x01ee, - 0x10000ad, 0x01f3, 0x0000, 0x01f1, 0x01f5, 0x01f4, 0x0195, 0x01bf, - 0x01f9, 0x01f8, 0x01fb, 0x01fa, 0x01fd, 0x01fc, 0x01ff, 0x01fe - }, - { /* page 2, index 2 */ - 0x0201, 0x0200, 0x0203, 0x0202, 0x0205, 0x0204, 0x0207, 0x0206, 0x0209, - 0x0208, 0x020b, 0x020a, 0x020d, 0x020c, 0x020f, 0x020e, 0x0211, 0x0210, - 0x0213, 0x0212, 0x0215, 0x0214, 0x0217, 0x0216, 0x0219, 0x0218, 0x021b, - 0x021a, 0x021d, 0x021c, 0x021f, 0x021e, 0x019e, 0x0000, 0x0223, 0x0222, - 0x0225, 0x0224, 0x0227, 0x0226, 0x0229, 0x0228, 0x022b, 0x022a, 0x022d, - 0x022c, 0x022f, 0x022e, 0x0231, 0x0230, 0x0233, 0x0232, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0181, 0x0186, 0x0000, 0x0189, 0x018a, 0x0000, 0x018f, - 0x0000, 0x0190, 0x0000, 0x0000, 0x0000, 0x0000, 0x0193, 0x0000, 0x0000, - 0x0194, 0x0000, 0x0000, 0x0000, 0x0000, 0x0197, 0x0196, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x019c, 0x0000, 0x0000, 0x019d, 0x0000, 0x0000, - 0x019f, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x01a6, 0x0000, 0x0000, 0x01a9, 0x0000, 0x0000, 0x0000, - 0x0000, 0x01ae, 0x0000, 0x01b1, 0x01b2, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x01b7, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000 - }, - { /* page 3, index 3 */ - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x03ac, - 0x0000, 0x03ad, 0x03ae, 0x03af, 0x0000, 0x03cc, 0x0000, 0x03cd, 0x03ce, - 0x100008f, 0x03b1, 0x03b2, 0x03b3, 0x03b4, 0x03b5, 0x03b6, 0x03b7, - 0x03b8, 0x03b9, 0x03ba, 0x03bb, 0x03bc, 0x03bd, 0x03be, 0x03bf, 0x03c0, - 0x03c1, 0x0000, 0x03c3, 0x03c4, 0x03c5, 0x03c6, 0x03c7, 0x03c8, 0x03c9, - 0x03ca, 0x03cb, 0x0386, 0x0388, 0x0389, 0x038a, 0x100009e, 0x0391, - 0x0392, 0x0393, 0x0394, 0x0395, 0x0396, 0x0397, 0x0398, 0x0399, 0x039a, - 0x039b, 0x039c, 0x039d, 0x039e, 0x039f, 0x03a0, 0x03a1, 0x03a3, 0x03a3, - 0x03a4, 0x03a5, 0x03a6, 0x03a7, 0x03a8, 0x03a9, 0x03aa, 0x03ab, 0x038c, - 0x038e, 0x038f, 0x0000, 0x0392, 0x0398, 0x0000, 0x0000, 0x0000, 0x03a6, - 0x03a0, 0x0000, 0x03d9, 0x03d8, 0x03db, 0x03da, 0x03dd, 0x03dc, 0x03df, - 0x03de, 0x03e1, 0x03e0, 0x03e3, 0x03e2, 0x03e5, 0x03e4, 0x03e7, 0x03e6, - 0x03e9, 0x03e8, 0x03eb, 0x03ea, 0x03ed, 0x03ec, 0x03ef, 0x03ee, 0x039a, - 0x03a1, 0x03f9, 0x0000, 0x03b8, 0x0395, 0x0000, 0x03f8, 0x03f7, 0x03f2, - 0x03fb, 0x03fa, 0x0000, 0x0000, 0x0000, 0x0000 - }, - { /* page 4, index 4 */ - 0x0450, 0x0451, 0x0452, 0x0453, 0x0454, 0x0455, 0x0456, 0x0457, 0x0458, - 0x0459, 0x045a, 0x045b, 0x045c, 0x045d, 0x045e, 0x045f, 0x0430, 0x0431, - 0x0432, 0x0433, 0x0434, 0x0435, 0x0436, 0x0437, 0x0438, 0x0439, 0x043a, - 0x043b, 0x043c, 0x043d, 0x043e, 0x043f, 0x0440, 0x0441, 0x0442, 0x0443, - 0x0444, 0x0445, 0x0446, 0x0447, 0x0448, 0x0449, 0x044a, 0x044b, 0x044c, - 0x044d, 0x044e, 0x044f, 0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415, - 0x0416, 0x0417, 0x0418, 0x0419, 0x041a, 0x041b, 0x041c, 0x041d, 0x041e, - 0x041f, 0x0420, 0x0421, 0x0422, 0x0423, 0x0424, 0x0425, 0x0426, 0x0427, - 0x0428, 0x0429, 0x042a, 0x042b, 0x042c, 0x042d, 0x042e, 0x042f, 0x0400, - 0x0401, 0x0402, 0x0403, 0x0404, 0x0405, 0x0406, 0x0407, 0x0408, 0x0409, - 0x040a, 0x040b, 0x040c, 0x040d, 0x040e, 0x040f, 0x0461, 0x0460, 0x0463, - 0x0462, 0x0465, 0x0464, 0x0467, 0x0466, 0x0469, 0x0468, 0x046b, 0x046a, - 0x046d, 0x046c, 0x046f, 0x046e, 0x0471, 0x0470, 0x0473, 0x0472, 0x0475, - 0x0474, 0x0477, 0x0476, 0x0479, 0x0478, 0x047b, 0x047a, 0x047d, 0x047c, - 0x047f, 0x047e, 0x0481, 0x0480, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x048b, 0x048a, 0x048d, 0x048c, 0x048f, 0x048e, - 0x0491, 0x0490, 0x0493, 0x0492, 0x0495, 0x0494, 0x0497, 0x0496, 0x0499, - 0x0498, 0x049b, 0x049a, 0x049d, 0x049c, 0x049f, 0x049e, 0x04a1, 0x04a0, - 0x04a3, 0x04a2, 0x04a5, 0x04a4, 0x04a7, 0x04a6, 0x04a9, 0x04a8, 0x04ab, - 0x04aa, 0x04ad, 0x04ac, 0x04af, 0x04ae, 0x04b1, 0x04b0, 0x04b3, 0x04b2, - 0x04b5, 0x04b4, 0x04b7, 0x04b6, 0x04b9, 0x04b8, 0x04bb, 0x04ba, 0x04bd, - 0x04bc, 0x04bf, 0x04be, 0x0000, 0x04c2, 0x04c1, 0x04c4, 0x04c3, 0x04c6, - 0x04c5, 0x04c8, 0x04c7, 0x04ca, 0x04c9, 0x04cc, 0x04cb, 0x04ce, 0x04cd, - 0x0000, 0x04d1, 0x04d0, 0x04d3, 0x04d2, 0x04d5, 0x04d4, 0x04d7, 0x04d6, - 0x04d9, 0x04d8, 0x04db, 0x04da, 0x04dd, 0x04dc, 0x04df, 0x04de, 0x04e1, - 0x04e0, 0x04e3, 0x04e2, 0x04e5, 0x04e4, 0x04e7, 0x04e6, 0x04e9, 0x04e8, - 0x04eb, 0x04ea, 0x04ed, 0x04ec, 0x04ef, 0x04ee, 0x04f1, 0x04f0, 0x04f3, - 0x04f2, 0x04f5, 0x04f4, 0x0000, 0x0000, 0x04f9, 0x04f8, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000 - }, - { /* page 5, index 5 */ - 0x0501, 0x0500, 0x0503, 0x0502, 0x0505, 0x0504, 0x0507, 0x0506, 0x0509, - 0x0508, 0x050b, 0x050a, 0x050d, 0x050c, 0x050f, 0x050e, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0561, 0x0562, 0x0563, 0x0564, 0x0565, - 0x0566, 0x0567, 0x0568, 0x0569, 0x056a, 0x056b, 0x056c, 0x056d, 0x056e, - 0x056f, 0x0570, 0x0571, 0x0572, 0x0573, 0x0574, 0x0575, 0x0576, 0x0577, - 0x0578, 0x0579, 0x057a, 0x057b, 0x057c, 0x057d, 0x057e, 0x057f, 0x0580, - 0x0581, 0x0582, 0x0583, 0x0584, 0x0585, 0x0586, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0531, 0x0532, - 0x0533, 0x0534, 0x0535, 0x0536, 0x0537, 0x0538, 0x0539, 0x053a, 0x053b, - 0x053c, 0x053d, 0x053e, 0x053f, 0x0540, 0x0541, 0x0542, 0x0543, 0x0544, - 0x0545, 0x0546, 0x0547, 0x0548, 0x0549, 0x054a, 0x054b, 0x054c, 0x054d, - 0x054e, 0x054f, 0x0550, 0x0551, 0x0552, 0x0553, 0x0554, 0x0555, 0x0556, - 0x1000044, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000 - }, - { /* page 6, index 6 */ - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0002, - 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0002, - 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000 - }, - { /* page 9, index 7 */ - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, - 0x0006, 0x0007, 0x0008, 0x0009, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0002, 0x0003, - 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000 - }, - { /* page 10, index 8 */ - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, - 0x0006, 0x0007, 0x0008, 0x0009, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0002, 0x0003, - 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000 - }, - { /* page 11, index 9 */ - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, - 0x0006, 0x0007, 0x0008, 0x0009, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0002, 0x0003, - 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000 - }, - { /* page 12, index 10 */ - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, - 0x0006, 0x0007, 0x0008, 0x0009, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0002, 0x0003, - 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000 - }, - { /* page 13, index 11 */ - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, - 0x0006, 0x0007, 0x0008, 0x0009, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000 - }, - { /* page 14, index 12 */ - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, - 0x0008, 0x0009, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000 - }, - { /* page 15, index 13 */ - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0002, 0x0003, - 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000 - }, - { /* page 16, index 14 */ - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, - 0x0008, 0x0009, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000 - }, - { /* page 19, index 15 */ - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0002, 0x0003, - 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000 - }, - { /* page 23, index 16 */ - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000 - }, - { /* page 24, index 17 */ - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, - 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000 - }, - { /* page 25, index 18 */ - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, - 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000 - }, - { /* page 30, index 19 */ - 0x1e01, 0x1e00, 0x1e03, 0x1e02, 0x1e05, 0x1e04, 0x1e07, 0x1e06, 0x1e09, - 0x1e08, 0x1e0b, 0x1e0a, 0x1e0d, 0x1e0c, 0x1e0f, 0x1e0e, 0x1e11, 0x1e10, - 0x1e13, 0x1e12, 0x1e15, 0x1e14, 0x1e17, 0x1e16, 0x1e19, 0x1e18, 0x1e1b, - 0x1e1a, 0x1e1d, 0x1e1c, 0x1e1f, 0x1e1e, 0x1e21, 0x1e20, 0x1e23, 0x1e22, - 0x1e25, 0x1e24, 0x1e27, 0x1e26, 0x1e29, 0x1e28, 0x1e2b, 0x1e2a, 0x1e2d, - 0x1e2c, 0x1e2f, 0x1e2e, 0x1e31, 0x1e30, 0x1e33, 0x1e32, 0x1e35, 0x1e34, - 0x1e37, 0x1e36, 0x1e39, 0x1e38, 0x1e3b, 0x1e3a, 0x1e3d, 0x1e3c, 0x1e3f, - 0x1e3e, 0x1e41, 0x1e40, 0x1e43, 0x1e42, 0x1e45, 0x1e44, 0x1e47, 0x1e46, - 0x1e49, 0x1e48, 0x1e4b, 0x1e4a, 0x1e4d, 0x1e4c, 0x1e4f, 0x1e4e, 0x1e51, - 0x1e50, 0x1e53, 0x1e52, 0x1e55, 0x1e54, 0x1e57, 0x1e56, 0x1e59, 0x1e58, - 0x1e5b, 0x1e5a, 0x1e5d, 0x1e5c, 0x1e5f, 0x1e5e, 0x1e61, 0x1e60, 0x1e63, - 0x1e62, 0x1e65, 0x1e64, 0x1e67, 0x1e66, 0x1e69, 0x1e68, 0x1e6b, 0x1e6a, - 0x1e6d, 0x1e6c, 0x1e6f, 0x1e6e, 0x1e71, 0x1e70, 0x1e73, 0x1e72, 0x1e75, - 0x1e74, 0x1e77, 0x1e76, 0x1e79, 0x1e78, 0x1e7b, 0x1e7a, 0x1e7d, 0x1e7c, - 0x1e7f, 0x1e7e, 0x1e81, 0x1e80, 0x1e83, 0x1e82, 0x1e85, 0x1e84, 0x1e87, - 0x1e86, 0x1e89, 0x1e88, 0x1e8b, 0x1e8a, 0x1e8d, 0x1e8c, 0x1e8f, 0x1e8e, - 0x1e91, 0x1e90, 0x1e93, 0x1e92, 0x1e95, 0x1e94, 0x10000b6, 0x10000bf, - 0x10000c8, 0x10000d1, 0x10000da, 0x1e60, 0x0000, 0x0000, 0x0000, 0x0000, - 0x1ea1, 0x1ea0, 0x1ea3, 0x1ea2, 0x1ea5, 0x1ea4, 0x1ea7, 0x1ea6, 0x1ea9, - 0x1ea8, 0x1eab, 0x1eaa, 0x1ead, 0x1eac, 0x1eaf, 0x1eae, 0x1eb1, 0x1eb0, - 0x1eb3, 0x1eb2, 0x1eb5, 0x1eb4, 0x1eb7, 0x1eb6, 0x1eb9, 0x1eb8, 0x1ebb, - 0x1eba, 0x1ebd, 0x1ebc, 0x1ebf, 0x1ebe, 0x1ec1, 0x1ec0, 0x1ec3, 0x1ec2, - 0x1ec5, 0x1ec4, 0x1ec7, 0x1ec6, 0x1ec9, 0x1ec8, 0x1ecb, 0x1eca, 0x1ecd, - 0x1ecc, 0x1ecf, 0x1ece, 0x1ed1, 0x1ed0, 0x1ed3, 0x1ed2, 0x1ed5, 0x1ed4, - 0x1ed7, 0x1ed6, 0x1ed9, 0x1ed8, 0x1edb, 0x1eda, 0x1edd, 0x1edc, 0x1edf, - 0x1ede, 0x1ee1, 0x1ee0, 0x1ee3, 0x1ee2, 0x1ee5, 0x1ee4, 0x1ee7, 0x1ee6, - 0x1ee9, 0x1ee8, 0x1eeb, 0x1eea, 0x1eed, 0x1eec, 0x1eef, 0x1eee, 0x1ef1, - 0x1ef0, 0x1ef3, 0x1ef2, 0x1ef5, 0x1ef4, 0x1ef7, 0x1ef6, 0x1ef9, 0x1ef8, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000 - }, - { /* page 31, index 20 */ - 0x1f08, 0x1f09, 0x1f0a, 0x1f0b, 0x1f0c, 0x1f0d, 0x1f0e, 0x1f0f, 0x1f00, - 0x1f01, 0x1f02, 0x1f03, 0x1f04, 0x1f05, 0x1f06, 0x1f07, 0x1f18, 0x1f19, - 0x1f1a, 0x1f1b, 0x1f1c, 0x1f1d, 0x0000, 0x0000, 0x1f10, 0x1f11, 0x1f12, - 0x1f13, 0x1f14, 0x1f15, 0x0000, 0x0000, 0x1f28, 0x1f29, 0x1f2a, 0x1f2b, - 0x1f2c, 0x1f2d, 0x1f2e, 0x1f2f, 0x1f20, 0x1f21, 0x1f22, 0x1f23, 0x1f24, - 0x1f25, 0x1f26, 0x1f27, 0x1f38, 0x1f39, 0x1f3a, 0x1f3b, 0x1f3c, 0x1f3d, - 0x1f3e, 0x1f3f, 0x1f30, 0x1f31, 0x1f32, 0x1f33, 0x1f34, 0x1f35, 0x1f36, - 0x1f37, 0x1f48, 0x1f49, 0x1f4a, 0x1f4b, 0x1f4c, 0x1f4d, 0x0000, 0x0000, - 0x1f40, 0x1f41, 0x1f42, 0x1f43, 0x1f44, 0x1f45, 0x0000, 0x0000, - 0x10000e3, 0x1f59, 0x10000ee, 0x1f5b, 0x10000fd, 0x1f5d, 0x100010c, - 0x1f5f, 0x0000, 0x1f51, 0x0000, 0x1f53, 0x0000, 0x1f55, 0x0000, 0x1f57, - 0x1f68, 0x1f69, 0x1f6a, 0x1f6b, 0x1f6c, 0x1f6d, 0x1f6e, 0x1f6f, 0x1f60, - 0x1f61, 0x1f62, 0x1f63, 0x1f64, 0x1f65, 0x1f66, 0x1f67, 0x1fba, 0x1fbb, - 0x1fc8, 0x1fc9, 0x1fca, 0x1fcb, 0x1fda, 0x1fdb, 0x1ff8, 0x1ff9, 0x1fea, - 0x1feb, 0x1ffa, 0x1ffb, 0x0000, 0x0000, 0x10001b7, 0x10001c4, 0x10001d1, - 0x10001de, 0x10001eb, 0x10001f8, 0x1000205, 0x1000212, 0x100021f, - 0x1000229, 0x1000233, 0x100023d, 0x1000247, 0x1000251, 0x100025b, - 0x1000265, 0x100026f, 0x100027c, 0x1000289, 0x1000296, 0x10002a3, - 0x10002b0, 0x10002bd, 0x10002ca, 0x10002d7, 0x10002e1, 0x10002eb, - 0x10002f5, 0x10002ff, 0x1000309, 0x1000313, 0x100031d, 0x1000327, - 0x1000334, 0x1000341, 0x100034e, 0x100035b, 0x1000368, 0x1000375, - 0x1000382, 0x100038f, 0x1000399, 0x10003a3, 0x10003ad, 0x10003b7, - 0x10003c1, 0x10003cb, 0x10003d5, 0x1fb8, 0x1fb9, 0x100041e, 0x10003df, - 0x100042b, 0x0000, 0x100011b, 0x1000466, 0x1fb0, 0x1fb1, 0x1f70, 0x1f71, - 0x10003eb, 0x0000, 0x0399, 0x0000, 0x0000, 0x0000, 0x1000436, 0x10003f4, - 0x1000443, 0x0000, 0x1000126, 0x1000475, 0x1f72, 0x1f73, 0x1f74, 0x1f75, - 0x1000400, 0x0000, 0x0000, 0x0000, 0x1fd8, 0x1fd9, 0x1000131, 0x1000140, - 0x0000, 0x0000, 0x100014f, 0x100015a, 0x1fd0, 0x1fd1, 0x1f76, 0x1f77, - 0x0000, 0x0000, 0x0000, 0x0000, 0x1fe8, 0x1fe9, 0x1000169, 0x1000178, - 0x1000187, 0x1fec, 0x1000192, 0x100019d, 0x1fe0, 0x1fe1, 0x1f7a, 0x1f7b, - 0x1fe5, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x100044e, 0x1000409, - 0x100045b, 0x0000, 0x10001ac, 0x1000484, 0x1f78, 0x1f79, 0x1f7c, 0x1f7d, - 0x1000415, 0x0000, 0x0000, 0x0000 - }, - { /* page 33, index 21 */ - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x03c9, 0x0000, 0x0000, 0x0000, 0x006b, 0x00e5, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000 - }, - { /* page 251, index 22 */ - 0x100000f, 0x1000016, 0x100001d, 0x1000024, 0x100002d, 0x1000036, - 0x100003d, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x100004f, 0x100005a, 0x1000065, - 0x1000070, 0x100007b, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000 - }, - { /* page 255, index 23 */ - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, - 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xff41, 0xff42, 0xff43, - 0xff44, 0xff45, 0xff46, 0xff47, 0xff48, 0xff49, 0xff4a, 0xff4b, 0xff4c, - 0xff4d, 0xff4e, 0xff4f, 0xff50, 0xff51, 0xff52, 0xff53, 0xff54, 0xff55, - 0xff56, 0xff57, 0xff58, 0xff59, 0xff5a, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0xff21, 0xff22, 0xff23, 0xff24, 0xff25, 0xff26, 0xff27, - 0xff28, 0xff29, 0xff2a, 0xff2b, 0xff2c, 0xff2d, 0xff2e, 0xff2f, 0xff30, - 0xff31, 0xff32, 0xff33, 0xff34, 0xff35, 0xff36, 0xff37, 0xff38, 0xff39, - 0xff3a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000 - }, - { /* page 260, index 24 */ - 0x10428, 0x10429, 0x1042a, 0x1042b, 0x1042c, 0x1042d, 0x1042e, 0x1042f, - 0x10430, 0x10431, 0x10432, 0x10433, 0x10434, 0x10435, 0x10436, 0x10437, - 0x10438, 0x10439, 0x1043a, 0x1043b, 0x1043c, 0x1043d, 0x1043e, 0x1043f, - 0x10440, 0x10441, 0x10442, 0x10443, 0x10444, 0x10445, 0x10446, 0x10447, - 0x10448, 0x10449, 0x1044a, 0x1044b, 0x1044c, 0x1044d, 0x1044e, 0x1044f, - 0x10400, 0x10401, 0x10402, 0x10403, 0x10404, 0x10405, 0x10406, 0x10407, - 0x10408, 0x10409, 0x1040a, 0x1040b, 0x1040c, 0x1040d, 0x1040e, 0x1040f, - 0x10410, 0x10411, 0x10412, 0x10413, 0x10414, 0x10415, 0x10416, 0x10417, - 0x10418, 0x10419, 0x1041a, 0x1041b, 0x1041c, 0x1041d, 0x1041e, 0x1041f, - 0x10420, 0x10421, 0x10422, 0x10423, 0x10424, 0x10425, 0x10426, 0x10427, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000 - }, - { /* page 471, index 25 */ - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, - 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, - 0x0009, 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, - 0x0008, 0x0009, 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, - 0x0007, 0x0008, 0x0009, 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, - 0x0006, 0x0007, 0x0008, 0x0009 - } -}; - -/* U+0000 through U+2FAFF */ -static const gint16 attr_table_part1[763] = { - 0 /* page 0 */, - 1 /* page 1 */, - 2 /* page 2 */, - 3 /* page 3 */, - 4 /* page 4 */, - 5 /* page 5 */, - 6 /* page 6 */, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 7 /* page 9 */, - 8 /* page 10 */, - 9 /* page 11 */, - 10 /* page 12 */, - 11 /* page 13 */, - 12 /* page 14 */, - 13 /* page 15 */, - 14 /* page 16 */, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 15 /* page 19 */, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 16 /* page 23 */, - 17 /* page 24 */, - 18 /* page 25 */, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 19 /* page 30 */, - 20 /* page 31 */, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 21 /* page 33 */, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 22 /* page 251 */, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 23 /* page 255 */, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 24 /* page 260 */, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 25 /* page 471 */, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX -}; - -/* U+E0000 through U+10FFFF */ -static const gint16 attr_table_part2[768] = { - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX -}; - -static const gunichar title_table[][3] = { - { 0x01c5, 0x01c4, 0x01c6 }, - { 0x01c8, 0x01c7, 0x01c9 }, - { 0x01cb, 0x01ca, 0x01cc }, - { 0x01f2, 0x01f1, 0x01f3 }, - { 0x1f88, 0x0000, 0x1f80 }, - { 0x1f89, 0x0000, 0x1f81 }, - { 0x1f8a, 0x0000, 0x1f82 }, - { 0x1f8b, 0x0000, 0x1f83 }, - { 0x1f8c, 0x0000, 0x1f84 }, - { 0x1f8d, 0x0000, 0x1f85 }, - { 0x1f8e, 0x0000, 0x1f86 }, - { 0x1f8f, 0x0000, 0x1f87 }, - { 0x1f98, 0x0000, 0x1f90 }, - { 0x1f99, 0x0000, 0x1f91 }, - { 0x1f9a, 0x0000, 0x1f92 }, - { 0x1f9b, 0x0000, 0x1f93 }, - { 0x1f9c, 0x0000, 0x1f94 }, - { 0x1f9d, 0x0000, 0x1f95 }, - { 0x1f9e, 0x0000, 0x1f96 }, - { 0x1f9f, 0x0000, 0x1f97 }, - { 0x1fa8, 0x0000, 0x1fa0 }, - { 0x1fa9, 0x0000, 0x1fa1 }, - { 0x1faa, 0x0000, 0x1fa2 }, - { 0x1fab, 0x0000, 0x1fa3 }, - { 0x1fac, 0x0000, 0x1fa4 }, - { 0x1fad, 0x0000, 0x1fa5 }, - { 0x1fae, 0x0000, 0x1fa6 }, - { 0x1faf, 0x0000, 0x1fa7 }, - { 0x1fbc, 0x0000, 0x1fb3 }, - { 0x1fcc, 0x0000, 0x1fc3 }, - { 0x1ffc, 0x0000, 0x1ff3 } -}; - - -/* Table of special cases for case conversion; each record contains - * First, the best single character mapping to lowercase if Lu, - * and to uppercase if Ll, followed by the output mapping for the two cases - * other than the case of the codepoint, in the order [Ll],[Lu],[Lt], - * encoded in UTF-8, separated and terminated by a null character. - */ -static const gchar special_case_table[] = { - "\x00\x53\x53\x00\x53\x73\0" /* offset 0 */ - "\x69\x69\xcc\x87\x00\xc4\xb0\0" /* offset 7 */ - "\x00\x46\x46\x00\x46\x66\0" /* offset 15 */ - "\x00\x46\x49\x00\x46\x69\0" /* offset 22 */ - "\x00\x46\x4c\x00\x46\x6c\0" /* offset 29 */ - "\x00\x46\x46\x49\x00\x46\x66\x69\0" /* offset 36 */ - "\x00\x46\x46\x4c\x00\x46\x66\x6c\0" /* offset 45 */ - "\x00\x53\x54\x00\x53\x74\0" /* offset 54 */ - "\x00\x53\x54\x00\x53\x74\0" /* offset 61 */ - "\x00\xd4\xb5\xd5\x92\x00\xd4\xb5\xd6\x82\0" /* offset 68 */ - "\x00\xd5\x84\xd5\x86\x00\xd5\x84\xd5\xb6\0" /* offset 79 */ - "\x00\xd5\x84\xd4\xb5\x00\xd5\x84\xd5\xa5\0" /* offset 90 */ - "\x00\xd5\x84\xd4\xbb\x00\xd5\x84\xd5\xab\0" /* offset 101 */ - "\x00\xd5\x8e\xd5\x86\x00\xd5\x8e\xd5\xb6\0" /* offset 112 */ - "\x00\xd5\x84\xd4\xbd\x00\xd5\x84\xd5\xad\0" /* offset 123 */ - "\x00\xca\xbc\x4e\x00\xca\xbc\x4e\0" /* offset 134 */ - "\x00\xce\x99\xcc\x88\xcc\x81\x00\xce\x99\xcc\x88\xcc\x81\0" /* offset 143 */ - "\x00\xce\xa5\xcc\x88\xcc\x81\x00\xce\xa5\xcc\x88\xcc\x81\0" /* offset 158 */ - "\x00\x4a\xcc\x8c\x00\x4a\xcc\x8c\0" /* offset 173 */ - "\x00\x48\xcc\xb1\x00\x48\xcc\xb1\0" /* offset 182 */ - "\x00\x54\xcc\x88\x00\x54\xcc\x88\0" /* offset 191 */ - "\x00\x57\xcc\x8a\x00\x57\xcc\x8a\0" /* offset 200 */ - "\x00\x59\xcc\x8a\x00\x59\xcc\x8a\0" /* offset 209 */ - "\x00\x41\xca\xbe\x00\x41\xca\xbe\0" /* offset 218 */ - "\x00\xce\xa5\xcc\x93\x00\xce\xa5\xcc\x93\0" /* offset 227 */ - "\x00\xce\xa5\xcc\x93\xcc\x80\x00\xce\xa5\xcc\x93\xcc\x80\0" /* offset 238 */ - "\x00\xce\xa5\xcc\x93\xcc\x81\x00\xce\xa5\xcc\x93\xcc\x81\0" /* offset 253 */ - "\x00\xce\xa5\xcc\x93\xcd\x82\x00\xce\xa5\xcc\x93\xcd\x82\0" /* offset 268 */ - "\x00\xce\x91\xcd\x82\x00\xce\x91\xcd\x82\0" /* offset 283 */ - "\x00\xce\x97\xcd\x82\x00\xce\x97\xcd\x82\0" /* offset 294 */ - "\x00\xce\x99\xcc\x88\xcc\x80\x00\xce\x99\xcc\x88\xcc\x80\0" /* offset 305 */ - "\x00\xce\x99\xcc\x88\xcc\x81\x00\xce\x99\xcc\x88\xcc\x81\0" /* offset 320 */ - "\x00\xce\x99\xcd\x82\x00\xce\x99\xcd\x82\0" /* offset 335 */ - "\x00\xce\x99\xcc\x88\xcd\x82\x00\xce\x99\xcc\x88\xcd\x82\0" /* offset 346 */ - "\x00\xce\xa5\xcc\x88\xcc\x80\x00\xce\xa5\xcc\x88\xcc\x80\0" /* offset 361 */ - "\x00\xce\xa5\xcc\x88\xcc\x81\x00\xce\xa5\xcc\x88\xcc\x81\0" /* offset 376 */ - "\x00\xce\xa1\xcc\x93\x00\xce\xa1\xcc\x93\0" /* offset 391 */ - "\x00\xce\xa5\xcd\x82\x00\xce\xa5\xcd\x82\0" /* offset 402 */ - "\x00\xce\xa5\xcc\x88\xcd\x82\x00\xce\xa5\xcc\x88\xcd\x82\0" /* offset 413 */ - "\x00\xce\xa9\xcd\x82\x00\xce\xa9\xcd\x82\0" /* offset 428 */ - "\xe1\xbe\x88\xe1\xbc\x88\xce\x99\x00\xe1\xbe\x88\0" /* offset 439 */ - "\xe1\xbe\x89\xe1\xbc\x89\xce\x99\x00\xe1\xbe\x89\0" /* offset 452 */ - "\xe1\xbe\x8a\xe1\xbc\x8a\xce\x99\x00\xe1\xbe\x8a\0" /* offset 465 */ - "\xe1\xbe\x8b\xe1\xbc\x8b\xce\x99\x00\xe1\xbe\x8b\0" /* offset 478 */ - "\xe1\xbe\x8c\xe1\xbc\x8c\xce\x99\x00\xe1\xbe\x8c\0" /* offset 491 */ - "\xe1\xbe\x8d\xe1\xbc\x8d\xce\x99\x00\xe1\xbe\x8d\0" /* offset 504 */ - "\xe1\xbe\x8e\xe1\xbc\x8e\xce\x99\x00\xe1\xbe\x8e\0" /* offset 517 */ - "\xe1\xbe\x8f\xe1\xbc\x8f\xce\x99\x00\xe1\xbe\x8f\0" /* offset 530 */ - "\xe1\xbe\x80\x00\xe1\xbc\x88\xce\x99\0" /* offset 543 */ - "\xe1\xbe\x81\x00\xe1\xbc\x89\xce\x99\0" /* offset 553 */ - "\xe1\xbe\x82\x00\xe1\xbc\x8a\xce\x99\0" /* offset 563 */ - "\xe1\xbe\x83\x00\xe1\xbc\x8b\xce\x99\0" /* offset 573 */ - "\xe1\xbe\x84\x00\xe1\xbc\x8c\xce\x99\0" /* offset 583 */ - "\xe1\xbe\x85\x00\xe1\xbc\x8d\xce\x99\0" /* offset 593 */ - "\xe1\xbe\x86\x00\xe1\xbc\x8e\xce\x99\0" /* offset 603 */ - "\xe1\xbe\x87\x00\xe1\xbc\x8f\xce\x99\0" /* offset 613 */ - "\xe1\xbe\x98\xe1\xbc\xa8\xce\x99\x00\xe1\xbe\x98\0" /* offset 623 */ - "\xe1\xbe\x99\xe1\xbc\xa9\xce\x99\x00\xe1\xbe\x99\0" /* offset 636 */ - "\xe1\xbe\x9a\xe1\xbc\xaa\xce\x99\x00\xe1\xbe\x9a\0" /* offset 649 */ - "\xe1\xbe\x9b\xe1\xbc\xab\xce\x99\x00\xe1\xbe\x9b\0" /* offset 662 */ - "\xe1\xbe\x9c\xe1\xbc\xac\xce\x99\x00\xe1\xbe\x9c\0" /* offset 675 */ - "\xe1\xbe\x9d\xe1\xbc\xad\xce\x99\x00\xe1\xbe\x9d\0" /* offset 688 */ - "\xe1\xbe\x9e\xe1\xbc\xae\xce\x99\x00\xe1\xbe\x9e\0" /* offset 701 */ - "\xe1\xbe\x9f\xe1\xbc\xaf\xce\x99\x00\xe1\xbe\x9f\0" /* offset 714 */ - "\xe1\xbe\x90\x00\xe1\xbc\xa8\xce\x99\0" /* offset 727 */ - "\xe1\xbe\x91\x00\xe1\xbc\xa9\xce\x99\0" /* offset 737 */ - "\xe1\xbe\x92\x00\xe1\xbc\xaa\xce\x99\0" /* offset 747 */ - "\xe1\xbe\x93\x00\xe1\xbc\xab\xce\x99\0" /* offset 757 */ - "\xe1\xbe\x94\x00\xe1\xbc\xac\xce\x99\0" /* offset 767 */ - "\xe1\xbe\x95\x00\xe1\xbc\xad\xce\x99\0" /* offset 777 */ - "\xe1\xbe\x96\x00\xe1\xbc\xae\xce\x99\0" /* offset 787 */ - "\xe1\xbe\x97\x00\xe1\xbc\xaf\xce\x99\0" /* offset 797 */ - "\xe1\xbe\xa8\xe1\xbd\xa8\xce\x99\x00\xe1\xbe\xa8\0" /* offset 807 */ - "\xe1\xbe\xa9\xe1\xbd\xa9\xce\x99\x00\xe1\xbe\xa9\0" /* offset 820 */ - "\xe1\xbe\xaa\xe1\xbd\xaa\xce\x99\x00\xe1\xbe\xaa\0" /* offset 833 */ - "\xe1\xbe\xab\xe1\xbd\xab\xce\x99\x00\xe1\xbe\xab\0" /* offset 846 */ - "\xe1\xbe\xac\xe1\xbd\xac\xce\x99\x00\xe1\xbe\xac\0" /* offset 859 */ - "\xe1\xbe\xad\xe1\xbd\xad\xce\x99\x00\xe1\xbe\xad\0" /* offset 872 */ - "\xe1\xbe\xae\xe1\xbd\xae\xce\x99\x00\xe1\xbe\xae\0" /* offset 885 */ - "\xe1\xbe\xaf\xe1\xbd\xaf\xce\x99\x00\xe1\xbe\xaf\0" /* offset 898 */ - "\xe1\xbe\xa0\x00\xe1\xbd\xa8\xce\x99\0" /* offset 911 */ - "\xe1\xbe\xa1\x00\xe1\xbd\xa9\xce\x99\0" /* offset 921 */ - "\xe1\xbe\xa2\x00\xe1\xbd\xaa\xce\x99\0" /* offset 931 */ - "\xe1\xbe\xa3\x00\xe1\xbd\xab\xce\x99\0" /* offset 941 */ - "\xe1\xbe\xa4\x00\xe1\xbd\xac\xce\x99\0" /* offset 951 */ - "\xe1\xbe\xa5\x00\xe1\xbd\xad\xce\x99\0" /* offset 961 */ - "\xe1\xbe\xa6\x00\xe1\xbd\xae\xce\x99\0" /* offset 971 */ - "\xe1\xbe\xa7\x00\xe1\xbd\xaf\xce\x99\0" /* offset 981 */ - "\xe1\xbe\xbc\xce\x91\xce\x99\x00\xe1\xbe\xbc\0" /* offset 991 */ - "\xe1\xbe\xb3\x00\xce\x91\xce\x99\0" /* offset 1003 */ - "\xe1\xbf\x8c\xce\x97\xce\x99\x00\xe1\xbf\x8c\0" /* offset 1012 */ - "\xe1\xbf\x83\x00\xce\x97\xce\x99\0" /* offset 1024 */ - "\xe1\xbf\xbc\xce\xa9\xce\x99\x00\xe1\xbf\xbc\0" /* offset 1033 */ - "\xe1\xbf\xb3\x00\xce\xa9\xce\x99\0" /* offset 1045 */ - "\x00\xe1\xbe\xba\xce\x99\x00\xe1\xbe\xba\xcd\x85\0" /* offset 1054 */ - "\x00\xce\x86\xce\x99\x00\xce\x86\xcd\x85\0" /* offset 1067 */ - "\x00\xe1\xbf\x8a\xce\x99\x00\xe1\xbf\x8a\xcd\x85\0" /* offset 1078 */ - "\x00\xce\x89\xce\x99\x00\xce\x89\xcd\x85\0" /* offset 1091 */ - "\x00\xe1\xbf\xba\xce\x99\x00\xe1\xbf\xba\xcd\x85\0" /* offset 1102 */ - "\x00\xce\x8f\xce\x99\x00\xce\x8f\xcd\x85\0" /* offset 1115 */ - "\x00\xce\x91\xcd\x82\xce\x99\x00\xce\x91\xcd\x82\xcd\x85\0" /* offset 1126 */ - "\x00\xce\x97\xcd\x82\xce\x99\x00\xce\x97\xcd\x82\xcd\x85\0" /* offset 1141 */ - "\x00\xce\xa9\xcd\x82\xce\x99\x00\xce\xa9\xcd\x82\xcd\x85\0" /* offset 1156 */ -}; - - -/* Table of casefolding cases that can't be derived by lowercasing - */ -static const struct { - guint16 ch; - gchar data[7]; -} casefold_table[] = { - { 0x00b5, "\xce\xbc" }, - { 0x00df, "\x73\x73" }, - { 0x0130, "\x69\xcc\x87" }, - { 0x0149, "\xca\xbc\x6e" }, - { 0x017f, "\x73" }, - { 0x01f0, "\x6a\xcc\x8c" }, - { 0x0345, "\xce\xb9" }, - { 0x0390, "\xce\xb9\xcc\x88\xcc\x81" }, - { 0x03b0, "\xcf\x85\xcc\x88\xcc\x81" }, - { 0x03c2, "\xcf\x83" }, - { 0x03d0, "\xce\xb2" }, - { 0x03d1, "\xce\xb8" }, - { 0x03d5, "\xcf\x86" }, - { 0x03d6, "\xcf\x80" }, - { 0x03f0, "\xce\xba" }, - { 0x03f1, "\xcf\x81" }, - { 0x03f5, "\xce\xb5" }, - { 0x0587, "\xd5\xa5\xd6\x82" }, - { 0x1e96, "\x68\xcc\xb1" }, - { 0x1e97, "\x74\xcc\x88" }, - { 0x1e98, "\x77\xcc\x8a" }, - { 0x1e99, "\x79\xcc\x8a" }, - { 0x1e9a, "\x61\xca\xbe" }, - { 0x1e9b, "\xe1\xb9\xa1" }, - { 0x1f50, "\xcf\x85\xcc\x93" }, - { 0x1f52, "\xcf\x85\xcc\x93\xcc\x80" }, - { 0x1f54, "\xcf\x85\xcc\x93\xcc\x81" }, - { 0x1f56, "\xcf\x85\xcc\x93\xcd\x82" }, - { 0x1f80, "\xe1\xbc\x80\xce\xb9" }, - { 0x1f81, "\xe1\xbc\x81\xce\xb9" }, - { 0x1f82, "\xe1\xbc\x82\xce\xb9" }, - { 0x1f83, "\xe1\xbc\x83\xce\xb9" }, - { 0x1f84, "\xe1\xbc\x84\xce\xb9" }, - { 0x1f85, "\xe1\xbc\x85\xce\xb9" }, - { 0x1f86, "\xe1\xbc\x86\xce\xb9" }, - { 0x1f87, "\xe1\xbc\x87\xce\xb9" }, - { 0x1f88, "\xe1\xbc\x80\xce\xb9" }, - { 0x1f89, "\xe1\xbc\x81\xce\xb9" }, - { 0x1f8a, "\xe1\xbc\x82\xce\xb9" }, - { 0x1f8b, "\xe1\xbc\x83\xce\xb9" }, - { 0x1f8c, "\xe1\xbc\x84\xce\xb9" }, - { 0x1f8d, "\xe1\xbc\x85\xce\xb9" }, - { 0x1f8e, "\xe1\xbc\x86\xce\xb9" }, - { 0x1f8f, "\xe1\xbc\x87\xce\xb9" }, - { 0x1f90, "\xe1\xbc\xa0\xce\xb9" }, - { 0x1f91, "\xe1\xbc\xa1\xce\xb9" }, - { 0x1f92, "\xe1\xbc\xa2\xce\xb9" }, - { 0x1f93, "\xe1\xbc\xa3\xce\xb9" }, - { 0x1f94, "\xe1\xbc\xa4\xce\xb9" }, - { 0x1f95, "\xe1\xbc\xa5\xce\xb9" }, - { 0x1f96, "\xe1\xbc\xa6\xce\xb9" }, - { 0x1f97, "\xe1\xbc\xa7\xce\xb9" }, - { 0x1f98, "\xe1\xbc\xa0\xce\xb9" }, - { 0x1f99, "\xe1\xbc\xa1\xce\xb9" }, - { 0x1f9a, "\xe1\xbc\xa2\xce\xb9" }, - { 0x1f9b, "\xe1\xbc\xa3\xce\xb9" }, - { 0x1f9c, "\xe1\xbc\xa4\xce\xb9" }, - { 0x1f9d, "\xe1\xbc\xa5\xce\xb9" }, - { 0x1f9e, "\xe1\xbc\xa6\xce\xb9" }, - { 0x1f9f, "\xe1\xbc\xa7\xce\xb9" }, - { 0x1fa0, "\xe1\xbd\xa0\xce\xb9" }, - { 0x1fa1, "\xe1\xbd\xa1\xce\xb9" }, - { 0x1fa2, "\xe1\xbd\xa2\xce\xb9" }, - { 0x1fa3, "\xe1\xbd\xa3\xce\xb9" }, - { 0x1fa4, "\xe1\xbd\xa4\xce\xb9" }, - { 0x1fa5, "\xe1\xbd\xa5\xce\xb9" }, - { 0x1fa6, "\xe1\xbd\xa6\xce\xb9" }, - { 0x1fa7, "\xe1\xbd\xa7\xce\xb9" }, - { 0x1fa8, "\xe1\xbd\xa0\xce\xb9" }, - { 0x1fa9, "\xe1\xbd\xa1\xce\xb9" }, - { 0x1faa, "\xe1\xbd\xa2\xce\xb9" }, - { 0x1fab, "\xe1\xbd\xa3\xce\xb9" }, - { 0x1fac, "\xe1\xbd\xa4\xce\xb9" }, - { 0x1fad, "\xe1\xbd\xa5\xce\xb9" }, - { 0x1fae, "\xe1\xbd\xa6\xce\xb9" }, - { 0x1faf, "\xe1\xbd\xa7\xce\xb9" }, - { 0x1fb2, "\xe1\xbd\xb0\xce\xb9" }, - { 0x1fb3, "\xce\xb1\xce\xb9" }, - { 0x1fb4, "\xce\xac\xce\xb9" }, - { 0x1fb6, "\xce\xb1\xcd\x82" }, - { 0x1fb7, "\xce\xb1\xcd\x82\xce\xb9" }, - { 0x1fbc, "\xce\xb1\xce\xb9" }, - { 0x1fbe, "\xce\xb9" }, - { 0x1fc2, "\xe1\xbd\xb4\xce\xb9" }, - { 0x1fc3, "\xce\xb7\xce\xb9" }, - { 0x1fc4, "\xce\xae\xce\xb9" }, - { 0x1fc6, "\xce\xb7\xcd\x82" }, - { 0x1fc7, "\xce\xb7\xcd\x82\xce\xb9" }, - { 0x1fcc, "\xce\xb7\xce\xb9" }, - { 0x1fd2, "\xce\xb9\xcc\x88\xcc\x80" }, - { 0x1fd3, "\xce\xb9\xcc\x88\xcc\x81" }, - { 0x1fd6, "\xce\xb9\xcd\x82" }, - { 0x1fd7, "\xce\xb9\xcc\x88\xcd\x82" }, - { 0x1fe2, "\xcf\x85\xcc\x88\xcc\x80" }, - { 0x1fe3, "\xcf\x85\xcc\x88\xcc\x81" }, - { 0x1fe4, "\xcf\x81\xcc\x93" }, - { 0x1fe6, "\xcf\x85\xcd\x82" }, - { 0x1fe7, "\xcf\x85\xcc\x88\xcd\x82" }, - { 0x1ff2, "\xe1\xbd\xbc\xce\xb9" }, - { 0x1ff3, "\xcf\x89\xce\xb9" }, - { 0x1ff4, "\xcf\x8e\xce\xb9" }, - { 0x1ff6, "\xcf\x89\xcd\x82" }, - { 0x1ff7, "\xcf\x89\xcd\x82\xce\xb9" }, - { 0x1ffc, "\xcf\x89\xce\xb9" }, - { 0x2160, "\xe2\x85\xb0" }, - { 0x2161, "\xe2\x85\xb1" }, - { 0x2162, "\xe2\x85\xb2" }, - { 0x2163, "\xe2\x85\xb3" }, - { 0x2164, "\xe2\x85\xb4" }, - { 0x2165, "\xe2\x85\xb5" }, - { 0x2166, "\xe2\x85\xb6" }, - { 0x2167, "\xe2\x85\xb7" }, - { 0x2168, "\xe2\x85\xb8" }, - { 0x2169, "\xe2\x85\xb9" }, - { 0x216a, "\xe2\x85\xba" }, - { 0x216b, "\xe2\x85\xbb" }, - { 0x216c, "\xe2\x85\xbc" }, - { 0x216d, "\xe2\x85\xbd" }, - { 0x216e, "\xe2\x85\xbe" }, - { 0x216f, "\xe2\x85\xbf" }, - { 0x24b6, "\xe2\x93\x90" }, - { 0x24b7, "\xe2\x93\x91" }, - { 0x24b8, "\xe2\x93\x92" }, - { 0x24b9, "\xe2\x93\x93" }, - { 0x24ba, "\xe2\x93\x94" }, - { 0x24bb, "\xe2\x93\x95" }, - { 0x24bc, "\xe2\x93\x96" }, - { 0x24bd, "\xe2\x93\x97" }, - { 0x24be, "\xe2\x93\x98" }, - { 0x24bf, "\xe2\x93\x99" }, - { 0x24c0, "\xe2\x93\x9a" }, - { 0x24c1, "\xe2\x93\x9b" }, - { 0x24c2, "\xe2\x93\x9c" }, - { 0x24c3, "\xe2\x93\x9d" }, - { 0x24c4, "\xe2\x93\x9e" }, - { 0x24c5, "\xe2\x93\x9f" }, - { 0x24c6, "\xe2\x93\xa0" }, - { 0x24c7, "\xe2\x93\xa1" }, - { 0x24c8, "\xe2\x93\xa2" }, - { 0x24c9, "\xe2\x93\xa3" }, - { 0x24ca, "\xe2\x93\xa4" }, - { 0x24cb, "\xe2\x93\xa5" }, - { 0x24cc, "\xe2\x93\xa6" }, - { 0x24cd, "\xe2\x93\xa7" }, - { 0x24ce, "\xe2\x93\xa8" }, - { 0x24cf, "\xe2\x93\xa9" }, - { 0xfb00, "\x66\x66" }, - { 0xfb01, "\x66\x69" }, - { 0xfb02, "\x66\x6c" }, - { 0xfb03, "\x66\x66\x69" }, - { 0xfb04, "\x66\x66\x6c" }, - { 0xfb05, "\x73\x74" }, - { 0xfb06, "\x73\x74" }, - { 0xfb13, "\xd5\xb4\xd5\xb6" }, - { 0xfb14, "\xd5\xb4\xd5\xa5" }, - { 0xfb15, "\xd5\xb4\xd5\xab" }, - { 0xfb16, "\xd5\xbe\xd5\xb6" }, - { 0xfb17, "\xd5\xb4\xd5\xad" }, -}; - -static const struct { - gunichar ch; - gunichar mirrored_ch; -} bidi_mirroring_table[] = -{ - { 0x0028, 0x0029 }, - { 0x0029, 0x0028 }, - { 0x003c, 0x003e }, - { 0x003e, 0x003c }, - { 0x005b, 0x005d }, - { 0x005d, 0x005b }, - { 0x007b, 0x007d }, - { 0x007d, 0x007b }, - { 0x00ab, 0x00bb }, - { 0x00bb, 0x00ab }, - { 0x2039, 0x203a }, - { 0x203a, 0x2039 }, - { 0x2045, 0x2046 }, - { 0x2046, 0x2045 }, - { 0x207d, 0x207e }, - { 0x207e, 0x207d }, - { 0x208d, 0x208e }, - { 0x208e, 0x208d }, - { 0x2208, 0x220b }, - { 0x2209, 0x220c }, - { 0x220a, 0x220d }, - { 0x220b, 0x2208 }, - { 0x220c, 0x2209 }, - { 0x220d, 0x220a }, - { 0x2215, 0x29f5 }, - { 0x223c, 0x223d }, - { 0x223d, 0x223c }, - { 0x2243, 0x22cd }, - { 0x2252, 0x2253 }, - { 0x2253, 0x2252 }, - { 0x2254, 0x2255 }, - { 0x2255, 0x2254 }, - { 0x2264, 0x2265 }, - { 0x2265, 0x2264 }, - { 0x2266, 0x2267 }, - { 0x2267, 0x2266 }, - { 0x2268, 0x2269 }, - { 0x2269, 0x2268 }, - { 0x226a, 0x226b }, - { 0x226b, 0x226a }, - { 0x226e, 0x226f }, - { 0x226f, 0x226e }, - { 0x2270, 0x2271 }, - { 0x2271, 0x2270 }, - { 0x2272, 0x2273 }, - { 0x2273, 0x2272 }, - { 0x2274, 0x2275 }, - { 0x2275, 0x2274 }, - { 0x2276, 0x2277 }, - { 0x2277, 0x2276 }, - { 0x2278, 0x2279 }, - { 0x2279, 0x2278 }, - { 0x227a, 0x227b }, - { 0x227b, 0x227a }, - { 0x227c, 0x227d }, - { 0x227d, 0x227c }, - { 0x227e, 0x227f }, - { 0x227f, 0x227e }, - { 0x2280, 0x2281 }, - { 0x2281, 0x2280 }, - { 0x2282, 0x2283 }, - { 0x2283, 0x2282 }, - { 0x2284, 0x2285 }, - { 0x2285, 0x2284 }, - { 0x2286, 0x2287 }, - { 0x2287, 0x2286 }, - { 0x2288, 0x2289 }, - { 0x2289, 0x2288 }, - { 0x228a, 0x228b }, - { 0x228b, 0x228a }, - { 0x228f, 0x2290 }, - { 0x2290, 0x228f }, - { 0x2291, 0x2292 }, - { 0x2292, 0x2291 }, - { 0x2298, 0x29b8 }, - { 0x22a2, 0x22a3 }, - { 0x22a3, 0x22a2 }, - { 0x22a6, 0x2ade }, - { 0x22a8, 0x2ae4 }, - { 0x22a9, 0x2ae3 }, - { 0x22ab, 0x2ae5 }, - { 0x22b0, 0x22b1 }, - { 0x22b1, 0x22b0 }, - { 0x22b2, 0x22b3 }, - { 0x22b3, 0x22b2 }, - { 0x22b4, 0x22b5 }, - { 0x22b5, 0x22b4 }, - { 0x22b6, 0x22b7 }, - { 0x22b7, 0x22b6 }, - { 0x22c9, 0x22ca }, - { 0x22ca, 0x22c9 }, - { 0x22cb, 0x22cc }, - { 0x22cc, 0x22cb }, - { 0x22cd, 0x2243 }, - { 0x22d0, 0x22d1 }, - { 0x22d1, 0x22d0 }, - { 0x22d6, 0x22d7 }, - { 0x22d7, 0x22d6 }, - { 0x22d8, 0x22d9 }, - { 0x22d9, 0x22d8 }, - { 0x22da, 0x22db }, - { 0x22db, 0x22da }, - { 0x22dc, 0x22dd }, - { 0x22dd, 0x22dc }, - { 0x22de, 0x22df }, - { 0x22df, 0x22de }, - { 0x22e0, 0x22e1 }, - { 0x22e1, 0x22e0 }, - { 0x22e2, 0x22e3 }, - { 0x22e3, 0x22e2 }, - { 0x22e4, 0x22e5 }, - { 0x22e5, 0x22e4 }, - { 0x22e6, 0x22e7 }, - { 0x22e7, 0x22e6 }, - { 0x22e8, 0x22e9 }, - { 0x22e9, 0x22e8 }, - { 0x22ea, 0x22eb }, - { 0x22eb, 0x22ea }, - { 0x22ec, 0x22ed }, - { 0x22ed, 0x22ec }, - { 0x22f0, 0x22f1 }, - { 0x22f1, 0x22f0 }, - { 0x22f2, 0x22fa }, - { 0x22f3, 0x22fb }, - { 0x22f4, 0x22fc }, - { 0x22f6, 0x22fd }, - { 0x22f7, 0x22fe }, - { 0x22fa, 0x22f2 }, - { 0x22fb, 0x22f3 }, - { 0x22fc, 0x22f4 }, - { 0x22fd, 0x22f6 }, - { 0x22fe, 0x22f7 }, - { 0x2308, 0x2309 }, - { 0x2309, 0x2308 }, - { 0x230a, 0x230b }, - { 0x230b, 0x230a }, - { 0x2329, 0x232a }, - { 0x232a, 0x2329 }, - { 0x2768, 0x2769 }, - { 0x2769, 0x2768 }, - { 0x276a, 0x276b }, - { 0x276b, 0x276a }, - { 0x276c, 0x276d }, - { 0x276d, 0x276c }, - { 0x276e, 0x276f }, - { 0x276f, 0x276e }, - { 0x2770, 0x2771 }, - { 0x2771, 0x2770 }, - { 0x2772, 0x2773 }, - { 0x2773, 0x2772 }, - { 0x2774, 0x2775 }, - { 0x2775, 0x2774 }, - { 0x27d5, 0x27d6 }, - { 0x27d6, 0x27d5 }, - { 0x27dd, 0x27de }, - { 0x27de, 0x27dd }, - { 0x27e2, 0x27e3 }, - { 0x27e3, 0x27e2 }, - { 0x27e4, 0x27e5 }, - { 0x27e5, 0x27e4 }, - { 0x27e6, 0x27e7 }, - { 0x27e7, 0x27e6 }, - { 0x27e8, 0x27e9 }, - { 0x27e9, 0x27e8 }, - { 0x27ea, 0x27eb }, - { 0x27eb, 0x27ea }, - { 0x2983, 0x2984 }, - { 0x2984, 0x2983 }, - { 0x2985, 0x2986 }, - { 0x2986, 0x2985 }, - { 0x2987, 0x2988 }, - { 0x2988, 0x2987 }, - { 0x2989, 0x298a }, - { 0x298a, 0x2989 }, - { 0x298b, 0x298c }, - { 0x298c, 0x298b }, - { 0x298d, 0x2990 }, - { 0x298e, 0x298f }, - { 0x298f, 0x298e }, - { 0x2990, 0x298d }, - { 0x2991, 0x2992 }, - { 0x2992, 0x2991 }, - { 0x2993, 0x2994 }, - { 0x2994, 0x2993 }, - { 0x2995, 0x2996 }, - { 0x2996, 0x2995 }, - { 0x2997, 0x2998 }, - { 0x2998, 0x2997 }, - { 0x29b8, 0x2298 }, - { 0x29c0, 0x29c1 }, - { 0x29c1, 0x29c0 }, - { 0x29c4, 0x29c5 }, - { 0x29c5, 0x29c4 }, - { 0x29cf, 0x29d0 }, - { 0x29d0, 0x29cf }, - { 0x29d1, 0x29d2 }, - { 0x29d2, 0x29d1 }, - { 0x29d4, 0x29d5 }, - { 0x29d5, 0x29d4 }, - { 0x29d8, 0x29d9 }, - { 0x29d9, 0x29d8 }, - { 0x29da, 0x29db }, - { 0x29db, 0x29da }, - { 0x29f5, 0x2215 }, - { 0x29f8, 0x29f9 }, - { 0x29f9, 0x29f8 }, - { 0x29fc, 0x29fd }, - { 0x29fd, 0x29fc }, - { 0x2a2b, 0x2a2c }, - { 0x2a2c, 0x2a2b }, - { 0x2a2d, 0x2a2c }, - { 0x2a2e, 0x2a2d }, - { 0x2a34, 0x2a35 }, - { 0x2a35, 0x2a34 }, - { 0x2a3c, 0x2a3d }, - { 0x2a3d, 0x2a3c }, - { 0x2a64, 0x2a65 }, - { 0x2a65, 0x2a64 }, - { 0x2a79, 0x2a7a }, - { 0x2a7a, 0x2a79 }, - { 0x2a7d, 0x2a7e }, - { 0x2a7e, 0x2a7d }, - { 0x2a7f, 0x2a80 }, - { 0x2a80, 0x2a7f }, - { 0x2a81, 0x2a82 }, - { 0x2a82, 0x2a81 }, - { 0x2a83, 0x2a84 }, - { 0x2a84, 0x2a83 }, - { 0x2a8b, 0x2a8c }, - { 0x2a8c, 0x2a8b }, - { 0x2a91, 0x2a92 }, - { 0x2a92, 0x2a91 }, - { 0x2a93, 0x2a94 }, - { 0x2a94, 0x2a93 }, - { 0x2a95, 0x2a96 }, - { 0x2a96, 0x2a95 }, - { 0x2a97, 0x2a98 }, - { 0x2a98, 0x2a97 }, - { 0x2a99, 0x2a9a }, - { 0x2a9a, 0x2a99 }, - { 0x2a9b, 0x2a9c }, - { 0x2a9c, 0x2a9b }, - { 0x2aa1, 0x2aa2 }, - { 0x2aa2, 0x2aa1 }, - { 0x2aa6, 0x2aa7 }, - { 0x2aa7, 0x2aa6 }, - { 0x2aa8, 0x2aa9 }, - { 0x2aa9, 0x2aa8 }, - { 0x2aaa, 0x2aab }, - { 0x2aab, 0x2aaa }, - { 0x2aac, 0x2aad }, - { 0x2aad, 0x2aac }, - { 0x2aaf, 0x2ab0 }, - { 0x2ab0, 0x2aaf }, - { 0x2ab3, 0x2ab4 }, - { 0x2ab4, 0x2ab3 }, - { 0x2abb, 0x2abc }, - { 0x2abc, 0x2abb }, - { 0x2abd, 0x2abe }, - { 0x2abe, 0x2abd }, - { 0x2abf, 0x2ac0 }, - { 0x2ac0, 0x2abf }, - { 0x2ac1, 0x2ac2 }, - { 0x2ac2, 0x2ac1 }, - { 0x2ac3, 0x2ac4 }, - { 0x2ac4, 0x2ac3 }, - { 0x2ac5, 0x2ac6 }, - { 0x2ac6, 0x2ac5 }, - { 0x2acd, 0x2ace }, - { 0x2ace, 0x2acd }, - { 0x2acf, 0x2ad0 }, - { 0x2ad0, 0x2acf }, - { 0x2ad1, 0x2ad2 }, - { 0x2ad2, 0x2ad1 }, - { 0x2ad3, 0x2ad4 }, - { 0x2ad4, 0x2ad3 }, - { 0x2ad5, 0x2ad6 }, - { 0x2ad6, 0x2ad5 }, - { 0x2ade, 0x22a6 }, - { 0x2ae3, 0x22a9 }, - { 0x2ae4, 0x22a8 }, - { 0x2ae5, 0x22ab }, - { 0x2aec, 0x2aed }, - { 0x2aed, 0x2aec }, - { 0x2af7, 0x2af8 }, - { 0x2af8, 0x2af7 }, - { 0x2af9, 0x2afa }, - { 0x2afa, 0x2af9 }, - { 0x3008, 0x3009 }, - { 0x3009, 0x3008 }, - { 0x300a, 0x300b }, - { 0x300b, 0x300a }, - { 0x300c, 0x300d }, - { 0x300d, 0x300c }, - { 0x300e, 0x300f }, - { 0x300f, 0x300e }, - { 0x3010, 0x3011 }, - { 0x3011, 0x3010 }, - { 0x3014, 0x3015 }, - { 0x3015, 0x3014 }, - { 0x3016, 0x3017 }, - { 0x3017, 0x3016 }, - { 0x3018, 0x3019 }, - { 0x3019, 0x3018 }, - { 0x301a, 0x301b }, - { 0x301b, 0x301a }, - { 0xff08, 0xff09 }, - { 0xff09, 0xff08 }, - { 0xff1c, 0xff1e }, - { 0xff1e, 0xff1c }, - { 0xff3b, 0xff3d }, - { 0xff3d, 0xff3b }, - { 0xff5b, 0xff5d }, - { 0xff5d, 0xff5b }, - { 0xff5f, 0xff60 }, - { 0xff60, 0xff5f }, - { 0xff62, 0xff63 }, - { 0xff63, 0xff62 } -}; - -#endif /* CHARTABLES_H */ diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/config/PlatformMac.h qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/config/PlatformMac.h --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/config/PlatformMac.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/config/PlatformMac.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,19 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -// It is internal CLucene header - DO NOT include it directly - -# define PATH_DELIMITER _T("/") -# define PATH_DELIMITERA "/" -# define PATH_DELIMITERC '/' - -# if (__GNUC__ < 3) && !defined( __APPLE_CC__) -// GCC strange "ignore std" mode works better if you pretend everything -// is in the std namespace, for the most part. -# define LUCENE_NO_STDC_NAMESPACE -# endif - -#undef _T //apple has something else strange here... diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/config/PlatformUnix.h qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/config/PlatformUnix.h --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/config/PlatformUnix.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/config/PlatformUnix.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,12 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -// It is internal CLucene header - DO NOT include it directly - -# define PATH_DELIMITER _T("/") -# define PATH_DELIMITERA "/" -# define PATH_DELIMITERC '/' - diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/config/PlatformWin32.h qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/config/PlatformWin32.h --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/config/PlatformWin32.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/config/PlatformWin32.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,11 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -// It is internal CLucene header - DO NOT include it directly - -# define PATH_DELIMITER _T("\\") -# define PATH_DELIMITERA "\\" -# define PATH_DELIMITERC '\\' diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/config/repl_lltot.cpp qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/config/repl_lltot.cpp --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/config/repl_lltot.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/config/repl_lltot.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,47 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#include "CLucene/StdHeader.h" - -TCHAR* lucene_i64tot( - int64_t value, /* [I] Value to be converted */ - TCHAR* str, /* [O] Destination for the converted value */ - int radix) /* [I] Number base for conversion */ -{ - uint64_t val; - int negative; - TCHAR buffer[65]; - TCHAR* pos; - int digit; - - if (value < 0 && radix == 10) { - negative = 1; - val = -value; - } else { - negative = 0; - val = value; - } /* if */ - - pos = &buffer[64]; - *pos = '\0'; - - do { - digit = val % radix; - val = val / radix; - if (digit < 10) { - *--pos = '0' + digit; - } else { - *--pos = 'a' + digit - 10; - } /* if */ - } while (val != 0L); - - if (negative) { - *--pos = '-'; - } /* if */ - - _tcsncpy(str,pos,&buffer[64] - pos + 1); //needed for unicode to work - return str; -} diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/config/repl_tchar.h qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/config/repl_tchar.h --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/config/repl_tchar.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/config/repl_tchar.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,126 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#ifndef _CL_HAVE_TCHAR_H -#if defined(_UCS2) - #define TCHAR wchar_t - - //note: descriptions with * in front have replacement functions - - //formatting functions - #define _sntprintf swprintf //* make a formatted a string - #define _tprintf wprintf //* print a formatted string - - //this one has no replacement functions yet, but it is only used in the tests - #define _vsntprintf vsnwprintf //* print a formatted string using variable arguments - - //we are using the internal functions of the compiler here - //if LUCENE_USE_INTERNAL_CHAR_FUNCTIONS is defined, thesse - //will be replaced by internal functions - #define _istalnum iswalnum //* alpha/numeric char check - #define _istalpha iswalpha //* alpha char check - #define _istspace iswspace //* space char check - #define _istdigit iswdigit //* digit char check - #define _totlower towlower //* convert char to lower case - #define _totupper towupper //* convert char to lower case - #define _tcslwr wcslwr //* convert string to lower case - - //these are the string handling functions - //we may need to create wide-character/multi-byte replacements for these - #define _tcscpy wcscpy //copy a string to another string - #define _tcsncpy wcsncpy //copy a specified amount of one string to another string. - #define _tcscat wcscat //copy a string onto the end of the other string - #define _tcschr wcschr //find location of one character - #define _tcsstr wcsstr //find location of a string - #define _tcslen wcslen //get length of a string - #define _tcscmp wcscmp //case sensitive compare two strings - #define _tcsncmp wcsncmp //case sensitive compare two strings - #define _tcscspn wcscspn //location of any of a set of character in a string - - #ifdef _CL_HAVE_WCSICMP - #define _tcsicmp wcsicmp //* case insensitive compare two string - #else - #define _tcsicmp wcscasecmp //* case insensitive compare two string - #endif - - //conversion functions - #define _tcstod wcstod //convert a string to a double - #ifdef _PA_RISC - #define _tcstoi64 __wcstoll //* convers a string to an 64bit bit integer - #else - #define _tcstoi64 wcstoll //* convers a string to an 64bit bit integer - #endif - #define _i64tot lltow //* converts a 64 bit integer to a string (with base) - -#else //if defined(_ASCII) - #define TCHAR char - - //formatting functions - #define _sntprintf snprintf - #define _tprintf printf - #define _vsntprintf vsnprintf - - //we are using the internal functions of the compiler here - //if LUCENE_USE_INTERNAL_CHAR_FUNCTIONS is defined, thesse - //will be replaced by internal functions - #define _istalnum isalnum - #define _istalpha isalpha - #define _istspace isspace - #define _istdigit isdigit - #define _totlower tolower - #define _totupper toupper - #define _tcslwr strlwr - - //these are the string handling functions - #define _tcscpy strcpy - #define _tcsncpy strncpy - #define _tcscat strcat - #define _tcschr strchr - #define _tcsstr strstr - #define _tcslen strlen - #define _tcscmp strcmp - #define _tcsncmp strncmp - #define _tcsicmp strcasecmp - #define _tcscspn strcspn - - //converstion methods - #define _tcstod strtod - #define _tcstoi64 strtoll - #define _i64tot lltoa -#endif -#else //HAVE_TCHAR_H - #include - -#ifdef UNDER_CE -#include -#define _i64tot i64tot -inline TCHAR* i64tot(__int64 value, TCHAR* str, int radix) -{ - QT_USE_NAMESPACE - _tcscpy(str, (TCHAR *) QString::number(value, radix).utf16()); - return str; -} - -#define _tcstoi64 tcstoi64 -inline __int64 tcstoi64(const TCHAR *nptr, TCHAR **endptr, int base) -{ - QT_USE_NAMESPACE - bool ok; - return QString::fromUtf16((ushort*) nptr).toInt(&ok, base); -} - -#endif - - //some tchar headers miss these... - #ifndef _tcstoi64 - #if defined(_UCS2) - #define _tcstoi64 wcstoll //* convers a string to an 64bit bit integer - #else - #define _tcstoi64 strtoll - #endif - #endif - -#endif //HAVE_TCHAR_H diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/config/repl_tcscasecmp.cpp qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/config/repl_tcscasecmp.cpp --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/config/repl_tcscasecmp.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/config/repl_tcscasecmp.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,21 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ - -#include "CLucene/StdHeader.h" - -int lucene_tcscasecmp(const TCHAR * sa, const TCHAR * sb){ - TCHAR ca,cb; - if (sa == sb) - return 0; - - do{ - ca = _totlower( (*(sa++)) ); - cb = _totlower( (*(sb++)) ); - } while ( ca != L'\0' && (ca == cb) ); - - return (int)(ca - cb); -} diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/config/repl_tcslwr.cpp qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/config/repl_tcslwr.cpp --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/config/repl_tcslwr.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/config/repl_tcslwr.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,15 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ - -#include "CLucene/StdHeader.h" - -TCHAR* lucene_tcslwr( TCHAR* str ) -{ - TCHAR* ret = str; - for ( ; *str; str++) *str = _totlower(*str); - return ret; -} diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/config/repl_tcstod.cpp qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/config/repl_tcstod.cpp --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/config/repl_tcstod.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/config/repl_tcstod.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,23 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ - -#include "CLucene/StdHeader.h" - -#ifndef _ASCII -double lucene_tcstod(const TCHAR *value, TCHAR **end){ - int32_t len = _tcslen(value)+1; - char* avalue=_CL_NEWARRAY(char,len); - char* aend=NULL; - STRCPY_TtoA(avalue,value,len); - - double ret = strtod(avalue,&aend); - *end=(TCHAR*)value+(aend-avalue); - _CLDELETE_CaARRAY(avalue); - - return ret; -} -#endif diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/config/repl_tcstoll.cpp qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/config/repl_tcstoll.cpp --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/config/repl_tcstoll.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/config/repl_tcstoll.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,46 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ - -#include "CLucene/StdHeader.h" - -int64_t lucene_tcstoi64(const TCHAR* str, TCHAR**end, int radix){ - #define LUCENE_TCSTOI64_RADIX(x,r) ((x>=_T('0') && x<=_T('9'))?x-_T('0'):((x>=_T('a') && x<=_T('z'))?x-_T('a')+10:((x>=_T('A') && x<=_T('Z'))?x-_T('A')+10:1000))) - - if (radix < 2 || radix > 36) - return 0; - - /* Skip white space. */ - while (_istspace (*str)) - ++str; - - int sign=1; - if ( str[0] == _T('+') ) - str++; - else if ( str[0] == _T('-') ){ - sign = -1; - str++; - } - - *end=(TCHAR*)str; - long r = -1; - while ( (r=LUCENE_TCSTOI64_RADIX(*end[0],radix)) >=0 && r=str;p-- ){ - int i=LUCENE_TCSTOI64_RADIX(p[0],radix); - if ( pos == 0 ) - ret=i; - else - ret += (int64_t)pow((qreal)radix,(qreal)pos) * i; //todo: might be quicker with a different pow overload - - pos++; - } - return sign*ret; -} diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/config/repl_tprintf.cpp qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/config/repl_tprintf.cpp --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/config/repl_tprintf.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/config/repl_tprintf.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,153 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#include "CLucene/StdHeader.h" -#include "CLucene/util/StringBuffer.h" - -#ifdef __CL_INCLUDE_TPRINTF - -CL_NS_USE(util) - -//print a variable argument to a stream -//currently special number formatting is not supported. it is very minimalistic -void lucene_vfnwprintf(StringBuffer* buffer, size_t count, const wchar_t * format, va_list& valist){ - const wchar_t *iter = format; - StringBuffer* tmp = NULL; - if ( buffer == NULL ) - tmp = _CLNEW StringBuffer; - else - tmp = buffer; - - while (*iter) - { - while (*iter && *iter != '%') - { - tmp->appendChar(*iter++); - } - if (*iter == '%') - { - if (iter[1] == '%') - { - //just print a % - tmp->appendChar('%'); - iter += 2; - continue; - } - - iter++; - switch (*iter) - { - case 's': - { - //todo: this is faulty. it doesn't heed count - - //print a string or null - TCHAR *wstr = va_arg(valist, TCHAR *); - if ( !wstr ) - wstr = _T("(null)"); - - tmp->append(wstr); - iter++; - break; - } - - case 'c': - tmp->appendChar((TCHAR)va_arg(valist, int)); - iter++; - break; - - default: - { - //todo: this is faulty. it doesn't heed count - - if (*iter == 'p') - tmp->appendInt((int32_t)va_arg(valist, long)); - else - { - if (*iter == 'a' || *iter == 'A' || - *iter == 'e' || *iter == 'E' || - *iter == 'f' || *iter == 'F' || - *iter == 'g' || *iter == 'G') - tmp->appendFloat((qreal)va_arg(valist, double),8); - else if (*iter == 'd' || *iter == 'i' ){ - tmp->appendInt((int32_t)va_arg(valist, int)); - }else if (*iter == 'l' ){ - TCHAR b[100]; - _i64tot((int64_t)va_arg(valist, int64_t),b,10); - tmp->append(b); - }/*else{ - TCHAR b[100]; - _i64tot((int64_t)va_arg(valist, void*),b,10); - tmp->append(b); - }*/ - } - iter++; - break; - } - } - } - } - - - if ( buffer == NULL ){ - //we are supposed to be writing to the console -#ifdef _UCS2 - TCHAR* pointer = tmp->getBuffer(); - char ob[MB_LEN_MAX]; - size_t v; - size_t len = tmp->length(); - for (size_t i=0;i 0 ){ - ob[v]='\0'; - fputs(ob,stdout); - } - pointer++; - } - - -#else - fputs(tmp->getBuffer(),stdout); -#endif - _CLDELETE(tmp); - } -} - -//print a list of arguments to a string -int lucene_snwprintf(wchar_t* strbuf, size_t count, const wchar_t * format, ...){ - va_list ap; - va_start(ap, format); - StringBuffer buffer; - lucene_vfnwprintf(&buffer,count,format,ap); - va_end(ap); - - size_t ret = min(count,(size_t)(buffer.length()+1)); - _tcsncpy(strbuf,buffer.getBuffer(),ret); - return ret; -} - -//print a list of arguments to the stdout -void lucene_wprintf(const wchar_t * format, ...){ - va_list ap; - va_start(ap, format); - lucene_vfnwprintf(NULL,LUCENE_INT32_MAX_SHOULDBE,format,ap); - va_end(ap); -} - -//print a variable argument to a string -int lucene_vsnwprintf(wchar_t * strbuf, size_t count, const wchar_t * format, va_list& ap){ - StringBuffer buffer; - lucene_vfnwprintf(&buffer,count,format,ap); - int ret = min((int32_t)count,buffer.length()+1); - _tcsncpy(strbuf,buffer.getBuffer(),ret); - return ret; -} - -#endif //__CL_INCLUDE_TPRINTF diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/config/repl_wchar.h qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/config/repl_wchar.h --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/config/repl_wchar.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/config/repl_wchar.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,121 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#ifndef _lucene_repl_wchar_h -#define _lucene_repl_wchar_h - -#ifdef _UCS2 - -#ifndef _CL_HAVE_WCSCPY - //copy a string to another string - #error wcscpy is not defined, and a licensed replacement has not been written yet -#endif - -#ifndef _CL_HAVE_WCSNCPY - //copy a specified amount of one string to another string. - #error wcsncpy is not defined, and a licensed replacement has not been written yet -#endif - -#ifndef _CL_HAVE_WCSCAT - //copy a string onto the end of the other string - #error wcscat is not defined, and a licensed replacement has not been written yet -#endif - -#ifndef _CL_HAVE_WCSCHR - //find location of one character - #error wcschr is not defined, and a licensed replacement has not been written yet -#endif - -#ifndef _CL_HAVE_WCSSTR - //find location of a string - #error wcspy is not defined, and a licensed replacement has not been written yet -#endif - -#ifndef _CL_HAVE_WCSLEN - //get length of a string - #error wcslen is not defined, and a licensed replacement has not been written yet -#endif - -#ifndef _CL_HAVE_WCSCMP - //case sensitive compare two strings - #error wcscmp is not defined, and a licensed replacement has not been written yet -#endif - -#ifndef _CL_HAVE_WCSNCMP - //case sensitive compare two strings of a specified length - #error wcsncmp is not defined, and a licensed replacement has not been written yet -#endif - -#ifndef _CL_HAVE_WCSCSPN - //Return the length of the maximum initial segment - //of WCS which contains only wide-characters not in REJECT. - #error wcscspn is not defined, and a licensed replacement has not been written yet -#endif - -#endif //_UCS2 - -//string function replacements -#if defined(LUCENE_USE_INTERNAL_CHAR_FUNCTIONS) || (defined(_UCS2) && !defined(_CL_HAVE_WCSCASECMP)) || (defined(_ASCII) && !defined(_CL_HAVE_STRCASECMP)) - int lucene_tcscasecmp(const TCHAR *, const TCHAR *); - #undef _tcsicmp - #define _tcsicmp lucene_tcscasecmp -#endif -#if defined(LUCENE_USE_INTERNAL_CHAR_FUNCTIONS) || (defined(_UCS2) && !defined(_CL_HAVE_WCSLWR)) || (defined(_ASCII) && !defined(_CL_HAVE_STRLWR)) - TCHAR* lucene_tcslwr( TCHAR* str ); - #undef _tcslwr - #define _tcslwr lucene_tcslwr -#endif - -//conversion functions -#if (defined(_ASCII) && !defined(_CL_HAVE_LLTOA)) || (defined(_UCS2) && !defined(_CL_HAVE_LLTOW)) - TCHAR* lucene_i64tot( int64_t value, TCHAR* str, int radix); - #undef _i64tot - #define _i64tot lucene_i64tot -#endif -#if (defined(_UCS2) && !defined(_CL_HAVE_WCSTOLL)) || (defined(_ASCII) && !defined(_CL_HAVE_STRTOLL)) - int64_t lucene_tcstoi64(const TCHAR* str, TCHAR**end, int radix); - #undef _tcstoi64 - #define _tcstoi64 lucene_tcstoi64 -#endif -#if defined(_UCS2) && !defined(_CL_HAVE_WCSTOD) - double lucene_tcstod(const TCHAR *value, TCHAR **end); - #undef _tcstod - #define _tcstod lucene_tcstod -#endif - -//printf functions -#if defined(_UCS2) && (!defined(_CL_HAVE_SNWPRINTF) || defined(_CL_HAVE_SWPRINTF_BUG) ) - #undef _sntprintf - #define _sntprintf lucene_snwprintf - int lucene_snwprintf(wchar_t* strbuf, size_t count, const wchar_t * format, ...); - - #ifndef __CL_INCLUDE_TPRINTF - #define __CL_INCLUDE_TPRINTF - #endif -#endif -#if defined(_UCS2) && !defined(_CL_HAVE_WPRINTF) - #undef _tprintf - #define _tprintf lucene_wprintf - void lucene_wprintf(const wchar_t * format, ...); - - #ifndef __CL_INCLUDE_TPRINTF - #define __CL_INCLUDE_TPRINTF - #endif -#endif -#if defined(_UCS2) && (!defined(_CL_HAVE_VSNWPRINTF) || defined(_CL_HAVE_SWPRINTF_BUG) ) - #undef _vsntprintf - #define _vsntprintf lucene_vsnwprintf - int lucene_vsnwprintf(wchar_t * strbuf, size_t count, const wchar_t * format, va_list& ap); - - #ifndef __CL_INCLUDE_TPRINTF - #define __CL_INCLUDE_TPRINTF - #endif -#endif - -//todo: if _CL_HAVE_SNPRINTF_BUG fails(snprintf overflow),we should use our own -//function. but we don't have it currently, and our functions are dubious anyway... - -#endif //end of _lucene_repl_wchar_h diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/config/threadCSection.h qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/config/threadCSection.h --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/config/threadCSection.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/config/threadCSection.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,74 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -//NOTE: do not include this file directly, it is included from lucene internally. - -#ifndef lucene_config_threadCSection_h -#define lucene_config_threadCSection_h -#if defined(_LUCENE_PRAGMA_ONCE) -# pragma once -#endif - -CL_NS_DEF(util) - - #if !defined(LUCENE_USE_WINDOWS_H) && !defined(_WINDOWS_) && !defined(__MINGW32__) - //we have not explicity included windows.h and windows.h has - //not been included (check _WINDOWS_), then we must define - //our own definitions to the thread locking functions: - struct CRITICAL_SECTION - { - struct critical_section_debug * DebugInfo; - long LockCount; - long RecursionCount; - void * OwningThread; - void * LockSemaphore; - #if defined(_WIN64) - unsigned __int64 SpinCount; - #else - unsigned long SpinCount; - #endif - }; - #endif - - ///a windows implementation of the lock mutex - ///todo: boost has a InterlockedExchange way of locking too. More backwards compatible/faster??? - class mutex_win32 - { - private: - CRITICAL_SECTION mtx; - public: - mutex_win32(const mutex_win32& clone); - mutex_win32(); - ~mutex_win32(); - void lock(); - void unlock(); - }; - - class CLuceneThreadIdCompare - { - public: - - enum - { // parameters for hash table - bucket_size = 4, // 0 < bucket_size - min_buckets = 8 - }; // min_buckets = 2 ^^ N, 0 < N - - bool operator()( DWORD t1, DWORD t2 ) const{ - return t1 < t2; - } - }; - -#if defined(WINAPI_FAMILY) && (WINAPI_FAMILY==WINAPI_FAMILY_APP || WINAPI_FAMILY==WINAPI_FAMILY_PHONE_APP) - #define Sleep(x) WaitForSingleObjectEx(GetCurrentThread(), x, FALSE) -#endif - #define _LUCENE_SLEEP(x) Sleep(x) - #define _LUCENE_THREADMUTEX CL_NS(util)::mutex_win32 - #define _LUCENE_CURRTHREADID GetCurrentThreadId() - #define _LUCENE_THREADID_TYPE DWORD -CL_NS_END - -#endif //lucene_config_threadCSection_h diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/config/threadPthread.h qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/config/threadPthread.h --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/config/threadPthread.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/config/threadPthread.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,59 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -//NOTE: do not include this file directly, it is included from lucene internally. - -#ifndef lucene_config_threadPthread_h -#define lucene_config_threadPthread_h - -#include - -CL_NS_DEF(util) - -///a posix implementation of the lock mutex -///todo: we need a spinlock implemenation for usage in reference counting -class mutex_pthread -{ -private: - pthread_mutex_t mtx; - -public: - mutex_pthread(const mutex_pthread& clone); - mutex_pthread(); - ~mutex_pthread(); - void lock(); - void unlock(); - -private: - #ifndef _CL_HAVE_PTHREAD_MUTEX_RECURSIVE - pthread_t lockOwner; - unsigned int lockCount; - #endif -}; - -#define _LUCENE_SLEEP(x) usleep(x*1000) //_LUCENE_SLEEP should be in millis, usleep is in micros -#define _LUCENE_THREADMUTEX CL_NS(util)::mutex_pthread -#define _LUCENE_CURRTHREADID pthread_self() -#define _LUCENE_THREADID_TYPE pthread_t - -class CLuceneThreadIdCompare -{ -public: - enum - { // parameters for hash table - bucket_size = 4, // 0 < bucket_size - min_buckets = 8 - }; // min_buckets = 2 ^^ N, 0 < N - - bool operator()( pthread_t t1, pthread_t t2 ) const{ - return t1 < t2; - } -}; - - -CL_NS_END - -#endif //lucene_config_threadPthread_h diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/config/threads.cpp qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/config/threads.cpp --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/config/threads.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/config/threads.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,173 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#include "CLucene/StdHeader.h" - -#ifndef _CL_DISABLE_MULTITHREADING -CL_NS_DEF(util) - - -mutexGuard::mutexGuard(const mutexGuard& clone){ - //no autoclone - mrMutex = NULL; -} -mutexGuard::mutexGuard( _LUCENE_THREADMUTEX& rMutex ) : - mrMutex(&rMutex) -{ - mrMutex->lock(); -} -mutexGuard::~mutexGuard() -{ - mrMutex->unlock(); -} - -#if defined(_LUCENE_DONTIMPLEMENT_THREADMUTEX) - //do nothing - #if defined(_LUCENE_PRAGMA_WARNINGS) - #pragma message ("==================Not implementing any thread mutex==================") - #else - #warning "==================Not implementing any thread mutex==================" - #endif - - - -#elif defined(_CL_HAVE_WIN32_THREADS) - #include "CLucene/config/threadCSection.h" - - #if !defined(LUCENE_USE_WINDOWS_H) && !defined(_WINDOWS_) - //we have not explicity included windows.h and windows.h has - //not been included (check _WINDOWS_), then we must define - //our own definitions to the thread locking functions: -#if defined(WINAPI_FAMILY) && (WINAPI_FAMILY==WINAPI_FAMILY_APP || WINAPI_FAMILY==WINAPI_FAMILY_PHONE_APP) - extern "C" __declspec(dllimport) void __stdcall InitializeCriticalSectionEx(CRITICAL_SECTION *, DWORD, DWORD); -#else - extern "C" __declspec(dllimport) void __stdcall InitializeCriticalSection(CRITICAL_SECTION *); -#endif - extern "C" __declspec(dllimport) void __stdcall EnterCriticalSection(CRITICAL_SECTION *); - extern "C" __declspec(dllimport) void __stdcall LeaveCriticalSection(CRITICAL_SECTION *); - extern "C" __declspec(dllimport) void __stdcall DeleteCriticalSection(CRITICAL_SECTION *); - extern "C" __declspec(dllimport) unsigned long __stdcall GetCurrentThreadId(); - #endif - mutex_win32::mutex_win32(const mutex_win32& clone){ -#if defined(WINAPI_FAMILY) && (WINAPI_FAMILY==WINAPI_FAMILY_APP || WINAPI_FAMILY==WINAPI_FAMILY_PHONE_APP) - InitializeCriticalSectionEx(&mtx, 0, 0); -#else - InitializeCriticalSection(&mtx); -#endif - } - mutex_win32::mutex_win32() - { -#if defined(WINAPI_FAMILY) && (WINAPI_FAMILY==WINAPI_FAMILY_APP || WINAPI_FAMILY==WINAPI_FAMILY_PHONE_APP) - InitializeCriticalSectionEx(&mtx, 0, 0); -#else - InitializeCriticalSection(&mtx); -#endif - } - - mutex_win32::~mutex_win32() - { - DeleteCriticalSection(&mtx); - } - - void mutex_win32::lock() - { - EnterCriticalSection(&mtx); - } - - void mutex_win32::unlock() - { - LeaveCriticalSection(&mtx); - } - - - -#elif defined(_CL_HAVE_PTHREAD) - #include "CLucene/config/threadPthread.h" - - #ifdef _CL_HAVE_PTHREAD_MUTEX_RECURSIVE - bool mutex_pthread_attr_initd=false; - pthread_mutexattr_t mutex_pthread_attr; - #endif - - #ifdef _CL__CND_DEBUG - #define _CLPTHREAD_CHECK(c,m) CND_PRECONDITION(c==0,m) - #else - #define _CLPTHREAD_CHECK(c,m) c; - #endif - - mutex_pthread::mutex_pthread(const mutex_pthread& clone){ - #ifdef _CL_HAVE_PTHREAD_MUTEX_RECURSIVE - _CLPTHREAD_CHECK(pthread_mutex_init(&mtx, &mutex_pthread_attr), "mutex_pthread(clone) constructor failed") - #else - #if defined(__hpux) && defined(_DECTHREADS_) - _CLPTHREAD_CHECK(pthread_mutex_init(&mtx, pthread_mutexattr_default), "mutex_pthread(clone) constructor failed") - #else - _CLPTHREAD_CHECK(pthread_mutex_init(&mtx, 0), "mutex_pthread(clone) constructor failed") - #endif - lockCount=0; - lockOwner=0; - #endif - } - mutex_pthread::mutex_pthread() - { - #ifdef _CL_HAVE_PTHREAD_MUTEX_RECURSIVE - if ( mutex_pthread_attr_initd == false ){ - pthread_mutexattr_init(&mutex_pthread_attr); - pthread_mutexattr_settype(&mutex_pthread_attr, PTHREAD_MUTEX_RECURSIVE); - mutex_pthread_attr_initd = true; - } - _CLPTHREAD_CHECK(pthread_mutex_init(&mtx, &mutex_pthread_attr), "mutex_pthread(clone) constructor failed") - #else - #if defined(__hpux) && defined(_DECTHREADS_) - _CLPTHREAD_CHECK(pthread_mutex_init(&mtx, pthread_mutexattr_default), "mutex_pthread(clone) constructor failed") - #else - _CLPTHREAD_CHECK(pthread_mutex_init(&mtx, 0), "mutex_pthread(clone) constructor failed") - #endif - lockCount=0; - lockOwner=0; - #endif - } - - mutex_pthread::~mutex_pthread() - { - _CLPTHREAD_CHECK(pthread_mutex_destroy(&mtx), "~mutex_pthread destructor failed") - } - - void mutex_pthread::lock() - { - #ifndef _CL_HAVE_PTHREAD_MUTEX_RECURSIVE - pthread_t currentThread = pthread_self(); - if( pthread_equal( lockOwner, currentThread ) ) { - ++lockCount; - } else { - _CLPTHREAD_CHECK(pthread_mutex_lock(&mtx), "mutex_pthread::lock") - lockOwner = currentThread; - lockCount = 1; - } - #else - _CLPTHREAD_CHECK(pthread_mutex_lock(&mtx), "mutex_pthread::lock") - #endif - } - - void mutex_pthread::unlock() - { - #ifndef _CL_HAVE_PTHREAD_MUTEX_RECURSIVE - --lockCount; - if( lockCount == 0 ) - { - lockOwner = 0; - _CLPTHREAD_CHECK(pthread_mutex_unlock(&mtx), "mutex_pthread::unlock") - } - #else - _CLPTHREAD_CHECK(pthread_mutex_unlock(&mtx), "mutex_pthread::unlock") - #endif - } - -#endif //thread impl choice - - -CL_NS_END -#endif //!_CL_DISABLE_MULTITHREADING diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/config/utf8.cpp qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/config/utf8.cpp --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/config/utf8.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/config/utf8.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,237 +0,0 @@ -/* - * Copyright (C) 1999 Tom Tromey - * Copyright (C) 2000 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library 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 - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - * - * - ************************************************ - * Also licensed with permission from Tom Tromey - * and Owen Taylor under the Apache license. - * Original location: - * http://cvs.gnome.org/viewcvs/glib/glib/gutf8.c?rev=1.50&view=log - ************************************************ - * - * Copyright 2003-2006 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - #include "CLucene/StdHeader.h" - -typedef unsigned long gunichar; -typedef unsigned char guchar; - -#define UTF8_COMPUTE(Char, Mask, Len) \ - if (Char < 128) \ - { \ - Len = 1; \ - Mask = 0x7f; \ - } \ - else if ((Char & 0xe0) == 0xc0) \ - { \ - Len = 2; \ - Mask = 0x1f; \ - } \ - else if ((Char & 0xf0) == 0xe0) \ - { \ - Len = 3; \ - Mask = 0x0f; \ - } \ - else if ((Char & 0xf8) == 0xf0) \ - { \ - Len = 4; \ - Mask = 0x07; \ - } \ - else if ((Char & 0xfc) == 0xf8) \ - { \ - Len = 5; \ - Mask = 0x03; \ - } \ - else if ((Char & 0xfe) == 0xfc) \ - { \ - Len = 6; \ - Mask = 0x01; \ - } \ - else \ - Len = -1; - -/*#define UTF8_LENGTH(Char) \ - ((Char) < 0x80 ? 1 : \ - ((Char) < 0x800 ? 2 : \ - ((Char) < 0x10000 ? 3 : \ - ((Char) < 0x200000 ? 4 : \ - ((Char) < 0x4000000 ? 5 : 6)))))*/ - - -#define UTF8_GET(Result, Chars, Count, Mask, Len) \ - (Result) = (Chars)[0] & (Mask); \ - for ((Count) = 1; (Count) < (Len); ++(Count)) \ - { \ - if (((Chars)[(Count)] & 0xc0) != 0x80) \ - { \ - (Result) = -1; \ - break; \ - } \ - (Result) <<= 6; \ - (Result) |= ((Chars)[(Count)] & 0x3f); \ - } - - -/** - * lucene_wctoutf8: - * @c: a ISO10646 character code - * @outbuf: output buffer, must have at least 6 bytes of space. - * If %NULL, the length will be computed and returned - * and nothing will be written to @outbuf. - * - * Converts a single character to UTF-8. - * - * Return value: number of bytes written - **/ -size_t lucene_wctoutf8(char * outbuf, const wchar_t ch) -{ - gunichar c = ch; - guchar len = 0; - int first; - int i; - - if (c < 0x80) - { - first = 0; - len = 1; - } - else if (c < 0x800) - { - first = 0xc0; - len = 2; - } - else if (c < 0x10000) - { - first = 0xe0; - len = 3; - } - else if (c < 0x200000) - { - first = 0xf0; - len = 4; - } - else if (c < 0x4000000) - { - first = 0xf8; - len = 5; - } - else - { - first = 0xfc; - len = 6; - } - - if (outbuf) - { - for (i = len - 1; i > 0; --i) - { - outbuf[i] = (char)((c & 0x3f) | 0x80); - c >>= 6; - } - outbuf[0] = c | first; - } - - return len; -} - - -/** - * lucene_utf8towc: - * @p: a pointer to Unicode character encoded as UTF-8 - * - * Converts a sequence of bytes encoded as UTF-8 to a Unicode character. - * If @p does not point to a valid UTF-8 encoded character, results are - * undefined. If you are not sure that the bytes are complete - * valid Unicode characters, you should use lucene_utf8towc_validated() - * instead. - * - * Return value: the resulting character - **/ -size_t lucene_utf8towc(wchar_t *pwc, const char *p, size_t n) -{ - int i, mask = 0; - int result; - unsigned char c = (unsigned char) *p; - int len=0; - - UTF8_COMPUTE (c, mask, len); - if (len == -1) - return 0; - UTF8_GET (result, p, i, mask, len); - - *pwc = result; - return len; -} - - -//this function was not taken from gnome -size_t lucene_wcstoutf8(char * result, const wchar_t * str, size_t result_length){ - char *p=result; - int i = 0; - - while (p < result + result_length-1 && str[i] != 0) - p += lucene_wctoutf8(p,str[i++]); - - *p = '\0'; - - return p-result; -} -//this function was not taken from gnome -size_t lucene_utf8towcs(wchar_t * result, const char * str, size_t result_length){ - char *sp = (char*)str; - wchar_t *rp = result; - int i = 0; - - while (rp < result + result_length && *sp!=0){ - size_t r = lucene_utf8towc(rp,sp,6); - if ( r == -1 ) - return 0; - sp += r; - rp++; - } - - if ( sp-str < result_length ) - *rp = '\0'; - - size_t ret = sp-str; - return ret; -} -//get the number of bytes that make up the utf8 character. -//this function was not taken from gnome -size_t lucene_utf8charlen(const char *p) -{ - int mask = 0; - int len=0; - unsigned char c = (unsigned char) *p; - - UTF8_COMPUTE (c, mask, len); - return len; -} diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/debug/condition.cpp qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/debug/condition.cpp --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/debug/condition.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/debug/condition.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,80 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#include "CLucene/StdHeader.h" -#include "condition.h" -#include "CLucene/util/Misc.h" -#ifdef _CL__CND_DEBUG - -#define __CND_STR_PRECONDITION "PRECONDITION" -#define __CND_STR_CONDITION "CONDITION" -#define __CND_STR_WARNING "WARNING" -#define __CND_STR_MESSAGE "MESSAGE" -#define __CND_STR_DEBUGMESSAGE "DEBUG MESSAGE" -#define __CND_STR_EXIT "EXIT" - -#ifndef _CND_DEBUG_DONTIMPLEMENT_OUTDEBUG -void _Cnd_OutDebug( const char* FormattedMsg, const char* StrTitle, const char* File, int32_t Line, int32_t Title, const char* Mes2, int32_t fatal ){ - #ifdef __WINDOWS_H - /*Display a standard messagebox*/ - MessageBox(NULL, FormattedMsg, StrTitle, (fatal==1 ? MB_ICONSTOP:MB_ICONEXCLAMATION) | MB_OK | MB_TASKMODAL); - #else - printf("%s\n",FormattedMsg); - #endif - - #if defined(_CND_DEBUG_WARN_DEBUGGER) /*attempt to signal windows debugger*/ - OutputDebugString(FormattedMsg); - DebugBreak(); /*Position debugger just before exit program*/ - #endif - - if ( fatal ) - debugFatalExit(1); -} -#endif - -void __cnd_FormatDebug( const char* File, int32_t Line, int32_t Title, const char* Mes2, int32_t fatal ) { - char M[512]; - const char* StrTitle = NULL; - - if( Mes2 ) - _snprintf(M,512,"file:%s line:%d\n%s",File,Line,Mes2); - else - _snprintf(M,512,"file:%s line:%d",File,Line); - - /*Determine which title to use*/ - switch( Title ) { - case CND_STR_PRECONDITION: { - StrTitle = __CND_STR_PRECONDITION; - break; - } - case CND_STR_CONDITION: { - StrTitle = __CND_STR_CONDITION; - break; - } - case CND_STR_WARNING: { - StrTitle = __CND_STR_WARNING; - break; - } - case CND_STR_MESSAGE: { - StrTitle = __CND_STR_MESSAGE; - break; - } - case CND_STR_DEBUGMESSAGE: { - StrTitle = __CND_STR_DEBUGMESSAGE; - break; - } - case CND_STR_EXIT: { - StrTitle = __CND_STR_EXIT; - break; - } - default: - break; - }/*switch*/ - - _Cnd_OutDebug(M, StrTitle, File, Line, Title, Mes2, fatal); -} -#endif - diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/debug/condition.h qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/debug/condition.h --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/debug/condition.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/debug/condition.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,64 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#ifndef __CONDITION_H -#define __CONDITION_H - -#if defined(_LUCENE_PRAGMA_ONCE) -# pragma once -#endif - -/* -To enable condition debugging uncomment _CND_DEBUG in CLConfig.h -*/ - -#ifdef _CL__CND_DEBUG /* Don't include the debug code */ - #ifndef CND_STR_DEFINES - #define CND_STR_DEFINES - #define CND_STR_PRECONDITION 1 - #define CND_STR_CONDITION 2 - #define CND_STR_WARNING 3 - #define CND_STR_MESSAGE 4 - #define CND_STR_DEBUGMESSAGE 5 - #define CND_STR_EXIT 6 - #endif - - /* _CL__CND_DEBUG defined, include debug code */ - - #ifdef _CND_NODEBUGTEXT - #define CND_PRECONDITION(cond,usermessage) CND__EXITCONDITION(cond,__FILE__,__LINE__,CND_STR_PRECONDITION,NULL) - #define CND_CONDITION(cond,usermessage) CND__EXITCONDITION(cond,__FILE__,__LINE__,CND_STR_CONDITION,NULL) - #define CND_WARNING(cond,usermessage) CND__CONDITION(cond,__FILE__,__LINE__,CND_STR_WARNING,NULL) - #define CND_MESSAGE(cond,usermessage) CND__CONDITION(cond,__FILE__,__LINE__,CND_STR_MESSAGE,NULL) - #define CND_DEBUGMESSAGE(usermessage) CND__MESSAGE(__FILE__,__LINE__,CND_STR_DEBUGMESSAGE,NULL) - #else - #define CND_PRECONDITION(cond,usermessage) CND__EXITCONDITION(cond,__FILE__,__LINE__,CND_STR_PRECONDITION,usermessage) - #define CND_CONDITION(cond,usermessage) CND__EXITCONDITION(cond,__FILE__,__LINE__,CND_STR_CONDITION,usermessage) - #define CND_WARNING(cond,usermessage) CND__CONDITION(cond,__FILE__,__LINE__,CND_STR_WARNING,usermessage) - #define CND_MESSAGE(cond,usermessage) CND__CONDITION(cond,__FILE__,__LINE__,CND_STR_MESSAGE,usermessage) - #define CND_DEBUGMESSAGE(usermessage) CND__MESSAGE(__FILE__,__LINE__,CND_STR_DEBUGMESSAGE,usermessage) - #endif - - //if _CND_DEBUG_DONTIMPLEMENT_OUTDEBUG is defined, then you must implement - //this routine in the client application. The debug callback can then - //be better customised to the host application. - //Here is the default implementation: - void _Cnd_OutDebug( const char* FormattedMsg, const char* StrTitle, const char* File, int32_t Line, int32_t Title, const char* Mes2, int32_t fatal ); - - void __cnd_FormatDebug( const char* File, int32_t Line, int32_t Title, const char* Mes2, int32_t fatal ); - #define CND__EXIT(file,line,title,mes2) {__cnd_FormatDebug(file,line,title,mes2,1);} - #define CND__EXITCONDITION(cond,file,line,title,mes2) {if(!(cond)){__cnd_FormatDebug(file,line,title,mes2,1);}} - #define CND__CONDITION(cond,file,line,title,mes2) {if(!(cond)){__cnd_FormatDebug(file,line,title,mes2,0);}} - #define CND__MESSAGE(file,line,title,mes2) {__cnd_FormatDebug(file,line,title,mes2,0);} -#else - #define CND_PRECONDITION(cond, usermessage) - #define CND_CONDITION(cond, usermessage) - #define CND_WARNING(cond,usermessage) - #define CND_MESSAGE(cond,usermessage) - #define CND_DEBUGMESSAGE(usermessage) -#endif - -#endif diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/debug/error.cpp qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/debug/error.cpp --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/debug/error.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/debug/error.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,73 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#include "CLucene/StdHeader.h" - -CL_NS_USE(util) - - -#ifdef _LUCENE_DISABLE_EXCEPTIONS - #ifdef _LUCENE_PRAGMA_WARNINGS - #pragma message ("==================Lucene exceptions are disabled==================") - #else - #warning "==================Lucene exceptions are disabled==================" - #endif -#else - CLuceneError::CLuceneError(int num, const char* str, bool ownstr) - { - error_number = num; - _awhat=STRDUP_AtoA(str); - _twhat=NULL; - if ( ownstr ) - _CLDELETE_CaARRAY(str); - } - - CLuceneError::CLuceneError(const CLuceneError& clone) - { - this->error_number = clone.error_number; - this->_awhat = NULL; - this->_twhat = NULL; - - if ( clone._awhat != NULL ) - this->_awhat = STRDUP_AtoA(clone._awhat); - if ( clone._twhat != NULL ) - this->_twhat = STRDUP_TtoT(clone._twhat); - } - CLuceneError::~CLuceneError() throw(){ - _CLDELETE_CARRAY(_twhat); - _CLDELETE_CaARRAY(_awhat); - } - char* CLuceneError::what(){ -#ifdef _ASCII - if ( _twhat != NULL ) - return _twhat; -#endif - if ( _awhat == NULL ) - _awhat = STRDUP_TtoA(_twhat); - return _awhat; - } - TCHAR* CLuceneError::twhat(){ -#ifdef _ASCII - if ( _awhat != NULL ) - return _awhat; -#endif - if ( _twhat == NULL ) - _twhat = STRDUP_AtoT(_awhat); - return _twhat; - } - -#ifndef _ASCII - CLuceneError::CLuceneError(int num, const TCHAR* str, bool ownstr) - { - error_number = 0; - _awhat=NULL; - _twhat=STRDUP_TtoT(str); - if ( ownstr ) - _CLDELETE_CARRAY(str); - } -#endif - -#endif //_LUCENE_DISABLE_EXCEPTIONS diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/debug/error.h qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/debug/error.h --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/debug/error.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/debug/error.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,74 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#ifndef _lucene_debug_error_ -#define _lucene_debug_error_ - -#if defined(_LUCENE_PRAGMA_ONCE) -# pragma once -#endif - -#define CL_ERR_UNKNOWN -1 -#define CL_ERR_IO 1 -#define CL_ERR_NullPointer 2 -#define CL_ERR_Runtime 3 -#define CL_ERR_IllegalArgument 4 -#define CL_ERR_Parse 5 -#define CL_ERR_TokenMgr 6 -#define CL_ERR_UnsupportedOperation 7 -#define CL_ERR_InvalidState 8 -#define CL_ERR_IndexOutOfBounds 9 -#define CL_ERR_TooManyClauses 10 -#define CL_ERR_RAMTransaction 11 -#define CL_ERR_InvalidCast 12 -#define CL_ERR_IllegalState 13 - - - -//////////////////////////////////////////////////////// -//error try/throw/catch definitions -//////////////////////////////////////////////////////// -#ifdef _CL_DISABLE_NATIVE_EXCEPTIONS - /*#define try _jpr_Try - #define _CLCATCH _jpr_Catch - #define _CLFINALLY(x) xxxx - #define _CLTHROWA(y) _jpr_Throw - #define _THROWA_DEL(y) _jpr_Throw - #define _RETHROW(x) _jpr_Throw - #define _CLTHROWT(y) _jpr_Throw - - #define _THROWS ,_jpr_Throws*/ -#else - class CLuceneError - { - int error_number; - char* _awhat; - TCHAR* _twhat; - public: - CLuceneError(const CLuceneError& clone); - CLuceneError(int num, const char* str, bool ownstr); -#ifdef _UCS2 - CLuceneError(int num, const TCHAR* str, bool ownstr); -#endif - int number(){return error_number;} - char* what(); - TCHAR* twhat(); - ~CLuceneError() throw(); - }; - - //#define _THROWS //does nothing - #define _CLFINALLY(x) catch(...){ x; throw; } x //note: code x is not run if return is called - #define _CLTHROWA(number, str) throw CLuceneError(number, str,false) - #define _CLTHROWT(number, str) throw CLuceneError(number, str,false) - #define _CLTHROWA_DEL(number, str) throw CLuceneError(number, str,true) //throw a string ensures the value is deleted - #define _CLTHROWT_DEL(number, str) throw CLuceneError(number, str,true) //throw a string ensures the value is deleted - - -#endif //_LUCENE_DISABLE_EXCEPTIONS -// -//////////////////////////////////////////////////////// - -#endif diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/debug/lucenebase.h qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/debug/lucenebase.h --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/debug/lucenebase.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/debug/lucenebase.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,75 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#ifndef _lucene_debug_lucenebase_ -#define _lucene_debug_lucenebase_ - -#ifdef _LUCENE_PRAGMA_ONCE -# pragma once -#endif - -CL_NS_DEF(debug) - -//Lucenebase is the superclass of all clucene objects. It provides -//memory debugging tracking and/or reference counting -class LuceneBase{ -public: -#ifdef LUCENE_ENABLE_MEMLEAKTRACKING - static void* operator new (size_t size); - static void operator delete (void *p); - int32_t __cl_initnum; ///< The order that the object was created at. This is then used to do a lookup in the objects list - - static void* operator new (size_t size, char const * file, int32_t line); - static void operator delete (void *p, char const * file, int32_t line); - - static void* __cl_voidpadd(void* data, const char* file, int line, size_t size); ///dummy__see_mem_h_for_details -#endif -#define _CL_POINTER(x) (x==NULL?NULL:(x->__cl_addref()>=0?x:x)) //return a add-ref'd object -#define LUCENE_REFBASE public CL_NS(debug)::LuceneBase //this is the base of classes who *always* need refcounting - -#if defined(_DEBUG) - #if !defined(LUCENE_BASE_CHECK) - #define LUCENE_BASE_CHECK(x) - #endif -#else - #undef LUCENE_BASE_CHECK - #define LUCENE_BASE_CHECK(x) -#endif - -//Macro for creating new arrays -#ifdef LUCENE_ENABLE_MEMLEAKTRACKING - #define _CL_NEWARRAY(type,size) (type*)CL_NS(debug)::LuceneBase::__cl_voidpadd(new type[(size_t)size],__FILE__,__LINE__,(size_t)size); - #define _CLDELETE_ARRAY(x) if (x!=NULL){CL_NS(debug)::LuceneBase::__cl_voidpremove((const void*)x,__FILE__,__LINE__); delete [] x; x=NULL;} - #define _CLDELETE_LARRAY(x) if (x!=NULL){CL_NS(debug)::LuceneBase::__cl_voidpremove((const void*)x,__FILE__,__LINE__);delete [] x;} - #ifndef _CLDELETE_CARRAY - #define _CLDELETE_CARRAY(x) if (x!=NULL){CL_NS(debug)::LuceneBase::__cl_voidpremove((const void*)x,__FILE__,__LINE__);delete [] x; x=NULL;} - #define _CLDELETE_LCARRAY(x) if (x!=NULL){CL_NS(debug)::LuceneBase::__cl_voidpremove((const void*)x,__FILE__,__LINE__);delete [] x;} - #endif -#else - #define _CL_NEWARRAY(type,size) new type[size] - #define _CLDELETE_ARRAY(x) if (x!=NULL){delete [] x; x=NULL;} - #define _CLDELETE_LARRAY(x) if (x!=NULL){delete [] x;} - #ifndef _CLDELETE_CARRAY - #define _CLDELETE_CARRAY(x) if (x!=NULL){delete [] x; x=NULL;} - #define _CLDELETE_LCARRAY(x) if (x!=NULL){delete [] x;} - #endif -#endif -//a shortcut for deleting a carray and all its contents -#define _CLDELETE_CARRAY_ALL(x) {if ( x!=NULL ){ for(int xcda=0;x[xcda]!=NULL;xcda++)_CLDELETE_CARRAY(x[xcda]);}_CLDELETE_ARRAY(x)}; -#define _CLDELETE_ARRAY_ALL(x) {if ( x!=NULL ){ for(int xcda=0;x[xcda]!=NULL;xcda++)_CLDELETE(x[xcda]);}_CLDELETE_ARRAY(x)}; -#ifndef _CLDELETE_CaARRAY - #define _CLDELETE_CaARRAY _CLDELETE_CARRAY - #define _CLDELETE_LCaARRAY _CLDELETE_LCARRAY -#endif - -//Macro for deleting -#ifdef LUCENE_ENABLE_REFCOUNT - #define _CLDELETE(x) if (x!=NULL){ CND_PRECONDITION((x)->__cl_refcount>=0,"__cl_refcount was < 0"); if ((x)->__cl_decref() <= 0)delete x; x=NULL; } - #define _CLLDELETE(x) if (x!=NULL){ CND_PRECONDITION((x)->__cl_refcount>=0,"__cl_refcount was < 0"); if ((x)->__cl_decref() <= 0)delete x; } -#else - #define _CLDELETE(x) if (x!=NULL){ LUCENE_BASE_CHECK(x); delete x; x=NULL; } - #define _CLLDELETE(x) if (x!=NULL){ LUCENE_BASE_CHECK(x); delete x; } -#endif - -//_CLDECDELETE deletes objects which are *always* refcounted -#define _CLDECDELETE(x) if (x!=NULL){ CND_PRECONDITION((x)->__cl_refcount>=0,"__cl_refcount was < 0"); if ((x)->__cl_decref() <= 0)delete x; x=NULL; } -#define _CLLDECDELETE(x) if (x!=NULL){ CND_PRECONDITION((x)->__cl_refcount>=0,"__cl_refcount was < 0"); if ((x)->__cl_decref() <= 0)delete x; } - -//_VDelete should be used for deleting non-clucene objects. -//when using reference counting, _CLDELETE casts the object -//into a LuceneBase*. -#define _CLVDELETE(x) if(x!=NULL){delete x; x=NULL;} - -template -class Array: LUCENE_BASE{ -public: - T* values; - size_t length; - - void deleteAll(){ - for (size_t i=0;ivalues = values; - this->length = length; - } - Array(size_t length){ - this->values = _CL_NEWARRAY(T,length); - this->length = length; - } - ~Array(){} - - const T operator[](size_t _Pos) const - { - if (length <= _Pos){ - _CLTHROWA(CL_ERR_IllegalArgument,"vector subscript out of range"); - } - return (*(values + _Pos)); - } - T operator[](size_t _Pos) - { - if (length <= _Pos){ - _CLTHROWA(CL_ERR_IllegalArgument,"vector subscript out of range"); - } - return (*(values + _Pos)); - } - -}; - -#endif //_lucene_debug_lucenebase_ diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/debug/memtracking.cpp qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/debug/memtracking.cpp --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/debug/memtracking.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/debug/memtracking.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,371 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#include "CLucene/StdHeader.h" -#include "CLucene/util/Misc.h" - -bool _lucene_disable_debuglogging = true; //if LUCENE_ENABLE_CONSTRUCTOR_LOG is on, dont do log if this is true -bool _lucene_run_objectcheck = false; //run a memory check before deleting objects -int _lucene_counter_break = -1; //to break at this item, change this - //and put break points at points below - -CL_NS_USE(util) -CL_NS_DEF(debug) - -#ifdef LUCENE_ENABLE_MEMLEAKTRACKING -int32_t _instance_counter = 0; //counter for initnumber - -struct _file{ - int32_t refcount; ///times this has been used - char* value; ///reference to the the basefile -}; //structure for name counting -struct _pointers{ - _file* file; - int32_t initline; - int32_t initnumber; -};//structure for pointer-filename references - -typedef CL_NS(util)::CLSet > defFile; -typedef CL_NS(util)::CLSet,Deletor::Dummy,Deletor::Void<_pointers> > defPointer; -typedef CL_NS(util)::CLSet,Deletor::Dummy,Deletor::Void<_pointers> > defVoid; - -DEFINE_MUTEX(memleak_lock) -defFile LuceneBase_Files(false,true); //list of filenames used -defPointer LuceneBase_Pointers(false,true); //list of pointers counted -defVoid LuceneBase_Voids(false,true); //list of arbitary data added - -//variables to trim filenames to just the base names -char _files_trim_string[CL_MAX_DIR]; -int32_t _files_trim_start=-1; - -//trim the filename and return the refcounted _file* structure -_file* get_file(const char* file){ - if ( _files_trim_start == -1 ){ - //this trims the start of the name file name so - //that the whole of the filename is not stored - more asthetic :) - //need to find the base - _files_trim_start = strlen(__FILE__) - 21; //(length of debug/memtracking.cpp) - strcpy(_files_trim_string,__FILE__); - _files_trim_string[_files_trim_start] = 0; - } - if ( strncmp(file,_files_trim_string,_files_trim_start) == 0 ){ - //this file should be within the same directory area as we found lucenebase.cpp - //to be, lets trim the start - file+=_files_trim_start; - } - - //now return an existing files structure (with refcount++) or create a new one - defFile::iterator itr = LuceneBase_Files.find((const char*)file); - if ( itr != LuceneBase_Files.end() ){ - _file* bf = itr->second; - bf->refcount++; - return bf; - }else{ - _file* ref = new _file; - ref->value = new char[strlen(file)+1]; //cannot use _CL_NEWARRAY otherwise recursion - strcpy(ref->value,file); - - ref->refcount = 1; - LuceneBase_Files.insert(pair(ref->value,ref)); - return ref; - } -} - -void remove_file(_file* bf){ - bf->refcount--; - if ( bf->refcount <= 0 ){ - defFile::iterator fi = LuceneBase_Files.find(bf->value); - CND_PRECONDITION(fi!=LuceneBase_Files.end(),"fi==NULL"); - delete[] bf->value; - LuceneBase_Files.removeitr(fi); - } -} - -#ifdef LUCENE_ENABLE_CONSTRUCTOR_LOG - void constructor_log(const char* type,const char* file,const int line, const int size){ - if ( _lucene_disable_debuglogging ){ - FILE* f = fopen("clucene.log","a"); - char buf[CL_MAX_DIR+5]; - sprintf(buf,"%s,%s,%d,%d\n",type,file,line,size); - fwrite(buf,sizeof(char),strlen(buf),f); - fclose(f); - } - } - #define CONSTRUCTOR_LOG(type,file,line,size) constructor_log(type,file,line,size) -#else - #define CONSTRUCTOR_LOG(type,file,line,size) -#endif - -//////////////////////////////////////////////////////////////////////////////// -// the _CLNEW&_CLDELETE new/delete operators -//////////////////////////////////////////////////////////////////////////////// -void* LuceneBase::operator new (size_t size, const char * file, int32_t line) -{ - SCOPED_LOCK_MUTEX(memleak_lock) - - void* p = malloc (size); - LuceneBase* lb = (LuceneBase*)p; - - //create the pointer struct - _file* br = get_file(file); - _pointers* bp = new _pointers; - bp->file = br; - bp->initnumber = _instance_counter++; - bp->initline = line; - - //associate this object with the pointer - lb->__cl_initnum = bp->initnumber; - - //break if necessary - if ( _lucene_counter_break == lb->__cl_initnum ) - CLDebugBreak(); //put break point here - - //add the pointer object - LuceneBase_Pointers.insert(pair(lb, bp)); - - CONSTRUCTOR_LOG("newobj",file,line,size); - return p; -} -void LuceneBase::operator delete (void *p, char const * file, int32_t line) -{ - SCOPED_LOCK_MUTEX(memleak_lock) - - LuceneBase* lb=(LuceneBase*)p; - - defPointer::iterator itr = LuceneBase_Pointers.find(lb); - if ( itr != LuceneBase_Pointers.end() ){ - _pointers* bp = itr->second; - remove_file(bp->file); - - LuceneBase_Pointers.removeitr(itr); - }else{ - //break - } - free(p); -} - -/////////////////////////////////////////////////////////////////////////// -// the generic new/delete operators -/////////////////////////////////////////////////////////////////////////// -void* LuceneBase::operator new (size_t size) -{ - SCOPED_LOCK_MUTEX(memleak_lock) - - void* p = malloc (size); - LuceneBase* lb = (LuceneBase*)p; - - //create the pointer struct - _file* br = get_file("undefined"); - _pointers* bp = new _pointers; - bp->file = br; - bp->initnumber = _instance_counter++; - bp->initline = -1; - - //associate this object with the pointer - lb->__cl_initnum = bp->initnumber; - - //break if necessary - if ( _lucene_counter_break == lb->__cl_initnum ) - CLDebugBreak(); - - //add the pointer object - LuceneBase_Pointers.insert(pair(lb,bp)); - - CONSTRUCTOR_LOG("newobj","unknown",-1,size); - return p; -} -void LuceneBase::operator delete (void *p) -{ - SCOPED_LOCK_MUTEX(memleak_lock) - - LuceneBase* lb=(LuceneBase*)p; - - defPointer::iterator itr = LuceneBase_Pointers.find(lb); - if ( itr != LuceneBase_Pointers.end() ){ - _pointers* bp = itr->second; - remove_file(bp->file); - LuceneBase_Pointers.removeitr(itr); - }else{ - CLDebugBreak(); - } - free(p); -} - -/////////////////////////////////////////////////////////////////////////// -// other memtracking functions -/////////////////////////////////////////////////////////////////////////// -void LuceneBase::__cl_unregister(const void* obj){ - SCOPED_LOCK_MUTEX(memleak_lock) - - LuceneBase* lb=(LuceneBase*)obj; - defPointer::iterator itr = LuceneBase_Pointers.find(lb); - CND_PRECONDITION(itr != LuceneBase_Pointers.end(),"__cl_unregister object not found"); - _pointers* bp = itr->second; - LuceneBase_Pointers.removeitr(itr); -} - -void* LuceneBase::__cl_voidpadd(void* data, const char* file, int line,size_t size){ - SCOPED_LOCK_MUTEX(memleak_lock) - - _file* br = get_file(file); - _pointers* bp = new _pointers; - bp->file = br; - bp->initnumber = _instance_counter++; - bp->initline = line; - - LuceneBase_Voids.insert(pair(data,bp)); - CONSTRUCTOR_LOG("newarr",file,line,size); - return data; -} -void LuceneBase::__cl_voidpremove(const void* data, const char* file, int line){ - SCOPED_LOCK_MUTEX(memleak_lock) - defVoid::iterator itr = LuceneBase_Voids.find(data); - if ( itr != LuceneBase_Voids.end() ){ - _pointers* bp = itr->second; - remove_file(bp->file); - LuceneBase_Voids.removeitr(itr); - }else{ - printf("Data deleted when not added with _CL_NEWARRAY in %s at %d\n",file,line); - } -} - - -//////////////////////////////////////////////////////////// - - -//////////////////////////////////////////////////////////// -//The lucene base memory leak printout functions -//////////////////////////////////////////////////////////// -//static -void __internalcl_PrintUnclosedObject(bool isObject, string& sb,_pointers* bp,_file* bf, bool print){ - TCHAR ttmp[100]; - char atmp[100]; - - sb.append(" "); - { - _i64tot(bp->initnumber,ttmp,10); - STRCPY_TtoA(atmp,ttmp,100); - sb.append(atmp); - } - if ( isObject ){ - sb.append("(obj). "); - }else{ - sb.append(". "); - } - sb.append(bf->value); - sb.append(", line "); - { - _i64tot(bp->initline,ttmp,10); - STRCPY_TtoA(atmp,ttmp,100); - sb.append(atmp); - } - sb.append("\n"); - - if ( print && sb.length() > 0 ){ - printf("%s\n", sb.c_str()); - sb = ""; - } -} -char* __internalcl_GetUnclosedObjects(bool print){ - TCHAR ttmp[100]; - char atmp[100]; - SCOPED_LOCK_MUTEX(memleak_lock) - - string sb; - bool unknowns = false; - if ( LuceneBase_Pointers.size() > 0 ){ - { - _i64tot(LuceneBase_Pointers.size(),ttmp,10); - STRCPY_TtoA(atmp,ttmp,100); - sb.append(atmp); - } - sb.append(" clucene objects are still open\n"); - - defPointer::iterator itr = LuceneBase_Pointers.begin(); - while ( itr != LuceneBase_Pointers.end() ){ - _pointers* bp = itr->second; - _file* bf = bp->file; - - if ( bp->initline == -1 ) - unknowns = true; - __internalcl_PrintUnclosedObject(true, sb,bp,bf,print); - - ++itr; - } - - defVoid::iterator itr2 = LuceneBase_Voids.begin(); - while ( itr2 != LuceneBase_Voids.end() ){ - _pointers* bp = itr2->second; - _file* bf = bp->file; - - if ( bp->initline == -1 ) - unknowns = true; - __internalcl_PrintUnclosedObject(false, sb,bp,bf,print); - - itr2++; - } - } - - if ( unknowns == true ){ - sb.append("*** Some memory was not created with _CLNEW and was not tracked... ***\n"); - sb.append("*** Use _CLNEW instead of new when creating CLucene objects ***\n"); - sb.append("*** Memory may also have not been freed in the current context ***\n"); - } - - if ( print ){ - if ( sb.length() > 0 ){ - printf("%s\n", sb.c_str()); - sb = ""; - } - return NULL; - }else{ - if ( sb.length() > 0 ) - return STRDUP_AtoA(sb.c_str()); - else - return NULL; - } -} - -void LuceneBase::__cl_ClearMemory(){ - SCOPED_LOCK_MUTEX(memleak_lock) - - while ( LuceneBase_Files.size() > 0 ){ - defFile::iterator fi = LuceneBase_Files.begin(); - _file* f = fi->second; - delete[] f->value; - LuceneBase_Files.removeitr (fi); - } - LuceneBase_Pointers.clear(); - LuceneBase_Voids.clear(); -} -char* LuceneBase::__cl_GetUnclosedObjects(){ - return __internalcl_GetUnclosedObjects(false); -} -//static -int32_t LuceneBase::__cl_GetUnclosedObjectsCount(){ - return LuceneBase_Pointers.size(); -} - -const char* LuceneBase::__cl_GetUnclosedObject(int32_t item){ - SCOPED_LOCK_MUTEX(memleak_lock) - - defPointer::iterator itr=LuceneBase_Pointers.begin(); - int32_t i=0; - for ( ;itr!=LuceneBase_Pointers.end() && isecond->file->value; - else - return NULL; -} -void LuceneBase::__cl_PrintUnclosedObjects(){ - __internalcl_GetUnclosedObjects(true); -} -//////////////////////////////////////////////////////////// - -#endif //LUCENE_ENABLE_MEMLEAKTRACKING -CL_NS_END diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/document/DateField.cpp qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/document/DateField.cpp --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/document/DateField.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/document/DateField.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,60 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#include "CLucene/StdHeader.h" - -#include "DateField.h" -#include "CLucene/util/Misc.h" -CL_NS_USE(util) -CL_NS_DEF(document) - -DateField::~DateField(){ -} - -TCHAR* DateField::timeToString(const int64_t time) { - TCHAR* buf = _CL_NEWARRAY(TCHAR,DATEFIELD_DATE_LEN + 1); - timeToString(time,buf); - return buf; -} -void DateField::timeToString(const int64_t time, TCHAR* buf) { - CND_PRECONDITION (buf, "buf == NULL"); - *buf = '\0'; - if (time < 0) - _CLTHROWA (CL_ERR_IllegalArgument,"time too early"); //todo: make richer error - - if (time > DATEFIELD_DATE_MAX) - _CLTHROWA (CL_ERR_IllegalArgument, "time too late (past DATEFIELD_DATE_MAX"); //todo: make richer error - - _i64tot(time, buf, 36); - int32_t bufLen = _tcslen(buf); - - CND_PRECONDITION (bufLen <= DATEFIELD_DATE_LEN, "timeToString length is greater than 9"); - - /* Supply leading zeroes if necessary. */ - if (bufLen < DATEFIELD_DATE_LEN) { - const int32_t nMissingZeroes = DATEFIELD_DATE_LEN - bufLen; - /* Move buffer contents forward to make room for leading zeroes. */ - for (int32_t i = DATEFIELD_DATE_LEN - 1; i >= nMissingZeroes; i--) - buf[i] = buf[i - nMissingZeroes]; - - /* Insert leading zeroes. */ - {// MSVC6 scoping fix - for (int32_t i = 0; i < nMissingZeroes; i++) - buf[i] = '0'; - } - - buf[DATEFIELD_DATE_LEN] = 0; - } - - CND_PRECONDITION (_tcslen(buf) == DATEFIELD_DATE_LEN, "timeToString return is not equal to DATEFIELD_DATE_LEN"); -} - -int64_t DateField::stringToTime(const TCHAR* time) { - TCHAR* end; - return _tcstoi64(time, &end, 36); -} - -CL_NS_END diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/document/DateField.h qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/document/DateField.h --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/document/DateField.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/document/DateField.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,64 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#ifndef _lucene_document_DateField_ -#define _lucene_document_DateField_ - -#if defined(_LUCENE_PRAGMA_ONCE) -# pragma once -#endif - -CL_NS_DEF(document) - -//here are some constants used throughout clucene -//make date strings long enough to last a millenium -#define DATEFIELD_DATE_MAX _ILONGLONG(31536000000000) //1000L*365*24*60*60*1000 - -#define DATEFIELD_DATE_LEN 9 ////Long.toString(DATEFIELD_DATE_MAX, Character.MAX_RADIX).length() - -/** -* Provides support for converting dates to strings and vice-versa. -* The strings are structured so that lexicographic sorting orders by date, -* which makes them suitable for use as field values and search terms. -* -*

Note that this class saves dates with millisecond granularity, -* which is bad for {@link RangeQuery} and {@link PrefixQuery}, as those -* queries are expanded to a BooleanQuery with a potentially large number -* of terms when searching. Thus you might want to use -* {@link DateTools} instead. -* -*

-* Note: dates before 1970 cannot be used, and therefore cannot be -* indexed when using this class. See {@link DateTools} for an -* alternative without such a limitation. -* -* @deprecated If you build a new index, use {@link DateTools} instead. This class is included for use with existing -* indices and will be removed in a future release. -*/ -class DateField :LUCENE_BASE { -public: - ~DateField(); - - /** - * Converts a millisecond time to a string suitable for indexing. - * @throws RuntimeException if the time specified in the - * method argument is negative, that is, before 1970 - */ - static TCHAR* timeToString(const int64_t time); - - /** - * Converts a millisecond time to a string suitable for indexing. - * @throws CL_ERR_IllegalArgument if the time specified in the - * method argument is negative, that is, before 1970 - * @param str must be a character array DATEFIELD_DATE_LEN+1 or longer - */ - static void timeToString(const int64_t time, TCHAR* str); - - /** Converts a string-encoded date into a millisecond time. */ - static int64_t stringToTime(const TCHAR* s); -}; -CL_NS_END -#endif diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/document/Document.cpp qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/document/Document.cpp --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/document/Document.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/document/Document.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,237 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#include "CLucene/StdHeader.h" -#include "Document.h" -#include "Field.h" -#include "CLucene/util/StringBuffer.h" - -CL_NS_USE(util) -CL_NS_DEF(document) - - DocumentFieldEnumeration::DocumentFieldList::DocumentFieldList(Field* f, DocumentFieldList* n ) { - //Func - Constructor - //Pre - f != NULL - // n may be NULL - //Post - Instance has been created - CND_PRECONDITION(f != NULL, "f is NULL"); - - field = f; - next = n; - } - DocumentFieldEnumeration::DocumentFieldList::~DocumentFieldList(){ - //Func - Destructor - //Pre - true - //Post - Instance has been destroyed - - // Instead of recursively deleting the field list we do - // it iteratively to avoid stack overflows when - // dealing with several thousands of fields. - - if (!field) { - return; // nothing to do; deleted by different invocation of dtor - } - - DocumentFieldList* cur = next; - while (cur != NULL) - { - DocumentFieldList* temp = cur->next; - cur->next = NULL; - - _CLDELETE(cur); - cur = temp; - } - _CLDELETE(field); - } - - - DocumentFieldEnumeration::DocumentFieldEnumeration(const DocumentFieldList* fl){ - //Func - Constructor - //Pre - fl may be NULL - //Post - Instance has been created - - fields = fl; - } - - DocumentFieldEnumeration::~DocumentFieldEnumeration(){ - //Func - Destructor - //Pre - true - //Post - Instance has been destroyed - } - - bool DocumentFieldEnumeration::hasMoreElements() const { - return fields == NULL ? false : true; - } - - Field* DocumentFieldEnumeration::nextElement() { - //Func - Return the next element in the enumeration - //Pre - true - //Post - The next element is returned or NULL - - - Field* result = NULL; - //Check if fields is still valid - if (fields){ - result = fields->field; - fields = fields->next; - } - return result; - } - - /** Constructs a new document with no fields. */ - Document::Document(){ - //Func - Constructor - //Pre - true - //Post - Instance has been created - boost = 1.0f; - fieldList = NULL; - } - - Document::~Document(){ - //Func - Destructor - //Pre - true - //Post - Instance has been destroyed - boost = 1.0f; - _CLDELETE(fieldList); - } - - void Document::clear(){ - _CLDELETE(fieldList); - } - - void Document::add(Field& field) { - fieldList = _CLNEW DocumentFieldEnumeration::DocumentFieldList(&field, fieldList); - } - - void Document::setBoost(qreal boost) { - this->boost = boost; - } - - qreal Document::getBoost() const { - return boost; - } - - - Field* Document::getField(const TCHAR* name) const{ - CND_PRECONDITION(name != NULL, "name is NULL"); - - for (DocumentFieldEnumeration::DocumentFieldList* list = fieldList; list != NULL; list = list->next) - //cannot use interning here, because name is probably not interned - if ( _tcscmp(list->field->name(), name) == 0 ){ - return list->field; - } - - return NULL; - } - - const TCHAR* Document::get(const TCHAR* field) const { - CND_PRECONDITION(field != NULL, "field is NULL"); - Field *f = getField(field); - if (f!=NULL) - return f->stringValue(); //this returns null it is a binary(reader) - else - return NULL; - } - - DocumentFieldEnumeration* Document::fields() const { - return _CLNEW DocumentFieldEnumeration(fieldList); - } - - - TCHAR* Document::toString() const { - StringBuffer ret(_T("Document<")); - for (DocumentFieldEnumeration::DocumentFieldList* list = fieldList; list != NULL; list = list->next) { - TCHAR* tmp = list->field->toString(); - ret.append( tmp ); - if (list->next != NULL) - ret.append(_T(" ")); - _CLDELETE_ARRAY( tmp ); - } - ret.append(_T(">")); - return ret.toString(); - } - - - - void Document::removeField(const TCHAR* name) { - CND_PRECONDITION(name != NULL, "name is NULL"); - - DocumentFieldEnumeration::DocumentFieldList* previous = NULL; - DocumentFieldEnumeration::DocumentFieldList* current = fieldList; - while (current != NULL) { - //cannot use interning here, because name is probably not interned - if ( _tcscmp(current->field->name(),name) == 0 ){ - if (previous){ - previous->next = current->next; - }else - fieldList = current->next; - current->next=NULL; //ensure fieldlist destructor doesnt delete it - _CLDELETE(current); - return; - } - previous = current; - current = current->next; - } - } - - void Document::removeFields(const TCHAR* name) { - CND_PRECONDITION(name != NULL, "name is NULL"); - - DocumentFieldEnumeration::DocumentFieldList* previous = NULL; - DocumentFieldEnumeration::DocumentFieldList* current = fieldList; - while (current != NULL) { - //cannot use interning here, because name is probably not interned - if ( _tcscmp(current->field->name(),name) == 0 ){ - if (previous){ - previous->next = current->next; - }else - fieldList = current->next; - - current->next=NULL; //ensure fieldlist destructor doesnt delete it - _CLDELETE(current); - - if ( previous ) - current = previous->next; - else - current = fieldList; - }else{ - previous = current; - current = current->next; - } - } - } - - TCHAR** Document::getValues(const TCHAR* name) { - DocumentFieldEnumeration* it = fields(); - int32_t count = 0; - while ( it->hasMoreElements() ){ - Field* f = it->nextElement(); - //cannot use interning here, because name is probably not interned - if ( _tcscmp(f->name(),name) == 0 && f->stringValue() != NULL ) - count++; - } - _CLDELETE(it); - it = fields(); - - //todo: there must be a better way of doing this, we are doing two iterations of the fields - TCHAR** ret = NULL; - if ( count > 0 ){ - //start again - ret = _CL_NEWARRAY(TCHAR*,count+1); - int32_t i=0; - while ( it->hasMoreElements() ){ - Field* fld=it->nextElement(); - if ( _tcscmp(fld->name(),name)== 0 && fld->stringValue() != NULL ){ - ret[i] = stringDuplicate(fld->stringValue()); - i++; - } - } - ret[count]=NULL; - } - _CLDELETE(it); - return ret; - } -CL_NS_END diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/document/Document.h qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/document/Document.h --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/document/Document.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/document/Document.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,158 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#ifndef _lucene_document_Document_ -#define _lucene_document_Document_ - -#if defined(_LUCENE_PRAGMA_ONCE) -# pragma once -#endif - -#include "Field.h" - -///todo: jlucene has change from using DocumentFieldList/Enumeration -///to using a java List... do we want to do this too? -CL_NS_DEF(document) - -class Document; //predefine -class DocumentFieldEnumeration :LUCENE_BASE{ - class DocumentFieldList :LUCENE_BASE{ - public: - DocumentFieldList(Field* f, DocumentFieldList* n); - ~DocumentFieldList(); - Field* field; - DocumentFieldList* next; - }; - friend class Document; -private: - const DocumentFieldList* fields; -public: - DocumentFieldEnumeration(const DocumentFieldList* fl); - ~DocumentFieldEnumeration(); - bool hasMoreElements() const; - Field* nextElement(); -}; - -/** Documents are the unit of indexing and search. -* -* A Document is a set of fields. Each field has a name and a textual value. -* A field may be {@link Field#isStored() stored} with the document, in which -* case it is returned with search hits on the document. Thus each document -* should typically contain one or more stored fields which uniquely identify -* it. -* -*

Note that fields which are not {@link Field#isStored() stored} are -* not available in documents retrieved from the index, e.g. with {@link -* Hits#doc(int32_t, Document*)}, {@link Searcher#doc(int32_t, Document*)} or {@link -* IndexReader#document(int32_t, Document*)}. -*/ -class Document:LUCENE_BASE { -private: - DocumentFieldEnumeration::DocumentFieldList* fieldList; - qreal boost; -public: - Document(); - ~Document(); - - /** - *

Adds a field to a document. Several fields may be added with - * the same name. In this case, if the fields are indexed, their text is - * treated as though appended for the purposes of search.

- *

Note that add like the removeField(s) methods only makes sense - * prior to adding a document to an index. These methods cannot - * be used to change the content of an existing index! In order to achieve this, - * a document has to be deleted from an index and a new changed version of that - * document has to be added.

- * - */ - void add(Field& field); - /** Returns a field with the given name if any exist in this document, or - * null. If multiple fields exists with this name, this method returns the - * first value added. - * Note: name is case sensitive - */ - Field* getField(const TCHAR* name) const; - - /** Returns the string value of the field with the given name if any exist in - * this document, or null. If multiple fields exist with this name, this - * method returns the first value added. If only binary fields with this name - * exist, returns null. - * Note: name is case sensitive - */ - const TCHAR* get(const TCHAR* field) const; - - /** Returns an Enumeration of all the fields in a document. */ - DocumentFieldEnumeration* fields() const; - /** Prints the fields of a document for human consumption. */ - TCHAR* toString() const; - - /** Sets a boost factor for hits on any field of this document. This value - * will be multiplied into the score of all hits on this document. - * - *

Values are multiplied into the value of {@link Field#getBoost()} of - * each field in this document. Thus, this method in effect sets a default - * boost for the fields of this document. - * - * @see Field#setBoost(qreal) - */ - void setBoost(qreal boost); - - /** Returns the boost factor for hits on any field of this document. - * - *

The default value is 1.0. - * - *

Note: This value is not stored directly with the document in the index. - * Documents returned from {@link IndexReader#document(int32_t, Document*)} and - * {@link Hits#doc(int32_t, Document*)} may thus not have the same value present as when - * this document was indexed. - * - * @see #setBoost(qreal) - */ - qreal getBoost() const; - - - /** - *

Removes field with the specified name from the document. - * If multiple fields exist with this name, this method removes the first field that has been added. - * If there is no field with the specified name, the document remains unchanged.

- *

Note that the removeField(s) methods like the add method only make sense - * prior to adding a document to an index. These methods cannot - * be used to change the content of an existing index! In order to achieve this, - * a document has to be deleted from an index and a new changed version of that - * document has to be added.

- * Note: name is case sensitive - */ - void removeField(const TCHAR* name); - - /** - *

Removes all fields with the given name from the document. - * If there is no field with the specified name, the document remains unchanged.

- *

Note that the removeField(s) methods like the add method only make sense - * prior to adding a document to an index. These methods cannot - * be used to change the content of an existing index! In order to achieve this, - * a document has to be deleted from an index and a new changed version of that - * document has to be added.

- * Note: name is case sensitive - */ - void removeFields(const TCHAR* name); - - /** - * Returns an array of values of the field specified as the method parameter. - * This method can return null. - * Note: name is case sensitive - * - * @param name the name of the field - * @return a String[] of field values - */ - TCHAR** getValues(const TCHAR* name); - - /** - * Empties out the document so that it can be reused - */ - void clear(); -}; -CL_NS_END -#endif diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/document/Field.cpp qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/document/Field.cpp --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/document/Field.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/document/Field.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,315 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#include "CLucene/StdHeader.h" -#include "CLucene/util/Reader.h" -#include "Field.h" -#include "CLucene/util/Misc.h" -#include "CLucene/util/StringIntern.h" -#include "CLucene/util/StringBuffer.h" - -CL_NS_USE(util) -CL_NS_DEF(document) - -Field::Field(const TCHAR* Name, const TCHAR* String, bool store, bool index, bool token, const bool storeTermVector) -{ -//Func - Constructor -//Pre - Name != NULL and contains the name of the field -// String != NULL and contains the value of the field -// store indicates if the field must be stored -// index indicates if the field must be indexed -// token indicates if the field must be tokenized -//Post - The instance has been created - - CND_PRECONDITION(Name != NULL, "Name is NULL"); - CND_PRECONDITION(String != NULL,"String is NULL"); - CND_PRECONDITION(!(!index && storeTermVector),"cannot store a term vector for fields that are not indexed."); - - _name = CLStringIntern::intern( Name CL_FILELINE); - _stringValue = stringDuplicate( String ); - _readerValue = NULL; - _streamValue = NULL; - boost=1.0f; - omitNorms = false; - - int cfg = 0; - if ( store ) - cfg |= STORE_YES; - if ( index && token ) - cfg |= INDEX_TOKENIZED; - else if ( index && !token ) - cfg |= INDEX_UNTOKENIZED; - - if ( storeTermVector ) - _CLTHROWA(CL_ERR_IllegalArgument,"Stored term vector is deprecated with using this constructor"); - - setConfig(cfg); -} - -Field::Field(const TCHAR* Name, Reader* reader, bool store, bool index, bool token, const bool storeTermVector) -{ -//Func - Constructor -//Pre - Name != NULL and contains the name of the field -// reader != NULL and contains a Reader -// store indicates if the field must be stored -// index indicates if the field must be indexed -// token indicates if the field must be tokenized -//Post - The instance has been created - - CND_PRECONDITION(Name != NULL, "Name is NULL"); - CND_PRECONDITION(reader != NULL, "reader is NULL"); - - _name = CLStringIntern::intern( Name CL_FILELINE); - _stringValue = NULL; - _readerValue = reader; - _streamValue = NULL; - boost=1.0f; - omitNorms = false; - - int cfg = 0; - if ( store ) - cfg |= STORE_YES; - if ( index && token ) - cfg |= INDEX_TOKENIZED; - else if ( index && !token ) - cfg |= INDEX_UNTOKENIZED; - - if ( storeTermVector ) - _CLTHROWA(CL_ERR_IllegalArgument,"Stored term vector is deprecated with using this constructor"); - - setConfig(cfg); -} - -Field::Field(const TCHAR* Name, Reader* reader, int config) -{ - CND_PRECONDITION(Name != NULL, "Name is NULL"); - CND_PRECONDITION(reader != NULL, "reader is NULL"); - - _name = CLStringIntern::intern( Name CL_FILELINE); - _stringValue = NULL; - _readerValue = reader; - _streamValue = NULL; - boost=1.0f; - omitNorms = false; - - setConfig(config); -} - - -Field::Field(const TCHAR* Name, const TCHAR* Value, int config) -{ - CND_PRECONDITION(Name != NULL, "Name is NULL"); - CND_PRECONDITION(Value != NULL, "value is NULL"); - - _name = CLStringIntern::intern( Name CL_FILELINE); - _stringValue = stringDuplicate( Value ); - _readerValue = NULL; - _streamValue = NULL; - boost=1.0f; - omitNorms = false; - - setConfig(config); -} - -Field::Field(const TCHAR* Name, jstreams::StreamBase* Value, int config) -{ - CND_PRECONDITION(Name != NULL, "Name is NULL"); - CND_PRECONDITION(Value != NULL, "value is NULL"); - - _name = CLStringIntern::intern( Name CL_FILELINE); - _stringValue = NULL; - _readerValue = NULL; - _streamValue = Value; - boost=1.0f; - omitNorms = false; - - setConfig(config); -} - -Field::~Field(){ -//Func - Destructor -//Pre - true -//Post - Instance has been destroyed - - CLStringIntern::unintern(_name); - _CLDELETE_CARRAY(_stringValue); - _CLDELETE(_readerValue); - _CLVDELETE( _streamValue ); -} - - -/*===============FIELDS=======================*/ -const TCHAR* Field::name() { return _name; } ///* Field::streamValue() { return _streamValue; } ///omitNorms=omitNorms; } - -void Field::setBoost(qreal boost) { this->boost = boost; } -qreal Field::getBoost() { return boost; } - -void Field::setConfig(int x){ - int newConfig=0; - - //set storage settings - if ( (x & STORE_YES) || (x & STORE_COMPRESS) ){ - newConfig |= STORE_YES; - if ( x & STORE_COMPRESS ) - newConfig |= STORE_COMPRESS; - }else - newConfig |= STORE_NO; - - if ( (x & INDEX_NO)==0 ){ - bool index=false; - - if ( x & INDEX_NONORMS ){ - newConfig |= INDEX_NONORMS; - index = true; - } - - if ( x & INDEX_TOKENIZED && x & INDEX_UNTOKENIZED ) - _CLTHROWA(CL_ERR_IllegalArgument,"it doesn't make sense to have an untokenised and tokenised field"); - if ( x & INDEX_TOKENIZED ){ - newConfig |= INDEX_TOKENIZED; - index = true; - } - if ( x & INDEX_UNTOKENIZED ){ - newConfig |= INDEX_UNTOKENIZED; - index = true; - } - if ( !index ) - newConfig |= INDEX_NO; - }else - newConfig |= INDEX_NO; - - if ( newConfig & INDEX_NO && newConfig & STORE_NO ) - _CLTHROWA(CL_ERR_IllegalArgument,"it doesn't make sense to have a field that is neither indexed nor stored"); - - //set termvector settings - if ( (x & TERMVECTOR_NO) == 0 ){ - bool termVector=false; - if ( x & TERMVECTOR_YES ){ - termVector=true; - } - if ( x & TERMVECTOR_WITH_OFFSETS ){ - newConfig |= TERMVECTOR_WITH_OFFSETS; - termVector=true; - } - if ( x & TERMVECTOR_WITH_POSITIONS ){ - newConfig |= TERMVECTOR_WITH_POSITIONS; - termVector=true; - } - if ( termVector ){ - if ( newConfig & INDEX_NO ) - _CLTHROWA(CL_ERR_IllegalArgument,"cannot store a term vector for fields that are not indexed."); - - newConfig |= TERMVECTOR_YES; - }else - newConfig |= TERMVECTOR_NO; - }else - newConfig |= TERMVECTOR_NO; - - config = newConfig; -} - -TCHAR* Field::toString() { - CL_NS(util)::StringBuffer result; - if (isStored()) { - result.append( _T("stored") ); - } - if (isIndexed()) { - if (result.length() > 0) - result.append( _T(",") ); - result.append( _T("indexed") ); - } - if (isTokenized()) { - if (result.length() > 0) - result.append( _T(",") ); - result.append( _T("tokenized") ); - } - if (isTermVectorStored()) { - if (result.length() > 0) - result.append( _T(",") ); - result.append( _T("termVector") ); - } - if (isStoreOffsetWithTermVector()) { - if (result.length() > 0) - result.appendChar( ',' ); - result.append( _T("termVectorOffsets") ); - } - if (isStorePositionWithTermVector()) { - if (result.length() > 0) - result.appendChar( ',' ); - result.append( _T("termVectorPosition") ); - } - if (isBinary()) { - if (result.length() > 0) - result.appendChar( ',' ); - result.append( _T("binary") ); - } - if (getOmitNorms()) { - result.append( _T(",omitNorms") ); - } - result.appendChar('<'); - result.append(name()); - result.appendChar(':'); - - if (_stringValue != NULL) - result.append(_stringValue); - else if ( _readerValue != NULL ) - result.append( _T("Reader") ); - else if ( _streamValue != NULL ) - result.append( _T("Stream") ); - else - result.append( _T("NULL") ); - - result.appendChar('>'); - return result.toString(); -} - - -Field* Field::Keyword(const TCHAR* Name, const TCHAR* Value) { - return _CLNEW Field(Name,Value,Field::STORE_YES | Field::INDEX_UNTOKENIZED); -} - -Field* Field::UnIndexed(const TCHAR* Name, const TCHAR* Value) { - return _CLNEW Field(Name,Value,Field::STORE_YES | Field::INDEX_NO); -} - -Field* Field::Text(const TCHAR* Name, const TCHAR* Value, const bool storeTermVector) { - if ( storeTermVector ) - return _CLNEW Field(Name,Value,Field::STORE_YES | Field::INDEX_TOKENIZED | Field::TERMVECTOR_YES); - else - return _CLNEW Field(Name,Value,Field::STORE_YES | Field::INDEX_TOKENIZED); -} - -Field* Field::UnStored(const TCHAR* Name, const TCHAR* Value, const bool storeTermVector) { - if ( storeTermVector ) - return _CLNEW Field(Name,Value,Field::STORE_NO | Field::INDEX_TOKENIZED | Field::TERMVECTOR_YES); - else - return _CLNEW Field(Name,Value,Field::STORE_NO | Field::INDEX_TOKENIZED); -} - -Field* Field::Text(const TCHAR* Name, Reader* Value, const bool storeTermVector) { - if ( storeTermVector ) - return _CLNEW Field(Name,Value,Field::INDEX_TOKENIZED | Field::TERMVECTOR_YES); - else - return _CLNEW Field(Name,Value,Field::INDEX_TOKENIZED); -} - -CL_NS_END diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/document/Field.h qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/document/Field.h --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/document/Field.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/document/Field.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,261 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#ifndef _lucene_document_Field_ -#define _lucene_document_Field_ - -#if defined(_LUCENE_PRAGMA_ONCE) -# pragma once -#endif - -#include "CLucene/util/Reader.h" -#include "CLucene/util/streambase.h" - -CL_NS_DEF(document) -/** -A field is a section of a Document. Each field has two parts, a name and a -value. Values may be free text, provided as a String or as a Reader, or they -may be atomic keywords, which are not further processed. Such keywords may -be used to represent dates, urls, etc. Fields are optionally stored in the -index, so that they may be returned with hits on the document. - -PORTING: CLucene doesn't directly support compressed fields. However, it is easy -to reproduce this functionality by using the GZip streams in the contrib package. -Also note that binary fields are not read immediately in CLucene, a substream -is pointed directly to the field's data, in affect creating a lazy load ability. -This means that large fields are best saved in binary format (even if they are -text), so that they can be loaded lazily. -*/ -class Field :LUCENE_BASE{ -private: - const TCHAR* _name; - TCHAR* _stringValue; - CL_NS(util)::Reader* _readerValue; - jstreams::StreamBase* _streamValue; - - int config; - qreal boost; - bool omitNorms; -public: - enum Store{ - /** Store the original field value in the index. This is useful for short texts - * like a document's title which should be displayed with the results. The - * value is stored in its original form, i.e. no analyzer is used before it is - * stored. - */ - STORE_YES=1, - /** Do not store the field value in the index. */ - STORE_NO=2, - - /** Store the original field value in the index in a compressed form. This is - * useful for long documents and for binary valued fields. - * NOTE: CLucene does not directly support compressed fields, to store a - * compressed field. - * //TODO: need better documentation on how to add a compressed field - * //because actually we still need to write a GZipOutputStream... - */ - STORE_COMPRESS=4 - }; - - enum Index{ - /** Do not index the field value. This field can thus not be searched, - * but one can still access its contents provided it is - * {@link Field::Store stored}. */ - INDEX_NO=16, - /** Index the field's value so it can be searched. An Analyzer will be used - * to tokenize and possibly further normalize the text before its - * terms will be stored in the index. This is useful for common text. - */ - INDEX_TOKENIZED=32, - /** Index the field's value without using an Analyzer, so it can be searched. - * As no analyzer is used the value will be stored as a single term. This is - * useful for unique Ids like product numbers. - */ - INDEX_UNTOKENIZED=64, - /** Index the field's value without an Analyzer, and disable - * the storing of norms. No norms means that index-time boosting - * and field length normalization will be disabled. The benefit is - * less memory usage as norms take up one byte per indexed field - * for every document in the index. - */ - INDEX_NONORMS=128 - }; - - enum TermVector{ - /** Do not store term vectors. */ - TERMVECTOR_NO=256, - /** Store the term vectors of each document. A term vector is a list - * of the document's terms and their number of occurences in that document. */ - TERMVECTOR_YES=512, - /** - * Store the term vector + token position information - * - * @see #YES - */ - TERMVECTOR_WITH_POSITIONS=1024, - /** - * Store the term vector + Token offset information - * - * @see #YES - */ - TERMVECTOR_WITH_OFFSETS=2048 - }; - - _CL_DEPRECATED( another overload ) Field(const TCHAR* name, const TCHAR* value, bool store, bool index, bool token, const bool storeTermVector=false); - _CL_DEPRECATED( another overload ) Field(const TCHAR* name, CL_NS(util)::Reader* reader, bool store, bool index, bool token, const bool storeTermVector=false); - - Field(const TCHAR* name, const TCHAR* value, int configs); - Field(const TCHAR* name, CL_NS(util)::Reader* reader, int configs); - Field(const TCHAR* name, jstreams::StreamBase* stream, int configs); - ~Field(); - - /** Constructs a String-valued Field that is not tokenized, but is indexed - * and stored. Useful for non-text fields, e.g. date or url. - * @deprecated Use new Field(name,value,Field::STORE_YES | Field::INDEX_UNTOKENIZED) - */ - _CL_DEPRECATED( new Field(*) ) static Field* Keyword(const TCHAR* name, const TCHAR* value); - - /** Constructs a String-valued Field that is not tokenized nor indexed, - * but is stored in the index, for return with hits. - * @deprecated Use new Field(name,value,Field::STORE_YES | Field::INDEX_NO) - */ - _CL_DEPRECATED( new Field(*) ) static Field* UnIndexed(const TCHAR* name, const TCHAR* value); - - /** Constructs a String-valued Field that is tokenized and indexed, - * and is stored in the index, for return with hits. Useful for short text - * fields, like "title" or "subject". - * @deprecated Use new Field(name,value,Field::STORE_YES | Field::INDEX_TOKENIZED) - */ - _CL_DEPRECATED( new Field(*) ) static Field* Text(const TCHAR* name, const TCHAR* value, const bool storeTermVector=false); - - /** Constructs a String-valued Field that is tokenized and indexed, - * but that is not stored in the index. - * @deprecated Use new Field(name,value,Field::STORE_NO | Field::INDEX_TOKENIZED) - */ - _CL_DEPRECATED( new Field(*) ) static Field* UnStored(const TCHAR* name, const TCHAR* value, const bool storeTermVector=false); - - /** Constructs a Reader-valued Field that is tokenized and indexed, but is - * *not* stored in the index verbatim. Useful for longer text fields, like - * "body". - * @deprecated Use new Field(name,value, Field::INDEX_TOKENIZED) - */ - _CL_DEPRECATED( new Field(*) ) static Field* Text(const TCHAR* name, CL_NS(util)::Reader* value, const bool storeTermVector=false); - - /** The name of the field (e.g., "date", "subject", "title", "body", etc.) - * as an interned string. */ - const TCHAR* name(); ///* streamValue(); - - // True iff the value of the field is to be stored in the index for return - // with search hits. It is an error for this to be true if a field is - // Reader-valued. - bool isStored(); - - // True iff the value of the field is to be indexed, so that it may be - // searched on. - bool isIndexed(); - - // True iff the value of the field should be tokenized as text prior to - // indexing. Un-tokenized fields are indexed as a single word and may not be - // Reader-valued. - bool isTokenized(); - - /** True if the value of the field is stored and compressed within the index - * NOTE: CLucene does not actually support compressed fields, Instead, a reader - * will be returned with a pointer to a SubIndexInputStream. A GZipInputStream - * and a UTF8 reader must be used to actually read the content. This flag - * will only be set if the index was created by another lucene implementation. - */ - bool isCompressed(); - - //Set configs using XOR. This resets all the settings - //For example, to use term vectors with positions and offsets do: - //object->setConfig(TERMVECTOR_WITH_POSITIONS | TERMVECTOR_WITH_OFFSETS); - void setConfig(int termVector); - - /** True iff the term or terms used to index this field are stored as a term - * vector, available from {@link IndexReader#getTermFreqVector(int32_t,TCHAR*)}. - * These methods do not provide access to the original content of the field, - * only to terms used to index it. If the original content must be - * preserved, use the stored attribute instead. - * - * @see IndexReader#getTermFreqVector(int32_t, String) - */ - bool isTermVectorStored(); - - /** - * True iff terms are stored as term vector together with their offsets - * (start and end positon in source text). - */ - bool isStoreOffsetWithTermVector(); - - /** - * True iff terms are stored as term vector together with their token positions. - */ - bool isStorePositionWithTermVector(); - - /** Returns the boost factor for hits for this field. - * - *

The default value is 1.0. - * - *

Note: this value is not stored directly with the document in the index. - * Documents returned from {@link IndexReader#document(int)} and - * {@link Hits#doc(int)} may thus not have the same value present as when - * this field was indexed. - * - * @see #setBoost(float) - */ - qreal getBoost(); - - /** Sets the boost factor hits on this field. This value will be - * multiplied into the score of all hits on this field of this document. - * - *

The boost is multiplied by {@link Document#getBoost()} of the document - * containing this field. If a document has multiple fields with the same - * name, all such values are multiplied together. This product is then - * multipled by the value {@link Similarity#lengthNorm(String,int)}, and - * rounded by {@link Similarity#encodeNorm(float)} before it is stored in the - * index. One should attempt to ensure that this product does not overflow - * the range of that encoding. - * - * @see Document#setBoost(float) - * @see Similarity#lengthNorm(String, int) - * @see Similarity#encodeNorm(float) - */ - void setBoost(qreal value); - - /** True iff the value of the filed is stored as binary */ - bool isBinary(); - - /** True if norms are omitted for this indexed field */ - bool getOmitNorms(); - - /** Expert: - * - * If set, omit normalization factors associated with this indexed field. - * This effectively disables indexing boosts and length normalization for this field. - */ - void setOmitNorms(bool omitNorms); - - // Prints a Field for human consumption. - TCHAR* toString(); -}; -CL_NS_END -#endif diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/index/CompoundFile.cpp qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/index/CompoundFile.cpp --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/index/CompoundFile.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/index/CompoundFile.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,380 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -* -* Changes are Copyright (C) 2015 The Qt Company Ltd. -------------------------------------------------------------------------------*/ -#include "CLucene/StdHeader.h" -#include "CompoundFile.h" -#include "CLucene/util/Misc.h" - -CL_NS_USE(store) -CL_NS_USE(util) -CL_NS_DEF(index) - -CompoundFileReader::CSIndexInput::CSIndexInput(CL_NS(store)::IndexInput* base, - const int64_t fileOffset, const int64_t length) -{ - this->base = base; - this->fileOffset = fileOffset; - this->_length = length; -} - -void CompoundFileReader::CSIndexInput::readInternal(uint8_t* b, const int32_t len) -{ - SCOPED_LOCK_MUTEX(base->THIS_LOCK) - - int64_t start = getFilePointer(); - if(start + len > _length) - _CLTHROWA(CL_ERR_IO, "read past EOF"); - base->seek(fileOffset + start); - base->readBytes(b, len); -} - -CompoundFileReader::CSIndexInput::~CSIndexInput() -{ -} - -IndexInput* CompoundFileReader::CSIndexInput::clone() const -{ - return _CLNEW CSIndexInput(*this); -} - -CompoundFileReader::CSIndexInput::CSIndexInput(const CSIndexInput& clone) - : BufferedIndexInput(clone) -{ - this->base = clone.base; //no need to clone this.. - this->fileOffset = clone.fileOffset; - this->_length = clone._length; -} - -void CompoundFileReader::CSIndexInput::close() -{ -} - -CompoundFileReader::CompoundFileReader(Directory* dir, const QString& name) - : entries(false, true) -{ - directory = dir; - fileName = name; - - bool success = false; - try { - stream = dir->openInput(name); - - // read the directory and init files - int32_t count = stream->readVInt(); - FileEntry* entry = NULL; - TCHAR tid[CL_MAX_PATH]; - for (int32_t i = 0; i < count; i++) { - int64_t offset = stream->readLong(); - int32_t read = stream->readString(tid, CL_MAX_PATH); - QString aid(QString::fromWCharArray(tid, read)); - - // set length of the previous entry - if (entry != NULL) - entry->length = offset - entry->offset; - - entry = _CLNEW FileEntry(offset); - entries.put(aid, entry); - } - - // set the length of the final entry - if (entry != NULL) - entry->length = stream->length() - entry->offset; - success = true; - } _CLFINALLY ( - if (!success && (stream != NULL)) { - try { - stream->close(); - _CLDELETE(stream); - } catch (CLuceneError& err) { - if (err.number() != CL_ERR_IO) - throw err; - } - } - ) -} - -CompoundFileReader::~CompoundFileReader() -{ - close(); -} - -Directory* CompoundFileReader::getDirectory() -{ - return directory; -} - -QString CompoundFileReader::getName() const -{ - return fileName; -} - -void CompoundFileReader::close() -{ - SCOPED_LOCK_MUTEX(THIS_LOCK) - - if (stream != NULL) { - entries.clear(); - stream->close(); - _CLDELETE(stream); - } -} - -IndexInput* CompoundFileReader::openInput(const QString& id) -{ - SCOPED_LOCK_MUTEX(THIS_LOCK) - - if (stream == NULL) - _CLTHROWA(CL_ERR_IO, "Stream closed"); - - const FileEntry* entry = entries.get(id); - if (entry == NULL) { - char buf[CL_MAX_PATH + 30]; - strcpy(buf,"No sub-file with id "); - strncat(buf, id.toLocal8Bit().constData(), CL_MAX_PATH); - strcat(buf, " found"); - _CLTHROWA(CL_ERR_IO,buf); - } - return _CLNEW CSIndexInput(stream, entry->offset, entry->length); -} - -QStringList CompoundFileReader::list() const -{ - // for (EntriesType::const_iterator i=entries.begin();i!=entries.end();i++){ - // names->push_back(i->first); - // ++i; - // } - - QStringList names; - EntriesType::const_iterator itr; - // TODO: verify this, see old code above ??? - for (itr = entries.begin(); itr != entries.end(); ++itr) - names.push_back(itr->first); - - return names; -} - -bool CompoundFileReader::fileExists(const QString& name) const -{ - return entries.exists(name); -} - -int64_t CompoundFileReader::fileModified(const QString& name) const -{ - return directory->fileModified(fileName); -} - -void CompoundFileReader::touchFile(const QString& name) -{ - directory->touchFile(fileName); -} - -bool CompoundFileReader::doDeleteFile(const QString& name) -{ - _CLTHROWA(CL_ERR_UnsupportedOperation, - "UnsupportedOperationException: CompoundFileReader::doDeleteFile"); -} - -void CompoundFileReader::renameFile(const QString& from, const QString& to) -{ - _CLTHROWA(CL_ERR_UnsupportedOperation, - "UnsupportedOperationException: CompoundFileReader::renameFile"); -} - -int64_t CompoundFileReader::fileLength(const QString& name) const -{ - FileEntry* e = entries.get(name); - if (e == NULL) { - char buf[CL_MAX_PATH + 30]; - strcpy(buf,"File "); - strncat(buf, name.toLocal8Bit().constData(), CL_MAX_PATH); - strcat(buf," does not exist"); - _CLTHROWA(CL_ERR_IO,buf); - } - return e->length; -} - -IndexOutput* CompoundFileReader::createOutput(const QString& name) -{ - _CLTHROWA(CL_ERR_UnsupportedOperation, - "UnsupportedOperationException: CompoundFileReader::createOutput"); -} - -LuceneLock* CompoundFileReader::makeLock(const QString& name) -{ - _CLTHROWA(CL_ERR_UnsupportedOperation, - "UnsupportedOperationException: CompoundFileReader::makeLock"); -} - -QString CompoundFileReader::toString() const -{ - QString ret(QLatin1String("CompoundFileReader@")); - return ret.append(fileName); -} - -CompoundFileWriter::CompoundFileWriter(Directory* dir, const QString& name) - : ids(false) - , entries(true) -{ - if (dir == NULL) - _CLTHROWA(CL_ERR_NullPointer, "directory cannot be null"); - - if (name.isEmpty()) - _CLTHROWA(CL_ERR_NullPointer, "name cannot be null"); - - merged = false; - directory = dir; - fileName = name; -} - -CompoundFileWriter::~CompoundFileWriter() -{ -} - -Directory* CompoundFileWriter::getDirectory() -{ - return directory; -} - -/** Returns the name of the compound file. */ -QString CompoundFileWriter::getName() const -{ - return fileName; -} - -void CompoundFileWriter::addFile(const QString& file) -{ - if (merged) - _CLTHROWA(CL_ERR_IO, "Can't add extensions after merge has been called"); - - if (file.isEmpty()) - _CLTHROWA(CL_ERR_NullPointer, "file cannot be null"); - - if (ids.find(file) != ids.end()) { - char buf[CL_MAX_PATH + 30]; - strcpy(buf, "File "); - strncat(buf, file.toLocal8Bit().constData(), CL_MAX_PATH); - strcat(buf," already added"); - _CLTHROWA(CL_ERR_IO,buf); - } - ids.insert(file); - entries.push_back(_CLNEW WriterFileEntry(file)); -} - -void CompoundFileWriter::close() -{ - if (merged) - _CLTHROWA(CL_ERR_IO, "Merge already performed"); - - if (entries.size() == 0) // isEmpty() - _CLTHROWA(CL_ERR_IO, "No entries to merge have been defined"); - - merged = true; - - // open the compound stream - IndexOutput* os = NULL; - try { - os = directory->createOutput(fileName); - - // Write the number of entries - os->writeVInt(entries.size()); - - // Write the directory with all offsets at 0. - // Remember the positions of directory entries so that we can - // adjust the offsets later - { //msvc6 for scope fix - TCHAR tfile[CL_MAX_PATH]; - for (CLLinkedList::iterator i = entries.begin(); - i != entries.end(); i++) { - WriterFileEntry* fe = *i; - fe->directoryOffset = os->getFilePointer(); - os->writeLong(0); // for now - tfile[fe->file.toWCharArray(tfile)] = '\0'; - os->writeString(tfile, _tcslen(tfile)); - } - } - - // Open the files and copy their data into the stream. - // Remember the locations of each file's data section. - { //msvc6 for scope fix - int32_t bufferLength = 1024; - uint8_t buffer[1024]; - for (CLLinkedList::iterator i = entries.begin(); - i != entries.end(); i++) { - WriterFileEntry* fe = *i; - fe->dataOffset = os->getFilePointer(); - copyFile(fe, os, buffer, bufferLength); - } - } - - { //msvc6 for scope fix - // Write the data offsets into the directory of the compound stream - for (CLLinkedList::iterator i = entries.begin(); - i != entries.end(); i++) { - WriterFileEntry* fe = *i; - os->seek(fe->directoryOffset); - os->writeLong(fe->dataOffset); - } - } - - - } _CLFINALLY ( - if (os != NULL) { - try { - os->close(); - _CLDELETE(os); - } catch (...) { } - } - ); -} - -void CompoundFileWriter::copyFile(WriterFileEntry* source, IndexOutput* os, - uint8_t* buffer, int32_t bufferLength) -{ - IndexInput* is = NULL; - try { - int64_t startPtr = os->getFilePointer(); - - is = directory->openInput(source->file); - int64_t length = is->length(); - int64_t remainder = length; - int32_t chunk = bufferLength; - - while(remainder > 0) { - int32_t len = (int32_t)min((int64_t)chunk, remainder); - is->readBytes(buffer, len); - os->writeBytes(buffer, len); - remainder -= len; - } - - // Verify that remainder is 0 - if (remainder != 0) { - TCHAR buf[CL_MAX_PATH+100]; - _sntprintf(buf, CL_MAX_PATH + 100, _T("Non-zero remainder length ") - _T("after copying: %d (id: %s, length: %d, buffer size: %d)"), - remainder, source->file.toLocal8Bit().constData(), length, chunk); - _CLTHROWT(CL_ERR_IO, buf); - } - - // Verify that the output length diff is equal to original file - int64_t endPtr = os->getFilePointer(); - int64_t diff = endPtr - startPtr; - if (diff != length) { - TCHAR buf[100]; - _sntprintf(buf, 100, _T("Difference in the output file offsets %d ") - _T("does not match the original file length %d"), diff, length); - _CLTHROWT(CL_ERR_IO,buf); - } - } _CLFINALLY ( - if (is != NULL) { - is->close(); - _CLDELETE(is); - } - ); -} - -CL_NS_END diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/index/CompoundFile.h qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/index/CompoundFile.h --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/index/CompoundFile.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/index/CompoundFile.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,219 +0,0 @@ -/* - * Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team - * - * Distributable under the terms of either the Apache License (Version 2.0) or - * the GNU Lesser General Public License, as specified in the COPYING file. - * - * Changes are Copyright (C) 2015 The Qt Company Ltd. -*/ -#ifndef _lucene_index_compoundfile_h -#define _lucene_index_compoundfile_h - -#if defined(_LUCENE_PRAGMA_ONCE) -# pragma once -#endif - -#include -#include - -#include "CLucene/store/IndexInput.h" -#include "CLucene/store/IndexOutput.h" -#include "CLucene/store/Directory.h" -#include "CLucene/store/Lock.h" -#include "CLucene/util/VoidList.h" -#include "CLucene/util/VoidMap.h" - -CL_NS_DEF(index) - -// Class for accessing a compound stream. -// This class implements a directory, but is limited to only read operations. -// Directory methods that would normally modify data throw an exception. -class CompoundFileReader : public CL_NS(store)::Directory -{ -private: - /** Implementation of an IndexInput that reads from a portion of the - * compound file. The visibility is left as "package" *only* because - * this helps with testing since JUnit test cases in a different class - * can then access package fields of this class. - */ - class CSIndexInput : public CL_NS(store)::BufferedIndexInput - { - private: - CL_NS(store)::IndexInput* base; - int64_t fileOffset; - int64_t _length; - protected: - /** Expert: implements buffer refill. Reads uint8_ts from the current - * position in the input. - * @param b the array to read uint8_ts into - * @param length the number of uint8_ts to read - */ - void readInternal(uint8_t* b, const int32_t len); - void seekInternal(const int64_t pos) {} - - public: - CSIndexInput(CL_NS(store)::IndexInput* base, const int64_t fileOffset, - const int64_t length); - CSIndexInput(const CSIndexInput& clone); - ~CSIndexInput(); - - /** Closes the stream to futher operations. */ - void close(); - CL_NS(store)::IndexInput* clone() const; - - int64_t length() { return _length; } - - QString getDirectoryType() const { - return CompoundFileReader::DirectoryType(); } - }; - - class FileEntry : LUCENE_BASE - { - public: - FileEntry() - : offset(0), length(0) {} - FileEntry(int64_t _offset) - : offset(_offset), length(0) {} - ~FileEntry() {} - - int64_t offset; - int64_t length; - }; - - // Base info - CL_NS(store)::Directory* directory; - QString fileName; - - CL_NS(store)::IndexInput* stream; - - typedef CL_NS(util)::CLHashMap > EntriesType; - EntriesType entries; -protected: - // Removes an existing file in the directory-> - bool doDeleteFile(const QString& name); - -public: - CompoundFileReader(CL_NS(store)::Directory* dir, const QString& name); - ~CompoundFileReader(); - CL_NS(store)::Directory* getDirectory(); - QString getName() const; - - void close(); - CL_NS(store)::IndexInput* openInput(const QString& id); - - /** Returns an array of strings, one for each file in the directory-> */ - QStringList list() const; - /** Returns true iff a file with the given name exists. */ - bool fileExists(const QString& name) const; - /** Returns the time the named file was last modified. */ - int64_t fileModified(const QString& name) const; - /** Set the modified time of an existing file to now. */ - void touchFile(const QString& name); - /** Renames an existing file in the directory-> - If a file already exists with the new name, then it is replaced. - This replacement should be atomic. */ - void renameFile(const QString& from, const QString& to); - /** Returns the length of a file in the directory. - * @throws IOException if the file does not exist */ - int64_t fileLength(const QString& name) const; - /** Not implemented - * @throws UnsupportedOperationException */ - CL_NS(store)::IndexOutput* createOutput(const QString& name); - /** Not implemented - * @throws UnsupportedOperationException */ - CL_NS(store)::LuceneLock* makeLock(const QString& name); - - QString toString() const; - - static QString DirectoryType() { return QLatin1String("CFS"); } - QString getDirectoryType() const { return DirectoryType(); } -}; - - - -// Combines multiple files into a single compound file. -// The file format:
-//

    -//
  • VInt fileCount
  • -//
  • {Directory} -// fileCount entries with the following structure:
  • -//
      -//
    • int64_t dataOffset
    • -//
    • UTFString extension
    • -//
    -//
  • {File Data} -// fileCount entries with the raw data of the corresponding file
  • -//
-// The fileCount integer indicates how many files are contained in this compound -// file. The {directory} that follows has that many entries. Each directory entry -// contains an encoding identifier, an int64_t pointer to the start of this file's -// data section, and a UTF String with that file's extension. -class CompoundFileWriter : LUCENE_BASE -{ - class WriterFileEntry : LUCENE_BASE { - public: - WriterFileEntry() - : dataOffset(0), directoryOffset(0) {} - WriterFileEntry(const QString& _file) - : file(_file), dataOffset(0), directoryOffset(0) {} - ~WriterFileEntry() {} - - QString file; - // temporary holder for the start of this file's data section - int64_t dataOffset; - // temporary holder for the start of directory entry for this file - int64_t directoryOffset; - }; - - bool merged; - QString fileName; - CL_NS(store)::Directory* directory; - - CL_NS(util)::CLHashSet ids; - - CL_NS(util)::CLLinkedList > entries; - - // Copy the contents of the file with specified extension into the - // provided output stream. Use the provided buffer for moving data - // to reduce memory allocation. - void copyFile(WriterFileEntry* source, CL_NS(store)::IndexOutput* os, - uint8_t* buffer, int32_t bufferLength); - -public: - // Create the compound stream in the specified file. The file name is the - // entire name (no extensions are added). - CompoundFileWriter(CL_NS(store)::Directory* dir, const QString& name); - ~CompoundFileWriter(); - - // Returns the directory of the compound file. - CL_NS(store)::Directory* getDirectory(); - - QString getName() const ; - /* Add a source stream. file is the string by which the - * sub-stream will be known in the compound stream. - * - * @throws IllegalStateException if this writer is closed - * @throws NullPointerException if file is null - * @throws IllegalArgumentException if a file with the same name - * has been added already - */ - void addFile(const QString& file); - /* Merge files with the extensions added up to now. - * All files with these extensions are combined sequentially into the - * compound stream. After successful merge, the source files - * @throws IllegalStateException if close() had been called before or - * if no file has been added to this object - * are deleted. - */ - void close(); -}; - -CL_NS_END - -#endif diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/index/DocumentWriter.cpp qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/index/DocumentWriter.cpp --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/index/DocumentWriter.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/index/DocumentWriter.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,571 +0,0 @@ -/* - * Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team - * - * Distributable under the terms of either the Apache License (Version 2.0) or - * the GNU Lesser General Public License, as specified in the COPYING file. - * - * Changes are Copyright (C) 2015 The Qt Company Ltd. -*/ -#include "CLucene/StdHeader.h" - -#include "DocumentWriter.h" -#include "FieldInfos.h" -#include "IndexWriter.h" -#include "FieldsWriter.h" -#include "Term.h" -#include "TermInfo.h" -#include "TermInfosWriter.h" - -#include "CLucene/analysis/AnalysisHeader.h" - -#include "CLucene/search/Similarity.h" -#include "TermInfosWriter.h" -#include "FieldsWriter.h" - -CL_NS_USE(util) -CL_NS_USE(store) -CL_NS_USE(analysis) -CL_NS_USE(document) -CL_NS_DEF(index) - -/*Posting*/ - -DocumentWriter::Posting::Posting(Term* t, const int32_t position, - TermVectorOffsetInfo* offset) -{ - //Func - Constructor - //Pre - t contains a valid reference to a Term - //Post - Instance has been created - freq = 1; - - term = _CL_POINTER(t); - positions.values = (int32_t*)malloc(sizeof(int32_t)); - positions.values[0] = position; - positions.length = 1; - - if ( offset != NULL ){ - this->offsets.values =(TermVectorOffsetInfo*)malloc(sizeof(TermVectorOffsetInfo)); - this->offsets.values[0] = *offset; - this->offsets.length = 1; - } -} - -DocumentWriter::Posting::~Posting() -{ - //Func - Destructor - //Pre - true - //Post - The instance has been destroyed - - free(positions.values); - if ( this->offsets.values != NULL ) - free(this->offsets.values); - _CLDECDELETE(term); -} - -DocumentWriter::DocumentWriter(Directory* d, Analyzer* a, - CL_NS(search)::Similarity* sim, const int32_t mfl) - : analyzer(a) - , directory(d) - , maxFieldLength(mfl) - , fieldInfos(NULL) - , fieldLengths(NULL) - , similarity(sim) - , termIndexInterval(IndexWriter::DEFAULT_TERM_INDEX_INTERVAL) - , fieldPositions(NULL) - , fieldBoosts(NULL) - , termBuffer(_CLNEW Term) -{ - //Pre - d contains a valid reference to a Directory - // d contains a valid reference to a Analyzer - // mfl > 0 and contains the maximum field length - //Post - Instance has been created - - CND_PRECONDITION(((mfl > 0) || (mfl == IndexWriter::FIELD_TRUNC_POLICY__WARN)), - "mfl is 0 or smaller than IndexWriter::FIELD_TRUNC_POLICY__WARN") - - fieldInfos = NULL; - fieldLengths = NULL; -} - -DocumentWriter::DocumentWriter(CL_NS(store)::Directory* d, - CL_NS(analysis)::Analyzer* a, IndexWriter* writer) - : analyzer(a) - , directory(d) - , maxFieldLength(writer->getMaxFieldLength()) - , fieldInfos(NULL) - , fieldLengths(NULL) - , similarity(writer->getSimilarity()) - , termIndexInterval(writer->getTermIndexInterval()) - , fieldPositions(NULL) - , fieldBoosts(NULL) - , termBuffer(_CLNEW Term) -{ - //Pre - d contains a valid reference to a Directory - // d contains a valid reference to a Analyzer - // mfl > 0 and contains the maximum field length - //Post - Instance has been created - - CND_PRECONDITION(((maxFieldLength > 0) - || (maxFieldLength == IndexWriter::FIELD_TRUNC_POLICY__WARN)), - "mfl is 0 or smaller than IndexWriter::FIELD_TRUNC_POLICY__WARN") - - fieldInfos = NULL; - fieldLengths = NULL; - -} - -DocumentWriter::~DocumentWriter() -{ - //Func - Destructor - //Pre - true - //Post - The instance has been destroyed - clearPostingTable(); - _CLDELETE( fieldInfos ); - _CLDELETE_ARRAY(fieldLengths); - _CLDELETE_ARRAY(fieldPositions); - _CLDELETE_ARRAY(fieldBoosts); - _CLDELETE_ARRAY(fieldOffsets); - - _CLDECDELETE(termBuffer); -} - -void DocumentWriter::clearPostingTable() -{ - PostingTableType::iterator itr = postingTable.begin(); - while (itr != postingTable.end()){ - _CLDELETE(itr->second); - _CLLDECDELETE(itr->first); - ++itr; - } - postingTable.clear(); -} - -void DocumentWriter::addDocument(const QString& segment, Document* doc) -{ - CND_PRECONDITION(fieldInfos == NULL, "fieldInfos!=NULL") - - // write field names - fieldInfos = _CLNEW FieldInfos(); - fieldInfos->add(doc); - - QString buf = Misc::segmentname(segment, QLatin1String(".fnm")); - fieldInfos->write(directory, buf); - - // write field values - FieldsWriter fieldsWriter(directory, segment, fieldInfos); - try { - fieldsWriter.addDocument(doc); - } _CLFINALLY ( - fieldsWriter.close() - ); - - // clear postingTable - clearPostingTable(); - - int32_t fieldInfoSize = fieldInfos->size(); - fieldLengths = _CL_NEWARRAY(int32_t, fieldInfoSize); // init fieldLengths - fieldPositions = _CL_NEWARRAY(int32_t, fieldInfoSize); // init fieldPositions - fieldOffsets = _CL_NEWARRAY(int32_t, fieldInfoSize); // init fieldOffsets - fieldBoosts = _CL_NEWARRAY(qreal, fieldInfoSize); // init fieldBoosts - - qreal fbd = doc->getBoost(); - for (int32_t i = 0; i < fieldInfoSize; ++i) { - fieldLengths[i] = 0; - fieldPositions[i] = 0; - fieldOffsets[i] = 0; - //initialise fieldBoost array with default boost - fieldBoosts[i] = fbd; - } - - // invert doc into postingTable - invertDocument(doc); - - // sort postingTable into an array - Posting** postings = NULL; - int32_t postingsLength = 0; - sortPostingTable(postings, postingsLength); - - //DEBUG: - /*for (int32_t i = 0; i < postingsLength; i++) { - Posting* posting = postings[i]; - - TCHAR* b = posting->term->toString(); - _cout << b << " freq=" << posting->freq; - _CLDELETE(b); - - _cout << " pos=" << posting->positions[0]; - for (int32_t j = 1; j < posting->freq; j++) - _cout <<"," << posting->positions[j]; - - _cout << endl; - }*/ - - - // write postings - writePostings(postings, postingsLength, segment); - - // write norms of indexed fields - writeNorms(segment); - _CLDELETE_ARRAY(postings); -} - -void DocumentWriter::sortPostingTable(Posting**& array, int32_t& arraySize) -{ - // copy postingTable into an array - arraySize = postingTable.size(); - array = _CL_NEWARRAY(Posting*,arraySize); - PostingTableType::iterator postings = postingTable.begin(); - int32_t i=0; - while ( postings != postingTable.end() ){ - array[i] = (Posting*)postings->second; - postings++; - i++; - } - // sort the array - quickSort(array, 0, i - 1); -} - - -void DocumentWriter::invertDocument(const Document* doc) -{ - DocumentFieldEnumeration* fields = doc->fields(); - try { - while (fields->hasMoreElements()) { - Field* field = (Field*)fields->nextElement(); - const TCHAR* fieldName = field->name(); - const int32_t fieldNumber = fieldInfos->fieldNumber(fieldName); - - int32_t length = fieldLengths[fieldNumber]; // length of field - int32_t position = fieldPositions[fieldNumber]; // position in field - if (length>0) - position+=analyzer->getPositionIncrementGap(fieldName); - int32_t offset = fieldOffsets[fieldNumber]; // offset field - - if (field->isIndexed()) { - if (!field->isTokenized()) { // un-tokenized field - //FEATURE: this is bug in java: if using a Reader, then - //field value will not be added. With CLucene, an untokenized - //field with a reader will still be added (if it isn't stored, - //because if it's stored, then the reader has already been read. - const TCHAR* charBuf = NULL; - int64_t dataLen = 0; - - if (field->stringValue() == NULL && !field->isStored() ) { - CL_NS(util)::Reader* r = field->readerValue(); - // this call tries to read the entire stream - // this may invalidate the string for the further calls - // it may be better to do this via a FilterReader - // TODO make a better implementation of this - dataLen = r->read(charBuf, LUCENE_INT32_MAX_SHOULDBE); - if (dataLen == -1) - dataLen = 0; - //todo: would be better to pass the string length, in case - //a null char is passed, but then would need to test the output too. - } else { - charBuf = field->stringValue(); - dataLen = _tcslen(charBuf); - } - - if(field->isStoreOffsetWithTermVector()){ - TermVectorOffsetInfo tio; - tio.setStartOffset(offset); - tio.setEndOffset(offset + dataLen); - addPosition(fieldName, charBuf, position++, &tio ); - }else - addPosition(fieldName, charBuf, position++, NULL); - offset += dataLen; - length++; - } else { // field must be tokenized - CL_NS(util)::Reader* reader; // find or make Reader - bool delReader = false; - if (field->readerValue() != NULL) { - reader = field->readerValue(); - } else if (field->stringValue() != NULL) { - reader = _CLNEW CL_NS(util)::StringReader( - field->stringValue(),_tcslen(field->stringValue()), - false); - delReader = true; - } else { - _CLTHROWA(CL_ERR_IO,"field must have either String or Reader value"); - } - - try { - // Tokenize field and add to postingTable. - CL_NS(analysis)::TokenStream* stream = - analyzer->tokenStream(fieldName, reader); - - try { - CL_NS(analysis)::Token t; - int32_t lastTokenEndOffset = -1; - while (stream->next(&t)) { - position += (t.getPositionIncrement() - 1); - - if(field->isStoreOffsetWithTermVector()){ - TermVectorOffsetInfo tio; - tio.setStartOffset(offset + t.startOffset()); - tio.setEndOffset(offset + t.endOffset()); - addPosition(fieldName, t.termText(), position++, &tio); - } else - addPosition(fieldName, t.termText(), position++, NULL); - - lastTokenEndOffset = t.endOffset(); - length++; - // Apply field truncation policy. - if (maxFieldLength != IndexWriter::FIELD_TRUNC_POLICY__WARN) { - // The client programmer has explicitly authorized us to - // truncate the token stream after maxFieldLength tokens. - if ( length > maxFieldLength) - break; - } else if (length > IndexWriter::DEFAULT_MAX_FIELD_LENGTH) { - const TCHAR* errMsgBase = - _T("Indexing a huge number of tokens from a single") - _T(" field (\"%s\", in this case) can cause CLucene") - _T(" to use memory excessively.") - _T(" By default, CLucene will accept only %s tokens") - _T(" tokens from a single field before forcing the") - _T(" client programmer to specify a threshold at") - _T(" which to truncate the token stream.") - _T(" You should set this threshold via") - _T(" IndexReader::maxFieldLength (set to LUCENE_INT32_MAX") - _T(" to disable truncation, or a value to specify maximum number of fields)."); - - TCHAR defaultMaxAsChar[34]; - _i64tot(IndexWriter::DEFAULT_MAX_FIELD_LENGTH, - defaultMaxAsChar, 10 - ); - int32_t errMsgLen = _tcslen(errMsgBase) - + _tcslen(fieldName) - + _tcslen(defaultMaxAsChar); - TCHAR* errMsg = _CL_NEWARRAY(TCHAR,errMsgLen+1); - - _sntprintf(errMsg, errMsgLen,errMsgBase, fieldName, defaultMaxAsChar); - - _CLTHROWT_DEL(CL_ERR_Runtime,errMsg); - } - } // while token->next - - if(lastTokenEndOffset != -1 ) - offset += lastTokenEndOffset + 1; - } _CLFINALLY ( - stream->close(); - _CLDELETE(stream); - ); - } _CLFINALLY ( - if (delReader) { - _CLDELETE(reader); - } - ); - } // if/else field is to be tokenized - fieldLengths[fieldNumber] = length; // save field length - fieldPositions[fieldNumber] = position; // save field position - fieldBoosts[fieldNumber] *= field->getBoost(); - fieldOffsets[fieldNumber] = offset; - } // if field is to beindexed - } // while more fields available - } _CLFINALLY ( - _CLDELETE(fields); - ); -} - -void DocumentWriter::addPosition(const TCHAR* field, const TCHAR* text, - const int32_t position, TermVectorOffsetInfo* offset) -{ - termBuffer->set(field,text,false); - - Posting* ti = postingTable.get(termBuffer); - if (ti != NULL) { // word seen before - int32_t freq = ti->freq; - if (ti->positions.length == freq) { - // positions array is full, realloc its size - ti->positions.length = freq*2; - ti->positions.values = (int32_t*)realloc(ti->positions.values, ti->positions.length * sizeof(int32_t)); - } - ti->positions.values[freq] = position; // add new position - - if (offset != NULL) { - if (ti->offsets.length == freq){ - ti->offsets.length = freq*2; - ti->offsets.values = (TermVectorOffsetInfo*)realloc(ti->offsets.values, ti->offsets.length * sizeof(TermVectorOffsetInfo)); - } - ti->offsets[freq] = *offset; - } - - ti->freq = freq + 1; // update frequency - } else { // word not seen before - Term* term = _CLNEW Term( field, text, false); - postingTable.put(term, _CLNEW Posting(term, position, offset)); - } -} - -//static -void DocumentWriter::quickSort(Posting**& postings, const int32_t lo, const int32_t hi) -{ - if(lo >= hi) - return; - - int32_t mid = (lo + hi) / 2; - - if(postings[lo]->term->compareTo(postings[mid]->term) > 0) { - Posting* tmp = postings[lo]; - postings[lo] = postings[mid]; - postings[mid] = tmp; - } - - if(postings[mid]->term->compareTo(postings[hi]->term) > 0) { - Posting* tmp = postings[mid]; - postings[mid] = postings[hi]; - postings[hi] = tmp; - - if(postings[lo]->term->compareTo(postings[mid]->term) > 0) { - Posting* tmp2 = postings[lo]; - postings[lo] = postings[mid]; - postings[mid] = tmp2; - } - } - - int32_t left = lo + 1; - int32_t right = hi - 1; - - if (left >= right) - return; - - const Term* partition = postings[mid]->term; //not kept, so no need to finalize - - for( ;; ) { - while(postings[right]->term->compareTo(partition) > 0) - --right; - - while(left < right && postings[left]->term->compareTo(partition) <= 0) - ++left; - - if(left < right) { - Posting* tmp = postings[left]; - postings[left] = postings[right]; - postings[right] = tmp; - --right; - } else { - break; - } - } - - quickSort(postings, lo, left); - quickSort(postings, left + 1, hi); -} - -void DocumentWriter::writePostings(Posting** postings, - const int32_t postingsLength, const QString& segment) -{ - #define __DOCLOSE(obj) \ - if (obj!=NULL) { \ - try { \ - obj->close(); \ - _CLDELETE(obj); \ - } catch(CLuceneError &e) { \ - ierr = e.number(); \ - err = e.what(); \ - } catch(...) { \ - err = "Unknown error while closing posting tables"; \ - } \ - } - - IndexOutput* freq = NULL; - IndexOutput* prox = NULL; - TermInfosWriter* tis = NULL; - TermVectorsWriter* termVectorWriter = NULL; - try { - //open files for inverse index storage - QString buf = Misc::segmentname(segment, QLatin1String(".frq")); - freq = directory->createOutput(buf); - - buf = Misc::segmentname(segment, QLatin1String(".prx")); - prox = directory->createOutput(buf); - - tis = _CLNEW TermInfosWriter(directory, segment, fieldInfos, - termIndexInterval); - TermInfo* ti = _CLNEW TermInfo(); - const TCHAR* currentField = NULL; - for (int32_t i = 0; i < postingsLength; i++) { - Posting* posting = postings[i]; - - // add an entry to the dictionary with pointers to prox and freq files - ti->set(1, freq->getFilePointer(), prox->getFilePointer(), -1); - tis->add(posting->term, ti); - - // add an entry to the freq file - int32_t postingFreq = posting->freq; - if (postingFreq == 1) // optimize freq=1 - freq->writeVInt(1); // set low bit of doc num. - else { - freq->writeVInt(0); // the document number - freq->writeVInt(postingFreq); // frequency in doc - } - - int32_t lastPosition = 0; // write positions - for (int32_t j = 0; j < postingFreq; ++j) { // use delta-encoding - prox->writeVInt(posting->positions.values[j] - lastPosition); - lastPosition = posting->positions.values[j]; - } - - // check to see if we switched to a new field - const TCHAR* termField = posting->term->field(); - if ( currentField == NULL || _tcscmp(currentField,termField) != 0 ) { - //todo, can we do an intern'd check? - // changing field - see if there is something to save - currentField = termField; - FieldInfo* fi = fieldInfos->fieldInfo(currentField); - - if (fi->storeTermVector) { - if (termVectorWriter == NULL) { - termVectorWriter = _CLNEW TermVectorsWriter(directory, - segment, fieldInfos); - termVectorWriter->openDocument(); - } - termVectorWriter->openField(currentField); - } else if (termVectorWriter != NULL) { - termVectorWriter->closeField(); - } - } - if (termVectorWriter != NULL && termVectorWriter->isFieldOpen()) { - termVectorWriter->addTerm(posting->term->text(), postingFreq, - &posting->positions, &posting->offsets); - } - } - if (termVectorWriter != NULL) - termVectorWriter->closeDocument(); - _CLDELETE(ti); - } _CLFINALLY ( - const char* err = NULL; - int32_t ierr = 0; - - // make an effort to close all streams we can but remember and re-throw - // the first exception encountered in this process - __DOCLOSE(freq); - __DOCLOSE(prox); - __DOCLOSE(tis); - __DOCLOSE(termVectorWriter); - if (err != NULL) - _CLTHROWA(ierr,err); - ); -} - -void DocumentWriter::writeNorms(const QString& segment) -{ - for(int32_t n = 0; n < fieldInfos->size(); n++){ - FieldInfo* fi = fieldInfos->fieldInfo(n); - if(fi->isIndexed && !fi->omitNorms) { - qreal norm = fieldBoosts[n] * similarity->lengthNorm( - fi->name, fieldLengths[n]); - - QString fn(segment + QLatin1String(".f%1")); - IndexOutput* norms = directory->createOutput(fn.arg(n)); - try { - norms->writeByte(CL_NS(search)::Similarity::encodeNorm(norm)); - }_CLFINALLY ( - norms->close(); - _CLDELETE(norms); - ) - } - } -} - -CL_NS_END diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/index/DocumentWriter.h qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/index/DocumentWriter.h --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/index/DocumentWriter.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/index/DocumentWriter.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,107 +0,0 @@ -/* - * Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team - * - * Distributable under the terms of either the Apache License (Version 2.0) or - * the GNU Lesser General Public License, as specified in the COPYING file. - * - * Changes are Copyright (C) 2015 The Qt Company Ltd. -*/ -#ifndef _lucene_index_DocumentWriter_ -#define _lucene_index_DocumentWriter_ - -#if defined(_LUCENE_PRAGMA_ONCE) -# pragma once -#endif - -#include - -#include "CLucene/analysis/AnalysisHeader.h" -#include "CLucene/document/Document.h" -#include "CLucene/store/Directory.h" -#include "FieldInfos.h" -#include "IndexWriter.h" -#include "CLucene/util/VoidMap.h" -#include "CLucene/document/Field.h" -#include "TermInfo.h" -#include "CLucene/search/Similarity.h" -#include "TermInfosWriter.h" -#include "FieldsWriter.h" -#include "Term.h" - -CL_NS_DEF(index) - -class DocumentWriter : LUCENE_BASE -{ -public: - // info about a Term in a doc - class Posting : LUCENE_BASE - { - public: - Term* term; // the Term - int32_t freq; // its frequency in doc - Array positions; // positions it occurs at - Array offsets; - - Posting(Term* t, const int32_t position, TermVectorOffsetInfo* offset); - ~Posting(); - }; - -private: - CL_NS(analysis)::Analyzer* analyzer; - CL_NS(store)::Directory* directory; - FieldInfos* fieldInfos; //array - const int32_t maxFieldLength; - CL_NS(search)::Similarity* similarity; - int32_t termIndexInterval; - - // Keys are Terms, values are Postings. - // Used to buffer a document before it is written to the index. - typedef CL_NS(util)::CLHashtable PostingTableType; - PostingTableType postingTable; - int32_t* fieldLengths; //array - int32_t* fieldPositions; //array - int32_t* fieldOffsets; //array - qreal* fieldBoosts; //array - - Term* termBuffer; -public: - /** This ctor used by test code only. - * - * @param directory The directory to write the document information to - * @param analyzer The analyzer to use for the document - * @param similarity The Similarity function - * @param maxFieldLength The maximum number of tokens a field may have - */ - DocumentWriter(CL_NS(store)::Directory* d, CL_NS(analysis)::Analyzer* a, - CL_NS(search)::Similarity* similarity, const int32_t maxFieldLength); - - DocumentWriter(CL_NS(store)::Directory* directory, - CL_NS(analysis)::Analyzer* analyzer, IndexWriter* writer); - ~DocumentWriter(); - - void addDocument(const QString& segment, CL_NS(document)::Document* doc); - - -private: - // Tokenizes the fields of a document into Postings. - void invertDocument(const CL_NS(document)::Document* doc); - - void addPosition(const TCHAR* field, const TCHAR* text, - const int32_t position, TermVectorOffsetInfo* offset); - - void sortPostingTable(Posting**& array, int32_t& arraySize); - - static void quickSort(Posting**& postings, const int32_t lo, const int32_t hi); - - void writePostings(Posting** postings, const int32_t postingsLength, - const QString& segment); - - void writeNorms(const QString& segment); - - void clearPostingTable(); -}; - -CL_NS_END - -#endif diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/index/FieldInfo.h qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/index/FieldInfo.h --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/index/FieldInfo.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/index/FieldInfo.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,16 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#ifndef _lucene_index_FieldInfo_ -#define _lucene_index_FieldInfo_ - -#if defined(_LUCENE_PRAGMA_ONCE) -# pragma once -#endif - -#error "This header is deprecated, use FieldInfos.h instead" - -#endif diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/index/FieldInfos.cpp qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/index/FieldInfos.cpp --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/index/FieldInfos.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/index/FieldInfos.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,236 +0,0 @@ -/* - * Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team - * - * Distributable under the terms of either the Apache License (Version 2.0) or - * the GNU Lesser General Public License, as specified in the COPYING file. - * - * Changes are Copyright (C) 2015 The Qt Company Ltd. -*/ -#include "CLucene/StdHeader.h" -#include "FieldInfos.h" - -#include "CLucene/store/Directory.h" -#include "CLucene/document/Document.h" -#include "CLucene/document/Field.h" -#include "CLucene/util/VoidMap.h" -#include "CLucene/util/Misc.h" -#include "CLucene/util/StringIntern.h" - -CL_NS_USE(store) -CL_NS_USE(document) -CL_NS_USE(util) -CL_NS_DEF(index) - -FieldInfo::FieldInfo(const TCHAR* _fieldName, bool _isIndexed, - int32_t _fieldNumber, bool _storeTermVector, bool _storeOffsetWithTermVector, - bool _storePositionWithTermVector, bool _omitNorms) - : name(CLStringIntern::intern(_fieldName CL_FILELINE)) - , isIndexed(_isIndexed) - , number(_fieldNumber) - , storeTermVector(_storeTermVector) - , storeOffsetWithTermVector(_storeOffsetWithTermVector) - , storePositionWithTermVector(_storeTermVector) - , omitNorms(_omitNorms) -{ -} - -FieldInfo::~FieldInfo() -{ - CL_NS(util)::CLStringIntern::unintern(name); -} - -// #pragma mark -- FieldInfos - -FieldInfos::FieldInfos() - : byName(false, false) - , byNumber(true) -{ -} - -FieldInfos::~FieldInfos() -{ - byName.clear(); - byNumber.clear(); -} - -FieldInfos::FieldInfos(Directory* d, const QString& name) - : byName(false, false) - , byNumber(true) -{ - IndexInput* input = d->openInput(name); - try { - read(input); - } _CLFINALLY ( - input->close(); - _CLDELETE(input); - ); -} - -void FieldInfos::add(const Document* doc) -{ - DocumentFieldEnumeration* fields = doc->fields(); - Field* field; - while (fields->hasMoreElements()) { - field = fields->nextElement(); - add(field->name(), field->isIndexed(), field->isTermVectorStored()); - } - _CLDELETE(fields); -} - -void FieldInfos::add(const TCHAR* name, bool isIndexed, bool storeTermVector, - bool storePositionWithTermVector, bool storeOffsetWithTermVector, bool omitNorms) -{ - FieldInfo* fi = fieldInfo(name); - if (fi == NULL) { - addInternal(name, isIndexed, storeTermVector, - storePositionWithTermVector, - storeOffsetWithTermVector, omitNorms); - } else { - if (fi->isIndexed != isIndexed) { - // once indexed, always index - fi->isIndexed = true; - } - - if (fi->storeTermVector != storeTermVector) { - // once vector, always vector - fi->storeTermVector = true; - } - - if (fi->storePositionWithTermVector != storePositionWithTermVector) { - // once vector, always vector - fi->storePositionWithTermVector = true; - } - - if (fi->storeOffsetWithTermVector != storeOffsetWithTermVector) { - // once vector, always vector - fi->storeOffsetWithTermVector = true; - } - - if (fi->omitNorms != omitNorms) { - // once norms are stored, always store - fi->omitNorms = false; - } - } -} - -void FieldInfos::add(const TCHAR** names, bool isIndexed, bool storeTermVectors, - bool storePositionWithTermVector, bool storeOffsetWithTermVector, bool omitNorms) -{ - int32_t i=0; - while (names[i] != NULL) { - add(names[i], isIndexed, storeTermVectors, storePositionWithTermVector, - storeOffsetWithTermVector, omitNorms); - ++i; - } -} - -int32_t FieldInfos::fieldNumber(const TCHAR* fieldName) const -{ - FieldInfo* fi = fieldInfo(fieldName); - return (fi != NULL) ? fi->number : -1; -} - -FieldInfo* FieldInfos::fieldInfo(const TCHAR* fieldName) const -{ - return byName.get(fieldName); -} - -const TCHAR* FieldInfos::fieldName(const int32_t fieldNumber) const -{ - FieldInfo* fi = fieldInfo(fieldNumber); - return (fi == NULL) ? LUCENE_BLANK_STRING : fi->name; -} - -FieldInfo* FieldInfos::fieldInfo(const int32_t fieldNumber) const -{ - if (fieldNumber < 0 || (size_t)fieldNumber >= byNumber.size()) - return NULL; - return byNumber[fieldNumber]; -} - -int32_t FieldInfos::size() const -{ - return byNumber.size(); -} - -void FieldInfos::write(Directory* d, const QString& name) const -{ - IndexOutput* output = d->createOutput(name); - try { - write(output); - } _CLFINALLY ( - output->close(); - _CLDELETE(output); - ); -} - -void FieldInfos::write(IndexOutput* output) const -{ - output->writeVInt(size()); - FieldInfo* fi; - uint8_t bits; - for (int32_t i = 0; i < size(); ++i) { - fi = fieldInfo(i); - bits = 0x0; - if (fi->isIndexed) - bits |= IS_INDEXED; - - if (fi->storeTermVector) - bits |= STORE_TERMVECTOR; - - if (fi->storePositionWithTermVector) - bits |= STORE_POSITIONS_WITH_TERMVECTOR; - - if (fi->storeOffsetWithTermVector) - bits |= STORE_OFFSET_WITH_TERMVECTOR; - - if (fi->omitNorms) - bits |= OMIT_NORMS; - - output->writeString(fi->name, _tcslen(fi->name)); - output->writeByte(bits); - } -} - -void FieldInfos::read(IndexInput* input) -{ - int32_t size = input->readVInt(); - for (int32_t i = 0; i < size; ++i) { - // we could read name into a string buffer, but we can't be sure what - // the maximum field length will be. - TCHAR* name = input->readString(); - uint8_t bits = input->readByte(); - bool isIndexed = (bits & IS_INDEXED) != 0; - bool storeTermVector = (bits & STORE_TERMVECTOR) != 0; - bool storePositionsWithTermVector = - (bits & STORE_POSITIONS_WITH_TERMVECTOR) != 0; - bool storeOffsetWithTermVector = (bits & STORE_OFFSET_WITH_TERMVECTOR) != 0; - bool omitNorms = (bits & OMIT_NORMS) != 0; - - addInternal(name, isIndexed, storeTermVector, - storePositionsWithTermVector, storeOffsetWithTermVector, omitNorms); - _CLDELETE_CARRAY(name); - } -} - -void FieldInfos::addInternal(const TCHAR* name, bool isIndexed, - bool storeTermVector, bool storePositionWithTermVector, - bool storeOffsetWithTermVector, bool omitNorms) -{ - FieldInfo* fi = _CLNEW FieldInfo(name, isIndexed, byNumber.size(), - storeTermVector, storePositionWithTermVector, storeOffsetWithTermVector, - omitNorms); - byNumber.push_back(fi); - byName.put(fi->name, fi); -} - -bool FieldInfos::hasVectors() const -{ - for (int32_t i = 0; i < size(); i++) { - if (fieldInfo(i)->storeTermVector) - return true; - } - return false; -} - -CL_NS_END diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/index/FieldInfos.h qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/index/FieldInfos.h --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/index/FieldInfos.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/index/FieldInfos.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,171 +0,0 @@ -/* - * Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team - * - * Distributable under the terms of either the Apache License (Version 2.0) or - * the GNU Lesser General Public License, as specified in the COPYING file. - * - * Changes are Copyright (C) 2015 The Qt Company Ltd. -*/ -#ifndef _lucene_index_FieldInfos_ -#define _lucene_index_FieldInfos_ - -#if defined(_LUCENE_PRAGMA_ONCE) -# pragma once -#endif - -#include - -#include "CLucene/store/Directory.h" -#include "CLucene/document/Document.h" -#include "CLucene/util/VoidMap.h" -#include "CLucene/util/VoidList.h" - -CL_NS_DEF(index) - -class FieldInfo : LUCENE_BASE -{ - public: - //name of the field - const TCHAR* name; - - //Is field indexed? true = yes false = no - bool isIndexed; - - //field number - const int32_t number; - - // true if term vector for this field should be stored - bool storeTermVector; - bool storeOffsetWithTermVector; - bool storePositionWithTermVector; - - bool omitNorms; // omit norms associated with indexed fields - - //Func - Constructor - // Initialises FieldInfo. - // na holds the name of the field - // tk indicates whether this field is indexed or not - // nu indicates its number - //Pre - na != NULL and holds the name of the field - // tk is true or false - // number >= 0 - //Post - The FieldInfo instance has been created and initialized. - // name holds the duplicated string of na - // isIndexed = tk - // number = nu - FieldInfo(const TCHAR* fieldName, bool isIndexed, int32_t fieldNumber, - bool storeTermVector, bool storeOffsetWithTermVector, - bool storePositionWithTermVector, bool omitNorms); - - //Func - Destructor - //Pre - true - //Post - The instance has been destroyed - ~FieldInfo(); -}; - -/* Access to the Field Info file that describes document fields and whether or - * not they are indexed. Each segment has a separate Field Info file. Objects - * of this class are thread-safe for multiple readers, but only one thread can - * be adding documents at a time, with no other reader or writer threads - * accessing this object. -*/ -class FieldInfos : LUCENE_BASE -{ -private: - // we now use internd field names, so we can use the voidCompare to - // directly compare the strings - typedef CL_NS(util)::CLHashMap defByName; - defByName byName; - - CL_NS(util)::CLArrayList > byNumber; - -public: - enum { - IS_INDEXED = 0x1, - STORE_TERMVECTOR = 0x2, - STORE_POSITIONS_WITH_TERMVECTOR = 0x4, - STORE_OFFSET_WITH_TERMVECTOR = 0x8, - OMIT_NORMS = 0x10 - }; - - FieldInfos(); - ~FieldInfos(); - - // Construct a FieldInfos object using the directory and the name of the - // file IndexInput - // @param d The directory to open the IndexInput from - // @param name Name of the file to open the IndexInput from in the Directory - // @throws IOException - // @see #read - FieldInfos(CL_NS(store)::Directory* d, const QString& name); - - int32_t fieldNumber(const TCHAR* fieldName)const; - - // Return the fieldinfo object referenced by the fieldNumber. - // @param fieldNumber - // @return the FieldInfo object or null when the given fieldNumber - // doesn't exist. - FieldInfo* fieldInfo(const TCHAR* fieldName) const; - - // Return the fieldName identified by its number. - // @param fieldNumber - // @return the fieldName or an empty string when the field - // with the given number doesn't exist. - const TCHAR* fieldName(const int32_t fieldNumber) const; - - FieldInfo* fieldInfo(const int32_t fieldNumber) const; - - int32_t size()const; - - bool hasVectors() const; - - // Adds field info for a Document. - void add(const CL_NS(document)::Document* doc); - - // Merges in information from another FieldInfos. - void add(FieldInfos* other); - - - /** If the field is not yet known, adds it. If it is known, checks to make - * sure that the isIndexed flag is the same as was given previously for this - * field. If not - marks it as being indexed. Same goes for the TermVector - * parameters. - * - * @param name The name of the field - * @param isIndexed true if the field is indexed - * @param storeTermVector true if the term vector should be stored - * @param storePositionWithTermVector true if the term vector with positions should be stored - * @param storeOffsetWithTermVector true if the term vector with offsets should be stored - */ - void add(const TCHAR* name, bool isIndexed, bool storeTermVector = false, - bool storePositionWithTermVector = false, - bool storeOffsetWithTermVector = false, bool omitNorms = false); - - /** - * Assumes the fields are not storing term vectors - * @param names The names of the fields - * @param isIndexed true if the field is indexed - * @param storeTermVector true if the term vector should be stored - * - * @see #add(String, boolean) - */ - void add(const TCHAR** names, bool isIndexed, bool storeTermVector = false, - bool storePositionWithTermVector = false, - bool storeOffsetWithTermVector = false, bool omitNorms = false); - - void write(CL_NS(store)::Directory* d, const QString& name) const; - void write(CL_NS(store)::IndexOutput* output) const; - -private: - void read(CL_NS(store)::IndexInput* input); - void addInternal(const TCHAR* name, bool isIndexed, bool storeTermVector, - bool storePositionWithTermVector, bool storeOffsetWithTermVector, - bool omitNorms); - -}; - -CL_NS_END - -#endif diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/index/FieldsReader.cpp qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/index/FieldsReader.cpp --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/index/FieldsReader.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/index/FieldsReader.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,231 +0,0 @@ -/* - * Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team - * - * Distributable under the terms of either the Apache License (Version 2.0) or - * the GNU Lesser General Public License, as specified in the COPYING file. - * - * Changes are Copyright (C) 2015 The Qt Company Ltd. -*/ -#include "CLucene/StdHeader.h" -#include "FieldsReader.h" - -#include "CLucene/util/VoidMap.h" -#include "CLucene/util/Misc.h" -#include "CLucene/store/Directory.h" -#include "CLucene/document/Document.h" -#include "CLucene/document/Field.h" -#include "FieldInfos.h" -#include "FieldsWriter.h" - -CL_NS_USE(store) -CL_NS_USE(document) -CL_NS_USE(util) -CL_NS_DEF(index) - -FieldsReader::FieldsReader(Directory* d, const QString& segment, FieldInfos* fn) - : fieldInfos(fn) -{ - //Func - Constructor - //Pre - d contains a valid reference to a Directory - // segment != NULL - // fn contains a valid reference to a FieldInfos - //Post - The instance has been created - - CND_PRECONDITION(!segment.isEmpty(), "segment != NULL"); - - QString buf = Misc::segmentname(segment, QLatin1String(".fdt")); - fieldsStream = d->openInput(buf); - - buf = Misc::segmentname(segment, QLatin1String(".fdx")); - indexStream = d->openInput(buf); - - _size = (int32_t)indexStream->length() / 8; -} - -FieldsReader::~FieldsReader() -{ - //Func - Destructor - //Pre - true - //Post - The instance has been destroyed - close(); -} - -void FieldsReader::close() -{ - //Func - Closes the FieldsReader - //Pre - true - //Post - The FieldsReader has been closed - if (fieldsStream) { - fieldsStream->close(); - _CLDELETE(fieldsStream); - } - - if(indexStream) { - indexStream->close(); - _CLDELETE(indexStream); - } -} - -int32_t FieldsReader::size() const -{ - return _size; -} - -bool FieldsReader::doc(int32_t n, Document* doc) -{ - if ( n * 8L > indexStream->length() ) - return false; - - indexStream->seek(n * 8L); - int64_t position = indexStream->readLong(); - fieldsStream->seek(position); - - int32_t numFields = fieldsStream->readVInt(); - for (int32_t i = 0; i < numFields; i++) { - int32_t fieldNumber = fieldsStream->readVInt(); - FieldInfo* fi = fieldInfos->fieldInfo(fieldNumber); - - if ( fi == NULL ) - _CLTHROWA(CL_ERR_IO, "Field stream is invalid"); - - uint8_t bits = fieldsStream->readByte(); - if ((bits & FieldsWriter::FIELD_IS_BINARY) != 0) { - int32_t fieldLen = fieldsStream->readVInt(); - FieldsReader::FieldsStreamHolder* subStream = new - FieldsReader::FieldsStreamHolder(fieldsStream, fieldLen); - uint8_t bits = Field::STORE_YES; - Field* f = _CLNEW Field( - fi->name, // name - subStream, // read value - bits); - - doc->add(*f); - - //now skip over the rest of the field - if (fieldsStream->getFilePointer() + fieldLen - == fieldsStream->length()) { - // set to eof - fieldsStream->seek(fieldsStream->getFilePointer() + fieldLen - 1); - fieldsStream->readByte(); - } else { - fieldsStream->seek(fieldsStream->getFilePointer() + fieldLen); - } - } else { - uint8_t bits = Field::STORE_YES; - if (fi->isIndexed && (bits & FieldsWriter::FIELD_IS_TOKENIZED)!=0 ) - bits |= Field::INDEX_TOKENIZED; - else if (fi->isIndexed && (bits & FieldsWriter::FIELD_IS_TOKENIZED) == 0) - bits |= Field::INDEX_UNTOKENIZED; - else - bits |= Field::INDEX_NO; - - if (fi->storeTermVector) { - if (fi->storeOffsetWithTermVector) { - if (fi->storePositionWithTermVector) { - bits |= Field::TERMVECTOR_WITH_OFFSETS; - bits |= Field::TERMVECTOR_WITH_POSITIONS; - } else { - bits |= Field::TERMVECTOR_WITH_OFFSETS; - } - } else if (fi->storePositionWithTermVector) { - bits |= Field::TERMVECTOR_WITH_POSITIONS; - } else { - bits |= Field::TERMVECTOR_YES; - } - } else { - bits |= Field::TERMVECTOR_NO; - } - - if ( (bits & FieldsWriter::FIELD_IS_COMPRESSED) != 0 ) { - bits |= Field::STORE_COMPRESS; - int32_t fieldLen = fieldsStream->readVInt(); - FieldsStreamHolder* subStream = new - FieldsStreamHolder(fieldsStream, fieldLen); - - // TODO: we dont have gzip inputstream available, must alert - // user to somehow use a gzip inputstream - Field* f = _CLNEW Field( - fi->name, // name - subStream, // read value - bits); - - f->setOmitNorms(fi->omitNorms); - doc->add(*f); - - // now skip over the rest of the field - if (fieldsStream->getFilePointer() + fieldLen - == fieldsStream->length()) { - //set to eof - fieldsStream->seek(fieldsStream->getFilePointer() + fieldLen - 1); - fieldsStream->readByte(); - } else { - fieldsStream->seek(fieldsStream->getFilePointer() + fieldLen); - } - } else { - TCHAR* fvalue = fieldsStream->readString(true); - Field* f = _CLNEW Field( - fi->name, // name - fvalue, // read value - bits); - // TODO: could optimise this - _CLDELETE_CARRAY(fvalue); - f->setOmitNorms(fi->omitNorms); - doc->add(*f); - } - } - } - return true; -} - -FieldsReader::FieldsStreamHolder::FieldsStreamHolder(IndexInput* indexInput, - int32_t subLength) -{ - this->indexInput = indexInput->clone(); - this->indexInputStream = new IndexInputStream(this->indexInput); - this->subStream = new jstreams::SubInputStream(indexInputStream, - subLength); - - this->size = subStream->getSize(); - this->position = subStream->getPosition(); - this->error = subStream->getError(); - this->status = subStream->getStatus(); -} - -FieldsReader::FieldsStreamHolder::~FieldsStreamHolder() -{ - delete subStream; - delete indexInputStream; - - indexInput->close(); - _CLDELETE(indexInput); -} - -int32_t FieldsReader::FieldsStreamHolder::read(const char*& start, int32_t _min, - int32_t _max) -{ - int32_t ret = subStream->read(start,_min,_max); - this->position = subStream->getPosition(); - this->error = subStream->getError(); - this->status = subStream->getStatus(); - return ret; -} - -int64_t FieldsReader::FieldsStreamHolder::skip(int64_t ntoskip) -{ - int64_t ret = subStream->skip(ntoskip); - this->position = subStream->getPosition(); - this->error = subStream->getError(); - this->status = subStream->getStatus(); - return ret; -} - -int64_t FieldsReader::FieldsStreamHolder::reset(int64_t pos) -{ - int64_t ret = subStream->reset(pos); - this->position = subStream->getPosition(); - this->error = subStream->getError(); - this->status = subStream->getStatus(); - return ret; -} - -CL_NS_END diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/index/FieldsReader.h qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/index/FieldsReader.h --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/index/FieldsReader.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/index/FieldsReader.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,60 +0,0 @@ -/* - * Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team - * - * Distributable under the terms of either the Apache License (Version 2.0) or - * the GNU Lesser General Public License, as specified in the COPYING file. - * - * Changes are Copyright (C) 2015 The Qt Company Ltd. -*/ -#ifndef _lucene_index_FieldsReader_ -#define _lucene_index_FieldsReader_ - -#if defined(_LUCENE_PRAGMA_ONCE) -# pragma once -#endif - -#include - -#include "CLucene/store/Directory.h" -#include "CLucene/document/Document.h" -#include "CLucene/util/subinputstream.h" -#include "CLucene/store/IndexInput.h" - -CL_NS_DEF(index) - -class FieldInfos; - -class FieldsReader : LUCENE_BASE -{ -private: - const FieldInfos* fieldInfos; - CL_NS(store)::IndexInput* fieldsStream; - CL_NS(store)::IndexInput* indexStream; - int32_t _size; - - class FieldsStreamHolder : public jstreams::StreamBase - { - CL_NS(store)::IndexInput* indexInput; - CL_NS(store)::IndexInputStream* indexInputStream; - jstreams::SubInputStream* subStream; - - public: - FieldsStreamHolder(CL_NS(store)::IndexInput* indexInput, int32_t subLength); - ~FieldsStreamHolder(); - int32_t read(const char*& start, int32_t _min, int32_t _max); - int64_t skip(int64_t ntoskip); - int64_t reset(int64_t pos); - }; - -public: - FieldsReader(CL_NS(store)::Directory* d, const QString& segment, FieldInfos* fn); - ~FieldsReader(); - void close(); - int32_t size() const; - // loads the fields from n'th document into doc. returns true on success. - bool doc(int32_t n, CL_NS(document)::Document* doc); -}; - -CL_NS_END - -#endif diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/index/FieldsWriter.cpp qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/index/FieldsWriter.cpp --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/index/FieldsWriter.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/index/FieldsWriter.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,186 +0,0 @@ -/* - * Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team - * - * Distributable under the terms of either the Apache License (Version 2.0) or - * the GNU Lesser General Public License, as specified in the COPYING file. - * - * Changes are Copyright (C) 2015 The Qt Company Ltd. -*/ -#include "CLucene/StdHeader.h" -#include "FieldsWriter.h" - -#include "CLucene/util/VoidMap.h" -#include "CLucene/util/Reader.h" -#include "CLucene/util/Misc.h" -#include "CLucene/store/Directory.h" -#include "CLucene/store/IndexOutput.h" -#include "CLucene/document/Document.h" -#include "CLucene/document/Field.h" -#include "FieldInfos.h" - -CL_NS_USE(store) -CL_NS_USE(util) -CL_NS_USE(document) -CL_NS_DEF(index) - -FieldsWriter::FieldsWriter(Directory* d, const QString& segment, FieldInfos* fn) - : fieldInfos(fn) -{ - //Func - Constructor - //Pre - d contains a valid reference to a directory - // segment != NULL and contains the name of the segment - //Post - fn contains a valid reference toa a FieldInfos - - CND_PRECONDITION(!segment.isEmpty(), "segment is NULL"); - - QString buf = Misc::segmentname(segment, QLatin1String(".fdt")); - fieldsStream = d->createOutput(buf); - - buf = Misc::segmentname(segment, QLatin1String(".fdx")); - indexStream = d->createOutput(buf); - - CND_CONDITION(indexStream != NULL, "indexStream is NULL"); -} - -FieldsWriter::~FieldsWriter() -{ - //Func - Destructor - //Pre - true - //Post - Instance has been destroyed - - close(); -} - -void FieldsWriter::close() -{ - //Func - Closes all streams and frees all resources - //Pre - true - //Post - All streams have been closed all resources have been freed - - //Check if fieldsStream is valid - if (fieldsStream) { - //Close fieldsStream - fieldsStream->close(); - _CLDELETE(fieldsStream); - } - - //Check if indexStream is valid - if (indexStream) { - //Close indexStream - indexStream->close(); - _CLDELETE(indexStream); - } -} - -void FieldsWriter::addDocument(Document* doc) -{ - //Func - Adds a document - //Pre - doc contains a valid reference to a Document - // indexStream != NULL - // fieldsStream != NULL - //Post - The document doc has been added - - CND_PRECONDITION(indexStream != NULL, "indexStream is NULL"); - CND_PRECONDITION(fieldsStream != NULL, "fieldsStream is NULL"); - - indexStream->writeLong(fieldsStream->getFilePointer()); - - int32_t storedCount = 0; - DocumentFieldEnumeration* fields = doc->fields(); - while (fields->hasMoreElements()) { - Field* field = fields->nextElement(); - if (field->isStored()) - storedCount++; - } - _CLDELETE(fields); - fieldsStream->writeVInt(storedCount); - - fields = doc->fields(); - while (fields->hasMoreElements()) { - Field* field = fields->nextElement(); - if (field->isStored()) { - fieldsStream->writeVInt(fieldInfos->fieldNumber(field->name())); - - uint8_t bits = 0; - if (field->isTokenized()) - bits |= FieldsWriter::FIELD_IS_TOKENIZED; - if (field->isBinary()) - bits |= FieldsWriter::FIELD_IS_BINARY; - if (field->isCompressed()) - bits |= FieldsWriter::FIELD_IS_COMPRESSED; - - fieldsStream->writeByte(bits); - - if ( field->isCompressed()) { - _CLTHROWA(CL_ERR_Runtime, - "CLucene does not directly support compressed fields. " - "Write a compressed byte array instead"); - } else { - // FEATURE: this problem in Java Lucene too, if using Reader, - // data is not stored. - // - // TODO: this is a logic bug... - // if the field is stored, and indexed, and is using a reader - // the field wont get indexed - // - // if we could write zero prefixed vints (therefore static - // length), then we could write a reader directly to the field - // indexoutput and then go back and write the data length. - // however this is not supported in lucene yet... - // if this is ever implemented, then it would make sense to - // also be able to combine the FieldsWriter and - // DocumentWriter::invertDocument process, and use a - // streamfilter to write the field data while the documentwrite - // analyses the document! how cool would that be! it would cut - // out all these buffers!!! - - // compression is disabled for the current field - if (field->isBinary()) { - // TODO: since we currently don't support static length vints, - // we have to read the entire stream into memory first.... ugly! - jstreams::StreamBase* stream = field->streamValue(); - const char* sd; - // how do we make sure we read the entire index in now??? - // TODO: we need to have a max amount, and guarantee its all - // in or throw an error... - int32_t rl = stream->read(sd,10000000,0); - - if ( rl < 0 ) { - // TODO: could we detect this earlier and not actually - // write the field?? - fieldsStream->writeVInt(0); - } else { - // TODO: if this int could be written with a constant - // length, then the stream could be read and written a - // bit at a time then the length is re-written at the end. - fieldsStream->writeVInt(rl); - fieldsStream->writeBytes((uint8_t*)sd, rl); - } - } else if (field->stringValue() == NULL ) { - // we must be using readerValue - CND_PRECONDITION(!field->isIndexed(), - "Cannot store reader if it is indexed too") - Reader* r = field->readerValue(); - - //read the entire string - const TCHAR* rv; - int64_t rl = r->read(rv, LUCENE_INT32_MAX_SHOULDBE); - if ( rl > LUCENE_INT32_MAX_SHOULDBE ) - _CLTHROWA(CL_ERR_Runtime, "Field length too long"); - else if ( rl < 0 ) - rl = 0; - - fieldsStream->writeString( rv, (int32_t)rl); - } else if (field->stringValue() != NULL ) { - fieldsStream->writeString(field->stringValue(), - _tcslen(field->stringValue())); - } else { - _CLTHROWA(CL_ERR_Runtime, "No values are set for the field"); - } - } - } - } - _CLDELETE(fields); -} - -CL_NS_END diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/index/FieldsWriter.h qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/index/FieldsWriter.h --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/index/FieldsWriter.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/index/FieldsWriter.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,49 +0,0 @@ -/* - * Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team - * - * Distributable under the terms of either the Apache License (Version 2.0) or - * the GNU Lesser General Public License, as specified in the COPYING file. - * - * Changes are Copyright (C) 2015 The Qt Company Ltd. -*/ -#ifndef _lucene_index_FieldsWriter_ -#define _lucene_index_FieldsWriter_ - -#if defined(_LUCENE_PRAGMA_ONCE) -# pragma once -#endif - -#include - -#include "CLucene/document/Document.h" -#include "CLucene/store/Directory.h" -#include "CLucene/store/IndexOutput.h" - -CL_NS_DEF(index) - -class FieldInfos; - -class FieldsWriter : LUCENE_BASE -{ -private: - FieldInfos* fieldInfos; - - CL_NS(store)::IndexOutput* fieldsStream; - CL_NS(store)::IndexOutput* indexStream; - -public: - LUCENE_STATIC_CONSTANT(uint8_t, FIELD_IS_TOKENIZED = 0x1); - LUCENE_STATIC_CONSTANT(uint8_t, FIELD_IS_BINARY = 0x2); - LUCENE_STATIC_CONSTANT(uint8_t, FIELD_IS_COMPRESSED = 0x4); - - FieldsWriter(CL_NS(store)::Directory* d, const QString& segment, FieldInfos* fn); - ~FieldsWriter(); - - void close(); - - void addDocument(CL_NS(document)::Document* doc); -}; - -CL_NS_END - -#endif diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/index/IndexModifier.cpp qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/index/IndexModifier.cpp --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/index/IndexModifier.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/index/IndexModifier.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,254 +0,0 @@ -/* - * Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team - * - * Distributable under the terms of either the Apache License (Version 2.0) or - * the GNU Lesser General Public License, as specified in the COPYING file. - * - * Changes are Copyright (C) 2015 The Qt Company Ltd. -*/ -#include "CLucene/StdHeader.h" -#include "IndexModifier.h" - -#include "Term.h" -#include "IndexWriter.h" -#include "IndexReader.h" - -CL_NS_DEF(index) -CL_NS_USE(util) -CL_NS_USE(store) -CL_NS_USE(analysis) -CL_NS_USE(document) - -IndexModifier::IndexModifier(Directory* directory, Analyzer* analyzer, bool create) { - init(directory, analyzer, create); -} - -IndexModifier::IndexModifier(const QString& dirName, Analyzer* analyzer, bool create) { - Directory* dir = FSDirectory::getDirectory(dirName, create); - init(dir, analyzer, create); -} - -void IndexModifier::init(Directory* directory, Analyzer* analyzer, bool create) { - indexWriter = NULL; - indexReader = NULL; - this->analyzer = analyzer; - open = false; - - useCompoundFile = true; - int32_t maxBufferedDocs = IndexWriter::DEFAULT_MAX_BUFFERED_DOCS; - this->maxFieldLength = IndexWriter::DEFAULT_MAX_FIELD_LENGTH; - int32_t mergeFactor = IndexWriter::DEFAULT_MERGE_FACTOR; - - this->directory = _CL_POINTER(directory); - createIndexReader(); - open = true; -} - -IndexModifier::~IndexModifier(){ - close(); -} - -void IndexModifier::assureOpen() const{ - if (!open) { - _CLTHROWA(CL_ERR_IllegalState,"Index is closed"); - } -} - -void IndexModifier::createIndexWriter() { - if (indexWriter == NULL) { - if (indexReader != NULL) { - indexReader->close(); - _CLDELETE(indexReader); - } - indexWriter = _CLNEW IndexWriter(directory, analyzer, false); - indexWriter->setUseCompoundFile(useCompoundFile); - //indexWriter->setMaxBufferedDocs(maxBufferedDocs); - indexWriter->setMaxFieldLength(maxFieldLength); - //indexWriter->setMergeFactor(mergeFactor); - } -} - -void IndexModifier::createIndexReader() { - if (indexReader == NULL) { - if (indexWriter != NULL) { - indexWriter->close(); - _CLDELETE(indexWriter); - } - indexReader = IndexReader::open(directory); - } -} - -void IndexModifier::flush() { - SCOPED_LOCK_MUTEX(directory->THIS_LOCK) - assureOpen(); - if (indexWriter != NULL) { - indexWriter->close(); - _CLDELETE(indexWriter); - createIndexWriter(); - } else { - indexReader->close(); - _CLDELETE(indexReader); - createIndexReader(); - } -} - -void IndexModifier::addDocument(Document* doc, Analyzer* docAnalyzer) { - SCOPED_LOCK_MUTEX(directory->THIS_LOCK) - assureOpen(); - createIndexWriter(); - if (docAnalyzer != NULL) - indexWriter->addDocument(doc, docAnalyzer); - else - indexWriter->addDocument(doc); -} - -int32_t IndexModifier::deleteDocuments(Term* term) { - SCOPED_LOCK_MUTEX(directory->THIS_LOCK) - assureOpen(); - createIndexReader(); - return indexReader->deleteDocuments(term); -} - -void IndexModifier::deleteDocument(int32_t docNum) { - SCOPED_LOCK_MUTEX(directory->THIS_LOCK) - assureOpen(); - createIndexReader(); - indexReader->deleteDocument(docNum); -} - -int32_t IndexModifier::docCount() { - SCOPED_LOCK_MUTEX(directory->THIS_LOCK) - assureOpen(); - if (indexWriter != NULL) - return indexWriter->docCount(); - else - return indexReader->numDocs(); -} - -void IndexModifier::optimize() { - SCOPED_LOCK_MUTEX(directory->THIS_LOCK) - assureOpen(); - createIndexWriter(); - indexWriter->optimize(); -} - -void IndexModifier::setUseCompoundFile(bool useCompoundFile) { - SCOPED_LOCK_MUTEX(directory->THIS_LOCK) - assureOpen(); - if (indexWriter != NULL) - indexWriter->setUseCompoundFile(useCompoundFile); - this->useCompoundFile = useCompoundFile; -} - -bool IndexModifier::getUseCompoundFile() { - SCOPED_LOCK_MUTEX(directory->THIS_LOCK) - assureOpen(); - createIndexWriter(); - return indexWriter->getUseCompoundFile(); -} - -void IndexModifier::setMaxFieldLength(int32_t maxFieldLength) { - SCOPED_LOCK_MUTEX(directory->THIS_LOCK) - assureOpen(); - if (indexWriter != NULL) - indexWriter->setMaxFieldLength(maxFieldLength); - this->maxFieldLength = maxFieldLength; -} - -int32_t IndexModifier::getMaxFieldLength() { - SCOPED_LOCK_MUTEX(directory->THIS_LOCK) - assureOpen(); - createIndexWriter(); - return indexWriter->getMaxFieldLength(); -} - -void IndexModifier::setMaxBufferedDocs(int32_t maxBufferedDocs) { - SCOPED_LOCK_MUTEX(directory->THIS_LOCK) - assureOpen(); - if (indexWriter != NULL) - indexWriter->setMaxBufferedDocs(maxBufferedDocs); - this->maxBufferedDocs = maxBufferedDocs; -} - -int32_t IndexModifier::getMaxBufferedDocs() { - SCOPED_LOCK_MUTEX(directory->THIS_LOCK) - assureOpen(); - createIndexWriter(); - return indexWriter->getMaxBufferedDocs(); -} -void IndexModifier::setMergeFactor(int32_t mergeFactor) { - SCOPED_LOCK_MUTEX(directory->THIS_LOCK) - assureOpen(); - if (indexWriter != NULL) - indexWriter->setMergeFactor(mergeFactor); - this->mergeFactor = mergeFactor; -} - -int32_t IndexModifier::getMergeFactor() { - SCOPED_LOCK_MUTEX(directory->THIS_LOCK) - assureOpen(); - createIndexWriter(); - return indexWriter->getMergeFactor(); -} - -void IndexModifier::close() { - SCOPED_LOCK_MUTEX(directory->THIS_LOCK) - if (indexWriter != NULL) { - indexWriter->close(); - _CLDELETE(indexWriter); - } else { - indexReader->close(); - _CLDELETE(indexReader); - } - _CLDECDELETE(directory) - open = false; -} - -QString IndexModifier::toString() const -{ - QString ret(QLatin1String("Index@")); - return ret.append(directory->toString()); -} - - - -int64_t IndexModifier::getCurrentVersion() const{ - SCOPED_LOCK_MUTEX(directory->THIS_LOCK) - return IndexReader::getCurrentVersion(directory); -} - -TermDocs* IndexModifier::termDocs(Term* term){ - SCOPED_LOCK_MUTEX(directory->THIS_LOCK) - assureOpen(); - createIndexReader(); - return indexReader->termDocs(term); -} - -TermEnum* IndexModifier::terms(Term* term){ - SCOPED_LOCK_MUTEX(directory->THIS_LOCK) - assureOpen(); - createIndexReader(); - if ( term != NULL ) - return indexReader->terms(term); - else - return indexReader->terms(); -} - - - CL_NS(document)::Document* IndexModifier::document(const int32_t n){ - Document* ret = _CLNEW Document; - if (!document(n,ret) ) - _CLDELETE(ret); - return ret; - } -bool IndexModifier::document(int32_t n, CL_NS(document)::Document* doc){ - SCOPED_LOCK_MUTEX(directory->THIS_LOCK) - assureOpen(); - createIndexReader(); - return indexReader->document(n, doc); -} -CL_NS(store)::Directory* IndexModifier::getDirectory(){ - return directory; -} - -CL_NS_END diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/index/IndexModifier.h qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/index/IndexModifier.h --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/index/IndexModifier.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/index/IndexModifier.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,316 +0,0 @@ -/* -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -* -* Changes are Copyright (C) 2015 The Qt Company Ltd. -*/ -#ifndef _lucene_index_IndexModifier_ -#define _lucene_index_IndexModifier_ - -#if defined(_LUCENE_PRAGMA_ONCE) -# pragma once -#endif - -#include - -#include "CLucene/store/Directory.h" -#include "CLucene/document/Document.h" -#include "CLucene/analysis/AnalysisHeader.h" - -CL_NS_DEF(index) - -class IndexReader; -class IndexWriter; -class Term; -class TermDocs; -class TermEnum; - -/** -* A class to modify an index, i.e. to delete and add documents. This -* class hides {@link IndexReader} and {@link IndexWriter} so that you -* do not need to care about implementation details such as that adding -* documents is done via IndexWriter and deletion is done via IndexReader. -* -*

Note that you cannot create more than one IndexModifier object -* on the same directory at the same time. -* -*

Example usage: -* -*

-* -* -* -* -*
-* -* //note this code will leak memory :) -* Analyzer* analyzer = new StandardAnalyzer();
-* // create an index in /tmp/index, overwriting an existing one:
-* IndexModifier* indexModifier = new IndexModifier("/tmp/index", analyzer, true);
-* Document* doc = new Document*();
-* doc->add(*new Field("id", "1", Field::STORE_YES| Field::INDEX_UNTOKENIZED));
-* doc->add(*new Field("body", "a simple test", Field::STORE_YES, Field::INDEX_TOKENIZED));
-* indexModifier->addDocument(doc);
-* int32_t deleted = indexModifier->deleteDocuments(new Term("id", "1"));
-* printf("Deleted %d document", deleted);
-* indexModifier->flush();
-* printf( "$d docs in index", indexModifier->docCount() );
-* indexModifier->close(); -*
-*
-* -*

Not all methods of IndexReader and IndexWriter are offered by this -* class. If you need access to additional methods, either use those classes -* directly or implement your own class that extends IndexModifier. -* -*

Although an instance of this class can be used from more than one -* thread, you will not get the best performance. You might want to use -* IndexReader and IndexWriter directly for that (but you will need to -* care about synchronization yourself then). -* -*

While you can freely mix calls to add() and delete() using this class, -* you should batch you calls for best performance. For example, if you -* want to update 20 documents, you should first delete all those documents, -* then add all the new documents. -* -*/ -class IndexModifier : LUCENE_BASE -{ -protected: - IndexWriter* indexWriter; - IndexReader* indexReader; - - CL_NS(store)::Directory* directory; - CL_NS(analysis)::Analyzer* analyzer; - bool open; - - // Lucene defaults: - bool useCompoundFile; - int32_t maxBufferedDocs; - int32_t maxFieldLength; - int32_t mergeFactor; - -public: - - /** - * Open an index with write access. - * - * @param directory the index directory - * @param analyzer the analyzer to use for adding new documents - * @param create true to create the index or overwrite - * the existing one; false to append to the existing index - */ - IndexModifier(CL_NS(store)::Directory* directory, - CL_NS(analysis)::Analyzer* analyzer, bool create); - - ~IndexModifier(); - - /** - * Open an index with write access. - * - * @param dirName the index directory - * @param analyzer the analyzer to use for adding new documents - * @param create true to create the index or overwrite - * the existing one; false to append to the existing index - */ - IndexModifier(const QString& dirName, CL_NS(analysis)::Analyzer* analyzer, - bool create); - -protected: - - // Initialize an IndexWriter. @throws IOException - void init(CL_NS(store)::Directory* directory, - CL_NS(analysis)::Analyzer* analyzer, bool create); - - // Throw an IllegalStateException if the index is closed. - // @throws IllegalStateException - void assureOpen() const; - - // Close the IndexReader and open an IndexWriter. @throws IOException - void createIndexWriter(); - - // Close the IndexWriter and open an IndexReader. @throws IOException - void createIndexReader(); - -public: - // Make sure all changes are written to disk. @throws IOException - void flush(); - - // Adds a document to this index, using the provided analyzer instead of - // the one specific in the constructor. If the document contains more than - // {@link #setMaxFieldLength(int32_t)} terms for a given field, the - // remainder are discarded. - // @see IndexWriter#addDocument(Document*, Analyzer*) - // @throws IllegalStateException if the index is closed - void addDocument(CL_NS(document)::Document* doc, CL_NS(analysis)::Analyzer* - docAnalyzer = NULL); - - - /** - * Deletes all documents containing term. - * This is useful if one uses a document field to hold a unique ID string for - * the document. Then to delete such a document, one merely constructs a - * term with the appropriate field and the unique ID string as its text and - * passes it to this method. Returns the number of documents deleted. - * @return the number of documents deleted - * @see IndexReader#deleteDocuments(Term*) - * @throws IllegalStateException if the index is closed - */ - int32_t deleteDocuments(Term* term); - - /** - * Deletes the document numbered docNum. - * @see IndexReader#deleteDocument(int32_t) - * @throws IllegalStateException if the index is closed - */ - void deleteDocument(int32_t docNum); - - /** - * Returns the number of documents currently in this index. - * @see IndexWriter#docCount() - * @see IndexReader#numDocs() - * @throws IllegalStateException if the index is closed - */ - int32_t docCount(); - - /** - * Merges all segments together into a single segment, optimizing an index - * for search. - * @see IndexWriter#optimize() - * @throws IllegalStateException if the index is closed - */ - void optimize(); - - /** - * Setting to turn on usage of a compound file. When on, multiple files - * for each segment are merged into a single file once the segment creation - * is finished. This is done regardless of what directory is in use. - * @see IndexWriter#setUseCompoundFile(bool) - * @throws IllegalStateException if the index is closed - */ - void setUseCompoundFile(bool useCompoundFile); - - /** - * @throws IOException - * @see IndexModifier#setUseCompoundFile(bool) - */ - bool getUseCompoundFile(); - - /** - * The maximum number of terms that will be indexed for a single field in a - * document. This limits the amount of memory required for indexing, so that - * collections with very large files will not crash the indexing process by - * running out of memory.

- * Note that this effectively truncates large documents, excluding from the - * index terms that occur further in the document. If you know your source - * documents are large, be sure to set this value high enough to accomodate - * the expected size. If you set it to Integer.MAX_VALUE, then the only limit - * is your memory, but you should anticipate an OutOfMemoryError.

- * By default, no more than 10,000 terms will be indexed for a field. - * @see IndexWriter#setMaxFieldLength(int32_t) - * @throws IllegalStateException if the index is closed - */ - void setMaxFieldLength(int32_t maxFieldLength); - - /** - * @throws IOException - * @see IndexModifier#setMaxFieldLength(int32_t) - */ - int32_t getMaxFieldLength(); - - /* - * The maximum number of terms that will be indexed for a single field in a - * document. This limits the amount of memory required for indexing, so that - * collections with very large files will not crash the indexing process by - * running out of memory.

- * Note that this effectively truncates large documents, excluding from the - * index terms that occur further in the document. If you know your source - * documents are large, be sure to set this value high enough to accomodate - * the expected size. If you set it to Integer.MAX_VALUE, then the only limit - * is your memory, but you should anticipate an OutOfMemoryError.

- * By default, no more than 10,000 terms will be indexed for a field. - * @see IndexWriter#setMaxBufferedDocs(int32_t) - * @throws IllegalStateException if the index is closed - */ - void setMaxBufferedDocs(int32_t maxBufferedDocs); - - // @see IndexModifier#setMaxBufferedDocs(int32_t) @throws IOException - int32_t getMaxBufferedDocs(); - - /* - * Determines how often segment indices are merged by addDocument(). With - * smaller values, less RAM is used while indexing, and searches on - * unoptimized indices are faster, but indexing speed is slower. With larger - * values, more RAM is used during indexing, and while searches on unoptimized - * indices are slower, indexing is faster. Thus larger values (> 10) are - * best for batch index creation, and smaller values (< 10) for indices - * that are interactively maintained. - *

This must never be less than 2. The default value is 10. - * - * @see IndexWriter#setMergeFactor(int32_t) - * @throws IllegalStateException if the index is closed - */ - void setMergeFactor(int32_t mergeFactor); - - /** - * @throws IOException - * @see IndexModifier#setMergeFactor(int32_t) - */ - int32_t getMergeFactor(); - - /** - * Close this index, writing all pending changes to disk. - * - * @throws IllegalStateException if the index has been closed before already - */ - void close(); - - QString toString() const; - - /** - * Gets the version number of the currently open index. - */ - int64_t getCurrentVersion() const; - - /** - * Returns an enumeration of all the documents which contain term. - * - * Warning: This is not threadsafe. Make sure you lock the modifier object - * while using the TermDocs. If the IndexReader that the modifier manages - * is closed, the TermDocs object will fail. - */ - TermDocs* termDocs(Term* term = NULL); - - /** - * Returns an enumeration of all terms after a given term. - * If no term is given, an enumeration of all the terms - * in the index is returned. - * The enumeration is ordered by Term.compareTo(). Each term - * is greater than all that precede it in the enumeration. - * - * Warning: This is not threadsafe. Make sure you lock the modifier object - * while using the TermDocs. If the IndexReader that the modifier manages - * is closed, the Document will be invalid - */ - TermEnum* terms(Term* term = NULL); - - /** - * Returns the stored fields of the n-th Document in this index. - * - * Warning: This is not threadsafe. Make sure you lock the modifier object - * while using the TermDocs. If the IndexReader that the modifier manages - * is closed, the Document will be invalid - */ - bool document(const int32_t n, CL_NS(document)::Document* doc); - _CL_DEPRECATED(document(i, document)) - CL_NS(document)::Document* document(const int32_t n); - - // Returns the directory used by this index. - CL_NS(store)::Directory* getDirectory(); -}; - -CL_NS_END - -#endif diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/index/IndexReader.cpp qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/index/IndexReader.cpp --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/index/IndexReader.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/index/IndexReader.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,668 +0,0 @@ -/* - * Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team - * - * Distributable under the terms of either the Apache License (Version 2.0) or - * the GNU Lesser General Public License, as specified in the COPYING file. - * - * Changes are Copyright (C) 2015 The Qt Company Ltd. -*/ -# include -# include - -#include "CLucene/StdHeader.h" -#include "IndexReader.h" -#include "IndexWriter.h" - -#include "CLucene/store/Directory.h" -#include "CLucene/store/FSDirectory.h" -#include "CLucene/store/Lock.h" -#include "CLucene/document/Document.h" -#include "CLucene/search/Similarity.h" -#include "SegmentInfos.h" -#include "MultiReader.h" -#include "Terms.h" - -CL_NS_USE(util) -CL_NS_USE(store) -CL_NS_DEF(index) - -IndexReader::IndexReader(Directory* dir) - : stale(false) - , hasChanges(false) - , closeDirectory(false) - , directoryOwner(false) - , segmentInfos(NULL) - , directory(_CL_POINTER(dir)) - , writeLock(NULL) -{ -} - -IndexReader::IndexReader(Directory* dir, SegmentInfos* infos, bool close) - : stale(false) - , hasChanges(false) - , closeDirectory(close) - , directoryOwner(true) - , segmentInfos(infos) - , directory(_CL_POINTER(dir)) - , writeLock(NULL) -{ -} - -IndexReader::~IndexReader() -{ - if (writeLock != NULL) { - writeLock->release(); - _CLDELETE(writeLock); - } - _CLDELETE(segmentInfos); - _CLDECDELETE(directory); -} - -IndexReader* IndexReader::open(const QString& path) -{ - //Func - Static method. - // Returns an IndexReader reading the index in an FSDirectory in the named path. - //Pre - path != NULL and contains the path of the index for which an IndexReader must be - // instantiated - // closeDir indicates if the directory needs to be closed - //Post - An IndexReader has been returned that reads tnhe index located at path - - CND_PRECONDITION(!path.isEmpty(), "path is NULL"); - - Directory* dir = FSDirectory::getDirectory(path, false); - IndexReader* reader = open(dir, true); - //because fsdirectory will now have a refcount of 1 more than - //if the reader had been opened with a directory object, - //we need to do a refdec - _CLDECDELETE(dir); - return reader; -} - -IndexReader* IndexReader::open(Directory* directory, bool closeDirectory) -{ - //Func - Static method. - // Returns an IndexReader reading the index in an FSDirectory in the named path. - //Pre - directory represents a directory - // closeDir indicates if the directory needs to be closed - //Post - An IndexReader has been returned that reads the index located at directory - - // in- & inter-process sync - SCOPED_LOCK_MUTEX(directory->THIS_LOCK) - - //Instantiate an IndexReader::LockWith which can produce an IndexReader - LuceneLock* lock = directory->makeLock(QLatin1String("commit.lock")); - IndexReader::LockWith with(lock, directory); - - IndexReader* ret = NULL; - try { - //Create an IndexReader reading the index - ret = with.runAndReturn(); - } _CLFINALLY ( - _CLDELETE(lock); - ); - - CND_CONDITION(ret != NULL, "ret is NULL"); - ret->closeDirectory = closeDirectory; - - return ret; -} - -CL_NS(document)::Document* IndexReader::document(const int32_t n) -{ - CL_NS(document)::Document* ret = _CLNEW CL_NS(document)::Document; - if (!document(n, ret)) - _CLDELETE(ret); - return ret; -} - -IndexReader* IndexReader::LockWith::doBody() -{ - //Func - Reads the segmentinfo file and depending on the number of segments found - // it returns a SegmentsReader or a SegmentReader - //Pre - directory != NULL - //Post - Depending on the number of Segments present in directory this method - // returns an empty SegmentsReader when there are no segments, a SegmentReader when - // directory contains 1 segment and a nonempty SegmentsReader when directory - // contains multiple segements - - CND_PRECONDITION(directory != NULL, "directory is NULL"); - - //Instantiate SegmentInfos - SegmentInfos* infos = _CLNEW SegmentInfos; - try { - //Have SegmentInfos read the segments file in directory - infos->read(directory); - } catch(...) { - //make sure infos is cleaned up - _CLDELETE(infos); - throw; - } - - // If there is at least one segment (if infos.size() >= 1), the last - // SegmentReader object will close the directory when the SegmentReader - // object itself is closed (see SegmentReader::doClose). - // If there are no segments, there will be no "last SegmentReader object" - // to fulfill this responsibility, so we need to explicitly close the - // directory in the segmentsreader.close - - //Count the number segments in the directory - const uint32_t nSegs = infos->size(); - - if (nSegs == 1 ) { - // index is optimized - return _CLNEW SegmentReader(infos, infos->info(0)); - } else { - //Instantiate an array of pointers to SegmentReaders of size nSegs (The number of segments in the index) - IndexReader** readers = NULL; - - if (nSegs > 0){ - uint32_t infosize = infos->size(); - readers = _CL_NEWARRAY(IndexReader*,infosize+1); - for (uint32_t i = 0; i < infosize; ++i) { - //Instantiate a SegementReader responsible for reading the i-th segment and store it in - //the readers array - readers[i] = _CLNEW SegmentReader(infos->info(i)); - } - readers[infosize] = NULL; - } - - //return an instance of SegmentsReader which is a reader that manages all Segments - return _CLNEW MultiReader(directory, infos, readers); - }// end if -} - -uint64_t IndexReader::lastModified(const QString& directory) -{ - //Func - Static method - // Returns the time the index in the named directory was last modified. - //Pre - directory != NULL and contains the path name of the directory to check - //Post - The last modified time of the index has been returned - - CND_PRECONDITION(!directory.isEmpty(), "directory is NULL"); - - return FSDirectory::fileModified(directory, QLatin1String("segments")); -} - -int64_t IndexReader::getCurrentVersion(Directory* directory) -{ - // in- & inter-process sync - SCOPED_LOCK_MUTEX(directory->THIS_LOCK) - - int64_t ret = 0; - bool locked = false; - LuceneLock* commitLock = directory->makeLock(IndexWriter::COMMIT_LOCK_NAME); - try { - locked = commitLock->obtain(IndexWriter::COMMIT_LOCK_TIMEOUT); - ret = SegmentInfos::readCurrentVersion(directory); - } _CLFINALLY ( - if (locked) - commitLock->release(); - _CLDELETE(commitLock); - ) - return ret; -} - -int64_t IndexReader::getCurrentVersion(const QString& directory) -{ - Directory* dir = FSDirectory::getDirectory(directory, false); - int64_t version = getCurrentVersion(dir); - dir->close(); - _CLDECDELETE(dir); - return version; -} - -int64_t IndexReader::getVersion() -{ - return segmentInfos->getVersion(); -} - -bool IndexReader::isCurrent() -{ - // in- & inter-process sync - SCOPED_LOCK_MUTEX(directory->THIS_LOCK) - - bool ret = false; - bool locked = false; - LuceneLock* commitLock = directory->makeLock(IndexWriter::COMMIT_LOCK_NAME); - try { - locked = commitLock->obtain(IndexWriter::COMMIT_LOCK_TIMEOUT); - ret = SegmentInfos::readCurrentVersion(directory) - == segmentInfos->getVersion(); - } _CLFINALLY( - if (locked) - commitLock->release(); - _CLDELETE(commitLock); - ) - return ret; -} - -uint64_t IndexReader::lastModified(const Directory* directory) -{ - //Func - Static method - // Returns the time the index in this directory was last modified. - //Pre - directory contains a valid reference - //Post - The last modified time of the index has been returned - - return directory->fileModified(QLatin1String("segments")); -} - - -bool IndexReader::indexExists(const QString& directory) -{ - //Func - Static method - // Checks if an index exists in the named directory - //Pre - directory != NULL - //Post - Returns true if an index exists at the specified directory-> - // If the directory does not exist or if there is no index in it. - // false is returned. - - CND_PRECONDITION(!directory.isEmpty(), "directory is NULL"); - return QFile(directory + QLatin1String("/segments")).exists(); -} - - -void IndexReader::setNorm(int32_t doc, const TCHAR* field, uint8_t value) -{ - SCOPED_LOCK_MUTEX(THIS_LOCK) - if(directoryOwner) - aquireWriteLock(); - doSetNorm(doc, field, value); - hasChanges = true; -} - -void IndexReader::aquireWriteLock() -{ - if (stale) { - _CLTHROWA(CL_ERR_IO, - "IndexReader out of date and no longer valid for delete, " - "undelete, or setNorm operations"); - } - - if (writeLock == NULL) { - LuceneLock* writeLock = directory->makeLock(QLatin1String("write.lock")); - if (!writeLock->obtain(IndexWriter::WRITE_LOCK_TIMEOUT)) // obtain write lock - _CLTHROWA(CL_ERR_IO,"Index locked for write"); // + writeLock - this->writeLock = writeLock; - - // we have to check whether index has changed since this reader was opened. - // if so, this reader is no longer valid for deletion - if (SegmentInfos::readCurrentVersion(directory) > segmentInfos->getVersion()) { - stale = true; - this->writeLock->release(); - _CLDELETE(this->writeLock); - _CLTHROWA(CL_ERR_IO,"IndexReader out of date and no longer valid " - "for delete, undelete, or setNorm operations"); - } - } -} - - -void IndexReader::setNorm(int32_t doc, const TCHAR* field, qreal value) -{ - setNorm(doc, field, CL_NS(search)::Similarity::encodeNorm(value)); -} - -bool IndexReader::indexExists(const Directory* directory) -{ - //Func - Static method - // Checks if an index exists in the directory - //Pre - directory is a valid reference - //Post - Returns true if an index exists at the specified directory-> - // If the directory does not exist or if there is no index in it. - // false is returned. - - return directory->fileExists(QLatin1String("segments")); -} - -TermDocs* IndexReader::termDocs(Term* term) const -{ - //Func - Returns an enumeration of all the documents which contain - // term. For each document, the document number, the frequency of - // the term in that document is also provided, for use in search scoring. - // Thus, this method implements the mapping: - // - // Term => * - // The enumeration is ordered by document number. Each document number - // is greater than all that precede it in the enumeration. - //Pre - term != NULL - //Post - A reference to TermDocs containing an enumeration of all found documents - // has been returned - - CND_PRECONDITION(term != NULL, "term is NULL"); - - //Reference an instantiated TermDocs instance - TermDocs* _termDocs = termDocs(); - //Seek all documents containing term - _termDocs->seek(term); - //return the enumaration - return _termDocs; -} - -TermPositions* IndexReader::termPositions(Term* term) const -{ - //Func - Returns an enumeration of all the documents which contain term. For each - // document, in addition to the document number and frequency of the term in - // that document, a list of all of the ordinal positions of the term in the document - // is available. Thus, this method implements the mapping: - // - // Term => >* - // - // This positional information faciliates phrase and proximity searching. - // The enumeration is ordered by document number. Each document number is greater than - // all that precede it in the enumeration. - //Pre - term != NULL - //Post - A reference to TermPositions containing an enumeration of all found documents - // has been returned - - CND_PRECONDITION(term != NULL, "term is NULL"); - - //Reference an instantiated termPositions instance - TermPositions* _termPositions = termPositions(); - //Seek all documents containing term - _termPositions->seek(term); - //return the enumeration - return _termPositions; -} - -void IndexReader::deleteDocument(const int32_t docNum) -{ - //Func - Deletes the document numbered docNum. Once a document is deleted it will not appear - // in TermDocs or TermPostitions enumerations. Attempts to read its field with the document - // method will result in an error. The presence of this document may still be reflected in - // the docFreq statistic, though this will be corrected eventually as the index is further modified. - //Pre - docNum >= 0 - //Post - If successful the document identified by docNum has been deleted. If no writelock - // could be obtained an exception has been thrown stating that the index was locked or has no write access - - SCOPED_LOCK_MUTEX(THIS_LOCK) - - CND_PRECONDITION(docNum >= 0, "docNum is negative"); - - if (directoryOwner) - aquireWriteLock(); - - //Have the document identified by docNum deleted - doDelete(docNum); - hasChanges = true; -} - -/** -* Commit changes resulting from delete, undeleteAll, or setNorm operations -* -* @throws IOException -*/ -void IndexReader::commit() -{ - SCOPED_LOCK_MUTEX(THIS_LOCK) - if(hasChanges){ - if(directoryOwner){ - { - SCOPED_LOCK_MUTEX(directory->THIS_LOCK) // in- & inter-process sync - - LuceneLock* commitLock = directory->makeLock(QLatin1String("commit.lock")); - IndexReader::CommitLockWith cl(commitLock,this); - cl.run(); - _CLDELETE(commitLock); - - } - if (writeLock != NULL) { - writeLock->release(); // release write lock - _CLDELETE(writeLock); - } - }else - doCommit(); - } - hasChanges = false; -} - - -void IndexReader::undeleteAll() -{ - SCOPED_LOCK_MUTEX(THIS_LOCK) - if(directoryOwner) - aquireWriteLock(); - doUndeleteAll(); - hasChanges = true; -} - -int32_t IndexReader::deleteDocuments(Term* term) -{ - //Func - Deletes all documents containing term. This is useful if one uses a - // document field to hold a unique ID string for the document. Then to delete such - // a document, one merely constructs a term with the appropriate field and the unique - // ID string as its text and passes it to this method. - //Pre - term != NULL - //Post - All documents containing term have been deleted. The number of deleted documents - // has been returned - - CND_PRECONDITION(term != NULL, "term is NULL"); - - //Search for the documents contain term - TermDocs* docs = termDocs(term); - - //Check if documents have been found - if ( docs == NULL ){ - return 0; - } - - //initialize - int32_t Counter = 0; - try { - //iterate through the found documents - while (docs->next()) { - //Delete the document - deleteDocument(docs->doc()); - ++Counter; - } - }_CLFINALLY( - //Close the enumeration - docs->close(); - ); - - //Delete the enumeration of found documents - _CLDELETE( docs ); - - //Return the number of deleted documents - return Counter; -} - -TCHAR** IndexReader::getFieldNames() -{ - CL_NS(util)::StringArrayWithDeletor array; - getFieldNames(IndexReader::ALL, array); - - array.setDoDelete(false); - TCHAR** ret = _CL_NEWARRAY(TCHAR*,array.size()+1); - int j=0; - CL_NS(util)::StringArrayWithDeletor::iterator itr = array.begin(); - while ( itr != array.end() ){ - ret[j]=*itr; - ++j;++itr; - } - ret[j]=NULL; - return ret; -} - -TCHAR** IndexReader::getFieldNames(bool indexed) -{ - CL_NS(util)::StringArrayWithDeletor array; - getFieldNames(indexed?IndexReader::INDEXED:IndexReader::UNINDEXED, array); - - array.setDoDelete(false); - TCHAR** ret = _CL_NEWARRAY(TCHAR*,array.size()+1); - int j=0; - CL_NS(util)::StringArrayWithDeletor::iterator itr = array.begin(); - while ( itr != array.end() ){ - ret[j]=*itr; - ++j;++itr; - } - ret[j]=NULL; - return ret; -} - -void IndexReader::close() -{ - //Func - Closes files associated with this index and also saves any new deletions to disk. - // No other methods should be called after this has been called. - //Pre - true - //Post - All files associated with this index have been deleted and new deletions have been - // saved to disk - SCOPED_LOCK_MUTEX(THIS_LOCK) - - CloseCallbackMap::iterator iter; - for (iter = closeCallbacks.begin(); iter != closeCallbacks.end(); iter++) { - CloseCallback callback = *iter->first; - callback(this, iter->second); - } - - commit(); - doClose(); - - if(closeDirectory) { - directory->close(); - _CLDECDELETE(directory); - } -} - -bool IndexReader::isLocked(Directory* directory) -{ - //Func - Static method - // Checks if the index in the directory is currently locked. - //Pre - directory is a valid reference to a directory to check for a lock - //Post - Returns true if the index in the named directory is locked otherwise false - - //Check the existence of the file write.lock and return true when it does and false - //when it doesn't - LuceneLock* l1 = directory->makeLock(QLatin1String("write.lock")); - LuceneLock* l2 = directory->makeLock(QLatin1String("commit.lock")); - - bool ret = l1->isLocked() || l2->isLocked(); - - _CLDELETE(l1); - _CLDELETE(l2); - return ret; -} - -bool IndexReader::isLocked(const QString& directory) -{ - //Func - Static method - // Checks if the index in the named directory is currently locked. - //Pre - directory != NULL and contains the directory to check for a lock - //Post - Returns true if the index in the named directory is locked otherwise false - - CND_PRECONDITION(!directory.isEmpty(), "directory is NULL"); - - Directory* dir = FSDirectory::getDirectory(directory, false); - bool ret = isLocked(dir); - dir->close(); - _CLDECDELETE(dir); - - return ret; -} - -/** Returns true if there are norms stored for this field. */ -bool IndexReader::hasNorms(const TCHAR* field) -{ - // backward compatible implementation. - // SegmentReader has an efficient implementation. - return norms(field) != NULL; -} - -void IndexReader::unlock(const QString& path) -{ - FSDirectory* dir = FSDirectory::getDirectory(path, false); - unlock(dir); - dir->close(); - _CLDECDELETE(dir); -} - -void IndexReader::unlock(Directory* directory) -{ - //Func - Static method - // Forcibly unlocks the index in the named directory-> - // Caution: this should only be used by failure recovery code, - // when it is known that no other process nor thread is in fact - // currently accessing this index. - //Pre - directory is a valid reference to a directory - //Post - The directory has been forcibly unlocked - LuceneLock* lock; - - lock = directory->makeLock(QLatin1String("write.lock")); - lock->release(); - _CLDELETE(lock); - - lock = directory->makeLock(QLatin1String("commit.lock")); - lock->release(); - _CLDELETE(lock); -} - -bool IndexReader::isLuceneFile(const QString& filename) -{ - if (filename.isNull() || filename.isEmpty()) - return false; - - size_t len = filename.length(); - if (len < 6) //need at least x.frx - return false; - - if (filename == QLatin1String("segments")) - return true; - - if (filename == QLatin1String("segments.new")) - return true; - - if (filename == QLatin1String("deletable")) - return true; - - QStringList extList; - extList << QLatin1String(".cfs") - << QLatin1String(".fnm") << QLatin1String(".fdx") << QLatin1String(".fdt") - << QLatin1String(".tii") << QLatin1String(".tis") << QLatin1String(".frq") - << QLatin1String(".prx") << QLatin1String(".del") << QLatin1String(".tvx") - << QLatin1String(".tvd") << QLatin1String(".tvf") << QLatin1String(".tvp"); - - QString suffix = filename.right(4); - if (extList.contains(suffix, Qt::CaseInsensitive)) - return true; - - if (suffix.leftRef(2) == QLatin1String(".f")) { - suffix = suffix.remove(0, 2); - if (suffix.length() > 0) { - for (int i = 0; i < suffix.length(); ++i) { - if (!suffix.at(i).isDigit()) - return false; - } - return true; - } - } - return false; -} - -void IndexReader::addCloseCallback(CloseCallback callback, void* parameter) -{ - closeCallbacks.put(callback, parameter); -} - -// #pragma mark -- IndexReader::LockWith - -IndexReader::LockWith::LockWith(CL_NS(store)::LuceneLock* lock, CL_NS(store)::Directory* dir) - : CL_NS(store)::LuceneLockWith(lock, IndexWriter::COMMIT_LOCK_TIMEOUT) -{ - this->directory = dir; -} - -// #pragma mark -- IndexReader::CommitLockWith - -IndexReader::CommitLockWith::CommitLockWith(CL_NS(store)::LuceneLock* lock, IndexReader* r) - : CL_NS(store)::LuceneLockWith(lock,IndexWriter::COMMIT_LOCK_TIMEOUT) - , reader(r) -{ -} - -void IndexReader::CommitLockWith::doBody() -{ - reader->doCommit(); - reader->segmentInfos->write(reader->getDirectory()); -} - -CL_NS_END diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/index/IndexReader.h qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/index/IndexReader.h --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/index/IndexReader.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/index/IndexReader.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,485 +0,0 @@ -/* - * Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team - * - * Distributable under the terms of either the Apache License (Version 2.0) or - * the GNU Lesser General Public License, as specified in the COPYING file. - * - * Changes are Copyright (C) 2015 The Qt Company Ltd. -*/ -#ifndef _lucene_index_IndexReader_ -#define _lucene_index_IndexReader_ - -#if defined(_LUCENE_PRAGMA_ONCE) -# pragma once -#endif - -#include - -#include "CLucene/store/Directory.h" -#include "CLucene/store/FSDirectory.h" -#include "CLucene/store/Lock.h" -#include "CLucene/document/Document.h" -#include "CLucene/index/TermVector.h" -#include "SegmentInfos.h" -#include "Terms.h" - - -CL_NS_DEF(index) - - -/** IndexReader is an abstract class, providing an interface for accessing an - index. Search of an index is done entirely through this abstract interface, - so that any subclass which implements it is searchable. - -

Concrete subclasses of IndexReader are usually constructed with a call to - one of the static open() methods, e.g. {@link #open(String)}. - -

For efficiency, in this API documents are often referred to via - document numbers, non-negative integers which each name a unique - document in the index. These document numbers are ephemeral--they may change - as documents are added to and deleted from an index. Clients should thus not - rely on a given document having the same number between sessions. - -

An IndexReader can be opened on a directory for which an IndexWriter is - opened already, but it cannot be used to delete documents from the index then. -*/ -class IndexReader : LUCENE_BASE -{ -public: - //Callback for classes that need to know if IndexReader is closing. - typedef void (*CloseCallback)(IndexReader*, void*); - - class CloseCallbackCompare:public CL_NS(util)::Compare::_base{ - public: - bool operator()( CloseCallback t1, CloseCallback t2 ) const{ - return t1 > t2; - } - static void doDelete(CloseCallback dummy){ - } - }; - - - enum FieldOption { - // all fields - ALL = 1, - // all indexed fields - INDEXED = 2, - // all fields which are not indexed - UNINDEXED = 4, - // all fields which are indexed with termvectors enables - INDEXED_WITH_TERMVECTOR = 8, - // all fields which are indexed but don't have termvectors enabled - INDEXED_NO_TERMVECTOR = 16, - // all fields where termvectors are enabled. Please note that only standard termvector fields are returned - TERMVECTOR = 32, - // all field with termvectors wiht positions enabled - TERMVECTOR_WITH_POSITION = 64, - // all fields where termvectors with offset position are set - TERMVECTOR_WITH_OFFSET = 128, - // all fields where termvectors with offset and position values set - TERMVECTOR_WITH_POSITION_OFFSET = 256 - }; - - -private: - bool stale; - bool hasChanges; - bool closeDirectory; - bool directoryOwner; - - SegmentInfos* segmentInfos; - CL_NS(store)::Directory* directory; - CL_NS(store)::LuceneLock* writeLock; - - typedef CL_NS(util)::CLSet CloseCallbackMap; - CloseCallbackMap closeCallbacks; - - /** Internal use. Implements commit */ - virtual void doCommit() = 0; - - /** - * Tries to acquire the WriteLock on this directory. - * this method is only valid if this IndexReader is directory owner. - * - * @throws IOException If WriteLock cannot be acquired. - */ - void aquireWriteLock(); -protected: - /** - * Constructor used if IndexReader is not owner of its directory. - * This is used for IndexReaders that are used within other IndexReaders that take care or locking directories. - * - * @param directory Directory where IndexReader files reside. - */ - IndexReader(CL_NS(store)::Directory* dir); - - /** - * Constructor used if IndexReader is owner of its directory. - * If IndexReader is owner of its directory, it locks its directory in case of write operations. - * - * @param directory Directory where IndexReader files reside. - * @param segmentInfos Used for write-l - * @param closeDirectory - */ - IndexReader(CL_NS(store)::Directory* directory, SegmentInfos* segmentInfos, bool closeDirectory); - - - /// Implements close. - virtual void doClose() = 0; - - /** Implements setNorm in subclass.*/ - virtual void doSetNorm(int32_t doc, const TCHAR* field, uint8_t value) = 0; - - /** Implements actual undeleteAll() in subclass. */ - virtual void doUndeleteAll() = 0; - - - /** Implements deletion of the document numbered docNum. - * Applications should call {@link #deleteDocument(int32_t)} or {@link #deleteDocuments(Term*)}. - */ - virtual void doDelete(const int32_t docNum) = 0; - -public: - - DEFINE_MUTEX(THIS_LOCK) - - ///Do not access this directly, only public so that MultiReader can access it - virtual void commit(); - - - /** Undeletes all documents currently marked as deleted in this index.*/ - void undeleteAll(); - - /** - * Get a list of unique field names that exist in this index and have the specified - * field option information. - * @param fldOption specifies which field option should be available for the returned fields - * @return Collection of Strings indicating the names of the fields. - * @see IndexReader.FieldOption - */ - virtual void getFieldNames(FieldOption fldOption, CL_NS(util)::StringArrayWithDeletor& retarray) = 0; - - _CL_DEPRECATED( getFieldNames(FieldOption, StringArrayWithDeletor&) ) virtual TCHAR** getFieldNames(); - _CL_DEPRECATED( getFieldNames(FieldOption, StringArrayWithDeletor&) ) virtual TCHAR** getFieldNames(bool indexed); - - /** Returns the byte-encoded normalization factor for the named field of - * every document. This is used by the search code to score documents. - * - * The number of bytes returned is the size of the IndexReader->maxDoc() - * MEMORY: The values are cached, so don't delete the returned byte array. - * @see Field#setBoost(qreal) - */ - virtual uint8_t* norms(const TCHAR* field) = 0; - - - /** Reads the byte-encoded normalization factor for the named field of every - * document. This is used by the search code to score documents. - * - * @see Field#setBoost(qreal) - */ - virtual void norms(const TCHAR* field, uint8_t* bytes) = 0; - - /** Expert: Resets the normalization factor for the named field of the named - * document. - * - * @see #norms(TCHAR*) - * @see Similarity#decodeNorm(uint8_t) - */ - void setNorm(int32_t doc, const TCHAR* field, qreal value); - - /** Expert: Resets the normalization factor for the named field of the named - * document. The norm represents the product of the field's {@link - * Field#setBoost(qreal) boost} and its {@link Similarity#lengthNorm(TCHAR*, - * int32_t) length normalization}. Thus, to preserve the length normalization - * values when resetting this, one should base the new value upon the old. - * - * @see #norms(TCHAR*) - * @see Similarity#decodeNorm(uint8_t) - */ - void setNorm(int32_t doc, const TCHAR* field, uint8_t value); - - /// Release the write lock, if needed. - virtual ~IndexReader(); - - /// Returns an IndexReader reading the index in an FSDirectory in the named path. - static IndexReader* open(const QString& path); - - /// Returns an IndexReader reading the index in the given Directory. - static IndexReader* open( CL_NS(store)::Directory* directory, bool closeDirectory=false); - - /** - * Returns the time the index in the named directory was last modified. - * Do not use this to check whether the reader is still up-to-date, use - * {@link #isCurrent()} instead. - */ - static uint64_t lastModified(const QString& directory); - - /** - * Returns the time the index in the named directory was last modified. - * Do not use this to check whether the reader is still up-to-date, use - * {@link #isCurrent()} instead. - */ - static uint64_t lastModified(const CL_NS(store)::Directory* directory); - - - /** - * Reads version number from segments files. The version number is - * initialized with a timestamp and then increased by one for each change of - * the index. - * - * @param directory where the index resides. - * @return version number. - * @throws IOException if segments file cannot be read - */ - static int64_t getCurrentVersion(CL_NS(store)::Directory* directory); - - /** - * Reads version number from segments files. The version number is - * initialized with a timestamp and then increased by one for each change of - * the index. - * - * @param directory where the index resides. - * @return version number. - * @throws IOException if segments file cannot be read - */ - static int64_t getCurrentVersion(const QString& directory); - - /** - * Version number when this IndexReader was opened. - */ - int64_t getVersion(); - - /** - * Check whether this IndexReader still works on a current version of the index. - * If this is not the case you will need to re-open the IndexReader to - * make sure you see the latest changes made to the index. - * - * @throws IOException - */ - bool isCurrent(); - - - /** - * Return an array of term frequency vectors for the specified document. - * The array contains a vector for each vectorized field in the document. - * Each vector contains terms and frequencies for all terms in a given vectorized field. - * If no such fields existed, the method returns null. The term vectors that are - * returned my either be of type TermFreqVector or of type TermPositionsVector if - * positions or offsets have been stored. - * - * @param docNumber document for which term frequency vectors are returned - * @return array of term frequency vectors. May be null if no term vectors have been - * stored for the specified document. - * @throws IOException if index cannot be accessed - * @see org.apache.lucene.document.Field.TermVector - */ - virtual bool getTermFreqVectors(int32_t docNumber, Array& result) =0; - - /** - * Return a term frequency vector for the specified document and field. The - * returned vector contains terms and frequencies for the terms in - * the specified field of this document, if the field had the storeTermVector - * flag set. If termvectors had been stored with positions or offsets, a - * TermPositionsVector is returned. - * - * @param docNumber document for which the term frequency vector is returned - * @param field field for which the term frequency vector is returned. - * @return term frequency vector May be null if field does not exist in the specified - * document or term vector was not stored. - * @throws IOException if index cannot be accessed - * @see org.apache.lucene.document.Field.TermVector - */ - virtual TermFreqVector* getTermFreqVector(int32_t docNumber, const TCHAR* field) = 0; - - /** - * Returns true if an index exists at the specified directory. - * If the directory does not exist or if there is no index in it. - * @param directory the directory to check for an index - * @return true if an index exists; false otherwise - */ - static bool indexExists(const QString& directory); - - /** - * Returns true if an index exists at the specified directory. - * If the directory does not exist or if there is no index in it. - * @param directory the directory to check for an index - * @return true if an index exists; false otherwise - * @throws IOException if there is a problem with accessing the index - */ - static bool indexExists(const CL_NS(store)::Directory* directory); - - /** Returns the number of documents in this index. */ - virtual int32_t numDocs() = 0; - - /** Returns one greater than the largest possible document number. - * This may be used to, e.g., determine how big to allocate an array which - * will have an element for every document number in an index. - */ - virtual int32_t maxDoc() const = 0; - - /** Gets the stored fields of the nth - * Document in this index. - * The fields are not cleared before retrieving the document, so the - * object should be new or just cleared. - */ - virtual bool document(int32_t n, CL_NS(document)::Document*) =0; - - _CL_DEPRECATED( document(i, document) ) CL_NS(document)::Document* document(const int32_t n); - - /** Returns true if document n has been deleted */ - virtual bool isDeleted(const int32_t n) = 0; - - /** Returns true if any documents have been deleted */ - virtual bool hasDeletions() const = 0; - - /** Returns true if there are norms stored for this field. */ - virtual bool hasNorms(const TCHAR* field); - - /** Returns an enumeration of all the terms in the index. - * The enumeration is ordered by Term.compareTo(). Each term - * is greater than all that precede it in the enumeration. - * @memory Caller must clean up - */ - virtual TermEnum* terms() const =0; - - /** Returns an enumeration of all terms after a given term. - * The enumeration is ordered by Term.compareTo(). Each term - * is greater than all that precede it in the enumeration. - * @memory Caller must clean up - */ - virtual TermEnum* terms(const Term* t) const = 0; - - /** Returns the number of documents containing the term t. */ - virtual int32_t docFreq(const Term* t) const = 0; - - /* Returns an unpositioned TermPositions enumerator. - * @memory Caller must clean up - */ - virtual TermPositions* termPositions() const = 0; - - /** Returns an enumeration of all the documents which contain - * term. For each document, in addition to the document number - * and frequency of the term in that document, a list of all of the ordinal - * positions of the term in the document is available. Thus, this method - * implements the mapping: - * - *

    - * Term    =>    <docNum, freq, - * <pos1, pos2, ... - * posfreq-1> - * >* - *
- *

This positional information faciliates phrase and proximity searching. - *

The enumeration is ordered by document number. Each document number is - * greater than all that precede it in the enumeration. - * @memory Caller must clean up - */ - TermPositions* termPositions(Term* term) const; - - /** Returns an unpositioned {@link TermDocs} enumerator. - * @memory Caller must clean up - */ - virtual TermDocs* termDocs() const = 0; - - /** Returns an enumeration of all the documents which contain - * term. For each document, the document number, the frequency of - * the term in that document is also provided, for use in search scoring. - * Thus, this method implements the mapping: - *

    Term    =>    <docNum, freq>*
- *

The enumeration is ordered by document number. Each document number - * is greater than all that precede it in the enumeration. - * @memory Caller must clean up - */ - TermDocs* termDocs(Term* term) const; - - /** Deletes the document numbered docNum. Once a document is - * deleted it will not appear in TermDocs or TermPostitions enumerations. - * Attempts to read its field with the {@link #document} - * method will result in an error. The presence of this document may still be - * reflected in the {@link #docFreq} statistic, though - * this will be corrected eventually as the index is further modified. - */ - void deleteDocument(const int32_t docNum); - - ///@deprecated. Use deleteDocument instead. - _CL_DEPRECATED( deleteDocument ) void deleteDoc(const int32_t docNum) - { deleteDocument(docNum); } - - /** Deletes all documents containing term. - * This is useful if one uses a document field to hold a unique ID string for - * the document. Then to delete such a document, one merely constructs a - * term with the appropriate field and the unique ID string as its text and - * passes it to this method. - * See {@link #deleteDocument(int)} for information about when this deletion will - * become effective. - * @return the number of documents deleted - */ - int32_t deleteDocuments(Term* term); - - ///@deprecated. Use deleteDocuments instead. - _CL_DEPRECATED( deleteDocuments ) int32_t deleteTerm(Term* term){ return deleteDocuments(term); } - - /** - * Closes files associated with this index and also saves any new deletions to disk. - * No other methods should be called after this has been called. - */ - void close(); - - ///Checks if the index in the named directory is currently locked. - static bool isLocked(CL_NS(store)::Directory* directory); - - ///Checks if the index in the named directory is currently locked. - static bool isLocked(const QString& directory); - - - ///Forcibly unlocks the index in the named directory. - ///Caution: this should only be used by failure recovery code, - ///when it is known that no other process nor thread is in fact - ///currently accessing this index. - static void unlock(CL_NS(store)::Directory* directory); - static void unlock(const QString& path); - - /** Returns the directory this index resides in. */ - CL_NS(store)::Directory* getDirectory() { return directory; } - - /** Returns true if the file is a lucene filename (based on extension or filename) */ - static bool isLuceneFile(const QString& filename); - - /** - * For classes that need to know when the IndexReader closes (such as caches, etc), - * should pass their callback function to this. - */ - void addCloseCallback(CloseCallback callback, void* parameter); - -protected: - class LockWith : public CL_NS(store)::LuceneLockWith - { - public: - LockWith(CL_NS(store)::LuceneLock* lock, CL_NS(store)::Directory* dir); - - //Reads the segmentinfo file and depending on the number of segments found - //it returns a MultiReader or a SegmentReader - IndexReader* doBody(); - - private: - CL_NS(store)::Directory* directory; - }; - friend class IndexReader::LockWith; - - class CommitLockWith : public CL_NS(store)::LuceneLockWith - { - public: - CommitLockWith(CL_NS(store)::LuceneLock* lock, IndexReader* r); - void doBody(); - - private: - IndexReader* reader; - }; - friend class IndexReader::CommitLockWith; -}; - -CL_NS_END -#endif - - diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/index/IndexWriter.cpp qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/index/IndexWriter.cpp --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/index/IndexWriter.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/index/IndexWriter.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,697 +0,0 @@ -/* - * Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team - * - * Distributable under the terms of either the Apache License (Version 2.0) or - * the GNU Lesser General Public License, as specified in the COPYING file. - * - * Changes are Copyright (C) 2015 The Qt Company Ltd. -*/ -#include "CLucene/StdHeader.h" -#include "IndexWriter.h" - -#include "CLucene/document/Document.h" -#include "CLucene/store/Directory.h" -#include "CLucene/store/Lock.h" -#include "CLucene/util/VoidList.h" -#include "DocumentWriter.h" -#include "SegmentInfos.h" -#include "SegmentMerger.h" - -CL_NS_USE(store) -CL_NS_USE(util) -CL_NS_USE(document) -CL_NS_USE(analysis) -CL_NS_DEF(index) - -const QLatin1String IndexWriter::WRITE_LOCK_NAME("write.lock"); -const QLatin1String IndexWriter::COMMIT_LOCK_NAME("commit.lock"); - -IndexWriter::IndexWriter(const QString& path, Analyzer* a, const bool create, - const bool _closeDir) - : directory(FSDirectory::getDirectory(path, create)) - , analyzer(a) - , segmentInfos(true) - , closeDir(_closeDir) -{ - //Func - Constructor - // Constructs an IndexWriter for the index in path. - //Pre - path != NULL and contains a named directory path - // a holds a valid reference to an analyzer and analyzes the text to - // be indexed create indicates if the indexWriter must create a new - // index located at path or just open it - //Post - If create is true, then a new, empty index has been created in - // path, replacing the index already there, if any. The named - // directory path is owned by this Instance - - CND_PRECONDITION(!path.isEmpty(), "path is NULL"); - - //Continue initializing the instance by _IndexWriter - _IndexWriter(create); -} - -IndexWriter::IndexWriter(Directory* d, Analyzer* a, const bool create, - const bool _closeDir) - : directory(_CL_POINTER(d)) - , analyzer(a) - , segmentInfos(true) - , closeDir(_closeDir) -{ - //Func - Constructor - // Constructs an IndexWriter for the index in path. - //Pre - d contains a valid reference to a directory - // a holds a valid reference to an analyzer and analyzes the text to - // be indexed create indicates if the indexWriter must create a new - // index located at path or just open it - //Post - If create is true, then a new, empty index has been created in - // path, replacing the index already there, if any. The directory d - // is not owned by this Instance - - //Continue initializing the instance by _IndexWriter - _IndexWriter ( create ); -} - -void IndexWriter::_IndexWriter(const bool create) -{ - //Func - Initialises the instances - //Pre - create indicates if the indexWriter must create a new index - // located at path or just open it - - similarity = CL_NS(search)::Similarity::getDefault(); - - useCompoundFile = true; - if ( directory->getDirectoryType() == RAMDirectory::DirectoryType() ) - useCompoundFile = false; - - //Create a ramDirectory - ramDirectory = _CLNEW TransactionalRAMDirectory; - - CND_CONDITION(ramDirectory != NULL, "ramDirectory is NULL"); - - //Initialize the writeLock to - writeLock = NULL; - - //initialise the settings... - maxFieldLength = DEFAULT_MAX_FIELD_LENGTH; - mergeFactor = DEFAULT_MERGE_FACTOR; - maxMergeDocs = DEFAULT_MAX_MERGE_DOCS; - writeLockTimeout = WRITE_LOCK_TIMEOUT; - commitLockTimeout = COMMIT_LOCK_TIMEOUT; - minMergeDocs = DEFAULT_MAX_BUFFERED_DOCS; - termIndexInterval = DEFAULT_TERM_INDEX_INTERVAL; - - //Create a new lock using the name "write.lock" - LuceneLock* newLock = directory->makeLock(IndexWriter::WRITE_LOCK_NAME); - - //Condition check to see if newLock has been allocated properly - CND_CONDITION(newLock != NULL, - "No memory could be allocated for LuceneLock newLock"); - - //Try to obtain a write lock - if (!newLock->obtain(writeLockTimeout)){ - //Write lock could not be obtained so delete it - _CLDELETE(newLock); - //Reset the instance - _finalize(); - //throw an exception because no writelock could be created or obtained - _CLTHROWA(CL_ERR_IO, "Index locked for write or no write access." ); - } - - //The Write Lock has been obtained so save it for later use - this->writeLock = newLock; - - //Create a new lock using the name "commit.lock" - LuceneLock* lock = directory->makeLock(IndexWriter::COMMIT_LOCK_NAME); - - //Condition check to see if lock has been allocated properly - CND_CONDITION(lock != NULL, "No memory could be allocated for LuceneLock lock"); - - LockWith2 with(lock, commitLockTimeout, this, NULL, create); - { - SCOPED_LOCK_MUTEX(directory->THIS_LOCK) // in- & inter-process sync - with.run(); - } - - //Release the commit lock - _CLDELETE(lock); - - isOpen = true; -} - -IndexWriter::~IndexWriter() -{ - //Func - Destructor - //Pre - true - //Post - The instance has been destroyed - close(); - _finalize(); -} - -void IndexWriter::close() -{ - //Func - Flushes all changes to an index, closes all associated files, and - // closes the directory that the index is stored in. - //Pre - closeDir indicates if the directory must be closed or not - //Post - All the changes have been flushed to disk and the write lock has - // been released. The ramDirectory has also been closed. The - // directory has been closed if the reference count of the directory - // reaches zero - - SCOPED_LOCK_MUTEX(THIS_LOCK) - if (isOpen) { - //Flush the Ram Segments - flushRamSegments(); - //Close the ram directory - if (ramDirectory != NULL) { - ramDirectory->close(); - _CLDECDELETE(ramDirectory); - } - - //Check if this instance must close the directory - if (closeDir) - directory->close(); - _CLDECDELETE(directory); - - // release write lock - if (writeLock != NULL) { - writeLock->release(); - _CLDELETE(writeLock); - } - isOpen = false; - } -} - -void IndexWriter::_finalize() -{ - //Func - Releases all the resources of the instance - //Pre - true - //Post - All the releases have been released - - if(writeLock != NULL) { - //release write lock - writeLock->release(); - _CLDELETE( writeLock ); - } - - //Delete the ramDirectory - if (ramDirectory != NULL) { - ramDirectory->close(); - _CLDECDELETE(ramDirectory); - } -} - -int32_t IndexWriter::docCount() -{ - //Func - Counts the number of documents in the index - //Pre - true - //Post - The number of documents have been returned - - SCOPED_LOCK_MUTEX(THIS_LOCK) - - //Initialize count - int32_t count = 0; - - //Iterate through all segmentInfos - for (int32_t i = 0; i < segmentInfos.size(); i++) { - //Get the i-th SegmentInfo - SegmentInfo* si = segmentInfos.info(i); - //Retrieve the number of documents of the segment and add it to count - count += si->docCount; - } - return count; -} - -void IndexWriter::addDocument(Document* doc, Analyzer* analyzer) -{ - //Func - Adds a document to the index - //Pre - doc contains a valid reference to a document - // ramDirectory != NULL - //Post - The document has been added to the index of this IndexWriter - CND_PRECONDITION(ramDirectory != NULL, "ramDirectory is NULL"); - - if (analyzer == NULL) - analyzer = this->analyzer; - - ramDirectory->transStart(); - try { - QString segmentName = newSegmentName(); - CND_CONDITION(!segmentName.isEmpty(), "segmentName is NULL"); - try { - //Create the DocumentWriter using a ramDirectory and analyzer - // supplied by the IndexWriter (this). - DocumentWriter* dw = _CLNEW DocumentWriter(ramDirectory, analyzer, - this ); - CND_CONDITION(dw != NULL, "dw is NULL"); - try { - //Add the client-supplied document to the new segment. - dw->addDocument(segmentName, doc); - } _CLFINALLY ( - _CLDELETE(dw); - ); - - //Create a new SegmentInfo instance about this new segment. - SegmentInfo* si = _CLNEW SegmentInfo(segmentName, 1, ramDirectory); - CND_CONDITION(si != NULL, "Si is NULL"); - { - SCOPED_LOCK_MUTEX(THIS_LOCK) - - //Add the info object for this particular segment to the list - // of all segmentInfos-> - segmentInfos.add(si); - - //Check to see if the segments must be merged - maybeMergeSegments(); - } - } _CLFINALLY() - } catch (...) { - ramDirectory->transAbort(); - throw; -} - ramDirectory->transCommit(); -} - -void IndexWriter::optimize() -{ - //Func - Optimizes the index for which this Instance is responsible - //Pre - true - //Post - - SCOPED_LOCK_MUTEX(THIS_LOCK) - - //Flush the RamSegments to disk - flushRamSegments(); - while (segmentInfos.size() > 1 - || (segmentInfos.size() == 1 - && (SegmentReader::hasDeletions(segmentInfos.info(0)) - || segmentInfos.info(0)->getDir()!=directory - || (useCompoundFile - && (!SegmentReader::usesCompoundFile(segmentInfos.info(0)) - || SegmentReader::hasSeparateNorms(segmentInfos.info(0))))))) { - int32_t minSegment = segmentInfos.size() - mergeFactor; - mergeSegments(minSegment < 0 ? 0 : minSegment); - } -} - - -QString IndexWriter::newSegmentName() -{ - SCOPED_LOCK_MUTEX(THIS_LOCK) - return QLatin1Char('_') + QString::number(segmentInfos.counter++, 36); -} - -void IndexWriter::flushRamSegments() -{ - //Func - Merges all RAM-resident segments. - //Pre - ramDirectory != NULL - //Post - The RAM-resident segments have been merged to disk - - CND_PRECONDITION(ramDirectory != NULL, "ramDirectory is NULL"); - - int32_t minSegment = segmentInfos.size()-1; //don't make this unsigned... - CND_CONDITION(minSegment >= -1, "minSegment must be >= -1"); - - int32_t docCount = 0; - //Iterate through all the segements and check if the directory is a ramDirectory - while (minSegment >= 0 && - segmentInfos.info(minSegment)->getDir() == ramDirectory) { - docCount += segmentInfos.info(minSegment)->docCount; - minSegment--; - } - if (minSegment < 0 || // add one FS segment? - (docCount + segmentInfos.info(minSegment)->docCount) > mergeFactor || - !(segmentInfos.info(segmentInfos.size()-1)->getDir() == ramDirectory)) - minSegment++; - - CND_CONDITION(minSegment >= 0, "minSegment must be >= 0"); - if (minSegment >= segmentInfos.size()) - return; // none to merge - mergeSegments(minSegment); -} - -void IndexWriter::maybeMergeSegments() { - //Func - Incremental Segment Merger - //Pre - - //Post - - - int64_t targetMergeDocs = minMergeDocs; - - // find segments smaller than current target size - while (targetMergeDocs <= maxMergeDocs) { - int32_t minSegment = segmentInfos.size(); - int32_t mergeDocs = 0; - - while (--minSegment >= 0) { - SegmentInfo* si = segmentInfos.info(minSegment); - if (si->docCount >= targetMergeDocs) - break; - mergeDocs += si->docCount; - } - - if (mergeDocs >= targetMergeDocs){ - // found a merge to do - mergeSegments(minSegment+1); - }else - break; - - //increase target size - targetMergeDocs *= mergeFactor; - } -} - -void IndexWriter::mergeSegments(const uint32_t minSegment) -{ - mergeSegments(minSegment, segmentInfos.size()); -} - -void IndexWriter::mergeSegments(const uint32_t minSegment, const uint32_t end) -{ - CLVector segmentsToDelete(false); - QString mergedName = newSegmentName(); -#ifdef _CL_DEBUG_INFO - fprintf(_CL_DEBUG_INFO, "merging segments\n"); -#endif - SegmentMerger merger(this, mergedName); - for (size_t i = minSegment; i < end; i++) { - SegmentInfo* si = segmentInfos.info(i); -#ifdef _CL_DEBUG_INFO - fprintf(_CL_DEBUG_INFO, " %s (%d docs)\n", - si->name.toLocal8Bit().constData(), si->docCount); -#endif - SegmentReader* reader = _CLNEW SegmentReader(si); - merger.add(reader); - // if we own the directory - if ((reader->getDirectory() == this->directory) - || (reader->getDirectory() == this->ramDirectory)) { - // queue segment for deletion - segmentsToDelete.push_back(reader); - } - } - - int32_t mergedDocCount = merger.merge(); - -#ifdef _CL_DEBUG_INFO - fprintf(_CL_DEBUG_INFO, "\n into %s (%d docs)\n", - mergedName.toLocal8Bit().constData(), mergedDocCount); -#endif - - segmentInfos.clearto(minSegment);// remove old infos & add new - segmentInfos.add(_CLNEW SegmentInfo(mergedName, mergedDocCount, directory)); - - // close readers before we attempt to delete now-obsolete segments - merger.closeReaders(); - - LuceneLock* lock = directory->makeLock(IndexWriter::COMMIT_LOCK_NAME); - LockWith2 with (lock, commitLockTimeout, this, &segmentsToDelete, true); - { - SCOPED_LOCK_MUTEX(directory->THIS_LOCK) // in- & inter-process sync - with.run(); - } - _CLDELETE( lock ); - - if (useCompoundFile) { - QStringList filesToDelete; - merger.createCompoundFile(mergedName + QLatin1String(".tmp"), filesToDelete); - - LuceneLock* lock = directory->makeLock(IndexWriter::COMMIT_LOCK_NAME); - LockWithCFS with(lock, commitLockTimeout, directory, this, mergedName, - filesToDelete); - { - SCOPED_LOCK_MUTEX(directory->THIS_LOCK) // in- & inter-process sync - with.run(); - } - _CLDELETE(lock); - } -} - -void IndexWriter::deleteSegments(CLVector* segments) -{ - QStringList deletable; - - {//scope delete deleteArray object - QStringList deleteArray; - readDeleteableFiles(deleteArray); - deleteFiles(deleteArray, deletable); // try to delete deleteable - } - - QStringList files; - for (uint32_t i = 0; i < segments->size(); i++) { - SegmentReader* reader = (*segments)[i]; - files.clear(); - reader->files(files); - if (reader->getDirectory() == this->directory) - deleteFiles(files, deletable); // try to delete our files - else - deleteFiles(files, reader->getDirectory()); // delete, eg, RAM files - } - - writeDeleteableFiles(deletable); // note files we can't delete -} - -void IndexWriter::deleteFiles(const QStringList& files) -{ - QStringList currentDeletable; - readDeleteableFiles(currentDeletable); - - // try to delete deleteable - QStringList deletable; - deleteFiles(currentDeletable, deletable); - - // try to delete our files - deleteFiles(files, deletable); - - // note files we can't delete - writeDeleteableFiles(deletable); -} - -void IndexWriter::readDeleteableFiles(QStringList& result) -{ - if (!directory->fileExists(QLatin1String("deletable"))) - return; - - IndexInput* input = directory->openInput(QLatin1String("deletable")); - try { - // read file names - TCHAR tname[CL_MAX_PATH]; - for (int32_t i = input->readInt(); i > 0; i--) { - int32_t read = input->readString(tname, CL_MAX_PATH); - result.push_back(QString::fromWCharArray(tname, read)); - } - } _CLFINALLY ( - input->close(); - _CLDELETE(input); - ); -} - -void IndexWriter::deleteFiles(const QStringList& files, QStringList& deletable) -{ - QStringList::const_iterator itr; - for (itr = files.begin(); itr != files.end(); ++itr) { - if (!getDirectory()->fileExists((*itr))) - continue; - - if (!getDirectory()->deleteFile((*itr), false)) { - if (directory->fileExists((*itr))) { -#ifdef _CL_DEBUG_INFO - fprintf(_CL_DEBUG_INFO, "%s; Will re-try later.\n", err.what()); -#endif - // add to deletable - deletable.push_back((*itr)); - } - } - } -} - -void IndexWriter::deleteFiles(const QStringList& files, Directory* directory) -{ - QStringList::const_iterator itr; - for (itr = files.begin(); itr != files.end(); ++itr) - directory->deleteFile((*itr), true); -} - -void IndexWriter::writeDeleteableFiles(const QStringList& files) -{ - IndexOutput* output = directory->createOutput(QLatin1String("deleteable.new")); - try { - output->writeInt(files.size()); - - TCHAR tfile[CL_MAX_PATH]; - QStringList::const_iterator itr; - for (itr = files.begin(); itr != files.end(); ++itr) { - tfile[(*itr).toWCharArray(tfile)] = '\0'; - output->writeString(tfile, _tcslen(tfile)); - } - } _CLFINALLY ( - output->close(); - _CLDELETE(output); - ); - - directory->renameFile(QLatin1String("deleteable.new"), - QLatin1String("deletable")); -} - -void IndexWriter::addIndexes(Directory** dirs) -{ - //Func - Add several indexes located in different directories into the current - // one managed by this instance - //Pre - dirs != NULL and contains directories of several indexes - // dirsLength > 0 and contains the number of directories - //Post - The indexes located in the directories in dirs have been merged with - // the pre(current) index. The Resulting index has also been optimized - - SCOPED_LOCK_MUTEX(THIS_LOCK) - - CND_PRECONDITION(dirs != NULL, "dirs is NULL"); - - // start with zero or 1 seg so optimize the current - optimize(); - - int32_t start = segmentInfos.size(); - - //Iterate through the directories - for (int32_t i = 0; dirs[i] != NULL; ++i) { - // DSR: Changed SegmentInfos constructor arg (see bug discussion below). - SegmentInfos sis(false); - sis.read(dirs[i]); - for (int32_t j = 0; j < sis.size(); j++) - segmentInfos.add(sis.info(j)); // add each info - } - - // commented out by tbusch to solve a bug and to be conform with - // java lucene - - // merge newly added segments in log(n) passes - //while (segmentInfos.size() > start + mergeFactor) { - // for (int32_t base = start; base < segmentInfos.size(); base++) { - // int32_t end = min(segmentInfos.size(), base + mergeFactor); - // if (end - base > 1) - // mergeSegments(base, end); - // } - //} - - // cleanup - optimize(); -} - - -void IndexWriter::addIndexes(IndexReader** readers) -{ - SCOPED_LOCK_MUTEX(THIS_LOCK) - optimize(); // start with zero or 1 seg - - QString mergedName = newSegmentName(); - SegmentMerger merger(this, mergedName); - - CLVector segmentsToDelete; - SegmentReader* sReader = NULL; - if (segmentInfos.size() == 1) { // add existing index, if any - sReader = _CLNEW SegmentReader(segmentInfos.info(0)); - merger.add(sReader); - segmentsToDelete.push_back(sReader); // queue segment for deletion - } - - int32_t readersLength = 0; - while (readers[readersLength] != NULL) - merger.add(readers[readersLength++]); - - int32_t docCount = merger.merge(); // merge 'em - - // pop old infos & add new - segmentInfos.clearto(0); - segmentInfos.add(_CLNEW SegmentInfo(mergedName, docCount, directory)); - - if (sReader != NULL) { - sReader->close(); - _CLDELETE(sReader); - } - - LuceneLock* lock = directory->makeLock(IndexWriter::COMMIT_LOCK_NAME); - LockWith2 with(lock, commitLockTimeout, this, &segmentsToDelete, true); - { - // in- & inter-process sync - SCOPED_LOCK_MUTEX(directory->THIS_LOCK) - with.run(); - } - _CLDELETE(lock); - - if (useCompoundFile) { - QStringList filesToDelete; - merger.createCompoundFile(mergedName + QLatin1String(".tmp"), - filesToDelete); - - LuceneLock* cfslock = directory->makeLock(IndexWriter::COMMIT_LOCK_NAME); - LockWithCFS with(cfslock, commitLockTimeout, directory, this, mergedName, - filesToDelete); - { - // in- & inter-process sync - SCOPED_LOCK_MUTEX(directory->THIS_LOCK) - with.run(); - } - _CLDELETE(cfslock); - } -} - -// #pragma mark -- IndexWriter::LockWith2 - -IndexWriter::LockWith2::LockWith2(CL_NS(store)::LuceneLock* lock, - int64_t lockWaitTimeout, - IndexWriter* indexWriter, - CL_NS(util)::CLVector* std, - bool _create) - : CL_NS(store)::LuceneLockWith(lock, lockWaitTimeout) - , create(_create) - , writer(indexWriter) - , segmentsToDelete(std) -{ -} - -void IndexWriter::LockWith2::doBody() -{ - //Func - Writes segmentInfos to or reads segmentInfos from disk - //Pre - writer != NULL - //Post - if create is true then segementInfos has been written to disk - // otherwise segmentInfos has been read from disk - - CND_PRECONDITION(writer != NULL, "writer is NULL"); - - if (create) { - writer->segmentInfos.write(writer->getDirectory()); - // delete now-unused segments - if (segmentsToDelete != NULL) - writer->deleteSegments(segmentsToDelete); - } else { - writer->segmentInfos.read(writer->getDirectory()); - } -} - -// #pragma mark -- IndexWriter::LockWithCFS - -IndexWriter::LockWithCFS::LockWithCFS(CL_NS(store)::LuceneLock* lock, - int64_t lockWaitTimeout, - CL_NS(store)::Directory* dir, - IndexWriter* indexWriter, - const QString& segmentName, - const QStringList& ftd) - : CL_NS(store)::LuceneLockWith(lock, lockWaitTimeout) - , segName(segmentName) - , writer(indexWriter) - , directory(dir) - , filesToDelete(ftd) -{ -} - -void IndexWriter::LockWithCFS::doBody() -{ - //Func - Writes segmentInfos to or reads segmentInfos from disk - //Pre - writer != NULL - //Post - if create is true then segementInfos has been written to disk - // otherwise segmentInfos has been read from disk - - CND_PRECONDITION(directory != NULL, "directory is NULL"); - CND_PRECONDITION(!segName.isEmpty(), "mergedName is NULL"); - - // make compound file visible for SegmentReaders - directory->renameFile(segName + QLatin1String(".tmp"), - segName + QLatin1String(".cfs")); - // delete now unused files of segment - writer->deleteFiles(filesToDelete); -} - -CL_NS_END diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/index/IndexWriter.h qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/index/IndexWriter.h --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/index/IndexWriter.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/index/IndexWriter.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,425 +0,0 @@ -/* - * Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team - * - * Distributable under the terms of either the Apache License (Version 2.0) or - * the GNU Lesser General Public License, as specified in the COPYING file. - * - * Changes are Copyright (C) 2015 The Qt Company Ltd. -*/ -#ifndef _lucene_index_IndexWriter_ -#define _lucene_index_IndexWriter_ - -#if defined(_LUCENE_PRAGMA_ONCE) -# pragma once -#endif - -#include -#include - -#include "CLucene/analysis/AnalysisHeader.h" -#include "CLucene/util/VoidList.h" -#include "CLucene/search/Similarity.h" -#include "CLucene/store/Lock.h" -#include "CLucene/store/TransactionalRAMDirectory.h" - -#include "SegmentHeader.h" - -CL_NS_DEF(index) - -/** -An IndexWriter creates and maintains an index. - -The third argument to the -constructor -determines whether a new index is created, or whether an existing index is -opened for the addition of new documents. - -In either case, documents are added with the addDocument method. -When finished adding documents, close should be called. - -

If an index will not have more documents added for a while and optimal search -performance is desired, then the optimize -method should be called before the index is closed. - -

Opening an IndexWriter creates a lock file for the directory in use. Trying to open -another IndexWriter on the same directory will lead to an IOException. The IOException -is also thrown if an IndexReader on the same directory is used to delete documents -from the index. - -@see IndexModifier IndexModifier supports the important methods of IndexWriter plus deletion -*/ -class IndexWriter : LUCENE_BASE -{ - class LockWith2 : public CL_NS(store)::LuceneLockWith - { - public: - LockWith2(CL_NS(store)::LuceneLock* lock, - int64_t lockWaitTimeout, - IndexWriter* wr, - CL_NS(util)::CLVector* std, - bool create); - - ~LockWith2() {} - - void doBody(); - - private: - bool create; - IndexWriter* writer; - CL_NS(util)::CLVector* segmentsToDelete; - }; - friend class LockWith2; - - class LockWithCFS : public CL_NS(store)::LuceneLockWith - { - public: - LockWithCFS(CL_NS(store)::LuceneLock* lock, - int64_t lockWaitTimeout, - CL_NS(store)::Directory* dir, - IndexWriter* wr, - const QString& segName, - const QStringList& ftd); - - ~LockWithCFS() {} - - void doBody(); - - private: - QString segName; - IndexWriter* writer; - CL_NS(store)::Directory* directory; - QStringList filesToDelete; - }; - friend class IndexWriter::LockWithCFS; - - // indicates if the writers is open - this way close can be called multiple - // times - bool isOpen; - - // how to analyze text - CL_NS(analysis)::Analyzer* analyzer; - - CL_NS(search)::Similarity* similarity; // how to normalize - - /** Use compound file setting. Normally defaults to true, except when - * using a RAMDirectory. This minimizes the number of files used. - * Setting this to false may improve indexing performance, but - * may also cause file handle problems. - */ - bool useCompoundFile; - bool closeDir; - - // for temp segs - CL_NS(store)::TransactionalRAMDirectory* ramDirectory; - - CL_NS(store)::LuceneLock* writeLock; - - void _IndexWriter(const bool create); - - void _finalize(); - - // where this index resides - CL_NS(store)::Directory* directory; - - - int32_t getSegmentsCounter() { return segmentInfos.counter; } - int32_t maxFieldLength; - int32_t mergeFactor; - int32_t minMergeDocs; - int32_t maxMergeDocs; - int32_t termIndexInterval; - - int64_t writeLockTimeout; - int64_t commitLockTimeout; -public: - DEFINE_MUTEX(THIS_LOCK) - - // Release the write lock, if needed. - SegmentInfos segmentInfos; - - // Release the write lock, if needed. - ~IndexWriter(); - - /** - * The Java implementation of Lucene silently truncates any tokenized - * field if the number of tokens exceeds a certain threshold. Although - * that threshold is adjustable, it is easy for the client programmer - * to be unaware that such a threshold exists, and to become its - * unwitting victim. - * CLucene implements a less insidious truncation policy. Up to - * DEFAULT_MAX_FIELD_LENGTH tokens, CLucene behaves just as JLucene - * does. If the number of tokens exceeds that threshold without any - * indication of a truncation preference by the client programmer, - * CLucene raises an exception, prompting the client programmer to - * explicitly set a truncation policy by adjusting maxFieldLength. - */ - LUCENE_STATIC_CONSTANT(int32_t, DEFAULT_MAX_FIELD_LENGTH = 10000); - LUCENE_STATIC_CONSTANT(int32_t, FIELD_TRUNC_POLICY__WARN = -1); - int32_t getMaxFieldLength() const{ return maxFieldLength; } - void setMaxFieldLength(int32_t val){ maxFieldLength = val; } - - /** - * Default value is 10. Change using {@link #setMaxBufferedDocs(int)}. - */ - LUCENE_STATIC_CONSTANT(int32_t, DEFAULT_MAX_BUFFERED_DOCS = 10); - /** Determines the minimal number of documents required before the buffered - * in-memory documents are merging and a new Segment is created. - * Since Documents are merged in a {@link RAMDirectory}, - * large value gives faster indexing. At the same time, mergeFactor limits - * the number of files open in a FSDirectory. - * - *

The default value is DEFAULT_MAX_BUFFERED_DOCS.*/ - void setMaxBufferedDocs(int32_t val){ minMergeDocs = val; } - /** - * @see #setMaxBufferedDocs - */ - int32_t getMaxBufferedDocs(){ return minMergeDocs; } - - /** - * Default value for the write lock timeout (1,000). - */ - LUCENE_STATIC_CONSTANT(int64_t, WRITE_LOCK_TIMEOUT = 1000); - /** - * Sets the maximum time to wait for a write lock (in milliseconds). - */ - void setWriteLockTimeout(int64_t writeLockTimeout) - { this->writeLockTimeout = writeLockTimeout; } - /** - * @see #setWriteLockTimeout - */ - int64_t getWriteLockTimeout() { return writeLockTimeout; } - - /** - * Default value for the commit lock timeout (10,000). - */ - LUCENE_STATIC_CONSTANT(int64_t, COMMIT_LOCK_TIMEOUT = 10000); - /** - * Sets the maximum time to wait for a commit lock (in milliseconds). - */ - void setCommitLockTimeout(int64_t commitLockTimeout) - { this->commitLockTimeout = commitLockTimeout; } - /** - * @see #setCommitLockTimeout - */ - int64_t getCommitLockTimeout() { return commitLockTimeout; } - - static const QLatin1String WRITE_LOCK_NAME; //"write.lock"; - static const QLatin1String COMMIT_LOCK_NAME; //"commit.lock"; - - /** - * Default value is 10. Change using {@link #setMergeFactor(int)}. - */ - LUCENE_STATIC_CONSTANT(int32_t, DEFAULT_MERGE_FACTOR = 10); - /* Determines how often segment indices are merged by addDocument(). With - * smaller values, less RAM is used while indexing, and searches on - * unoptimized indices are faster, but indexing speed is slower. With larger - * values more RAM is used while indexing and searches on unoptimized indices - * are slower, but indexing is faster. Thus larger values (> 10) are best - * for batched index creation, and smaller values (< 10) for indices that are - * interactively maintained. - * - *

This must never be less than 2. The default value is 10. - */ - int32_t getMergeFactor() const{ return mergeFactor; } - void setMergeFactor(int32_t val){ mergeFactor = val; } - - - /** Expert: The fraction of terms in the "dictionary" which should be stored - * in RAM. Smaller values use more memory, but make searching slightly - * faster, while larger values use less memory and make searching slightly - * slower. Searching is typically not dominated by dictionary lookup, so - * tweaking this is rarely useful. - */ - LUCENE_STATIC_CONSTANT(int32_t, DEFAULT_TERM_INDEX_INTERVAL = 128); - /** Expert: Set the interval between indexed terms. Large values cause less - * memory to be used by IndexReader, but slow random-access to terms. Small - * values cause more memory to be used by an IndexReader, and speed - * random-access to terms. - * - * This parameter determines the amount of computation required per query - * term, regardless of the number of documents that contain that term. In - * particular, it is the maximum number of other terms that must be - * scanned before a term is located and its frequency and position information - * may be processed. In a large index with user-entered query terms, query - * processing time is likely to be dominated not by term lookup but rather - * by the processing of frequency and positional data. In a small index - * or when many uncommon query terms are generated (e.g., by wildcard - * queries) term lookup may become a dominant cost. - * - * In particular, numUniqueTerms/interval terms are read into - * memory by an IndexReader, and, on average, interval/2 terms - * must be scanned for each random term access. - * - * @see #DEFAULT_TERM_INDEX_INTERVAL - */ - void setTermIndexInterval(int32_t interval) { termIndexInterval = interval; } - /** Expert: Return the interval between indexed terms. - * - * @see #setTermIndexInterval(int) - */ - int32_t getTermIndexInterval() { return termIndexInterval; } - - /** Determines the minimal number of documents required before the buffered - * in-memory documents are merging and a new Segment is created. - * Since Documents are merged in a {@link RAMDirectory}, - * large value gives faster indexing. At the same time, mergeFactor limits - * the number of files open in a FSDirectory. - * - *

The default value is 10.*/ - int32_t getMinMergeDocs() const{ return minMergeDocs; } - void setMinMergeDocs(int32_t val){ minMergeDocs = val; } - - /** Determines the largest number of documents ever merged by addDocument(). - * Small values (e.g., less than 10,000) are best for interactive indexing, - * as this limits the length of pauses while indexing to a few seconds. - * Larger values are best for batched indexing and speedier searches. - * - *

The default value is {@link #DEFAULT_MAX_MERGE_DOCS}. - */ - LUCENE_STATIC_CONSTANT(int32_t, DEFAULT_MAX_MERGE_DOCS = LUCENE_INT32_MAX_SHOULDBE); - /**Determines the largest number of documents ever merged by addDocument(). - * Small values (e.g., less than 10,000) are best for interactive indexing, - * as this limits the length of pauses while indexing to a few seconds. - * Larger values are best for batched indexing and speedier searches. - * - *

The default value is {@link Integer#MAX_VALUE}. - */ - int32_t getMaxMergeDocs() const{ return maxMergeDocs; } - void setMaxMergeDocs(int32_t val){ maxMergeDocs = val; } - - /** - * Constructs an IndexWriter for the index in path. - * Text will be analyzed with a. If create - * is true, then a new, empty index will be created in - * path, replacing the index already there, if any. - * - * @param path the path to the index directory - * @param a the analyzer to use - * @param create true to create the index or overwrite - * the existing one; false to append to the existing - * index - * @throws IOException if the directory cannot be read/written to, or - * if it does not exist, and create is - * false - */ - IndexWriter(const QString& path, CL_NS(analysis)::Analyzer* a, - const bool create, const bool closeDir = true); - - - /**Constructs an IndexWriter for the index in d. Text will be - * analyzed with a. If create is true, then a new, - * empty index will be created in d, replacing the index already - * there, if any. - */ - IndexWriter(CL_NS(store)::Directory* d, CL_NS(analysis)::Analyzer* a, - const bool create, const bool closeDir = false); - - // Flushes all changes to an index, closes all associated files, and closes - // the directory that the index is stored in. - void close(); - - // Returns the number of documents currently in this index. synchronized - int32_t docCount(); - - - // Adds a document to this index, using the provided analyzer instead of - // the value of {@link #getAnalyzer()}. If the document contains more than - // {@link #setMaxFieldLength(int)} terms for a given field, the remainder - // are discarded. - void addDocument(CL_NS(document)::Document* doc, - CL_NS(analysis)::Analyzer* analyzer = NULL); - - - // Merges all segments together into a single segment, optimizing an index - // for search. synchronized - void optimize(); - - - /**Merges all segments from an array of indices into this index. - * - *

This may be used to parallelize batch indexing. A large document - * collection can be broken into sub-collections. Each sub-collection can be - * indexed in parallel, on a different thread, process or machine. The - * complete index can then be created by merging sub-collection indices - * with this method. - * - *

After this completes, the index is optimized. - *@synchronized - */ - void addIndexes(CL_NS(store)::Directory** dirs); - - /** Merges the provided indexes into this index. - *

After this completes, the index is optimized.

- *

The provided IndexReaders are not closed.

- */ - void addIndexes(IndexReader** readers); - - - /** Returns the directory this index resides in. */ - CL_NS(store)::Directory* getDirectory() { return directory; } - - /** Get the current setting of whether to use the compound file format. - * Note that this just returns the value you set with setUseCompoundFile(boolean) - * or the default. You cannot use this to query the status of an existing index. - * @see #setUseCompoundFile(boolean) - */ - bool getUseCompoundFile() { return useCompoundFile; } - - /** Setting to turn on usage of a compound file. When on, multiple files - * for each segment are merged into a single file once the segment creation - * is finished. This is done regardless of what directory is in use. - */ - void setUseCompoundFile(bool value) { useCompoundFile = value; } - - - /** Expert: Set the Similarity implementation used by this IndexWriter. - * - * @see Similarity#setDefault(Similarity) - */ - void setSimilarity(CL_NS(search)::Similarity* similarity) - { this->similarity = similarity; } - - /** Expert: Return the Similarity implementation used by this IndexWriter. - * - *

This defaults to the current value of {@link Similarity#getDefault()}. - */ - CL_NS(search)::Similarity* getSimilarity() { return this->similarity; } - - /** Returns the analyzer used by this index. */ - CL_NS(analysis)::Analyzer* getAnalyzer() { return analyzer; } - -private: - /** Merges all RAM-resident segments. */ - void flushRamSegments(); - - /** Incremental segment merger. */ - void maybeMergeSegments(); - - // Pops segments off of segmentInfos stack down to minSegment, merges them, - // and pushes the merged index onto the top of the segmentInfos stack. - void mergeSegments(const uint32_t minSegment); - - // Merges the named range of segments, replacing them in the stack with a - // single segment. - void mergeSegments(const uint32_t minSegment, const uint32_t end); - - // Some operating systems (e.g. Windows) don't permit a file to be deleted - // while it is opened for read (e.g. by another process or thread). So we - // assume that when a delete fails it is because the file is open in another - // process, and queue the file for subsequent deletion. - void deleteSegments(CL_NS(util)::CLVector* segments); - - void deleteFiles(const QStringList& files); - void readDeleteableFiles(QStringList& files); - void deleteFiles(const QStringList& files, QStringList& deletable); - void deleteFiles(const QStringList& files, CL_NS(store)::Directory* directory); - void writeDeleteableFiles(const QStringList& files); - - // synchronized - QString newSegmentName(); -}; - -CL_NS_END - -#endif diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/index/MultiReader.cpp qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/index/MultiReader.cpp --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/index/MultiReader.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/index/MultiReader.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,722 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#include "CLucene/StdHeader.h" -#include "MultiReader.h" - -#include "IndexReader.h" -#include "CLucene/document/Document.h" -#include "Terms.h" -#include "SegmentMergeQueue.h" - -CL_NS_USE(store) -CL_NS_USE(util) -CL_NS_DEF(index) - -MultiReader::MultiReader(IndexReader** subReaders): - IndexReader(subReaders == NULL || subReaders[0] == NULL ? NULL : subReaders[0]->getDirectory()), - normsCache(true, true) -{ - initialize(subReaders); -} - -MultiReader::MultiReader(Directory* directory, SegmentInfos* sis, IndexReader** subReaders): - IndexReader(directory, sis, false), - normsCache(true, true) -{ - initialize(subReaders); -} - - -MultiReader::~MultiReader() { -//Func - Destructor -//Pre - true -//Post - The instance has been destroyed all IndexReader instances -// this instance managed have been destroyed to - - _CLDELETE_ARRAY(ones); - _CLDELETE_ARRAY(starts); - - //Iterate through the subReaders and destroy each reader - if (subReaders && subReadersLength > 0) { - for (int32_t i = 0; i < subReadersLength; i++) { - _CLDELETE(subReaders[i]); - } - } - //Destroy the subReaders array - _CLDELETE_ARRAY(subReaders); -} - -void MultiReader::initialize(IndexReader** subReaders){ - this->subReadersLength = 0; - this->subReaders = subReaders; - - //count the subReaders size - if ( subReaders != NULL ){ - while ( subReaders[subReadersLength] != NULL ){ - subReadersLength++; - } - } - _maxDoc = 0; - _numDocs = -1; - ones = NULL; - - starts = _CL_NEWARRAY(int32_t,subReadersLength + 1); // build starts array - for (int32_t i = 0; i < subReadersLength; i++) { - starts[i] = _maxDoc; - - // compute maxDocs - _maxDoc += subReaders[i]->maxDoc(); - if (subReaders[i]->hasDeletions()) - _hasDeletions = true; - } - starts[subReadersLength] = _maxDoc; -} - -bool MultiReader::getTermFreqVectors(int32_t n, Array& result){ - int32_t i = readerIndex(n); // find segment num - return subReaders[i]->getTermFreqVectors(n - starts[i], result); // dispatch to segment -} - -TermFreqVector* MultiReader::getTermFreqVector(int32_t n, const TCHAR* field){ - int32_t i = readerIndex(n); // find segment num - return subReaders[i]->getTermFreqVector(n - starts[i], field); -} - - -int32_t MultiReader::numDocs() { - SCOPED_LOCK_MUTEX(THIS_LOCK) - if (_numDocs == -1) { // check cache - int32_t n = 0; // cache miss--recompute - for (int32_t i = 0; i < subReadersLength; i++) - n += subReaders[i]->numDocs(); // sum from readers - _numDocs = n; - } - return _numDocs; -} - -int32_t MultiReader::maxDoc() const { - return _maxDoc; -} - -bool MultiReader::document(int32_t n, CL_NS(document)::Document* doc){ - int32_t i = readerIndex(n); // find segment num - return subReaders[i]->document(n - starts[i],doc); // dispatch to segment reader -} - -bool MultiReader::isDeleted(const int32_t n) { - int32_t i = readerIndex(n); // find segment num - return subReaders[i]->isDeleted(n - starts[i]); // dispatch to segment reader -} - -uint8_t* MultiReader::norms(const TCHAR* field){ - SCOPED_LOCK_MUTEX(THIS_LOCK) - uint8_t* bytes; - bytes = normsCache.get(field); - if (bytes != NULL){ - return bytes; // cache hit - } - - if ( !hasNorms(field) ) - return fakeNorms(); - - bytes = _CL_NEWARRAY(uint8_t,maxDoc()); - for (int32_t i = 0; i < subReadersLength; i++) - subReaders[i]->norms(field, bytes + starts[i]); - - //Unfortunately the data in the normCache can get corrupted, since it's being loaded with string - //keys that may be deleted while still in use by the map. To prevent this field is duplicated - //and then stored in the normCache - TCHAR* key = STRDUP_TtoT(field); - //update cache - normsCache.put(key, bytes); - - return bytes; -} - -void MultiReader::norms(const TCHAR* field, uint8_t* result) { - SCOPED_LOCK_MUTEX(THIS_LOCK) - uint8_t* bytes = normsCache.get(field); - if (bytes==NULL && !hasNorms(field)) - bytes=fakeNorms(); - - if (bytes != NULL){ // cache hit - int32_t len = maxDoc(); - memcpy(result,bytes,len * sizeof(int32_t)); - } - - for (int32_t i = 0; i < subReadersLength; i++) // read from segments - subReaders[i]->norms(field, result + starts[i]); -} - - -void MultiReader::doSetNorm(int32_t n, const TCHAR* field, uint8_t value){ - normsCache.remove(field); // clear cache - int32_t i = readerIndex(n); // find segment num - subReaders[i]->setNorm(n-starts[i], field, value); // dispatch -} - -TermEnum* MultiReader::terms() const { - return _CLNEW MultiTermEnum(subReaders, starts, NULL); -} - -TermEnum* MultiReader::terms(const Term* term) const { - return _CLNEW MultiTermEnum(subReaders, starts, term); -} - -int32_t MultiReader::docFreq(const Term* t) const { - int32_t total = 0; // sum freqs in Multi - for (int32_t i = 0; i < subReadersLength; i++) - total += subReaders[i]->docFreq(t); - return total; -} - -TermDocs* MultiReader::termDocs() const { - TermDocs* ret = _CLNEW MultiTermDocs(subReaders, starts); - return ret; -} - -TermPositions* MultiReader::termPositions() const { - TermPositions* ret = (TermPositions*)_CLNEW MultiTermPositions(subReaders, starts); - return ret; -} - -void MultiReader::doDelete(const int32_t n) { - _numDocs = -1; // invalidate cache - int32_t i = readerIndex(n); // find segment num - subReaders[i]->deleteDocument(n - starts[i]); // dispatch to segment reader - _hasDeletions = true; -} - -int32_t MultiReader::readerIndex(const int32_t n) const { // find reader for doc n: - int32_t lo = 0; // search starts array - int32_t hi = subReadersLength - 1; // for first element less - // than n, return its index - while (hi >= lo) { - int32_t mid = (lo + hi) >> 1; - int32_t midValue = starts[mid]; - if (n < midValue) - hi = mid - 1; - else if (n > midValue) - lo = mid + 1; - else{ // found a match - while (mid+1 < subReadersLength && starts[mid+1] == midValue) { - mid++; // scan to last match - } - return mid; - } - } - return hi; -} - -bool MultiReader::hasNorms(const TCHAR* field) { - for (int i = 0; i < subReadersLength; i++) { - if (subReaders[i]->hasNorms(field)) - return true; - } - return false; -} -uint8_t* MultiReader::fakeNorms() { - if (ones==NULL) - ones=SegmentReader::createFakeNorms(maxDoc()); - return ones; -} - -void MultiReader::doUndeleteAll(){ - for (int32_t i = 0; i < subReadersLength; i++) - subReaders[i]->undeleteAll(); - _hasDeletions = false; - _numDocs = -1; -} -void MultiReader::doCommit() { - for (int32_t i = 0; i < subReadersLength; i++) - subReaders[i]->commit(); -} - -void MultiReader::doClose() { - SCOPED_LOCK_MUTEX(THIS_LOCK) - for (int32_t i = 0; i < subReadersLength; i++){ - subReaders[i]->close(); - } -} - - -void MultiReader::getFieldNames(FieldOption fldOption, StringArrayWithDeletor& retarray){ - StringArrayWithDeletor temp; - CLHashList hashList; - for (int32_t i = 0; i < subReadersLength; i++) { - IndexReader* reader = subReaders[i]; - reader->getFieldNames(fldOption, temp); - - //create a unique list of names. - StringArrayWithDeletor::iterator itr = temp.begin(); - while ( itr != temp.end() ){ - if ( hashList.find(*itr) == hashList.end() ) - hashList.insert(STRDUP_TtoT(*itr)); - itr++; - } - } - //move the items into the return - CLHashList::iterator itr = hashList.begin(); - while ( itr != hashList.end() ){ - retarray.push_back(*itr);//no need to copy, already done! - itr++; - } -} - - -MultiTermDocs::MultiTermDocs(){ -//Func - Default constructor -// Initialises an empty MultiTermDocs. -// This constructor is needed to allow the constructor of MultiTermPositions -// initialise the instance by itself -//Pre - true -//Post - An empty - - subReaders = NULL; - subReadersLength = 0; - starts = NULL; - base = 0; - pointer = 0; - current = NULL; - term = NULL; - readerTermDocs = NULL; -} - -MultiTermDocs::MultiTermDocs(IndexReader** r, const int32_t* s){ -//Func - Constructor -//Pre - if r is NULL then rLen must be 0 else if r != NULL then rLen > 0 -// s != NULL -//Post - The instance has been created - - //count readers - subReadersLength = 0; - subReaders = r; - - CND_PRECONDITION(s != NULL, "s is NULL"); - - if ( subReaders != NULL ){ - while ( subReaders[subReadersLength] != NULL ) - subReadersLength++; - } - - starts = s; - base = 0; - pointer = 0; - current = NULL; - term = NULL; - - readerTermDocs = NULL; - - //Check if there are subReaders - if(subReaders != NULL && subReadersLength > 0){ - readerTermDocs = _CL_NEWARRAY(TermDocs*, subReadersLength+1); - - CND_CONDITION(readerTermDocs != NULL,"No memory could be allocated for readerTermDocs"); - - //Initialize the readerTermDocs pointer array to NULLs - for ( int32_t i=0;idoc(); -} -int32_t MultiTermDocs::freq() const { - CND_PRECONDITION(current!=NULL,"current==NULL, check that next() was called"); - return current->freq(); -} - -void MultiTermDocs::seek(TermEnum* termEnum){ - seek(termEnum->term(false)); -} - -void MultiTermDocs::seek( Term* tterm) { -//Func - Resets the instance for a new search -//Pre - tterm != NULL -//Post - The instance has been reset for a new search - - CND_PRECONDITION(tterm != NULL, "tterm is NULL"); - - //Assigning tterm is done as below for a reason - //The construction ensures that if seek is called from within - //MultiTermDocs with as argument this->term (seek(this->term)) that the assignment - //will succeed and all referencecounters represent the correct situation - - //Get a pointer from tterm and increase its reference counter - Term *TempTerm = _CL_POINTER(tterm); - - //Finialize term to ensure we decrease the reference counter of the instance which term points to - _CLDECDELETE(term); - - //Assign TempTerm to term - term = TempTerm; - - base = 0; - pointer = 0; - current = NULL; -} - -bool MultiTermDocs::next() { - if (current != NULL && current->next()) { - return true; - } else if (pointer < subReadersLength) { - base = starts[pointer]; - current = termDocs(pointer++); - return next(); - } else - return false; -} - -int32_t MultiTermDocs::read(int32_t* docs, int32_t* freqs, int32_t length) { - while (true) { - while (current == NULL) { - if (pointer < subReadersLength) { // try next segment - base = starts[pointer]; - current = termDocs(pointer++); - } else { - return 0; - } - } - int32_t end = current->read(docs, freqs,length); - if (end == 0) { // none left in segment - current = NULL; - } else { // got some - int32_t b = base; // adjust doc numbers - for (int32_t i = 0; i < end; i++) - docs[i] += b; - return end; - } - } -} - -bool MultiTermDocs::skipTo(const int32_t target) { - do { - if (!next()) - return false; - } while (target > doc()); - return true; -} - -void MultiTermDocs::close() { -//Func - Closes all MultiTermDocs managed by this instance -//Pre - true -//Post - All the MultiTermDocs have been closed - - - //Check if readerTermDocs is valid - if (readerTermDocs){ - TermDocs* curTD = NULL; - //iterate through the readerTermDocs array - for (int32_t i = 0; i < subReadersLength; i++) { - //Retrieve the i-th TermDocs instance - curTD = readerTermDocs[i]; - - //Check if it is a valid pointer - if (curTD != NULL) { - //Close it - curTD->close(); - _CLDELETE(curTD); - } - } - - _CLDELETE_ARRAY(readerTermDocs); - } - - //current previously pointed to a member of readerTermDocs; ensure that - //it doesn't now point to invalid memory. - current = NULL; - base = 0; - pointer = 0; - - _CLDECDELETE(term); -} - -TermDocs* MultiTermDocs::termDocs(const IndexReader* reader) const { - TermDocs* ret = reader->termDocs(); - return ret; -} - -TermDocs* MultiTermDocs::termDocs(const int32_t i) const { - if (term == NULL) - return NULL; - TermDocs* result = readerTermDocs[i]; - if (result == NULL){ - readerTermDocs[i] = termDocs(subReaders[i]); - result = readerTermDocs[i]; - } - result->seek(term); - - return result; -} - - -MultiTermEnum::MultiTermEnum( - IndexReader** subReaders, const int32_t *starts, const Term* t){ -//Func - Constructor -// Opens all enumerations of all readers -//Pre - readers != NULL and contains an array of IndexReader instances each responsible for -// reading a single segment -// subReadersLength >= 0 and represents the number of readers in the readers array -// starts is an array of -//Post - An instance of has been created - -//Pre - if readers is NULL then subReadersLength must be 0 else if readers != NULL then subReadersLength > 0 -// s != NULL -//Post - The instance has been created - - int32_t subReadersLength = 0; - if ( subReaders != NULL ){ - while ( subReaders[subReadersLength] != NULL ) - subReadersLength++; - } - CND_PRECONDITION(starts != NULL,"starts is NULL"); - - //Temporary variables - IndexReader* reader = NULL; - TermEnum* termEnum = NULL; - SegmentMergeInfo* smi = NULL; - _docFreq = 0; - _term = NULL; - queue = _CLNEW SegmentMergeQueue(subReadersLength); - - CND_CONDITION (queue != NULL, "Could not allocate memory for queue"); - - //iterate through all the readers - for ( int32_t i=0;iterms(t); - }else{ - //termEnum is an enumeration of all the Terms and TermInfos in the set. - termEnum = reader->terms(); - } - - //Instantiate an new SegmentMerginfo - smi = _CLNEW SegmentMergeInfo(starts[i], termEnum, reader); - - // Note that in the call termEnum->getTerm(false) below false is required because - // otherwise a reference is leaked. By passing false getTerm is - // ordered to return an unowned reference instead. (Credits for DSR) - if (t == NULL ? smi->next() : termEnum->term(false) != NULL){ - // initialize queue - queue->put(smi); - } else{ - //Close the SegmentMergeInfo - smi->close(); - //And have it deleted - _CLDELETE(smi); - } - } - - //Check if the queue has elements - if (t != NULL && queue->size() > 0) { - next(); - } -} - -MultiTermEnum::~MultiTermEnum(){ -//Func - Destructor -//Pre - true -//Post - All the resource have been freed and the instance has been deleted - - //Close the enumeration - close(); - - //Delete the queue - _CLDELETE(queue); -} - -bool MultiTermEnum::next(){ -//Func - Move the current term to the next in the set of enumerations -//Pre - true -//Post - Returns true if term has been moved to the next in the set of enumerations -// Returns false if this was not possible - - SegmentMergeInfo* top = queue->top(); - if (top == NULL) { - _CLDECDELETE(_term); - _term = NULL; - return false; - } - - //The getTerm method requires the client programmer to indicate whether he - // owns the returned reference, so we can discard ours - // right away. - _CLDECDELETE(_term); - - //Assign term the term of top and make sure the reference counter is increased - _term = _CL_POINTER(top->term); - _docFreq = 0; - - //Find the next term - while (top != NULL && _term->compareTo(top->term) == 0) { - //don't delete, this is the top - queue->pop(); - // increment freq - _docFreq += top->termEnum->docFreq(); - if (top->next()){ - // restore queue - queue->put(top); - }else{ - // done with a segment - top->close(); - _CLDELETE(top); - } - top = queue->top(); - } - - return true; -} - - -Term* MultiTermEnum::term() { -//Func - Returns the current term of the set of enumerations -//Pre - pointer is true or false and indicates if the reference counter -// of term must be increased or not -// next() must have been called once! -//Post - pointer = true -> term has been returned with an increased reference counter -// pointer = false -> term has been returned - - return _CL_POINTER(_term); -} - -Term* MultiTermEnum::term(bool pointer) { - if ( pointer ) - return _CL_POINTER(_term); - else - return _term; -} - -int32_t MultiTermEnum::docFreq() const { -//Func - Returns the document frequency of the current term in the set -//Pre - termInfo != NULL -// next() must have been called once -//Post - The document frequency of the current enumerated term has been returned - - return _docFreq; -} - - -void MultiTermEnum::close() { -//Func - Closes the set of enumerations in the queue -//Pre - queue holds a valid reference to a SegmentMergeQueue -//Post - The queue has been closed all SegmentMergeInfo instance have been deleted by -// the closing of the queue -// term has been finalized and reset to NULL - - // Needed when this enumeration hasn't actually been exhausted yet - _CLDECDELETE(_term); - - //Close the queue This will destroy all SegmentMergeInfo instances! - queue->close(); - -} - - - - - -MultiTermPositions::MultiTermPositions(IndexReader** r, const int32_t* s){ -//Func - Constructor -//Pre - if r is NULL then rLen must be 0 else if r != NULL then rLen > 0 -// s != NULL -//Post - The instance has been created - - subReaders = r; - subReadersLength = 0; - if ( subReaders != NULL ){ - while ( subReaders[subReadersLength] != NULL ) - subReadersLength ++ ; - } - - CND_PRECONDITION(s != NULL, "s is NULL"); - - starts = s; - base = 0; - pointer = 0; - current = NULL; - term = NULL; - - readerTermDocs = NULL; - - //Check if there are readers - if(subReaders != NULL && subReadersLength > 0){ - readerTermDocs = (TermDocs**)_CL_NEWARRAY(SegmentTermPositions*,subReadersLength); - - CND_CONDITION(readerTermDocs != NULL,"No memory could be allocated for readerTermDocs"); - - //Initialize the readerTermDocs pointer array - for ( int32_t i=0;icurrent to always -// be a SegmentTermPositions rather than merely a SegmentTermDocs. -// To that end, we override the termDocs(IndexReader&) method to produce -// a SegmentTermPositions via the underlying reader's termPositions method -// rather merely producing a SegmentTermDocs via the reader's termDocs -// method. - - TermPositions* tp = reader->termPositions(); - TermDocs* ret = tp->__asTermDocs(); - - CND_CONDITION(ret != NULL, - "Dynamic downcast in MultiTermPositions::termDocs from" - " TermPositions to TermDocs failed." - ); - return ret; - } - -int32_t MultiTermPositions::nextPosition() { - //Func - - //Pre - current != NULL - //Post - - CND_PRECONDITION(current != NULL,"current is NULL"); - - TermPositions* curAsTP = current->__asTermPositions(); - - CND_CONDITION(curAsTP != NULL, - "Dynamic downcast in MultiTermPositions::nextPosition from" - " SegmentTermDocs to TermPositions failed." - ) - return curAsTP->nextPosition(); -} - - -CL_NS_END diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/index/MultiReader.h qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/index/MultiReader.h --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/index/MultiReader.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/index/MultiReader.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,202 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#ifndef _lucene_index_MultiReader -#define _lucene_index_MultiReader - -#if defined(_LUCENE_PRAGMA_ONCE) -# pragma once -#endif - -#include "SegmentHeader.h" -#include "IndexReader.h" -#include "CLucene/document/Document.h" -#include "Terms.h" -#include "SegmentMergeQueue.h" - -CL_NS_DEF(index) - -/** An IndexReader which reads multiple indexes, appending their content. -*/ -class MultiTermDocs:public virtual TermDocs { -private: -protected: - TermDocs** readerTermDocs; - - IndexReader** subReaders; - int32_t subReadersLength; - const int32_t* starts; - Term* term; - - int32_t base; - int32_t pointer; - - TermDocs* current; // == segTermDocs[pointer] -public: - MultiTermDocs(); - MultiTermDocs(IndexReader** subReaders, const int32_t* s); - virtual ~MultiTermDocs(); - - int32_t doc() const; - int32_t freq() const; - - void seek(TermEnum* termEnum); - void seek(Term* tterm); - bool next(); - - /** Optimized implementation. */ - int32_t read(int32_t* docs, int32_t* freqs, int32_t length); - - /** As yet unoptimized implementation. */ - bool skipTo(const int32_t target); - - void close(); - - virtual TermPositions* __asTermPositions(); -protected: - virtual TermDocs* termDocs(const IndexReader* reader) const; -private: - TermDocs* termDocs(const int32_t i) const; - -}; - - -//MultiTermEnum represents the enumeration of all terms of all readers -class MultiTermEnum:public TermEnum { -private: - SegmentMergeQueue* queue; - - Term* _term; - int32_t _docFreq; -public: - //Constructor - //Opens all enumerations of all readers - MultiTermEnum(IndexReader** subReaders, const int32_t* starts, const Term* t); - - //Destructor - ~MultiTermEnum(); - - //Move the current term to the next in the set of enumerations - bool next(); - - //Returns a pointer to the current term of the set of enumerations - Term* term(); - Term* term(bool pointer); - - //Returns the document frequency of the current term in the set - int32_t docFreq() const; - - //Closes the set of enumerations in the queue - void close(); - - - const char* getObjectName(){ return MultiTermEnum::getClassName(); } - static const char* getClassName(){ return "MultiTermEnum"; } -}; - - -class MultiTermPositions:public MultiTermDocs,public TermPositions { -public: - MultiTermPositions(IndexReader** subReaders, const int32_t* s); - ~MultiTermPositions() {}; - int32_t nextPosition(); - - - virtual TermDocs* __asTermDocs(); - virtual TermPositions* __asTermPositions(); -protected: - TermDocs* termDocs(const IndexReader* reader) const; -}; - - -class MultiReader:public IndexReader{ -private: - bool _hasDeletions; - IndexReader** subReaders; - int32_t subReadersLength; - int32_t* starts; // 1st docno for each segment - - CL_NS(util)::CLHashtable > normsCache; - int32_t _maxDoc; - int32_t _numDocs; - void initialize(IndexReader** subReaders); - - int32_t readerIndex(const int32_t n) const; - - bool hasNorms(const TCHAR* field); - uint8_t* ones; - uint8_t* fakeNorms(); -protected: - void doSetNorm(int32_t n, const TCHAR* field, uint8_t value); - void doUndeleteAll(); - void doCommit(); - // synchronized - void doClose(); - - // synchronized - void doDelete(const int32_t n); -public: - /** Construct reading the named set of readers. */ - MultiReader(CL_NS(store)::Directory* directory, SegmentInfos* sis, IndexReader** subReaders); - - /** - *

Construct a MultiReader aggregating the named set of (sub)readers. - * Directory locking for delete, undeleteAll, and setNorm operations is - * left to the subreaders.

- *

Note that all subreaders are closed if this Multireader is closed.

- * @param subReaders set of (sub)readers - * @throws IOException - */ - MultiReader(IndexReader** subReaders); - - ~MultiReader(); - - /** Return an array of term frequency vectors for the specified document. - * The array contains a vector for each vectorized field in the document. - * Each vector vector contains term numbers and frequencies for all terms - * in a given vectorized field. - * If no such fields existed, the method returns null. - */ - bool getTermFreqVectors(int32_t n, Array& result); - TermFreqVector* getTermFreqVector(int32_t n, const TCHAR* field); - - - // synchronized - int32_t numDocs(); - - int32_t maxDoc() const; - - bool document(int32_t n, CL_NS(document)::Document* doc); - - bool isDeleted(const int32_t n); - bool hasDeletions() const{ return _hasDeletions; } - - // synchronized - uint8_t* norms(const TCHAR* field); - void norms(const TCHAR* field, uint8_t* result); - - TermEnum* terms() const; - TermEnum* terms(const Term* term) const; - - //Returns the document frequency of the current term in the set - int32_t docFreq(const Term* t=NULL) const; - TermDocs* termDocs() const; - TermPositions* termPositions() const; - - - /** - * @see IndexReader#getFieldNames(IndexReader.FieldOption fldOption) - */ - void getFieldNames(FieldOption fldOption, CL_NS(util)::StringArrayWithDeletor& retarray); -}; - - -CL_NS_END -#endif diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/index/SegmentHeader.h qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/index/SegmentHeader.h --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/index/SegmentHeader.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/index/SegmentHeader.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,314 +0,0 @@ -/* -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -* -* Changes are Copyright (C) 2015 The Qt Company Ltd. -*/ -#ifndef _lucene_index_SegmentHeader_ -#define _lucene_index_SegmentHeader_ - -#if defined(_LUCENE_PRAGMA_ONCE) -# pragma once -#endif - -#include -#include - -#include "SegmentInfos.h" -#include "CLucene/util/BitSet.h" -#include "CLucene/util/VoidMap.h" -#include "Term.h" -#include "FieldInfos.h" -#include "FieldsReader.h" -#include "IndexReader.h" -#include "TermInfosReader.h" -#include "CompoundFile.h" -#include "CLucene/util/ThreadLocal.h" - -CL_NS_DEF(index) - -class SegmentReader; - -class SegmentTermDocs : public virtual TermDocs -{ - int32_t _doc; - int32_t skipInterval; - int32_t numSkips; - int32_t skipCount; - CL_NS(store)::IndexInput* skipStream; - int32_t skipDoc; - int64_t freqPointer; - int64_t proxPointer; - int64_t skipPointer; - bool haveSkipped; - -protected: - // SegmentReader parent - const SegmentReader* parent; - CL_NS(store)::IndexInput* freqStream; - int32_t count; - int32_t df; - int32_t _freq; - CL_NS(util)::BitSet* deletedDocs; -public: - virtual ~SegmentTermDocs(); - - virtual void seek(TermEnum* termEnum); - virtual void seek(Term* term); - virtual void seek(const TermInfo* ti); - - virtual void close(); - virtual int32_t doc()const; - virtual int32_t freq()const; - - virtual bool next(); - - /** Optimized implementation. */ - virtual int32_t read(int32_t* docs, int32_t* freqs, int32_t length); - - /** Optimized implementation. */ - virtual bool skipTo(const int32_t target); - - virtual TermPositions* __asTermPositions(); - - // \param Parent must be a segment reader - SegmentTermDocs( const SegmentReader* Parent); -protected: - virtual void skippingDoc(){} - virtual void skipProx(int64_t proxPointer){} -}; - - -class SegmentTermPositions : public SegmentTermDocs, public TermPositions -{ -private: - CL_NS(store)::IndexInput* proxStream; - int32_t proxCount; - int32_t position; - -public: - // \param Parent must be a segment reader - SegmentTermPositions(const SegmentReader* Parent); - ~SegmentTermPositions(); - - void seek(const TermInfo* ti); - void close(); - int32_t nextPosition(); - bool next(); - int32_t read(int32_t* docs, int32_t* freqs, int32_t length); - virtual TermDocs* __asTermDocs(); - virtual TermPositions* __asTermPositions(); - - //resolve SegmentTermDocs/TermPositions ambiguity - void seek(Term* term){ SegmentTermDocs::seek(term); } - void seek(TermEnum* termEnum){ SegmentTermDocs::seek(termEnum); } - int32_t doc() const{ return SegmentTermDocs::doc(); } - int32_t freq() const{ return SegmentTermDocs::freq(); } - bool skipTo(const int32_t target){ return SegmentTermDocs::skipTo(target); } - -protected: - void skippingDoc(); - /** Called by super.skipTo(). */ - void skipProx(int64_t proxPointer); -}; - -// An IndexReader responsible for reading 1 segment of an index -class SegmentReader : public IndexReader -{ - /** - * The class Norm represents the normalizations for a field. - * These normalizations are read from an IndexInput in into an array of bytes called bytes - */ - class Norm : LUCENE_BASE - { - int32_t number; - SegmentReader* reader; - QString segment; // segment name - - public: - CL_NS(store)::IndexInput* in; - uint8_t* bytes; - bool dirty; - //Constructor - Norm(CL_NS(store)::IndexInput* instrm, int32_t number, - SegmentReader* reader, const QString& segment); - //Destructor - ~Norm(); - - void reWrite(); - }; - friend class SegmentReader::Norm; - - //Holds the name of the segment that is being read - QString segment; - - //Indicates if there are documents marked as deleted - bool deletedDocsDirty; - bool normsDirty; - bool undeleteAll; - - //Holds all norms for all fields in the segment - typedef CL_NS(util)::CLHashtable NormsType; - NormsType _norms; - - uint8_t* ones; - uint8_t* fakeNorms(); - - // Compound File Reader when based on a compound file segment - CompoundFileReader* cfsReader; - // Reads the Field Info file - FieldsReader* fieldsReader; - TermVectorsReader* termVectorsReaderOrig; - CL_NS(util)::ThreadLocal >termVectorsLocal; - - void initialize(SegmentInfo* si); - - // Create a clone from the initial TermVectorsReader and store it in the - // ThreadLocal. @return TermVectorsReader - TermVectorsReader* getTermVectorsReader(); - -protected: - // Marks document docNum as deleted - void doDelete(const int32_t docNum); - void doUndeleteAll(); - void doCommit(); - void doSetNorm(int32_t doc, const TCHAR* field, uint8_t value); - - // can return null if norms aren't stored - uint8_t* getNorms(const TCHAR* field); - -public: - /** - Func - Constructor. - Opens all files of a segment - .fnm -> Field Info File - Field names are stored in the field info file, with suffix .fnm. - .frq -> Frequency File - The .frq file contains the lists of documents which contain - each term, along with the frequency of the term in that document. - .prx -> Prox File - The prox file contains the lists of positions that each term occurs - at within documents. - .tis -> Term Info File - This file is sorted by Term. Terms are ordered first lexicographically - by the term's field name, and within that lexicographically by the term's text. - .del -> Deletion File - The .del file is optional, and only exists when a segment contains deletions - .f[0-9]* -> Norm File - Contains s, for each document, a byte that encodes a value that is - multiplied into the score for hits on that field: - */ - SegmentReader(SegmentInfo* si); - - SegmentReader(SegmentInfos* sis, SegmentInfo* si); - // Destructor. - virtual ~SegmentReader(); - - // Closes all streams to the files of a single segment - void doClose(); - - // Checks if a segment managed by SegmentInfo si has deletions - static bool hasDeletions(const SegmentInfo* si); - bool hasDeletions() const; - bool hasNorms(const TCHAR* field) const; - - // Returns all file names managed by this SegmentReader - void files(QStringList& retarray); - // Returns an enumeration of all the Terms and TermInfos in the set. - TermEnum* terms() const; - // Returns an enumeration of terms starting at or after the named term t - TermEnum* terms(const Term* t) const; - - // Gets the document identified by n - bool document(int32_t n, CL_NS(document)::Document* doc); - - // Checks if the n-th document has been marked deleted - bool isDeleted(const int32_t n); - - // Returns an unpositioned TermDocs enumerator. - TermDocs* termDocs() const; - // Returns an unpositioned TermPositions enumerator. - TermPositions* termPositions() const; - - // Returns the number of documents which contain the term t - int32_t docFreq(const Term* t) const; - - // Returns the actual number of documents in the segment - int32_t numDocs(); - // Returns the number of all the documents in the segment including the - // ones that have been marked deleted - int32_t maxDoc() const; - - // Returns the bytes array that holds the norms of a named field. - // Returns fake norms if norms aren't available - uint8_t* norms(const TCHAR* field); - - // Reads the Norms for field from disk - void norms(const TCHAR* field, uint8_t* bytes); - - // concatenating segment with ext and x - QString SegmentName(const QString& ext, const int32_t x = -1); - // Creates a filename in buffer by concatenating segment with ext and x - void SegmentName(QString& buffer, int32_t bufferLen, const QString& ext, - const int32_t x = -1); - - /** - * @see IndexReader#getFieldNames(IndexReader.FieldOption fldOption) - */ - void getFieldNames(FieldOption fldOption, CL_NS(util)::StringArrayWithDeletor& retarray); - - static bool usesCompoundFile(SegmentInfo* si); - - /** Return a term frequency vector for the specified document and field. The - * vector returned contains term numbers and frequencies for all terms in - * the specified field of this document, if the field had storeTermVector - * flag set. If the flag was not set, the method returns null. - * @throws IOException - */ - TermFreqVector* getTermFreqVector(int32_t docNumber, const TCHAR* field = NULL); - - /** Return an array of term frequency vectors for the specified document. - * The array contains a vector for each vectorized field in the document. - * Each vector vector contains term numbers and frequencies for all terms - * in a given vectorized field. - * If no such fields existed, the method returns null. - * @throws IOException - */ - bool getTermFreqVectors(int32_t docNumber, Array& result); - -private: - //Open all norms files for all fields - void openNorms(CL_NS(store)::Directory* cfsDir); - //Closes all norms files - void closeNorms(); - - // a bitVector that manages which documents have been deleted - CL_NS(util)::BitSet* deletedDocs; - // an IndexInput to the frequency file - CL_NS(store)::IndexInput* freqStream; - // For reading the fieldInfos file - FieldInfos* fieldInfos; - // For reading the Term Dictionary .tis file - TermInfosReader* tis; - // an IndexInput to the prox file - CL_NS(store)::IndexInput* proxStream; - - static bool hasSeparateNorms(SegmentInfo* si); - static uint8_t* createFakeNorms(int32_t size); - - // allow various classes to access the internals of this. this allows us - // to have a more tight idea of the package - friend class IndexReader; - friend class IndexWriter; - friend class SegmentTermDocs; - friend class SegmentTermPositions; - friend class MultiReader; -}; - -CL_NS_END - -#endif diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/index/SegmentInfos.cpp qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/index/SegmentInfos.cpp --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/index/SegmentInfos.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/index/SegmentInfos.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,259 +0,0 @@ -/* - * Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team - * - * Distributable under the terms of either the Apache License (Version 2.0) or - * the GNU Lesser General Public License, as specified in the COPYING file. - * - * Changes are Copyright (C) 2015 The Qt Company Ltd. -*/ -#include "CLucene/StdHeader.h" -#include "SegmentInfos.h" - -#include "CLucene/store/Directory.h" -#include "CLucene/util/Misc.h" - -CL_NS_USE(store) -CL_NS_USE(util) -CL_NS_DEF(index) - -SegmentInfo::SegmentInfo(const QString& Name, const int32_t DocCount, - CL_NS(store)::Directory* Dir) - : docCount(DocCount) - , dir(Dir) -{ - //Func - Constructor. Initialises SegmentInfo. - //Pre - Name holds the unique name in the directory Dir - // DocCount holds the number of documents in the segment - // Dir holds the Directory where the segment resides - //Post - The instance has been created. name contains the duplicated string - // Name. docCount = DocCount and dir references Dir - name = Name; -} - -SegmentInfo::~SegmentInfo() -{ -} - -SegmentInfos::SegmentInfos(bool _deleteMembers) - : deleteMembers(_deleteMembers) -{ - //Func - Constructor - //Pre - deleteMembers indicates if the instance to be created must delete - // all SegmentInfo instances it manages when the instance is destroyed - // or not true -> must delete, false may not delete - //Post - An instance of SegmentInfos has been created. - - //initialize counter to 0 - counter = 0; - version = Misc::currentTimeMillis(); -} - -SegmentInfos::~SegmentInfos() -{ - //Func - Destructor - //Pre - true - //Post - The instance has been destroyed. Depending on the constructor used - // the SegmentInfo instances that this instance managed have been - // deleted or not. - - if (deleteMembers) { - segmentInfosType::iterator it; - for (it = infos.begin(); it != infos.end(); ++it) - _CLLDELETE(*it); - } - //Clear the list of SegmentInfo instances - make sure everything is deleted - infos.clear(); -} - -SegmentInfo* SegmentInfos::info(int32_t i) const -{ - //Func - Returns a reference to the i-th SegmentInfo in the list. - //Pre - i >= 0 - //Post - A reference to the i-th SegmentInfo instance has been returned - - CND_PRECONDITION(i >= 0, "i contains negative number"); - - //Get the i-th SegmentInfo instance - SegmentInfo *ret = infos.value(i, 0); - - //Condition check to see if the i-th SegmentInfo has been retrieved - CND_CONDITION(ret != NULL, "No SegmentInfo instance found"); - - return ret; -} - -void SegmentInfos::clearto(size_t _min) -{ - // Make sure we actually need to remove - if (infos.size() > _min) { - segmentInfosType::iterator itr; - segmentInfosType::iterator eitr = infos.end(); - segmentInfosType::iterator bitr = infos.begin() + _min; - - for(itr = bitr; itr != eitr; ++itr) - _CLLDELETE((*itr)); - infos.erase(bitr, eitr); - } -} - -void SegmentInfos::add(SegmentInfo* info) -{ - infos.push_back(info); -} - -int32_t SegmentInfos::size() const -{ - return infos.size(); -} - -void SegmentInfos::read(Directory* directory) -{ - //Func - Reads segments file that resides in directory. - //Pre - directory contains a valid reference - //Post - The segments file has been read and for each segment found - // a SegmentsInfo intance has been created and stored. - - //Open an IndexInput to the segments file and check if valid - IndexInput* input = directory->openInput(QLatin1String("segments")); - if (input) { - try { - int32_t format = input->readInt(); - // file contains explicit format info - if (format < 0) { - // check that it is a format we can understand - if (format < FORMAT) { - TCHAR err[30]; - _sntprintf(err, 30, _T("Unknown format version: %d"), format); - _CLTHROWT(CL_ERR_Runtime, err); - } - // read version - version = input->readLong(); - // read counter - counter = input->readInt(); - } else { - // file is in old format without explicit format info - counter = format; - } - - //Temporary variable for storing the name of the segment - char aname[CL_MAX_PATH] = { 0 }; - TCHAR tname[CL_MAX_PATH] = { 0 }; - - //read segmentInfos - for (int32_t i = input->readInt(); i > 0; --i) { - // read the name of the segment - input->readString(tname, CL_MAX_PATH); - STRCPY_TtoA(aname, tname, CL_MAX_PATH); - - //Instantiate a new SegmentInfo Instance - SegmentInfo* si = _CLNEW SegmentInfo(QLatin1String(aname), - input->readInt(), directory); - - //Condition check to see if si points to an instance - CND_CONDITION(si != NULL, "Memory allocation for si failed") ; - - //store SegmentInfo si - infos.push_back(si); - } - - if (format >= 0) { - // in old format the version number may be at the end of the file - if (input->getFilePointer() >= input->length()) { - // old file format without version number - version = Misc::currentTimeMillis(); - } else { - // read version - version = input->readLong(); - } - } - } _CLFINALLY ( - //destroy the inputStream input. The destructor of IndexInput will - //also close the Inputstream input - _CLDELETE(input); - ); - } -} - -void SegmentInfos::write(Directory* directory) -{ - //Func - Writes a new segments file based upon the SegmentInfo instances it manages - //Pre - directory is a valid reference to a Directory - //Post - The new segment has been written to disk - - //Open an IndexOutput to the segments file and check if valid - IndexOutput* output = directory->createOutput(QLatin1String("segments.new")); - if (output) { - try { - // write FORMAT - output->writeInt(FORMAT); - // every write changes the index - output->writeLong(++version); - // Write the counter - output->writeInt(counter); - - // Write the number of SegmentInfo Instances which is equal to the number - // of segments in directory as each SegmentInfo manages a single segment - output->writeInt(infos.size()); - - //temporary value for wide segment name - TCHAR tname[CL_MAX_PATH]; - - //Iterate through all the SegmentInfo instances - for (uint32_t i = 0; i < infos.size(); ++i) { - //Retrieve the SegmentInfo - SegmentInfo *si = infos.value(i, 0); - //Condition check to see if si has been retrieved - CND_CONDITION(si != NULL, "No SegmentInfo instance found"); - - //Write the name of the current segment - int32_t count = si->name.toWCharArray(tname); - tname[count] = '\0'; - output->writeString(tname, _tcslen(tname)); - - //Write the number of documents in the segment - output->writeInt(si->docCount); - } - } _CLFINALLY( - output->close(); - _CLDELETE(output); - ); - - // install new segment info - directory->renameFile(QLatin1String("segments.new"), - QLatin1String("segments")); - } -} - - -int64_t SegmentInfos::readCurrentVersion(Directory* directory) -{ - int32_t format = 0; - int64_t version = 0; - IndexInput* input = directory->openInput(QLatin1String("segments")); - try { - format = input->readInt(); - if (format < 0){ - if (format < FORMAT) { - TCHAR err[30]; - _sntprintf(err, 30, _T("Unknown format version: %d"), format); - _CLTHROWT(CL_ERR_Runtime, err); - } - // read version - version = input->readLong(); - } - } _CLFINALLY ( - input->close(); - _CLDELETE(input); - ); - - if (format < 0) - return version; - - // We cannot be sure about the format of the file. Therefore we have to - // read the whole file and cannot simply seek to the version entry. - SegmentInfos segmentInfos; - segmentInfos.read(directory); - return segmentInfos.getVersion(); -} - -CL_NS_END diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/index/SegmentInfos.h qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/index/SegmentInfos.h --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/index/SegmentInfos.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/index/SegmentInfos.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,128 +0,0 @@ -/* - * Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team - * - * Distributable under the terms of either the Apache License (Version 2.0) or - * the GNU Lesser General Public License, as specified in the COPYING file. - * - * Changes are Copyright (C) 2015 The Qt Company Ltd. -*/ -#ifndef _lucene_index_SegmentInfos_ -#define _lucene_index_SegmentInfos_ - -#if defined(_LUCENE_PRAGMA_ONCE) -# pragma once -#endif - -#include -#include - -#include "CLucene/store/Directory.h" - -CL_NS_DEF(index) - -class SegmentInfo : LUCENE_BASE -{ -public: - SegmentInfo(const QString& Name, const int32_t DocCount, - CL_NS(store)::Directory* Dir); - ~SegmentInfo(); - - ///Gets the Directory where the segment resides - CL_NS(store)::Directory* getDir() const { return dir; } - - //Unique name in directory dir - QString name; - - //Number of docs in the segment - const int32_t docCount; - -private: - //Directory where the segment resides - CL_NS(store)::Directory* dir; -}; - -typedef QVector segmentInfosType; - -//SegmentInfos manages a list of SegmentInfo instances -//Each SegmentInfo contains information about a segment in a directory. -// -//The active segments in the index are stored in the segment info file. -//An index only has a single file in this format, and it is named "segments". -//This lists each segment by name, and also contains the size of each segment. -//The format of the file segments is defined as follows: -// -// SegCount -//Segments --> SegCount, -// -//SegCount, SegSize --> UInt32 -// -//SegName --> String -// -//SegName is the name of the segment, and is used as the file name prefix -//for all of the files that compose the segment's index. -// -//SegSize is the number of documents contained in the segment index. -// -//Note: -//At http://jakarta.apache.org/lucene/docs/fileformats.html the definition -//of all file formats can be found. Note that java lucene currently -//defines Segments as follows: -// -//Segments --> Format, Version, SegCount, SegCount -// -//Format, SegCount, SegSize --> UInt32 -// -//Format and Version have not been implemented yet -class SegmentInfos : LUCENE_BASE -{ -public: - SegmentInfos(bool deleteMembers = true); - ~SegmentInfos(); - - //delete and clears objects 'from' from to 'to' - void clearto(size_t to); - - //count of segment infos - int32_t size() const; - - //add a segment info - void add(SegmentInfo* info); - - //Returns a reference to the i-th SegmentInfo in the list. - SegmentInfo* info(int32_t i) const; - - // version number when this SegmentInfos was generated. - int64_t getVersion() const { return version; } - - static int64_t readCurrentVersion(CL_NS(store)::Directory* directory); - - //Reads segments file that resides in directory - void read(CL_NS(store)::Directory* directory); - - //Writes a new segments file based upon the SegmentInfo instances it manages - void write(CL_NS(store)::Directory* directory); - -private: - // The file format version, a negative number. - // Works since counter, the old 1st entry, is always >= 0 - LUCENE_STATIC_CONSTANT(int32_t, FORMAT = -1); - - // counts how often the index has been changed by adding or deleting docs. - // starting with the current time in milliseconds forces to create unique - // version numbers. - int64_t version; - - segmentInfosType infos; - - // used to name new segments - int32_t counter; - - // allow IndexWriter to use counter - friend class IndexWriter; - - bool deleteMembers; -}; - -CL_NS_END - -#endif diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/index/SegmentMergeInfo.cpp qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/index/SegmentMergeInfo.cpp --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/index/SegmentMergeInfo.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/index/SegmentMergeInfo.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,104 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#include "CLucene/StdHeader.h" -#include "SegmentMergeInfo.h" - -#include "SegmentTermEnum.h" -#include "SegmentHeader.h" - -CL_NS_DEF(index) - -SegmentMergeInfo::SegmentMergeInfo(const int32_t b, TermEnum* te, IndexReader* r): - reader(r),termEnum(te),base(b), docMap(NULL) { -//Func - Constructor -//Pre - b >= 0 -// te contains a valid reference to a SegmentTermEnum instance -// r contains a valid reference to a SegmentReader instance -//Post - The instance has been created - - CND_PRECONDITION(b >= 0, "b is a negative number"); - - postings=NULL; - term = te->term(); -} - -SegmentMergeInfo::~SegmentMergeInfo(){ -//Func - Destructor -//Pre - true -//Post - The instance has been destroyed - - close(); -} - -int32_t* SegmentMergeInfo::getDocMap(){ - if ( docMap == NULL ){ - // build array which maps document numbers around deletions - if (reader->hasDeletions()) { - //Get the total number of documents managed by the reader including the deleted ones - int32_t maxDoc = reader->maxDoc(); - //Create a map for all documents - docMap = _CL_NEWARRAY(int32_t,maxDoc); - int32_t j = 0; - //Iterate through all the document numbers - for (int32_t i = 0; i < maxDoc; i++) { - //Check if document i is marked deleted - if (reader->isDeleted(i)){ - //Document i has not been marked deleted so assign -1 - docMap[i] = -1; - }else{ - docMap[i] = j++; - } - } - } - } - return docMap; -} - -TermPositions* SegmentMergeInfo::getPositions() { - if (postings == NULL) { - postings = reader->termPositions(); - } - return postings; -} - - -bool SegmentMergeInfo::next() { -//Func - Moves the current term of the enumeration termEnum to the next and term -// points to this new current term -//Pre - true -//Post - Returns true if the term has been moved to the next otherwise false - if (termEnum->next()) { - _CLDECDELETE(term); - term = termEnum->term(); - return true; - } else { - _CLDECDELETE(term); //TODO: test HighFreqTerms errors with this - term = NULL; - return false; - } -} - -void SegmentMergeInfo::close() { -//Func - Closes the the resources -//Pre - true -//Post - The resources have been closed - - //First make sure posting has been closed - if ( postings != NULL ){ - postings->close(); - _CLVDELETE(postings); //todo: not a clucene object... should be - } - - if ( termEnum != NULL ){ - termEnum->close(); - _CLDELETE(termEnum); - } - _CLDECDELETE(term); - _CLDELETE_ARRAY(docMap); -} - -CL_NS_END diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/index/SegmentMergeInfo.h qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/index/SegmentMergeInfo.h --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/index/SegmentMergeInfo.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/index/SegmentMergeInfo.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,47 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#ifndef _lucene_index_SegmentMergeInfo_ -#define _lucene_index_SegmentMergeInfo_ - -#if defined(_LUCENE_PRAGMA_ONCE) -# pragma once -#endif - -#include "SegmentTermEnum.h" -#include "SegmentHeader.h" - -CL_NS_DEF(index) -class SegmentMergeInfo:LUCENE_BASE { - int32_t* docMap; // maps around deleted docs - TermPositions* postings; -public: - TermEnum* termEnum; - Term* term; - int32_t base; - IndexReader* reader; - - //Constructor - SegmentMergeInfo(const int32_t b, TermEnum* te, IndexReader* r); - - //Destructor - ~SegmentMergeInfo(); - - //Moves the current term of the enumeration termEnum to the next and term - //points to this new current term - bool next(); - - //Closes the the resources - void close(); - - // maps around deleted docs - int32_t* getDocMap(); - - TermPositions* getPositions(); -}; -CL_NS_END -#endif - diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/index/SegmentMergeQueue.cpp qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/index/SegmentMergeQueue.cpp --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/index/SegmentMergeQueue.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/index/SegmentMergeQueue.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,74 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#include "CLucene/StdHeader.h" -#include "SegmentMergeQueue.h" - -#include "SegmentMergeInfo.h" -CL_NS_DEF(index) - - - SegmentMergeQueue::SegmentMergeQueue(const int32_t size) { - //Func - Constructor - // Creates a queue of length size - //Pre - size >= 0 - //Post - The queue has been created of length size - - //BVK: bug. changed condition from size > 0 to size >= 0 - //if size is 0, as it is when retrieving a TermEnum - //from an empty index this should this should not fail. - CND_PRECONDITION(size >= 0, "size is too small"); - - //Call the initialize method of its superclass. The boolean value passed here - //indicates that the superclass PriorityQueue takes the responsibility to have its elements deleted - //The destructor of SegmentMergInfo will make sure that each intstance it will be closed properly - //before it is deleted - initialize(size,true); - } - - SegmentMergeQueue::~SegmentMergeQueue(){ - //Func - Destructor - // Does nothing as its parent class will clean up everything - //Pre - true - //Post - true - close(); - } - - void SegmentMergeQueue::close() { - //Func - Closes and destroyes all SegmentMergeInfo Instances in the queue - //Pre - true - //post - All SegmentMergeInfo Instances in the queue have been closed and deleted - // The queue is now empty but can still be used - - //call the clear method of the parent class PriorityQueue - clear(); - } - - bool SegmentMergeQueue::lessThan(SegmentMergeInfo* stiA, SegmentMergeInfo* stiB) { - //Func - Overloaded method that implements the lessThan operator for the parent class - // This method is used by the parent class Priority queue to reorder its internal - // data structures. This implementation check if stiA is less than the current term of stiB. - //Pre - stiA != NULL - // stiB != NULL - //Post - true is returned if stiA < stiB otherwise false - - CND_PRECONDITION(stiA != NULL, "stiA is NULL"); - CND_PRECONDITION(stiB != NULL, "stiB is NULL"); - - //Compare the two terms - int32_t comparison = stiA->term->compareTo(stiB->term); - //Check if they match - if (comparison == 0){ //todo: can we do an optimized compare here? compare using equals, then compare properly? - //If the match check if the base of stiA is smaller than the base of stiB - //Note that different bases means that the terms of stiA an stiB ly in different segments - return stiA->base < stiB->base; - }else{ - //Terms didn't match so return the difference in positions - return comparison < 0; - } - } - -CL_NS_END diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/index/SegmentMergeQueue.h qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/index/SegmentMergeQueue.h --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/index/SegmentMergeQueue.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/index/SegmentMergeQueue.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,38 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#ifndef _lucene_index_SegmentMergeQueue_ -#define _lucene_index_SegmentMergeQueue_ - -#if defined(_LUCENE_PRAGMA_ONCE) -# pragma once -#endif - -#include "CLucene/util/PriorityQueue.h" -#include "SegmentMergeInfo.h" - -CL_NS_DEF(index) - class SegmentMergeQueue :public CL_NS(util)::PriorityQueue > { - public: - //Constructor - //Creates a queue of length size - SegmentMergeQueue(const int32_t size); - - //Destructor - //Does nothing as its parent class will clean up everything - ~SegmentMergeQueue(); - - //Closes and destroyes all SegmentMergeInfo Instances in the queue - void close(); - protected: - //Overloaded method that implements the lessThan operator for the parent class - //This method is used by the parent class Priority queue to reorder its internal - //data structures. This implementation check if stiA is less than the current term of stiB. - bool lessThan(SegmentMergeInfo* stiA, SegmentMergeInfo* stiB); - - }; -CL_NS_END -#endif diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/index/SegmentMerger.cpp qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/index/SegmentMerger.cpp --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/index/SegmentMerger.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/index/SegmentMerger.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,723 +0,0 @@ -/* - * Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team - * - * Distributable under the terms of either the Apache License (Version 2.0) or - * the GNU Lesser General Public License, as specified in the COPYING file. - * - * Changes are Copyright (C) 2015 The Qt Company Ltd. -*/ -#include "CLucene/StdHeader.h" -#include "SegmentMerger.h" - -CL_NS_USE(util) -CL_NS_USE(document) -CL_NS_USE(store) -CL_NS_DEF(index) - -// File extensions of old-style index files -int COMPOUND_EXTENSIONS_LENGTH = 7; -const char* COMPOUND_EXTENSIONS = "fnm\0" "frq\0" "prx\0" "fdx\0" "fdt\0" "tii\0" "tis\0"; - -int VECTOR_EXTENSIONS_LENGTH = 3; -const char* VECTOR_EXTENSIONS = "tvx\0" "tvd\0" "tvf\0"; - -SegmentMerger::SegmentMerger(IndexWriter* writer, const QString& name) -{ - //Func - Constructor - //Pre - dir holds a valid reference to a Directory - // name != NULL - //Post - Instance has been created - - CND_PRECONDITION(!name.isEmpty(), "name is NULL"); - - freqOutput = NULL; - proxOutput = NULL; - termInfosWriter = NULL; - queue = NULL; - fieldInfos = NULL; - useCompoundFile = writer->getUseCompoundFile(); - skipBuffer = _CLNEW CL_NS(store)::RAMIndexOutput(); - - segment = name; - directory = writer->getDirectory(); - termIndexInterval = writer->getTermIndexInterval(); - - lastSkipDoc=0; - lastSkipFreqPointer=0; - lastSkipProxPointer=0; - skipInterval=0; -} - -SegmentMerger::~SegmentMerger() -{ - //Func - Destructor - //Pre - true - //Post - The instance has been destroyed - - //Clear the readers set - readers.clear(); - - //Delete field Infos - _CLDELETE(fieldInfos); - //Close and destroy the IndexOutput to the Frequency File - if (freqOutput != NULL) { - freqOutput->close(); - _CLDELETE(freqOutput); - } - //Close and destroy the IndexOutput to the Prox File - if (proxOutput != NULL) { - proxOutput->close(); - _CLDELETE(proxOutput); - } - //Close and destroy the termInfosWriter - if (termInfosWriter != NULL) { - termInfosWriter->close(); - _CLDELETE(termInfosWriter); - } - //Close and destroy the queue - if (queue != NULL) { - queue->close(); - _CLDELETE(queue); - } - //close and destory the skipBuffer - if (skipBuffer != NULL) { - skipBuffer->close(); - _CLDELETE(skipBuffer); - } -} - -void SegmentMerger::add(IndexReader* reader) -{ - //Func - Adds a IndexReader to the set of readers - //Pre - reader contains a valid reference to a IndexReader - //Post - The SegementReader reader has been added to the set of readers - - readers.push_back(reader); -} - -IndexReader* SegmentMerger::segmentReader(const int32_t i) -{ - //Func - Returns a reference to the i-th IndexReader - //Pre - 0 <= i < readers.size() - //Post - A reference to the i-th IndexReader has been returned - - CND_PRECONDITION(i >= 0, "i is a negative number"); - CND_PRECONDITION((size_t)i < readers.size(), - "i is bigger than the number of IndexReader instances"); - - //Retrieve the i-th IndexReader - IndexReader* ret = readers[i]; - CND_CONDITION(ret != NULL, "No IndexReader found"); - - return ret; -} - -int32_t SegmentMerger::merge() -{ - int32_t value = mergeFields(); - mergeTerms(); - mergeNorms(); - - if (fieldInfos->hasVectors()) - mergeVectors(); - - return value; -} - -void SegmentMerger::closeReaders() -{ - for (uint32_t i = 0; i < readers.size(); i++) { - // close readers - IndexReader* reader = readers[i]; - reader->close(); - } -} - -void SegmentMerger::createCompoundFile(const QString& filename, QStringList& files) -{ - CompoundFileWriter* cfsWriter = _CLNEW CompoundFileWriter(directory, filename); - - { //msvc6 scope fix - // Basic files - for (int32_t i = 0; i < COMPOUND_EXTENSIONS_LENGTH; i++) { - files.push_back(Misc::qjoin(segment, QLatin1String("."), - QLatin1String(COMPOUND_EXTENSIONS+(i*4)))); - } - } - - { //msvc6 scope fix - // Field norm files - for (int32_t i = 0; i < fieldInfos->size(); i++) { - FieldInfo* fi = fieldInfos->fieldInfo(i); - if (fi->isIndexed && !fi->omitNorms) { - TCHAR tbuf[10]; - char abuf[10]; - _i64tot(i, tbuf, 10); - STRCPY_TtoA(abuf, tbuf, 10); - - files.push_back(Misc::qjoin(segment, QLatin1String(".f"), - QLatin1String(abuf))); - } - } - } - - // Vector files - if (fieldInfos->hasVectors()) { - for (int32_t i = 0; i < VECTOR_EXTENSIONS_LENGTH; i++) { - files.push_back(Misc::qjoin(segment, QLatin1String("."), - QLatin1String(VECTOR_EXTENSIONS+(i*4)))); - } - } - - { //msvc6 scope fix - // Now merge all added files - for (size_t i=0;iaddFile(files[i]); - } - } - - // Perform the merge - cfsWriter->close(); - _CLDELETE(cfsWriter); -} - -void SegmentMerger::addIndexed(IndexReader* reader, FieldInfos* fieldInfos, - StringArrayWithDeletor& names, bool storeTermVectors, - bool storePositionWithTermVector, bool storeOffsetWithTermVector) -{ - StringArrayWithDeletor::const_iterator itr = names.begin(); - while (itr != names.end()) { - fieldInfos->add(*itr, true, - storeTermVectors, storePositionWithTermVector, - storeOffsetWithTermVector, !reader->hasNorms(*itr)); - ++itr; - } -} - -int32_t SegmentMerger::mergeFields() -{ - //Func - Merge the fields of all segments - //Pre - true - //Post - The field infos and field values of all segments have been merged. - - //Create a new FieldInfos - fieldInfos = _CLNEW FieldInfos(); // merge field names - - //Condition check to see if fieldInfos points to a valid instance - CND_CONDITION(fieldInfos != NULL, "Memory allocation for fieldInfos failed"); - - IndexReader* reader = NULL; - - int32_t docCount = 0; - - //Iterate through all readers - for (uint32_t i = 0; i < readers.size(); i++) { - //get the i-th reader - reader = readers[i]; - //Condition check to see if reader points to a valid instance - CND_CONDITION(reader != NULL,"No IndexReader found"); - - StringArrayWithDeletor tmp; - - tmp.clear(); - reader->getFieldNames(IndexReader::TERMVECTOR_WITH_POSITION_OFFSET, tmp); - addIndexed(reader, fieldInfos, tmp, true, true, true); - - tmp.clear(); - reader->getFieldNames(IndexReader::TERMVECTOR_WITH_POSITION, tmp); - addIndexed(reader, fieldInfos, tmp, true, true, false); - - tmp.clear(); - reader->getFieldNames(IndexReader::TERMVECTOR_WITH_OFFSET, tmp); - addIndexed(reader, fieldInfos, tmp, true, false, true); - - tmp.clear(); - reader->getFieldNames(IndexReader::TERMVECTOR, tmp); - addIndexed(reader, fieldInfos, tmp, true, false, false); - - tmp.clear(); - reader->getFieldNames(IndexReader::INDEXED, tmp); - addIndexed(reader, fieldInfos, tmp, false, false, false); - - tmp.clear(); - reader->getFieldNames(IndexReader::UNINDEXED, tmp); - if (tmp.size() > 0) { - TCHAR** arr = _CL_NEWARRAY(TCHAR*,tmp.size()+1); - tmp.toArray(arr); - fieldInfos->add((const TCHAR**)arr, false); - _CLDELETE_ARRAY(arr); - //no need to delete the contents, since tmp is responsible for it - } - } - - //Create the filename of the new FieldInfos file - QString buf = Misc::segmentname(segment, QLatin1String(".fnm")); - //Write the new FieldInfos file to the directory - fieldInfos->write(directory, buf); - - // merge field values - // Instantiate Fieldswriter which will write in directory for the segment - // name segment using the new merged fieldInfos - FieldsWriter* fieldsWriter = _CLNEW FieldsWriter(directory, segment, fieldInfos); - - //Condition check to see if fieldsWriter points to a valid instance - CND_CONDITION(fieldsWriter != NULL, "Memory allocation for fieldsWriter failed"); - - try { - IndexReader* reader = NULL; - int32_t maxDoc = 0; - //Iterate through all readers - for (uint32_t i = 0; i < readers.size(); i++) { - // get the i-th reader - reader = readers[i]; - - - // Condition check to see if reader points to a valid instance - CND_CONDITION(reader != NULL, "No IndexReader found"); - - // Get the total number documents including the documents that have - // been marked deleted - int32_t maxDoc = reader->maxDoc(); - - //document buffer - Document doc; - - //Iterate through all the documents managed by the current reader - for (int32_t j = 0; j < maxDoc; j++) { - //Check if the j-th document has been deleted, if so skip it - if (!reader->isDeleted(j)) { - //Get the document - if (reader->document(j, &doc)) { - //Add the document to the new FieldsWriter - fieldsWriter->addDocument(&doc); - docCount++; - //doc is cleard for re-use - doc.clear(); - } - } - } - } - } _CLFINALLY ( - //Close the fieldsWriter - fieldsWriter->close(); - //And have it deleted as it not used any more - _CLDELETE(fieldsWriter); - ); - - return docCount; -} - -void SegmentMerger::mergeVectors() -{ - TermVectorsWriter* termVectorsWriter = - _CLNEW TermVectorsWriter(directory, segment, fieldInfos); - - try { - for (uint32_t r = 0; r < readers.size(); r++) { - IndexReader* reader = readers[r]; - int32_t maxDoc = reader->maxDoc(); - for (int32_t docNum = 0; docNum < maxDoc; docNum++) { - // skip deleted docs - if (reader->isDeleted(docNum)) - continue; - - Array tmp; - if (reader->getTermFreqVectors(docNum, tmp)) - termVectorsWriter->addAllDocVectors(tmp); - tmp.deleteAll(); - } - } - } _CLFINALLY ( - _CLDELETE(termVectorsWriter); - ); -} - - -void SegmentMerger::mergeTerms() -{ - //Func - Merge the terms of all segments - //Pre - fieldInfos != NULL - //Post - The terms of all segments have been merged - - CND_PRECONDITION(fieldInfos != NULL, "fieldInfos is NULL"); - - try{ - //create a filename for the new Frequency File for segment - QString buf = Misc::segmentname(segment, QLatin1String(".frq")); - //Open an IndexOutput to the new Frequency File - freqOutput = directory->createOutput(buf); - - //create a filename for the new Prox File for segment - buf = Misc::segmentname(segment, QLatin1String(".prx")); - //Open an IndexOutput to the new Prox File - proxOutput = directory->createOutput(buf); - - //Instantiate a new termInfosWriter which will write in directory - //for the segment name segment using the new merged fieldInfos - termInfosWriter = _CLNEW TermInfosWriter(directory, segment, fieldInfos, - termIndexInterval); - - //Condition check to see if termInfosWriter points to a valid instance - CND_CONDITION(termInfosWriter != NULL, - "Memory allocation for termInfosWriter failed"); - - skipInterval = termInfosWriter->skipInterval; - queue = _CLNEW SegmentMergeQueue(readers.size()); - - //And merge the Term Infos - mergeTermInfos(); - } _CLFINALLY ( - //Close and destroy the IndexOutput to the Frequency File - if (freqOutput != NULL) { - freqOutput->close(); _CLDELETE(freqOutput); - } - - //Close and destroy the IndexOutput to the Prox File - if (proxOutput != NULL) - { - proxOutput->close(); - _CLDELETE(proxOutput); - } - - //Close and destroy the termInfosWriter - if (termInfosWriter != NULL) { - termInfosWriter->close(); - _CLDELETE(termInfosWriter); - } - - //Close and destroy the queue - if (queue != NULL) { - queue->close(); - _CLDELETE(queue); - } - ); -} - -void SegmentMerger::mergeTermInfos() -{ - //Func - Merges all TermInfos into a single segment - //Pre - true - //Post - All TermInfos have been merged into a single segment - - //Condition check to see if queue points to a valid instance - CND_CONDITION(queue != NULL, "Memory allocation for queue failed"); - - //base is the id of the first document in a segment - int32_t base = 0; - - IndexReader* reader = NULL; - SegmentMergeInfo* smi = NULL; - - //iterate through all the readers - for (uint32_t i = 0; i < readers.size(); i++) { - //Get the i-th reader - reader = readers[i]; - - //Condition check to see if reader points to a valid instance - CND_CONDITION(reader != NULL, "No IndexReader found"); - - //Get the term enumeration of the reader - TermEnum* termEnum = reader->terms(); - //Instantiate a new SegmentMerginfo for the current reader and enumeration - smi = _CLNEW SegmentMergeInfo(base, termEnum, reader); - - //Condition check to see if smi points to a valid instance - CND_CONDITION(smi != NULL, "Memory allocation for smi failed") ; - - //Increase the base by the number of documents that have not been marked deleted - //so base will contain a new value for the first document of the next iteration - base += reader->numDocs(); - //Get the next current term - if (smi->next()) { - //Store the SegmentMergeInfo smi with the initialized SegmentTermEnum TermEnum - //into the queue - queue->put(smi); - } else { - //Apparently the end of the TermEnum of the SegmentTerm has been reached so - //close the SegmentMergeInfo smi - smi->close(); - //And destroy the instance and set smi to NULL (It will be used later in this method) - _CLDELETE(smi); - } - } - - //Instantiate an array of SegmentMergeInfo instances called match - SegmentMergeInfo** match = _CL_NEWARRAY(SegmentMergeInfo*,readers.size()+1); - - //Condition check to see if match points to a valid instance - CND_CONDITION(match != NULL, "Memory allocation for match failed") ; - - SegmentMergeInfo* top = NULL; - - //As long as there are SegmentMergeInfo instances stored in the queue - while (queue->size() > 0) { - int32_t matchSize = 0; - - // pop matching terms - - //Pop the first SegmentMergeInfo from the queue - match[matchSize++] = queue->pop(); - //Get the Term of match[0] - Term* term = match[0]->term; - - //Condition check to see if term points to a valid instance - CND_CONDITION(term != NULL,"term is NULL") ; - - //Get the current top of the queue - top = queue->top(); - - //For each SegmentMergInfo still in the queue - //Check if term matches the term of the SegmentMergeInfo instances in the queue - while (top != NULL && term->equals(top->term)) { - //A match has been found so add the matching SegmentMergeInfo to the match array - match[matchSize++] = queue->pop(); - //Get the next SegmentMergeInfo - top = queue->top(); - } - match[matchSize]=NULL; - - //add new TermInfo - mergeTermInfo(match); //matchSize - - //Restore the SegmentTermInfo instances in the match array back into the queue - while (matchSize > 0) { - smi = match[--matchSize]; - - //Condition check to see if smi points to a valid instance - CND_CONDITION(smi != NULL, "smi is NULL"); - - //Move to the next term in the enumeration of SegmentMergeInfo smi - if (smi->next()) { - //There still are some terms so restore smi in the queue - queue->put(smi); - - } else { - //Done with a segment - //No terms anymore so close this SegmentMergeInfo instance - smi->close(); - _CLDELETE(smi); - } - } - } - - _CLDELETE_ARRAY(match); -} - -void SegmentMerger::mergeTermInfo(SegmentMergeInfo** smis) -{ - //Func - Merge the TermInfo of a term found in one or more segments. - //Pre - smis != NULL and it contains segments that are positioned at the same term. - // n is equal to the number of SegmentMergeInfo instances in smis - // freqOutput != NULL - // proxOutput != NULL - //Post - The TermInfo of a term has been merged - - CND_PRECONDITION(smis != NULL, "smis is NULL"); - CND_PRECONDITION(freqOutput != NULL, "freqOutput is NULL"); - CND_PRECONDITION(proxOutput != NULL, "proxOutput is NULL"); - - //Get the file pointer of the IndexOutput to the Frequency File - int64_t freqPointer = freqOutput->getFilePointer(); - //Get the file pointer of the IndexOutput to the Prox File - int64_t proxPointer = proxOutput->getFilePointer(); - - //Process postings from multiple segments all positioned on the same term. - int32_t df = appendPostings(smis); - - int64_t skipPointer = writeSkip(); - - //df contains the number of documents across all segments where this term was found - if (df > 0) { - //add an entry to the dictionary with pointers to prox and freq files - termInfo.set(df, freqPointer, proxPointer, (int32_t)(skipPointer - freqPointer)); - //Precondition check for to be sure that the reference to - //smis[0]->term will be valid - CND_PRECONDITION(smis[0]->term != NULL, "smis[0]->term is NULL"); - //Write a new TermInfo - termInfosWriter->add(smis[0]->term, &termInfo); - } -} - - -int32_t SegmentMerger::appendPostings(SegmentMergeInfo** smis) -{ - //Func - Process postings from multiple segments all positioned on the - // same term. Writes out merged entries into freqOutput and - // the proxOutput streams. - //Pre - smis != NULL and it contains segments that are positioned at the same term. - // n is equal to the number of SegmentMergeInfo instances in smis - // freqOutput != NULL - // proxOutput != NULL - //Post - Returns number of documents across all segments where this term was found - - CND_PRECONDITION(smis != NULL, "smis is NULL"); - CND_PRECONDITION(freqOutput != NULL, "freqOutput is NULL"); - CND_PRECONDITION(proxOutput != NULL, "proxOutput is NULL"); - - int32_t lastDoc = 0; - int32_t df = 0; //Document Counter - - resetSkip(); - SegmentMergeInfo* smi = NULL; - - //Iterate through all SegmentMergeInfo instances in smis - int32_t i = 0; - while ((smi=smis[i]) != NULL) { - //Get the i-th SegmentMergeInfo - - //Condition check to see if smi points to a valid instance - CND_PRECONDITION(smi != NULL, " is NULL"); - - //Get the term positions - TermPositions* postings = smi->getPositions(); - //Get the base of this segment - int32_t base = smi->base; - //Get the docMap so we can see which documents have been deleted - int32_t* docMap = smi->getDocMap(); - //Seek the termpost - postings->seek(smi->termEnum); - while (postings->next()) { - int32_t doc = postings->doc(); - //Check if there are deletions - if (docMap != NULL) - doc = docMap[doc]; // map around deletions - doc += base; // convert to merged space - - //Condition check to see doc is eaqual to or bigger than lastDoc - CND_CONDITION(doc >= lastDoc,"docs out of order"); - - //Increase the total frequency over all segments - df++; - - if ((df % skipInterval) == 0) { - bufferSkip(lastDoc); - } - - //Calculate a new docCode - //use low bit to flag freq=1 - int32_t docCode = (doc - lastDoc) << 1; - lastDoc = doc; - - //Get the frequency of the Term - int32_t freq = postings->freq(); - if (freq == 1) { - //write doc & freq=1 - freqOutput->writeVInt(docCode | 1); - } else { - //write doc - freqOutput->writeVInt(docCode); - //write frequency in doc - freqOutput->writeVInt(freq); - } - - int32_t lastPosition = 0; - // write position deltas - for (int32_t j = 0; j < freq; j++) { - //Get the next position - int32_t position = postings->nextPosition(); - //Write the difference between position and the last position - proxOutput->writeVInt(position - lastPosition); - lastPosition = position; - } - } - - i++; - } - - //Return total number of documents across all segments where term was found - return df; -} - -void SegmentMerger::resetSkip() -{ - skipBuffer->reset(); - lastSkipDoc = 0; - lastSkipFreqPointer = freqOutput->getFilePointer(); - lastSkipProxPointer = proxOutput->getFilePointer(); -} - -void SegmentMerger::bufferSkip(int32_t doc) -{ - int64_t freqPointer = freqOutput->getFilePointer(); - int64_t proxPointer = proxOutput->getFilePointer(); - - skipBuffer->writeVInt(doc - lastSkipDoc); - skipBuffer->writeVInt((int32_t) (freqPointer - lastSkipFreqPointer)); - skipBuffer->writeVInt((int32_t) (proxPointer - lastSkipProxPointer)); - - lastSkipDoc = doc; - lastSkipFreqPointer = freqPointer; - lastSkipProxPointer = proxPointer; -} - -int64_t SegmentMerger::writeSkip() -{ - int64_t skipPointer = freqOutput->getFilePointer(); - skipBuffer->writeTo(freqOutput); - return skipPointer; -} - -// Func - Merges the norms for all fields -// Pre - fieldInfos != NULL -// Post - The norms for all fields have been merged -void SegmentMerger::mergeNorms() -{ - CND_PRECONDITION(fieldInfos != NULL, "fieldInfos is NULL"); - - //iterate through all the Field Infos instances - for (int32_t i = 0; i < fieldInfos->size(); i++) { - //Get the i-th FieldInfo - FieldInfo* fi = fieldInfos->fieldInfo(i); - //Is this Field indexed? - if (fi->isIndexed && !fi->omitNorms) { - //Create and Instantiate an IndexOutput to that norm file - QString buf = Misc::segmentname(segment, QLatin1String(".f"), i); - IndexOutput* output = directory->createOutput(buf); - - //Condition check to see if output points to a valid instance - CND_CONDITION(output != NULL, "No Outputstream retrieved"); - - uint8_t* input = NULL; - try { - for (uint32_t j = 0; j < readers.size(); ++j) { - // get the next index reader + condition check - IndexReader* reader = readers[j]; - CND_CONDITION(reader != NULL, "No reader found"); - - // Get the total number of documents including the documents - // that have been marked deleted - int32_t maxDoc = reader->maxDoc(); - if (maxDoc > 0) { - // if there are docs, allocate buffer to read it's norms - uint8_t* data = (uint8_t*)realloc(input, maxDoc * - sizeof(uint8_t)); - if (data) { - input = data; - memset(input, 0, maxDoc * sizeof(uint8_t)); - // Get an IndexInput to the norm file for this - // field in this segment - reader->norms(fi->name, input); - - //Iterate through all the documents - for(int32_t k = 0; k < maxDoc; k++) { - //Check if document k is deleted - if (!reader->isDeleted(k)) { - //write the new norm - output->writeByte(input[k]); - } - } - } - } - } - } _CLFINALLY ( - if (output != NULL) { - output->close(); - _CLDELETE(output); - } - free(input); - ); - } - } -} - -CL_NS_END diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/index/SegmentMerger.h qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/index/SegmentMerger.h --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/index/SegmentMerger.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/index/SegmentMerger.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,169 +0,0 @@ -/* - * Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team - * - * Distributable under the terms of either the Apache License (Version 2.0) or - * the GNU Lesser General Public License, as specified in the COPYING file. - * - * Changes are Copyright (C) 2015 The Qt Company Ltd. -*/ -#ifndef _lucene_index_SegmentMerger_ -#define _lucene_index_SegmentMerger_ - -#if defined(_LUCENE_PRAGMA_ONCE) -# pragma once -#endif - -#include -#include - -#include "CLucene/store/Directory.h" -#include "CLucene/store/RAMDirectory.h" -#include "CLucene/util/VoidList.h" -#include "SegmentMergeInfo.h" -#include "SegmentMergeQueue.h" -#include "IndexWriter.h" -#include "FieldInfos.h" -#include "FieldsWriter.h" -#include "TermInfosWriter.h" - -CL_NS_DEF(index) - -/** -* The SegmentMerger class combines two or more Segments, represented by an IndexReader ({@link #add}, -* into a single Segment. After adding the appropriate readers, call the merge method to combine the -* segments. -*

-* If the compoundFile flag is set, then the segments will be merged into a compound file. -* -* -* @see #merge -* @see #add -*/ -class SegmentMerger : LUCENE_BASE -{ - bool useCompoundFile; - - CL_NS(store)::RAMIndexOutput* skipBuffer; - int32_t lastSkipDoc; - int64_t lastSkipFreqPointer; - int64_t lastSkipProxPointer; - - void resetSkip(); - void bufferSkip(int32_t doc); - int64_t writeSkip(); - - //Directory of the segment - CL_NS(store)::Directory* directory; - //name of the new segment - QString segment; - //Set of IndexReaders - CL_NS(util)::CLVector > readers; - //Field Infos for t he FieldInfo instances of all fields - FieldInfos* fieldInfos; - - //The queue that holds SegmentMergeInfo instances - SegmentMergeQueue* queue; - //IndexOutput to the new Frequency File - CL_NS(store)::IndexOutput* freqOutput; - //IndexOutput to the new Prox File - CL_NS(store)::IndexOutput* proxOutput; - //Writes Terminfos that have been merged - TermInfosWriter* termInfosWriter; - TermInfo termInfo; //(new) minimize consing - - int32_t termIndexInterval; - int32_t skipInterval; - -public: - /** - * - * @param dir The Directory to merge the other segments into - * @param name The name of the new segment - * @param compoundFile true if the new segment should use a compoundFile - */ - SegmentMerger( IndexWriter* writer, const QString& name ); - - //Destructor - ~SegmentMerger(); - - /** - * Add an IndexReader to the collection of readers that are to be merged - * @param reader - */ - void add(IndexReader* reader); - - /** - * - * @param i The index of the reader to return - * @return The ith reader to be merged - */ - IndexReader* segmentReader(const int32_t i); - - /** - * Merges the readers specified by the {@link #add} method into the - * directory passed to the constructor - * @return The number of documents that were merged - * @throws IOException - */ - int32_t merge(); - /** - * close all IndexReaders that have been added. - * Should not be called before merge(). - * @throws IOException - */ - void closeReaders(); -private: - void addIndexed(IndexReader* reader, FieldInfos* fieldInfos, - CL_NS(util)::StringArrayWithDeletor& names, - bool storeTermVectors, bool storePositionWithTermVector, - bool storeOffsetWithTermVector); - - /** - * Merge the fields of all segments - * @return The number of documents in all of the readers - * @throws IOException - */ - int32_t mergeFields(); - - /** - * Merge the TermVectors from each of the segments into the new one. - * @throws IOException - */ - void mergeVectors(); - - /** Merge the terms of all segments */ - void mergeTerms(); - - /** Merges all TermInfos into a single segment */ - void mergeTermInfos(); - - /** Merge one term found in one or more segments. The array smis - * contains segments that are positioned at the same term. N - * is the number of cells in the array actually occupied. - * - * @param smis array of segments - * @param n number of cells in the array actually occupied - */ - void mergeTermInfo( SegmentMergeInfo** smis); - - /** Process postings from multiple segments all positioned on the - * same term. Writes out merged entries into freqOutput and - * the proxOutput streams. - * - * @param smis array of segments - * @param n number of cells in the array actually occupied - * @return number of documents across all segments where this term was found - */ - int32_t appendPostings(SegmentMergeInfo** smis); - - //Merges the norms for all fields - void mergeNorms(); - - void createCompoundFile(const QString& filename, QStringList& files); - friend class IndexWriter; //allow IndexWriter to use createCompoundFile -}; - -CL_NS_END - -#endif diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/index/SegmentReader.cpp qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/index/SegmentReader.cpp --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/index/SegmentReader.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/index/SegmentReader.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,816 +0,0 @@ -/* - * Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team - * - * Distributable under the terms of either the Apache License (Version 2.0) or - * the GNU Lesser General Public License, as specified in the COPYING file. - * - * Changes are Copyright (C) 2015 The Qt Company Ltd. -*/ -#include "CLucene/StdHeader.h" -#include "SegmentHeader.h" - -#include "FieldInfos.h" -#include "FieldsReader.h" -#include "IndexReader.h" -#include "TermInfosReader.h" -#include "Terms.h" -#include "CLucene/search/Similarity.h" - -CL_NS_USE(util) -CL_NS_USE(store) -CL_NS_USE(document) -CL_NS_USE(search) -CL_NS_DEF(index) - -SegmentReader::Norm::Norm(IndexInput* instrm, int32_t n, SegmentReader* r, - const QString& seg) - : number(n) - , reader(r) - , segment(seg) - , in(instrm) - , bytes(NULL) - , dirty(false) -{ - //Func - Constructor - //Pre - instrm is a valid reference to an IndexInput - //Post - A Norm instance has been created with an empty bytes array - bytes = NULL; - dirty = false; -} - -SegmentReader::Norm::~Norm() -{ - //Func - Destructor - //Pre - true - //Post - The IndexInput in has been deleted (and closed by its destructor) - // and the array too. - - //Close and destroy the inputstream in-> The inputstream will be closed - // by its destructor. Note that the IndexInput 'in' actually is a pointer!!!!! - _CLDELETE(in); - - //Delete the bytes array - _CLDELETE_ARRAY(bytes); - -} - -void SegmentReader::Norm::reWrite() -{ - QString buf(segment + QLatin1String(".tmp")); - - // NOTE: norms are re-written in regular directory, not cfs - IndexOutput* out = reader->getDirectory()->createOutput(buf); - try { - out->writeBytes(bytes, reader->maxDoc()); - } _CLFINALLY ( - out->close(); - _CLDELETE(out) - ); - - QString fileName(segment); - if (reader->cfsReader == NULL) - fileName.append(QLatin1String(".f%1")).arg(number); - else // use a different file name if we have compound format - fileName.append(QLatin1String(".s%1")).arg(number); - - reader->getDirectory()->renameFile(buf, fileName); - this->dirty = false; -} - -SegmentReader::SegmentReader(SegmentInfo* si) - : IndexReader(si->getDir()) - , _norms(false, false) -{ - initialize(si); -} - -SegmentReader::SegmentReader(SegmentInfos* sis, SegmentInfo* si) - : IndexReader(si->getDir(), sis, false) - , _norms(false, false) -{ - initialize(si); -} - -void SegmentReader::initialize(SegmentInfo* si) -{ - //Pre - si-> is a valid reference to SegmentInfo instance - // identified by si-> - //Post - All files of the segment have been read - - deletedDocs = NULL; - ones = NULL; - //There are no documents yet marked as deleted - deletedDocsDirty = false; - - normsDirty=false; - undeleteAll=false; - - //Duplicate the name of the segment from SegmentInfo to segment - segment = si->name; - // make sure that all index files have been read or are kept open - // so that if an index update removes them we'll still have them - freqStream = NULL; - proxStream = NULL; - - //instantiate a buffer large enough to hold a directory path - QString buf; - - // Use compound file directory for some files, if it exists - Directory* cfsDir = getDirectory(); - SegmentName(buf, CL_MAX_PATH, QLatin1String(".cfs")); - if (cfsDir->fileExists(buf)) { - cfsReader = _CLNEW CompoundFileReader(cfsDir, buf); - cfsDir = cfsReader; - }else - cfsReader = NULL; - - // Create the name of the field info file with suffix .fnm in buf - SegmentName(buf, CL_MAX_PATH, QLatin1String(".fnm")); - fieldInfos = _CLNEW FieldInfos(cfsDir, buf ); - - // Condition check to see if fieldInfos points to a valid instance - CND_CONDITION(fieldInfos != NULL, - "No memory could be allocated for fieldInfos"); - - // Create the name of the frequence file with suffix .frq in buf - SegmentName(buf ,CL_MAX_PATH, QLatin1String(".frq")); - - // Open an IndexInput freqStream to the frequency file - freqStream = cfsDir->openInput( buf ); - - // Condition check to see if freqStream points to a valid instance and was - // able to open the frequency file - CND_CONDITION(freqStream != NULL, - "IndexInput freqStream could not open the frequency file"); - - // Create the name of the prox file with suffix .prx in buf - SegmentName(buf, CL_MAX_PATH, QLatin1String(".prx")); - - // Open an IndexInput proxStream to the prox file - proxStream = cfsDir->openInput( buf ); - - // Condition check to see if proxStream points to a valid instance and was - // able to open the prox file - CND_CONDITION(proxStream != NULL, - "IndexInput proxStream could not open proximity file"); - - // Instantiate a FieldsReader for reading the Field Info File - fieldsReader = _CLNEW FieldsReader(cfsDir, segment, fieldInfos); - - // Condition check to see if fieldsReader points to a valid instance - CND_CONDITION(fieldsReader != NULL, - "No memory could be allocated for fieldsReader"); - - //Instantiate a TermInfosReader for reading the Term Dictionary .tis file - tis = _CLNEW TermInfosReader(cfsDir, segment, fieldInfos); - - //Condition check to see if tis points to a valid instance - CND_CONDITION(tis != NULL,"No memory could be allocated for tis"); - - // Check if the segment has deletion according to the SegmentInfo instance - // si-> NOTE: the bitvector is stored using the regular directory, not cfs - if (hasDeletions(si)) { - //Create a deletion file with suffix .del - SegmentName(buf, CL_MAX_PATH, QLatin1String(".del")); - // Instantiate a BitVector that manages which documents have been deleted - deletedDocs = _CLNEW BitSet(getDirectory(), buf); - } - - // Open the norm file. There's a norm file for each indexed field with a - // byte for each document. The .f[0-9]* file contains, for each document, - // a byte that encodes a value that is multiplied into the score for hits - // on that field - openNorms(cfsDir); - - termVectorsReaderOrig = NULL; - if (fieldInfos->hasVectors()) // open term vector files only as needed - termVectorsReaderOrig = _CLNEW TermVectorsReader(cfsDir, segment, fieldInfos); -} - -SegmentReader::~SegmentReader() -{ - //Func - Destructor. - //Pre - doClose has been invoked! - //Post - the instance has been destroyed - - doClose(); //this means that index reader doesn't need to be closed manually - - _CLDELETE(fieldInfos); - _CLDELETE(fieldsReader); - _CLDELETE(tis); - _CLDELETE(freqStream); - _CLDELETE(proxStream); - _CLDELETE(deletedDocs); - _CLDELETE_ARRAY(ones); - _CLDELETE(termVectorsReaderOrig); - _CLDECDELETE(cfsReader); -} - -void SegmentReader::doCommit() -{ - QString bufdel(segment + QLatin1String(".del")); - - if (deletedDocsDirty) { // re-write deleted - QString buftmp(segment + QLatin1String(".tmp")); - deletedDocs->write(getDirectory(), buftmp); - getDirectory()->renameFile(buftmp, bufdel); - } - - if(undeleteAll && getDirectory()->fileExists(bufdel)) - getDirectory()->deleteFile(bufdel, true); - - if (normsDirty) { // re-write norms - NormsType::iterator itr = _norms.begin(); - while (itr != _norms.end()) { - Norm* norm = itr->second; - if (norm->dirty) { - norm->reWrite(); - } - ++itr; - } - } - deletedDocsDirty = false; - normsDirty = false; - undeleteAll = false; -} - -void SegmentReader::doClose() -{ - //Func - Closes all streams to the files of a single segment - //Pre - fieldsReader != NULL - // tis != NULL - //Post - All streams to files have been closed - - CND_PRECONDITION(fieldsReader != NULL, "fieldsReader is NULL"); - CND_PRECONDITION(tis != NULL, "tis is NULL"); - - //Close the fieldsReader - fieldsReader->close(); - //Close the TermInfosReader - tis->close(); - - //Close the frequency stream - if (freqStream != NULL){ - freqStream->close(); - } - //Close the prox stream - if (proxStream != NULL){ - proxStream->close(); - } - - //Close the norm file - closeNorms(); - - if (termVectorsReaderOrig != NULL) - termVectorsReaderOrig->close(); - - if (cfsReader != NULL) - cfsReader->close(); -} - -bool SegmentReader::hasDeletions() const -{ - return deletedDocs != NULL; -} - -//static -bool SegmentReader::usesCompoundFile(SegmentInfo* si) -{ - return si->getDir()->fileExists(si->name + QLatin1String(".cfs")); -} - -//static -bool SegmentReader::hasSeparateNorms(SegmentInfo* si) -{ - QString pattern(si->name); - pattern.append(QLatin1String(".s")); - size_t patternLength = pattern.length(); - - QStringList names = si->getDir()->list(); - foreach (const QString& name, names) { - int length = name.length(); - if (length > patternLength && name.left(patternLength) == pattern) { - if (name.at(patternLength) >= QLatin1Char('0') - && name.at(patternLength) <= QLatin1Char('9')) { - return true; - } - } - } - return false; -} - -bool SegmentReader::hasDeletions(const SegmentInfo* si) -{ - //Func - Static method - // Checks if a segment managed by SegmentInfo si-> has deletions - //Pre - si-> holds a valid reference to an SegmentInfo instance - //Post - if the segement contains deleteions true is returned otherwise flas - - //Check if the deletion file exists and return the result - QString f; - Misc::segmentname(f, CL_MAX_PATH, si->name, QLatin1String(".del"), -1); - return si->getDir()->fileExists(f); -} - -//synchronized -void SegmentReader::doDelete(const int32_t docNum) -{ - //Func - Marks document docNum as deleted - //Pre - docNum >=0 and DocNum < maxDoc() - // docNum contains the number of the document that must be - // marked deleted - //Post - The document identified by docNum has been marked deleted - - SCOPED_LOCK_MUTEX(THIS_LOCK) - - CND_PRECONDITION(docNum >= 0, "docNum is a negative number"); - CND_PRECONDITION(docNum < maxDoc(), - "docNum is bigger than the total number of documents"); - - //Check if deletedDocs exists - if (deletedDocs == NULL) { - deletedDocs = _CLNEW BitSet(maxDoc()); - - //Condition check to see if deletedDocs points to a valid instance - CND_CONDITION(deletedDocs != NULL, - "No memory could be allocated for deletedDocs"); - } - //Flag that there are documents marked deleted - deletedDocsDirty = true; - undeleteAll = false; - //Mark document identified by docNum as deleted - deletedDocs->set(docNum); - -} - -void SegmentReader::doUndeleteAll() -{ - _CLDELETE(deletedDocs); - deletedDocsDirty = false; - undeleteAll = true; -} - -void SegmentReader::files(QStringList& retarray) -{ - //Func - Returns all file names managed by this SegmentReader - //Pre - segment != NULL - //Post - All filenames managed by this SegmentRead have been returned - - CND_PRECONDITION(segment != NULL, "segment is NULL"); - - QString temp; - #define _ADD_SEGMENT(ext) \ - temp = SegmentName(ext); \ - if (getDirectory()->fileExists(temp)) \ - retarray.push_back(temp); - - //Add the name of the Field Info file - _ADD_SEGMENT(QLatin1String(".cfs")); - _ADD_SEGMENT(QLatin1String(".fnm")); - _ADD_SEGMENT(QLatin1String(".fdx")); - _ADD_SEGMENT(QLatin1String(".fdt")); - _ADD_SEGMENT(QLatin1String(".tii")); - _ADD_SEGMENT(QLatin1String(".tis")); - _ADD_SEGMENT(QLatin1String(".frq")); - _ADD_SEGMENT(QLatin1String(".prx")); - _ADD_SEGMENT(QLatin1String(".del")); - _ADD_SEGMENT(QLatin1String(".tvx")); - _ADD_SEGMENT(QLatin1String(".tvd")); - _ADD_SEGMENT(QLatin1String(".tvf")); - _ADD_SEGMENT(QLatin1String(".tvp")); - - //iterate through the field infos - for (int32_t i = 0; i < fieldInfos->size(); ++i) { - //Get the field info for the i-th field - FieldInfo* fi = fieldInfos->fieldInfo(i); - //Check if the field has been indexed - if (fi->isIndexed && !fi->omitNorms) { - QString name; - if (cfsReader == NULL) - name = SegmentName(QLatin1String(".f"), i); - else - name = SegmentName(QLatin1String(".s"), i); - - //The field has been indexed so add its norm file - if (getDirectory()->fileExists(name)) - retarray.push_back(name); - } - } -} - -TermEnum* SegmentReader::terms() const -{ - //Func - Returns an enumeration of all the Terms and TermInfos in the set. - //Pre - tis != NULL - //Post - An enumeration of all the Terms and TermInfos in the set has been returned - - CND_PRECONDITION(tis != NULL, "tis is NULL"); - - return tis->terms(); -} - -TermEnum* SegmentReader::terms(const Term* t) const -{ - //Func - Returns an enumeration of terms starting at or after the named term t - //Pre - t != NULL - // tis != NULL - //Post - An enumeration of terms starting at or after the named term t - - CND_PRECONDITION(t != NULL, "t is NULL"); - CND_PRECONDITION(tis != NULL, "tis is NULL"); - - return tis->terms(t); -} - -bool SegmentReader::document(int32_t n, Document* doc) -{ - //Func - Returns a document identified by n - //Pre - n >=0 and identifies the document n - //Post - if the document has been deleted then an exception has been thrown - // otherwise a reference to the found document has been returned - - SCOPED_LOCK_MUTEX(THIS_LOCK) - - CND_PRECONDITION(n >= 0, "n is a negative number"); - - //Check if the n-th document has been marked deleted - if (isDeleted(n)) - _CLTHROWA(CL_ERR_InvalidState, "attempt to access a deleted document" ); - - //Retrieve the n-th document - return fieldsReader->doc(n, doc); -} - -bool SegmentReader::isDeleted(const int32_t n) -{ - //Func - Checks if the n-th document has been marked deleted - //Pre - n >=0 and identifies the document n - //Post - true has been returned if document n has been deleted otherwise fralse - - SCOPED_LOCK_MUTEX(THIS_LOCK) - - CND_PRECONDITION(n >= 0, "n is a negative number"); - - //Is document n deleted - return (deletedDocs != NULL && deletedDocs->get(n)); -} - -TermDocs* SegmentReader::termDocs() const -{ - //Func - Returns an unpositioned TermDocs enumerator. - //Pre - true - //Post - An unpositioned TermDocs enumerator has been returned - - return _CLNEW SegmentTermDocs(this); -} - -TermPositions* SegmentReader::termPositions() const -{ - //Func - Returns an unpositioned TermPositions enumerator. - //Pre - true - //Post - An unpositioned TermPositions enumerator has been returned - - return _CLNEW SegmentTermPositions(this); -} - -int32_t SegmentReader::docFreq(const Term* t) const -{ - //Func - Returns the number of documents which contain the term t - //Pre - t holds a valid reference to a Term - //Post - The number of documents which contain term t has been returned - - //Get the TermInfo ti for Term t in the set - TermInfo* ti = tis->get(t); - //Check if an TermInfo has been returned - if (ti) { - //Get the frequency of the term - int32_t ret = ti->docFreq; - //TermInfo ti is not needed anymore so delete it - _CLDELETE( ti ); - //return the number of documents which containt term t - return ret; - } - - //No TermInfo returned so return 0 - return 0; -} - -int32_t SegmentReader::numDocs() -{ - //Func - Returns the actual number of documents in the segment - //Pre - true - //Post - The actual number of documents in the segments - - //Get the number of all the documents in the segment including the ones that have - //been marked deleted - int32_t n = maxDoc(); - - //Check if there any deleted docs - if (deletedDocs != NULL) - //Substract the number of deleted docs from the number returned by maxDoc - n -= deletedDocs->count(); - - //return the actual number of documents in the segment - return n; -} - -int32_t SegmentReader::maxDoc() const -{ - //Func - Returns the number of all the documents in the segment including - // the ones that have been marked deleted - //Pre - true - //Post - The total number of documents in the segment has been returned - - return fieldsReader->size(); -} - -void SegmentReader::getFieldNames(FieldOption fldOption, - StringArrayWithDeletor& retarray) -{ - size_t len = fieldInfos->size(); - for (size_t i = 0; i < len; i++) { - bool v = false; - FieldInfo* fi = fieldInfos->fieldInfo(i); - if (fldOption & IndexReader::ALL) { - v = true; - } else { - if (!fi->isIndexed && (fldOption & IndexReader::UNINDEXED)) { - v = true; - } - - if (fi->isIndexed && (fldOption & IndexReader::INDEXED)) { - v = true; - } - - if (fi->isIndexed && fi->storeTermVector == false - && (fldOption & IndexReader::INDEXED_NO_TERMVECTOR)) { - v = true; - } - - if ((fldOption & IndexReader::TERMVECTOR) - && fi->storeTermVector == true - && fi->storePositionWithTermVector == false - && fi->storeOffsetWithTermVector == false) { - v = true; - } - - if (fi->isIndexed && fi->storeTermVector - && (fldOption & IndexReader::INDEXED_WITH_TERMVECTOR)) { - v = true; - } - - if (fi->storePositionWithTermVector - && fi->storeOffsetWithTermVector == false - && (fldOption & IndexReader::TERMVECTOR_WITH_POSITION)) { - v = true; - } - - if (fi->storeOffsetWithTermVector - && fi->storePositionWithTermVector == false - && (fldOption & IndexReader::TERMVECTOR_WITH_OFFSET)) { - v = true; - } - - if ((fi->storeOffsetWithTermVector && fi->storePositionWithTermVector) - && (fldOption & IndexReader::TERMVECTOR_WITH_POSITION_OFFSET)) { - v = true; - } - } - - if (v) - retarray.push_back(STRDUP_TtoT(fi->name)); - } -} - -bool SegmentReader::hasNorms(const TCHAR* field) const -{ - return _norms.find(field) != _norms.end(); -} - - -void SegmentReader::norms(const TCHAR* field, uint8_t* bytes) -{ - //Func - Reads the Norms for field from disk starting at offset in the inputstream - //Pre - field != NULL - // bytes != NULL is an array of bytes which is to be used to read the norms into. - // it is advisable to have bytes initalized by zeroes! - //Post - The if an inputstream to the norm file could be retrieved the bytes have been read - // You are never sure whether or not the norms have been read into bytes properly!!!!!!!!!!!!!!!!! - - CND_PRECONDITION(field != NULL, "field is NULL"); - CND_PRECONDITION(bytes != NULL, "field is NULL"); - - SCOPED_LOCK_MUTEX(THIS_LOCK) - - Norm* norm = _norms.get(field); - if ( norm == NULL ){ - memcpy(bytes, fakeNorms(), maxDoc()); - return; - } - - if (norm->bytes != NULL) { // can copy from cache - memcpy(bytes, norm->bytes, maxDoc()); - return; - } - - IndexInput* _normStream = norm->in->clone(); - CND_PRECONDITION(_normStream != NULL, "normStream==NULL") - - // read from disk - try { - _normStream->seek(0); - _normStream->readBytes(bytes, maxDoc()); - } _CLFINALLY ( - //Have the normstream closed - _normStream->close(); - //Destroy the normstream - _CLDELETE( _normStream ); - ); -} - -uint8_t* SegmentReader::createFakeNorms(int32_t size) -{ - uint8_t* ones = _CL_NEWARRAY(uint8_t,size); - memset(ones, DefaultSimilarity::encodeNorm(1.0f), size); - return ones; -} - -uint8_t* SegmentReader::fakeNorms() -{ - if (ones == NULL) - ones = createFakeNorms(maxDoc()); - return ones; -} - -// can return null if norms aren't stored -uint8_t* SegmentReader::getNorms(const TCHAR* field) -{ - SCOPED_LOCK_MUTEX(THIS_LOCK) - Norm* norm = _norms.get(field); - if (norm == NULL) - return NULL; // not indexed, or norms not stored - - if (norm->bytes == NULL) { // value not yet read - uint8_t* bytes = _CL_NEWARRAY(uint8_t, maxDoc()); - norms(field, bytes); - norm->bytes = bytes; // cache it - } - return norm->bytes; -} - -uint8_t* SegmentReader::norms(const TCHAR* field) -{ - //Func - Returns the bytes array that holds the norms of a named field - //Pre - field != NULL and contains the name of the field for which the norms - // must be retrieved - //Post - If there was norm for the named field then a bytes array has been allocated - // and returned containing the norms for that field. If the named field is unknown NULL is returned. - - CND_PRECONDITION(field != NULL, "field is NULL"); - - SCOPED_LOCK_MUTEX(THIS_LOCK) - - uint8_t* bytes = getNorms(field); - if (bytes == NULL) - bytes = fakeNorms(); - return bytes; -} - -void SegmentReader::doSetNorm(int32_t doc, const TCHAR* field, uint8_t value) -{ - Norm* norm = _norms.get(field); - if (norm == NULL) // not an indexed field - return; - - norm->dirty = true; // mark it dirty - normsDirty = true; - - uint8_t* bits = norms(field); - bits[doc] = value; // set the value -} - -QString SegmentReader::SegmentName(const QString& ext, const int32_t x) -{ - //Func - Returns an allocated buffer in which it creates a filename by - // concatenating segment with ext and x - //Pre ext != NULL and holds the extension - // x contains a number - //Post - A buffer has been instantiated an when x = -1 buffer contains the concatenation of - // segment and ext otherwise buffer contains the contentation of segment, ext and x - - CND_PRECONDITION(!ext.isEmpty(), "ext is NULL"); - - QString buf; - SegmentName(buf, CL_MAX_PATH, ext, x); - return buf; -} - -void SegmentReader::SegmentName(QString& buffer, int32_t bufferLen, - const QString& ext, const int32_t x) -{ - //Func - Creates a filename in buffer by concatenating segment with ext and x - //Pre - buffer != NULL - // ext != NULL - // x contains a number - //Post - When x = -1 buffer contains the concatenation of segment and ext otherwise - // buffer contains the contentation of segment, ext and x - - CND_PRECONDITION(!segment.isEmpty(), "Segment is NULL"); - - Misc::segmentname(buffer, bufferLen, segment, ext, x); -} - -void SegmentReader::openNorms(Directory* cfsDir) -{ - //Func - Open all norms files for all fields - // Creates for each field a norm Instance with an open inputstream to - // a corresponding norm file ready to be read - //Pre - true - //Post - For each field a norm instance has been created with an open inputstream to - // a corresponding norm file ready to be read - - //Iterate through all the fields - for (int32_t i = 0; i < fieldInfos->size(); i++) { - //Get the FieldInfo for the i-th field - FieldInfo* fi = fieldInfos->fieldInfo(i); - //Check if the field is indexed - if (fi->isIndexed && !fi->omitNorms ) { - //Allocate a buffer - QString fileName; - - // look first if there are separate norms in compound format - SegmentName(fileName, CL_MAX_PATH, QLatin1String(".s"), fi->number); - Directory* d = getDirectory(); - if(!d->fileExists(fileName)){ - SegmentName(fileName, CL_MAX_PATH, QLatin1String(".f"), fi->number); - d = cfsDir; - } - - _norms.put(fi->name, _CLNEW Norm(d->openInput(fileName), - fi->number, this, segment)); - } - } -} - -void SegmentReader::closeNorms() -{ - //Func - Close all the norms stored in norms - //Pre - true - //Post - All the norms have been destroyed - - SCOPED_LOCK_MUTEX(_norms.THIS_LOCK) - - //Create an interator initialized at the beginning of norms - NormsType::iterator itr = _norms.begin(); - //Iterate through all the norms - while (itr != _norms.end()) { - // Get, delete the norm - _CLDELETE(itr->second); - // Move the interator to the next norm in the norms collection. - // Note ++ is an overloaded operator - ++itr; - } - _norms.clear(); //bvk: they're deleted, so clear them so that they are not re-used -} - -TermVectorsReader* SegmentReader::getTermVectorsReader() -{ - TermVectorsReader* tvReader = termVectorsLocal.get(); - if (tvReader == NULL) { - tvReader = termVectorsReaderOrig->clone(); - termVectorsLocal.set(tvReader); - } - return tvReader; -} - -TermFreqVector* SegmentReader::getTermFreqVector(int32_t docNumber, - const TCHAR* field) -{ - if (field) { - FieldInfo* fi = fieldInfos->fieldInfo(field); - // Check if this field is invalid or has no stored term vector - if (fi == NULL || !fi->storeTermVector || termVectorsReaderOrig == NULL) - return NULL; - } - - TermVectorsReader* termVectorsReader = getTermVectorsReader(); - if (termVectorsReader == NULL) - return NULL; - - return termVectorsReader->get(docNumber, field); -} - -bool SegmentReader::getTermFreqVectors(int32_t docNumber, - Array& result) -{ - if (termVectorsReaderOrig == NULL) - return false; - - TermVectorsReader* termVectorsReader = getTermVectorsReader(); - if (termVectorsReader == NULL) - return false; - - return termVectorsReader->get(docNumber, result); -} - -CL_NS_END diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/index/SegmentTermDocs.cpp qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/index/SegmentTermDocs.cpp --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/index/SegmentTermDocs.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/index/SegmentTermDocs.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,216 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#include "CLucene/StdHeader.h" -#include "SegmentHeader.h" - -#include "CLucene/store/IndexInput.h" -#include "Term.h" - -CL_NS_DEF(index) - - SegmentTermDocs::SegmentTermDocs(const SegmentReader* _parent){ - //Func - Constructor - //Pre - Paren != NULL - //Post - The instance has been created - - CND_PRECONDITION(_parent != NULL,"Parent is NULL"); - - parent = _parent; - deletedDocs = parent->deletedDocs; - - _doc = 0; - _freq = 0; - count = 0; - df = 0; - - skipInterval=0; - numSkips=0; - skipCount=0; - skipStream=NULL; - skipDoc=0; - freqPointer=0; - proxPointer=0; - skipPointer=0; - haveSkipped=false; - - freqStream = parent->freqStream->clone(); - skipInterval = parent->tis->getSkipInterval(); - } - - SegmentTermDocs::~SegmentTermDocs() { - //Func - Destructor - //Pre - true - //Post - The instance has been destroyed - - close(); - } - - TermPositions* SegmentTermDocs::__asTermPositions(){ - return NULL; - } - - void SegmentTermDocs::seek(Term* term) { - TermInfo* ti = parent->tis->get(term); - seek(ti); - _CLDELETE(ti); - } - - void SegmentTermDocs::seek(TermEnum* termEnum){ - TermInfo* ti=NULL; - - // use comparison of fieldinfos to verify that termEnum belongs to the same segment as this SegmentTermDocs - if ( termEnum->getObjectName() == SegmentTermEnum::getClassName() ){ - SegmentTermEnum* te = (SegmentTermEnum*)termEnum; - te->fieldInfos = parent->fieldInfos; - ti = te->getTermInfo(); - }else{ - ti = parent->tis->get(termEnum->term(false)); - } - - seek(ti); - _CLDELETE(ti); - } - void SegmentTermDocs::seek(const TermInfo* ti) { - count = 0; - if (ti == NULL) { - df = 0; - } else { - df = ti->docFreq; - _doc = 0; - skipDoc = 0; - skipCount = 0; - numSkips = df / skipInterval; - freqPointer = ti->freqPointer; - proxPointer = ti->proxPointer; - skipPointer = freqPointer + ti->skipOffset; - freqStream->seek(freqPointer); - haveSkipped = false; - } - } - - void SegmentTermDocs::close() { - - //Check if freqStream still exists - if (freqStream != NULL){ - freqStream->close(); //todo: items like these can probably be delete, because deleting the object also closes it...do everywhere - _CLDELETE( freqStream ); - } - if (skipStream != NULL){ - skipStream->close(); - _CLDELETE( skipStream ); - } - } - - int32_t SegmentTermDocs::doc()const { - return _doc; - } - int32_t SegmentTermDocs::freq()const { - return _freq; - } - - -bool SegmentTermDocs::next() -{ - while (true) { - if (count == df) - return false; - - uint32_t docCode = freqStream->readVInt(); - _doc += docCode >> 1; //unsigned shift - if ((docCode & 1) != 0) // if low bit is set - _freq = 1; // _freq is one - else - _freq = freqStream->readVInt(); // else read _freq - count++; - - if (deletedDocs == NULL || (_doc >= 0 && !deletedDocs->get(_doc))) - break; - skippingDoc(); - } - return true; -} - - -int32_t SegmentTermDocs::read(int32_t* docs, int32_t* freqs, int32_t length) -{ - int32_t i = 0; - // TODO: one optimization would be to get the pointer buffer for ram or mmap - // dirs and iterate over them instead of using readByte() intensive functions. - while (i < length && count < df) { - uint32_t docCode = freqStream->readVInt(); - _doc += docCode >> 1; - if ((docCode & 1) != 0) // if low bit is set - _freq = 1; // _freq is one - else - _freq = freqStream->readVInt(); // else read _freq - count++; - - if (deletedDocs == NULL || (_doc >= 0 && !deletedDocs->get(_doc))) { - docs[i] = _doc; - freqs[i] = _freq; - i++; - } - } - return i; -} - - bool SegmentTermDocs::skipTo(const int32_t target){ - if (df >= skipInterval) { // optimized case - if (skipStream == NULL) - skipStream = freqStream->clone(); // lazily clone - - if (!haveSkipped) { // lazily seek skip stream - skipStream->seek(skipPointer); - haveSkipped = true; - } - - // scan skip data - int32_t lastSkipDoc = skipDoc; - int64_t lastFreqPointer = freqStream->getFilePointer(); - int64_t lastProxPointer = -1; - int32_t numSkipped = -1 - (count % skipInterval); - - while (target > skipDoc) { - lastSkipDoc = skipDoc; - lastFreqPointer = freqPointer; - lastProxPointer = proxPointer; - - if (skipDoc != 0 && skipDoc >= _doc) - numSkipped += skipInterval; - - if(skipCount >= numSkips) - break; - - skipDoc += skipStream->readVInt(); - freqPointer += skipStream->readVInt(); - proxPointer += skipStream->readVInt(); - - skipCount++; - } - - // if we found something to skip, then skip it - if (lastFreqPointer > freqStream->getFilePointer()) { - freqStream->seek(lastFreqPointer); - skipProx(lastProxPointer); - - _doc = lastSkipDoc; - count += numSkipped; - } - - } - - // done skipping, now just scan - - do { - if (!next()) - return false; - } while (target > _doc); - return true; - } - - -CL_NS_END diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/index/SegmentTermEnum.cpp qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/index/SegmentTermEnum.cpp --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/index/SegmentTermEnum.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/index/SegmentTermEnum.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,389 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#include "CLucene/StdHeader.h" -#include "SegmentTermEnum.h" - -#include "Terms.h" -#include "FieldInfos.h" -#include "Term.h" -#include "TermInfo.h" -#include "TermInfosWriter.h" - -CL_NS_USE(store) -CL_NS_DEF(index) - - SegmentTermEnum::SegmentTermEnum(IndexInput* i, FieldInfos* fis, const bool isi): - fieldInfos(fis){ - //Func - Constructor - //Pre - i holds a reference to an instance of IndexInput - // fis holds a reference to an instance of FieldInfos - // isi - //Post - An instance of SegmentTermEnum has been created - input = i; - position = -1; - //Instantiate a Term with empty field, empty text and which is interned (see term.h what interned means) - _term = _CLNEW Term; - isIndex = isi; - termInfo = _CLNEW TermInfo(); - indexPointer = 0; - buffer = NULL; - bufferLength = 0; - prev = NULL; - formatM1SkipInterval = 0; - - //Set isClone to false as the instance is not clone of another instance - isClone = false; - - - int32_t firstInt = input->readInt(); - if (firstInt >= 0) { - // original-format file, without explicit format version number - format = 0; - size = firstInt; - - // back-compatible settings - indexInterval = 128; - skipInterval = LUCENE_INT32_MAX_SHOULDBE; // switch off skipTo optimization - - } else { - // we have a format version number - format = firstInt; - - // check that it is a format we can understand - if (format < TermInfosWriter::FORMAT){ - TCHAR err[30]; - _sntprintf(err,30,_T("Unknown format version: %d"), format); - _CLTHROWT(CL_ERR_Runtime,err); - } - - size = input->readLong(); // read the size - - if(format == -1){ - if (!isIndex) { - indexInterval = input->readInt(); - formatM1SkipInterval = input->readInt(); - } - // switch off skipTo optimization for file format prior to 1.4rc2 in order to avoid a bug in - // skipTo implementation of these versions - skipInterval = LUCENE_INT32_MAX_SHOULDBE; - }else{ - indexInterval = input->readInt(); - skipInterval = input->readInt(); - } - } - } - - SegmentTermEnum::SegmentTermEnum(const SegmentTermEnum& clone): - fieldInfos(clone.fieldInfos) - { - //Func - Constructor - // The instance is created by cloning all properties of clone - //Pre - clone holds a valid reference to SegmentTermEnum - //Post - An instance of SegmentTermEnum with the same properties as clone - - input = clone.input->clone(); - //Copy the postion from the clone - position = clone.position; - - if ( clone._term != NULL ){ - _term = _CLNEW Term; - _term->set(clone._term,clone._term->text()); - }else - _term = NULL; - isIndex = clone.isIndex; - termInfo = _CLNEW TermInfo(clone.termInfo); - indexPointer = clone.indexPointer; - buffer = clone.buffer==NULL?NULL:(TCHAR*)malloc(sizeof(TCHAR) * (clone.bufferLength+1)); - bufferLength = clone.bufferLength; - prev = clone.prev==NULL?NULL:_CLNEW Term(clone.prev->field(),clone.prev->text(),false); - size = clone.size; - - format = clone.format; - indexInterval= clone.indexInterval; - skipInterval = clone.skipInterval; - formatM1SkipInterval = clone.formatM1SkipInterval; - //Set isClone to true as this instance is a clone of another instance - isClone = true; - - //Copy the contents of buffer of clone to the buffer of this instance - if ( clone.buffer != NULL ) - memcpy(buffer,clone.buffer,bufferLength * sizeof(TCHAR)); - } - - SegmentTermEnum::~SegmentTermEnum(){ - //Func - Destructor - //Pre - true - //Post - The instance has been destroyed. If this instance was a clone - // then the inputstream is closed and deleted too. - - //todo: revisit this... close() should clean up most of everything. - - //Finalize prev - _CLDECDELETE(prev ); - //Finalize term - _CLDECDELETE( _term ); - - - //Delete the buffer if necessary - free(buffer); - //Delete termInfo if necessary - _CLDELETE(termInfo); - - //Check if this instance is a clone - if ( isClone ){ - //Close the inputstream - input->close(); - //delete the inputstream - _CLDELETE(input); - } - } - - bool SegmentTermEnum::next(){ - //Func - Moves the current of the set to the next in the set - //Pre - true - //Post - If the end has been reached NULL is returned otherwise the term has - // become the next Term in the enumeration - - //Increase position by and and check if the end has been reached - if (position++ >= size-1) { - //delete term - _CLDECDELETE(_term); - return false; - } - - //delete the previous enumerated term - Term* tmp=NULL; - if ( prev != NULL ){ - int32_t usage = prev->__cl_refcount; - if ( usage > 1 ){ - _CLDECDELETE(prev); //todo: tune other places try and delete its term - }else - tmp = prev; //we are going to re-use this term - } - //prev becomes the current enumerated term - prev = _term; - //term becomes the next term read from inputStream input - _term = readTerm(tmp); - - //Read docFreq, the number of documents which contain the term. - termInfo->docFreq = input->readVInt(); - //Read freqPointer, a pointer into the TermFreqs file (.frq) - termInfo->freqPointer += input->readVLong(); - - //Read proxPointer, a pointer into the TermPosition file (.prx). - termInfo->proxPointer += input->readVLong(); - - if(format == -1){ - // just read skipOffset in order to increment file pointer; - // value is never used since skipTo is switched off - if (!isIndex) { - if (termInfo->docFreq > formatM1SkipInterval) { - termInfo->skipOffset = input->readVInt(); - } - } - }else{ - if (termInfo->docFreq >= skipInterval) - termInfo->skipOffset = input->readVInt(); - } - - //Check if the enumeration is an index - if (isIndex) - //read index pointer - indexPointer += input->readVLong(); - - return true; - } - - Term* SegmentTermEnum::term() { - //Func - Returns the current term. - //Pre - pointer is true or false and indicates if the reference counter - // of term must be increased or not - // next() must have been called once! - //Post - pointer = true -> term has been returned with an increased reference counter - // pointer = false -> term has been returned - - return _CL_POINTER(_term); - } - Term* SegmentTermEnum::term(bool pointer) { - if ( pointer ) - return _CL_POINTER(_term); - else - return _term; - } - - void SegmentTermEnum::scanTo(const Term *term){ - //Func - Scan for Term without allocating new Terms - //Pre - term != NULL - //Post - The iterator term has been moved to the position where Term is expected to be - // in the enumeration - while ( term->compareTo(this->_term) > 0 && next()) - { - } - } - - void SegmentTermEnum::close() { - //Func - Closes the enumeration to further activity, freeing resources. - //Pre - true - //Post - The inputStream input has been closed - - input->close(); - } - - int32_t SegmentTermEnum::docFreq() const { - //Func - Returns the document frequency of the current term in the set - //Pre - termInfo != NULL - // next() must have been called once - //Post - The document frequency of the current enumerated term has been returned - - return termInfo->docFreq; - } - - void SegmentTermEnum::seek(const int64_t pointer, const int32_t p, Term* t, TermInfo* ti) { - //Func - Repositions term and termInfo within the enumeration - //Pre - pointer >= 0 - // p >= 0 and contains the new position within the enumeration - // t is a valid reference to a Term and is the new current term in the enumeration - // ti is a valid reference to a TermInfo and is corresponding TermInfo form the new - // current Term - //Post - term and terminfo have been repositioned within the enumeration - - //Reset the IndexInput input to pointer - input->seek(pointer); - //Assign the new position - position = p; - - //finalize the current term - if ( _term == NULL || _term->__cl_refcount > 1 ){ - _CLDECDELETE(_term); - //Get a pointer from t and increase the reference counter of t - _term = _CLNEW Term; //cannot use reference, because TermInfosReader uses non ref-counted array - } - _term->set(t,t->text()); - - //finalize prev - _CLDECDELETE(prev); - - //Change the current termInfo so it matches the new current term - termInfo->set(ti); - - //Have the buffer grown if needed - if ( bufferLength <= _term->textLength() ) - growBuffer(_term->textLength(), true ); // copy term text into buffer - else - _tcsncpy(buffer,_term->text(),bufferLength); //just copy the buffer - } - - TermInfo* SegmentTermEnum::getTermInfo()const { - //Func - Returns a clone of the current termInfo - //Pre - termInfo != NULL - // next() must have been called once - //Post - A clone of the current termInfo has been returned - - return _CLNEW TermInfo(*termInfo); //clone - } - - void SegmentTermEnum::getTermInfo(TermInfo* ti)const { - //Func - Retrieves a clone of termInfo through the reference ti - //Pre - ti contains a valid reference to TermInfo - // termInfo != NULL - // next() must have been called once - //Post - ti contains a clone of termInfo - - ti->set(termInfo); - } - - int64_t SegmentTermEnum::freqPointer()const { - //Func - Returns the freqpointer of the current termInfo - //Pre - termInfo != NULL - // next() must have been called once - //Post - The freqpointer of the current termInfo has been returned - - return termInfo->freqPointer; - } - - int64_t SegmentTermEnum::proxPointer()const { - //Func - Returns the proxPointer of the current termInfo - //Pre - termInfo != NULL - // next() must have been called once - //Post - the proxPointer of the current termInfo has been returned - - return termInfo->proxPointer; - } - - SegmentTermEnum* SegmentTermEnum::clone() const { - //Func - Returns a clone of this instance - //Pre - true - //Post - An clone of this instance has been returned - - return _CLNEW SegmentTermEnum(*this); - } - - Term* SegmentTermEnum::readTerm(Term* reuse) { - //Func - Reads the next term in the enumeration - //Pre - true - //Post - The next Term in the enumeration has been read and returned - - //Read the start position from the inputStream input - int32_t start = input->readVInt(); - //Read the length of term in the inputStream input - int32_t length = input->readVInt(); - - //Calculated the total lenght of bytes that buffer must be to contain the current - //chars in buffer and the new ones yet to be read - uint32_t totalLength = start + length; - - if (static_cast(bufferLength) < totalLength+1) - growBuffer(totalLength, false); - - //Read a length number of characters into the buffer from position start in the inputStream input - input->readChars(buffer, start, length); - //Null terminate the string - buffer[totalLength] = 0; - - //Return a new Term - int32_t field = input->readVInt(); - const TCHAR* fieldname = fieldInfos->fieldName(field); - if ( reuse == NULL ) - reuse = _CLNEW Term; - - reuse->set(fieldname, buffer, false); - return reuse; - } - - void SegmentTermEnum::growBuffer(const uint32_t length, bool force_copy) { - //Func - Instantiate a buffer of length length+1 - //Pre - length > 0 - //Post - pre(buffer) has been deleted with its contents. A new buffer - // has been allocated of length length+1 and the text of term has been copied - // to buffer - //todo: we could guess that we will need to re-grow this - //buffer a few times...so start off with a reasonable grow - //value... - if ( bufferLength > length ) - return; - - //Store the new bufferLength - if ( length - bufferLength < LUCENE_SEGMENTTERMENUM_GROWSIZE ) - bufferLength = length+LUCENE_SEGMENTTERMENUM_GROWSIZE; - else - bufferLength = length+1; - - bool copy = buffer==NULL; - - //Instantiate the new buffer + 1 is needed for terminator '\0' - if ( buffer == NULL ) - buffer = (TCHAR*)malloc(sizeof(TCHAR) * (bufferLength+1)); - else - buffer = (TCHAR*)realloc(buffer, sizeof(TCHAR) * (bufferLength+1)); - - if ( copy || force_copy){ - //Copy the text of term into buffer - _tcsncpy(buffer,_term->text(),bufferLength); - } - } - -CL_NS_END diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/index/SegmentTermEnum.h qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/index/SegmentTermEnum.h --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/index/SegmentTermEnum.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/index/SegmentTermEnum.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,138 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#ifndef _lucene_index_SegmentTermEnum_ -#define _lucene_index_SegmentTermEnum_ - -#if defined(_LUCENE_PRAGMA_ONCE) -# pragma once -#endif - -#include "Terms.h" -#include "FieldInfos.h" -#include "TermInfo.h" - -CL_NS_DEF(index) - -/** - * SegmentTermEnum is an enumeration of all Terms and TermInfos - */ -class SegmentTermEnum:public TermEnum{ -private: - Term* _term; ///points to the current Term in the enumeration - TermInfo* termInfo; ///points to the TermInfo matching the current Term in the enumeration - - bool isIndex; ///Indicates if the Segment is a an index - bool isClone; ///Indicates if SegmentTermEnum is an orignal instance or - ///a clone of another SegmentTermEnum - - TCHAR* buffer; ///The buffer that contains the data read from the Term Infos File - uint32_t bufferLength; ///Length of the buffer - - int32_t format; - int32_t formatM1SkipInterval; - - CL_NS(store)::IndexInput* input; ///The IndexInput that reads from the Term Infos File - FieldInfos* fieldInfos; ///contains the Field Infos for the segment - int64_t size; ///The size of the enumeration - int64_t position; ///The position of the current (term) in the enumeration - int64_t indexPointer; - Term* prev; ///The previous current - int32_t indexInterval; - int32_t skipInterval; - - friend class TermInfosReader; - friend class SegmentTermDocs; -protected: - - /** - * Constructor. - * The instance is created by cloning all properties of clone - */ - SegmentTermEnum( const SegmentTermEnum& clone); - -public: - ///Constructor - SegmentTermEnum(CL_NS(store)::IndexInput* i, FieldInfos* fis, const bool isi ); - - ///Destructor - ~SegmentTermEnum(); - - /** - * Moves the current of the set to the next in the set - */ - bool next(); - - /** - * Returns a pointer to the current term. - */ - Term* term(); - /** - * Returns the current term. - */ - Term* term(bool pointer); - - /** - * Scan for Term term without allocating new Terms - */ - void scanTo(const Term *term); - - /** - * Closes the enumeration to further activity, freeing resources. - */ - void close(); - - /** - * Returns the document frequency of the current term in the set - */ - int32_t docFreq() const; - - /** - * Repositions term and termInfo within the enumeration - */ - void seek(const int64_t pointer, const int32_t p, Term* t, TermInfo* ti); - - /** - * Returns a clone of the current termInfo - */ - TermInfo* getTermInfo()const; - - /** - * Retrieves a clone of termInfo through the reference ti - */ - void getTermInfo(TermInfo* ti)const; - - /** - * Returns the freqPointer from the current TermInfo in the enumeration. - */ - int64_t freqPointer() const; - - /** - * Returns the proxPointer from the current TermInfo in the enumeration. - */ - int64_t proxPointer() const; - - /** - * Returns a clone of this instance - */ - SegmentTermEnum* clone() const; - - const char* getObjectName(){ return SegmentTermEnum::getClassName(); } - static const char* getClassName(){ return "SegmentTermEnum"; } - -private: - /** - * Reads the next term in the enumeration - */ - Term* readTerm(Term* reuse); - /** - * Instantiate a buffer of length length+1 - */ - void growBuffer(const uint32_t length, bool force_copy); - -}; -CL_NS_END -#endif diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/index/SegmentTermPositions.cpp qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/index/SegmentTermPositions.cpp --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/index/SegmentTermPositions.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/index/SegmentTermPositions.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,101 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#include "CLucene/StdHeader.h" -#include "SegmentHeader.h" - -#include "Terms.h" - -CL_NS_USE(util) -CL_NS_DEF(index) - -SegmentTermPositions::SegmentTermPositions(const SegmentReader* _parent): - SegmentTermDocs(_parent){ -//Func - Constructor -//Pre - Parent != NULL -//Post - The instance has been created - - CND_PRECONDITION(_parent != NULL, "Parent is NULL"); - - proxStream = _parent->proxStream->clone(); - - CND_CONDITION(proxStream != NULL,"proxStream is NULL"); - - position = 0; - proxCount = 0; -} - -SegmentTermPositions::~SegmentTermPositions() { -//Func - Destructor -//Pre - true -//Post - The intance has been closed - close(); -} - -TermDocs* SegmentTermPositions::__asTermDocs(){ - return (TermDocs*) this; -} -TermPositions* SegmentTermPositions::__asTermPositions(){ - return (TermPositions*) this; -} - -void SegmentTermPositions::seek(const TermInfo* ti) { - SegmentTermDocs::seek(ti); - if (ti != NULL) - proxStream->seek(ti->proxPointer); - proxCount = 0; -} - -void SegmentTermPositions::close() { -//Func - Frees the resources -//Pre - true -//Post - The resources have been freed - - SegmentTermDocs::close(); - //Check if proxStream still exists - if(proxStream){ - proxStream->close(); - _CLDELETE( proxStream ); - } -} - -int32_t SegmentTermPositions::nextPosition() { - /* DSR:CL_BUG: Should raise exception if proxCount == 0 at the - ** beginning of this method, as in - ** if (--proxCount == 0) throw ...; - ** The JavaDocs for TermPositions.nextPosition declare this constraint, - ** but CLucene doesn't enforce it. */ - proxCount--; - return position += proxStream->readVInt(); -} - -bool SegmentTermPositions::next() { - for (int32_t f = proxCount; f > 0; f--) // skip unread positions - proxStream->readVInt(); - - if (SegmentTermDocs::next()) { // run super - proxCount = _freq; // note frequency - position = 0; // reset position - return true; - } - return false; -} - -int32_t SegmentTermPositions::read(int32_t* docs, int32_t* freqs, int32_t length) { - _CLTHROWA(CL_ERR_InvalidState,"TermPositions does not support processing multiple documents in one call. Use TermDocs instead."); -} - -void SegmentTermPositions::skippingDoc() { - for (int32_t f = _freq; f > 0; f--) // skip all positions - proxStream->readVInt(); -} - -void SegmentTermPositions::skipProx(int64_t proxPointer){ - proxStream->seek(proxPointer); - proxCount = 0; -} - -CL_NS_END diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/index/SegmentTermVector.cpp qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/index/SegmentTermVector.cpp --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/index/SegmentTermVector.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/index/SegmentTermVector.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,188 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#include "CLucene/StdHeader.h" -#include "TermVector.h" -#include "CLucene/util/StringBuffer.h" - -CL_NS_USE(util) -CL_NS_DEF(index) - -Array SegmentTermPositionVector::EMPTY_TERM_POS; - -SegmentTermVector::SegmentTermVector(const TCHAR* field, TCHAR** terms, Array* termFreqs) { - this->field = STRDUP_TtoT(field); - this->terms = terms; - this->termsLen = -1; //lazily get the size of the terms - this->termFreqs = termFreqs; -} - -SegmentTermVector::~SegmentTermVector(){ - _CLDELETE_CARRAY(field); - _CLDELETE_CARRAY_ALL(terms); - - _CLDELETE_ARRAY(termFreqs->values); - _CLDELETE(termFreqs); -} -TermPositionVector* SegmentTermVector::__asTermPositionVector(){ - return NULL; -} - -const TCHAR* SegmentTermVector::getField() { -return field; -} - -TCHAR* SegmentTermVector::toString() const{ -StringBuffer sb; -sb.appendChar('{'); -sb.append(field); -sb.append(_T(": ")); - -int32_t i=0; -while ( terms && terms[i] != NULL ){ - if (i>0) - sb.append(_T(", ")); - sb.append(terms[i]); - sb.appendChar('/'); - - sb.appendInt((*termFreqs)[i]); -} -sb.appendChar('}'); -return sb.toString(); -} - -int32_t SegmentTermVector::size() { -if ( terms == NULL ) - return 0; - -if ( termsLen == -1 ){ - termsLen=0; - while ( terms[termsLen] != 0 ) - termsLen++; -} -return termsLen; -} - -const TCHAR** SegmentTermVector::getTerms() { - return (const TCHAR**)terms; -} - -const Array* SegmentTermVector::getTermFrequencies() { - return termFreqs; -} - -int32_t SegmentTermVector::binarySearch(TCHAR** a, const int32_t arraylen, const TCHAR* key) const -{ - int32_t low = 0; - int32_t hi = arraylen - 1; - int32_t mid = 0; - while (low <= hi) - { - mid = (low + hi) >> 1; - - int32_t c = _tcscmp(a[mid],key); - if (c==0) - return mid; - else if (c > 0) - hi = mid - 1; - else // This gets the insertion point right on the last loop. - low = ++mid; - } - return -mid - 1; -} - -int32_t SegmentTermVector::indexOf(const TCHAR* termText) { - if(terms == NULL) - return -1; - int32_t res = binarySearch(terms, size(), termText); - return res >= 0 ? res : -1; -} - -void SegmentTermVector::indexesOf(const TCHAR** termNumbers, const int32_t start, const int32_t len, Array& ret) { - // TODO: there must be a more efficient way of doing this. - // At least, we could advance the lower bound of the terms array - // as we find valid indexes. Also, it might be possible to leverage - // this even more by starting in the middle of the termNumbers array - // and thus dividing the terms array maybe in half with each found index. - ret.length = len; - ret.values = _CL_NEWARRAY(int32_t,len); - for (int32_t i=0; i* termFreqs, Array< Array >* positions, Array< Array >* offsets): - SegmentTermVector(field,terms,termFreqs) -{ - this->offsets = offsets; - this->positions = positions; -} - -SegmentTermPositionVector::~SegmentTermPositionVector(){ - if ( offsets ){ - for (size_t i=0;ilength;i++){ - if ( offsets->values != NULL ){ - Array& offs = offsets->values[i]; - for ( size_t j=0;jvalues); - _CLDELETE(offsets); - } - if ( positions ){ - for (size_t i=0;ilength;i++){ - if ( positions->values != NULL ){ - Array& pos = positions->values[i]; - for ( size_t j=0;jvalues); - _CLDELETE(positions); - } -} - -TermPositionVector* SegmentTermPositionVector::__asTermPositionVector(){ - return this; -} -/** -* Returns an array of TermVectorOffsetInfo in which the term is found. -* -* @param index The position in the array to get the offsets from -* @return An array of TermVectorOffsetInfo objects or the empty list -* @see org.apache.lucene.analysis.Token -*/ -Array* SegmentTermPositionVector::getOffsets(int32_t index) { - if(offsets == NULL) - return NULL; - if (index >=0 && index < offsets->length) - return &offsets->values[index]; - else - return &TermVectorOffsetInfo::EMPTY_OFFSET_INFO; -} - -/** -* Returns an array of positions in which the term is found. -* Terms are identified by the index at which its number appears in the -* term String array obtained from the indexOf method. -*/ -Array* SegmentTermPositionVector::getTermPositions(int32_t index) { - if(positions == NULL) - return NULL; - - if (index >=0 && index < positions->length) - return &positions->values[index]; - else - return &EMPTY_TERM_POS; -} -CL_NS_END - diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/index/Term.cpp qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/index/Term.cpp --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/index/Term.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/index/Term.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,182 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -* -* Changes are Copyright (C) 2015 The Qt Company Ltd. -------------------------------------------------------------------------------*/ - -#include "CLucene/StdHeader.h" -#include "Term.h" -#include "CLucene/util/StringIntern.h" - -CL_NS_USE(util) -CL_NS_DEF(index) - -Term::Term() -{ - init(); -} - -Term::Term(const TCHAR* fld, const TCHAR* txt, bool internField) -{ - init(); - set(fld, txt, internField); -} - -Term::Term(const Term* fieldTerm, const TCHAR* txt) -{ - init(); - set(fieldTerm, txt); -} - -Term::Term(const TCHAR* fld, const TCHAR* txt) -{ - init(); - set(fld, txt); -} - -Term::~Term() -{ - if (internF) - CLStringIntern::unintern(_field); - _field = NULL; - -#ifndef LUCENE_TERM_TEXT_LENGTH - if (_text != LUCENE_BLANK_STRING) - _CLDELETE_CARRAY(_text); -#endif -} - -const TCHAR* Term::field() const -{ - return _field; -} - -const TCHAR* Term::text() const -{ - return _text; -} - -void Term::set(const Term* term, const TCHAR* txt) -{ - set(term->field(), txt, false); -} - -void Term::set(const TCHAR* fld, const TCHAR* txt,bool internField) -{ - CND_PRECONDITION(fld != NULL, "fld contains NULL"); - CND_PRECONDITION(txt != NULL, "txt contains NULL"); - - //save field for unintern later - const TCHAR* oldField = _field; - cachedHashCode = 0; - textLen = _tcslen(txt); - - //Delete text if it is the owner -#ifdef LUCENE_TERM_TEXT_LENGTH - if (textLen > LUCENE_TERM_TEXT_LENGTH) - textLen = LUCENE_TERM_TEXT_LENGTH; - - _tcsncpy(_text,txt,textLen+1); - _text[textLen]=0; -#else - //if the term text buffer is bigger than what we have - if (_text && textLen > textLenBuf) { - if (_text != LUCENE_BLANK_STRING) { - _CLDELETE_ARRAY(_text); - } else { - _text = NULL; - } - textLenBuf = 0; - } - - if (_text == LUCENE_BLANK_STRING) { - _text = LUCENE_BLANK_STRING; - } else if (_text == NULL) { - if (txt[0] == 0) { - //if the string is blank and we aren't re-using the buffer... - _text = LUCENE_BLANK_STRING; - } else { - //duplicate the text - _text = stringDuplicate(txt); - textLenBuf = textLen; - } - } else { - //re-use the buffer - _tcscpy(_text,txt); - } -#endif - - //Set Term Field - if (internField) { - _field = CLStringIntern::intern(fld CL_FILELINE); - } else { - _field = fld; - } - - //unintern old field after interning new one, - if (internF) - CLStringIntern::unintern(oldField); - internF = internField; - - CND_PRECONDITION(_tcscmp(fld, _field) == 0, "field not equal"); -} - -bool Term::equals(const Term* other) const -{ - if (cachedHashCode != 0 && other->cachedHashCode != 0 - && other->cachedHashCode != cachedHashCode) - return false; - - if (_field == other->_field) { - if (textLen == other->textLen) - return (_tcscmp(_text, other->_text) == 0); - return false; - } - - return false; -} - -size_t Term::hashCode() -{ - if (cachedHashCode == 0) - cachedHashCode = Misc::thashCode(_field) + Misc::thashCode(_text, textLen); - - return cachedHashCode; -} - -int32_t Term::compareTo(const Term* other) const -{ - //Check ret to see if text needs to be compared - if (_field == other->_field) - return _tcscmp(_text, other->_text); - - int32_t ret = _tcscmp(_field, other->_field); - if (ret == 0) - ret = _tcscmp(_text, other->_text); - return ret; -} - -TCHAR* Term::toString() const -{ - return CL_NS(util)::Misc::join(_field, _T(":"), _text); -} - -void Term::init() -{ - textLen = 0; - internF = false; - cachedHashCode = 0; - _field = LUCENE_BLANK_STRING; - -#ifdef LUCENE_TERM_TEXT_LENGTH - _text[0] = 0; -#else - _text = LUCENE_BLANK_STRING; - textLenBuf = 0; -#endif -} - -CL_NS_END diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/index/Term.h qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/index/Term.h --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/index/Term.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/index/Term.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,146 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -* -* Changes are Copyright (C) 2015 The Qt Company Ltd. -------------------------------------------------------------------------------*/ -#ifndef _lucene_index_Term_ -#define _lucene_index_Term_ - -#if defined(_LUCENE_PRAGMA_ONCE) -# pragma once -#endif - -#include "CLucene/util/Misc.h" -#include "CLucene/util/StringIntern.h" - -CL_NS_DEF(index) - -/* -A Term represents a word from text. This is the unit of search. It is -composed of two elements, the text of the word, as a string, and the name of -the field that the text occured in, an interned string. - -Note that terms may represent more than words from text fields, but also -things like dates, email addresses, urls, etc. - -IMPORTANT NOTE: -Term inherits from the template class LUCENE_REFBASE which tries to do -some garbage collection by counting the references an instance has. As a result -of this construction you MUST use _CLDECDELETE(obj) when you want to delete an -of Term! - -ABOUT intrn - -intrn indicates if field and text are interned or not. Interning of Strings -is the process of converting duplicated strings to shared ones. - -*/ -class Term : LUCENE_REFBASE -{ -private: - const TCHAR* _field; - bool internF; // Indicates if Term Field is interned(and therefore must be uninternd). - size_t cachedHashCode; - size_t textLen; // a cache of text len, this allows for a preliminary comparison of text lengths - -#ifdef LUCENE_TERM_TEXT_LENGTH - TCHAR _text[LUCENE_TERM_TEXT_LENGTH + 1]; -#else - TCHAR* _text; - size_t textLenBuf; //a cache of text len, this allows for a preliminary comparison of text lengths -#endif - - void init(); -public: - - //uses the specified fieldTerm's field. this saves on intern'ing time. - Term(const Term* fieldTerm, const TCHAR* txt); - - ///Constructs a blank term - Term(); - - // TODO: need to be private, a few other things need to be changed first... - Term(const TCHAR* fld, const TCHAR* txt, bool internField); - - /** - * Constructor. Constructs a Term with the given field and text. Field and - * text are not copied Field and text are deleted in destructor only if - * intern is false. - */ - Term(const TCHAR* fld, const TCHAR* txt); - - ///Destructor. - ~Term(); - - ///Returns the field of this term, an interned string. The field indicates - ///the part of a document which this term came from. - const TCHAR* field() const; /// - TCHAR* toString() const; - - size_t hashCode(); - - class Equals:public CL_NS_STD(binary_function) - { - public: - bool operator()( const Term* val1, const Term* val2 ) const - { - return val1->equals(val2); - } - }; - - class Compare:LUCENE_BASE, public CL_NS(util)::Compare::_base // - { - public: - bool operator()(Term* t1, Term* t2) const - { - return (t1->compareTo(t2) < 0); - } - - size_t operator()(Term* t) const - { - return t->hashCode(); - } - }; -}; - -CL_NS_END - -#endif diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/index/TermInfo.cpp qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/index/TermInfo.cpp --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/index/TermInfo.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/index/TermInfo.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,53 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -* -* Changes are Copyright (C) 2015 The Qt Company Ltd. -------------------------------------------------------------------------------*/ - -#include "CLucene/StdHeader.h" -#include "TermInfo.h" - -CL_NS_DEF(index) - -TermInfo::TermInfo() -{ - set(0, 0, 0, 0); -} - -TermInfo::~TermInfo() -{ -} - -TermInfo::TermInfo(int32_t df, int64_t fp, int64_t pp) -{ - set(df, fp, pp, 0); -} - -TermInfo::TermInfo(const TermInfo* ti) -{ - if (ti) - set(ti); -} - -void TermInfo::set(const TermInfo* ti) -{ - if (ti) - set(ti->docFreq, ti->freqPointer, ti->proxPointer, ti->skipOffset); -} - -void TermInfo::set(int32_t df, int64_t fp, int64_t pp, int32_t so) -{ - CND_PRECONDITION(df >= 0, "df contains negative number"); - CND_PRECONDITION(fp >= 0, "fp contains negative number"); - CND_PRECONDITION(pp >= 0, "pp contains negative number"); - - docFreq = df; - freqPointer = fp; - proxPointer = pp; - skipOffset = so; -} - -CL_NS_END diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/index/TermInfo.h qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/index/TermInfo.h --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/index/TermInfo.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/index/TermInfo.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,61 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -* -* Changes are Copyright (C) 2015 The Qt Company Ltd. -------------------------------------------------------------------------------*/ -#ifndef _lucene_index_TermInfo -#define _lucene_index_TermInfo - -#if defined(_LUCENE_PRAGMA_ONCE) -# pragma once -#endif - -CL_NS_DEF(index) - -// A TermInfo is the record of information stored for a term. -class TermInfo : LUCENE_BASE -{ -public: - // The number of documents which contain the term. - int32_t docFreq; - - //A pointer into the TermFreqs file (.frq) - //The .frq file contains the lists of documents which contain each term, - //along with the frequency of the term in that document. - int64_t freqPointer; - - //A pointer into the TermPosition file (.prx). - //The .prx file contains the lists of positions that each term - //occurs at within documents. - int64_t proxPointer; - - int32_t skipOffset; - - //Constructor - TermInfo(); - - //Constructor - TermInfo(int32_t df, int64_t fp, int64_t pp); - - //Constructor - //Initialises this instance by copying the values of another TermInfo ti - TermInfo(const TermInfo* ti); - - //Destructor - ~TermInfo(); - - //Sets a new document frequency, a new freqPointer and a new proxPointer - void set(int32_t docFreq, int64_t freqPointer, int64_t proxPointer, - int32_t skipOffset); - - //Sets a new document frequency, a new freqPointer and a new proxPointer - //by copying these values from another instance of TermInfo - void set(const TermInfo* ti); -}; - -CL_NS_END - -#endif diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/index/TermInfosReader.cpp qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/index/TermInfosReader.cpp --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/index/TermInfosReader.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/index/TermInfosReader.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,443 +0,0 @@ -/* - * Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team - * - * Distributable under the terms of either the Apache License (Version 2.0) or - * the GNU Lesser General Public License, as specified in the COPYING file. - * - * Changes are Copyright (C) 2015 The Qt Company Ltd. -*/ -#include "CLucene/StdHeader.h" -#include "TermInfosReader.h" - -#include "CLucene/store/Directory.h" -#include "CLucene/util/Misc.h" -#include "FieldInfos.h" -#include "Term.h" -#include "Terms.h" -#include "TermInfo.h" -#include "TermInfosWriter.h" - -CL_NS_USE(store) -CL_NS_USE(util) -CL_NS_DEF(index) - -TermInfosReader::TermInfosReader(Directory* dir, const QString& seg, - FieldInfos* fis) - : directory(dir) - , fieldInfos (fis) -{ - //Func - Constructor. - // Reads the TermInfos file (.tis) and eventually the Term Info Index file (.tii) - //Pre - dir is a reference to a valid Directory - // Fis contains a valid reference to an FieldInfos instance - // seg != NULL and contains the name of the segment - //Post - An instance has been created and the index named seg has been read. (Remember - // a segment is nothing more then an independently readable index) - - CND_PRECONDITION(!seg.isEmpty(), "seg is NULL"); - - //Initialize the name of the segment - segment = seg; - //There are no indexTerms yet - indexTerms = NULL; - //So there are no indexInfos - indexInfos = NULL; - //So there are no indexPointers - indexPointers = NULL; - //Create a filname fo a Term Info File - QString tisFile = Misc::segmentname(segment, QLatin1String(".tis")); - QString tiiFile = Misc::segmentname(segment, QLatin1String(".tii")); - - //Create an SegmentTermEnum for storing all the terms read of the segment - origEnum = _CLNEW SegmentTermEnum( directory->openInput( tisFile ), fieldInfos, false); - indexEnum = _CLNEW SegmentTermEnum( directory->openInput( tiiFile ), fieldInfos, true); - - //Check if enumerator points to a valid instance - CND_CONDITION(origEnum != NULL, "No memory could be allocated for orig enumerator"); - CND_CONDITION(indexEnum != NULL, "No memory could be allocated for index enumerator"); - - //Get the size of the enumeration and store it in size - _size = origEnum->size; -} - -TermInfosReader::~TermInfosReader() -{ - //Func - Destructor - //Pre - true - //Post - The instance has been destroyed - - //Close the TermInfosReader to be absolutly sure that enumerator has been closed - //and the arrays indexTerms, indexPointers and indexInfos and their elements - //have been destroyed - close(); -} - -void TermInfosReader::close() -{ - //Func - Close the enumeration of TermInfos - //Pre - true - //Post - The _enumeration has been closed and the arrays - - //Check if indexTerms and indexInfos exist - if (indexTerms && indexInfos){ - //Iterate through arrays indexTerms and indexPointer to - //destroy their elements -#ifdef _DEBUG - for (int32_t i = 0; i < indexTermsLength; ++i) { - if (indexTerms[i].__cl_refcount != 1) { - CND_PRECONDITION(indexTerms[i].__cl_refcount == 1, - "TermInfosReader term was references more than internally"); - } - // _CLDECDELETE(indexTerms[i]); - //_CLDELETE(indexInfos[i]); - } -#endif - //Delete the arrays - _CLDELETE_ARRAY(indexTerms); - _CLDELETE_ARRAY(indexInfos); - } - - //Delete the arrays - _CLDELETE_ARRAY(indexPointers); - - if (origEnum != NULL) { - origEnum->close(); - - //Get a pointer to IndexInput used by the enumeration but - //instantiated in the constructor by directory.open( tisFile ) - IndexInput *is = origEnum->input; - - //Delete the enumuration enumerator - _CLDELETE(origEnum); - - //Delete the IndexInput - _CLDELETE(is); - } - - if (indexEnum != NULL){ - indexEnum->close(); - - //Get a pointer to IndexInput used by the enumeration but - //instantiated in the constructor by directory.open( tiiFile ) - IndexInput *is = indexEnum->input; - - //Delete the enumuration enumerator - _CLDELETE(indexEnum); - - //Delete the IndexInput - _CLDELETE(is); - } -} - -int64_t TermInfosReader::size() const -{ - //Func - Return the size of the enumeration of TermInfos - //Pre - true - //Post - size has been returened - - return _size; -} - -Term* TermInfosReader::get(const int32_t position) -{ - //Func - Returns the nth term in the set - //Pre - position > = 0 - //Post - The n-th term in the set has been returned - - //Check if the size is 0 because then there are no terms - if (_size == 0) - return NULL; - - SegmentTermEnum* enumerator = getEnum(); - - if (enumerator != NULL //an enumeration exists - && enumerator->term(false) != NULL // term is at or past current - && position >= enumerator->position - && position < (enumerator->position + enumerator->indexInterval)) { - return scanEnum(position); // can avoid seek - } - - //random-access: must seek - seekEnum(position / enumerator->indexInterval); - - //Get the Term at position - return scanEnum(position); -} - -// TODO: currently there is no way of cleaning up a thread, if the thread ends. -// we are stuck with the terminfosreader of that thread. Hopefully this won't -// be too big a problem... solutions anyone? -SegmentTermEnum* TermInfosReader::getEnum() -{ - SegmentTermEnum* termEnum = enumerators.get(); - if (termEnum == NULL) { - termEnum = terms(); - enumerators.set(termEnum); - } - return termEnum; -} - -TermInfo* TermInfosReader::get(const Term* term) -{ - //Func - Returns a TermInfo for a term - //Pre - term holds a valid reference to term - //Post - if term can be found its TermInfo has been returned otherwise NULL - - //If the size of the enumeration is 0 then no Terms have been read - if (_size == 0) - return NULL; - - ensureIndexIsRead(); - - // optimize sequential access: first try scanning cached enum w/o seeking - SegmentTermEnum* enumerator = getEnum(); - - // optimize sequential access: first try scanning cached enumerator w/o seeking - // if the current term of the enumeration enumerator is not at the end - if (enumerator->term(false) != NULL - // AND there exists a previous current called prev and term is - // positioned after this prev - && ((enumerator->prev != NULL && term->compareTo(enumerator->prev) > 0) - // OR term is positioned at the same position as the current of - // enumerator or at a higher position - || term->compareTo(enumerator->term(false)) >= 0)) { - //Calculate the offset for the position - int32_t _enumOffset = (int32_t) - (enumerator->position / enumerator->indexInterval) + 1; - - // but before end of block the length of indexTerms (the number of - // terms in enumerator) equals _enum_offset - if (indexTermsLength == _enumOffset - // OR term is positioned in front of term found at _enumOffset in - // indexTerms - || term->compareTo(&indexTerms[_enumOffset]) < 0) { - //no need to seek, retrieve the TermInfo for term - return scanEnum(term); - } - } - - //Reposition current term in the enumeration - seekEnum(getIndexOffset(term)); - //Return the TermInfo for term - return scanEnum(term); -} - -int64_t TermInfosReader::getPosition(const Term* term) -{ - //Func - Returns the position of a Term in the set - //Pre - term holds a valid reference to a Term - // enumerator != NULL - //Post - If term was found then its position is returned otherwise -1 - - //if the enumeration is empty then return -1 - if (_size == 0) - return -1; - - ensureIndexIsRead(); - - //Retrieve the indexOffset for term - int32_t indexOffset = getIndexOffset(term); - seekEnum(indexOffset); - - SegmentTermEnum* enumerator = getEnum(); - - while(term->compareTo(enumerator->term(false)) > 0 && enumerator->next()) {} - - if (term->equals(enumerator->term(false))) - return enumerator->position; - - return -1; -} - -SegmentTermEnum* TermInfosReader::terms(const Term* term) -{ - //Func - Returns an enumeration of terms starting at or after the named term. - // If term is null then enumerator is set to the beginning - //Pre - term holds a valid reference to a Term - // enumerator != NULL - //Post - An enumeration of terms starting at or after the named term has been returned - - SegmentTermEnum* enumerator = NULL; - if (term != NULL) { - //Seek enumerator to term; delete the new TermInfo that's returned. - TermInfo* ti = get(term); - _CLDELETE(ti); - enumerator = getEnum(); - } else { - enumerator = origEnum; - } - //Clone the entire enumeration - SegmentTermEnum* cln = enumerator->clone(); - - //Check if cln points to a valid instance - CND_CONDITION(cln != NULL, "cln is NULL"); - - return cln; -} - -void TermInfosReader::ensureIndexIsRead() -{ - //Func - Reads the term info index file or .tti file. - // This file contains every IndexInterval-th entry from the .tis file, - // along with its location in the "tis" file. This is designed to be - // read entirely into memory and used to provide random access to the - // "tis" file. - //Pre - indexTerms = NULL - // indexInfos = NULL - // indexPointers = NULL - //Post - The term info index file has been read into memory - - SCOPED_LOCK_MUTEX(THIS_LOCK) - - if ( indexTerms != NULL ) - return; - - try { - indexTermsLength = (size_t)indexEnum->size; - - // Instantiate an block of Term's,so that each one doesn't have to be new'd - indexTerms = _CL_NEWARRAY(Term,indexTermsLength); - - // Check if is indexTerms is a valid array - CND_CONDITION(indexTerms != NULL, - "No memory could be allocated for indexTerms"); - - // Instantiate an big block of TermInfo's, so that each one doesn't - // have to be new'd - indexInfos = _CL_NEWARRAY(TermInfo,indexTermsLength); - - // Check if is indexInfos is a valid array - CND_CONDITION(indexInfos != NULL, - "No memory could be allocated for indexInfos"); - - // Instantiate an array indexPointers that contains pointers to the - // term info index file - indexPointers = _CL_NEWARRAY(int64_t,indexTermsLength); - - // Check if is indexPointers is a valid array - CND_CONDITION(indexPointers != NULL, - "No memory could be allocated for indexPointers"); - - //Iterate through the terms of indexEnum - for (int32_t i = 0; indexEnum->next(); ++i) { - indexTerms[i].set(indexEnum->term(false), indexEnum->term(false)->text()); - indexEnum->getTermInfo(&indexInfos[i]); - indexPointers[i] = indexEnum->indexPointer; - } - } _CLFINALLY ( - indexEnum->close(); - // Close and delete the IndexInput is. The close is done by the destructor. - _CLDELETE( indexEnum->input ); - _CLDELETE( indexEnum ); - ); -} - -int32_t TermInfosReader::getIndexOffset(const Term* term) -{ - //Func - Returns the offset of the greatest index entry which is less than - // or equal to term. - //Pre - term holds a reference to a valid term - // indexTerms != NULL - //Post - The new offset has been returned - - //Check if is indexTerms is a valid array - CND_PRECONDITION(indexTerms != NULL, "indexTerms is NULL"); - - int32_t lo = 0; - int32_t hi = indexTermsLength - 1; - int32_t mid; - int32_t delta; - - while (hi >= lo) { - //Start in the middle betwee hi and lo - mid = (lo + hi) >> 1; - - //Check if is indexTerms[mid] is a valid instance of Term - CND_PRECONDITION(&indexTerms[mid] != NULL, "indexTerms[mid] is NULL"); - CND_PRECONDITION(mid < indexTermsLength, "mid >= indexTermsLength"); - - //Determine if term is before mid or after mid - delta = term->compareTo(&indexTerms[mid]); - if (delta < 0) { - //Calculate the new hi - hi = mid - 1; - } else if (delta > 0) { - //Calculate the new lo - lo = mid + 1; - } else { - //term has been found so return its position - return mid; - } - } - // the new starting offset - return hi; -} - -void TermInfosReader::seekEnum(const int32_t indexOffset) -{ - //Func - Reposition the current Term and TermInfo to indexOffset - //Pre - indexOffset >= 0 - // indexTerms != NULL - // indexInfos != NULL - // indexPointers != NULL - //Post - The current Term and Terminfo have been repositioned to indexOffset - - CND_PRECONDITION(indexOffset >= 0, "indexOffset contains a negative number"); - CND_PRECONDITION(indexTerms != NULL, "indexTerms is NULL"); - CND_PRECONDITION(indexInfos != NULL, "indexInfos is NULL"); - CND_PRECONDITION(indexPointers != NULL, "indexPointers is NULL"); - - SegmentTermEnum* enumerator = getEnum(); - enumerator->seek(indexPointers[indexOffset], - (indexOffset * enumerator->indexInterval) - 1, - &indexTerms[indexOffset], &indexInfos[indexOffset]); -} - -TermInfo* TermInfosReader::scanEnum(const Term* term) -{ - //Func - Scans the Enumeration of terms for term and returns the - // corresponding TermInfo instance if found. The search is started - // from the current term. - //Pre - term contains a valid reference to a Term - // enumerator != NULL - //Post - if term has been found the corresponding TermInfo has been returned - // otherwise NULL has been returned - - SegmentTermEnum* enumerator = getEnum(); - enumerator->scanTo(term); - - //Check if the at the position the Term term can be found - if (enumerator->term(false) != NULL && term->equals(enumerator->term(false))) { - //Return the TermInfo instance about term - return enumerator->getTermInfo(); - } - - //term was not found so no TermInfo can be returned - return NULL; -} - -Term* TermInfosReader::scanEnum(const int32_t position) -{ - //Func - Scans the enumeration to the requested position and returns the - // Term located at that position - //Pre - position > = 0 - // enumerator != NULL - //Post - The Term at the requested position has been returned - - SegmentTermEnum* enumerator = getEnum(); - - // As long the position of the enumeration enumerator is smaller than the - // requested one - while(enumerator->position < position) { - //Move the current of enumerator to the next - if (!enumerator->next()) { - //If there is no next it means that the requested position was to big - return NULL; - } - } - - //Return the Term a the requested position - return enumerator->term(); -} - -CL_NS_END diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/index/TermInfosReader.h qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/index/TermInfosReader.h --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/index/TermInfosReader.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/index/TermInfosReader.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,106 +0,0 @@ -/* - * Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team - * - * Distributable under the terms of either the Apache License (Version 2.0) or - * the GNU Lesser General Public License, as specified in the COPYING file. - * - * Changes are Copyright (C) 2015 The Qt Company Ltd. -*/ -#ifndef _lucene_index_TermInfosReader_ -#define _lucene_index_TermInfosReader_ - -#if defined(_LUCENE_PRAGMA_ONCE) -# pragma once -#endif - -#include - -#include "CLucene/store/Directory.h" -#include "CLucene/util/ThreadLocal.h" -#include "SegmentTermEnum.h" - -CL_NS_DEF(index) - -class FieldInfos; -class Term; -class TermInfo; -class TermInfos; -class TermInfosWriter; - -// PORT STATUS: 365707 (jlucene 1.9) -// This stores a monotonically increasing set of pairs in a -// Directory. Pairs are accessed either by Term or by ordinal position the set. -class TermInfosReader : LUCENE_BASE -{ -private: - CL_NS(store)::Directory* directory; - QString segment; - FieldInfos* fieldInfos; - - CL_NS(util)::ThreadLocal > enumerators; - - SegmentTermEnum* getEnum(); - SegmentTermEnum* origEnum; - SegmentTermEnum* indexEnum; - int64_t _size; - - Term* indexTerms; - int32_t indexTermsLength; - TermInfo* indexInfos; - int64_t* indexPointers; - - DEFINE_MUTEX(THIS_LOCK) - -public: - // Reads the TermInfos file(.tis) and eventually the Term Info Index(.tii) - TermInfosReader(CL_NS(store)::Directory* dir, const QString& segment, - FieldInfos* fis); - ~TermInfosReader(); - - //Close the enumeration of TermInfos - void close(); - - //Return the size of the enumeration of TermInfos - int64_t size() const; - - int32_t getSkipInterval() { - return origEnum->skipInterval; } - - // Returns an enumeration of terms starting at or after the named term. - // If no term is specified, an enumeration of all the Terms - // and TermInfos in the set is returned. - SegmentTermEnum* terms(const Term* term = NULL); - - // Returns the TermInfo for a Term in the set - // synchronized - TermInfo* get(const Term* term); - -private: - // Reads the term info index file or .tti file. - void ensureIndexIsRead(); - - // Returns the offset of the greatest index entry which is less than term. - int32_t getIndexOffset(const Term* term); - - // Reposition the current Term and TermInfo to indexOffset - void seekEnum(const int32_t indexOffset); - - // Scans the Enumeration of terms for term and returns the corresponding - // TermInfo instance if found. The search is started from the current term. - TermInfo* scanEnum(const Term* term); - - // Scans the enumeration to the requested position and returns the Term - // located at that position - Term* scanEnum(const int32_t position); - - // Returns the position of a Term in the set. synchronized - int64_t getPosition(const Term* term); - - // Returns the nth term in the set. synchronized - Term* get(const int32_t position); -}; - -CL_NS_END - -#endif diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/index/TermInfosWriter.cpp qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/index/TermInfosWriter.cpp --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/index/TermInfosWriter.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/index/TermInfosWriter.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,185 +0,0 @@ -/* - * Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team - * - * Distributable under the terms of either the Apache License (Version 2.0) or - * the GNU Lesser General Public License, as specified in the COPYING file. - * - * Changes are Copyright (C) 2015 The Qt Company Ltd. -*/ -#include "CLucene/StdHeader.h" -#include "TermInfosWriter.h" - -#include "CLucene/store/Directory.h" -#include "CLucene/util/Misc.h" -#include "FieldInfos.h" -#include "Term.h" -#include "TermInfo.h" -#include "IndexWriter.h" - -CL_NS_USE(util) -CL_NS_USE(store) -CL_NS_DEF(index) - -TermInfosWriter::TermInfosWriter(Directory* directory, const QString& segment, - FieldInfos* fis, int32_t interval) - : fieldInfos(fis) -{ - //Func - Constructor - //Pre - directory contains a valid reference to a Directory - // segment != NULL - // fis contains a valid reference to a reference FieldInfos - //Post - The instance has been created - - CND_PRECONDITION(!segment.isEmpty(), "segment is NULL"); - //Initialize instance - initialise(directory, segment, interval, false); - - other = _CLNEW TermInfosWriter(directory, segment, fieldInfos, interval, true); - - CND_CONDITION(other != NULL, "other is NULL"); - - other->other = this; -} - -TermInfosWriter::TermInfosWriter(Directory* directory, const QString& segment, - FieldInfos* fis, int32_t interval, bool isIndex) - : fieldInfos(fis) -{ - //Func - Constructor - //Pre - directory contains a valid reference to a Directory - // segment != NULL - // fis contains a valid reference to a reference FieldInfos - // isIndex is true or false - //Post - The instance has been created - - CND_PRECONDITION(!segment.isEmpty(), "segment is NULL"); - initialise(directory, segment, interval, isIndex); -} - -void TermInfosWriter::initialise(Directory* directory, const QString& segment, - int32_t interval, bool IsIndex) -{ - //Func - Helps constructors to initialize Instance - //Pre - directory contains a valid reference to a Directory - // segment != NULL - // fis contains a valid reference to a reference FieldInfos - //Post - The instance has been initialized - - lastTerm = _CLNEW Term; - - CND_CONDITION(lastTerm != NULL, "Could not allocate memory for lastTerm"); - - lastTi = _CLNEW TermInfo(); - - CND_CONDITION(lastTi != NULL, "Could not allocate memory for lastTi"); - - lastIndexPointer = 0; - size = 0; - isIndex = IsIndex; - indexInterval = interval; - skipInterval = LUCENE_DEFAULT_TERMDOCS_SKIP_INTERVAL; - - QString buf = Misc::segmentname(segment, QLatin1String(isIndex ? ".tii" : ".tis")); - output = directory->createOutput(buf); - - output->writeInt(FORMAT); // write format - output->writeLong(0); // leave space for size - output->writeInt(indexInterval);// write indexInterval - output->writeInt(skipInterval); // write skipInterval - - //Set other to NULL by Default - other = NULL; -} - -TermInfosWriter::~TermInfosWriter() -{ - //Func - Destructor - //Pre - true - //Post - de instance has been destroyed - - close(); -} - -void TermInfosWriter::add(Term* term, const TermInfo* ti) -{ - //Func - Writes a Term and TermInfo to the outputstream - //Pre - Term must be lexicographically greater than all previous Terms added. - // Pointers of TermInfo ti (freqPointer and proxPointer) must be - // positive and greater than all previous. - - CND_PRECONDITION(isIndex || (!isIndex && term->compareTo(lastTerm) > 0),"term out of order"); - CND_PRECONDITION(ti->freqPointer >= lastTi->freqPointer,"freqPointer out of order"); - CND_PRECONDITION(ti->proxPointer >= lastTi->proxPointer,"proxPointer out of order"); - - if (!isIndex && size % indexInterval == 0) { - //add an index term - other->add(lastTerm, lastTi); - } - - //write term - writeTerm(term); - // write doc freq - output->writeVInt(ti->docFreq); - //write pointers - output->writeVLong(ti->freqPointer - lastTi->freqPointer); - output->writeVLong(ti->proxPointer - lastTi->proxPointer); - if (ti->docFreq >= skipInterval) { - output->writeVInt(ti->skipOffset); - } - - if (isIndex){ - output->writeVLong(other->output->getFilePointer() - lastIndexPointer); - lastIndexPointer = other->output->getFilePointer(); // write pointer - } - - lastTi->set(ti); - size++; -} - -void TermInfosWriter::close() { - //Func - Closes the TermInfosWriter - //Pre - true - //Post - The TermInfosWriter has been closed - - if (output){ - //write size at start - output->seek(4); // write size after format - output->writeLong(size); - output->close(); - _CLDELETE(output); - - if (!isIndex){ - if(other){ - other->close(); - _CLDELETE( other ); - } - } - _CLDECDELETE(lastTerm); - - _CLDELETE(lastTi); - } -} - -void TermInfosWriter::writeTerm(Term* term) -{ - int32_t start = Misc::stringDifference(lastTerm->text(),lastTerm->textLength(), - term->text(),term->textLength()); - int32_t length = term->textLength() - start; - - output->writeVInt(start); // write shared prefix length - output->writeVInt(length); // write delta length - output->writeChars(term->text(), start, length); // write delta chars - - int32_t fieldnum = fieldInfos->fieldNumber(term->field()); - CND_PRECONDITION(fieldnum>=-1&&fieldnumsize(),"Fieldnum is out of range"); - output->writeVInt(fieldnum); // write field num - - if ( lastTerm->__cl_refcount == 1 ){ - lastTerm->set(term,term->text()); - }else{ - _CLDECDELETE(lastTerm); - lastTerm = _CL_POINTER(term); - } -} - -CL_NS_END diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/index/TermInfosWriter.h qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/index/TermInfosWriter.h --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/index/TermInfosWriter.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/index/TermInfosWriter.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,89 +0,0 @@ -/* - * Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team - * - * Distributable under the terms of either the Apache License (Version 2.0) or - * the GNU Lesser General Public License, as specified in the COPYING file. - * - * Changes are Copyright (C) 2015 The Qt Company Ltd. -*/ -#ifndef _lucene_index_TermInfosWriter_ -#define _lucene_index_TermInfosWriter_ - -#if defined(_LUCENE_PRAGMA_ONCE) -# pragma once -#endif - -#include - -#include "CLucene/store/Directory.h" -#include "FieldInfos.h" -#include "TermInfo.h" -#include "Term.h" - -CL_NS_DEF(index) - - -// This stores a monotonically increasing set of pairs in a -// Directory. A TermInfos can be written once, in order. -class TermInfosWriter : LUCENE_BASE -{ -private: - FieldInfos* fieldInfos; - CL_NS(store)::IndexOutput* output; - Term* lastTerm; - TermInfo* lastTi; - int64_t size; - int64_t lastIndexPointer; - bool isIndex; - TermInfosWriter* other; - - //inititalize - TermInfosWriter(CL_NS(store)::Directory* directory, - const QString& segment, FieldInfos* fis, int32_t interval, bool isIndex); -public: - /** The file format version, a negative number. */ - LUCENE_STATIC_CONSTANT(int32_t,FORMAT=-2); - - /** - * Expert: The fraction of terms in the "dictionary" which should be stored - * in RAM. Smaller values use more memory, but make searching slightly - * faster, while larger values use less memory and make searching slightly - * slower. Searching is typically not dominated by dictionary lookup, so - * tweaking this is rarely useful. - */ - int32_t indexInterval;// = 128 - - /** - * Expert: The fraction of {@link TermDocs} entries stored in skip tables, - * used to accellerate {@link TermDocs#SkipTo(int32_t)}. Larger values result in - * smaller indexes, greater acceleration, but fewer accelerable cases, while - * smaller values result in bigger indexes, less acceleration and more - * accelerable cases. More detailed experiments would be useful here. - */ - int32_t skipInterval;// = 16 - - TermInfosWriter(CL_NS(store)::Directory* directory, - const QString& segment, FieldInfos* fis, int32_t interval); - - ~TermInfosWriter(); - - /** - * Adds a new pair to the set. - * Term must be lexicographically greater than all previous Terms added. - * TermInfo pointers must be positive and greater than all previous. - */ - void add(Term* term, const TermInfo* ti); - - /** Called to complete TermInfos creation. */ - void close(); - -private: - /** Helps constructors to initialize instances */ - void initialise(CL_NS(store)::Directory* directory, - const QString& segment, int32_t interval, bool IsIndex); - void writeTerm(Term* term); -}; - -CL_NS_END - -#endif diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/index/Terms.h qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/index/Terms.h --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/index/Terms.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/index/Terms.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,174 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#ifndef _lucene_index_Terms_ -#define _lucene_index_Terms_ - -#if defined(_LUCENE_PRAGMA_ONCE) -# pragma once -#endif - -#include "Term.h" -CL_NS_DEF(index) - -class TermEnum; //predefine -class TermPositions; - -/** TermDocs provides an interface for enumerating <document, frequency> - pairs for a term.

The document portion names each document containing - the term. Documents are indicated by number. The frequency portion gives - the number of times the term occurred in each document.

The pairs are - ordered by document number. - - @see IndexReader#termDocs() - */ -class TermDocs: LUCENE_BASE { -public: - virtual ~TermDocs(){ - } - - // Sets this to the data for a term. - // The enumeration is reset to the start of the data for this term. - virtual void seek(Term* term)=0; - - /** Sets this to the data for the current term in a {@link TermEnum}. - * This may be optimized in some implementations. - */ - virtual void seek(TermEnum* termEnum)=0; - - // Returns the current document number.

This is invalid until {@link - // #next()} is called for the first time. - virtual int32_t doc() const=0; - - // Returns the frequency of the term within the current document.

This - // is invalid until {@link #next()} is called for the first time. - virtual int32_t freq() const=0; - - // Moves to the next pair in the enumeration.

Returns true iff there is - // such a next pair in the enumeration. - virtual bool next() =0; - - // Attempts to read multiple entries from the enumeration, up to length of - // docs. Document numbers are stored in docs, and term - // frequencies are stored in freqs. The freqs array must be as - // int64_t as the docs array. - // - //

Returns the number of entries read. Zero is only returned when the - // stream has been exhausted. - virtual int32_t read(int32_t* docs, int32_t* freqs, int32_t length)=0; - - // Skips entries to the first beyond the current whose document number is - // greater than or equal to target.

Returns true iff there is such - // an entry.

Behaves as if written:

-	//   bool skipTo(int32_t target) {
-	//     do {
-	//       if (!next())
-	// 	     return false;
-	//     } while (target > doc());
-	//     return true;
-	//   }
-	// 
- // Some implementations are considerably more efficient than that. - virtual bool skipTo(const int32_t target)=0; - - // Frees associated resources. - virtual void close() = 0; - - - /** Solve the diamond inheritence problem by providing a reinterpret function. - * No dynamic casting is required and no RTTI data is needed to do this - */ - virtual TermPositions* __asTermPositions()=0; -}; - - -// Abstract class for enumerating terms. -// -//

Term enumerations are always ordered by Term.compareTo(). Each term in -//the enumeration is greater than all that precede it. -class TermEnum: LUCENE_BASE { -public: - // Increments the enumeration to the next element. True if one exists. - virtual bool next()=0; - - // Returns a pointer to the current Term in the enumeration. - virtual Term* term()=0; - - // Returns the current Term in the enumeration. - virtual Term* term(bool pointer){ - Term* ret = term(); - if ( !pointer ) - ret->__cl_decref(); - return ret; - } - - // Returns the docFreq of the current Term in the enumeration. - virtual int32_t docFreq() const=0; - - // Closes the enumeration to further activity, freeing resources. - virtual void close() =0; - - virtual ~TermEnum(){ - } - - // Term Vector support - /** Skips terms to the first beyond the current whose value is - * greater or equal to target.

Returns true iff there is such - * an entry.

Behaves as if written:

-	*   public boolean skipTo(Term target) {
-	*     do {
-	*       if (!next())
-	* 	     return false;
-	*     } while (target > term());
-	*     return true;
-	*   }
-	* 
- * Some implementations are considerably more efficient than that. - */ - virtual bool skipTo(Term* target){ - do { - if (!next()) - return false; - } while (target->compareTo(term(false)) > 0); - return true; - } - - /** - * Because we need to know how to cast the object, we need the objects name. - */ - virtual const char* getObjectName() = 0; -}; - - - -/** - * TermPositions provides an interface for enumerating the <document, - * frequency, <position>* > tuples for a term.

The document and - * frequency are the same as for a TermDocs. The positions portion lists the ordinal - * positions of each occurrence of a term in a document. - * - * @see IndexReader#termPositions() - */ -class TermPositions: public virtual TermDocs { -public: - // Returns next position in the current document. It is an error to call - // this more than {@link #freq()} times - // without calling {@link #next()}

This is - // invalid until {@link #next()} is called for - // the first time. - virtual int32_t nextPosition() = 0; - - virtual ~TermPositions(){ - } - - /** Solve the diamond inheritence problem by providing a reinterpret function. - * No dynamic casting is required and no RTTI data is needed to do this - */ - virtual TermDocs* __asTermDocs()=0; - virtual TermPositions* __asTermPositions()=0; -}; -CL_NS_END -#endif diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/index/TermVector.h qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/index/TermVector.h --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/index/TermVector.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/index/TermVector.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,418 +0,0 @@ -/* - * Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team - * - * Distributable under the terms of either the Apache License (Version 2.0) or - * the GNU Lesser General Public License, as specified in the COPYING file. - * - * Changes are Copyright (C) 2015 The Qt Company Ltd. -*/ -#ifndef _lucene_index_termvector_h -#define _lucene_index_termvector_h - -#if defined(_LUCENE_PRAGMA_ONCE) -# pragma once -#endif - -#include - -#include "CLucene/store/Directory.h" -#include "CLucene/store/IndexOutput.h" -#include "FieldInfos.h" - -CL_NS_DEF(index) - -struct TermVectorOffsetInfo; -class TermPositionVector; - -// Provides access to stored term vector of a document field. -class TermFreqVector : LUCENE_BASE -{ -public: - virtual ~TermFreqVector() {} - - // @return The field this vector is associated with. - virtual const TCHAR* getField() = 0; - - // @return The number of terms in the term vector. - virtual int32_t size() = 0; - - // @return An Array of term texts in ascending order. - virtual const TCHAR** getTerms() = 0; - - - /* Array of term frequencies. Locations of the array correspond one to one - * to the terms in the array obtained from getTerms - * method. Each location in the array contains the number of times this - * term occurs in the document or the document field. - * - * The size of the returned array is size() - * @memory Returning a pointer to internal data. Do not delete. - */ - virtual const Array* getTermFrequencies() = 0; - - - /* Return an index in the term numbers array returned from - * getTerms at which the term with the specified - * term appears. If this term does not appear in the array, - * return -1. - */ - virtual int32_t indexOf(const TCHAR* term) = 0; - - - /* Just like indexOf(int32_t) but searches for a number of terms - * at the same time. Returns an array that has the same size as the number - * of terms searched for, each slot containing the result of searching for - * that term number. - * - * @param terms array containing terms to look for - * @param start index in the array where the list of terms starts - * @param len the number of terms in the list - */ - virtual void indexesOf(const TCHAR** terms, const int32_t start, - const int32_t len, Array& ret) = 0; - - // Solve the diamond inheritence problem by providing a reinterpret function. - // No dynamic casting is required and no RTTI data is needed to do this - virtual TermPositionVector* __asTermPositionVector() = 0; -}; - - -/** -* Writer works by opening a document and then opening the fields within the document and then -* writing out the vectors for each field. -* -* Rough usage: -* - -for each document -{ -writer.openDocument(); -for each field on the document -{ -writer.openField(field); -for all of the terms -{ -writer.addTerm(...) -} -writer.closeField -} -writer.closeDocument() -} - -*/ -class TermVectorsWriter : LUCENE_BASE -{ -private: - class TVField : LUCENE_BASE - { - public: - int32_t number; - int64_t tvfPointer; - int32_t length; // number of distinct term positions - bool storePositions; - bool storeOffsets; - - TVField(int32_t number, bool storePos, bool storeOff) - : tvfPointer(0) - , length(0) - { - this->number = number; - this->storePositions = storePos; - this->storeOffsets = storeOff; - } - ~TVField() {} - }; - - class TVTerm : LUCENE_BASE - { - const TCHAR* termText; - int32_t termTextLen; //textlen cache - - public: - TVTerm(); - ~TVTerm(); - - int32_t freq; - Array* positions; - Array* offsets; - - const TCHAR* getTermText() const; - size_t getTermTextLen(); - void setTermText(const TCHAR* val); - }; - - CL_NS(store)::IndexOutput* tvx, *tvd, *tvf; - CL_NS(util)::CLVector > fields; - CL_NS(util)::CLVector > terms; - FieldInfos* fieldInfos; - - TVField* currentField; - int64_t currentDocPointer; - - void addTermInternal(const TCHAR* termText, const int32_t freq, - Array* positions, Array* offsets); - - void writeField(); - void writeDoc(); - - void openField(int32_t fieldNumber, bool storePositionWithTermVector, - bool storeOffsetWithTermVector); - -public: - LUCENE_STATIC_CONSTANT(int32_t, FORMAT_VERSION = 2); - - // The size in bytes that the FORMAT_VERSION will take up at the beginning - // of each file - LUCENE_STATIC_CONSTANT(int32_t, FORMAT_SIZE = 4); - - LUCENE_STATIC_CONSTANT(uint8_t, STORE_POSITIONS_WITH_TERMVECTOR = 0x1); - LUCENE_STATIC_CONSTANT(uint8_t, STORE_OFFSET_WITH_TERMVECTOR = 0x2); - - static const QLatin1String LUCENE_TVX_EXTENSION; - static const QLatin1String LUCENE_TVD_EXTENSION; - static const QLatin1String LUCENE_TVF_EXTENSION; - - TermVectorsWriter(CL_NS(store)::Directory* directory, const QString& segment, - FieldInfos* fieldInfos); - - ~TermVectorsWriter(); - void openDocument(); - void closeDocument(); - - /** Close all streams. */ - void close(); - bool isDocumentOpen() const; - - /** Start processing a field. This can be followed by a number of calls to - * addTerm, and a final call to closeField to indicate the end of - * processing of this field. If a field was previously open, it is - * closed automatically. - */ - void openField(const TCHAR* field); - - /** Finished processing current field. This should be followed by a call to - * openField before future calls to addTerm. - */ - void closeField(); - - /** Return true if a field is currently open. */ - bool isFieldOpen() const; - - /** - * Add a complete document specified by all its term vectors. If document has no - * term vectors, add value for tvx. - * - * @param vectors - * @throws IOException - */ - void addAllDocVectors(Array& vectors); - - /** Add term to the field's term vector. Field must already be open. - * Terms should be added in - * increasing order of terms, one call per unique termNum. ProxPointer - * is a pointer into the TermPosition file (prx). Freq is the number of - * times this term appears in this field, in this document. - * @throws IllegalStateException if document or field is not open - */ - void addTerm(const TCHAR* termText, int32_t freq, - Array* positions = NULL, Array* offsets = NULL); -}; - -class SegmentTermVector : public virtual TermFreqVector -{ -private: - const TCHAR* field; - TCHAR** terms; - int32_t termsLen; //cache - Array* termFreqs; - - int32_t binarySearch(TCHAR** a, const int32_t arraylen, const TCHAR* key) const; -public: - //note: termFreqs must be the same length as terms - SegmentTermVector(const TCHAR* field, TCHAR** terms, Array* termFreqs); - virtual ~SegmentTermVector(); - - /** - * - * @return The number of the field this vector is associated with - */ - const TCHAR* getField(); - TCHAR* toString() const; - int32_t size(); - const TCHAR** getTerms(); - const Array* getTermFrequencies(); - int32_t indexOf(const TCHAR* termText); - void indexesOf(const TCHAR** termNumbers, const int32_t start, const int32_t len, Array& ret); - - virtual TermPositionVector* __asTermPositionVector(); -}; - -class TermVectorsReader : LUCENE_BASE -{ -private: - FieldInfos* fieldInfos; - - CL_NS(store)::IndexInput* tvx; - CL_NS(store)::IndexInput* tvd; - CL_NS(store)::IndexInput* tvf; - int64_t _size; - - int32_t tvdFormat; - int32_t tvfFormat; - - - int32_t checkValidFormat(CL_NS(store)::IndexInput* in); - - void readTermVectors(const TCHAR** fields, const int64_t* tvfPointers, - const int32_t len, Array& _return); - - /** - * - * @param field The field to read in - * @param tvfPointer The pointer within the tvf file where we should start reading - * @return The TermVector located at that position - * @throws IOException - */ - SegmentTermVector* readTermVector(const TCHAR* field, const int64_t tvfPointer); - - int64_t size(); - - - DEFINE_MUTEX(THIS_LOCK) - TermVectorsReader(const TermVectorsReader& copy); -public: - TermVectorsReader(CL_NS(store)::Directory* d, const QString& segment, - FieldInfos* fieldInfos); - ~TermVectorsReader(); - - void close(); - TermVectorsReader* clone() const; - - /** - * Retrieve the term vector for the given document and field - * @param docNum The document number to retrieve the vector for - * @param field The field within the document to retrieve - * @return The TermFreqVector for the document and field or null if there is no termVector for this field. - * @throws IOException if there is an error reading the term vector files - */ - TermFreqVector* get(const int32_t docNum, const TCHAR* field); - - - /** - * Return all term vectors stored for this document or null if the could not be read in. - * - * @param docNum The document number to retrieve the vector for - * @return All term frequency vectors - * @throws IOException if there is an error reading the term vector files - */ - bool get(int32_t docNum, Array& result); -}; - - -struct TermVectorOffsetInfo -{ - int startOffset; - int endOffset; - -public: - static Array EMPTY_OFFSET_INFO; - TermVectorOffsetInfo(); - ~TermVectorOffsetInfo(); - TermVectorOffsetInfo(int32_t startOffset, int32_t endOffset); - int32_t getEndOffset() const; - void setEndOffset(int32_t endOffset); - int32_t getStartOffset() const; - void setStartOffset(int32_t startOffset); - bool equals(TermVectorOffsetInfo* o); - size_t hashCode() const; -}; - - -/* Extends TermFreqVector to provide additional information about - * positions in which each of the terms is found. A TermPositionVector not - * necessarily contains both positions and offsets, but at least one of these - * arrays exists. -*/ -class TermPositionVector : public virtual TermFreqVector -{ -public: - - /** Returns an array of positions in which the term is found. - * Terms are identified by the index at which its number appears in the - * term String array obtained from the indexOf method. - * May return null if positions have not been stored. - */ - virtual Array* getTermPositions(int32_t index) = 0; - - /** - * Returns an array of TermVectorOffsetInfo in which the term is found. - * May return null if offsets have not been stored. - * - * @see org.apache.lucene.analysis.Token - * - * @param index The position in the array to get the offsets from - * @return An array of TermVectorOffsetInfo objects or the empty list - */ - virtual Array* getOffsets(int32_t index) = 0; - - virtual ~TermPositionVector(){ - } -}; - - -class SegmentTermPositionVector: public SegmentTermVector, public TermPositionVector -{ -protected: - Array< Array >* positions; - Array< Array >* offsets; - static Array EMPTY_TERM_POS; -public: - SegmentTermPositionVector(const TCHAR* field, TCHAR** terms, - Array* termFreqs, Array< Array >* positions, - Array< Array >* offsets); - ~SegmentTermPositionVector(); - - /** - * Returns an array of TermVectorOffsetInfo in which the term is found. - * - * @param index The position in the array to get the offsets from - * @return An array of TermVectorOffsetInfo objects or the empty list - * @see org.apache.lucene.analysis.Token - */ - Array* getOffsets(int32_t index); - - /** - * Returns an array of positions in which the term is found. - * Terms are identified by the index at which its number appears in the - * term String array obtained from the indexOf method. - */ - Array* getTermPositions(int32_t index); - - const TCHAR* getField() { - return SegmentTermVector::getField(); } - - TCHAR* toString() const { - return SegmentTermVector::toString(); } - - int32_t size() { - return SegmentTermVector::size(); } - - const TCHAR** getTerms() { - return SegmentTermVector::getTerms(); } - - const Array* getTermFrequencies() { - return SegmentTermVector::getTermFrequencies(); } - - int32_t indexOf(const TCHAR* termText) { - return SegmentTermVector::indexOf(termText); } - - void indexesOf(const TCHAR** termNumbers, const int32_t start, - const int32_t len, Array& ret) { - SegmentTermVector::indexesOf(termNumbers, start, len, ret); } - - virtual TermPositionVector* __asTermPositionVector(); -}; - -CL_NS_END - -#endif diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/index/TermVectorReader.cpp qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/index/TermVectorReader.cpp --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/index/TermVectorReader.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/index/TermVectorReader.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,393 +0,0 @@ -/* - * Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team - * - * Distributable under the terms of either the Apache License (Version 2.0) or - * the GNU Lesser General Public License, as specified in the COPYING file. - * - * Changes are Copyright (C) 2015 The Qt Company Ltd. -*/ -#include "CLucene/StdHeader.h" -#include "TermVector.h" -#include "CLucene/util/StringBuffer.h" - -CL_NS_USE(util) -CL_NS_DEF(index) - -TermVectorsReader::TermVectorsReader(CL_NS(store)::Directory* d, - const QString& segment, FieldInfos* fieldInfos) -{ - if (d->fileExists(segment + TermVectorsWriter::LUCENE_TVX_EXTENSION)) { - tvx = d->openInput(segment + TermVectorsWriter::LUCENE_TVX_EXTENSION); - checkValidFormat(tvx); - - tvd = d->openInput(segment + TermVectorsWriter::LUCENE_TVD_EXTENSION); - tvdFormat = checkValidFormat(tvd); - - tvf = d->openInput(segment + TermVectorsWriter::LUCENE_TVF_EXTENSION); - tvfFormat = checkValidFormat(tvf); - - _size = tvx->length() / 8; - }else{ - tvx = NULL; - tvd = NULL; - tvf = NULL; - _size = 0; - } - - this->fieldInfos = fieldInfos; -} - -TermVectorsReader::TermVectorsReader(const TermVectorsReader& copy) -{ - tvx = copy.tvx->clone(); - tvd = copy.tvd->clone(); - tvf = copy.tvf->clone(); - - tvdFormat = copy.tvdFormat; - tvfFormat = copy.tvfFormat; - _size = copy._size; - fieldInfos = copy.fieldInfos; -} -TermVectorsReader* TermVectorsReader::clone() const{ - if (tvx == NULL || tvd == NULL || tvf == NULL) - return NULL; - return _CLNEW TermVectorsReader(*this); -} - -TermVectorsReader::~TermVectorsReader(){ - close(); -} - -void TermVectorsReader::close(){ - // why don't we trap the exception and at least make sure that - // all streams that we can close are closed? - CLuceneError keep(0,"",false); - bool thrown = false; - - if (tvx != NULL){ - try{ - tvx->close(); - }catch(CLuceneError& err){ - if ( err.number() == CL_ERR_IO ){ - keep = err; - thrown = true; - }else - throw err; - } - _CLDELETE(tvx);//delete even if error thrown - } - if (tvd != NULL){ - try{ - tvd->close(); - }catch(CLuceneError& err){ - if ( err.number() == CL_ERR_IO ){ - keep = err; - thrown = true; - }else - throw err; - } - _CLDELETE(tvd); - } - if (tvf != NULL){ - try{ - tvf->close(); - }catch(CLuceneError& err){ - if ( err.number() == CL_ERR_IO ){ - keep = err; - thrown = true; - }else - throw err; - } - _CLDELETE(tvf); - } - - if ( thrown ) - throw keep; -} - -TermFreqVector* TermVectorsReader::get(const int32_t docNum, const TCHAR* field){ - // Check if no term vectors are available for this segment at all - int32_t fieldNumber = fieldInfos->fieldNumber(field); - TermFreqVector* result = NULL; - if (tvx != NULL) { - //We need to account for the FORMAT_SIZE at when seeking in the tvx - //We don't need to do this in other seeks because we already have the - // file pointer - //that was written in another file - tvx->seek((docNum * 8L) + TermVectorsWriter::FORMAT_SIZE); - int64_t position = tvx->readLong(); - - tvd->seek(position); - int32_t fieldCount = tvd->readVInt(); - // There are only a few fields per document. We opt for a full scan - // rather then requiring that they be ordered. We need to read through - // all of the fields anyway to get to the tvf pointers. - int32_t number = 0; - int32_t found = -1; - for (int32_t i = 0; i < fieldCount; ++i) { - if(tvdFormat == TermVectorsWriter::FORMAT_VERSION) - number = tvd->readVInt(); - else - number += tvd->readVInt(); - if (number == fieldNumber) - found = i; - } - - // This field, although valid in the segment, was not found in this - // document - if (found != -1) { - // Compute position in the tvf file - position = 0; - for (int32_t i = 0; i <= found; ++i) - position += tvd->readVLong(); - result = readTermVector(field, position); - } - } - return result; -} - - -bool TermVectorsReader::get(int32_t docNum, Array& result){ - // Check if no term vectors are available for this segment at all - if (tvx != NULL) { - //We need to offset by - tvx->seek((docNum * 8L) + TermVectorsWriter::FORMAT_SIZE); - int64_t position = tvx->readLong(); - - tvd->seek(position); - int32_t fieldCount = tvd->readVInt(); - - // No fields are vectorized for this document - if (fieldCount != 0) { - int32_t number = 0; - const TCHAR** fields = _CL_NEWARRAY(const TCHAR*,fieldCount+1); - - { //msvc6 scope fix - for (int32_t i = 0; i < fieldCount; ++i) { - if(tvdFormat == TermVectorsWriter::FORMAT_VERSION) - number = tvd->readVInt(); - else - number += tvd->readVInt(); - fields[i] = fieldInfos->fieldName(number); - } - } - fields[fieldCount]=NULL; - - // Compute position in the tvf file - position = 0; - int64_t* tvfPointers = _CL_NEWARRAY(int64_t,fieldCount); - { //msvc6 scope fix - for (int32_t i = 0; i < fieldCount; ++i) { - position += tvd->readVLong(); - tvfPointers[i] = position; - } - } - - readTermVectors(fields, tvfPointers, fieldCount, result); - _CLDELETE_ARRAY(tvfPointers); - _CLDELETE_ARRAY(fields); - } - return true; - } - return false; -} - - -int32_t TermVectorsReader::checkValidFormat(CL_NS(store)::IndexInput* in) -{ - int32_t format = in->readInt(); - if (format > TermVectorsWriter::FORMAT_VERSION) - { - CL_NS(util)::StringBuffer err; - err.append(_T("Incompatible format version: ")); - err.appendInt(format); - err.append(_T(" expected ")); - err.appendInt(TermVectorsWriter::FORMAT_VERSION); - err.append(_T(" or less")); - _CLTHROWT(CL_ERR_Runtime,err.getBuffer()); - } - return format; -} - -void TermVectorsReader::readTermVectors(const TCHAR** fields, - const int64_t* tvfPointers, const int32_t len, Array& result) -{ - result.length = len; - result.values = _CL_NEWARRAY(TermFreqVector*,len); - for (int32_t i = 0; i < len; ++i) { - result.values[i] = readTermVector(fields[i], tvfPointers[i]); - } -} - -SegmentTermVector* TermVectorsReader::readTermVector(const TCHAR* field, - const int64_t tvfPointer) -{ - // Now read the data from specified position. We don't need to offset by - // the FORMAT here since the pointer already includes the offset - tvf->seek(tvfPointer); - - int32_t numTerms = tvf->readVInt(); - // If no terms - return a constant empty termvector. However, this should never occur! - if (numTerms == 0) - return _CLNEW SegmentTermVector(field, NULL, NULL); - - bool storePositions; - bool storeOffsets; - - if(tvfFormat == TermVectorsWriter::FORMAT_VERSION){ - uint8_t bits = tvf->readByte(); - storePositions = (bits & TermVectorsWriter::STORE_POSITIONS_WITH_TERMVECTOR) != 0; - storeOffsets = (bits & TermVectorsWriter::STORE_OFFSET_WITH_TERMVECTOR) != 0; - } - else{ - tvf->readVInt(); - storePositions = false; - storeOffsets = false; - } - - TCHAR** terms = _CL_NEWARRAY(TCHAR*,numTerms+1); - Array* termFreqs = _CLNEW Array(numTerms); - - // we may not need these, but declare them - Array< Array >* positions = NULL; - Array< Array >* offsets = NULL; - if(storePositions){ - Array* tmp = _CL_NEWARRAY(Array,numTerms); - positions = _CLNEW Array< Array >(tmp, numTerms); - } - if(storeOffsets){ - Array* tmp = _CL_NEWARRAY(Array,numTerms); - offsets = _CLNEW Array< Array >(tmp, numTerms); - } - - int32_t start = 0; - int32_t deltaLength = 0; - int32_t totalLength = 0; - int32_t bufferLen=10; // init the buffer with a length of 10 character - TCHAR* buffer = (TCHAR*)malloc(bufferLen * sizeof(TCHAR)); - - for (int32_t i = 0; i < numTerms; ++i) { - start = tvf->readVInt(); - deltaLength = tvf->readVInt(); - totalLength = start + deltaLength; - if (bufferLen < totalLength) // increase buffer - { - buffer=(TCHAR*)realloc(buffer,totalLength * sizeof(TCHAR)); - bufferLen = totalLength; - } - - //read the term - tvf->readChars(buffer, start, deltaLength); - terms[i] = _CL_NEWARRAY(TCHAR,totalLength+1); - _tcsncpy(terms[i],buffer,totalLength); - terms[i][totalLength] = '\0'; //null terminate term - - //read the frequency - int32_t freq = tvf->readVInt(); - termFreqs->values[i] = freq; - - if (storePositions) { //read in the positions - Array& pos = positions->values[i]; - pos.length = freq; - pos.values = _CL_NEWARRAY(int32_t,freq); - - int32_t prevPosition = 0; - for (int32_t j = 0; j < freq; ++j) - { - pos.values[j] = prevPosition + tvf->readVInt(); - prevPosition = pos.values[j]; - } - } - - if (storeOffsets) { - Array& offs = offsets->values[i]; - offs.length = freq; - offs.values = _CL_NEWARRAY(TermVectorOffsetInfo,freq); - - int32_t prevOffset = 0; - for (int32_t j = 0; j < freq; ++j) { - int32_t startOffset = prevOffset + tvf->readVInt(); - int32_t endOffset = startOffset + tvf->readVInt(); - offs.values[j].setStartOffset(startOffset); - offs.values[j].setEndOffset(endOffset); - prevOffset = endOffset; - } - } - } - free(buffer); - terms[numTerms]=NULL; //null terminate terms array - - SegmentTermVector* tv = NULL; - if (storePositions || storeOffsets){ - return _CLNEW SegmentTermPositionVector(field, terms, termFreqs, positions, offsets); - }else { - return _CLNEW SegmentTermVector(field, terms, termFreqs); - } -} - -int64_t TermVectorsReader::size() -{ - return _size; -} - - - - -Array TermVectorOffsetInfo::EMPTY_OFFSET_INFO; - -TermVectorOffsetInfo::TermVectorOffsetInfo() -{ - startOffset = 0; - endOffset=0; -} - -TermVectorOffsetInfo::~TermVectorOffsetInfo() -{ -} - -TermVectorOffsetInfo::TermVectorOffsetInfo(int32_t startOffset, int32_t endOffset) -{ - this->endOffset = endOffset; - this->startOffset = startOffset; -} - -int32_t TermVectorOffsetInfo::getEndOffset() const -{ - return endOffset; -} - -void TermVectorOffsetInfo::setEndOffset(int32_t endOffset) -{ - this->endOffset = endOffset; -} - -int32_t TermVectorOffsetInfo::getStartOffset() const -{ - return startOffset; -} - -void TermVectorOffsetInfo::setStartOffset(int32_t startOffset) -{ - this->startOffset = startOffset; -} - -bool TermVectorOffsetInfo::equals(TermVectorOffsetInfo* termVectorOffsetInfo) -{ - if (this == termVectorOffsetInfo) - return true; - - if (endOffset != termVectorOffsetInfo->endOffset) return false; - if (startOffset != termVectorOffsetInfo->startOffset) return false; - - return true; -} - -size_t TermVectorOffsetInfo::hashCode() const -{ - size_t result; - result = startOffset; - result = 29 * result + endOffset; - return result; -} - -CL_NS_END diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/index/TermVectorWriter.cpp qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/index/TermVectorWriter.cpp --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/index/TermVectorWriter.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/index/TermVectorWriter.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,349 +0,0 @@ -/* - * Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team - * - * Distributable under the terms of either the Apache License (Version 2.0) or - * the GNU Lesser General Public License, as specified in the COPYING file. - * - * Changes are Copyright (C) 2015 The Qt Company Ltd. -*/ -#include "CLucene/StdHeader.h" -#include "TermVector.h" -#include "CLucene/util/Misc.h" - -CL_NS_USE(util) -CL_NS_DEF(index) - -const QLatin1String TermVectorsWriter::LUCENE_TVX_EXTENSION(".tvx"); -const QLatin1String TermVectorsWriter::LUCENE_TVD_EXTENSION(".tvd"); -const QLatin1String TermVectorsWriter::LUCENE_TVF_EXTENSION(".tvf"); - -TermVectorsWriter::TermVectorsWriter(CL_NS(store)::Directory* directory, - const QString& segment,FieldInfos* fieldInfos) -{ - // Open files for TermVector storage - tvx = directory->createOutput(segment + LUCENE_TVX_EXTENSION); - tvx->writeInt(FORMAT_VERSION); - - tvd = directory->createOutput(segment + LUCENE_TVD_EXTENSION); - tvd->writeInt(FORMAT_VERSION); - - tvf = directory->createOutput(segment + LUCENE_TVF_EXTENSION); - tvf->writeInt(FORMAT_VERSION); - - this->fieldInfos = fieldInfos; - - currentField = NULL; - currentDocPointer = -1; -} - -TermVectorsWriter::~TermVectorsWriter() -{ - if (tvx != NULL) { - tvx->close(); - _CLDELETE(tvx); - } - - if (tvd != NULL) { - tvd->close(); - _CLDELETE(tvd); - } - - if (tvf != NULL){ - tvf->close(); - _CLDELETE(tvf); - } -} - -void TermVectorsWriter::openDocument() -{ - closeDocument(); - currentDocPointer = tvd->getFilePointer(); -} - -void TermVectorsWriter::closeDocument() -{ - if (isDocumentOpen()) { - closeField(); - writeDoc(); - fields.clear(); - currentDocPointer = -1; - } -} - -bool TermVectorsWriter::isDocumentOpen() const -{ - return currentDocPointer != -1; -} - - -void TermVectorsWriter::openField(int32_t fieldNumber, - bool storePositionWithTermVector, bool storeOffsetWithTermVector) -{ - if (!isDocumentOpen()) - _CLTHROWA(CL_ERR_InvalidState,"Cannot open field when no document is open."); - - closeField(); - currentField = _CLNEW TVField(fieldNumber, storePositionWithTermVector, - storeOffsetWithTermVector); -} - -void TermVectorsWriter::openField(const TCHAR* field) -{ - FieldInfo* fieldInfo = fieldInfos->fieldInfo(field); - openField(fieldInfo->number, fieldInfo->storePositionWithTermVector, - fieldInfo->storeOffsetWithTermVector); -} - -void TermVectorsWriter::closeField() -{ - if (isFieldOpen()) { - /* DEBUG */ - //System.out.println("closeField()"); - /* DEBUG */ - - // save field and terms - writeField(); - fields.push_back(currentField); - terms.clear(); - currentField = NULL; - } -} - -bool TermVectorsWriter::isFieldOpen() const -{ - return currentField != NULL; -} - -void TermVectorsWriter::addTerm(const TCHAR* termText, int32_t freq, - Array* positions, Array* offsets) -{ - if (!isDocumentOpen()) - _CLTHROWA(CL_ERR_InvalidState, "Cannot add terms when document is not open"); - - if (!isFieldOpen()) - _CLTHROWA(CL_ERR_InvalidState, "Cannot add terms when field is not open"); - - addTermInternal(termText, freq, positions, offsets); -} - -void TermVectorsWriter::addTermInternal(const TCHAR* termText, int32_t freq, - Array* positions, Array* offsets) -{ - TVTerm* term = _CLNEW TVTerm(); - term->setTermText(termText); - term->freq = freq; - term->positions = positions; - term->offsets = offsets; - terms.push_back(term); -} - -void TermVectorsWriter::addAllDocVectors(Array& vectors) -{ - openDocument(); - - for (int32_t i = 0; i < vectors.length; ++i) { - bool storePositionWithTermVector = false; - bool storeOffsetWithTermVector = false; - - if ( vectors[i]->__asTermPositionVector() != NULL ) { - TermPositionVector* tpVector = vectors[i]->__asTermPositionVector(); - - if (tpVector->size() > 0 && tpVector->getTermPositions(0) != NULL) - storePositionWithTermVector = true; - if (tpVector->size() > 0 && tpVector->getOffsets(0) != NULL) - storeOffsetWithTermVector = true; - - FieldInfo* fieldInfo = fieldInfos->fieldInfo(tpVector->getField()); - openField(fieldInfo->number, storePositionWithTermVector, storeOffsetWithTermVector); - - for (int32_t j = 0; j < tpVector->size(); ++j) - addTermInternal(tpVector->getTerms()[j], - (*tpVector->getTermFrequencies())[j], - tpVector->getTermPositions(j), - tpVector->getOffsets(j)); - - closeField(); - - } else { - TermFreqVector* tfVector = vectors[i]; - - FieldInfo* fieldInfo = fieldInfos->fieldInfo(tfVector->getField()); - openField(fieldInfo->number, storePositionWithTermVector, storeOffsetWithTermVector); - - for (int32_t j = 0; j < tfVector->size(); ++j) - addTermInternal(tfVector->getTerms()[j], - (*tfVector->getTermFrequencies())[j], NULL, NULL); - - closeField(); - } - } - - closeDocument(); -} - - -void TermVectorsWriter::close() -{ - try { - closeDocument(); - - // make an effort to close all streams we can but remember and re-throw - // the first exception encountered in this process -#define _DOTVWCLOSE(x) \ - if (x != NULL) { \ - try { \ - x->close(); \ - _CLDELETE(x) \ - } catch (CLuceneError& e) { \ - if ( e.number() != CL_ERR_IO ) \ - throw e; \ - if (ikeep == 0) \ - ikeep = e.number(); \ - if (keep[0] == 0) \ - strcpy(keep,e.what()); \ - } catch (...) { \ - if (keep[0] == 0) \ - strcpy(keep, "Unknown error while closing " #x);\ - } \ - } - } _CLFINALLY ( \ - char keep[200]; - int32_t ikeep = 0; - keep[0] = 0; - _DOTVWCLOSE(tvx); - _DOTVWCLOSE(tvd); - _DOTVWCLOSE(tvf); - if (keep[0] != 0) - _CLTHROWA(ikeep, keep); - ); -} - -void TermVectorsWriter::writeField() -{ - // remember where this field is written - currentField->tvfPointer = tvf->getFilePointer(); - //System.out.println("Field Pointer: " + currentField.tvfPointer); - int32_t size = terms.size(); - - tvf->writeVInt(size); - - bool storePositions = currentField->storePositions; - bool storeOffsets = currentField->storeOffsets; - uint8_t bits = 0x0; - if (storePositions) - bits |= STORE_POSITIONS_WITH_TERMVECTOR; - if (storeOffsets) - bits |= STORE_OFFSET_WITH_TERMVECTOR; - tvf->writeByte(bits); - - const TCHAR* lastTermText = LUCENE_BLANK_STRING; - int32_t lastTermTextLen = 0; - - for (int32_t i = 0; i < size; ++i) { - TVTerm* term = terms[i]; - int32_t start = CL_NS(util)::Misc::stringDifference(lastTermText, - lastTermTextLen, term->getTermText(),term->getTermTextLen()); - int32_t length = term->getTermTextLen() - start; - tvf->writeVInt(start); // write shared prefix length - tvf->writeVInt(length); // write delta length - tvf->writeChars(term->getTermText(), start, length); // write delta chars - tvf->writeVInt(term->freq); - - lastTermText = term->getTermText(); - lastTermTextLen = term->getTermTextLen(); - - if (storePositions) { - if(term->positions == NULL) - _CLTHROWA(CL_ERR_IllegalState, "Trying to write positions that are NULL!"); - - // use delta encoding for positions - int32_t position = 0; - for (int32_t j = 0; j < term->freq; ++j){ - tvf->writeVInt((*term->positions)[j] - position); - position = (*term->positions)[j]; - } - } - - if (storeOffsets) { - if(term->offsets == NULL) - _CLTHROWA(CL_ERR_IllegalState, "Trying to write offsets that are NULL!"); - - // use delta encoding for offsets - int32_t position = 0; - for (int32_t j = 0; j < term->freq; ++j) { - tvf->writeVInt((*term->offsets)[j].getStartOffset() - position); - //Save the diff between the two. - tvf->writeVInt((*term->offsets)[j].getEndOffset() - - (*term->offsets)[j].getStartOffset()); - position = (*term->offsets)[j].getEndOffset(); - } - } - } -} - -void TermVectorsWriter::writeDoc() -{ - if (isFieldOpen()) { - _CLTHROWA(CL_ERR_InvalidState, - "Field is still open while writing document"); - } - - // write document index record - tvx->writeLong(currentDocPointer); - - // write document data record - int32_t size = fields.size(); - - // write the number of fields - tvd->writeVInt(size); - - // write field numbers - for (int32_t j = 0; j < size; ++j) { - tvd->writeVInt(fields[j]->number); - } - - // write field pointers - int64_t lastFieldPointer = 0; - for (int32_t i = 0; i < size; ++i) { - TVField* field = (TVField*) fields[i]; - tvd->writeVLong(field->tvfPointer - lastFieldPointer); - - lastFieldPointer = field->tvfPointer; - } -} - -const TCHAR* TermVectorsWriter::TVTerm::getTermText() const -{ - return termText; -} - -size_t TermVectorsWriter::TVTerm::getTermTextLen() -{ - if (termTextLen==-1) - termTextLen = _tcslen(termText); - return termTextLen; -} - -void TermVectorsWriter::TVTerm::setTermText(const TCHAR* val) -{ - _CLDELETE_CARRAY(termText); - termText = STRDUP_TtoT(val); - termTextLen = -1; - -} - -TermVectorsWriter::TVTerm::TVTerm() - : freq(0) - , positions(NULL) - , offsets(NULL) -{ - termText=NULL; - termTextLen=-1; -} - -TermVectorsWriter::TVTerm::~TVTerm() -{ - _CLDELETE_CARRAY(termText) -} - -CL_NS_END diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/LuceneThreads.h qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/LuceneThreads.h --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/LuceneThreads.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/LuceneThreads.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,72 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#ifndef _LuceneThreads_h -#define _LuceneThreads_h -#if defined(_LUCENE_PRAGMA_ONCE) -# pragma once -#endif - -#if defined(_CL_DISABLE_MULTITHREADING) - #define SCOPED_LOCK_MUTEX(theMutex) - #define DEFINE_MUTEX(x) - #define STATIC_DEFINE_MUTEX(x) - #define _LUCENE_SLEEP(x) - #define _LUCENE_CURRTHREADID 1 - #define _LUCENE_THREADID_TYPE char - - CL_NS_DEF(util) - class CLuceneThreadIdCompare - { - public: - enum - { // parameters for hash table - bucket_size = 4, // 0 < bucket_size - min_buckets = 8 - }; // min_buckets = 2 ^^ N, 0 < N - - bool operator()( char t1, char t2 ) const{ - return t1 < t2; - } - }; - CL_NS_END -#else - - #if defined(_LUCENE_DONTIMPLEMENT_THREADMUTEX) - //do nothing - #elif defined(_CL_HAVE_PTHREAD) - #include "CLucene/config/threadPthread.h" - #elif defined(_CL_HAVE_WIN32_THREADS) || defined(_CLCOMPILER_MSVC) || defined(__MINGW32__) //note that mingw32 could have pthreads, so put this after. - #if !defined(_CL_HAVE_WIN32_THREADS) - #define _CL_HAVE_WIN32_THREADS - #endif - #include "CLucene/config/threadCSection.h" - #else - #error A valid thread library was not found - #endif //mutex types - - CL_NS_DEF(util) - /** @internal */ - class mutexGuard - { - private: - _LUCENE_THREADMUTEX* mrMutex; - mutexGuard(const mutexGuard& clone); - public: - mutexGuard( _LUCENE_THREADMUTEX& rMutex ); - ~mutexGuard(); - }; - CL_NS_END - - #define SCOPED_LOCK_MUTEX(theMutex) CL_NS(util)::mutexGuard theMutexGuard(theMutex); - #define DEFINE_MUTEX(theMutex) _LUCENE_THREADMUTEX theMutex; - #define STATIC_DEFINE_MUTEX(theMutex) static _LUCENE_THREADMUTEX theMutex; - -#endif //_CL_DISABLE_MULTITHREADING - - - -#endif diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/queryParser/Lexer.cpp qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/queryParser/Lexer.cpp --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/queryParser/Lexer.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/queryParser/Lexer.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,371 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#include "CLucene/StdHeader.h" -#include "Lexer.h" - -#include "CLucene/util/FastCharStream.h" -#include "CLucene/util/Reader.h" -#include "CLucene/util/StringBuffer.h" -#include "TokenList.h" -#include "QueryToken.h" -#include "QueryParserBase.h" - -CL_NS_USE(util) - -CL_NS_DEF(queryParser) -Lexer::Lexer(QueryParserBase* queryparser, const TCHAR* query) { - //Func - Constructor - //Pre - query != NULL and contains the query string - //Post - An instance of Lexer has been created - - this->queryparser = queryparser; - - CND_PRECONDITION(query != NULL, "query is NULL"); - - //The InputStream of Reader must be destroyed in the destructor - delSR = true; - - StringReader *r = _CLNEW StringReader(query); - - //Check to see if r has been created properly - CND_CONDITION(r != NULL, "Could not allocate memory for StringReader r"); - - //Instantie a FastCharStream instance using r and assign it to reader - reader = _CLNEW FastCharStream(r); - - //Check to see if reader has been created properly - CND_CONDITION(reader != NULL, "Could not allocate memory for FastCharStream reader"); - - //The InputStream of Reader must be destroyed in the destructor - delSR = true; - -} - - -Lexer::Lexer(QueryParserBase* queryparser, Reader* source) { - //Func - Constructor - // Initializes a new instance of the Lexer class with the specified - // TextReader to lex. - //Pre - Source contains a valid reference to a Reader - //Post - An instance of Lexer has been created using source as the reader - - this->queryparser = queryparser; - - //Instantie a FastCharStream instance using r and assign it to reader - reader = _CLNEW FastCharStream(source); - - //Check to see if reader has been created properly - CND_CONDITION(reader != NULL, "Could not allocate memory for FastCharStream reader"); - - //The InputStream of Reader must not be destroyed in the destructor - delSR = false; -} - - -Lexer::~Lexer() { - //Func - Destructor - //Pre - true - //Post - if delSR was true the InputStream input of reader has been deleted - // The instance of Lexer has been destroyed - - if (delSR) { - _CLDELETE(reader->input); - } - - _CLDELETE(reader); -} - - -void Lexer::Lex(TokenList *tokenList) { - //Func - Breaks the input stream onto the tokens list tokens - //Pre - tokens != NULL and contains a TokenList in which the tokens can be stored - //Post - The tokens have been added to the TokenList tokens - - CND_PRECONDITION(tokenList != NULL, "tokens is NULL"); - - //Get all the tokens - while(true) { - //Add the token to the tokens list - - //Get the next token - QueryToken* token = _CLNEW QueryToken; - if ( !GetNextToken(token) ){ - _CLDELETE(token); - break; - } - tokenList->add(token); - } - - //The end has been reached so create an EOF_ token - //Add the final token to the TokenList _tokens - tokenList->add(_CLNEW QueryToken( QueryToken::EOF_)); -} - - -bool Lexer::GetNextToken(QueryToken* token) { - while(!reader->Eos()) { - int ch = reader->GetNext(); - - if ( ch == -1 ) - break; - - // skipping whitespaces - if( _istspace(ch)!=0 ) { - continue; - } - TCHAR buf[2] = {TCHAR(ch),'\0'}; - switch(ch) { - case '+': - token->set(buf, QueryToken::PLUS); - return true; - case '-': - token->set(buf, QueryToken::MINUS); - return true; - case '(': - token->set(buf, QueryToken::LPAREN); - return true; - case ')': - token->set(buf, QueryToken::RPAREN); - return true; - case ':': - token->set(buf, QueryToken::COLON); - return true; - case '!': - token->set(buf, QueryToken::NOT); - return true; - case '^': - token->set(buf, QueryToken::CARAT); - return true; - case '~': - if( _istdigit( reader->Peek() )!=0 ) { - TCHAR number[LUCENE_MAX_FIELD_LEN]; - ReadIntegerNumber(ch, number,LUCENE_MAX_FIELD_LEN); - token->set(number, QueryToken::SLOP); - return true; - }else{ - token->set(buf, QueryToken::FUZZY); - return true; - } - break; - case '"': - return ReadQuoted(ch, token); - case '[': - return ReadInclusiveRange(ch, token); - case '{': - return ReadExclusiveRange(ch, token); - case ']': - case '}': - case '*': - queryparser->throwParserException( _T("Unrecognized TCHAR %d at %d::%d."), - ch, reader->Column(), reader->Line() ); - return false; - default: - return ReadTerm(ch, token); - - // end of swith - } - - } - return false; -} - - -void Lexer::ReadIntegerNumber(const TCHAR ch, TCHAR* buf, int buflen) { - int bp=0; - buf[bp++] = ch; - - int c = reader->Peek(); - while( c!=-1 && _istdigit(c)!=0 && bpGetNext(); - c = reader->Peek(); - } - buf[bp++] = 0; -} - - -bool Lexer::ReadInclusiveRange(const TCHAR prev, QueryToken* token) { - int ch = prev; - StringBuffer range; - range.appendChar(ch); - - while(!reader->Eos()) { - ch = reader->GetNext(); - if ( ch == -1 ) - break; - range.appendChar(ch); - - if(ch == ']'){ - token->set(range.getBuffer(), QueryToken::RANGEIN); - return true; - } - } - queryparser->throwParserException(_T("Unterminated inclusive range! %d %d::%d"),' ', - reader->Column(),reader->Column()); - return false; -} - - -bool Lexer::ReadExclusiveRange(const TCHAR prev, QueryToken* token) { - int ch = prev; - StringBuffer range; - range.appendChar(ch); - - while(!reader->Eos()) { - ch = reader->GetNext(); - - if (ch==-1) - break; - range.appendChar(ch); - - if(ch == '}'){ - token->set(range.getBuffer(), QueryToken::RANGEEX); - return true; - } - } - queryparser->throwParserException(_T("Unterminated exclusive range! %d %d::%d"),' ', - reader->Column(),reader->Column() ); - return false; -} - -bool Lexer::ReadQuoted(const TCHAR prev, QueryToken* token) { - int ch = prev; - StringBuffer quoted; - quoted.appendChar(ch); - - while(!reader->Eos()) { - ch = reader->GetNext(); - - if (ch==-1) - break; - - quoted.appendChar(ch); - - if(ch == '"'){ - token->set(quoted.getBuffer(), QueryToken::QUOTED); - return true; - } - } - queryparser->throwParserException(_T("Unterminated string! %d %d::%d"),' ', - reader->Column(),reader->Column()); - return false; -} - - -bool Lexer::ReadTerm(const TCHAR prev, QueryToken* token) { - int ch = prev; - bool completed = false; - int32_t asteriskCount = 0; - bool hasQuestion = false; - - StringBuffer val; - TCHAR buf[3]; //used for readescaped - - while(true) { - switch(ch) { - case -1: - break; - case '\\': - { - if ( ReadEscape(ch, buf) ) - val.append( buf ); - else - return false; - } - break; - - case LUCENE_WILDCARDTERMENUM_WILDCARD_STRING: - asteriskCount++; - val.appendChar(ch); - break; - case LUCENE_WILDCARDTERMENUM_WILDCARD_CHAR: - hasQuestion = true; - val.appendChar(ch); - break; - case '\n': - case '\t': - case ' ': - case '+': - case '-': - case '!': - case '(': - case ')': - case ':': - case '^': - case '[': - case ']': - case '{': - case '}': - case '~': - case '"': - // create new QueryToken - reader->UnGet(); - completed = true; - break; - default: - val.appendChar(ch); - break; - // end of switch - } - - if(completed || ch==-1 || reader->Eos() ) - break; - else - ch = reader->GetNext(); - } - - // create new QueryToken - if(hasQuestion) - token->set(val.getBuffer(), QueryToken::WILDTERM); - else if(asteriskCount == 1 && val.getBuffer()[val.length() - 1] == '*') - token->set(val.getBuffer(), QueryToken::PREFIXTERM); - else if(asteriskCount > 0) - token->set(val.getBuffer(), QueryToken::WILDTERM); - else if( _tcsicmp(val.getBuffer(), _T("AND"))==0 || _tcscmp(val.getBuffer(), _T("&&"))==0 ) - token->set(val.getBuffer(), QueryToken::AND_); - else if( _tcsicmp(val.getBuffer(), _T("OR"))==0 || _tcscmp(val.getBuffer(), _T("||"))==0) - token->set(val.getBuffer(), QueryToken::OR); - else if( _tcsicmp(val.getBuffer(), _T("NOT"))==0 ) - token->set(val.getBuffer(), QueryToken::NOT); - else { - bool isnum = true; - int32_t nlen=val.length(); - for (int32_t i=0;iset(val.getBuffer(), QueryToken::NUMBER); - else - token->set(val.getBuffer(), QueryToken::TERM); - } - return true; -} - - -bool Lexer::ReadEscape(TCHAR prev, TCHAR* buf) { - TCHAR ch = prev; - int bp=0; - buf[bp++] = ch; - - ch = reader->GetNext(); - int32_t idx = _tcscspn( buf, _T("\\+-!():^[]{}\"~*") ); - if(idx == 0) { - buf[bp++] = ch; - buf[bp++]=0; - return true; - } - queryparser->throwParserException(_T("Unrecognized escape sequence at %d %d::%d"), ' ', - reader->Column(),reader->Line()); - return false; -} - - -CL_NS_END diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/queryParser/Lexer.h qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/queryParser/Lexer.h --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/queryParser/Lexer.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/queryParser/Lexer.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,67 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -* -* Changes are Copyright (C) 2015 The Qt Company Ltd. -------------------------------------------------------------------------------*/ -#ifndef _lucene_queryParser_Lexer_ -#define _lucene_queryParser_Lexer_ - -#if defined(_LUCENE_PRAGMA_ONCE) -# pragma once -#endif - -#include "CLucene/util/FastCharStream.h" -#include "CLucene/util/Reader.h" -#include "CLucene/util/StringBuffer.h" - -#include "TokenList.h" - -CL_NS_DEF(queryParser) -class QueryParserBase; - // A simple Lexer that is used by QueryParser. - class Lexer:LUCENE_BASE - { - private: - CL_NS(util)::FastCharStream* reader; - QueryParserBase* queryparser; //holds the queryparser so that we can do callbacks - bool delSR; //Indicates if the reader must be deleted or not - - public: - // Initializes a new instance of the Lexer class with the specified - // query to lex. - Lexer(QueryParserBase* queryparser, const TCHAR* query); - - // Initializes a new instance of the Lexer class with the specified - // TextReader to lex. - Lexer(QueryParserBase* queryparser, CL_NS(util)::Reader* source); - - //Breaks the input stream onto the tokens list tokens - void Lex(TokenList *tokens); - - ~Lexer(); - - private: - bool GetNextToken(QueryToken* token); - - // Reads an integer number. buf should quite large, probably as large as a field should ever be - void ReadIntegerNumber(const TCHAR ch, TCHAR* buf, int buflen); - - // Reads an inclusive range like [some words] - bool ReadInclusiveRange(const TCHAR prev, QueryToken* token); - - // Reads an exclusive range like {some words} - bool ReadExclusiveRange(const TCHAR prev, QueryToken* token); - - // Reads quoted string like "something else" - bool ReadQuoted(const TCHAR prev, QueryToken* token); - - bool ReadTerm(const TCHAR prev, QueryToken* token); - - //reads an escaped character into the buf. Buf requires at least 3 characters - bool ReadEscape(const TCHAR prev, TCHAR* buf); - }; -CL_NS_END -#endif diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/queryParser/MultiFieldQueryParser.cpp qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/queryParser/MultiFieldQueryParser.cpp --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/queryParser/MultiFieldQueryParser.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/queryParser/MultiFieldQueryParser.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,215 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -* -* Changes are Copyright (C) 2015 The Qt Company Ltd. -------------------------------------------------------------------------------*/ -#include "CLucene/StdHeader.h" -#include "MultiFieldQueryParser.h" -#include "CLucene/analysis/AnalysisHeader.h" -#include "CLucene/search/BooleanQuery.h" -#include "CLucene/search/PhraseQuery.h" -#include "CLucene/search/SearchHeader.h" -#include "QueryParser.h" - -CL_NS_USE(index) -CL_NS_USE(util) -CL_NS_USE(search) -CL_NS_USE(analysis) - -CL_NS_DEF(queryParser) - -MultiFieldQueryParser::MultiFieldQueryParser(const TCHAR** fields, - CL_NS(analysis)::Analyzer* analyzer, BoostMap* boosts) - : QueryParser(NULL, analyzer) -{ - this->fields = fields; - this->boosts = boosts; -} - -MultiFieldQueryParser::~MultiFieldQueryParser() -{ -} - -//static -Query* MultiFieldQueryParser::parse(const TCHAR* query, const TCHAR** fields, - Analyzer* analyzer) -{ - BooleanQuery* bQuery = _CLNEW BooleanQuery(); - int32_t i = 0; - while (fields[i] != NULL){ - Query* q = QueryParser::parse(query, fields[i], analyzer); - if (q && (q->getQueryName() != _T("BooleanQuery") - || ((BooleanQuery*)q)->getClauseCount() > 0)) { - bQuery->add(q , true, false, false); - } else { - _CLDELETE(q); - } - i++; - } - return bQuery; -} - -//static -Query* MultiFieldQueryParser::parse(const TCHAR* query, const TCHAR** fields, - const uint8_t* flags, Analyzer* analyzer) -{ - BooleanQuery* bQuery = _CLNEW BooleanQuery(); - int32_t i = 0; - while ( fields[i] != NULL ) { - Query* q = QueryParser::parse(query, fields[i], analyzer); - if (q && (q->getQueryName() != _T("BooleanQuery") - || ((BooleanQuery*)q)->getClauseCount() > 0)) { - uint8_t flag = flags[i]; - switch (flag) { - case MultiFieldQueryParser::REQUIRED_FIELD: - bQuery->add(q, true, true, false); - break; - case MultiFieldQueryParser::PROHIBITED_FIELD: - bQuery->add(q, true, false, true); - break; - default: - bQuery->add(q, true, false, false); - break; - } - } else { - _CLDELETE(q); - } - i++; - } - return bQuery; -} - - -Query* MultiFieldQueryParser::GetFieldQuery(const TCHAR* field, TCHAR* queryText, int32_t slop){ - if (field == NULL) { - CL_NS_STD(vector) clauses; - for (int i = 0; fields[i]!=NULL; ++i) { - Query* q = QueryParser::GetFieldQuery(fields[i], queryText); - if (q != NULL) { - //If the user passes a map of boosts - if (boosts != NULL) { - //Get the boost from the map and apply them - BoostMap::const_iterator itr = boosts->find(fields[i]); - if (itr != boosts->end()) { - q->setBoost(itr->second); - } - } - if (q->getQueryName() == PhraseQuery::getClassName()) { - ((PhraseQuery*)q)->setSlop(slop); - } - //if (q instanceof MultiPhraseQuery) { - // ((MultiPhraseQuery) q).setSlop(slop); - //} - q = QueryAddedCallback(fields[i], q); - if ( q ) - clauses.push_back(_CLNEW BooleanClause(q, true, false,false)); - } - } - if (clauses.size() == 0) // happens for stopwords - return NULL; - Query* q = QueryParser::GetBooleanQuery(clauses); - return q; - }else{ - Query* q = QueryParser::GetFieldQuery(field, queryText); - if ( q ) - q = QueryAddedCallback(field,q); - return q; - } -} - - -Query* MultiFieldQueryParser::GetFieldQuery(const TCHAR* field, TCHAR* queryText){ - return GetFieldQuery(field, queryText, 0); -} - - -CL_NS(search)::Query* MultiFieldQueryParser::GetFuzzyQuery(const TCHAR* field, TCHAR* termStr){ - if (field == NULL) { - CL_NS_STD(vector) clauses; - for (int i = 0; fields[i]!=NULL; ++i) { - Query* q = QueryParser::GetFuzzyQuery(fields[i], termStr); //todo: , minSimilarity - if ( q ){ - q = QueryAddedCallback(fields[i], q); - if ( q ){ - clauses.push_back(_CLNEW BooleanClause(q,true,false,false) ); - } - } - } - return QueryParser::GetBooleanQuery(clauses); - }else{ - Query* q = QueryParser::GetFuzzyQuery(field, termStr);//todo: , minSimilarity - if ( q ) - q = QueryAddedCallback(field,q); - return q; - } -} - -Query* MultiFieldQueryParser::GetPrefixQuery(const TCHAR* field, TCHAR* termStr){ - if (field == NULL) { - CL_NS_STD(vector) clauses; - for (int i = 0; fields[i]!=NULL; ++i) { - Query* q = QueryParser::GetPrefixQuery(fields[i], termStr); - if ( q ){ - q = QueryAddedCallback(fields[i],q); - if ( q ){ - clauses.push_back(_CLNEW BooleanClause(q,true,false,false)); - } - } - } - return QueryParser::GetBooleanQuery(clauses); - }else{ - Query* q = QueryParser::GetPrefixQuery(field, termStr); - if ( q ) - q = QueryAddedCallback(field,q); - return q; - } -} - -Query* MultiFieldQueryParser::GetWildcardQuery(const TCHAR* field, TCHAR* termStr){ - if (field == NULL) { - CL_NS_STD(vector) clauses; - for (int i = 0; fields[i]!=NULL; ++i) { - Query* q = QueryParser::GetWildcardQuery(fields[i], termStr); - if ( q ){ - q = QueryAddedCallback(fields[i],q); - if ( q ){ - clauses.push_back(_CLNEW BooleanClause(q,true,false,false)); - } - } - } - return QueryParser::GetBooleanQuery(clauses); - }else{ - Query* q = QueryParser::GetWildcardQuery(field, termStr); - if ( q ) - q = QueryAddedCallback(field,q); - return q; - } -} - - -Query* MultiFieldQueryParser::GetRangeQuery(const TCHAR* field, TCHAR* part1, TCHAR* part2, bool inclusive){ - if (field == NULL) { - CL_NS_STD(vector) clauses; - for (int i = 0; fields[i]!=NULL; ++i) { - Query* q = QueryParser::GetRangeQuery(fields[i], part1, part2, inclusive); - if ( q ){ - q = QueryAddedCallback(fields[i],q); - if ( q ){ - clauses.push_back(_CLNEW BooleanClause(q,true,false,false)); - } - } - } - return QueryParser::GetBooleanQuery(clauses); - }else{ - Query* q = QueryParser::GetRangeQuery(field, part1, part2, inclusive); - if ( q ) - q = QueryAddedCallback(field,q); - return q; - } -} - - -CL_NS_END diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/queryParser/MultiFieldQueryParser.h qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/queryParser/MultiFieldQueryParser.h --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/queryParser/MultiFieldQueryParser.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/queryParser/MultiFieldQueryParser.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,136 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#ifndef MultiFieldQueryParser_H -#define MultiFieldQueryParser_H - -#if defined(_LUCENE_PRAGMA_ONCE) -# pragma once -#endif - -#include "CLucene/analysis/AnalysisHeader.h" -#include "CLucene/search/SearchHeader.h" -#include "QueryParser.h" - - -CL_NS_DEF(queryParser) - -typedef CL_NS(util)::CLHashMap BoostMap; - - /** - * A QueryParser which constructs queries to search multiple fields. - * - */ - class MultiFieldQueryParser: public QueryParser - { - protected: - const TCHAR** fields; - BoostMap* boosts; - public: - LUCENE_STATIC_CONSTANT(uint8_t, NORMAL_FIELD=0); - LUCENE_STATIC_CONSTANT(uint8_t, REQUIRED_FIELD=1); - LUCENE_STATIC_CONSTANT(uint8_t, PROHIBITED_FIELD=2); - - /** - * Creates a MultiFieldQueryParser. - * - *

It will, when parse(String query) - * is called, construct a query like this (assuming the query consists of - * two terms and you specify the two fields title and body):

- * - * - * (title:term1 body:term1) (title:term2 body:term2) - * - * - *

When setDefaultOperator(AND_OPERATOR) is set, the result will be:

- * - * - * +(title:term1 body:term1) +(title:term2 body:term2) - * - * - *

In other words, all the query's terms must appear, but it doesn't matter in - * what fields they appear.

- */ - MultiFieldQueryParser(const TCHAR** fields, CL_NS(analysis)::Analyzer* a, BoostMap* boosts = NULL); - virtual ~MultiFieldQueryParser(); - - /** - *

- * Parses a query which searches on the fields specified. - *

- * If x fields are specified, this effectively constructs: - *

-         * 
-         * (field1:query) (field2:query) (field3:query)...(fieldx:query)
-         * 
-         * 
- * - * @param query Query string to parse - * @param fields Fields to search on - * @param analyzer Analyzer to use - * @throws ParserException if query parsing fails - * @throws TokenMgrError if query parsing fails - */ - static CL_NS(search)::Query* parse(const TCHAR* query, const TCHAR** fields, CL_NS(analysis)::Analyzer* analyzer); - - /** - *

- * Parses a query, searching on the fields specified. - * Use this if you need to specify certain fields as required, - * and others as prohibited. - *

-         * Usage:
-         * 
-         * String[] fields = {"filename", "contents", "description"};
-         * int32_t[] flags = {MultiFieldQueryParser.NORMAL FIELD,
-         *                MultiFieldQueryParser.REQUIRED FIELD,
-         *                MultiFieldQueryParser.PROHIBITED FIELD,};
-         * parse(query, fields, flags, analyzer);
-         * 
-         * 
- *

- * The code above would construct a query: - *

-         * 
-         * (filename:query) +(contents:query) -(description:query)
-         * 
-         * 
- * - * @param query Query string to parse - * @param fields Fields to search on - * @param flags Flags describing the fields - * @param analyzer Analyzer to use - * @throws ParserException if query parsing fails - * @throws TokenMgrError if query parsing fails - */ - static CL_NS(search)::Query* parse(const TCHAR* query, const TCHAR** fields, const uint8_t* flags, CL_NS(analysis)::Analyzer* analyzer); - - - - protected: - CL_NS(search)::Query* GetFieldQuery(const TCHAR* field, TCHAR* queryText); - CL_NS(search)::Query* GetFieldQuery(const TCHAR* field, TCHAR* queryText, int32_t slop); - CL_NS(search)::Query* GetFuzzyQuery(const TCHAR* field, TCHAR* termStr); - CL_NS(search)::Query* GetRangeQuery(const TCHAR* field, TCHAR* part1, TCHAR* part2, bool inclusive); - CL_NS(search)::Query* GetPrefixQuery(const TCHAR* field, TCHAR* termStr); - CL_NS(search)::Query* GetWildcardQuery(const TCHAR* field, TCHAR* termStr); - - /** - * A special virtual function for the MultiFieldQueryParser which can be used - * to clean up queries. Once the field name is known and the query has been - * created, its passed to this function. - * An example of this usage is to set boosts. - */ - virtual CL_NS(search)::Query* QueryAddedCallback(const TCHAR* field, CL_NS(search)::Query* query){ return query; } - }; -CL_NS_END -#endif diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/queryParser/QueryParserBase.cpp qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/queryParser/QueryParserBase.cpp --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/queryParser/QueryParserBase.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/queryParser/QueryParserBase.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,369 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -* -* Changes are Copyright (C) 2015 The Qt Company Ltd. -------------------------------------------------------------------------------*/ -#include "CLucene/StdHeader.h" -#include "QueryParserBase.h" - -#include "CLucene/search/TermQuery.h" -#include "CLucene/search/PhraseQuery.h" -#include "CLucene/search/RangeQuery.h" -#include "CLucene/search/FuzzyQuery.h" -#include "CLucene/search/WildcardQuery.h" -#include "CLucene/search/PrefixQuery.h" - - -CL_NS_USE(search) -CL_NS_USE(util) -CL_NS_USE(analysis) -CL_NS_USE(index) - -CL_NS_DEF(queryParser) - -QueryParserBase::QueryParserBase(Analyzer* analyzer){ -//Func - Constructor -//Pre - true -//Post - instance has been created with PhraseSlop = 0 - this->analyzer = analyzer; - this->defaultOperator = OR_OPERATOR; - this->phraseSlop = 0; - this->lowercaseExpandedTerms = true; -} - -QueryParserBase::~QueryParserBase(){ -//Func - Destructor -//Pre - true -//Post - The instance has been destroyed -} - - -void QueryParserBase::discardEscapeChar(TCHAR* source) const{ - int len = _tcslen(source); - int j = 0; - for (int i = 0; i < len; i++) { - if (source[i] == '\\' && source[i+1] != '\0' ) { - _tcscpy(source+i,source+i+1); - len--; - } - } -} - -void QueryParserBase::AddClause(CL_NS_STD(vector)& clauses, int32_t conj, int32_t mods, Query* q){ -//Func - Adds the next parsed clause. -//Pre - -//Post - - - bool required, prohibited; - - // If this term is introduced by AND, make the preceding term required, - // unless it's already prohibited. - const uint32_t nPreviousClauses = clauses.size(); - if (nPreviousClauses > 0 && conj == CONJ_AND) { - BooleanClause* c = clauses[nPreviousClauses-1]; - if (!c->prohibited) - c->required = true; - } - - if (nPreviousClauses > 0 && defaultOperator == AND_OPERATOR && conj == CONJ_OR) { - // If this term is introduced by OR, make the preceding term optional, - // unless it's prohibited (that means we leave -a OR b but +a OR b-->a OR b) - // notice if the input is a OR b, first term is parsed as required; without - // this modification a OR b would parse as +a OR b - BooleanClause* c = clauses[nPreviousClauses-1]; - if (!c->prohibited){ - c->required = false; - c->prohibited = false; - } - } - - // We might have been passed a NULL query; the term might have been - // filtered away by the analyzer. - if (q == NULL) - return; - - if (defaultOperator == OR_OPERATOR) { - // We set REQUIRED if we're introduced by AND or +; PROHIBITED if - // introduced by NOT or -; make sure not to set both. - prohibited = (mods == MOD_NOT); - required = (mods == MOD_REQ); - if (conj == CONJ_AND && !prohibited) { - required = true; - } - } else { - // We set PROHIBITED if we're introduced by NOT or -; We set REQUIRED - // if not PROHIBITED and not introduced by OR - prohibited = (mods == MOD_NOT); - required = (!prohibited && conj != CONJ_OR); - } - - if ( required && prohibited ) - throwParserException( _T("Clause cannot be both required and prohibited"), ' ',0,0); - clauses.push_back(_CLNEW BooleanClause(q,true, required, prohibited)); -} - -void QueryParserBase::throwParserException(const TCHAR* message, TCHAR ch, int32_t col, int32_t line ) -{ - TCHAR msg[1024]; - _sntprintf(msg,1024,message,ch,col,line); - _CLTHROWT (CL_ERR_Parse, msg ); -} - - -Query* QueryParserBase::GetFieldQuery(const TCHAR* field, TCHAR* queryText, int32_t slop){ - Query* ret = GetFieldQuery(field,queryText); - if ( ret && ret->getQueryName() == PhraseQuery::getClassName() ) - ((PhraseQuery*)ret)->setSlop(slop); - - return ret; -} - -Query* QueryParserBase::GetFieldQuery(const TCHAR* field, TCHAR* queryText){ -//Func - Returns a query for the specified field. -// Use the analyzer to get all the tokens, and then build a TermQuery, -// PhraseQuery, or nothing based on the term count -//Pre - field != NULL -// analyzer contains a valid reference to an Analyzer -// queryText != NULL and contains the query -//Post - A query instance has been returned for the specified field - - CND_PRECONDITION(field != NULL, "field is NULL"); - CND_PRECONDITION(queryText != NULL, "queryText is NULL"); - - //Instantiate a stringReader for queryText - StringReader reader(queryText); - TokenStream* source = analyzer->tokenStream(field, &reader); - CND_CONDITION(source != NULL,"source is NULL"); - - StringArrayConstWithDeletor v; - - Token t; - int positionCount = 0; - bool severalTokensAtSamePosition = false; - - //Get the tokens from the source - try{ - while (source->next(&t)){ - v.push_back(STRDUP_TtoT(t.termText())); - - if (t.getPositionIncrement() != 0) - positionCount += t.getPositionIncrement(); - else - severalTokensAtSamePosition = true; - } - }catch(CLuceneError& err){ - if ( err.number() != CL_ERR_IO ) - throw err; - } - _CLDELETE(source); - - //Check if there are any tokens retrieved - if (v.size() == 0){ - return NULL; - }else{ - if (v.size() == 1){ - Term* t = _CLNEW Term(field, v[0]); - Query* ret = _CLNEW TermQuery( t ); - _CLDECDELETE(t); - return ret; - }else{ - if (severalTokensAtSamePosition) { - if (positionCount == 1) { - // no phrase query: - BooleanQuery* q = _CLNEW BooleanQuery; //todo: disableCoord=true here, but not implemented in BooleanQuery - StringArrayConst::iterator itr = v.begin(); - while ( itr != v.end() ){ - Term* t = _CLNEW Term(field, *itr); - q->add(_CLNEW TermQuery(t),true, false,false);//should occur... - _CLDECDELETE(t); - ++itr; - } - return q; - }else { - _CLTHROWA(CL_ERR_UnsupportedOperation, "MultiPhraseQuery NOT Implemented"); - } - }else{ - PhraseQuery* q = _CLNEW PhraseQuery; - q->setSlop(phraseSlop); - - StringArrayConst::iterator itr = v.begin(); - while ( itr != v.end() ){ - const TCHAR* data = *itr; - Term* t = _CLNEW Term(field, data); - q->add(t); - _CLDECDELETE(t); - ++itr; - } - return q; - } - } - } -} - -void QueryParserBase::setLowercaseExpandedTerms(bool lowercaseExpandedTerms){ - this->lowercaseExpandedTerms = lowercaseExpandedTerms; -} -bool QueryParserBase::getLowercaseExpandedTerms() const { - return lowercaseExpandedTerms; -} -void QueryParserBase::setDefaultOperator(int oper){ - this->defaultOperator=oper; -} -int QueryParserBase::getDefaultOperator() const{ - return defaultOperator; -} - - -Query* QueryParserBase::ParseRangeQuery(const TCHAR* field, TCHAR* queryText, bool inclusive) -{ - //todo: this must be fixed, [-1--5] (-1 to -5) should yield a result, but won't parse properly - //because it uses an analyser, should split it up differently... - - // Use the analyzer to get all the tokens. There should be 1 or 2. - StringReader reader(queryText); - TokenStream* source = analyzer->tokenStream(field, &reader); - - TCHAR* terms[2]; - terms[0]=NULL;terms[1]=NULL; - Token t; - bool tret=true; - bool from=true; - while(tret) - { - try{ - tret = source->next(&t); - }catch (CLuceneError& err){ - if ( err.number() == CL_ERR_IO ) - tret=false; - else - throw err; - } - if (tret) - { - if ( !from && _tcscmp(t.termText(),_T("TO"))==0 ) - continue; - - - TCHAR* tmp = STRDUP_TtoT(t.termText()); - discardEscapeChar(tmp); - terms[from? 0 : 1] = tmp; - - if (from) - from = false; - else - break; - } - } - Query* ret = GetRangeQuery(field, terms[0], terms[1],inclusive); - _CLDELETE_CARRAY(terms[0]); - _CLDELETE_CARRAY(terms[1]); - _CLDELETE(source); - - return ret; -} - -Query* QueryParserBase::GetPrefixQuery(const TCHAR* field, TCHAR* termStr){ -//Pre - field != NULL and field contains the name of the field that the query will use -// termStr != NULL and is the token to use for building term for the query -// (WITH or WITHOUT a trailing '*' character!) -//Post - A PrefixQuery instance has been returned - - CND_PRECONDITION(field != NULL,"field is NULL"); - CND_PRECONDITION(termStr != NULL,"termStr is NULL"); - - if ( lowercaseExpandedTerms ) - _tcslwr(termStr); - - Term* t = _CLNEW Term(field, termStr); - CND_CONDITION(t != NULL,"Could not allocate memory for term t"); - - Query *q = _CLNEW PrefixQuery(t); - CND_CONDITION(q != NULL,"Could not allocate memory for PrefixQuery q"); - - _CLDECDELETE(t); - return q; -} - -Query* QueryParserBase::GetFuzzyQuery(const TCHAR* field, TCHAR* termStr){ -//Func - Factory method for generating a query (similar to getPrefixQuery}). Called when parser parses -// an input term token that has the fuzzy suffix (~) appended. -//Pre - field != NULL and field contains the name of the field that the query will use -// termStr != NULL and is the token to use for building term for the query -// (WITH or WITHOUT a trailing '*' character!) -//Post - A FuzzyQuery instance has been returned - - CND_PRECONDITION(field != NULL,"field is NULL"); - CND_PRECONDITION(termStr != NULL,"termStr is NULL"); - - if ( lowercaseExpandedTerms ) - _tcslwr(termStr); - - Term* t = _CLNEW Term(field, termStr); - CND_CONDITION(t != NULL,"Could not allocate memory for term t"); - - Query *q = _CLNEW FuzzyQuery(t); - CND_CONDITION(q != NULL,"Could not allocate memory for FuzzyQuery q"); - - _CLDECDELETE(t); - return q; -} - - -Query* QueryParserBase::GetWildcardQuery(const TCHAR* field, TCHAR* termStr){ - CND_PRECONDITION(field != NULL,"field is NULL"); - CND_PRECONDITION(termStr != NULL,"termStr is NULL"); - - if ( lowercaseExpandedTerms ) - _tcslwr(termStr); - - Term* t = _CLNEW Term(field, termStr); - CND_CONDITION(t != NULL,"Could not allocate memory for term t"); - Query* q = _CLNEW WildcardQuery(t); - _CLDECDELETE(t); - - return q; -} - -Query* QueryParserBase::GetBooleanQuery(CL_NS_STD(vector)& clauses){ - if ( clauses.size() == 0 ) - return NULL; - - BooleanQuery* query = _CLNEW BooleanQuery(); - //Condition check to see if query has been allocated properly - CND_CONDITION(query != NULL, "No memory could be allocated for query"); - - //iterate through all the clauses - for( uint32_t i=0;iadd(clauses[i]); - } - return query; -} - - -CL_NS(search)::Query* QueryParserBase::GetRangeQuery(const TCHAR* field, TCHAR* part1, TCHAR* part2, bool inclusive){ - //todo: does jlucene handle rangequeries differntly? if we are using - //a certain type of analyser, the terms may be filtered out, which - //is not necessarily what we want. - if (lowercaseExpandedTerms) { - _tcslwr(part1); - _tcslwr(part2); - } - //todo: should see if we can parse the strings as dates... currently we leave that up to the end-developer... - Term* t1 = _CLNEW Term(field,part1); - Term* t2 = _CLNEW Term(field,part2); - Query* ret = _CLNEW RangeQuery(t1, t2, inclusive); - _CLDECDELETE(t1); - _CLDECDELETE(t2); - - return ret; -} - - - -CL_NS_END diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/queryParser/QueryParserBase.h qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/queryParser/QueryParserBase.h --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/queryParser/QueryParserBase.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/queryParser/QueryParserBase.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,204 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#ifndef _lucene_queryParser_QueryParserBase_ -#define _lucene_queryParser_QueryParserBase_ - -#if defined(_LUCENE_PRAGMA_ONCE) -# pragma once -#endif - -#include "CLucene/util/VoidList.h" -#include "CLucene/search/BooleanClause.h" -#include "CLucene/analysis/Analyzers.h" -#include "QueryToken.h" - -CL_NS_DEF(queryParser) - - /** - * Contains default implementations used by QueryParser. - * You can override any of these to provide a customised QueryParser. - */ - class QueryParserBase:LUCENE_BASE - { - protected: - /* The actual operator the parser uses to combine query terms */ - int defaultOperator; - int32_t phraseSlop; - - bool lowercaseExpandedTerms; - - LUCENE_STATIC_CONSTANT(int, CONJ_NONE=0); - LUCENE_STATIC_CONSTANT(int, CONJ_AND=1); - LUCENE_STATIC_CONSTANT(int, CONJ_OR=2); - - LUCENE_STATIC_CONSTANT(int, MOD_NONE=0); - LUCENE_STATIC_CONSTANT(int, MOD_NOT=10); - LUCENE_STATIC_CONSTANT(int, MOD_REQ=11); - - CL_NS(analysis)::Analyzer* analyzer; - - public: - QueryParserBase(CL_NS(analysis)::Analyzer* analyzer); - ~QueryParserBase(); - - /** - * Whether terms of wildcard, prefix, fuzzy and range queries are to be automatically - * lower-cased or not. Default is true. - */ - void setLowercaseExpandedTerms(bool lowercaseExpandedTerms); - - /** - * @see #setLowercaseExpandedTerms(boolean) - */ - bool getLowercaseExpandedTerms() const; - - //values used for setOperator - LUCENE_STATIC_CONSTANT(int, OR_OPERATOR=0); - LUCENE_STATIC_CONSTANT(int, AND_OPERATOR=1); - - /** - * Sets the boolean operator of the QueryParser. - * In default mode (OR_OPERATOR) terms without any modifiers - * are considered optional: for example capital of Hungary is equal to - * capital OR of OR Hungary.
- * In AND_OPERATOR mode terms are considered to be in conjuction: the - * above mentioned query is parsed as capital AND of AND Hungary - */ - void setDefaultOperator(int oper); - /** - * Gets implicit operator setting, which will be either AND_OPERATOR - * or OR_OPERATOR. - */ - int getDefaultOperator() const; - - //public so that the lexer can call this - virtual void throwParserException(const TCHAR* message, TCHAR ch, int32_t col, int32_t line ); - - /** - * Sets the default slop for phrases. If zero, then exact phrase matches - * are required. Default value is zero. - */ - void setPhraseSlop(int phraseSlop) { this->phraseSlop = phraseSlop; } - - /** - * Gets the default slop for phrases. - */ - int getPhraseSlop() { return phraseSlop; } - - protected: - - /** - * Removes the escaped characters - */ - void discardEscapeChar(TCHAR* token) const; - - //Analyzes the expanded term termStr with the StandardFilter and the LowerCaseFilter. - TCHAR* AnalyzeExpandedTerm(const TCHAR* field, TCHAR* termStr); - - // Adds the next parsed clause. - virtual void AddClause(std::vector& clauses, int32_t conj, int32_t mods, CL_NS(search)::Query* q); - - /** - * Returns a termquery, phrasequery for the specified field. - * Note: this is only a partial implementation, since MultiPhraseQuery is not implemented yet - * return NULL to disallow - */ - virtual CL_NS(search)::Query* GetFieldQuery(const TCHAR* field, TCHAR* queryText); - - /** - * Delegates to GetFieldQuery(string, string), and adds slop onto phrasequery. - * Can be used to remove slop functionality - */ - virtual CL_NS(search)::Query* GetFieldQuery(const TCHAR* field, TCHAR* queryText, int32_t slop); - - /** - * Factory method for generating a query (similar to - * {@link #GetWildcardQuery}). Called when parser parses an input term - * token that uses prefix notation; that is, contains a single '*' wildcard - * character as its last character. Since this is a special case - * of generic wildcard term, and such a query can be optimized easily, - * this usually results in a different query object. - *

- * Depending on settings, a prefix term may be lower-cased - * automatically. It will not go through the default Analyzer, - * however, since normal Analyzers are unlikely to work properly - * with wildcard templates. - *

- * Can be overridden by extending classes, to provide custom handling for - * wild card queries, which may be necessary due to missing analyzer calls. - * - * @param field Name of the field query will use. - * @param termStr Term token to use for building term for the query - * (without trailing '*' character!) - * - * @return Resulting {@link Query} built for the term - * return NULL to disallow - */ - virtual CL_NS(search)::Query* GetPrefixQuery(const TCHAR* field, TCHAR* termStr); - - /** - * Factory method for generating a query. Called when parser - * parses an input term token that contains one or more wildcard - * characters (? and *), but is not a prefix term token (one - * that has just a single * character at the end) - *

- * Depending on settings, prefix term may be lower-cased - * automatically. It will not go through the default Analyzer, - * however, since normal Analyzers are unlikely to work properly - * with wildcard templates. - *

- * Can be overridden by extending classes, to provide custom handling for - * wildcard queries, which may be necessary due to missing analyzer calls. - * - * @param field Name of the field query will use. - * @param termStr Term token that contains one or more wild card - * characters (? or *), but is not simple prefix term - * - * @return Resulting {@link Query} built for the term - * return NULL to disallow - */ - virtual CL_NS(search)::Query* GetWildcardQuery(const TCHAR* field, TCHAR* termStr); - - /** - * Factory method for generating a query (similar to - * {@link #GetWildcardQuery}). Called when parser parses - * an input term token that has the fuzzy suffix (~) appended. - * - * @param field Name of the field query will use. - * @param termStr Term token to use for building term for the query - * - * @return Resulting {@link Query} built for the term - * return NULL to disallow - */ - virtual CL_NS(search)::Query* GetFuzzyQuery(const TCHAR* field, TCHAR* termStr); - - /** - * Factory method for generating query, given a set of clauses. - * By default creates a boolean query composed of clauses passed in. - * - * Can be overridden by extending classes, to modify query being - * returned. - * - * @param clauses Vector that contains {@link BooleanClause} instances - * to join. - * - * @return Resulting {@link Query} object. - * return NULL to disallow - * - * Memory: clauses must all be cleaned up by this function. - */ - virtual CL_NS(search)::Query* GetBooleanQuery(std::vector& clauses); - - /** - * return NULL to disallow - */ - virtual CL_NS(search)::Query* GetRangeQuery(const TCHAR* field, TCHAR* part1, TCHAR* part2, bool inclusive); - virtual CL_NS(search)::Query* ParseRangeQuery(const TCHAR* field, TCHAR* str, bool inclusive); - - }; -CL_NS_END -#endif diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/queryParser/QueryParser.cpp qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/queryParser/QueryParser.cpp --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/queryParser/QueryParser.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/queryParser/QueryParser.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,509 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -* -* Changes are Copyright (C) 2015 The Qt Company Ltd. -------------------------------------------------------------------------------*/ -#include "CLucene/StdHeader.h" -#include "QueryParser.h" - -#include "CLucene/analysis/AnalysisHeader.h" -#include "CLucene/util/Reader.h" -#include "CLucene/search/SearchHeader.h" -#include "CLucene/index/Term.h" - -#include "TokenList.h" -#include "QueryToken.h" -#include "QueryParserBase.h" -#include "Lexer.h" - -CL_NS_USE(util) -CL_NS_USE(index) -CL_NS_USE(analysis) -CL_NS_USE(search) - -CL_NS_DEF(queryParser) - - QueryParser::QueryParser(const TCHAR* _field, Analyzer* _analyzer) : QueryParserBase(_analyzer){ - //Func - Constructor. - // Instantiates a QueryParser for the named field _field - //Pre - _field != NULL - //Post - An instance has been created - - if ( _field ) - field = STRDUP_TtoT(_field); - else - field = NULL; - tokens = NULL; - lowercaseExpandedTerms = true; - } - - QueryParser::~QueryParser() { - //Func - Destructor - //Pre - true - //Post - The instance has been destroyed - - _CLDELETE_CARRAY(field); - } - - //static - Query* QueryParser::parse(const TCHAR* query, const TCHAR* field, Analyzer* analyzer){ - //Func - Returns a new instance of the Query class with a specified query, field and - // analyzer values. - //Pre - query != NULL and holds the query to parse - // field != NULL and holds the default field for query terms - // analyzer holds a valid reference to an Analyzer and is used to - // find terms in the query text - //Post - query has been parsed and an instance of Query has been returned - - CND_PRECONDITION(query != NULL, "query is NULL"); - CND_PRECONDITION(field != NULL, "field is NULL"); - - QueryParser parser(field, analyzer); - return parser.parse(query); - } - - Query* QueryParser::parse(const TCHAR* query){ - //Func - Returns a parsed Query instance - //Pre - query != NULL and contains the query value to be parsed - //Post - Returns a parsed Query Instance - - CND_PRECONDITION(query != NULL, "query is NULL"); - - //Instantie a Stringer that can read the query string - Reader* r = _CLNEW StringReader(query); - - //Check to see if r has been created properly - CND_CONDITION(r != NULL, "Could not allocate memory for StringReader r"); - - //Pointer for the return value - Query* ret = NULL; - - try{ - //Parse the query managed by the StringReader R and return a parsed Query instance - //into ret - ret = parse(r); - }_CLFINALLY ( - _CLDELETE(r); - ); - - return ret; - } - - Query* QueryParser::parse(Reader* reader){ - //Func - Returns a parsed Query instance - //Pre - reader contains a valid reference to a Reader and manages the query string - //Post - A parsed Query instance has been returned or - - //instantiate the TokenList tokens - TokenList _tokens; - this->tokens = &_tokens; - - //Instantiate a lexer - Lexer lexer(this, reader); - - //tokens = lexer.Lex(); - //Lex the tokens - lexer.Lex(tokens); - - //Peek to the first token and check if is an EOF - if (tokens->peek()->Type == QueryToken::EOF_){ - // The query string failed to yield any tokens. We discard the - // TokenList tokens and raise an exceptioin. - QueryToken* token = this->tokens->extract(); - _CLDELETE(token); - _CLTHROWA(CL_ERR_Parse, "No query given."); - } - - //Return the parsed Query instance - Query* ret = MatchQuery(field); - this->tokens = NULL; - return ret; - } - - int32_t QueryParser::MatchConjunction(){ - //Func - matches for CONJUNCTION - // CONJUNCTION ::= | - //Pre - tokens != NULL - //Post - if the first token is an AND or an OR then - // the token is extracted and deleted and CONJ_AND or CONJ_OR is returned - // otherwise CONJ_NONE is returned - - CND_PRECONDITION(tokens != NULL, "tokens is NULL"); - - switch(tokens->peek()->Type){ - case QueryToken::AND_ : - //Delete the first token of tokenlist - ExtractAndDeleteToken(); - return CONJ_AND; - case QueryToken::OR : - //Delete the first token of tokenlist - ExtractAndDeleteToken(); - return CONJ_OR; - default : - return CONJ_NONE; - } - } - - int32_t QueryParser::MatchModifier(){ - //Func - matches for MODIFIER - // MODIFIER ::= | | - //Pre - tokens != NULL - //Post - if the first token is a PLUS the token is extracted and deleted and MOD_REQ is returned - // if the first token is a MINUS or NOT the token is extracted and deleted and MOD_NOT is returned - // otherwise MOD_NONE is returned - CND_PRECONDITION(tokens != NULL, "tokens is NULL"); - - switch(tokens->peek()->Type){ - case QueryToken::PLUS : - //Delete the first token of tokenlist - ExtractAndDeleteToken(); - return MOD_REQ; - case QueryToken::MINUS : - case QueryToken::NOT : - //Delete the first token of tokenlist - ExtractAndDeleteToken(); - return MOD_NOT; - default : - return MOD_NONE; - } - } - - Query* QueryParser::MatchQuery(const TCHAR* field){ - //Func - matches for QUERY - // QUERY ::= [MODIFIER] QueryParser::CLAUSE ( [MODIFIER] CLAUSE)* - //Pre - field != NULL - //Post - - - CND_PRECONDITION(tokens != NULL, "tokens is NULL"); - - CL_NS_STD(vector) clauses; - - Query* q = NULL; - - int32_t mods = MOD_NONE; - int32_t conj = CONJ_NONE; - - //match for MODIFIER - mods = MatchModifier(); - - //match for CLAUSE - q = MatchClause(field); - AddClause(clauses, CONJ_NONE, mods, q); - - // match for CLAUSE* - while(true){ - QueryToken* p = tokens->peek(); - if(p->Type == QueryToken::EOF_){ - QueryToken* qt = MatchQueryToken(QueryToken::EOF_); - _CLDELETE(qt); - break; - } - - if(p->Type == QueryToken::RPAREN){ - //MatchQueryToken(QueryToken::RPAREN); - break; - } - - //match for a conjuction (AND OR NOT) - conj = MatchConjunction(); - //match for a modifier - mods = MatchModifier(); - - q = MatchClause(field); - if ( q != NULL ) - AddClause(clauses, conj, mods, q); - } - - // finalize query - if(clauses.size() == 1){ //bvk: removed this && firstQuery != NULL - BooleanClause* c = clauses[0]; - Query* q = c->query; - - //Condition check to be sure clauses[0] is valid - CND_CONDITION(c != NULL, "c is NULL"); - - //Tell the boolean clause not to delete its query - c->deleteQuery=false; - //Clear the clauses list - clauses.clear(); - _CLDELETE(c); - - return q; - }else{ - return GetBooleanQuery(clauses); - } - } - - Query* QueryParser::MatchClause(const TCHAR* field){ - //Func - matches for CLAUSE - // CLAUSE ::= [TERM ] ( TERM | ( QUERY )) - //Pre - field != NULL - //Post - - - Query* q = NULL; - const TCHAR* sfield = field; - bool delField = false; - - QueryToken *DelToken = NULL; - - //match for [TERM ] - QueryToken* term = tokens->extract(); - if(term->Type == QueryToken::TERM && tokens->peek()->Type == QueryToken::COLON){ - DelToken = MatchQueryToken(QueryToken::COLON); - - CND_CONDITION(DelToken != NULL,"DelToken is NULL"); - _CLDELETE(DelToken); - - TCHAR* tmp = STRDUP_TtoT(term->Value); - discardEscapeChar(tmp); - delField = true; - sfield = tmp; - _CLDELETE(term); - }else{ - tokens->push(term); - term = NULL; - } - - // match for - // TERM | ( QUERY ) - if(tokens->peek()->Type == QueryToken::LPAREN){ - DelToken = MatchQueryToken(QueryToken::LPAREN); - - CND_CONDITION(DelToken != NULL,"DelToken is NULL"); - _CLDELETE(DelToken); - - q = MatchQuery(sfield); - //DSR:2004.11.01: - //If exception is thrown while trying to match trailing parenthesis, - //need to prevent q from leaking. - - try{ - DelToken = MatchQueryToken(QueryToken::RPAREN); - - CND_CONDITION(DelToken != NULL,"DelToken is NULL"); - _CLDELETE(DelToken); - - }catch(...) { - _CLDELETE(q); - throw; - } - }else{ - q = MatchTerm(sfield); - } - - if ( delField ) - _CLDELETE_CARRAY(sfield); - return q; - } - - - Query* QueryParser::MatchTerm(const TCHAR* field){ - //Func - matches for TERM - // TERM ::= TERM | PREFIXTERM | WILDTERM | NUMBER - // [ ] [ []] - // | ( | ) [ ] - // | [SLOP] [ ] - //Pre - field != NULL - //Post - - - QueryToken* term = NULL; - QueryToken* slop = NULL; - QueryToken* boost = NULL; - - bool prefix = false; - bool wildcard = false; - bool fuzzy = false; - bool rangein = false; - Query* q = NULL; - - term = tokens->extract(); - QueryToken* DelToken = NULL; //Token that is about to be deleted - - switch(term->Type){ - case QueryToken::TERM: - case QueryToken::NUMBER: - case QueryToken::PREFIXTERM: - case QueryToken::WILDTERM: - { //start case - //Check if type of QueryToken term is a prefix term - if(term->Type == QueryToken::PREFIXTERM){ - prefix = true; - } - //Check if type of QueryToken term is a wildcard term - if(term->Type == QueryToken::WILDTERM){ - wildcard = true; - } - //Peek to see if the type of the next token is fuzzy term - if(tokens->peek()->Type == QueryToken::FUZZY){ - DelToken = MatchQueryToken(QueryToken::FUZZY); - - CND_CONDITION(DelToken !=NULL, "DelToken is NULL"); - _CLDELETE(DelToken); - - fuzzy = true; - } - if(tokens->peek()->Type == QueryToken::CARAT){ - DelToken = MatchQueryToken(QueryToken::CARAT); - - CND_CONDITION(DelToken !=NULL, "DelToken is NULL"); - _CLDELETE(DelToken); - - boost = MatchQueryToken(QueryToken::NUMBER); - - if(tokens->peek()->Type == QueryToken::FUZZY){ - DelToken = MatchQueryToken(QueryToken::FUZZY); - - CND_CONDITION(DelToken !=NULL, "DelToken is NULL"); - _CLDELETE(DelToken); - - fuzzy = true; - } - } //end if type==CARAT - - discardEscapeChar(term->Value); //clean up - if(wildcard){ - q = GetWildcardQuery(field,term->Value); - break; - }else if(prefix){ - //Create a PrefixQuery - term->Value[_tcslen(term->Value)-1] = 0; //discard the * - q = GetPrefixQuery(field,term->Value); - break; - }else if(fuzzy){ - //Create a FuzzyQuery - - //Check if the last char is a ~ - if(term->Value[_tcslen(term->Value)-1] == '~'){ - //remove the ~ - term->Value[_tcslen(term->Value)-1] = '\0'; - } - - q = GetFuzzyQuery(field,term->Value); - break; - }else{ - q = GetFieldQuery(field, term->Value); - break; - } - } - - - case QueryToken::RANGEIN: - case QueryToken::RANGEEX:{ - if(term->Type == QueryToken::RANGEIN){ - rangein = true; - } - - if(tokens->peek()->Type == QueryToken::CARAT){ - DelToken = MatchQueryToken(QueryToken::CARAT); - - CND_CONDITION(DelToken !=NULL, "DelToken is NULL"); - _CLDELETE(DelToken); - - boost = MatchQueryToken(QueryToken::NUMBER); - } - - TCHAR* noBrackets = term->Value + 1; - noBrackets[_tcslen(noBrackets)-1] = 0; - q = ParseRangeQuery(field, noBrackets, rangein); - break; - } - - - case QueryToken::QUOTED:{ - if(tokens->peek()->Type == QueryToken::SLOP){ - slop = MatchQueryToken(QueryToken::SLOP); - } - - if(tokens->peek()->Type == QueryToken::CARAT){ - DelToken = MatchQueryToken(QueryToken::CARAT); - - CND_CONDITION(DelToken !=NULL, "DelToken is NULL"); - _CLDELETE(DelToken); - - boost = MatchQueryToken(QueryToken::NUMBER); - } - - //remove the quotes - TCHAR* quotedValue = term->Value+1; - quotedValue[_tcslen(quotedValue)-1] = '\0'; - - int32_t islop = phraseSlop; - if(slop != NULL ){ - try { - TCHAR* end; //todo: should parse using float... - islop = (int32_t)_tcstoi64(slop->Value+1, &end, 10); - }catch(...){ - //ignored - } - } - - q = GetFieldQuery(field, quotedValue, islop); - _CLDELETE(slop); - } - } // end of switch - - _CLDELETE(term); - - - if( q!=NULL && boost != NULL ){ - qreal f = 1.0F; - try { - TCHAR* tmp; - f = _tcstod(boost->Value, &tmp); - }catch(...){ - //ignored - } - _CLDELETE(boost); - - q->setBoost( f); - } - - return q; - } - - QueryToken* QueryParser::MatchQueryToken(QueryToken::Types expectedType){ - //Func - matches for QueryToken of the specified type and returns it - // otherwise Exception throws - //Pre - tokens != NULL - //Post - - - CND_PRECONDITION(tokens != NULL,"tokens is NULL"); - - if(tokens->count() == 0){ - throwParserException(_T("Error: Unexpected end of program"),' ',0,0); - } - - //Extract a token form the TokenList tokens - QueryToken* t = tokens->extract(); - //Check if the type of the token t matches the expectedType - if (expectedType != t->Type){ - TCHAR buf[200]; - _sntprintf(buf,200,_T("Error: Unexpected QueryToken: %d, expected: %d"),t->Type,expectedType); - _CLDELETE(t); - throwParserException(buf,' ',0,0); - } - - //Return the matched token - return t; - } - - void QueryParser::ExtractAndDeleteToken(void){ - //Func - Extracts the first token from the Tokenlist tokenlist - // and destroys it - //Pre - true - //Post - The first token has been extracted and destroyed - - CND_PRECONDITION(tokens != NULL, "tokens is NULL"); - - //Extract the token from the TokenList tokens - QueryToken* t = tokens->extract(); - //Condition Check Token may not be NULL - CND_CONDITION(t != NULL, "Token is NULL"); - //Delete Token - _CLDELETE(t); - } - -CL_NS_END diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/queryParser/QueryParser.h qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/queryParser/QueryParser.h --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/queryParser/QueryParser.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/queryParser/QueryParser.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,165 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#ifndef _lucene_queryParser_QueryParser_ -#define _lucene_queryParser_QueryParser_ - -#if defined(_LUCENE_PRAGMA_ONCE) -# pragma once -#endif - -#include "CLucene/analysis/AnalysisHeader.h" -#include "CLucene/util/Reader.h" -#include "CLucene/search/SearchHeader.h" -#include "CLucene/index/Term.h" - -#include "TokenList.h" -#include "QueryToken.h" -#include "QueryParserBase.h" -#include "Lexer.h" - -CL_NS_DEF(queryParser) - -/** -* @brief CLucene's default query parser. -* -*

It's a query parser. -* The only method that clients should need to call is Parse(). -* The syntax for query const TCHAR*s is as follows: -* A Query is a series of clauses. A clause may be prefixed by:

-*
    -*
  • a plus (+) or a minus (-) sign, indicating that the -* clause is required or prohibited respectively; or
  • -*
  • a term followed by a colon, indicating the field to be searched. -* This enables one to construct queries which search multiple fields.
  • -*
-*

-* A clause may be either:

-*
    -*
  • a term, indicating all the documents that contain this term; or
  • -*
  • a nested query, enclosed in parentheses. Note that this may be -* used with a +/- prefix to require any of a set of terms.
  • -*
-*

-* Thus, in BNF, the query grammar is:

-* -* Query ::= ( Clause )* -* Clause ::= ["+", "-"] [<TERM> ":"] ( <TERM> | "(" Query ")" ) -* -*

-* Examples of appropriately formatted queries can be found in the test cases. -*

-*/ -class QueryParser : public QueryParserBase -{ -private: - const TCHAR* field; - TokenList* tokens; -public: - /** - * Initializes a new instance of the QueryParser class with a specified field and - * analyzer values. - */ - QueryParser(const TCHAR* field, CL_NS(analysis)::Analyzer* analyzer); - ~QueryParser(); - - /** - * Returns a parsed Query instance. - * Note: this call is not threadsafe, either use a seperate QueryParser for each thread, or use a thread lock - * The query value to be parsed. - * A parsed Query instance. - */ - virtual CL_NS(search)::Query* parse(const TCHAR* query); - - /** - * Returns a parsed Query instance. - * Note: this call is not threadsafe, either use a seperate QueryParser for each thread, or use a thread lock - * The TextReader value to be parsed. - * A parsed Query instance. - */ - virtual CL_NS(search)::Query* parse(CL_NS(util)::Reader* reader); - - /** - * Returns a new instance of the Query class with a specified query, field and - * analyzer values. - */ - static CL_NS(search)::Query* parse(const TCHAR* query, const TCHAR* field, CL_NS(analysis)::Analyzer* analyzer); - - CL_NS(analysis)::Analyzer* getAnalyzer() { return analyzer; } - - /** - * @return Returns the field. - */ - const TCHAR* getField() { return field; } - - //deprecated functions - _CL_DEPRECATED( setLowercaseExpandedTerms ) void setLowercaseWildcardTerms(bool lowercaseWildcardTerms){ setLowercaseExpandedTerms(lowercaseWildcardTerms); } - _CL_DEPRECATED( getLowercaseExpandedTerms ) bool getLowercaseWildcardTerms() const { return getLowercaseExpandedTerms(); } -protected: - //these functions may be defined under certain compilation conditions. - //note that this functionality is deprecated, you should create your own queryparser - //if you want to remove this functionality...it will be removed... be warned! -#ifdef NO_PREFIX_QUERY - virtual CL_NS(search)::Query* GetPrefixQuery(const TCHAR* field,const TCHAR* termStr){ return NULL; } -#endif -#ifdef NO_FUZZY_QUERY - virtual CL_NS(search)::Query* GetFuzzyQuery(const TCHAR* field,const TCHAR* termStr){ return NULL; } -#endif -#ifdef NO_RANGE_QUERY - virtual CL_NS(search)::Query* GetRangeQuery(const TCHAR* field, const TCHAR* part1, const TCHAR* part2, bool inclusive) { return NULL; } -#endif -#ifdef NO_WILDCARD_QUERY - virtual CL_NS(search)::Query* GetWildcardQuery(const TCHAR* field, TCHAR* termStr) { return NULL; } -#endif -private: - /** - * matches for CONJUNCTION - * CONJUNCTION ::= | - */ - int32_t MatchConjunction(); - - /** - * matches for MODIFIER - * MODIFIER ::= | | - */ - int32_t MatchModifier(); - - /** - * matches for QUERY - * QUERY ::= [MODIFIER] CLAUSE ( [MODIFIER] CLAUSE)* - */ - CL_NS(search)::Query* MatchQuery(const TCHAR* field); - - /** - * matches for CLAUSE - * CLAUSE ::= [TERM ] ( TERM | ( QUERY )) - */ - CL_NS(search)::Query* MatchClause(const TCHAR* field); - - /** - * matches for TERM - * TERM ::= TERM | PREFIXTERM | WILDTERM | NUMBER - * [ ] [ []] - * - * | ( | ) [ ] - * | [SLOP] [ ] - */ - CL_NS(search)::Query* MatchTerm(const TCHAR* field); - - /** - * matches for QueryToken of the specified type and returns it - * otherwise Exception throws - */ - QueryToken* MatchQueryToken(QueryToken::Types expectedType); - - /** - * Extracts the first token from the Tokenlist tokenlist - * and destroys it - */ - void ExtractAndDeleteToken(void); -}; -CL_NS_END -#endif diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/queryParser/QueryToken.cpp qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/queryParser/QueryToken.cpp --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/queryParser/QueryToken.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/queryParser/QueryToken.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,73 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#include "CLucene/StdHeader.h" -#include "QueryToken.h" - -CL_NS_DEF(queryParser) - - -QueryToken::QueryToken(): - Value(NULL) -{ - set(UNKNOWN_); -} -QueryToken::QueryToken(TCHAR* value, const int32_t start, const int32_t end, const QueryToken::Types type): - Value(NULL) -{ - set(value,start,end,type); -} - -QueryToken::~QueryToken(){ -//Func - Destructor -//Pre - true -//Post - Instance has been destroyed - - #ifndef LUCENE_TOKEN_WORD_LENGTH - _CLDELETE_CARRAY( Value ); - #endif -} - -// Initializes a new instance of the Token class LUCENE_EXPORT. -// -QueryToken::QueryToken(TCHAR* value, const QueryToken::Types type): - Value(NULL) -{ - set(value,type); -} - -// Initializes a new instance of the Token class LUCENE_EXPORT. -// -QueryToken::QueryToken(QueryToken::Types type): - Value(NULL) -{ - set(type); -} - - -void QueryToken::set(TCHAR* value, const Types type){ - set(value,0,-1,type); -} -void QueryToken::set(TCHAR* value, const int32_t start, const int32_t end, const Types type){ - #ifndef LUCENE_TOKEN_WORD_LENGTH - _CLDELETE_CARRAY(Value); - Value = STRDUP_TtoT(value); - #else - _tcsncpy(Value,value,LUCENE_TOKEN_WORD_LENGTH); - Value[LUCENE_TOKEN_WORD_LENGTH]; - #endif - this->Start = start; - this->End = end; - this->Type = type; - - if ( this->End < 0 ) - this->End = _tcslen(Value); -} -void QueryToken::set(Types type){ - set(LUCENE_BLANK_STRING,0,0,type); -} - -CL_NS_END diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/queryParser/QueryToken.h qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/queryParser/QueryToken.h --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/queryParser/QueryToken.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/queryParser/QueryToken.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,76 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#ifndef _lucene_queryParser_QueryToken_ -#define _lucene_queryParser_QueryToken_ - -#if defined(_LUCENE_PRAGMA_ONCE) -# pragma once -#endif - -#include "QueryParserBase.h" - -CL_NS_DEF(queryParser) - - // Token class that used by QueryParser. - class QueryToken:LUCENE_BASE - { - public: - enum Types - { - AND_, - OR, - NOT, - PLUS, - MINUS, - LPAREN, - RPAREN, - COLON, - CARAT, - QUOTED, - TERM, - SLOP, - FUZZY, - PREFIXTERM, - WILDTERM, - RANGEIN, - RANGEEX, - NUMBER, - EOF_, - UNKNOWN_ - }; - - - #ifdef LUCENE_TOKEN_WORD_LENGTH - TCHAR Value[LUCENE_TOKEN_WORD_LENGTH+1]; - #else - TCHAR* Value; - #endif - - int32_t Start; - int32_t End; - QueryToken::Types Type; - - // Initializes a new instance of the Token class. - QueryToken(TCHAR* value, const int32_t start, const int32_t end, const Types type); - - // Initializes a new instance of the Token class. - QueryToken(TCHAR* value, const Types type); - - // Initializes a new instance of the Token class. - QueryToken(Types type); - - // Initializes an empty instance of the Token class. - QueryToken(); - - ~QueryToken(); - - void set(TCHAR* value, const int32_t start, const int32_t end, const Types type); - void set(TCHAR* value, const Types type); - void set(Types type); - }; -CL_NS_END -#endif diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/queryParser/TokenList.cpp qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/queryParser/TokenList.cpp --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/queryParser/TokenList.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/queryParser/TokenList.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,79 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#include "CLucene/StdHeader.h" -#include "TokenList.h" - -#include "CLucene/util/VoidMap.h" -#include "CLucene/util/VoidList.h" -#include "QueryToken.h" - -CL_NS_DEF(queryParser) - - TokenList::TokenList(){ - //Func - Constructor - //Pre - true - //Post - Instance has been created - } - - TokenList::~TokenList(){ - //Func - Destructor - //Pre - true - //Post - The tokenlist has been destroyed - - tokens.clear(); - } - - void TokenList::add(QueryToken* token){ - //Func - Adds a QueryToken token to the TokenList - //Pre - token != NULL - //Post - token has been added to the token list - - CND_PRECONDITION(token != NULL, "token != NULL"); - - tokens.insert(tokens.begin(),token); - } - - void TokenList::push(QueryToken* token){ - //Func - - //Pre - token != NULL - //Post - - - CND_PRECONDITION(token != NULL, "token is NULL"); - - tokens.push_back(token); - } - - QueryToken* TokenList::peek() { - /* DSR:2004.11.01: Reverted my previous (circa April 2004) fix (which - ** raised an exception if Peek was called when there were no tokens) in - ** favor of returning the EOF token. This solution is much better - ** integrated with the rest of the code in the queryParser subsystem. */ - size_t nTokens = tokens.size(); - if (nTokens == 0) { - push(_CLNEW QueryToken(QueryToken::EOF_)); - nTokens++; - } - return tokens[nTokens-1]; - } - - QueryToken* TokenList::extract(){ - //Func - Extract token from the TokenList - //Pre - true - //Post - Retracted token has been returned - - QueryToken* token = peek(); - //Retract the current peeked token - tokens.delete_back(); - - return token; - } - - int32_t TokenList::count() const - { - return tokens.size(); - } -CL_NS_END diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/queryParser/TokenList.h qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/queryParser/TokenList.h --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/queryParser/TokenList.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/queryParser/TokenList.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,38 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#ifndef _lucene_queryParser_TokenList_ -#define _lucene_queryParser_TokenList_ - -#if defined(_LUCENE_PRAGMA_ONCE) -# pragma once -#endif - -#include "CLucene/util/VoidList.h" -#include "QueryToken.h" -CL_NS_DEF(queryParser) - - // Represents a list of the tokens. - class TokenList:LUCENE_BASE - { - private: - CL_NS(util)::CLVector tokens; //todo:,CL_NS(util)::Deletor::Object - public: - TokenList(); - ~TokenList(); - - void add(QueryToken* token); - - void push(QueryToken* token); - - QueryToken* peek(); - - QueryToken* extract(); - - int32_t count() const; - }; -CL_NS_END -#endif diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/search/BooleanClause.h qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/search/BooleanClause.h --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/search/BooleanClause.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/search/BooleanClause.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,90 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#ifndef _lucene_search_BooleanClause_ -#define _lucene_search_BooleanClause_ - -#if defined(_LUCENE_PRAGMA_ONCE) -# pragma once -#endif -#include "SearchHeader.h" - -CL_NS_DEF(search) - // A clause in a BooleanQuery. - class BooleanClause:LUCENE_BASE { - public: - class Compare:public CL_NS_STD(binary_function) - { - public: - bool operator()( const BooleanClause* val1, const BooleanClause* val2 ) const{ - return val1->equals(val2); - } - }; - - // The query whose matching documents are combined by the boolean query. - Query* query; - - int32_t getClauseCount(); - - // If true, documents documents which do not - // match this sub-query will not match the boolean query. - bool required; - - // If true, documents documents which do - // match this sub-query will not match the boolean query. - bool prohibited; - - bool deleteQuery; - - // Constructs a BooleanClause with query q, required - // r and prohibited p. - BooleanClause(Query* q, const bool DeleteQuery,const bool req, const bool p): - query(q), - required(req), - prohibited(p), - deleteQuery(DeleteQuery) - { - } - - BooleanClause(const BooleanClause& clone): -#if defined(LUCENE_ENABLE_MEMLEAKTRACKING) -#elif defined(LUCENE_ENABLE_REFCOUNT) -#else - LuceneVoidBase(), -#endif - query(clone.query->clone()), - required(clone.required), - prohibited(clone.prohibited), - deleteQuery(true) - { - } - - BooleanClause* clone() const{ - BooleanClause* ret = _CLNEW BooleanClause(*this); - return ret; - } - - ~BooleanClause(){ - if ( deleteQuery ) - _CLDELETE( query ); - } - - /** Returns true iff o is equal to this. */ - bool equals(const BooleanClause* other) const { - return this->query->equals(other->query) - && (this->required == other->required) - && (this->prohibited == other->prohibited); - } - - size_t hashCode() const{ - return query->hashCode() ^ (this->required?1:0) ^ (this->prohibited?2:0); - } - }; - - -CL_NS_END -#endif - diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/search/BooleanQuery.cpp qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/search/BooleanQuery.cpp --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/search/BooleanQuery.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/search/BooleanQuery.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,363 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#include "CLucene/StdHeader.h" -#include "BooleanQuery.h" - -#include "BooleanClause.h" -#include "CLucene/index/IndexReader.h" -#include "CLucene/util/StringBuffer.h" -#include "CLucene/util/Arrays.h" -#include "SearchHeader.h" -#include "BooleanScorer.h" -#include "Scorer.h" - -CL_NS_USE(index) -CL_NS_USE(util) -CL_NS_DEF(search) - - BooleanQuery::BooleanQuery(): - clauses(true) - { - } - - BooleanQuery::BooleanQuery(const BooleanQuery& clone): - Query(clone) - { - for ( uint32_t i=0;iclone(); - clause->deleteQuery=true; - add(clause); - } - } - - BooleanQuery::~BooleanQuery(){ - clauses.clear(); - } - - size_t BooleanQuery::hashCode() const { - //todo: do cachedHashCode, and invalidate on add/remove clause - size_t ret = 0; - for (uint32_t i = 0 ; i < clauses.size(); i++) { - BooleanClause* c = clauses[i]; - ret = 31 * ret + c->hashCode(); - } - ret = ret ^ Similarity::floatToByte(getBoost()); - return ret; - } - - const TCHAR* BooleanQuery::getQueryName() const{ - return getClassName(); - } - const TCHAR* BooleanQuery::getClassName(){ - return _T("BooleanQuery"); - } - - /** - * Default value is 1024. Use org.apache.lucene.maxClauseCount - * system property to override. - */ - size_t BooleanQuery::maxClauseCount = LUCENE_BOOLEANQUERY_MAXCLAUSECOUNT; - size_t BooleanQuery::getMaxClauseCount(){ - return maxClauseCount; - } - - void BooleanQuery::setMaxClauseCount(size_t maxClauseCount){ - BooleanQuery::maxClauseCount = maxClauseCount; - } - - void BooleanQuery::add(Query* query, const bool deleteQuery, const bool required, const bool prohibited) { - BooleanClause* bc = _CLNEW BooleanClause(query,deleteQuery,required, prohibited); - try{ - add(bc); - }catch(...){ - _CLDELETE(bc); - throw; - } - } - - void BooleanQuery::add(BooleanClause* clause) { - if (clauses.size() >= getMaxClauseCount()) - _CLTHROWA(CL_ERR_TooManyClauses,"Too Many Clauses"); - - clauses.push_back(clause); - } - - - size_t BooleanQuery::getClauseCount() const { - return (int32_t) clauses.size(); - } - - TCHAR* BooleanQuery::toString(const TCHAR* field) const{ - StringBuffer buffer; - if (getBoost() != 1.0) { - buffer.append(_T("(")); - } - - for (uint32_t i = 0 ; i < clauses.size(); i++) { - BooleanClause* c = clauses[i]; - if (c->prohibited) - buffer.append(_T("-")); - else if (c->required) - buffer.append(_T("+")); - - if ( c->query->instanceOf(BooleanQuery::getClassName()) ) { // wrap sub-bools in parens - buffer.append(_T("(")); - - TCHAR* buf = c->query->toString(field); - buffer.append(buf); - _CLDELETE_CARRAY( buf ); - - buffer.append(_T(")")); - } else { - TCHAR* buf = c->query->toString(field); - buffer.append(buf); - _CLDELETE_CARRAY( buf ); - } - if (i != clauses.size()-1) - buffer.append(_T(" ")); - - if (getBoost() != 1.0) { - buffer.append(_T(")^")); - buffer.appendFloat(getBoost(),1); - } - } - return buffer.toString(); - } - - - - - BooleanClause** BooleanQuery::getClauses() const - { - CND_MESSAGE(false, "Warning: BooleanQuery::getClauses() is deprecated") - BooleanClause** ret = _CL_NEWARRAY(BooleanClause*, clauses.size()+1); - getClauses(ret); - return ret; - } - - void BooleanQuery::getClauses(BooleanClause** ret) const - { - size_t size=clauses.size(); - for ( uint32_t i=0;iprohibited) { // just return clause - Query* query = c->query->rewrite(reader); // rewrite first - - //if the query doesn't actually get re-written, - //then return a clone (because the BooleanQuery - //will register different to the returned query. - if ( query == c->query ) - query = query->clone(); - - if (getBoost() != 1.0f) { // incorporate boost - query->setBoost(getBoost() * query->getBoost()); - } - - return query; - } - } - - BooleanQuery* clone = NULL; // recursively rewrite - for (uint32_t i = 0 ; i < clauses.size(); i++) { - BooleanClause* c = clauses[i]; - Query* query = c->query->rewrite(reader); - if (query != c->query) { // clause rewrote: must clone - if (clone == NULL) - clone = (BooleanQuery*)this->clone(); - //todo: check if delete query should be on... - //in fact we should try and get rid of these - //for compatibility sake - clone->clauses.set (i, _CLNEW BooleanClause(query, true, c->required, c->prohibited)); - } - } - if (clone != NULL) { - return clone; // some clauses rewrote - } else - return this; // no clauses rewrote - } - - - Query* BooleanQuery::clone() const{ - BooleanQuery* clone = _CLNEW BooleanQuery(*this); - return clone; - } - - /** Returns true iff o is equal to this. */ - bool BooleanQuery::equals(Query* o)const { - if (!(o->instanceOf(BooleanQuery::getClassName()))) - return false; - const BooleanQuery* other = (BooleanQuery*)o; - - bool ret = (this->getBoost() == other->getBoost()); - if ( ret ){ - CLListEquals comp; - ret = comp.equals(&this->clauses,&other->clauses); - } - return ret; - } - - qreal BooleanQuery::BooleanWeight::getValue() { return parentQuery->getBoost(); } - Query* BooleanQuery::BooleanWeight::getQuery() { return (Query*)parentQuery; } - - - - - - BooleanQuery::BooleanWeight::BooleanWeight(Searcher* searcher, - CLVector >* clauses, BooleanQuery* parentQuery) - { - this->searcher = searcher; - this->parentQuery = parentQuery; - this->clauses = clauses; - for (uint32_t i = 0 ; i < clauses->size(); i++) { - weights.push_back((*clauses)[i]->query->_createWeight(searcher)); - } - } - BooleanQuery::BooleanWeight::~BooleanWeight(){ - this->weights.clear(); - } - - qreal BooleanQuery::BooleanWeight::sumOfSquaredWeights() { - qreal sum = 0.0f; - for (uint32_t i = 0 ; i < weights.size(); i++) { - BooleanClause* c = (*clauses)[i]; - Weight* w = weights[i]; - if (!c->prohibited) - sum += w->sumOfSquaredWeights(); // sum sub weights - } - sum *= parentQuery->getBoost() * parentQuery->getBoost(); // boost each sub-weight - return sum ; - } - - void BooleanQuery::BooleanWeight::normalize(qreal norm) { - norm *= parentQuery->getBoost(); // incorporate boost - for (uint32_t i = 0 ; i < weights.size(); i++) { - BooleanClause* c = (*clauses)[i]; - Weight* w = weights[i]; - if (!c->prohibited) - w->normalize(norm); - } - } - - Scorer* BooleanQuery::BooleanWeight::scorer(IndexReader* reader){ - // First see if the (faster) ConjunctionScorer will work. This can be - // used when all clauses are required. Also, at this point a - // BooleanScorer cannot be embedded in a ConjunctionScorer, as the hits - // from a BooleanScorer are not always sorted by document number (sigh) - // and hence BooleanScorer cannot implement skipTo() correctly, which is - // required by ConjunctionScorer. - bool allRequired = true; - bool noneBoolean = true; - { //msvc6 scope fix - for (uint32_t i = 0 ; i < weights.size(); i++) { - BooleanClause* c = (*clauses)[i]; - if (!c->required) - allRequired = false; - if (c->query->instanceOf(BooleanQuery::getClassName())) - noneBoolean = false; - } - } - - if (allRequired && noneBoolean) { // ConjunctionScorer is okay - ConjunctionScorer* result = - _CLNEW ConjunctionScorer(parentQuery->getSimilarity(searcher)); - for (uint32_t i = 0 ; i < weights.size(); i++) { - Weight* w = weights[i]; - Scorer* subScorer = w->scorer(reader); - if (subScorer == NULL) - return NULL; - result->add(subScorer); - } - return result; - } - - // Use good-old BooleanScorer instead. - BooleanScorer* result = _CLNEW BooleanScorer(parentQuery->getSimilarity(searcher)); - - { //msvc6 scope fix - for (uint32_t i = 0 ; i < weights.size(); i++) { - BooleanClause* c = (*clauses)[i]; - Weight* w = weights[i]; - Scorer* subScorer = w->scorer(reader); - if (subScorer != NULL) - result->add(subScorer, c->required, c->prohibited); - else if (c->required) - return NULL; - } - } - - return result; - } - - void BooleanQuery::BooleanWeight::explain(IndexReader* reader, int32_t doc, Explanation* result){ - int32_t coord = 0; - int32_t maxCoord = 0; - qreal sum = 0.0f; - Explanation* sumExpl = _CLNEW Explanation; - for (uint32_t i = 0 ; i < weights.size(); i++) { - BooleanClause* c = (*clauses)[i]; - Weight* w = weights[i]; - Explanation* e = _CLNEW Explanation; - w->explain(reader, doc, e); - if (!c->prohibited) - maxCoord++; - if (e->getValue() > 0) { - if (!c->prohibited) { - sumExpl->addDetail(e); - sum += e->getValue(); - coord++; - e = NULL; //prevent e from being deleted - } else { - //we want to return something else... - _CLDELETE(sumExpl); - result->setValue(0.0f); - result->setDescription(_T("match prohibited")); - return; - } - } else if (c->required) { - _CLDELETE(sumExpl); - result->setValue(0.0f); - result->setDescription(_T("match prohibited")); - return; - } - - _CLDELETE(e); - } - sumExpl->setValue(sum); - - if (coord == 1){ // only one clause matched - Explanation* tmp = sumExpl; - sumExpl = sumExpl->getDetail(0)->clone(); // eliminate wrapper - _CLDELETE(tmp); - } - - sumExpl->setDescription(_T("sum of:")); - qreal coordFactor = parentQuery->getSimilarity(searcher)->coord(coord, maxCoord); - if (coordFactor == 1.0f){ // coord is no-op - result->set(*sumExpl); // eliminate wrapper - _CLDELETE(sumExpl); - } else { - result->setDescription( _T("product of:")); - result->addDetail(sumExpl); - - StringBuffer explbuf; - explbuf.append(_T("coord(")); - explbuf.appendInt(coord); - explbuf.append(_T("/")); - explbuf.appendInt(maxCoord); - explbuf.append(_T(")")); - result->addDetail(_CLNEW Explanation(coordFactor, explbuf.getBuffer())); - result->setValue(sum*coordFactor); - } - } - - -CL_NS_END diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/search/BooleanQuery.h qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/search/BooleanQuery.h --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/search/BooleanQuery.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/search/BooleanQuery.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,126 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#ifndef _lucene_search_BooleanQuery_ -#define _lucene_search_BooleanQuery_ - -#if defined(_LUCENE_PRAGMA_ONCE) -# pragma once -#endif - -#include "ConjunctionScorer.h" -#include "CLucene/index/IndexReader.h" -#include "CLucene/util/StringBuffer.h" -#include "SearchHeader.h" -#include "BooleanClause.h" -#include "BooleanScorer.h" -#include "Scorer.h" - -CL_NS_DEF(search) - - - // A Query that matches documents matching boolean combinations of other - // queries, typically {@link TermQuery}s or {@link PhraseQuery}s. - class BooleanQuery:public Query { - public: - typedef CL_NS(util)::CLVector > ClausesType; - private: - BooleanQuery::ClausesType clauses; - static size_t maxClauseCount; - - class BooleanWeight: public Weight { - private: - Searcher* searcher; - CL_NS(util)::CLVector > weights; - ClausesType* clauses; - BooleanQuery* parentQuery; - public: - BooleanWeight(Searcher* searcher, - CL_NS(util)::CLVector >* clauses, - BooleanQuery* parentQuery); - ~BooleanWeight(); - Query* getQuery(); - qreal getValue(); - qreal sumOfSquaredWeights(); - void normalize(qreal norm); - Scorer* scorer(CL_NS(index)::IndexReader* reader); - void explain(CL_NS(index)::IndexReader* reader, int32_t doc, Explanation* ret); - };//booleanweight - - protected: - Weight* _createWeight(Searcher* searcher) { - return _CLNEW BooleanWeight(searcher,&clauses,this); - } - BooleanQuery(const BooleanQuery& clone); - public: - /** Constructs an empty boolean query. */ - BooleanQuery(); - - ~BooleanQuery(); - - const TCHAR* getQueryName() const; - static const TCHAR* getClassName(); - - /** Return the maximum number of clauses permitted, 1024 by default. - * Attempts to add more than the permitted number of clauses cause {@link - * TooManyClauses} to be thrown.*/ - static size_t getMaxClauseCount(); - - /** Set the maximum number of clauses permitted. */ - static void setMaxClauseCount(size_t maxClauseCount); - - /** Adds a clause to a boolean query. Clauses may be: - *
    - *
  • required which means that documents which do not - * match this sub-query will not match the boolean query; - *
  • prohibited which means that documents which do - * match this sub-query will not match the boolean query; or - *
  • neither, in which case matched documents are neither prohibited from - * nor required to match the sub-query. However, a document must match at - * least 1 sub-query to match the boolean query. - *
- * It is an error to specify a clause as both required and - * prohibited. - * - * @see #getMaxClauseCount() - */ - void add(Query* query, const bool required, const bool prohibited){ - add(query,false,required,prohibited); - } - void add(Query* query, const bool deleteQuery, const bool required, const bool prohibited); - - /** Copies the clauses of this query into the array. - * The array must be at least as long as getClauseCount() - * If you want to use the clauses, make sure you null terminate it. - */ - void getClauses(BooleanClause** clauses) const; - - ///@deprecated - _CL_DEPRECATED( getClauses(clauses) ) BooleanClause** getClauses() const; - - /** - * Give client code access to clauses.size() so we know how - * large the array returned by getClauses is. - */ - size_t getClauseCount() const; - - /** Adds a clause to a boolean query. - * @see #getMaxClauseCount() - */ - void add(BooleanClause* clause); - - Query* rewrite(CL_NS(index)::IndexReader* reader); - Query* clone() const; - bool equals(Query* o) const; - - /** Prints a user-readable version of this query. */ - TCHAR* toString(const TCHAR* field) const; - /** Returns a hash code value for this object.*/ - size_t hashCode() const; - }; - -CL_NS_END -#endif diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/search/BooleanScorer.cpp qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/search/BooleanScorer.cpp --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/search/BooleanScorer.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/search/BooleanScorer.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,248 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#include "CLucene/StdHeader.h" -#include "BooleanScorer.h" - -#include "Scorer.h" -#include "Similarity.h" - -CL_NS_USE(util) -CL_NS_DEF(search) - - BooleanScorer::BooleanScorer(Similarity* similarity): - Scorer(similarity), - scorers(NULL), - maxCoord (1), - nextMask (1), - end(0), - current(NULL), - requiredMask (0), - prohibitedMask (0), - coordFactors (NULL) - { - bucketTable = _CLNEW BucketTable(this); - } - - BooleanScorer::~BooleanScorer(){ - //Func - Destructor - //Pre - true - //Post - The instance has been destroyed - - _CLDELETE(bucketTable); - _CLDELETE_ARRAY(coordFactors); - _CLDELETE(scorers); - } - - - bool BooleanScorer::next() { - bool more; - do { - while (bucketTable->first != NULL) { // more queued - current = bucketTable->first; - bucketTable->first = current->next; // pop the queue - - // check prohibited & required - if ((current->bits & prohibitedMask) == 0 && - (current->bits & requiredMask) == requiredMask) { - return true; - } - } - - // refill the queue - more = false; - end += BooleanScorer::BucketTable_SIZE; - for (SubScorer* sub = scorers; sub != NULL; sub = sub->next) { - Scorer* scorer = sub->scorer; - int32_t doc; - while (!sub->done && (doc=scorer->doc()) < end) { - sub->collector->collect(doc, scorer->score()); - sub->done = !scorer->next(); - } - if (!sub->done) { - more = true; - } - } - } while (bucketTable->first != NULL || more); - - return false; - } - - qreal BooleanScorer::score(){ - if (coordFactors == NULL) - computeCoordFactors(); - return current->score * coordFactors[current->coord]; - } - - bool BooleanScorer::skipTo(int32_t target) { - _CLTHROWA(CL_ERR_UnsupportedOperation,"UnsupportedOperationException: BooleanScorer::skipTo"); - } - - void BooleanScorer::explain(int32_t doc, Explanation* ret) { - _CLTHROWA(CL_ERR_UnsupportedOperation,"UnsupportedOperationException: BooleanScorer::explain"); - } - - TCHAR* BooleanScorer::toString() { - CL_NS(util)::StringBuffer buffer; - buffer.append(_T("boolean(")); - for (SubScorer* sub = scorers; sub != NULL; sub = sub->next) { - buffer.append(sub->scorer->toString()); - buffer.append(_T(" ")); - } - buffer.appendChar(')'); - return buffer.toString(); - } - - void BooleanScorer::add(Scorer* scorer, const bool required, const bool prohibited) { - int32_t mask = 0; - if (required || prohibited) { - if (nextMask == 0) - _CLTHROWA(CL_ERR_IndexOutOfBounds, "More than 32 required/prohibited clauses in query."); - mask = nextMask; - nextMask = ( nextMask << 1 ); - } else - mask = 0; - - if (!prohibited) - maxCoord++; - - if (prohibited) - prohibitedMask |= mask; // update prohibited mask - else if (required) - requiredMask |= mask; // update required mask - - //scorer, HitCollector, and scorers is delete in the SubScorer - scorers = _CLNEW SubScorer(scorer, required, prohibited, - bucketTable->newCollector(mask), scorers); - } - - void BooleanScorer::computeCoordFactors(){ - coordFactors = _CL_NEWARRAY(qreal,maxCoord); - for (int32_t i = 0; i < maxCoord; i++) - coordFactors[i] = getSimilarity()->coord(i, maxCoord-1); - } - - /*void BooleanScorer::score(HitCollector* results, const int32_t maxDoc) { - if (coordFactors == NULL) - computeCoordFactors(); - - while (currentDoc < maxDoc) { - currentDoc = (currentDoc+BucketTable_SIZEnext) - t->scorer->score((t->collector), currentDoc); - bucketTable->collectHits(results); - } - }*/ - - - - - BooleanScorer::SubScorer::SubScorer(Scorer* scr, const bool r, const bool p, HitCollector* c, SubScorer* nxt): - scorer(scr), - required(r), - prohibited(p), - collector(c), - next(nxt) - { - //Func - Constructor - //Pre - scr != NULL, - // c != NULL - // nxt may or may not be NULL - //Post - The instance has been created - - CND_PRECONDITION(scr != NULL,"scr is NULL"); - CND_PRECONDITION(c != NULL,"c is NULL"); - - done = !scorer->next(); - } - - BooleanScorer::SubScorer::~SubScorer(){ - //Func - Destructor - //Pre - true - //Post - The instance has been destroyed - - for (SubScorer * ptr = next; ptr; ){ - SubScorer* next = ptr->next; - ptr->next = NULL; - _CLDELETE(ptr); - ptr = next; - } - _CLDELETE(scorer); - _CLDELETE(collector); - } - - BooleanScorer::Bucket::Bucket(): - doc(-1), - score(0.0), - bits(0), - coord(0), - next(NULL) - { - } - BooleanScorer::Bucket::~Bucket(){ - } - - - - - BooleanScorer::BucketTable::BucketTable(BooleanScorer* scr): - scorer(scr), - first(NULL) - { - buckets = _CL_NEWARRAY(Bucket,BucketTable_SIZE); - } - BooleanScorer::BucketTable::~BucketTable(){ - clear(); - _CLDELETE_ARRAY(buckets); - } - - void BooleanScorer::BucketTable::clear(){ - //delete first; - first = NULL; - } - int32_t BooleanScorer::BucketTable::size() const { return BooleanScorer::BucketTable_SIZE; } - - HitCollector* BooleanScorer::BucketTable::newCollector(const int32_t mask) { - return _CLNEW Collector(mask, this); - } - - - - - - - - - - BooleanScorer::Collector::Collector(const int32_t msk, BucketTable* bucketTbl): - bucketTable(bucketTbl), - mask(msk) - { - } - - void BooleanScorer::Collector::collect(const int32_t doc, const qreal score){ - BucketTable* table = bucketTable; - int32_t i = doc & (BooleanScorer::BucketTable_SIZE-1); - Bucket* bucket = &table->buckets[i]; - - if (bucket->doc != doc) { // invalid bucket - bucket->doc = doc; // set doc - bucket->score = score; // initialize score - bucket->bits = mask; // initialize mask - bucket->coord = 1; // initialize coord - - bucket->next = table->first; // push onto valid list - table->first = bucket; - } else { // valid bucket - bucket->score += score; // increment score - bucket->bits |= mask; // add bits in mask - bucket->coord++; // increment coord - } - } - - - -CL_NS_END diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/search/BooleanScorer.h qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/search/BooleanScorer.h --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/search/BooleanScorer.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/search/BooleanScorer.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,99 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -* -* Changes are Copyright (C) 2015 The Qt Company Ltd. -------------------------------------------------------------------------------*/ -#ifndef _lucene_search_BooleanScorer_ -#define _lucene_search_BooleanScorer_ - -#if defined(_LUCENE_PRAGMA_ONCE) -# pragma once -#endif - -#include "Scorer.h" - -CL_NS_DEF(search) - -class BooleanScorer : public Scorer { -public: - class Bucket : LUCENE_BASE { - public: - int32_t doc; // tells if bucket is valid - qreal score; // incremental score - int32_t bits; // used for bool constraints - int32_t coord; // count of terms in score - Bucket* next; // next valid bucket - - Bucket(); - ~Bucket(); - }; - - class SubScorer: LUCENE_BASE { - public: - bool done; - Scorer* scorer; - bool required; - bool prohibited; - HitCollector* collector; - SubScorer* next; - SubScorer(Scorer* scr, const bool r, const bool p, HitCollector* c, SubScorer* nxt); - ~SubScorer(); - }; - - class BucketTable:LUCENE_BASE { - private: - BooleanScorer* scorer; - public: - Bucket* buckets; - Bucket* first; // head of valid list - - BucketTable(BooleanScorer* scr); - int32_t size() const; - HitCollector* newCollector(const int32_t mask); - void clear(); - ~BucketTable(); - - }; - - class Collector: public HitCollector { - private: - BucketTable* bucketTable; - int32_t mask; - public: - Collector(const int32_t mask, BucketTable* bucketTable); - - void collect(const int32_t doc, const qreal score); - }; - - SubScorer* scorers; - BucketTable* bucketTable; - - int32_t maxCoord; - int32_t nextMask; - - int32_t end; - Bucket* current; - -public: - LUCENE_STATIC_CONSTANT(int32_t,BucketTable_SIZE=1024); - int32_t requiredMask; - int32_t prohibitedMask; - qreal* coordFactors; - - BooleanScorer(Similarity* similarity); - ~BooleanScorer(); - void add(Scorer* scorer, const bool required, const bool prohibited); - int32_t doc() const { return current->doc; } - bool next(); - qreal score(); - bool skipTo(int32_t target); - void explain(int32_t doc, Explanation* ret); - TCHAR* toString(); - void computeCoordFactors(); -}; - -CL_NS_END -#endif diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/search/CachingWrapperFilter.cpp qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/search/CachingWrapperFilter.cpp --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/search/CachingWrapperFilter.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/search/CachingWrapperFilter.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,86 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#include "CLucene/StdHeader.h" -#include "CachingWrapperFilter.h" - -CL_NS_DEF(search) -CL_NS_USE(index) -CL_NS_USE(util) - -AbstractCachingFilter::AbstractCachingFilter(): - cache(false,true) -{ -} -AbstractCachingFilter::AbstractCachingFilter(const AbstractCachingFilter& copy): - cache(false,true) -{ -} -AbstractCachingFilter::~AbstractCachingFilter(){ -} -AbstractCachingFilter::BitSetHolder::BitSetHolder(CL_NS(util)::BitSet* bits, bool deleteBs){ - this->bits = bits; - this->deleteBs = deleteBs; -} -AbstractCachingFilter::BitSetHolder::~BitSetHolder(){ - if ( deleteBs ) - _CLDELETE(bits); -} - - -BitSet* AbstractCachingFilter::bits(IndexReader* reader){ - SCOPED_LOCK_MUTEX(cache.THIS_LOCK) - BitSetHolder* cached = cache.get(reader); - if ( cached != NULL ) - return cached->bits; - BitSet* bs = doBits(reader); - BitSetHolder* bsh = _CLNEW BitSetHolder(bs, doShouldDeleteBitSet(bs)); - cache.put(reader,bsh); - return bs; -} -void AbstractCachingFilter::closeCallback(CL_NS(index)::IndexReader* reader, void*){ - SCOPED_LOCK_MUTEX(cache.THIS_LOCK) - cache.remove(reader); -} - - - - -CachingWrapperFilter::CachingWrapperFilter(Filter* filter, bool deleteFilter){ - this->filter = filter; - this->deleteFilter = deleteFilter; -} -CachingWrapperFilter::CachingWrapperFilter(const CachingWrapperFilter& copy): - AbstractCachingFilter(copy) -{ - this->filter = copy.filter->clone(); - this->deleteFilter = true; -} -Filter* CachingWrapperFilter::clone() const{ - return _CLNEW CachingWrapperFilter(*this); -} -TCHAR* CachingWrapperFilter::toString(){ - TCHAR* fs = filter->toString(); - int len = _tcslen(fs)+23; - TCHAR* ret = _CL_NEWARRAY(TCHAR,len); - _sntprintf(ret,len,_T("CachingWrapperFilter(%s)"),fs); - _CLDELETE_CARRAY(fs); - return ret; -} -BitSet* CachingWrapperFilter::doBits(IndexReader* reader){ - return filter->bits(reader); -} -bool CachingWrapperFilter::doShouldDeleteBitSet( CL_NS(util)::BitSet* bits ){ - return filter->shouldDeleteBitSet(bits); -} -CachingWrapperFilter::~CachingWrapperFilter(){ - if ( deleteFilter ){ - _CLDELETE(filter); - }else - filter=NULL; -} - -CL_NS_END diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/search/CachingWrapperFilter.h qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/search/CachingWrapperFilter.h --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/search/CachingWrapperFilter.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/search/CachingWrapperFilter.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,80 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#ifndef _lucene_search_CachingWrapperFilter_ -#define _lucene_search_CachingWrapperFilter_ - -#include "CLucene/util/BitSet.h" -#include "CLucene/index/IndexReader.h" -#include "Filter.h" - -CL_NS_DEF(search) -/** - * Wraps another filter's result and caches it. The purpose is to allow - * filters to implement this and allow itself to be cached. Alternatively, - * use the CachingWrapperFilter to cache the filter. - */ -class AbstractCachingFilter: public Filter -{ - class BitSetHolder: LUCENE_BASE{ - bool deleteBs; - public: - BitSetHolder(CL_NS(util)::BitSet* bits, bool deleteBs); - ~BitSetHolder(); - CL_NS(util)::BitSet* bits; - }; - void closeCallback(CL_NS(index)::IndexReader* reader, void* param); - typedef CL_NS(util)::CLHashMap, - CL_NS(util)::Equals::Void, - CL_NS(util)::Deletor::Object, - CL_NS(util)::Deletor::Object > CacheType; - - CacheType cache; - -protected: - AbstractCachingFilter( const AbstractCachingFilter& copy ); - virtual CL_NS(util)::BitSet* doBits( CL_NS(index)::IndexReader* reader ) = 0; - virtual bool doShouldDeleteBitSet( CL_NS(util)::BitSet* bits ){ return false; } - AbstractCachingFilter(); -public: - virtual ~AbstractCachingFilter(); - - /** Returns a BitSet with true for documents which should be permitted in - search results, and false for those that should not. */ - CL_NS(util)::BitSet* bits( CL_NS(index)::IndexReader* reader ); - - virtual Filter *clone() const = 0; - virtual TCHAR *toString() = 0; - - bool shouldDeleteBitSet( const CL_NS(util)::BitSet* bits ) const{ return false; } -}; - -/** - * Wraps another filter's result and caches it. The purpose is to allow - * filters to simply filter, and then wrap with this class to add - * caching, keeping the two concerns decoupled yet composable. - */ -class CachingWrapperFilter: public AbstractCachingFilter -{ -private: - Filter* filter; - bool deleteFilter; -protected: - CachingWrapperFilter( const CachingWrapperFilter& copy ); - CL_NS(util)::BitSet* doBits( CL_NS(index)::IndexReader* reader ); - bool doShouldDeleteBitSet( CL_NS(util)::BitSet* bits ); -public: - CachingWrapperFilter( Filter* filter, bool deleteFilter=true ); - ~CachingWrapperFilter(); - - Filter *clone() const; - TCHAR *toString(); -}; - -CL_NS_END -#endif diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/search/ChainedFilter.cpp qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/search/ChainedFilter.cpp --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/search/ChainedFilter.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/search/ChainedFilter.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,213 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ - -#include -#include -#include "ChainedFilter.h" - -CL_NS_DEF(search) -CL_NS_USE(index) -CL_NS_USE(util) -CL_NS_USE(document) - - -ChainedFilter::ChainedFilter( Filter ** _filters, int _op ): - filters(_filters), - logicArray(NULL), - logic(_op) -{ -} -ChainedFilter::ChainedFilter( Filter** _filters, int* _array ): - filters(_filters), - logicArray(_array), - logic(-1) -{ -} -ChainedFilter::ChainedFilter( const ChainedFilter& copy ) : - logicArray( copy.logicArray ), - logic( copy.logic ) -{ - filters = copy.filters; -} -ChainedFilter::~ChainedFilter(void) -{ - -} - -Filter* ChainedFilter::clone() const { - return _CLNEW ChainedFilter(*this ); -} - -const TCHAR* ChainedFilter::getLogicString(int logic){ - if ( logic == ChainedFilter::OR ) - return _T("OR"); - else if ( logic == ChainedFilter::AND ) - return _T("AND"); - else if ( logic == ChainedFilter::ANDNOT ) - return _T("ANDNOT"); - else if ( logic == ChainedFilter::XOR ) - return _T("XOR"); - else if ( logic >= ChainedFilter::USER ){ - return _T("USER"); - } - return _T(""); -} - -TCHAR* ChainedFilter::toString() -{ - - Filter** filter = filters; - - StringBuffer buf(_T("ChainedFilter: [")); - int* la = logicArray; - while(*filter ) - { - if ( filter != filters ) - buf.appendChar(' '); - buf.append(getLogicString(logic==-1?*la:logic)); - buf.appendChar(' '); - - TCHAR* filterstr = (*filter)->toString(); - buf.append(filterstr); - _CLDELETE_ARRAY( filterstr ); - - filter++; - if ( logic == -1 ) - la++; - } - - buf.appendChar(']'); - - return buf.toString(); -} - - -/** Returns a BitSet with true for documents which should be permitted in -search results, and false for those that should not. */ -BitSet* ChainedFilter::bits( IndexReader* reader ) -{ - if( logic != -1 ) - return bits( reader, logic ); - else if( logicArray != NULL ) - return bits( reader, logicArray ); - else - return bits( reader, DEFAULT ); -} - - -BitSet* ChainedFilter::bits( IndexReader* reader, int logic ) -{ - BitSet* bts = NULL; - - Filter** filter = filters; - - // see discussion at top of file - if( *filter ) { - BitSet* tmp = (*filter)->bits( reader ); - if ( (*filter)->shouldDeleteBitSet(tmp) ) //if we are supposed to delete this BitSet, then - bts = tmp; //we can safely call it our own - else if ( tmp == NULL ){ - int32_t len = reader->maxDoc(); - bts = _CLNEW BitSet( len ); //bitset returned null, which means match _all_ - for (int32_t i=0;iset(i); - }else{ - bts = tmp->clone(); //else it is probably cached, so we need to copy it before using it. - } - filter++; - } - else - bts = _CLNEW BitSet( reader->maxDoc() ); - - while( *filter ) { - doChain( bts, reader, logic, *filter ); - filter++; - } - - return bts; -} - - -BitSet* ChainedFilter::bits( IndexReader* reader, int* _logicArray ) -{ - BitSet* bts = NULL; - - Filter** filter = filters; - int* logic = _logicArray; - - // see discussion at top of file - if( *filter ) { - BitSet* tmp = (*filter)->bits( reader ); - if ( (*filter)->shouldDeleteBitSet(tmp) ) //if we are supposed to delete this BitSet, then - bts = tmp; //we can safely call it our own - else if ( tmp == NULL ){ - int32_t len = reader->maxDoc(); - bts = _CLNEW BitSet( len ); //bitset returned null, which means match _all_ - for (int32_t i=0;iset(i); //todo: this could mean that we can skip certain types of filters - } - else - { - bts = tmp->clone(); //else it is probably cached, so we need to copy it before using it. - } - filter++; - logic++; - } - else - bts = _CLNEW BitSet( reader->maxDoc() ); - - while( *filter ) { - doChain( bts, reader, *logic, *filter ); - filter++; - logic++; - } - - return bts; -} - -void ChainedFilter::doUserChain( CL_NS(util)::BitSet* chain, CL_NS(util)::BitSet* filter, int logic ){ - _CLTHROWA(CL_ERR_Runtime,"User chain logic not implemented by superclass"); -} - -BitSet* ChainedFilter::doChain( BitSet* resultset, IndexReader* reader, int logic, Filter* filter ) -{ - BitSet* filterbits = filter->bits( reader ); - int32_t maxDoc = reader->maxDoc(); - int32_t i=0; - if ( logic >= ChainedFilter::USER ){ - doUserChain(resultset,filterbits,logic); - }else{ - switch( logic ) - { - case OR: - for( i=0; i < maxDoc; i++ ) - resultset->set( i, (resultset->get(i) || (filterbits==NULL || filterbits->get(i) ))?1:0 ); - break; - case AND: - for( i=0; i < maxDoc; i++ ) - resultset->set( i, (resultset->get(i) && (filterbits==NULL || filterbits->get(i) ))?1:0 ); - break; - case ANDNOT: - for( i=0; i < maxDoc; i++ ) - resultset->set( i, (resultset->get(i) && (filterbits==NULL || filterbits->get(i)))?0:1 ); - break; - case XOR: - for( i=0; i < maxDoc; i++ ) - resultset->set( i, resultset->get(i) ^ ((filterbits==NULL || filterbits->get(i) )?1:0) ); - break; - default: - doChain( resultset, reader, DEFAULT, filter ); - } - } - - if ( filter->shouldDeleteBitSet(filterbits) ) - _CLDELETE( filterbits ); - - return resultset; -} - -CL_NS_END diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/search/ChainedFilter.h qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/search/ChainedFilter.h --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/search/ChainedFilter.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/search/ChainedFilter.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,86 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#ifndef _lucene_search_ChainedFilter_ -#define _lucene_search_ChainedFilter_ - -#include "CLucene/index/IndexReader.h" -#include "CLucene/util/BitSet.h" -#include "CLucene/search/Filter.h" - -CL_NS_DEF(search) - -/* -Discussion - brian@unixpoet.com - -From ChainedFilter.java: - -... - -// First AND operation takes place against a completely false -// bitset and will always return zero results. Thanks to -// Daniel Armbrust for pointing this out and suggesting workaround. - -if (logic[0] == AND) -{ - result = (BitSet) chain[i].bits(reader).clone(); - ++i; -} - -... - -The observation is correct and it was buggy. The problem is that the same -issue remains for the ANDNOT logic op but with the inverse result: all bits -set to 1. The result of the other ops, i.e. OR, AND, XOR for the first filter -ends up just copying the bitset of the first filter (explicitly in the case of the AND). - -Why not do the same for the NAND? This will have the side effect of rendering the first op -in the logic array superflous - not a big problem. - -The only "problem" is that we will return different results then the Java -Lucene code - though I prefer CLucene to be a correct implementation and only maintain -API compat rather than full 100% compat with Lucene. -*/ -class ChainedFilter: public Filter -{ -public: - LUCENE_STATIC_CONSTANT(int, OR = 0); //set current bit if the chain is set OR if the filter bit is set - LUCENE_STATIC_CONSTANT(int, AND = 1); //set current bit if the chain is set AND the filter bit is set - LUCENE_STATIC_CONSTANT(int, ANDNOT = 2); //set current bit if the chain is not set AND the filter bit is not set - LUCENE_STATIC_CONSTANT(int, XOR = 3); //set current bit if the chain is set OR the filter bit is set BUT not both is set - - LUCENE_STATIC_CONSTANT(int, USER = 5); //add this value to user defined value, then override doUserChain - - LUCENE_STATIC_CONSTANT(int, DEFAULT = OR); - -protected: - Filter **filters; - int *logicArray; - int logic; - - ChainedFilter( const ChainedFilter& copy ); - CL_NS(util)::BitSet* bits( CL_NS(index)::IndexReader* reader, int logic ); - CL_NS(util)::BitSet* bits( CL_NS(index)::IndexReader* reader, int* logicArray ); - CL_NS(util)::BitSet* doChain( CL_NS(util)::BitSet* result, CL_NS(index)::IndexReader* reader, int logic, Filter* filter ); - - virtual void doUserChain( CL_NS(util)::BitSet* chain, CL_NS(util)::BitSet* filter, int logic ); - virtual const TCHAR* getLogicString(int logic); -public: - ChainedFilter( Filter** filters, int op = DEFAULT ); - ChainedFilter( Filter** filters, int* _array ); - virtual ~ChainedFilter(); - - /** Returns a BitSet with true for documents which should be permitted in - search results, and false for those that should not. */ - CL_NS(util)::BitSet* bits( CL_NS(index)::IndexReader* reader ); - - virtual Filter* clone() const; - - TCHAR* toString(); -}; - -CL_NS_END -#endif diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/search/Compare.h qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/search/Compare.h --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/search/Compare.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/search/Compare.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,161 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#ifndef _lucene_search_Compare_ -#define _lucene_search_Compare_ - -#if defined(_LUCENE_PRAGMA_ONCE) -# pragma once -#endif - -#include "FieldSortedHitQueue.h" - -CL_NS_DEF(search) - - -class ScoreDocComparators:LUCENE_BASE { -protected: - ScoreDocComparators(){} -public: - ~ScoreDocComparators(){ - } - - class Relevance:public ScoreDocComparator { - public: - int32_t compare (struct ScoreDoc* i, struct ScoreDoc* j) { - if (i->score > j->score) return -1; - if (i->score < j->score) return 1; - return 0; - } - CL_NS(util)::Comparable* sortValue (struct ScoreDoc* i) { - return _CLNEW CL_NS(util)::Compare::Float (i->score); - } - int32_t sortType() { - return SortField::DOCSCORE; - } - }; - - class IndexOrder:public ScoreDocComparator{ - public: - IndexOrder(): - ScoreDocComparator() - { - - } - int32_t compare (struct ScoreDoc* i, struct ScoreDoc* j) { - if (i->doc < j->doc) return -1; - if (i->doc > j->doc) return 1; - return 0; - } - CL_NS(util)::Comparable* sortValue (struct ScoreDoc* i) { - return _CLNEW CL_NS(util)::Compare::Int32(i->doc); - } - int32_t sortType() { - return SortField::DOC; - } - }; - - - class String: public ScoreDocComparator { - FieldCache::StringIndex* index; -#ifdef _CL__CND_DEBUG - int32_t length; -#endif - public: - String(FieldCache::StringIndex* index, int32_t len) - { -#ifdef _CL__CND_DEBUG - this->length = len; -#endif - this->index = index; - } - - int32_t compare (struct ScoreDoc* i, struct ScoreDoc* j) { - CND_PRECONDITION(i->docdoc>=length") - CND_PRECONDITION(j->docdoc>=length") - if (index->order[i->doc] < index->order[j->doc]) return -1; - if (index->order[i->doc] > index->order[j->doc]) return 1; - return 0; - } - - CL_NS(util)::Comparable* sortValue (struct ScoreDoc* i) { - return _CLNEW CL_NS(util)::Compare::TChar(index->lookup[index->order[i->doc]]); - } - - int32_t sortType() { - return SortField::STRING; - } - }; - - class Int32:public ScoreDocComparator{ - int32_t* fieldOrder; -#ifdef _CL__CND_DEBUG - int32_t length; -#endif - public: - Int32(int32_t* fieldOrder, int32_t len) - { - this->fieldOrder = fieldOrder; -#ifdef _CL__CND_DEBUG - this->length = len; -#endif - } - - - int32_t compare (struct ScoreDoc* i, struct ScoreDoc* j) { - CND_PRECONDITION(i->docdoc>=length") - CND_PRECONDITION(j->docdoc>=length") - if (fieldOrder[i->doc] < fieldOrder[j->doc]) return -1; - if (fieldOrder[i->doc] > fieldOrder[j->doc]) return 1; - return 0; - } - - CL_NS(util)::Comparable* sortValue (struct ScoreDoc* i) { - CND_PRECONDITION(i->docdoc>=length") - return _CLNEW CL_NS(util)::Compare::Int32(fieldOrder[i->doc]); - } - - int32_t sortType() { - return SortField::INT; - } - }; - - class Float:public ScoreDocComparator { - qreal* fieldOrder; -#ifdef _CL__CND_DEBUG - int32_t length; -#endif - public: - Float(qreal* fieldOrder, int32_t len) - { - this->fieldOrder = fieldOrder; -#ifdef _CL__CND_DEBUG - this->length = len; -#endif - } - - int32_t compare (struct ScoreDoc* i, struct ScoreDoc* j) { - CND_PRECONDITION(i->docdoc>=length") - CND_PRECONDITION(j->docdoc>=length") - if (fieldOrder[i->doc] < fieldOrder[j->doc]) return -1; - if (fieldOrder[i->doc] > fieldOrder[j->doc]) return 1; - return 0; - } - - CL_NS(util)::Comparable* sortValue (struct ScoreDoc* i) { - CND_PRECONDITION(i->docdoc>=length") - return _CLNEW CL_NS(util)::Compare::Float(fieldOrder[i->doc]); - } - - int32_t sortType() { - return SortField::FLOAT; - } - }; -}; - - -CL_NS_END -#endif diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/search/ConjunctionScorer.cpp qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/search/ConjunctionScorer.cpp --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/search/ConjunctionScorer.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/search/ConjunctionScorer.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,144 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#include "CLucene/StdHeader.h" -#include "ConjunctionScorer.h" -#include "CLucene/util/Arrays.h" - -CL_NS_USE(index) -CL_NS_USE(util) -CL_NS_DEF(search) - - Scorer* ConjunctionScorer::first() const{ - if ( scorers.end() == scorers.begin() ) - return NULL; - - return *scorers.begin(); - } //get First - Scorer* ConjunctionScorer::last() { - if ( scorers.end() == scorers.begin() ) - return NULL; - - CL_NS_STD(list)::iterator i = scorers.end(); - --i; - return *i; - } //get Last - - class _ScorerSorter:public CL_NS(util)::Arrays::_Arrays{ - public: - bool equals(Scorer* o1,Scorer* o2) const{ - return o1->doc() == o2->doc(); - } - int32_t compare(Scorer* o1,Scorer* o2) const{ - return o1->doc() - o2->doc(); - } - }; - _ScorerSorter __ScorerSorter; - - void ConjunctionScorer::sortScorers() { - // move scorers to an array - int32_t size = scorers.size(); - Scorer** array = _CL_NEWARRAY(Scorer*,size+1); - scorers.toArray(array); - scorers.clear(); // empty the list - - // note that this comparator is not consistent with equals! - __ScorerSorter.sort(array,size,0,size); - - for (int32_t i = 0; idoc() < last()->doc()) { // find doc w/ all clauses - more = first()->skipTo(last()->doc()); // skip first upto last - Scorer* scorer = *scorers.begin(); - scorers.delete_front(); - scorers.push_back(scorer); // move first to last - } - return more; // found a doc with all clauses - } - - - void ConjunctionScorer::init() { - more = scorers.size() > 0; - - // compute coord factor - coord = getSimilarity()->coord(scorers.size(), scorers.size()); - - // move each scorer to its first entry - CL_NS_STD(list)::iterator i = scorers.begin(); - while (more && i!=scorers.end()) { - more = ((Scorer*)*i)->next(); - ++i; - } - - if (more) - sortScorers(); // initial sort of list - - firstTime = false; - } - - ConjunctionScorer::ConjunctionScorer(Similarity* similarity): - Scorer(similarity), - scorers(false), - firstTime(true), - more(true), - coord(0.0) - { - } - ConjunctionScorer::~ConjunctionScorer(){ - scorers.setDoDelete(true); - } - - TCHAR *CL_NS(search)::Scorer::toString(void){ - return STRDUP_TtoT(_T("ConjunctionScorer")); - } - - - void ConjunctionScorer::add(Scorer* scorer){ - scorers.push_back(scorer); - } - - - int32_t ConjunctionScorer::doc() const{ return first()->doc(); } - - bool ConjunctionScorer::next() { - if (firstTime) { - init(); - } else if (more) { - more = last()->next(); // trigger further scanning - } - return doNext(); - } - - bool ConjunctionScorer::skipTo(int32_t target) { - CL_NS_STD(list)::iterator i = scorers.begin(); - while (more && i!=scorers.end()) { - more = ((Scorer*)*i)->skipTo(target); - ++i; - } - if (more) - sortScorers(); // re-sort scorers - return doNext(); - } - - qreal ConjunctionScorer::score(){ - qreal score = 0.0f; // sum scores - CL_NS_STD(list)::const_iterator i = scorers.begin(); - while (i!=scorers.end()){ - score += (*i)->score(); - ++i; - } - score *= coord; - return score; - } - - - -CL_NS_END diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/search/ConjunctionScorer.h qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/search/ConjunctionScorer.h --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/search/ConjunctionScorer.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/search/ConjunctionScorer.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,50 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#ifndef _lucene_search_ConjunctionScorer_ -#define _lucene_search_ConjunctionScorer_ - -#if defined(_LUCENE_PRAGMA_ONCE) -# pragma once -#endif -#include "Scorer.h" -#include "Similarity.h" - -CL_NS_DEF(search) - -/** Scorer for conjunctions, sets of queries, all of which are required. */ -class ConjunctionScorer: public Scorer { -private: - CL_NS(util)::CLLinkedList > scorers; - bool firstTime; - bool more; - qreal coord; - - Scorer* first() const; - Scorer* last(); - void sortScorers(); - bool doNext(); - void init(); -public: - ConjunctionScorer(Similarity* similarity); - virtual ~ConjunctionScorer(); - TCHAR* toString(void){ - return STRDUP_TtoT(_T("ConjunctionScorer")); - } - void add(Scorer* scorer); - int32_t doc() const; - bool next(); - bool skipTo(int32_t target); - qreal score(); - virtual void explain(int32_t doc, Explanation* ret) { - _CLTHROWA(CL_ERR_UnsupportedOperation,"UnsupportedOperationException: ConjunctionScorer::explain"); - } - - -}; - -CL_NS_END -#endif diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/search/DateFilter.cpp qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/search/DateFilter.cpp --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/search/DateFilter.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/search/DateFilter.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,93 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#include "CLucene/StdHeader.h" -#include "DateFilter.h" - -CL_NS_USE(index) -CL_NS_USE(util) -CL_NS_USE(document) -CL_NS_DEF(search) - - DateFilter::~DateFilter(){ - _CLDECDELETE( start ); - _CLDECDELETE( end ); - } - - DateFilter::DateFilter(const DateFilter& copy): - start( _CL_POINTER(copy.start) ), - end ( _CL_POINTER(copy.end) ) - { - } - - /** Constructs a filter for field f matching times between - from and to. */ - DateFilter::DateFilter(const TCHAR* f, int64_t from, int64_t to) - { - TCHAR* tmp = DateField::timeToString(from); - start = _CLNEW Term(f, tmp); - _CLDELETE_CARRAY(tmp); - - tmp = DateField::timeToString(to); - end = _CLNEW Term(start, tmp); - _CLDELETE_CARRAY(tmp); - } - - /** Constructs a filter for field f matching times before - time. */ - DateFilter* DateFilter::Before(const TCHAR* field, int64_t time) { - return _CLNEW DateFilter(field, 0,time); - } - - /** Constructs a filter for field f matching times after - time. */ - DateFilter* DateFilter::After(const TCHAR* field, int64_t time) { - return _CLNEW DateFilter(field,time, DATEFIELD_DATE_MAX ); - } - - /** Returns a BitSet with true for documents which should be permitted in - search results, and false for those that should not. */ - BitSet* DateFilter::bits(IndexReader* reader) { - BitSet* bts = _CLNEW BitSet(reader->maxDoc()); - - TermEnum* enumerator = reader->terms(start); - if (enumerator->term(false) == NULL){ - _CLDELETE(enumerator); - return bts; - } - TermDocs* termDocs = reader->termDocs(); - - try { - while (enumerator->term(false)->compareTo(end) <= 0) { - termDocs->seek(enumerator->term(false)); - while (termDocs->next()) { - bts->set(termDocs->doc()); - } - if (!enumerator->next()) { - break; - } - } - } _CLFINALLY ( - termDocs->close(); - _CLDELETE(termDocs); - enumerator->close(); - _CLDELETE(enumerator); - ); - return bts; - } - - Filter* DateFilter::clone() const{ - return _CLNEW DateFilter(*this); - } - - TCHAR* DateFilter::toString(){ - size_t len = _tcslen(start->field()) + start->textLength() + end->textLength() + 8; - TCHAR* ret = _CL_NEWARRAY(TCHAR,len); - ret[0]=0; - _sntprintf(ret,len,_T("%s: [%s-%s]"), start->field(),start->text(),end->text()); - return ret; - } -CL_NS_END diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/search/DateFilter.h qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/search/DateFilter.h --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/search/DateFilter.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/search/DateFilter.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,59 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#ifndef _lucene_search_DateFilter_ -#define _lucene_search_DateFilter_ - -#if defined(_LUCENE_PRAGMA_ONCE) -# pragma once -#endif - -#include "CLucene/document/DateField.h" -#include "CLucene/index/Term.h" -#include "CLucene/index/Terms.h" -#include "CLucene/index/IndexReader.h" -#include "CLucene/util/BitSet.h" -#include "Filter.h" - -CL_NS_DEF(search) - /** - * A Filter that restricts search results to a range of time. - * - *

For this to work, documents must have been indexed with a - * {@link DateField}. - */ - class DateFilter: public Filter { - private: - CL_NS(index)::Term* start; - CL_NS(index)::Term* end; - - protected: - DateFilter(const DateFilter& copy); - public: - ~DateFilter(); - - /** Constructs a filter for field f matching times between - from and to. */ - DateFilter(const TCHAR* f, int64_t from, int64_t to); - - /** Constructs a filter for field f matching times before - time. */ - static DateFilter* Before(const TCHAR* field, int64_t time) ; - - /** Constructs a filter for field f matching times after - time. */ - static DateFilter* After(const TCHAR* field, int64_t time) ; - - /** Returns a BitSet with true for documents which should be permitted in - search results, and false for those that should not. */ - CL_NS(util)::BitSet* bits(CL_NS(index)::IndexReader* reader) ; - - Filter* clone() const; - - TCHAR* toString(); - }; -CL_NS_END -#endif diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/search/ExactPhraseScorer.cpp qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/search/ExactPhraseScorer.cpp --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/search/ExactPhraseScorer.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/search/ExactPhraseScorer.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,85 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#include "CLucene/StdHeader.h" -#include "ExactPhraseScorer.h" - -#include "PhraseScorer.h" -#include "CLucene/index/Terms.h" - -CL_NS_USE(index) -CL_NS_DEF(search) - - ExactPhraseScorer::ExactPhraseScorer(Weight* weight, TermPositions** tps, - int32_t* positions, Similarity* similarity, uint8_t* norms): - PhraseScorer(weight, tps, positions, similarity, norms){ - //Func - Constructor - //Pre - tps != NULL - // tpsLength >= 0 - // n != NULL - //Post - Instance has been created - - CND_PRECONDITION(tps != NULL,"tps is NULL"); - CND_PRECONDITION(tps[0] != NULL,"tps is NULL"); - //CND_PRECONDITION(n != NULL,"n is NULL") =this is checked already in PhraseScorer - - } - - qreal ExactPhraseScorer::phraseFreq(){ - //Func - Returns the freqency of the phrase - //Pre - first != NULL - // last != NULL - // pq != NULL - // size of the PhraseQueue pq is 0 - //Post - The frequency of the phrase has been returned - - CND_PRECONDITION(first != NULL,"first is NULL"); - CND_PRECONDITION(last != NULL,"last is NULL"); - CND_PRECONDITION(pq != NULL,"pq is NULL"); - CND_PRECONDITION(pq->size()==0,"pq is not empty"); - - //build pq from list - - //Add the nodes of the list of PhrasePositions and store them - //into the PhraseQueue pq so it can used to build - //a list of sorted nodes - for (PhrasePositions* pp = first; pp != NULL; pp = pp->_next) { - //Read the first TermPosition of the current PhrasePositions pp - pp->firstPosition(); - //Store the current PhrasePositions pp into the PhraseQueue pq - pq->put(pp); - } - //pqToList requires that first and last be NULL when it's called. - //This is done at the beginning of pqToList() - //In this case, the nodes of the linked list are referenced by pq (see - //above loop), so we can clear our pointers to the head and tail of the - //linked list without fear of leaking the nodes. - - //rebuild list from pq - pqToList(); - - //Initialize freq at 0 - int32_t freq = 0; - - //find position with all terms - do { - //scan forward in first - while (first->position < last->position){ - do{ - if (!first->nextPosition()){ - return (qreal)freq; - } - } while (first->position < last->position); - //Make the current first node the last node in the list - firstToLast(); - } - //all equal: a match has been found - freq++; - } while (last->nextPosition()); - - return (qreal)freq; - } -CL_NS_END diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/search/ExactPhraseScorer.h qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/search/ExactPhraseScorer.h --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/search/ExactPhraseScorer.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/search/ExactPhraseScorer.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,31 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#ifndef _lucene_search_ExactPhraseScorer_ -#define _lucene_search_ExactPhraseScorer_ - -#if defined(_LUCENE_PRAGMA_ONCE) -# pragma once -#endif - -#include "PhraseScorer.h" -#include "CLucene/index/Terms.h" - -CL_NS_DEF(search) - - class ExactPhraseScorer: public PhraseScorer { - public: - ExactPhraseScorer(Weight* weight, CL_NS(index)::TermPositions** tps, int32_t* positions, - Similarity* similarity, uint8_t* norms ); - - ~ExactPhraseScorer(){ - } - protected: - //Returns the exact freqency of the phrase - qreal phraseFreq(); - }; -CL_NS_END -#endif diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/search/Explanation.cpp qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/search/Explanation.cpp --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/search/Explanation.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/search/Explanation.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,133 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#include "CLucene/StdHeader.h" -#include "Explanation.h" -#include "CLucene/util/StringBuffer.h" - -CL_NS_USE(util) -CL_NS_DEF(search) - - -Explanation::Explanation(qreal value, const TCHAR* description) { - this->value = value; - _tcsncpy(this->description,description,LUCENE_SEARCH_EXPLANATION_DESC_LEN); -} - -Explanation::Explanation() { - this->value = 0; - this->description[0]=0; -} - -Explanation::Explanation(const Explanation& copy){ - set(copy); -} -void Explanation::set(const Explanation& copy){ - this->value = copy.value; - STRCPY_TtoT(description,copy.description,LUCENE_SEARCH_EXPLANATION_DESC_LEN); - - details.clear(); - typedef CL_NS(util)::Deletor::Object Deletor; - CL_NS(util)::CLArrayList::const_iterator itr; - itr = copy.details.begin(); - while ( itr != copy.details.end() ){ - details.push_back( (*itr)->clone() ); - ++itr; - } -} - -Explanation::~Explanation(){ -} - -void Explanation::setDescription(const TCHAR* description) { - _tcsncpy(this->description,description,LUCENE_SEARCH_EXPLANATION_DESC_LEN); -} - - -Explanation* Explanation::clone() const{ - return _CLNEW Explanation(*this); -} - -qreal Explanation::getValue() const{ - return value; -} - -void Explanation::setValue(qreal value) { - this->value = value; -} - -const TCHAR* Explanation::getDescription() const { - return description; -} - -///todo: mem leaks -TCHAR* Explanation::toString(int32_t depth) { - StringBuffer buffer; - for (int32_t i = 0; i < depth; i++) { - buffer.append(_T(" ")); - } - buffer.appendFloat(getValue(),2); - buffer.append(_T(" = ")); - buffer.append(getDescription()); - buffer.append(_T("\n")); - - for ( uint32_t j=0;jtoString(depth+1); - buffer.append(tmp); - _CLDELETE_CARRAY(tmp); - } - return buffer.toString(); -} - -int Explanation::getDetailsLength(){ - return details.size(); -} -Explanation* Explanation::getDetail(int i){ - return details[i]; -} -/** The sub-nodes of this explanation node. */ -void Explanation::getDetails(Explanation** ret) { - uint32_t size = details.size(); - for ( uint32_t i=0;iclone(); - } - ret[size] = NULL; -} - -/** Adds a sub-node to this explanation node. */ -void Explanation::addDetail(Explanation* detail) { - details.push_back(detail); -} - -/** Render an explanation as text. */ -TCHAR* Explanation::toString() { - return toString(0); -} - -/** Render an explanation as HTML. */ -///todo: mem leaks -TCHAR* Explanation::toHtml() { - StringBuffer buffer; - TCHAR* tmp; - buffer.append(_T("

    \n")); - - buffer.append(_T("
  • ")); - buffer.appendFloat(getValue(),2); - buffer.append(_T(" = ")); - - buffer.append(getDescription()); - buffer.append(_T("
  • \n")); - - for ( uint32_t i=0;itoHtml(); - buffer.append(tmp); - _CLDELETE_CARRAY(tmp); - } - buffer.append(_T("
\n")); - - return buffer.toString(); -} -CL_NS_END diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/search/Explanation.h qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/search/Explanation.h --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/search/Explanation.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/search/Explanation.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,66 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#ifndef _lucene_search_Explanation -#define _lucene_search_Explanation - -#if defined(_LUCENE_PRAGMA_ONCE) -# pragma once -#endif - -CL_NS_DEF(search) - - #define LUCENE_SEARCH_EXPLANATION_DESC_LEN 200 - class Explanation :LUCENE_BASE { - private: - qreal value; // the value of this node - TCHAR description[LUCENE_SEARCH_EXPLANATION_DESC_LEN]; // what it represents - CL_NS(util)::CLArrayList > details; // sub-explanations - - TCHAR* toString(int32_t depth); - protected: - Explanation(const Explanation& copy); - public: - Explanation(); - ~Explanation(); - - Explanation(qreal value, const TCHAR* description); - void set(const Explanation& other); - - Explanation* clone() const; - - /** The value assigned to this explanation node. */ - qreal getValue() const; - - /** Sets the value assigned to this explanation node. */ - void setValue(qreal value); - - /** A description of this explanation node. */ - const TCHAR* getDescription() const; ///count = count; - this->order = values; - this->lookup = lookup; - } - - ~StringIndex(){ - _CLDELETE_ARRAY(order); - - for ( int i=0;ifield as integers and returns an array - * of size reader.maxDoc() of the value each document - * has in the given field. - * @param reader Used to get field values. - * @param field Which field contains the integers. - * @return The values in the given field for each document. - * @throws IOException If any error occurs. - */ - virtual FieldCacheAuto* getInts (CL_NS(index)::IndexReader* reader, const TCHAR* field) = 0; - - /** Checks the internal cache for an appropriate entry, and if - * none is found, reads the terms in field as floats and returns an array - * of size reader.maxDoc() of the value each document - * has in the given field. - * @param reader Used to get field values. - * @param field Which field contains the floats. - * @return The values in the given field for each document. - * @throws IOException If any error occurs. - */ - virtual FieldCacheAuto* getFloats (CL_NS(index)::IndexReader* reader, const TCHAR* field) = 0; - - /** Checks the internal cache for an appropriate entry, and if none - * is found, reads the term values in field and returns an array - * of size reader.maxDoc() containing the value each document - * has in the given field. - * @param reader Used to get field values. - * @param field Which field contains the strings. - * @return The values in the given field for each document. - * @throws IOException If any error occurs. - */ - virtual FieldCacheAuto* getStrings (CL_NS(index)::IndexReader* reader, const TCHAR* field) = 0; - - /** Checks the internal cache for an appropriate entry, and if none - * is found reads the term values in field and returns - * an array of them in natural order, along with an array telling - * which element in the term array each document uses. - * @param reader Used to get field values. - * @param field Which field contains the strings. - * @return Array of terms and index into the array for each document. - * @throws IOException If any error occurs. - */ - virtual FieldCacheAuto* getStringIndex (CL_NS(index)::IndexReader* reader, const TCHAR* field) = 0; - - /** Checks the internal cache for an appropriate entry, and if - * none is found reads field to see if it contains integers, floats - * or strings, and then calls one of the other methods in this class to get the - * values. For string values, a FieldCache::StringIndex is returned. After - * calling this method, there is an entry in the cache for both - * type AUTO and the actual found type. - * @param reader Used to get field values. - * @param field Which field contains the values. - * @return int32_t[], qreal[] or FieldCache::StringIndex. - * @throws IOException If any error occurs. - */ - virtual FieldCacheAuto* getAuto (CL_NS(index)::IndexReader* reader, const TCHAR* field) = 0; - - /** Checks the internal cache for an appropriate entry, and if none - * is found reads the terms out of field and calls the given SortComparator - * to get the sort values. A hit in the cache will happen if reader, - * field, and comparator are the same (using equals()) - * as a previous call to this method. - * @param reader Used to get field values. - * @param field Which field contains the values. - * @param comparator Used to convert terms into something to sort by. - * @return Array of sort objects, one for each document. - * @throws IOException If any error occurs. - */ - virtual FieldCacheAuto* getCustom (CL_NS(index)::IndexReader* reader, const TCHAR* field, SortComparator* comparator) = 0; -}; - -/** A class holding an AUTO field. In java lucene an Object - is used, but we use this. - contentType: - 1 - integer array - 2 - float array - 3 - FieldCache::StringIndex object - This class is also used when returning getInt, getFloat, etc - because we have no way of returning the size of the array and this - class can be used to determine the array size -*/ -class FieldCacheAuto:LUCENE_BASE{ -public: - enum{ - INT_ARRAY=1, - FLOAT_ARRAY=2, - STRING_INDEX=3, - STRING_ARRAY=4, - COMPARABLE_ARRAY=5, - SORT_COMPARATOR=6, - SCOREDOC_COMPARATOR=7 - }; - - FieldCacheAuto(int32_t len, int32_t type); - ~FieldCacheAuto(); - ///if contents should be deleted too, depending on type - bool ownContents; - int32_t contentLen; //number of items in the list - uint8_t contentType; - int32_t* intArray; //item 1 - qreal* floatArray; //item 2 - FieldCache::StringIndex* stringIndex; //item 3 - TCHAR** stringArray; //item 4 - CL_NS(util)::Comparable** comparableArray; //item 5 - SortComparator* sortComparator; //item 6 - ScoreDocComparator* scoreDocComparator; //item 7 - -}; - - -CL_NS_END - -#endif diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/search/FieldCacheImpl.cpp qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/search/FieldCacheImpl.cpp --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/search/FieldCacheImpl.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/search/FieldCacheImpl.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,529 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#include "CLucene/StdHeader.h" -#include "FieldCacheImpl.h" - -CL_NS_USE(util) -CL_NS_USE(index) -CL_NS_DEF(search) - -FieldCacheImpl::FieldCacheImpl(): - cache(false,true){ -} -FieldCacheImpl::~FieldCacheImpl(){ - cache.clear(); -} - -FieldCacheImpl::FileEntry::FileEntry (const TCHAR* field, int32_t type) { - this->field = CLStringIntern::intern(field CL_FILELINE); - this->type = type; - this->custom = NULL; - this->_hashCode = 0; - } - - /** Creates one of these objects for a custom comparator. */ - FieldCacheImpl::FileEntry::FileEntry (const TCHAR* field, SortComparatorSource* custom) { - this->field = CLStringIntern::intern(field CL_FILELINE); - this->type = SortField::CUSTOM; - this->custom = custom; - this->_hashCode = 0; - } - FieldCacheImpl::FileEntry::~FileEntry(){ - CLStringIntern::unintern(field); - } - - size_t FieldCacheImpl::FileEntry::hashCode(){ - if ( _hashCode == 0 ){ - //todo: cache hashcode? - size_t ret = Misc::thashCode(field); - if ( custom != NULL ) - ret = ret ^ custom->hashCode(); - ret = ret ^ (type*7); //type with a seed - _hashCode = ret; - } - return _hashCode; - } - int32_t FieldCacheImpl::FileEntry::compareTo(const FieldCacheImpl::FileEntry* other) const{ - if ( other->field == this->field ){ - if ( other->type == this->type ){ - if ( other->custom == NULL ){ - if ( this->custom == NULL ) - return 0; //both null - else - return 1; - }else if ( this->custom == NULL ) - return -1; - else if ( other->custom < this->custom ) - return -1; - else if ( other->custom > this->custom ) - return 1; - else - return 0; - }else if ( other->type > this->type ) - return 1; - else - return -1; - - }else - return _tcscmp(other->field,this->field); - } - - /** Two of these are equal iff they reference the same field and type. */ - /*bool FieldCacheImpl::FileEntry::equals (FileEntry* other) { - if (other->field == field && other->type == type) { - if (other->custom == NULL) { - if (custom == NULL) - return true; - } else if (other->custom->equals (custom)) { - return true; - } - } - }*/ - - /** Composes a hashcode based on the field and type. */ - /*size_t FieldCacheImpl::FileEntry::hashCode() { - return field->hashCode() ^ type ^ (custom==NULL ? 0 : custom->hashCode()); - }*/ - - - - - - /** See if an object is in the cache. */ - FieldCacheAuto* FieldCacheImpl::lookup (IndexReader* reader, const TCHAR* field, int32_t type) { - FieldCacheAuto* ret = NULL; - FileEntry* entry = _CLNEW FileEntry (field, type); - { - SCOPED_LOCK_MUTEX(THIS_LOCK) - fieldcacheCacheReaderType* readerCache = cache.get(reader); - if (readerCache != NULL) - ret = readerCache->get (entry); - _CLDELETE(entry); - } - return ret; - } - - - /** See if a custom object is in the cache. */ - FieldCacheAuto* FieldCacheImpl::lookup (IndexReader* reader, const TCHAR* field, SortComparatorSource* comparer) { - FieldCacheAuto* ret = NULL; - FileEntry* entry = _CLNEW FileEntry (field, comparer); - { - SCOPED_LOCK_MUTEX(THIS_LOCK) - fieldcacheCacheReaderType* readerCache = cache.get(reader); - if (readerCache != NULL) - ret = readerCache->get (entry); - _CLDELETE(entry); -} - return ret; - } - - void FieldCacheImpl::closeCallback(CL_NS(index)::IndexReader* reader, void* fieldCacheImpl){ - FieldCacheImpl* fci = (FieldCacheImpl*)fieldCacheImpl; - SCOPED_LOCK_MUTEX(fci->THIS_LOCK) - fci->cache.remove(reader); - } - - /** Put an object into the cache. */ - void FieldCacheImpl::store (IndexReader* reader, const TCHAR* field, int32_t type, FieldCacheAuto* value) { - FileEntry* entry = _CLNEW FileEntry (field, type); - { - SCOPED_LOCK_MUTEX(THIS_LOCK) - fieldcacheCacheReaderType* readerCache = cache.get(reader); - if (readerCache == NULL) { - readerCache = _CLNEW fieldcacheCacheReaderType; - cache.put(reader,readerCache); - reader->addCloseCallback(closeCallback, this); - } - readerCache->put (entry, value); - //this is supposed to return the previous value, but it needs to be deleted!!! - } - } - - /** Put a custom object into the cache. */ - void FieldCacheImpl::store (IndexReader* reader, const TCHAR* field, SortComparatorSource* comparer, FieldCacheAuto* value) { - FileEntry* entry = _CLNEW FileEntry (field, comparer); - { - SCOPED_LOCK_MUTEX(THIS_LOCK) - fieldcacheCacheReaderType* readerCache = cache.get(reader); - if (readerCache == NULL) { - readerCache = _CLNEW fieldcacheCacheReaderType; - cache.put(reader, readerCache); - reader->addCloseCallback(FieldCacheImpl::closeCallback, this); - } - readerCache->put(entry, value); - //this is supposed to return the previous value, but it needs to be deleted!!! - } - } - - - - - - // inherit javadocs - FieldCacheAuto* FieldCacheImpl::getInts (IndexReader* reader, const TCHAR* field) { - field = CLStringIntern::intern(field CL_FILELINE); - FieldCacheAuto* ret = lookup (reader, field, SortField::INT); - if (ret == NULL) { - int32_t retLen = reader->maxDoc(); - int32_t* retArray = _CL_NEWARRAY(int32_t,retLen); - memset(retArray,0,sizeof(int32_t)*retLen); - if (retLen > 0) { - TermDocs* termDocs = reader->termDocs(); - - Term* term = _CLNEW Term (field, LUCENE_BLANK_STRING, false); - TermEnum* termEnum = reader->terms (term); - _CLDECDELETE(term); - try { - if (termEnum->term(false) == NULL) { - _CLTHROWA(CL_ERR_Runtime,"no terms in field"); //todo: add detailed error: + field); - } - do { - Term* term = termEnum->term(false); - if (term->field() != field) - break; - - TCHAR* end; - int32_t termval = (int32_t)_tcstoi64(term->text(), &end, 10); - termDocs->seek (termEnum); - while (termDocs->next()) { - retArray[termDocs->doc()] = termval; - } - } while (termEnum->next()); - } _CLFINALLY( - termDocs->close(); - _CLDELETE(termDocs); - termEnum->close(); - _CLDELETE(termEnum); - ) - } - - FieldCacheAuto* fa = _CLNEW FieldCacheAuto(retLen,FieldCacheAuto::INT_ARRAY); - fa->intArray = retArray; - - store (reader, field, SortField::INT, fa); - CLStringIntern::unintern(field); - return fa; - } - CLStringIntern::unintern(field); - return ret; - } - - // inherit javadocs - FieldCacheAuto* FieldCacheImpl::getFloats (IndexReader* reader, const TCHAR* field){ - field = CLStringIntern::intern(field CL_FILELINE); - FieldCacheAuto* ret = lookup (reader, field, SortField::FLOAT); - if (ret == NULL) { - int32_t retLen = reader->maxDoc(); - qreal* retArray = _CL_NEWARRAY(qreal,retLen); - memset(retArray,0,sizeof(qreal)*retLen); - if (retLen > 0) { - TermDocs* termDocs = reader->termDocs(); - - Term* term = _CLNEW Term (field, LUCENE_BLANK_STRING, false); - TermEnum* termEnum = reader->terms (term); - _CLDECDELETE(term); - - try { - if (termEnum->term(false) == NULL) { - _CLTHROWA(CL_ERR_Runtime,"no terms in field "); //todo: make richer error + field); - } - do { - Term* term = termEnum->term(false); - if (term->field() != field) - break; - - TCHAR* tmp; - qreal termval = _tcstod(term->text(),&tmp); - termDocs->seek (termEnum); - while (termDocs->next()) { - retArray[termDocs->doc()] = termval; - } - } while (termEnum->next()); - } _CLFINALLY( - termDocs->close(); - _CLDELETE(termDocs); - termEnum->close(); - _CLDELETE(termEnum); - ) - } - - FieldCacheAuto* fa = _CLNEW FieldCacheAuto(retLen,FieldCacheAuto::FLOAT_ARRAY); - fa->floatArray = retArray; - - store (reader, field, SortField::FLOAT, fa); - CLStringIntern::unintern(field); - return fa; - } - CLStringIntern::unintern(field); - return ret; - } - - - // inherit javadocs - FieldCacheAuto* FieldCacheImpl::getStrings (IndexReader* reader, const TCHAR* field){ - //todo: this is not really used, i think? - field = CLStringIntern::intern(field CL_FILELINE); - FieldCacheAuto* ret = lookup (reader, field, SortField::STRING); - if (ret == NULL) { - int32_t retLen = reader->maxDoc(); - TCHAR** retArray = _CL_NEWARRAY(TCHAR*,retLen+1); - memset(retArray,0,sizeof(TCHAR*)*(retLen+1)); - if (retLen > 0) { - TermDocs* termDocs = reader->termDocs(); - - Term* term = _CLNEW Term (field, LUCENE_BLANK_STRING, false); - TermEnum* termEnum = reader->terms (term); - _CLDECDELETE(term); - - try { - if (termEnum->term(false) == NULL) { - _CLTHROWA(CL_ERR_Runtime,"no terms in field "); //todo: extend to + field); - } - do { - Term* term = termEnum->term(false); - if (term->field() != field) - break; - const TCHAR* termval = term->text(); - termDocs->seek (termEnum); - while (termDocs->next()) { - retArray[termDocs->doc()] = STRDUP_TtoT(termval); //todo: any better way of doing this??? - } - } while (termEnum->next()); - } _CLFINALLY( - retArray[retLen]=NULL; - termDocs->close(); - _CLDELETE(termDocs); - termEnum->close(); - _CLDELETE(termEnum); - ) - } - - - FieldCacheAuto* fa = _CLNEW FieldCacheAuto(retLen,FieldCacheAuto::STRING_ARRAY); - fa->stringArray = retArray; - fa->ownContents=true; - store (reader, field, SortField::STRING, fa); - CLStringIntern::unintern(field); - return fa; - } - CLStringIntern::unintern(field); - return ret; - } - - // inherit javadocs - FieldCacheAuto* FieldCacheImpl::getStringIndex (IndexReader* reader, const TCHAR* field){ - field = CLStringIntern::intern(field CL_FILELINE); - FieldCacheAuto* ret = lookup (reader, field, STRING_INDEX); - int32_t t = 0; // current term number - if (ret == NULL) { - int32_t retLen = reader->maxDoc(); - int32_t* retArray = _CL_NEWARRAY(int32_t,retLen); - memset(retArray,0,sizeof(int32_t)*retLen); - - TCHAR** mterms = _CL_NEWARRAY(TCHAR*,retLen+2); - mterms[0]=NULL; - if ( retLen > 0 ) { - TermDocs* termDocs = reader->termDocs(); - - Term* term = _CLNEW Term (field, LUCENE_BLANK_STRING, false); - TermEnum* termEnum = reader->terms (term); - _CLDECDELETE(term); - - - CND_PRECONDITION(t+1 <= retLen, "t out of bounds"); - - // an entry for documents that have no terms in this field - // should a document with no terms be at top or bottom? - // this puts them at the top - if it is changed, FieldDocSortedHitQueue - // needs to change as well. - mterms[t++] = NULL; - - try { - if (termEnum->term(false) == NULL) { - _CLTHROWA(CL_ERR_Runtime,"no terms in field"); //todo: make rich message " + field); - } - do { - Term* term = termEnum->term(false); - if (term->field() != field) - break; - - // store term text - // we expect that there is at most one term per document - if (t >= retLen+1) - _CLTHROWA(CL_ERR_Runtime,"there are more terms than documents in field"); //todo: rich error \"" + field + "\""); - mterms[t] = STRDUP_TtoT(term->text()); - - termDocs->seek (termEnum); - while (termDocs->next()) { - retArray[termDocs->doc()] = t; - } - - t++; - } while (termEnum->next()); - CND_PRECONDITION(tclose(); - _CLDELETE(termDocs); - termEnum->close(); - _CLDELETE(termEnum); - ); - - if (t == 0) { - // if there are no terms, make the term array - // have a single NULL entry - _CLDELETE_ARRAY(mterms); - mterms = _CL_NEWARRAY(TCHAR*,1); //todo: delete old mterms? - mterms[0]=NULL; - } else if (t < retLen) { //todo: check, was mterms.length - // if there are less terms than documents, - // trim off the dead array space - //const TCHAR** terms = _CL_NEWARRAY(TCHAR,t); - //System.arraycopy (mterms, 0, terms, 0, t); - //mterms = terms; - - //we simply shorten the length of the array... - - } - } - FieldCache::StringIndex* value = _CLNEW FieldCache::StringIndex (retArray, mterms,t); - - FieldCacheAuto* fa = _CLNEW FieldCacheAuto(retLen,FieldCacheAuto::STRING_INDEX); - fa->stringIndex = value; - fa->ownContents=true; - store (reader, field, STRING_INDEX, fa); - CLStringIntern::unintern(field); - return fa; - } - CLStringIntern::unintern(field); - return ret; - } - - // inherit javadocs - FieldCacheAuto* FieldCacheImpl::getAuto (IndexReader* reader, const TCHAR* field) { - field = CLStringIntern::intern(field CL_FILELINE); - FieldCacheAuto* ret = lookup (reader, field, SortField::AUTO); - if (ret == NULL) { - Term* term = _CLNEW Term (field, LUCENE_BLANK_STRING, false); - TermEnum* enumerator = reader->terms (term); - _CLDECDELETE(term); - - try { - Term* term = enumerator->term(false); - if (term == NULL) { - _CLTHROWA(CL_ERR_Runtime,"no terms in field - cannot determine sort type"); //todo: make rich error: " + field + " - } - if (term->field() == field) { - const TCHAR* termtext = term->text(); - size_t termTextLen = term->textLength(); - - bool isint=true; - for ( size_t i=0;iclose(); _CLDELETE(enumerator) ); - - } - CLStringIntern::unintern(field); - return ret; - } - - - // inherit javadocs - FieldCacheAuto* FieldCacheImpl::getCustom (IndexReader* reader, const TCHAR* field, SortComparator* comparator){ - field = CLStringIntern::intern(field CL_FILELINE); - - FieldCacheAuto* ret = lookup (reader, field, comparator); - if (ret == NULL) { - int32_t retLen = reader->maxDoc(); - Comparable** retArray = _CL_NEWARRAY(Comparable*,retLen); - memset(retArray,0,sizeof(Comparable*)*retLen); - if (retLen > 0) { - TermDocs* termDocs = reader->termDocs(); - TermEnum* termEnum = reader->terms (); - - try { - if (termEnum->term(false) == NULL) { - _CLTHROWA(CL_ERR_Runtime,"no terms in field "); //todo: make rich error + field); - } - do { - Term* term = termEnum->term(false); - if (term->field() != field) - break; - Comparable* termval = comparator->getComparable (term->text()); - termDocs->seek (termEnum); - while (termDocs->next()) { - retArray[termDocs->doc()] = termval; - } - } while (termEnum->next()); - } _CLFINALLY ( - termDocs->close(); - _CLDELETE(termDocs); - termEnum->close(); - _CLDELETE(termEnum); - ); - } - - FieldCacheAuto* fa = _CLNEW FieldCacheAuto(retLen,FieldCacheAuto::COMPARABLE_ARRAY); - fa->comparableArray = retArray; - fa->ownContents=true; - store (reader, field, SortField::CUSTOM, fa); - CLStringIntern::unintern(field); - return fa; - } - CLStringIntern::unintern(field); - return ret; - } - - - FieldCacheImpl::fieldcacheCacheReaderType::fieldcacheCacheReaderType(){ - setDeleteKey(false); - setDeleteValue(false); - } - FieldCacheImpl::fieldcacheCacheReaderType::~fieldcacheCacheReaderType(){ - iterator itr = begin(); - while ( itr != end() ){ - FileEntry* f = itr->first; - if ( f->getType() != SortField::AUTO ) - _CLDELETE( itr->second ); - _CLDELETE( f ); - ++itr; - } - clear(); - } -CL_NS_END diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/search/FieldCacheImpl.h qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/search/FieldCacheImpl.h --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/search/FieldCacheImpl.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/search/FieldCacheImpl.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,144 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#ifndef _lucene_search_FieldCacheImpl_ -#define _lucene_search_FieldCacheImpl_ - -#if defined(_LUCENE_PRAGMA_ONCE) -# pragma once -#endif - -#include "CLucene/index/IndexReader.h" -#include "FieldCache.h" -#include "Sort.h" - - -CL_NS_DEF(search) - - -/** - * Expert: The default cache implementation, storing all values in memory. - * - */ -class FieldCacheImpl: public FieldCache { -public: - DEFINE_MUTEX(THIS_LOCK) - - /** Expert: Every key in the internal cache is of this type. */ - class FileEntry:LUCENE_BASE { - const TCHAR* field; // which Field - int32_t type; // which SortField type - SortComparatorSource* custom; // which custom comparator - size_t _hashCode; - public: - /** Creates one of these objects. */ - FileEntry (const TCHAR* field, int32_t type); - - /** Creates one of these objects for a custom comparator. */ - FileEntry (const TCHAR* field, SortComparatorSource* custom); - ~FileEntry(); - - int32_t getType() const{ return type; } - - /** Two of these are equal iff they reference the same field and type. */ - bool equals (FileEntry* other) const; - - /** Composes a hashcode based on the field and type. */ - size_t hashCode(); - - int32_t compareTo(const FileEntry* other) const; - - class Compare:LUCENE_BASE, public CL_NS(util)::Compare::_base // - { - public: - bool operator()( FileEntry* f1, FileEntry* f2 ) const{ - return ( f1->compareTo(f2) < 0 ); - } - size_t operator()( FileEntry* t ) const{ - return t->hashCode(); - } - }; - class Equals:LUCENE_BASE, public CL_NS(util)::Compare::_base // - { - public: - bool operator()( FileEntry* f1, FileEntry* f2 ) const{ - return ( f1->compareTo(f2) == 0 ); - } - }; - }; - - FieldCacheImpl(); - ~FieldCacheImpl(); -private: - - ///the type that is stored in the field cache. can't use a typedef because - ///the decorated name would become too long - class fieldcacheCacheReaderType: public CL_NS(util)::CLHashMap, - CL_NS(util)::Deletor::Object >{ - public: - fieldcacheCacheReaderType(); - ~fieldcacheCacheReaderType(); - }; - - //note: typename gets too long if using cacheReaderType as a typename - typedef CL_NS(util)::CLHashMap, - CL_NS(util)::Equals::Void, - CL_NS(util)::Deletor::Object, - CL_NS(util)::Deletor::Object > fieldcacheCacheType; - - /** The internal cache. Maps FileEntry to array of interpreted term values. **/ - //todo: make indexreader remove itself from here when the reader is shut - fieldcacheCacheType cache; - - /** See if an object is in the cache. */ - FieldCacheAuto* lookup (CL_NS(index)::IndexReader* reader, const TCHAR* field, int32_t type) ; - - /** See if a custom object is in the cache. */ - FieldCacheAuto* lookup (CL_NS(index)::IndexReader* reader, const TCHAR* field, SortComparatorSource* comparer); - - /** Put an object into the cache. */ - void store (CL_NS(index)::IndexReader* reader, const TCHAR* field, int32_t type, FieldCacheAuto* value); - - /** Put a custom object into the cache. */ - void store (CL_NS(index)::IndexReader* reader, const TCHAR* field, SortComparatorSource* comparer, FieldCacheAuto* value); - -public: - - // inherit javadocs - FieldCacheAuto* getInts (CL_NS(index)::IndexReader* reader, const TCHAR* field); - - // inherit javadocs - FieldCacheAuto* getFloats (CL_NS(index)::IndexReader* reader, const TCHAR* field); - - // inherit javadocs - FieldCacheAuto* getStrings (CL_NS(index)::IndexReader* reader, const TCHAR* field); - - // inherit javadocs - FieldCacheAuto* getStringIndex (CL_NS(index)::IndexReader* reader, const TCHAR* field); - - // inherit javadocs - FieldCacheAuto* getAuto (CL_NS(index)::IndexReader* reader, const TCHAR* field); - - // inherit javadocs - FieldCacheAuto* getCustom (CL_NS(index)::IndexReader* reader, const TCHAR* field, SortComparator* comparator); - - - /** - * Callback for when IndexReader closes. This causes - * any cache to be removed for the specified reader. - */ - static void closeCallback(CL_NS(index)::IndexReader* reader, void* fieldCacheImpl); -}; - - -CL_NS_END -#endif diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/search/FieldDoc.h qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/search/FieldDoc.h --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/search/FieldDoc.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/search/FieldDoc.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,70 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#ifndef _lucene_search_FieldDoc_ -#define _lucene_search_FieldDoc_ - -#if defined(_LUCENE_PRAGMA_ONCE) -# pragma once -#endif - -#include "ScoreDoc.h" - -CL_NS_DEF(search) - -/** - * Expert: A ScoreDoc which also contains information about - * how to sort the referenced document. In addition to the - * document number and score, this object contains an array - * of values for the document from the field(s) used to sort. - * For example, if the sort criteria was to sort by fields - * "a", "b" then "c", the fields object array - * will have three elements, corresponding respectively to - * the term values for the document in fields "a", "b" and "c". - * The class of each element in the array will be either - * Integer, Float or String depending on the type of values - * in the terms of each field. - * - * @see ScoreDoc - * @see TopFieldDocs - */ -class FieldDoc: public ScoreDoc { -public: - - /** Expert: The values which are used to sort the referenced document. - * The order of these will match the original sort criteria given by a - * Sort object. Each Object will be either an Integer, Float or String, - * depending on the type of values in the terms of the original field. - * @see Sort - * @see Searchable#search(Query,Filter,int32_t,Sort) - */ - CL_NS(util)::Comparable** fields; - - /** Expert: Creates one of these objects with empty sort information. */ - FieldDoc (int32_t doc, qreal score): - ScoreDoc(doc,score) { - fields=NULL; - } - - /** Expert: Creates one of these objects with the given sort information. */ - FieldDoc (int32_t doc, qreal score, CL_NS(util)::Comparable** fields): - ScoreDoc(doc,score) - { - this->fields = fields; - } - - ~FieldDoc(){ - if ( fields != NULL ){ - for ( int i=0;fields[i]!=NULL;i++ ) - _CLDELETE(fields[i]); - _CLDELETE_ARRAY(fields); - } - } -}; - -CL_NS_END -#endif - diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/search/FieldDocSortedHitQueue.cpp qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/search/FieldDocSortedHitQueue.cpp --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/search/FieldDocSortedHitQueue.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/search/FieldDocSortedHitQueue.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,171 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#include "CLucene/StdHeader.h" -#include "FieldDocSortedHitQueue.h" - - -CL_NS_USE(util) -CL_NS_DEF(search) - - -FieldDoc::FieldDoc (int32_t doc, qreal score) -{ - this->scoreDoc.doc = doc; - this->scoreDoc.score = score; - fields=NULL; -} - -FieldDoc::FieldDoc (int32_t doc, qreal score, CL_NS(util)::Comparable** fields) -{ - this->scoreDoc.doc = doc; - this->scoreDoc.score = score; - this->fields = fields; -} - -FieldDoc::~FieldDoc(){ - if ( fields != NULL ){ - for ( int i=0;fields[i]!=NULL;i++ ) - _CLDELETE(fields[i]); - _CLDELETE_ARRAY(fields); - } -} - - - -FieldDocSortedHitQueue::FieldDocSortedHitQueue (SortField** fields, int32_t size) { - this->fields = fields; - _countsize(); - //this->collators = hasCollators (fields); - initialize (size,true); -} - -bool FieldDocSortedHitQueue::lessThan (FieldDoc* docA, FieldDoc* docB) { - int32_t n = fieldsLen; - int32_t c = 0; - qreal f1,f2,r1,r2; - int32_t i1,i2; - const TCHAR *s1, *s2; - - for (int32_t i=0; igetType(); - if (fields[i]->getReverse()) { - switch (type) { - case SortField::DOCSCORE: - r1 = __REINTERPRET_CAST(Compare::Float*, docA->fields[i])->getValue(); - r2 = __REINTERPRET_CAST(Compare::Float*, docB->fields[i])->getValue(); - if (r1 < r2) c = -1; - if (r1 > r2) c = 1; - break; - case SortField::DOC: - case SortField::INT: - i1 = __REINTERPRET_CAST(Compare::Int32*, docA->fields[i])->getValue(); - i2 = __REINTERPRET_CAST(Compare::Int32*, docB->fields[i])->getValue(); - if (i1 > i2) c = -1; - if (i1 < i2) c = 1; - break; - case SortField::STRING: - s1 = __REINTERPRET_CAST(Compare::TChar*, docA->fields[i])->getValue(); - s2 = __REINTERPRET_CAST(Compare::TChar*, docB->fields[i])->getValue(); - if (s2 == NULL) c = -1; // could be NULL if there are - else if (s1 == NULL) c = 1; // no terms in the given field - else c = _tcscmp(s2,s1); //else if (fields[i].getLocale() == NULL) { - - /*todo: collators not impl - } else { - c = collators[i].compare (s2, s1); - }*/ - break; - case SortField::FLOAT: - f1 = __REINTERPRET_CAST(Compare::Float*, docA->fields[i])->getValue(); - f2 = __REINTERPRET_CAST(Compare::Float*, docB->fields[i])->getValue(); - if (f1 > f2) c = -1; - if (f1 < f2) c = 1; - break; - case SortField::CUSTOM: - c = docB->fields[i]->compareTo (docA->fields[i]); - break; - case SortField::AUTO: - // we cannot handle this - even if we determine the type of object (qreal or - // Integer), we don't necessarily know how to compare them (both SCORE and - // qreal both contain floats, but are sorted opposite of each other). Before - // we get here, each AUTO should have been replaced with its actual value. - _CLTHROWA (CL_ERR_Runtime,"FieldDocSortedHitQueue cannot use an AUTO SortField"); - default: - _CLTHROWA (CL_ERR_Runtime, "invalid SortField type"); //todo: rich error... : "+type); - } - } else { - switch (type) { - case SortField::DOCSCORE: - r1 = __REINTERPRET_CAST(Compare::Float*, docA->fields[i])->getValue(); - r2 = __REINTERPRET_CAST(Compare::Float*, docB->fields[i])->getValue(); - if (r1 > r2) c = -1; - if (r1 < r2) c = 1; - break; - case SortField::DOC: - case SortField::INT: - i1 = __REINTERPRET_CAST(Compare::Int32*, docA->fields[i])->getValue(); - i2 = __REINTERPRET_CAST(Compare::Int32*, docB->fields[i])->getValue(); - if (i1 < i2) c = -1; - if (i1 > i2) c = 1; - break; - case SortField::STRING: - s1 = __REINTERPRET_CAST(Compare::TChar*, docA->fields[i])->getValue(); - s2 = __REINTERPRET_CAST(Compare::TChar*, docB->fields[i])->getValue(); - // NULL values need to be sorted first, because of how FieldCache.getStringIndex() - // works - in that routine, any documents without a value in the given field are - // put first. - if (s1 == NULL) c = -1; // could be NULL if there are - else if (s2 == NULL) c = 1; // no terms in the given field - else c = _tcscmp(s1,s2); //else if (fields[i].getLocale() == NULL) { - - /* todo: collators not implemented } else { - c = collators[i].compare (s1, s2); - }*/ - break; - case SortField::FLOAT: - f1 = __REINTERPRET_CAST(Compare::Float*, docA->fields[i])->getValue(); - f2 = __REINTERPRET_CAST(Compare::Float*, docB->fields[i])->getValue(); - if (f1 < f2) c = -1; - if (f1 > f2) c = 1; - break; - case SortField::CUSTOM: - c = docA->fields[i]->compareTo (docB->fields[i]); - break; - case SortField::AUTO: - // we cannot handle this - even if we determine the type of object (qreal or - // Integer), we don't necessarily know how to compare them (both SCORE and - // qreal both contain floats, but are sorted opposite of each other). Before - // we get here, each AUTO should have been replaced with its actual value. - _CLTHROWA (CL_ERR_Runtime,"FieldDocSortedHitQueue cannot use an AUTO SortField"); - default: - _CLTHROWA (CL_ERR_Runtime,"invalid SortField type"); //todo: rich error... : "+type); - } - } - } - return c > 0; -} - -void FieldDocSortedHitQueue::setFields (SortField** fields) { - SCOPED_LOCK_MUTEX(THIS_LOCK) - if (this->fields == NULL) { - this->fields = fields; - _countsize(); - //this->collators = hasCollators (fields); - }else if ( fields == NULL ) - this->fields = NULL; -} - -FieldDocSortedHitQueue::~FieldDocSortedHitQueue(){ - if ( fields != NULL ){ - for ( int i=0;fields[i]!=NULL;i++ ) - _CLDELETE(fields[i]); - _CLDELETE_ARRAY(fields); - } -} - -CL_NS_END - diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/search/FieldDocSortedHitQueue.h qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/search/FieldDocSortedHitQueue.h --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/search/FieldDocSortedHitQueue.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/search/FieldDocSortedHitQueue.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,159 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#ifndef _lucene_search_FieldDocSortedHitQueue_ -#define _lucene_search_FieldDocSortedHitQueue_ - -#if defined(_LUCENE_PRAGMA_ONCE) -# pragma once -#endif - -#include "Sort.h" -#include "CLucene/util/PriorityQueue.h" - -CL_NS_DEF(search) - -/** - * Expert: A ScoreDoc which also contains information about - * how to sort the referenced document. In addition to the - * document number and score, this object contains an array - * of values for the document from the field(s) used to sort. - * For example, if the sort criteria was to sort by fields - * "a", "b" then "c", the fields object array - * will have three elements, corresponding respectively to - * the term values for the document in fields "a", "b" and "c". - * The class of each element in the array will be either - * Integer, Float or String depending on the type of values - * in the terms of each field. - * - * @see ScoreDoc - * @see TopFieldDocs - */ -class FieldDoc: LUCENE_BASE { -public: - //FieldDoc did inherit from ScoreDoc, but now we make the scoredoc a member - struct ScoreDoc scoreDoc; - - /** Expert: The values which are used to sort the referenced document. - * The order of these will match the original sort criteria given by a - * Sort object. Each Object will be either an Integer, Float or String, - * depending on the type of values in the terms of the original field. - * @see Sort - * @see Searchable#search(Query,Filter,int32_t,Sort) - */ - CL_NS(util)::Comparable** fields; - - /** Expert: Creates one of these objects with empty sort information. */ - FieldDoc (int32_t doc, qreal score); - /** Expert: Creates one of these objects with the given sort information. */ - FieldDoc (int32_t doc, qreal score, CL_NS(util)::Comparable** fields); - ~FieldDoc(); -}; - -/** - * Expert: Collects sorted results from Searchable's and collates them. - * The elements put into this queue must be of type FieldDoc. - */ -class FieldDocSortedHitQueue: - public CL_NS(util)::PriorityQueue > -{ -private: - DEFINE_MUTEX(THIS_LOCK) - - // this cannot contain AUTO fields - any AUTO fields should - // have been resolved by the time this class is used. - SortField** fields; - int32_t fieldsLen; - - void _countsize(){ - fieldsLen=0; - while(fields[fieldsLen]!=NULL) - fieldsLen++; - } - - // used in the case where the fields are sorted by locale - // based strings - //todo: not implemented in clucene because locales has not been implemented - //Collator[] collators; //volatile - -public: - /** - * Creates a hit queue sorted by the given list of fields. - * @param fields Field names, in priority order (highest priority first). - * @param size The number of hits to retain. Must be greater than zero. - */ - FieldDocSortedHitQueue (SortField** fields, int32_t size); - ~FieldDocSortedHitQueue(); - - - /** - * Allows redefinition of sort fields if they are NULL. - * This is to handle the case using ParallelMultiSearcher where the - * original list contains AUTO and we don't know the actual sort - * type until the values come back. The fields can only be set once. - * This method is thread safe. - * @param fields - */ - void setFields (SortField** fields); - - /** Returns the fields being used to sort. */ - SortField** getFields() { - return fields; - } - - /** Returns an array of collators, possibly NULL. The collators - * correspond to any SortFields which were given a specific locale. - * @param fields Array of sort fields. - * @return Array, possibly NULL. - - private Collator[] hasCollators (SortField[] fields) { - if (fields == NULL) return NULL; - Collator[] ret = new Collator[fields.length]; - for (int32_t i=0; ia is less relevant than b. - * @param a FieldDoc - * @param b FieldDoc - * @return true if document a should be sorted after document b. - */ - bool lessThan (FieldDoc* docA, FieldDoc* docB); -}; - - -/** -* Expert: Returned by low-level sorted search implementations. -* -* @see Searchable#search(Query,Filter,int32_t,Sort) -*/ -class TopFieldDocs: public TopDocs { -public: - /// The fields which were used to sort results by. - SortField** fields; - - FieldDoc** fieldDocs; - - /** Creates one of these objects. - * @param totalHits Total number of hits for the query. - * @param fieldDocs The top hits for the query. - * @param scoreDocs The top hits for the query. - * @param scoreDocsLen Length of fieldDocs and scoreDocs - * @param fields The sort criteria used to find the top hits. - */ - TopFieldDocs (int32_t totalHits, FieldDoc** fieldDocs, int32_t scoreDocsLen, SortField** fields); - ~TopFieldDocs(); -}; - -CL_NS_END -#endif - diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/search/FieldSortedHitQueue.cpp qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/search/FieldSortedHitQueue.cpp --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/search/FieldSortedHitQueue.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/search/FieldSortedHitQueue.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,212 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#include "CLucene/StdHeader.h" -#include "FieldSortedHitQueue.h" -#include "FieldDocSortedHitQueue.h" -#include "Compare.h" - -CL_NS_USE(util) -CL_NS_USE(index) -CL_NS_DEF(search) - -FieldSortedHitQueue::hitqueueCacheType FieldSortedHitQueue::Comparators(false,true); - -FieldSortedHitQueue::FieldSortedHitQueue (IndexReader* reader, SortField** _fields, int32_t size): - fieldsLen(0), - maxscore(1.0f) -{ - while ( _fields[fieldsLen] != 0 ) - fieldsLen++; - - comparators = _CL_NEWARRAY(ScoreDocComparator*,fieldsLen+1); - SortField** tmp = _CL_NEWARRAY(SortField*,fieldsLen+1); - for (int32_t i=0; igetField(); - //todo: fields[i].getLocale(), not implemented - comparators[i] = getCachedComparator (reader, fieldname, _fields[i]->getType(), _fields[i]->getFactory()); - tmp[i] = _CLNEW SortField (fieldname, comparators[i]->sortType(), _fields[i]->getReverse()); - } - comparatorsLen = fieldsLen; - comparators[fieldsLen]=NULL; - tmp[fieldsLen] = NULL; - this->fields = tmp; - - initialize(size,true); -} - - -bool FieldSortedHitQueue::lessThan (FieldDoc* docA, FieldDoc* docB) { - // keep track of maximum score - if (docA->scoreDoc.score > maxscore) maxscore = docA->scoreDoc.score; - if (docB->scoreDoc.score > maxscore) maxscore = docB->scoreDoc.score; - - // run comparators - int32_t c = 0; - for ( int32_t i=0; c==0 && igetReverse()) ? comparators[i]->compare (&docB->scoreDoc, &docA->scoreDoc) : - comparators[i]->compare (&docA->scoreDoc, &docB->scoreDoc); - } - // avoid random sort order that could lead to duplicates (bug #31241): - if (c == 0) - return docA->scoreDoc.doc > docB->scoreDoc.doc; - return c > 0; -} - - -//static -ScoreDocComparator* FieldSortedHitQueue::comparatorString (IndexReader* reader, const TCHAR* field) { - //const TCHAR* field = CLStringIntern::intern(fieldname CL_FILELINE); - FieldCacheAuto* fa = FieldCache::DEFAULT->getStringIndex (reader, field); - //CLStringIntern::unintern(field); - - CND_PRECONDITION(fa->contentType==FieldCacheAuto::STRING_INDEX,"Content type is incorrect"); - fa->ownContents = false; - return _CLNEW ScoreDocComparators::String(fa->stringIndex, fa->contentLen); -} - -//static -ScoreDocComparator* FieldSortedHitQueue::comparatorInt (IndexReader* reader, const TCHAR* field){ - //const TCHAR* field = CLStringIntern::intern(fieldname CL_FILELINE); - FieldCacheAuto* fa = FieldCache::DEFAULT->getInts (reader, field); - //CLStringIntern::unintern(field); - - CND_PRECONDITION(fa->contentType==FieldCacheAuto::INT_ARRAY,"Content type is incorrect"); - return _CLNEW ScoreDocComparators::Int32(fa->intArray, fa->contentLen); - } - -//static - ScoreDocComparator* FieldSortedHitQueue::comparatorFloat (IndexReader* reader, const TCHAR* field) { - //const TCHAR* field = CLStringIntern::intern(fieldname CL_FILELINE); - FieldCacheAuto* fa = FieldCache::DEFAULT->getFloats (reader, field); - //CLStringIntern::unintern(field); - - CND_PRECONDITION(fa->contentType==FieldCacheAuto::FLOAT_ARRAY,"Content type is incorrect"); - return _CLNEW ScoreDocComparators::Float (fa->floatArray, fa->contentLen); - } -//static - ScoreDocComparator* FieldSortedHitQueue::comparatorAuto (IndexReader* reader, const TCHAR* field){ - //const TCHAR* field = CLStringIntern::intern(fieldname CL_FILELINE); - FieldCacheAuto* fa = FieldCache::DEFAULT->getAuto (reader, field); - //CLStringIntern::unintern(field); - - if (fa->contentType == FieldCacheAuto::STRING_INDEX ) { - return comparatorString (reader, field); - } else if (fa->contentType == FieldCacheAuto::INT_ARRAY) { - return comparatorInt (reader, field); - } else if (fa->contentType == FieldCacheAuto::FLOAT_ARRAY) { - return comparatorFloat (reader, field); - } else if (fa->contentType == FieldCacheAuto::STRING_ARRAY) { - return comparatorString (reader, field); - } else { - _CLTHROWA(CL_ERR_Runtime, "unknown data type in field"); //todo: rich error information: '"+field+"'"); - } - } - - - //todo: Locale locale, not implemented yet - ScoreDocComparator* FieldSortedHitQueue::getCachedComparator (IndexReader* reader, const TCHAR* fieldname, int32_t type, SortComparatorSource* factory){ - if (type == SortField::DOC) - return ScoreDocComparator::INDEXORDER; - if (type == SortField::DOCSCORE) - return ScoreDocComparator::RELEVANCE; - ScoreDocComparator* comparator = lookup (reader, fieldname, type, factory); - if (comparator == NULL) { - switch (type) { - case SortField::AUTO: - comparator = comparatorAuto (reader, fieldname); - break; - case SortField::INT: - comparator = comparatorInt (reader, fieldname); - break; - case SortField::FLOAT: - comparator = comparatorFloat (reader, fieldname); - break; - case SortField::STRING: - //if (locale != NULL) - // comparator = comparatorStringLocale (reader, fieldname, locale); - //else - comparator = comparatorString (reader, fieldname); - break; - case SortField::CUSTOM: - comparator = factory->newComparator (reader, fieldname); - break; - default: - _CLTHROWA(CL_ERR_Runtime,"unknown field type"); - //todo: extend error - //throw _CLNEW RuntimeException ("unknown field type: "+type); - } - store (reader, fieldname, type, factory, comparator); - } - return comparator; - } - - - FieldDoc* FieldSortedHitQueue::fillFields (FieldDoc* doc) const{ - int32_t n = comparatorsLen; - Comparable** fields = _CL_NEWARRAY(Comparable*,n+1); - for (int32_t i=0; isortValue(&doc->scoreDoc); - fields[n]=NULL; - doc->fields = fields; - if (maxscore > 1.0f) - doc->scoreDoc.score /= maxscore; // normalize scores - return doc; - } - - ScoreDocComparator* FieldSortedHitQueue::lookup (IndexReader* reader, const TCHAR* field, int32_t type, SortComparatorSource* factory) { - ScoreDocComparator* sdc = NULL; - FieldCacheImpl::FileEntry* entry = (factory != NULL) - ? _CLNEW FieldCacheImpl::FileEntry (field, factory) - : _CLNEW FieldCacheImpl::FileEntry (field, type); - - { - SCOPED_LOCK_MUTEX(Comparators.THIS_LOCK) - hitqueueCacheReaderType* readerCache = Comparators.get(reader); - if (readerCache == NULL){ - _CLDELETE(entry); - return NULL; - } - - sdc = readerCache->get (entry); - _CLDELETE(entry); - } - return sdc; - } - - void FieldSortedHitQueue::closeCallback(CL_NS(index)::IndexReader* reader, void*){ - SCOPED_LOCK_MUTEX(Comparators.THIS_LOCK) - Comparators.remove(reader); - } - - //static - void FieldSortedHitQueue::store (IndexReader* reader, const TCHAR* field, int32_t type, SortComparatorSource* factory, ScoreDocComparator* value) { - FieldCacheImpl::FileEntry* entry = (factory != NULL) - ? _CLNEW FieldCacheImpl::FileEntry (field, factory) - : _CLNEW FieldCacheImpl::FileEntry (field, type); - - { - SCOPED_LOCK_MUTEX(Comparators.THIS_LOCK) - hitqueueCacheReaderType* readerCache = Comparators.get(reader); - if (readerCache == NULL) { - readerCache = _CLNEW hitqueueCacheReaderType(true); - Comparators.put(reader,readerCache); - reader->addCloseCallback(FieldSortedHitQueue::closeCallback,NULL); - } - readerCache->put (entry, value); - //return NULL; //supposed to return previous value... - } - } - -FieldSortedHitQueue::~FieldSortedHitQueue(){ - _CLDELETE_ARRAY(comparators); - if ( fields != NULL ){ - for ( int i=0;fields[i]!=NULL;i++ ) - _CLDELETE(fields[i]); - _CLDELETE_ARRAY(fields); - } -} -CL_NS_END diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/search/FieldSortedHitQueue.h qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/search/FieldSortedHitQueue.h --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/search/FieldSortedHitQueue.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/search/FieldSortedHitQueue.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,216 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#ifndef _lucene_search_FieldSortedHitQueue_ -#define _lucene_search_FieldSortedHitQueue_ - -#if defined(_LUCENE_PRAGMA_ONCE) -# pragma once -#endif - -#include "FieldCache.h" -#include "Sort.h" -#include "FieldDocSortedHitQueue.h" -#include "SearchHeader.h" -#include "FieldCacheImpl.h" -#include "CLucene/util/PriorityQueue.h" - -CL_NS_DEF(search) - - -/** - * Expert: A hit queue for sorting by hits by terms in more than one field. - * Uses FieldCache.DEFAULT for maintaining internal term lookup tables. - * - * @see Searchable#search(Query,Filter,int32_t,Sort) - * @see FieldCache - */ -class FieldSortedHitQueue: public CL_NS(util)::PriorityQueue > { - - ///the type that is stored in the field cache. can't use a typedef because - ///the decorated name would become too long - class hitqueueCacheReaderType: public CL_NS(util)::CLHashMap, - CL_NS(util)::Deletor::Object >{ - - public: - hitqueueCacheReaderType(bool deleteValue){ - setDeleteKey(true); - setDeleteValue(deleteValue); - } - ~hitqueueCacheReaderType(){ - clear(); - } - - }; - -public: //todo: remove this and below after close callback is implemented - //note: typename gets too long if using cacheReaderType as a typename - typedef CL_NS(util)::CLHashMap, - CL_NS(util)::Equals::Void, - CL_NS(util)::Deletor::Object, - CL_NS(util)::Deletor::Object > hitqueueCacheType; - - /** Internal cache of comparators. Similar to FieldCache, only - * caches comparators instead of term values. - */ - static hitqueueCacheType Comparators; -private: - - /** Returns a comparator if it is in the cache.*/ - static ScoreDocComparator* lookup (CL_NS(index)::IndexReader* reader, const TCHAR* field, int32_t type, SortComparatorSource* factory); - - /** Stores a comparator into the cache. - returns the valid ScoreDocComparator. - */ - static void store (CL_NS(index)::IndexReader* reader, const TCHAR* field, int32_t type, SortComparatorSource* factory, ScoreDocComparator* value); - - - //todo: Locale locale, not implemented yet - static ScoreDocComparator* getCachedComparator (CL_NS(index)::IndexReader* reader, - const TCHAR* fieldname, int32_t type, SortComparatorSource* factory); - - - /** - * Returns a comparator for sorting hits according to a field containing integers. - * @param reader Index to use. - * @param fieldname Field containg integer values. - * @return Comparator for sorting hits. - * @throws IOException If an error occurs reading the index. - */ - static ScoreDocComparator* comparatorInt (CL_NS(index)::IndexReader* reader, const TCHAR* fieldname); - - /** - * Returns a comparator for sorting hits according to a field containing floats. - * @param reader Index to use. - * @param fieldname Field containg float values. - * @return Comparator for sorting hits. - * @throws IOException If an error occurs reading the index. - */ - static ScoreDocComparator* comparatorFloat (CL_NS(index)::IndexReader* reader, const TCHAR* fieldname); - - /** - * Returns a comparator for sorting hits according to a field containing strings. - * @param reader Index to use. - * @param fieldname Field containg string values. - * @return Comparator for sorting hits. - * @throws IOException If an error occurs reading the index. - */ - static ScoreDocComparator* comparatorString (CL_NS(index)::IndexReader* reader, const TCHAR* fieldname); - - - //todo: - /** - * Returns a comparator for sorting hits according to a field containing strings. - * @param reader Index to use. - * @param fieldname Field containg string values. - * @return Comparator for sorting hits. - * @throws IOException If an error occurs reading the index. - - static ScoreDocComparator* comparatorStringLocale (IndexReader* reader, TCHAR* fieldname, Locale locale){ - Collator collator = Collator.getInstance (locale); - TCHAR* field = fieldname.intern(); - TCHAR** index = FieldCache.DEFAULT.getStrings (reader, field); - return _CLNEW ScoreDocComparator() { - - public int32_t compare (ScoreDoc i, ScoreDoc j) { - return collator.compare (index[i.doc], index[j.doc]); - } - - public Comparable sortValue (ScoreDoc i) { - return index[i.doc]; - } - - public int32_t sortType() { - return SortField.STRING; - } - }; - }*/ - - /** - * Returns a comparator for sorting hits according to values in the given field. - * The terms in the field are looked at to determine whether they contain integers, - * floats or strings. Once the type is determined, one of the other static methods - * in this class is called to get the comparator. - * @param reader Index to use. - * @param fieldname Field containg values. - * @return Comparator for sorting hits. - * @throws IOException If an error occurs reading the index. - */ - static ScoreDocComparator* comparatorAuto (CL_NS(index)::IndexReader* reader, const TCHAR* fieldname); - - -protected: - /** Stores a comparator corresponding to each field being sorted by */ - ScoreDocComparator** comparators; - int32_t comparatorsLen; - - /** Stores the sort criteria being used. */ - SortField** fields; - int32_t fieldsLen; - - /** Stores the maximum score value encountered, for normalizing. - * we only care about scores greater than 1.0 - if all the scores - * are less than 1.0, we don't have to normalize. */ - qreal maxscore; - - /** - * Returns whether a is less relevant than b. - * @param a ScoreDoc - * @param b ScoreDoc - * @return true if document a should be sorted after document b. - */ - bool lessThan (FieldDoc* docA, FieldDoc* docB); -public: - - /** - * Creates a hit queue sorted by the given list of fields. - * @param reader Index to use. - * @param fields Field names, in priority order (highest priority first). Cannot be null or empty. - * @param size The number of hits to retain. Must be greater than zero. - * @throws IOException - */ - FieldSortedHitQueue (CL_NS(index)::IndexReader* reader, SortField** fields, int32_t size); - - ~FieldSortedHitQueue(); - - /** - * Callback for when IndexReader closes. This causes - * any Comparators to be removed for the specified reader. - */ - static void closeCallback(CL_NS(index)::IndexReader* reader, void* param); - - /** - * Given a FieldDoc object, stores the values used - * to sort the given document. These values are not the raw - * values out of the index, but the internal representation - * of them. This is so the given search hit can be collated - * by a MultiSearcher with other search hits. - * @param doc The FieldDoc to store sort values into. - * @return The same FieldDoc passed in. - * @see Searchable#search(Query,Filter,int32_t,Sort) - */ - FieldDoc* fillFields (FieldDoc* doc) const; - - void setFields (SortField** fields){ - this->fields = fields; - } - - /** Returns the SortFields being used by this hit queue. */ - SortField** getFields() { - return fields; - } -}; - - -CL_NS_END -#endif diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/search/FilteredTermEnum.cpp qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/search/FilteredTermEnum.cpp --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/search/FilteredTermEnum.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/search/FilteredTermEnum.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,136 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#include "CLucene/StdHeader.h" - -#include "FilteredTermEnum.h" - -CL_NS_USE(index) -CL_NS_DEF(search) - - - FilteredTermEnum::FilteredTermEnum(){ - //Func - Constructor - //Pre - true - //Post - Instance has been created - - currentTerm = NULL; - actualEnum = NULL; - } - - FilteredTermEnum::~FilteredTermEnum() { - //Func - Destructor - //Pre - true - //Post - The instance has been destroyed - - close(); - } - - int32_t FilteredTermEnum::docFreq() const { - //Func - Returns the docFreq of the current Term in the enumeration. - //Pre - next() must have been called at least once - //Post - if actualEnum is NULL result is -1 otherwise the frequencey is returned - - if (actualEnum == NULL){ - return -1; - } - return actualEnum->docFreq(); - } - - bool FilteredTermEnum::next() { - //Func - Increments the enumeration to the next element. - //Pre - true - //Post - Returns True if the enumeration has been moved to the next element otherwise false - - //The actual enumerator is not initialized! - if (actualEnum == NULL){ - return false; - } - - //Finalize the currentTerm and reset it to NULL - _CLDECDELETE( currentTerm ); - - //Iterate through the enumeration - while (currentTerm == NULL) { - if (endEnum()) - return false; - if (actualEnum->next()) { - //Order term not to return reference ownership here. */ - Term* term = actualEnum->term(false); - //Compare the retrieved term - if (termCompare(term)){ - //Matched so finalize the current - _CLDECDELETE(currentTerm); - //Get a reference to the matched term - currentTerm = _CL_POINTER(term); - return true; - } - }else - return false; - } - _CLDECDELETE(currentTerm); - currentTerm = NULL; - - return false; - } - - Term* FilteredTermEnum::term() { - //Func - Returns the current Term in the enumeration. - //Pre - next() must have been called at least once - // pointer is true or false - //Post - if pre(pointer) is true the reference counter of currentTerm is increased - // and current Term is returned otherwise currentTerm is only returned - - return _CL_POINTER(currentTerm); - } - Term* FilteredTermEnum::term(bool pointer) { - if ( pointer ) - return _CL_POINTER(currentTerm); - else - return currentTerm; - } - - void FilteredTermEnum::close(){ - //Func - Closes the enumeration to further activity, freeing resources. - //Pre - true - //Post - The Enumeration has been closed - - //Check if actualEnum is valid - if (actualEnum){ - //Close the enumeration - actualEnum->close(); - } - - //Destroy the enumeration - _CLDELETE(actualEnum); - - //Destroy currentTerm - _CLDECDELETE(currentTerm); - } - - void FilteredTermEnum::setEnum(TermEnum* actualEnum) { - //Func - Sets the actual Enumeration - //Pre - actualEnum != NULL - //Post - The instance has been created - - CND_PRECONDITION(actualEnum != NULL,"actualEnum is NULL"); - - _CLDELETE(this->actualEnum); - - this->actualEnum = actualEnum; - - // Find the first term that matches - //Ordered term not to return reference ownership here. - Term* term = actualEnum->term(false); - if (term != NULL && termCompare(term)){ - _CLDECDELETE(currentTerm); - currentTerm = _CL_POINTER(term); - }else{ - next(); - } - } - -CL_NS_END diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/search/FilteredTermEnum.h qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/search/FilteredTermEnum.h --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/search/FilteredTermEnum.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/search/FilteredTermEnum.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,61 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#ifndef _lucene_search_FilteredTermEnum_ -#define _lucene_search_FilteredTermEnum_ - -#if defined(_LUCENE_PRAGMA_ONCE) -# pragma once -#endif - -#include "CLucene/index/Term.h" -#include "CLucene/index/Terms.h" - -CL_NS_DEF(search) - //FilteredTermEnum is an abstract class for enumerating a subset of all terms. - // - //Term enumerations are always ordered by term->compareTo(). Each term in - //the enumeration is greater than all that precede it. - - class FilteredTermEnum: public CL_NS(index)::TermEnum { - public: - //Constructor - FilteredTermEnum(); - //Destructor - virtual ~FilteredTermEnum(); - - //Equality measure on the term - virtual qreal difference() = 0; - - //Returns the docFreq of the current Term in the enumeration. - int32_t docFreq() const ; - - //Increments the enumeration to the next element - bool next() ; - - //Returns a pointer to the current Term in the enumeration. - CL_NS(index)::Term* term(); - CL_NS(index)::Term* term(bool pointer); - - //Closes the enumeration to further activity, freeing resources. - void close(); - - protected: - //Equality compare on the term */ - virtual bool termCompare(CL_NS(index)::Term* term) = 0; - - //Indiciates the end of the enumeration has been reached - virtual bool endEnum() = 0; - - void setEnum(CL_NS(index)::TermEnum* actualEnum) ; - - private: - CL_NS(index)::Term* currentTerm; - CL_NS(index)::TermEnum* actualEnum; - - }; -CL_NS_END -#endif diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/search/Filter.h qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/search/Filter.h --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/search/Filter.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/search/Filter.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,46 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#ifndef _lucene_search_Filter_ -#define _lucene_search_Filter_ - -#if defined(_LUCENE_PRAGMA_ONCE) -# pragma once -#endif - -#include "CLucene/index/IndexReader.h" -#include "CLucene/util/BitSet.h" - -CL_NS_DEF(search) - // Abstract base class providing a mechanism to restrict searches to a subset - // of an index. - class Filter: LUCENE_BASE { - public: - virtual ~Filter(){ - } - - virtual Filter* clone() const = 0; - - /** - * Returns a BitSet with true for documents which should be permitted in - * search results, and false for those that should not. - * MEMORY: read shouldDeleteBitSet - */ - virtual CL_NS(util)::BitSet* bits(CL_NS(index)::IndexReader* reader)=0; - - /** - * Because of the problem of cached bitsets with the CachingWrapperFilter, - * CLucene has no way of knowing whether to delete the bitset returned from bits(). - * To properly clean memory from bits(), pass the bitset to this function. The - * Filter should be deleted if this function returns true. - */ - virtual bool shouldDeleteBitSet(const CL_NS(util)::BitSet* bs) const{ return true; } - - //Creates a user-readable version of this query and returns it as as string - virtual TCHAR* toString()=0; - }; -CL_NS_END -#endif diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/search/FuzzyQuery.cpp qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/search/FuzzyQuery.cpp --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/search/FuzzyQuery.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/search/FuzzyQuery.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,357 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#include "CLucene/StdHeader.h" -#include "FuzzyQuery.h" - -CL_NS_USE(index) -CL_NS_USE(util) -CL_NS_DEF(search) - - /** - * Constructor for enumeration of all terms from specified reader which share a prefix of - * length prefixLength with term and which have a fuzzy similarity > - * minSimilarity. - * - * @param reader Delivers terms. - * @param term Pattern term. - * @param minSimilarity Minimum required similarity for terms from the reader. Default value is 0.5f. - * @param prefixLength Length of required common prefix. Default value is 0. - * @throws IOException - */ - FuzzyTermEnum::FuzzyTermEnum(const IndexReader* reader, Term* term, qreal minSimilarity, size_t prefixLength): - distance(0), - _endEnum(false), - prefix(LUCENE_BLANK_STRING), - prefixLength(0), - minimumSimilarity(minSimilarity) - { - //Func - Constructor - //Pre - reader contains a valid reference to an IndexReader - // term != NULL - //Post - The instance has been created - - CND_PRECONDITION(term != NULL,"term is NULL"); - - scale_factor = 1.0f / (1.0f - minimumSimilarity); - searchTerm = _CL_POINTER(term); - - text = STRDUP_TtoT(term->text()); - textLen = term->textLength(); - - - //Initialize e to NULL - e = NULL; - eWidth = 0; - eHeight = 0; - - if(prefixLength > 0 && prefixLength < textLen){ - this->prefixLength = prefixLength; - - prefix = _CL_NEWARRAY(TCHAR,prefixLength+1); - _tcsncpy(prefix,text,prefixLength); - prefix[prefixLength]='\0'; - - textLen = prefixLength; - text[textLen]='\0'; - } - - - //Set the enumeration - Term* trm = _CLNEW Term(term, prefix); - setEnum(reader->terms(trm)); - _CLDECDELETE(trm); - } - - FuzzyTermEnum::~FuzzyTermEnum(){ - //Func - Destructor - //Pre - true - //Post - FuzzyTermEnum has been destroyed - - //Close the enumeration - close(); - } - - bool FuzzyTermEnum::endEnum() { - //Func - Returns the fact if the current term in the enumeration has reached the end - //Pre - true - //Post - The boolean value of endEnum has been returned - - return _endEnum; - } - - void FuzzyTermEnum::close(){ - //Func - Close the enumeration - //Pre - true - //Post - The enumeration has been closed - - FilteredTermEnum::close(); - - //Finalize the searchTerm - _CLDECDELETE(searchTerm); - //Destroy e - _CLDELETE_ARRAY(e); - - _CLDELETE_CARRAY(text); - - if ( prefix != LUCENE_BLANK_STRING ) - _CLDELETE_CARRAY(prefix); - } - - bool FuzzyTermEnum::termCompare(Term* term) { - //Func - Compares term with the searchTerm using the Levenshtein distance. - //Pre - term is NULL or term points to a Term - //Post - if pre(term) is NULL then false is returned otherwise - // if the distance of the current term in the enumeration is bigger than the FUZZY_THRESHOLD - // then true is returned - - if (term == NULL){ - return false; //Note that endEnum is not set to true! - } - - const TCHAR* termText = term->text(); - size_t termTextLen = term->textLength(); - - //Check if the field name of searchTerm of term match - //(we can use == because fields are interned) - if ( searchTerm->field() == term->field() && - (prefixLength==0 || _tcsncmp(termText,prefix,prefixLength)==0 )) { - - const TCHAR* target = termText+prefixLength; - size_t targetLen = termTextLen-prefixLength; - - //Calculate the Levenshtein distance - int32_t dist = editDistance(text, target, textLen, targetLen); - distance = 1 - ((qreal)dist / (qreal)min(textLen, targetLen)); - return (distance > minimumSimilarity); - } - _endEnum = true; - return false; - } - - qreal FuzzyTermEnum::difference() { - //Func - Returns the difference between the distance and the fuzzy threshold - // multiplied by the scale factor - //Pre - true - //Post - The difference is returned - - return (qreal)((distance - minimumSimilarity) * scale_factor ); - } - - - /** Finds and returns the smallest of three integers - precondition: Must define int32_t __t for temporary storage and result - */ - #define min3(a, b, c) __t = (a < b) ? a : b; __t = (__t < c) ? __t : c; - - int32_t FuzzyTermEnum::editDistance(const TCHAR* s, const TCHAR* t, const int32_t n, const int32_t m) { - //Func - Calculates the Levenshtein distance also known as edit distance is a measure of similiarity - // between two strings where the distance is measured as the number of character - // deletions, insertions or substitutions required to transform one string to - // the other string. - //Pre - s != NULL and contains the source string - // t != NULL and contains the target string - // n >= 0 and contains the length of the source string - // m >= 0 and containts the length of th target string - //Post - The distance has been returned - - CND_PRECONDITION(s != NULL, "s is NULL"); - CND_PRECONDITION(t != NULL, "t is NULL"); - CND_PRECONDITION(n >= 0," n is a negative number"); - CND_PRECONDITION(n >= 0," n is a negative number"); - - int32_t i; // iterates through s - int32_t j; // iterates through t - TCHAR s_i; // ith character of s - - if (n == 0) - return m; - if (m == 0) - return n; - - //Check if the array must be reallocated because it is too small or does not exist - if (e == NULL || eWidth <= n || eHeight <= m) { - //Delete e if possible - _CLDELETE_ARRAY(e); - //resize e - eWidth = max(eWidth, n+1); - eHeight = max(eHeight, m+1); - e = _CL_NEWARRAY(int32_t,eWidth*eHeight); - } - - CND_CONDITION(e != NULL,"e is NULL"); - - // init matrix e - for (i = 0; i <= n; i++){ - e[i + (0*eWidth)] = i; - } - for (j = 0; j <= m; j++){ - e[0 + (j*eWidth)] = j; - } - - int32_t __t; //temporary variable for min3 - - // start computing edit distance - for (i = 1; i <= n; i++) { - s_i = s[i - 1]; - for (j = 1; j <= m; j++) { - if (s_i != t[j-1]){ - min3(e[i + (j*eWidth) - 1], e[i + ((j-1)*eWidth)], e[i + ((j-1)*eWidth)-1]); - e[i + (j*eWidth)] = __t+1; - }else{ - min3(e[i + (j*eWidth) -1]+1, e[i + ((j-1)*eWidth)]+1, e[i + ((j-1)*eWidth)-1]); - e[i + (j*eWidth)] = __t; - } - } - } - - // we got the result! - return e[n + ((m)*eWidth)]; - } - - - /** - * Create a new FuzzyQuery that will match terms with a similarity - * of at least minimumSimilarity to term. - * If a prefixLength > 0 is specified, a common prefix - * of that length is also required. - * - * @param term the term to search for - * @param minimumSimilarity a value between 0 and 1 to set the required similarity - * between the query term and the matching terms. For example, for a - * minimumSimilarity of 0.5 a term of the same length - * as the query term is considered similar to the query term if the edit distance - * between both terms is less than length(term)*0.5 - * @param prefixLength length of common (non-fuzzy) prefix - * @throws IllegalArgumentException if minimumSimilarity is > 1 or < 0 - * or if prefixLength < 0 or > term.text().length(). - */ - FuzzyQuery::FuzzyQuery(Term* term, qreal minimumSimilarity, size_t prefixLength): - MultiTermQuery(term) - { - //Func - Constructor - //Pre - term != NULL - //Post - The instance has been created - - CND_PRECONDITION(term != NULL,"term is NULL"); - - if (minimumSimilarity > 1.0f) - _CLTHROWA(CL_ERR_IllegalArgument,"minimumSimilarity > 1"); - else if (minimumSimilarity < 0.0f) - _CLTHROWA(CL_ERR_IllegalArgument,"minimumSimilarity < 0"); - - this->minimumSimilarity = minimumSimilarity; - - if(prefixLength >= term->textLength()) - _CLTHROWA(CL_ERR_IllegalArgument,"prefixLength >= term.textLength()"); - this->prefixLength = prefixLength; - - } - - - qreal FuzzyQuery::defaultMinSimilarity = 0.5f; - - FuzzyQuery::~FuzzyQuery(){ - //Func - Destructor - //Pre - true - //Post - Instance has been destroyed - } - - TCHAR* FuzzyQuery::toString(const TCHAR* field) const{ - //Func - Returns the query string - //Pre - field != NULL - //Post - The query string has been returned - - CND_PRECONDITION(field != NULL,"field is NULL"); - - StringBuffer buffer; - const TCHAR* b = MultiTermQuery::toString(field); - - buffer.append ( b ); - _CLDELETE_CARRAY(b); - buffer.append( _T("~") ); - - buffer.appendFloat(minimumSimilarity,1); - - return buffer.toString(); - } - - const TCHAR* FuzzyQuery::getQueryName() const{ - //Func - Returns the name of the query - //Pre - true - //post - The string FuzzyQuery has been returned - - return getClassName(); - } - const TCHAR* FuzzyQuery::getClassName(){ - //Func - Returns the name of the query - //Pre - true - //post - The string FuzzyQuery has been returned - - return _T("FuzzyQuery"); - } - - - /** - * Returns the minimum similarity that is required for this query to match. - * @return float value between 0.0 and 1.0 - */ - qreal FuzzyQuery::getMinSimilarity() const { - return minimumSimilarity; - } - - FuzzyQuery::FuzzyQuery(const FuzzyQuery& clone): - MultiTermQuery(clone) - { - this->minimumSimilarity = clone.getMinSimilarity(); - this->prefixLength = clone.getPrefixLength(); - - //if(prefixLength < 0) - // _CLTHROWA(CL_ERR_IllegalArgument,"prefixLength < 0"); - //else - if(prefixLength >= clone.getTerm()->textLength()) - _CLTHROWA(CL_ERR_IllegalArgument,"prefixLength >= term.textLength()"); - - } - - Query* FuzzyQuery::clone() const{ - return _CLNEW FuzzyQuery(*this); - } - size_t FuzzyQuery::hashCode() const{ - //todo: we should give the query a seeding value... but - //need to do it for all hascode functions - size_t val = Similarity::floatToByte(getBoost()) ^ getTerm()->hashCode(); - val ^= Similarity::floatToByte(this->getMinSimilarity()); - val ^= this->getPrefixLength(); - return val; - } - bool FuzzyQuery::equals(Query* other) const{ - if (!(other->instanceOf(FuzzyQuery::getClassName()))) - return false; - - FuzzyQuery* fq = (FuzzyQuery*)other; - return (this->getBoost() == fq->getBoost()) - && this->getMinSimilarity() == fq->getMinSimilarity() - && this->getPrefixLength() == fq->getPrefixLength() - && getTerm()->equals(fq->getTerm()); - } - - /** - * Returns the prefix length, i.e. the number of characters at the start - * of a term that must be identical (not fuzzy) to the query term if the query - * is to match that term. - */ - size_t FuzzyQuery::getPrefixLength() const { - return prefixLength; - } - - FilteredTermEnum* FuzzyQuery::getEnum(IndexReader* reader){ - Term* term = getTerm(false); - FuzzyTermEnum* ret = _CLNEW FuzzyTermEnum(reader, term, minimumSimilarity, prefixLength); - return ret; - } - -CL_NS_END diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/search/FuzzyQuery.h qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/search/FuzzyQuery.h --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/search/FuzzyQuery.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/search/FuzzyQuery.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,156 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#ifndef _lucene_search_FuzzyQuery_ -#define _lucene_search_FuzzyQuery_ - -#if defined(_LUCENE_PRAGMA_ONCE) -# pragma once -#endif - -#include "CLucene/index/IndexReader.h" -#include "CLucene/index/Term.h" -#include "MultiTermQuery.h" - - -CL_NS_DEF(search) - - // class FuzzyQuery implements the fuzzy search query - class FuzzyQuery: public MultiTermQuery { - private: - qreal minimumSimilarity; - size_t prefixLength; - protected: - FuzzyQuery(const FuzzyQuery& clone); - public: - static qreal defaultMinSimilarity; - - /** - * Create a new FuzzyQuery that will match terms with a similarity - * of at least minimumSimilarity to term. - * If a prefixLength > 0 is specified, a common prefix - * of that length is also required. - * - * @param term the term to search for - * @param minimumSimilarity a value between 0 and 1 to set the required similarity - * between the query term and the matching terms. For example, for a - * minimumSimilarity of 0.5 a term of the same length - * as the query term is considered similar to the query term if the edit distance - * between both terms is less than length(term)*0.5 - * @param prefixLength length of common (non-fuzzy) prefix - * @throws IllegalArgumentException if minimumSimilarity is > 1 or < 0 - * or if prefixLength < 0 or > term.text().length(). - */ - FuzzyQuery(CL_NS(index)::Term* term, qreal minimumSimilarity=defaultMinSimilarity, size_t prefixLength=0); - //Destructor - ~FuzzyQuery(); - - TCHAR* toString(const TCHAR* field) const; - - //Returns the name "FuzzyQuery" - static const TCHAR* getClassName(); - const TCHAR* getQueryName() const; - - Query* clone() const; - bool equals(Query * other) const; - size_t hashCode() const; - - /** - * Returns the minimum similarity that is required for this query to match. - * @return float value between 0.0 and 1.0 - */ - qreal getMinSimilarity() const; - - /** - * Returns the prefix length, i.e. the number of characters at the start - * of a term that must be identical (not fuzzy) to the query term if the query - * is to match that term. - */ - size_t getPrefixLength() const; - - protected: - FilteredTermEnum* getEnum(CL_NS(index)::IndexReader* reader); - }; - - /** FuzzyTermEnum is a subclass of FilteredTermEnum for enumerating all - * terms that are similiar to the specified filter term. - * - * Term enumerations are always ordered by Term.compareTo(). Each term in - * the enumeration is greater than all that precede it. - */ - class FuzzyTermEnum: public FilteredTermEnum { - private: - qreal distance; - bool _endEnum; - - CL_NS(index)::Term* searchTerm; - TCHAR* text; - size_t textLen; - TCHAR* prefix; - size_t prefixLength; - qreal minimumSimilarity; - double scale_factor; - - - /** - * This static array saves us from the time required to create a new array - * everytime editDistance is called. - */ - int32_t* e; - int32_t eWidth; - int32_t eHeight; - - /****************************** - * Compute Levenshtein distance - ******************************/ - - /** - Levenshtein distance also known as edit distance is a measure of similiarity - between two strings where the distance is measured as the number of character - deletions, insertions or substitutions required to transform one string to - the other string. -

This method takes in four parameters; two strings and their respective - lengths to compute the Levenshtein distance between the two strings. - The result is returned as an integer. - */ - int32_t editDistance(const TCHAR* s, const TCHAR* t, const int32_t n, const int32_t m) ; - - protected: - /** - The termCompare method in FuzzyTermEnum uses Levenshtein distance to - calculate the distance between the given term and the comparing term. - */ - bool termCompare(CL_NS(index)::Term* term) ; - - ///Returns the fact if the current term in the enumeration has reached the end - bool endEnum(); - public: - - /** - * Empty prefix and minSimilarity of 0.5f are used. - * - * @param reader - * @param term - * @throws IOException - * @see #FuzzyTermEnum(IndexReader, Term, qreal, int32_t) - */ - FuzzyTermEnum(const CL_NS(index)::IndexReader* reader, CL_NS(index)::Term* term, qreal minSimilarity=FuzzyQuery::defaultMinSimilarity, size_t prefixLength=0); - /** Destructor */ - ~FuzzyTermEnum(); - /** Close the enumeration */ - void close(); - - /** Returns the difference between the distance and the fuzzy threshold - * multiplied by the scale factor - */ - qreal difference(); - - - const char* getObjectName(){ return FuzzyTermEnum::getClassName(); } - static const char* getClassName(){ return "FuzzyTermEnum"; } - }; -CL_NS_END -#endif diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/search/HitQueue.cpp qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/search/HitQueue.cpp --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/search/HitQueue.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/search/HitQueue.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,107 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#include "CLucene/StdHeader.h" -#include "HitQueue.h" - -CL_NS_DEF(search) - -void HitQueue::upHeap(){ - size_t i = _size; - ScoreDoc node = heap[i]; // save bottom node (WAS object) - int32_t j = ((uint32_t)i) >> 1; - while (j > 0 && lessThan(node,heap[j])) { - heap[i] = heap[j]; // shift parents down - i = j; - j = ((uint32_t)j) >> 1; - } - heap[i] = node; // install saved node -} -void HitQueue::downHeap(){ - size_t i = 1; - ScoreDoc node = heap[i]; // save top node - size_t j = i << 1; // find smaller child - size_t k = j + 1; - if (k <= _size && lessThan(heap[k], heap[j])) { - j = k; - } - while (j <= _size && lessThan(heap[j],node)) { - heap[i] = heap[j]; // shift up child - i = j; - j = i << 1; - k = j + 1; - if (k <= _size && lessThan(heap[k], heap[j])) { - j = k; - } - } - heap[i] = node; // install saved node -} - -void HitQueue::adjustTop(){ - downHeap(); -} -size_t HitQueue::size(){ - return _size; -} - -struct ScoreDoc& HitQueue::top(){ - if ( _size == 0 ) - _CLTHROWA(CL_ERR_IndexOutOfBounds, "Attempted to access empty hitqueue::top"); - return heap[1]; -} - -void HitQueue::put(struct ScoreDoc& element){ - if ( _size>=maxSize ) - _CLTHROWA(CL_ERR_IndexOutOfBounds,"add is out of bounds"); - - _size++; - heap[_size] = element; - upHeap(); -} - -ScoreDoc HitQueue::pop(){ - if (_size > 0) { - ScoreDoc result = heap[1]; // save first value - heap[1] = heap[_size]; // move last to first - - _size--; - downHeap(); // adjust heap - return result; - } else - _CLTHROWA(CL_ERR_IndexOutOfBounds, "Attempted to access empty hitqueue::top"); -} - -bool HitQueue::insert(struct ScoreDoc& element){ - if(_size < maxSize){ - put(element); - return true; - }else if(_size > 0 && !lessThan(element, heap[1])){ - heap[1] = element; - adjustTop(); - return true; - }else - return false; -} - -HitQueue::HitQueue(const int32_t maxSize){ - _size = 0; - this->maxSize = maxSize; - int32_t heapSize = maxSize + 1; - heap = _CL_NEWARRAY(ScoreDoc,heapSize); -} -HitQueue::~HitQueue(){ - _CLDELETE_ARRAY(heap); -} - -bool HitQueue::lessThan(struct ScoreDoc& hitA, struct ScoreDoc& hitB){ - if (hitA.score == hitB.score) - return hitA.doc > hitB.doc; - else - return hitA.score < hitB.score; -} - - -CL_NS_END diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/search/HitQueue.h qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/search/HitQueue.h --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/search/HitQueue.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/search/HitQueue.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,55 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#ifndef _lucene_search_HitQueue_ -#define _lucene_search_HitQueue_ - -#if defined(_LUCENE_PRAGMA_ONCE) -# pragma once -#endif - -#include "SearchHeader.h" - -CL_NS_DEF(search) - -/** -* An optimised PriorityQueue which takes ScoreDoc structs. Some by-ref passing -* and memory related optimisations have been done. -*/ -class HitQueue: LUCENE_BASE { -private: - ScoreDoc* heap; - size_t _size; - size_t maxSize; - - void upHeap(); - void downHeap(); - -protected: - bool lessThan(struct ScoreDoc& hitA, struct ScoreDoc& hitB); - -public: - void adjustTop(); - struct ScoreDoc& top(); - void put(struct ScoreDoc& element); - ScoreDoc pop(); - /** - * Adds element to the PriorityQueue in log(size) time if either - * the PriorityQueue is not full, or not lessThan(element, top()). - * @param element - * @return true if element is added, false otherwise. - */ - bool insert(struct ScoreDoc& element); - /** - * Returns the number of elements currently stored in the PriorityQueue. - */ - size_t size(); - HitQueue(const int32_t maxSize); - ~HitQueue(); - -}; -CL_NS_END -#endif diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/search/Hits.cpp qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/search/Hits.cpp --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/search/Hits.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/search/Hits.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,174 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#include "CLucene/StdHeader.h" - -#include "SearchHeader.h" -#include "CLucene/document/Document.h" -#include "CLucene/index/IndexReader.h" -#include "Filter.h" -#include "CLucene/search/SearchHeader.h" - -CL_NS_USE(document) -CL_NS_USE(util) -CL_NS_USE(index) - -CL_NS_DEF(search) - - HitDoc::HitDoc(const qreal s, const int32_t i) - { - //Func - Constructor - //Pre - true - //Post - The instance has been created - - next = NULL; - prev = NULL; - doc = NULL; - score = s; - id = i; - } - - HitDoc::~HitDoc(){ - //Func - Destructor - //Pre - true - //Post - The instance has been destroyed - - _CLDELETE(doc); - } - - - Hits::Hits(Searcher* s, Query* q, Filter* f, const Sort* _sort): - query(q), searcher(s), filter(f), sort(_sort) - { - //Func - Constructor - //Pre - s contains a valid reference to a searcher s - // q contains a valid reference to a Query - // f is NULL or contains a pointer to a filter - //Post - The instance has been created - - _length = 0; - first = NULL; - last = NULL; - numDocs = 0; - maxDocs = 200; - - //retrieve 100 initially - getMoreDocs(50); - } - - Hits::~Hits(){ - - } - int32_t Hits::length() const { - return _length; - } - - Document& Hits::doc(const int32_t n){ - HitDoc* hitDoc = getHitDoc(n); - - // Update LRU cache of documents - remove(hitDoc); // remove from list, if there - addToFront(hitDoc); // add to front of list - if (numDocs > maxDocs) { // if cache is full - HitDoc* oldLast = last; - remove(last); // flush last - - _CLDELETE( oldLast->doc ); - oldLast->doc = NULL; - } - - if (hitDoc->doc == NULL){ - hitDoc->doc = _CLNEW Document; - searcher->doc(hitDoc->id, hitDoc->doc); // cache miss: read document - } - - return *hitDoc->doc; - } - - int32_t Hits::id (const int32_t n){ - return getHitDoc(n)->id; - } - - qreal Hits::score(const int32_t n){ - return getHitDoc(n)->score; - } - - void Hits::getMoreDocs(const size_t m){ - size_t _min = m; - { - size_t nHits = hitDocs.size(); - if ( nHits > _min) - _min = nHits; - } - - size_t n = _min * 2; // double # retrieved - TopDocs* topDocs = NULL; - if ( sort==NULL ) - topDocs = (TopDocs*)((Searchable*)searcher)->_search(query, filter, n); - else - topDocs = (TopDocs*)((Searchable*)searcher)->_search(query, filter, n, sort); - _length = topDocs->totalHits; - ScoreDoc* scoreDocs = topDocs->scoreDocs; - int32_t scoreDocsLength = topDocs->scoreDocsLength; - - qreal scoreNorm = 1.0f; - //Check that scoreDocs is a valid pointer before using it - if (scoreDocs != NULL){ - if (_length > 0 && scoreDocs[0].score > 1.0f){ - scoreNorm = 1.0f / scoreDocs[0].score; - } - - int32_t end = scoreDocsLength < _length ? scoreDocsLength : _length; - for (int32_t i = hitDocs.size(); i < end; i++) { - hitDocs.push_back(_CLNEW HitDoc(scoreDocs[i].score*scoreNorm, scoreDocs[i].doc)); - } - } - - _CLDELETE(topDocs); - } - - HitDoc* Hits::getHitDoc(const size_t n){ - if (n >= _length){ - TCHAR buf[100]; - _sntprintf(buf, 100,_T("Not a valid hit number: %d"),n); - _CLTHROWT(CL_ERR_IndexOutOfBounds, buf ); - } - if (n >= hitDocs.size()) - getMoreDocs(n); - - return hitDocs[n]; - } - - void Hits::addToFront(HitDoc* hitDoc) { // insert at front of cache - if (first == NULL) - last = hitDoc; - else - first->prev = hitDoc; - - hitDoc->next = first; - first = hitDoc; - hitDoc->prev = NULL; - - numDocs++; - } - - void Hits::remove(const HitDoc* hitDoc) { // remove from cache - if (hitDoc->doc == NULL) // it's not in the list - return; // abort - - if (hitDoc->next == NULL) - last = hitDoc->prev; - else - hitDoc->next->prev = hitDoc->prev; - - if (hitDoc->prev == NULL) - first = hitDoc->next; - else - hitDoc->prev->next = hitDoc->next; - - numDocs--; - } -CL_NS_END diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/search/IndexSearcher.cpp qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/search/IndexSearcher.cpp --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/search/IndexSearcher.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/search/IndexSearcher.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,362 +0,0 @@ -/* - * Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team - * - * Distributable under the terms of either the Apache License (Version 2.0) or - * the GNU Lesser General Public License, as specified in the COPYING file. - * - * Changes are Copyright (C) 2015 The Qt Company Ltd. -*/ -#include "CLucene/StdHeader.h" -#include "IndexSearcher.h" - -#include "SearchHeader.h" -#include "Scorer.h" -#include "FieldDocSortedHitQueue.h" -#include "CLucene/store/Directory.h" -#include "CLucene/document/Document.h" -#include "CLucene/index/IndexReader.h" -#include "CLucene/index/Term.h" -#include "CLucene/util/BitSet.h" -#include "FieldSortedHitQueue.h" - -CL_NS_USE(index) -CL_NS_USE(util) -CL_NS_USE(document) - -CL_NS_DEF(search) - -class SimpleTopDocsCollector : public HitCollector -{ -private: - qreal minScore; - const CL_NS(util)::BitSet* bits; - HitQueue* hq; - size_t nDocs; - int32_t* totalHits; - -public: - SimpleTopDocsCollector(const CL_NS(util)::BitSet* bs, HitQueue* hitQueue, - int32_t* totalhits, size_t ndocs, const qreal ms=-1.0f) - : minScore(ms), - bits(bs), - hq(hitQueue), - nDocs(ndocs), - totalHits(totalhits) {} - ~SimpleTopDocsCollector() {} - - void collect(const int32_t doc, const qreal score) - { - if (score > 0.0f // ignore zeroed buckets - && (bits == NULL || bits->get(doc))) { // skip docs not in bits - ++totalHits[0]; - if (hq->size() < nDocs || (minScore==-1.0f || score >= minScore)) { - ScoreDoc sd = {doc, score}; - hq->insert(sd); // update hit queue - if ( minScore != -1.0f ) - minScore = hq->top().score; // maintain minScore - } - } - } -}; - -class SortedTopDocsCollector : public HitCollector -{ -private: - const CL_NS(util)::BitSet* bits; - FieldSortedHitQueue* hq; - size_t nDocs; - int32_t* totalHits; -public: - SortedTopDocsCollector(const CL_NS(util)::BitSet* bs, - FieldSortedHitQueue* hitQueue, int32_t* totalhits, size_t _nDocs) - : bits(bs), - hq(hitQueue), - nDocs(_nDocs), - totalHits(totalhits) - { - } - ~SortedTopDocsCollector() {} - - void collect(const int32_t doc, const qreal score) - { - if (score > 0.0f && // ignore zeroed buckets - (bits==NULL || bits->get(doc))) { // skip docs not in bits - ++totalHits[0]; - // TODO: see jlucene way... with fields def??? - FieldDoc* fd = _CLNEW FieldDoc(doc, score); - if ( !hq->insert(fd) ) // update hit queue - _CLDELETE(fd); - } - } -}; - -class SimpleFilteredCollector : public HitCollector -{ -private: - CL_NS(util)::BitSet* bits; - HitCollector* results; -public: - SimpleFilteredCollector(CL_NS(util)::BitSet* bs, HitCollector* collector) - : bits(bs), - results(collector) {} - ~SimpleFilteredCollector() {} - -protected: - void collect(const int32_t doc, const qreal score) - { - // skip docs not in bits - if (bits->get(doc)) - results->collect(doc, score); - } -}; - - -IndexSearcher::IndexSearcher(const QString& path) -{ - //Func - Constructor - // Creates a searcher searching the index in the named directory. - //Pre - path != NULL - //Post - The instance has been created - - CND_PRECONDITION(!path.isEmpty(), "path is NULL"); - - reader = IndexReader::open(path); - readerOwner = true; -} - -IndexSearcher::IndexSearcher(CL_NS(store)::Directory* directory) -{ - //Func - Constructor - // Creates a searcher searching the index in the specified directory. - //Pre - path != NULL - //Post - The instance has been created - - CND_PRECONDITION(directory != NULL, "directory is NULL"); - - reader = IndexReader::open(directory); - readerOwner = true; -} - -IndexSearcher::IndexSearcher(IndexReader* r) -{ - //Func - Constructor - // Creates a searcher searching the index with the provide IndexReader - //Pre - path != NULL - //Post - The instance has been created - - reader = r; - readerOwner = false; -} - -IndexSearcher::~IndexSearcher() -{ - //Func - Destructor - //Pre - true - //Post - The instance has been destroyed - - close(); -} - -void IndexSearcher::close() -{ - //Func - Frees resources associated with this Searcher. - //Pre - true - //Post - The resources associated have been freed - if (readerOwner && reader){ - reader->close(); - _CLDELETE(reader); - } -} - -// inherit javadoc -int32_t IndexSearcher::docFreq(const Term* term) const -{ - //Func - - //Pre - reader != NULL - //Post - - - CND_PRECONDITION(reader != NULL, "reader is NULL"); - return reader->docFreq(term); -} - -// inherit javadoc -bool IndexSearcher::doc(int32_t i, CL_NS(document)::Document* d) -{ - //Func - Retrieves i-th document found - // For use by HitCollector implementations. - //Pre - reader != NULL - //Post - The i-th document has been returned - - CND_PRECONDITION(reader != NULL, "reader is NULL"); - return reader->document(i,d); -} - -// inherit javadoc -int32_t IndexSearcher::maxDoc() const -{ - //Func - Return total number of documents including the ones marked deleted - //Pre - reader != NULL - //Post - The total number of documents including the ones marked deleted - // has been returned - - CND_PRECONDITION(reader != NULL, "reader is NULL"); - return reader->maxDoc(); -} - -TopDocs* IndexSearcher::_search(Query* query, Filter* filter, const int32_t nDocs) -{ - //Func - - //Pre - reader != NULL - //Post - - - CND_PRECONDITION(reader != NULL, "reader is NULL"); - CND_PRECONDITION(query != NULL, "query is NULL"); - - Weight* weight = query->weight(this); - Scorer* scorer = weight->scorer(reader); - if (scorer == NULL){ - return _CLNEW TopDocs(0, NULL, 0); - } - - BitSet* bits = filter != NULL ? filter->bits(reader) : NULL; - HitQueue* hq = _CLNEW HitQueue(nDocs); - - //Check hq has been allocated properly - CND_CONDITION(hq != NULL, "Could not allocate memory for HitQueue hq"); - - int32_t* totalHits = _CL_NEWARRAY(int32_t,1); - totalHits[0] = 0; - - SimpleTopDocsCollector hitCol(bits,hq,totalHits,nDocs,0.0f); - scorer->score( &hitCol ); - _CLDELETE(scorer); - - int32_t scoreDocsLength = hq->size(); - - ScoreDoc* scoreDocs = _CL_NEWARRAY(ScoreDoc,scoreDocsLength); - - for (int32_t i = scoreDocsLength-1; i >= 0; --i) // put docs in array - scoreDocs[i] = hq->pop(); - - int32_t totalHitsInt = totalHits[0]; - - _CLDELETE(hq); - if ( bits != NULL && filter->shouldDeleteBitSet(bits) ) - _CLDELETE(bits); - _CLDELETE_ARRAY(totalHits); - Query* wq = weight->getQuery(); - if ( query != wq ) //query was re-written - _CLLDELETE(wq); - _CLDELETE(weight); - - return _CLNEW TopDocs(totalHitsInt, scoreDocs, scoreDocsLength); -} - -// inherit javadoc -TopFieldDocs* IndexSearcher::_search(Query* query, Filter* filter, - const int32_t nDocs, const Sort* sort) -{ - CND_PRECONDITION(reader != NULL, "reader is NULL"); - CND_PRECONDITION(query != NULL, "query is NULL"); - - Weight* weight = query->weight(this); - Scorer* scorer = weight->scorer(reader); - if (scorer == NULL) { - return _CLNEW TopFieldDocs(0, NULL, 0, NULL ); - } - - BitSet* bits = filter != NULL ? filter->bits(reader) : NULL; - FieldSortedHitQueue hq(reader, sort->getSort(), nDocs); - int32_t* totalHits = _CL_NEWARRAY(int32_t,1); - totalHits[0]=0; - - SortedTopDocsCollector hitCol(bits,&hq,totalHits,nDocs); - scorer->score(&hitCol); - _CLDELETE(scorer); - - int32_t hqLen = hq.size(); - FieldDoc** fieldDocs = _CL_NEWARRAY(FieldDoc*,hqLen); - for (int32_t i = hqLen-1; i >= 0; --i){ // put docs in array - fieldDocs[i] = hq.fillFields (hq.pop()); - } - - Query* wq = weight->getQuery(); - if ( query != wq ) //query was re-written - _CLLDELETE(wq); - _CLDELETE(weight); - - SortField** hqFields = hq.getFields(); - hq.setFields(NULL); //move ownership of memory over to TopFieldDocs - int32_t totalHits0 = totalHits[0]; - if ( bits != NULL && filter->shouldDeleteBitSet(bits) ) - _CLDELETE(bits); - _CLDELETE_ARRAY(totalHits); - return _CLNEW TopFieldDocs(totalHits0, fieldDocs, hqLen, hqFields ); -} - -void IndexSearcher::_search(Query* query, Filter* filter, HitCollector* results) -{ - //Func - _search an index and fetch the results - // Applications should only use this if they need all of the - // matching documents. The high-level search API (search(Query)) - // is usually more efficient, as it skips non-high-scoring hits. - //Pre - query is a valid reference to a query filter may or may not be NULL - // results is a valid reference to a HitCollector and used to store the results - //Post - filter if non-NULL, a bitset used to eliminate some documents - - CND_PRECONDITION(reader != NULL, "reader is NULL"); - CND_PRECONDITION(query != NULL, "query is NULL"); - - BitSet* bits = NULL; - SimpleFilteredCollector* fc = NULL; - - if (filter != NULL){ - bits = filter->bits(reader); - fc = _CLNEW SimpleFilteredCollector(bits, results); - } - - Weight* weight = query->weight(this); - Scorer* scorer = weight->scorer(reader); - if (scorer != NULL) { - if (fc == NULL){ - scorer->score(results); - }else{ - scorer->score((HitCollector*)fc); - } - _CLDELETE(scorer); - } - - _CLDELETE(fc); - _CLDELETE(weight); - if ( bits != NULL && filter->shouldDeleteBitSet(bits) ) - _CLDELETE(bits); -} - -Query* IndexSearcher::rewrite(Query* original) -{ - Query* query = original; - Query* last = original; - for (Query* rewrittenQuery = query->rewrite(reader); - rewrittenQuery != query; - rewrittenQuery = query->rewrite(reader)) { - query = rewrittenQuery; - if ( query != last && last != original) { - _CLDELETE(last); - } - last = query; - } - return query; -} - -void IndexSearcher::explain(Query* query, int32_t doc, Explanation* ret) -{ - Weight* weight = query->weight(this); - weight->explain(reader, doc, ret); - - Query* wq = weight->getQuery(); - if ( query != wq ) //query was re-written - _CLLDELETE(wq); - _CLDELETE(weight); -} - -CL_NS_END diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/search/IndexSearcher.h qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/search/IndexSearcher.h --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/search/IndexSearcher.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/search/IndexSearcher.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,73 +0,0 @@ -/* - * Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team - * - * Distributable under the terms of either the Apache License (Version 2.0) or - * the GNU Lesser General Public License, as specified in the COPYING file. - * - * Changes are Copyright (C) 2015 The Qt Company Ltd. -*/ -#ifndef _lucene_search_IndexSearcher_ -#define _lucene_search_IndexSearcher_ - -#if defined(_LUCENE_PRAGMA_ONCE) -# pragma once -#endif - -#include - -#include "SearchHeader.h" -#include "CLucene/store/Directory.h" -#include "CLucene/document/Document.h" -#include "CLucene/index/IndexReader.h" -#include "CLucene/index/Term.h" -#include "CLucene/util/BitSet.h" -#include "HitQueue.h" -#include "FieldSortedHitQueue.h" - -CL_NS_DEF(search) -/** Implements search over a single IndexReader. -* -*

Applications usually need only call the inherited {@link search(Query*)} -* or {@link search(Query*,Filter*)} methods. -*/ -class IndexSearcher:public Searcher{ - CL_NS(index)::IndexReader* reader; - bool readerOwner; - -public: - /// Creates a searcher searching the index in the named directory. - IndexSearcher(const QString& path); - - /// Creates a searcher searching the index in the specified directory. - IndexSearcher(CL_NS(store)::Directory* directory); - - /// Creates a searcher searching the provided index. - IndexSearcher(CL_NS(index)::IndexReader* r); - - ~IndexSearcher(); - - /// Frees resources associated with this Searcher. - void close(); - - int32_t docFreq(const CL_NS(index)::Term* term) const; - - bool doc(int32_t i, CL_NS(document)::Document* document); - - int32_t maxDoc() const; - - TopDocs* _search(Query* query, Filter* filter, const int32_t nDocs); - TopFieldDocs* _search(Query* query, Filter* filter, const int32_t nDocs, - const Sort* sort); - - void _search(Query* query, Filter* filter, HitCollector* results); - - CL_NS(index)::IndexReader* getReader() { - return reader; } - - Query* rewrite(Query* original); - void explain(Query* query, int32_t doc, Explanation* ret); -}; - -CL_NS_END - -#endif diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/search/MultiSearcher.cpp qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/search/MultiSearcher.cpp --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/search/MultiSearcher.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/search/MultiSearcher.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,227 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#include "CLucene/StdHeader.h" -#include "MultiSearcher.h" - -#include "SearchHeader.h" -#include "HitQueue.h" -#include "CLucene/document/Document.h" -#include "CLucene/index/Term.h" -#include "FieldDocSortedHitQueue.h" - -CL_NS_USE(index) -CL_NS_USE(util) -CL_NS_USE(document) - -CL_NS_DEF(search) - - /** Creates a searcher which searches searchers. */ - MultiSearcher::MultiSearcher(Searchable** _searchables): - _maxDoc(0) { - searchablesLen = 0; - while ( _searchables[searchablesLen] != NULL ) - ++searchablesLen; - - searchables=_CL_NEWARRAY(Searchable*,searchablesLen+1); - starts = _CL_NEWARRAY(int32_t,searchablesLen + 1); // build starts array - for (int32_t i = 0; i < searchablesLen; ++i) { - searchables[i]=_searchables[i]; - starts[i] = _maxDoc; - _maxDoc += searchables[i]->maxDoc(); // compute maxDocs - } - starts[searchablesLen] = _maxDoc; - } - - MultiSearcher::~MultiSearcher() { - _CLDELETE_ARRAY(searchables); - _CLDELETE_ARRAY(starts); - } - - - // inherit javadoc - void MultiSearcher::close() { - for (int32_t i = 0; i < searchablesLen; ++i){ - searchables[i]->close(); - searchables[i]=NULL; - } - } - - int32_t MultiSearcher::docFreq(const Term* term) const { - int32_t docFreq = 0; - for (int32_t i = 0; i < searchablesLen; ++i) - docFreq += searchables[i]->docFreq(term); - return docFreq; - } - - /** For use by {@link HitCollector} implementations. */ - bool MultiSearcher::doc(int32_t n, Document* d) { - int32_t i = subSearcher(n); // find searcher index - return searchables[i]->doc(n - starts[i], d); // dispatch to searcher - } - - int32_t MultiSearcher::searcherIndex(int32_t n) const{ - return subSearcher(n); - } - - /** Returns index of the searcher for document n in the array - * used to construct this searcher. */ - int32_t MultiSearcher::subSearcher(int32_t n) const{ - // replace w/ call to Arrays.binarySearch in Java 1.2 - int32_t lo = 0; // search starts array - int32_t hi = searchablesLen - 1; // for first element less - // than n, return its index - int32_t mid,midValue; - while (hi >= lo) { - mid = (lo + hi) >> 1; - midValue = starts[mid]; - if (n < midValue) - hi = mid - 1; - else if (n > midValue) - lo = mid + 1; - else{ // found a match - while (mid+1 < searchablesLen && starts[mid+1] == midValue) { - ++mid; // scan to last match - } - return mid; - } - } - return hi; - } - - /** Returns the document number of document n within its - * sub-index. */ - int32_t MultiSearcher::subDoc(int32_t n) const{ - return n - starts[subSearcher(n)]; - } - - int32_t MultiSearcher::maxDoc() const{ - return _maxDoc; - } - - TopDocs* MultiSearcher::_search(Query* query, Filter* filter, const int32_t nDocs) { - HitQueue* hq = _CLNEW HitQueue(nDocs); - int32_t totalHits = 0; - TopDocs* docs; - int32_t j; - ScoreDoc* scoreDocs; - for (int32_t i = 0; i < searchablesLen; i++) { // search each searcher - docs = searchables[i]->_search(query, filter, nDocs); - totalHits += docs->totalHits; // update totalHits - scoreDocs = docs->scoreDocs; - for ( j = 0; j scoreDocsLength; ++j) { // merge scoreDocs int_to hq - scoreDocs[j].doc += starts[i]; // convert doc - if ( !hq->insert(scoreDocs[j])) - break; // no more scores > minScore - } - - _CLDELETE(docs); - } - - int32_t scoreDocsLen = hq->size(); - scoreDocs = _CL_NEWARRAY(ScoreDoc, scoreDocsLen); - {//MSVC 6 scope fix - for (int32_t i = scoreDocsLen-1; i >= 0; --i) // put docs in array - scoreDocs[i] = hq->pop(); - } - - //cleanup - _CLDELETE(hq); - - return _CLNEW TopDocs(totalHits, scoreDocs, scoreDocsLen); - } - - /** Lower-level search API. - * - *

{@link HitCollector#collect(int32_t,qreal)} is called for every non-zero - * scoring document. - * - *

Applications should only use this if they need all of the - * matching documents. The high-level search API ({@link - * Searcher#search(Query)}) is usually more efficient, as it skips - * non-high-scoring hits. - * - * @param query to match documents - * @param filter if non-null, a bitset used to eliminate some documents - * @param results to receive hits - */ - void MultiSearcher::_search(Query* query, Filter* filter, HitCollector* results){ - for (int32_t i = 0; i < searchablesLen; ++i) { - /* DSR:CL_BUG: Old implementation leaked and was misconceived. We need - ** to have the original HitCollector ($results) collect *all* hits; - ** the MultiHitCollector instantiated below serves only to adjust - ** (forward by starts[i]) the docNo passed to $results. - ** Old implementation instead created a sort of linked list of - ** MultiHitCollectors that applied the adjustments in $starts - ** cumulatively (and was never deleted). */ - HitCollector *docNoAdjuster = _CLNEW MultiHitCollector(results, starts[i]); - searchables[i]->_search(query, filter, docNoAdjuster); - _CLDELETE(docNoAdjuster); - } - } - - TopFieldDocs* MultiSearcher::_search (Query* query, Filter* filter, const int32_t n, const Sort* sort){ - FieldDocSortedHitQueue* hq = NULL; - int32_t totalHits = 0; - TopFieldDocs* docs; - int32_t j; - FieldDoc** fieldDocs; - - for (int32_t i = 0; i < searchablesLen; ++i) { // search each searcher - docs = searchables[i]->_search (query, filter, n, sort); - if (hq == NULL){ - hq = _CLNEW FieldDocSortedHitQueue (docs->fields, n); - docs->fields = NULL; //hit queue takes fields memory - } - - totalHits += docs->totalHits; // update totalHits - fieldDocs = docs->fieldDocs; - for(j = 0;jscoreDocsLength;++j){ // merge scoreDocs into hq - fieldDocs[j]->scoreDoc.doc += starts[i]; // convert doc - if (!hq->insert (fieldDocs[j]) ) - break; // no more scores > minScore - } - for ( int32_t x=0;xsize(); - fieldDocs = _CL_NEWARRAY(FieldDoc*,hqlen); - for (j = hqlen - 1; j >= 0; j--) // put docs in array - fieldDocs[j] = hq->pop(); - - SortField** hqFields = hq->getFields(); - hq->setFields(NULL); //move ownership of memory over to TopFieldDocs - _CLDELETE(hq); - - return _CLNEW TopFieldDocs (totalHits, fieldDocs, hqlen, hqFields); - } - - Query* MultiSearcher::rewrite(Query* original) { - Query** queries = _CL_NEWARRAY(Query*,searchablesLen+1); - for (int32_t i = 0; i < searchablesLen; ++i) - queries[i] = searchables[i]->rewrite(original); - queries[searchablesLen]=NULL; - return original->combine(queries); - } - - void MultiSearcher::explain(Query* query, int32_t doc, Explanation* ret) { - int32_t i = subSearcher(doc); // find searcher index - searchables[i]->explain(query,doc-starts[i], ret); // dispatch to searcher - } - - MultiHitCollector::MultiHitCollector(HitCollector* _results, int32_t _start): - results(_results), - start(_start) { - } - - void MultiHitCollector::collect(const int32_t doc, const qreal score) { - results->collect(doc + start, score); - } - -CL_NS_END diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/search/MultiSearcher.h qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/search/MultiSearcher.h --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/search/MultiSearcher.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/search/MultiSearcher.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,95 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#ifndef _lucene_search_multisearcher -#define _lucene_search_multisearcher - -#if defined(_LUCENE_PRAGMA_ONCE) -# pragma once -#endif - -#include "SearchHeader.h" -#include "CLucene/document/Document.h" -#include "CLucene/index/Term.h" - -CL_NS_DEF(search) - - class MultiHitCollector: public HitCollector{ - private: - HitCollector* results; - int32_t start; - public: - MultiHitCollector(HitCollector* _results, int32_t _start); - void collect(const int32_t doc, const qreal score) ; - }; - - - /** Implements search over a set of Searchables. - * - *

Applications usually need only call the inherited {@link #search(Query)} - * or {@link #search(Query,Filter)} methods. - */ - class MultiSearcher: public Searcher { - private: - Searchable** searchables; - int32_t searchablesLen; - int32_t* starts; - int32_t _maxDoc; - protected: - int32_t* getStarts() { - return starts; - } - - public: - /** Creates a searcher which searches Searchables. */ - MultiSearcher(Searchable** searchables); - - ~MultiSearcher(); - - /** Frees resources associated with this Searcher. */ - void close() ; - - int32_t docFreq(const CL_NS(index)::Term* term) const ; - - /** For use by {@link HitCollector} implementations. */ - bool doc(int32_t n, CL_NS(document)::Document* document); - - /** For use by {@link HitCollector} implementations to identify the - * index of the sub-searcher that a particular hit came from. */ - int32_t searcherIndex(int32_t n) const; - - int32_t subSearcher(int32_t n) const; - - int32_t subDoc(int32_t n) const; - - int32_t maxDoc() const; - - TopDocs* _search(Query* query, Filter* filter, const int32_t nDocs) ; - - TopFieldDocs* _search (Query* query, Filter* filter, const int32_t n, const Sort* sort); - - /** Lower-level search API. - * - *

{@link HitCollector#collect(int32_t,qreal)} is called for every non-zero - * scoring document. - * - *

Applications should only use this if they need all of the - * matching documents. The high-level search API ({@link - * Searcher#search(Query)}) is usually more efficient, as it skips - * non-high-scoring hits. - * - * @param query to match documents - * @param filter if non-null, a bitset used to eliminate some documents - * @param results to receive hits - */ - void _search(Query* query, Filter* filter, HitCollector* results); - - Query* rewrite(Query* original); - void explain(Query* query, int32_t doc, Explanation* ret); - }; - -CL_NS_END -#endif diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/search/MultiTermQuery.cpp qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/search/MultiTermQuery.cpp --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/search/MultiTermQuery.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/search/MultiTermQuery.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,98 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#include "CLucene/StdHeader.h" -#include "MultiTermQuery.h" - -CL_NS_USE(index) -CL_NS_USE(util) -CL_NS_DEF(search) - -/** Constructs a query for terms matching term. */ - - MultiTermQuery::MultiTermQuery(Term* t){ - //Func - Constructor - //Pre - t != NULL - //Post - The instance has been created - - CND_PRECONDITION(t != NULL, "t is NULL"); - - term = _CL_POINTER(t); - - } - MultiTermQuery::MultiTermQuery(const MultiTermQuery& clone): - Query(clone) - { - term = _CLNEW Term(clone.getTerm(false),clone.getTerm(false)->text()); - } - - MultiTermQuery::~MultiTermQuery(){ - //Func - Destructor - //Pre - true - //Post - The instance has been destroyed - - _CLDECDELETE(term); - } - - Term* MultiTermQuery::getTerm(bool pointer) const{ - if ( pointer ) - return _CL_POINTER(term); - else - return term; - } - - Query* MultiTermQuery::rewrite(IndexReader* reader) { - FilteredTermEnum* enumerator = getEnum(reader); - BooleanQuery* query = _CLNEW BooleanQuery(); - try { - do { - Term* t = enumerator->term(false); - if (t != NULL) { - TermQuery* tq = _CLNEW TermQuery(t); // found a match - tq->setBoost(getBoost() * enumerator->difference()); // set the boost - query->add(tq,true, false, false); // add to q - } - } while (enumerator->next()); - } _CLFINALLY ( enumerator->close(); _CLDELETE(enumerator) ); - - //if we only added one clause and the clause is not prohibited then - //we can just return the query - if (query->getClauseCount() == 1) { // optimize 1-clause queries - BooleanClause* c=0; - query->getClauses(&c); - - if (!c->prohibited) { // just return clause - c->deleteQuery=false; - Query* ret = c->query; - - _CLDELETE(query); - return ret; - } - } - return query; - } - - Query* MultiTermQuery::combine(Query** queries) { - return Query::mergeBooleanQueries(queries); - } - - /** Prints a user-readable version of this query. */ - TCHAR* MultiTermQuery::toString(const TCHAR* field) const{ - StringBuffer buffer; - - if ( field==NULL || _tcscmp(term->field(),field)!=0 ) { - buffer.append(term->field()); - buffer.append( _T(":")); - } - buffer.append(term->text()); - if (getBoost() != 1.0f) { - buffer.appendChar ( '^' ); - buffer.appendFloat( getBoost(),1); - } - return buffer.toString(); - } - -CL_NS_END diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/search/MultiTermQuery.h qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/search/MultiTermQuery.h --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/search/MultiTermQuery.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/search/MultiTermQuery.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,62 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#ifndef _lucene_search_MultiTermQuery_ -#define _lucene_search_MultiTermQuery_ - -#if defined(_LUCENE_PRAGMA_ONCE) -# pragma once -#endif - -#include "CLucene/util/StringBuffer.h" -#include "CLucene/index/IndexReader.h" -#include "CLucene/index/Term.h" -#include "CLucene/index/Terms.h" -#include "FilteredTermEnum.h" -#include "SearchHeader.h" -#include "BooleanQuery.h" -#include "TermQuery.h" - -CL_NS_DEF(search) - /** - * A {@link Query} that matches documents containing a subset of terms provided - * by a {@link FilteredTermEnum} enumeration. - *

- * MultiTermQuery is not designed to be used by itself. - *
- * The reason being that it is not intialized with a {@link FilteredTermEnum} - * enumeration. A {@link FilteredTermEnum} enumeration needs to be provided. - *

- * For example, {@link WildcardQuery} and {@link FuzzyQuery} extend - * MultiTermQuery to provide {@link WildcardTermEnum} and - * {@link FuzzyTermEnum}, respectively. - */ - class MultiTermQuery: public Query { - private: - CL_NS(index)::Term* term; - protected: - MultiTermQuery(const MultiTermQuery& clone); - - /** Construct the enumeration to be used, expanding the pattern term. */ - virtual FilteredTermEnum* getEnum(CL_NS(index)::IndexReader* reader) = 0; - public: - /** Constructs a query for terms matching term. */ - MultiTermQuery(CL_NS(index)::Term* t); - - virtual ~MultiTermQuery(); - - /** Returns the pattern term. */ - CL_NS(index)::Term* getTerm(bool pointer=true) const; - - Query* combine(Query** queries); - - /** Prints a user-readable version of this query. */ - TCHAR* toString(const TCHAR* field) const; - - Query* rewrite(CL_NS(index)::IndexReader* reader); - }; -CL_NS_END -#endif diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/search/PhrasePositions.cpp qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/search/PhrasePositions.cpp --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/search/PhrasePositions.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/search/PhrasePositions.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,116 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#include "CLucene/StdHeader.h" -#include "PhrasePositions.h" - -#include "CLucene/index/Terms.h" - -CL_NS_USE(index) -CL_NS_DEF(search) - - PhrasePositions::PhrasePositions(TermPositions* Tp, const int32_t OffSet){ - //Func - Constructor - //Pre - t != NULL - // OffSet != NULL - //Post - The instance has been created - - CND_PRECONDITION(Tp != NULL,"Tp is NULL"); - CND_PRECONDITION(OffSet >= 0 ,"OffSet is a negative number"); - - tp = Tp; - offset = OffSet; - position = 0; - count = 0; - doc = 0; - - _next = NULL; - } - - PhrasePositions::~PhrasePositions(){ - //Func - Destructor - //Pre - true - //Post - The instance has been deleted - - //delete next Phrase position and by doing that - //all PhrasePositions in the list - _CLDELETE(_next); - - //Check if tp is valid - if ( tp != NULL ){ - //Close TermPositions tp - tp->close(); - _CLDELETE(tp); - } - } - - bool PhrasePositions::next(){ - //Func - Increments to next doc - //Pre - tp != NULL - //Post - if there was no next then doc = INT_MAX otherwise - // doc contains the current document number - - CND_PRECONDITION(tp != NULL,"tp is NULL"); - - //Move to the next in TermPositions tp - if (!tp->next()) { - //There is no next so close the stream - tp->close(); - //delete tp and reset tp to NULL - _CLVDELETE(tp); //todo: not a clucene object... should be - //Assign Doc sentinel value - doc = INT_MAX; - return false; - }else{ - doc = tp->doc(); - position = 0; - return true; - } - } - bool PhrasePositions::skipTo(int32_t target){ - if (!tp->skipTo(target)) { - tp->close(); // close stream - doc = LUCENE_INT32_MAX_SHOULDBE; // sentinel value - return false; - } - doc = tp->doc(); - position = 0; - return true; - } - void PhrasePositions::firstPosition(){ - //Func - Read the first TermPosition - //Pre - tp != NULL - //Post - - - CND_PRECONDITION(tp != NULL,"tp is NULL"); - - //read first pos - count = tp->freq(); - //Move to the next TermPosition - nextPosition(); - } - - bool PhrasePositions::nextPosition(){ - //Func - Move to the next position - //Pre - tp != NULL - //Post - - - CND_PRECONDITION(tp != NULL,"tp is NULL"); - - if (count-- > 0) { - //read subsequent pos's - position = tp->nextPosition() - offset; - - //Check position always bigger than or equal to 0 - //bvk: todo, bug??? position < 0 occurs, cant figure out why, - //old version does it too and will fail the "SearchTest" test - //CND_CONDITION(position >= 0, "position has become a negative number"); - return true; - }else{ - return false; - } - } -CL_NS_END diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/search/PhrasePositions.h qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/search/PhrasePositions.h --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/search/PhrasePositions.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/search/PhrasePositions.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,41 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#ifndef _lucene_search_PhrasePositions_ -#define _lucene_search_PhrasePositions_ - -#if defined(_LUCENE_PRAGMA_ONCE) -# pragma once -#endif - -#include "CLucene/index/Terms.h" - -CL_NS_DEF(search) - - class PhrasePositions:LUCENE_BASE { - public: - int32_t doc; // current doc - int32_t position; // position in doc - int32_t count; // remaining pos in this doc - int32_t offset; // position in phrase - CL_NS(index)::TermPositions* tp; // stream of positions - PhrasePositions* _next; // used to make lists - - - //Constructor - PhrasePositions(CL_NS(index)::TermPositions* Tp, const int32_t o); - //Destructor - ~PhrasePositions(); - - bool next(); - bool skipTo(int32_t target); - - void firstPosition(); - - bool nextPosition(); - }; -CL_NS_END -#endif diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/search/PhraseQuery.cpp qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/search/PhraseQuery.cpp --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/search/PhraseQuery.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/search/PhraseQuery.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,463 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#include "CLucene/StdHeader.h" -#include "PhraseQuery.h" - -#include "SearchHeader.h" -#include "Scorer.h" -#include "BooleanQuery.h" -#include "TermQuery.h" - -#include "CLucene/index/Term.h" -#include "CLucene/index/Terms.h" -#include "CLucene/index/IndexReader.h" - -#include "CLucene/util/StringBuffer.h" -#include "CLucene/util/VoidList.h" -#include "CLucene/util/Arrays.h" - -#include "ExactPhraseScorer.h" -#include "SloppyPhraseScorer.h" - -CL_NS_USE(index) -CL_NS_USE(util) -CL_NS_DEF(search) - - PhraseQuery::PhraseQuery(): - terms(false) - { - //Func - Constructor - //Pre - true - //Post - An empty PhraseQuery has been created - - slop = 0; - - field = NULL; - } - PhraseQuery::PhraseQuery(const PhraseQuery& clone): - Query(clone), terms(false) - { - slop = clone.slop; - field = clone.field; - int32_t size=clone.positions.size(); - { //msvc6 scope fix - for ( int32_t i=0;ipositions.push_back( n ); - } - } - size=clone.terms.size(); - { //msvc6 scope fix - for ( int32_t i=0;iterms.push_back( _CL_POINTER(clone.terms[i])); - } - } - } - Query* PhraseQuery::clone() const{ - return _CLNEW PhraseQuery(*this); - } - bool PhraseQuery::equals(CL_NS(search)::Query *other) const{ - if (!(other->instanceOf(PhraseQuery::getClassName()))) - return false; - - PhraseQuery* pq = (PhraseQuery*)other; - bool ret = (this->getBoost() == pq->getBoost()) - && (this->slop == pq->slop); - - if ( ret ){ - CLListEquals, - const CL_NS(util)::CLVector > comp; - ret = comp.equals(&this->terms,&pq->terms); - } - - if ( ret ){ - CLListEquals, - const CL_NS(util)::CLVector > comp; - ret = comp.equals(&this->positions,&pq->positions); - } - return ret; - } - - - PhraseQuery::~PhraseQuery(){ - //Func - Destructor - //Pre - true - //Post 0 The instance has been destroyed - - //Iterate through all the terms - for (uint32_t i = 0; i < terms.size(); i++){ - _CLLDECDELETE(terms[i]); - } - positions.clear(); - } - - size_t PhraseQuery::hashCode() const { - //todo: do cachedHashCode, and invalidate on add/remove clause - size_t ret = Similarity::floatToByte(getBoost()) ^ Similarity::floatToByte(slop); - - { //msvc6 scope fix - for ( int32_t i=0;terms.size();i++ ) - ret = 31 * ret + terms[i]->hashCode(); - } - { //msvc6 scope fix - for ( int32_t i=0;positions.size();i++ ) - ret = 31 * ret + positions[i]; - } - return ret; - } - - const TCHAR* PhraseQuery::getClassName(){ - return _T("PhraseQuery"); - } - const TCHAR* PhraseQuery::getQueryName() const{ - //Func - Returns the string "PhraseQuery" - //Pre - true - //Post - The string "PhraseQuery" has been returned - return getClassName(); - } - - - /** - * Adds a term to the end of the query phrase. - * The relative position of the term is the one immediately after the last term added. - */ - void PhraseQuery::add(Term* term) { - CND_PRECONDITION(term != NULL,"term is NULL"); - - int32_t position = 0; - - if(positions.size() > 0) - position = (positions[positions.size()-1]) + 1; - - add(term, position); - } - - void PhraseQuery::add(Term* term, int32_t position) { - //Func - Adds a term to the end of the query phrase. - //Pre - term != NULL - //Post - The term has been added if its field matches the field of the PhraseQuery - // and true is returned otherwise false is returned - CND_PRECONDITION(term != NULL,"term is NULL"); - - if (terms.size() == 0) - field = term->field(); - else{ - //Check if the field of the _CLNEW term matches the field of the PhraseQuery - //can use != because fields are interned - if ( term->field() != field){ - //return false; - TCHAR buf[200]; - _sntprintf(buf,200,_T("All phrase terms must be in the same field: %s"),term->field()); - _CLTHROWT(CL_ERR_IllegalArgument,buf); - } - } - //Store the _CLNEW term - terms.push_back(_CL_POINTER(term)); - - positions.push_back(position); - } - - void PhraseQuery::getPositions(Array& result) const{ - result.length = positions.size(); - result.values = _CL_NEWARRAY(int32_t,result.length); - for(int32_t i = 0; i < result.length; i++){ - result.values[i] = positions[i]; - } - } - int32_t* PhraseQuery::getPositions() const{ - CND_WARNING(false,"getPositions() is deprecated") - - Array arr; - getPositions(arr); - return arr.values; - } - - Weight* PhraseQuery::_createWeight(Searcher* searcher) { - if (terms.size() == 1) { // optimize one-term case - Term* term = terms[0]; - Query* termQuery = _CLNEW TermQuery(term); - termQuery->setBoost(getBoost()); - Weight* ret = termQuery->_createWeight(searcher); - _CLDELETE(termQuery); - return ret; - } - return _CLNEW PhraseWeight(searcher,this); - } - - - Term** PhraseQuery::getTerms() const{ - //Func - added by search highlighter - //Pre - - //Post - - - //Let size contain the number of terms - int32_t size = terms.size(); - Term** ret = _CL_NEWARRAY(Term*,size+1); - - CND_CONDITION(ret != NULL,"Could not allocated memory for ret"); - - //Iterate through terms and copy each pointer to ret - for ( int32_t i=0;itext() ); - //Check if i is at the end of terms - if (i != terms.size()-1){ - buffer.append(_T(" ")); - } - } - - buffer.append( _T("\"") ); - - if (slop != 0) { - buffer.append(_T("~")); - buffer.appendFloat(slop,0); - } - - //Check if there is an other boost factor than 1.0 - if (getBoost() != 1.0f) { - buffer.append(_T("^")); - buffer.appendFloat( getBoost(),1 ); - } - - //return the query string - return buffer.toString(); - } - - - - - - - - - PhraseQuery::PhraseWeight::PhraseWeight(Searcher* searcher, PhraseQuery* _this) { - this->_this=_this; - this->value = 0; - this->idf = 0; - this->queryNorm = 0; - this->queryWeight = 0; - this->searcher = searcher; - } - - TCHAR* PhraseQuery::PhraseWeight::toString() { - return STRDUP_TtoT(_T("weight(PhraseQuery)")); - } - PhraseQuery::PhraseWeight::~PhraseWeight(){ - } - - - Query* PhraseQuery::PhraseWeight::getQuery() { return _this; } - qreal PhraseQuery::PhraseWeight::getValue() { return value; } - - qreal PhraseQuery::PhraseWeight::sumOfSquaredWeights(){ - idf = _this->getSimilarity(searcher)->idf(&_this->terms, searcher); - queryWeight = idf * _this->getBoost(); // compute query weight - return queryWeight * queryWeight; // square it - } - - void PhraseQuery::PhraseWeight::normalize(qreal queryNorm) { - this->queryNorm = queryNorm; - queryWeight *= queryNorm; // normalize query weight - value = queryWeight * idf; // idf for document - } - - Scorer* PhraseQuery::PhraseWeight::scorer(IndexReader* reader) { - //Func - - //Pre - - //Post - - - //Get the length of terms - int32_t tpsLength = _this->terms.size(); - - //optimize zero-term case - if (tpsLength == 0) - return NULL; - - TermPositions** tps = _CL_NEWARRAY(TermPositions*,tpsLength+1); - - //Check if tps has been allocated properly - CND_CONDITION(tps != NULL,"Could not allocate memory for tps"); - - TermPositions* p = NULL; - - //Iterate through all terms - int32_t size = _this->terms.size(); - for (int32_t i = 0; i < size; i++) { - //Get the termPostitions for the i-th term - p = reader->termPositions(_this->terms[i]); - - //Check if p is valid - if (p == NULL) { - //Delete previous retrieved termPositions - while (--i >= 0){ - _CLVDELETE(tps[i]); //todo: not a clucene object... should be - } - _CLDELETE_ARRAY(tps); - return NULL; - } - - //Store p at i in tps - tps[i] = p; - } - tps[tpsLength] = NULL; - - Scorer* ret = NULL; - - Array positions; - _this->getPositions(positions); - int32_t slop = _this->getSlop(); - if ( slop != 0) - // optimize exact case - //todo: need to pass these: this, tps, - ret = _CLNEW SloppyPhraseScorer(this,tps,positions.values, - _this->getSimilarity(searcher), - slop, reader->norms(_this->field)); - else - ret = _CLNEW ExactPhraseScorer(this, tps, positions.values, - _this->getSimilarity(searcher), - reader->norms(_this->field)); - positions.deleteArray(); - - CND_CONDITION(ret != NULL,"Could not allocate memory for ret"); - - //tps can be deleted safely. SloppyPhraseScorer or ExactPhraseScorer will take care - //of its values - - _CLDELETE_ARRAY(tps); - return ret; - } - - void PhraseQuery::PhraseWeight::explain(IndexReader* reader, int32_t doc, Explanation* result){ - TCHAR descbuf[LUCENE_SEARCH_EXPLANATION_DESC_LEN+1]; - TCHAR* tmp; - - tmp = getQuery()->toString(); - _sntprintf(descbuf,LUCENE_SEARCH_EXPLANATION_DESC_LEN,_T("weight(%s in %d), product of:"), - tmp,doc); - _CLDELETE_CARRAY(tmp); - result->setDescription(descbuf); - - StringBuffer docFreqs; - StringBuffer query; - query.appendChar('\"'); - for (uint32_t i = 0; i < _this->terms.size(); i++) { - if (i != 0) { - docFreqs.appendChar(' '); - query.appendChar(' '); - } - - Term* term = _this->terms[i]; - - docFreqs.append(term->text()); - docFreqs.appendChar('='); - docFreqs.appendInt(searcher->docFreq(term)); - - query.append(term->text()); - } - query.appendChar('\"'); - - _sntprintf(descbuf,LUCENE_SEARCH_EXPLANATION_DESC_LEN, - _T("idf(%s: %s)"),_this->field,docFreqs.getBuffer()); - Explanation* idfExpl = _CLNEW Explanation(idf, descbuf); - - // explain query weight - Explanation* queryExpl = _CLNEW Explanation; - tmp = getQuery()->toString(); - _sntprintf(descbuf,LUCENE_SEARCH_EXPLANATION_DESC_LEN, - _T("queryWeight(%s), product of:"),tmp); - _CLDELETE_CARRAY(tmp); - queryExpl->setDescription(descbuf); - - Explanation* boostExpl = _CLNEW Explanation(_this->getBoost(), _T("boost")); - if (_this->getBoost() != 1.0f) - queryExpl->addDetail(boostExpl); - queryExpl->addDetail(idfExpl); - - Explanation* queryNormExpl = _CLNEW Explanation(queryNorm,_T("queryNorm")); - queryExpl->addDetail(queryNormExpl); - - queryExpl->setValue(boostExpl->getValue() * - idfExpl->getValue() * - queryNormExpl->getValue()); - - result->addDetail(queryExpl); - - // explain field weight - Explanation* fieldExpl = _CLNEW Explanation; - _sntprintf(descbuf,LUCENE_SEARCH_EXPLANATION_DESC_LEN, - _T("fieldWeight(%s:%s in %d), product of:"), - _this->field,query.getBuffer(),doc); - fieldExpl->setDescription(descbuf); - - - Explanation* tfExpl = _CLNEW Explanation; - scorer(reader)->explain(doc, tfExpl); - fieldExpl->addDetail(tfExpl); - fieldExpl->addDetail(idfExpl); - - Explanation* fieldNormExpl = _CLNEW Explanation(); - uint8_t* fieldNorms = reader->norms(_this->field); - qreal fieldNorm = - fieldNorms!=NULL ? Similarity::decodeNorm(fieldNorms[doc]) : 0.0f; - fieldNormExpl->setValue(fieldNorm); - - - _sntprintf(descbuf,LUCENE_SEARCH_EXPLANATION_DESC_LEN, - _T("fieldNorm(field=%s, doc=%d)"),_this->field,doc); - fieldNormExpl->setDescription(descbuf); - fieldExpl->addDetail(fieldNormExpl); - - fieldExpl->setValue(tfExpl->getValue() * - idfExpl->getValue() * - fieldNormExpl->getValue()); - - result->addDetail(fieldExpl); - - // combine them - result->setValue(queryExpl->getValue() * fieldExpl->getValue()); - - if (queryExpl->getValue() == 1.0f){ - result->set(*fieldExpl); - _CLDELETE(fieldExpl); - } - } - - -CL_NS_END diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/search/PhraseQuery.h qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/search/PhraseQuery.h --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/search/PhraseQuery.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/search/PhraseQuery.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,127 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#ifndef _lucene_search_PhraseQuery_ -#define _lucene_search_PhraseQuery_ - -#if defined(_LUCENE_PRAGMA_ONCE) -# pragma once -#endif - -#include "SearchHeader.h" -#include "Scorer.h" -#include "BooleanQuery.h" -#include "TermQuery.h" - -#include "CLucene/index/Term.h" -#include "CLucene/index/Terms.h" -#include "CLucene/index/IndexReader.h" - -#include "CLucene/util/StringBuffer.h" -#include "CLucene/util/VoidList.h" - -#include "ExactPhraseScorer.h" -#include "SloppyPhraseScorer.h" - -CL_NS_DEF(search) - // A Query that matches documents containing a particular sequence of terms. - // This may be combined with other terms with a {@link BooleanQuery}. - class PhraseQuery: public Query { - private: - CL_NS(util)::CLVector positions; - int32_t slop; - - const TCHAR* field; - CL_NS(util)::CLVector terms; - - - class PhraseWeight: public Weight { - private: - Searcher* searcher; - qreal value; - qreal idf; - qreal queryNorm; - qreal queryWeight; - PhraseQuery* _this; - public: - PhraseWeight(Searcher* searcher, PhraseQuery* _this); - ~PhraseWeight(); - TCHAR* toString(); - - Query* getQuery(); - qreal getValue(); - - qreal sumOfSquaredWeights(); - void normalize(qreal queryNorm); - Scorer* scorer(CL_NS(index)::IndexReader* reader); - void explain(CL_NS(index)::IndexReader* reader, int32_t doc, Explanation* ret); - TCHAR* toString(TCHAR* f); - bool equals(PhraseWeight* o); - }; - friend class PhraseWeight; - protected: - Weight* _createWeight(Searcher* searcher); - PhraseQuery(const PhraseQuery& clone); - public: - //Constructor - PhraseQuery(); - - //Destructor - ~PhraseQuery(); - - //Returns the string "PhraseQuery" - const TCHAR* getQueryName() const; - static const TCHAR* getClassName(); - - //Sets the number of other words permitted between words in query phrase. - //If zero, then this is an exact phrase search. For larger values this works - //like a WITHIN or NEAR operator. - // - //The slop is in fact an edit-distance, where the units correspond to - //moves of terms in the query phrase out of position. For example, to switch - //the order of two words requires two moves (the first move places the words - //atop one another), so to permit re-orderings of phrases, the slop must be - //at least two. - // - //More exact matches are scored higher than sloppier matches, thus search - //results are sorted by exactness. - // - //The slop is zero by default, requiring exact matches. - void setSlop(const int32_t s) { slop = s; } - - //Returns the slop. See setSlop(). - int32_t getSlop() const { return slop; } - - //Adds a term to the end of the query phrase. - void add(CL_NS(index)::Term* term); - void add(CL_NS(index)::Term* term, int32_t position); - - - - //Returns the sum of squared weights - qreal sumOfSquaredWeights(Searcher* searcher); - - //Normalizes the Weight - void normalize(const qreal norm); - - Scorer* scorer(CL_NS(index)::IndexReader* reader); - - //added by search highlighter - CL_NS(index)::Term** getTerms() const; - _CL_DEPRECATED( deleteDocuments ) int32_t* getPositions() const; ///@deprecated. use getPositions(Array& result) - void getPositions(Array& result) const; - const TCHAR* getFieldName() const{ return field; } - - //Prints a user-readable version of this query. - TCHAR* toString(const TCHAR* f) const; - - Query* clone() const; - bool equals(CL_NS(search)::Query *) const; - - size_t hashCode() const; - }; -CL_NS_END -#endif diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/search/PhraseQueue.h qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/search/PhraseQueue.h --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/search/PhraseQueue.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/search/PhraseQueue.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,36 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#ifndef _lucene_search_PriorityQueue_ -#define _lucene_search_PriorityQueue_ - -#if defined(_LUCENE_PRAGMA_ONCE) -# pragma once -#endif - -#include "CLucene/util/PriorityQueue.h" -#include "PhrasePositions.h" - -CL_NS_DEF(search) - class PhraseQueue: public CL_NS(util)::PriorityQueue > { - public: - PhraseQueue(const int32_t size) { - initialize(size,false); - } - ~PhraseQueue(){ - } - - protected: - bool lessThan(PhrasePositions* pp1, PhrasePositions* pp2) { - if (pp1->doc == pp2->doc) - return pp1->position < pp2->position; - else - return pp1->doc < pp2->doc; - } - }; -CL_NS_END -#endif diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/search/PhraseScorer.cpp qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/search/PhraseScorer.cpp --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/search/PhraseScorer.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/search/PhraseScorer.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,225 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#include "CLucene/StdHeader.h" -#include "PhraseScorer.h" - -#include "PhraseQueue.h" -#include "PhrasePositions.h" -#include "Scorer.h" -#include "Similarity.h" - -CL_NS_USE(index) -CL_NS_USE(util) -CL_NS_DEF(search) - - - PhraseScorer::PhraseScorer(Weight* weight, TermPositions** tps, - int32_t* positions, Similarity* similarity, uint8_t* norms): - Scorer(similarity) - { - //Func - Constructor - //Pre - tps != NULL and is an array of TermPositions - // tpsLength >= 0 - // n != NULL - //Post - The instance has been created - - CND_PRECONDITION(tps != NULL,"tps is NULL"); - - //norms are only used if phraseFreq returns more than 0.0 - //phraseFreq should only return more than 0.0 if norms != NULL - //CND_PRECONDITION(n != NULL,"n is NULL"); - - firstTime = true; - more = true; - this->norms = norms; - this->weight = weight; - this->value = weight->getValue(); - - //reset internal pointers - first = NULL; - last = NULL; - - //use pq to build a sorted list of PhrasePositions - int32_t i = 0; - while(tps[i] != NULL){ - PhrasePositions *pp = _CLNEW PhrasePositions(tps[i], positions[i]); - CND_CONDITION(pp != NULL,"Could not allocate memory for pp"); - - //Store PhrasePos into the PhrasePos pq - if (last != NULL) { // add next to end of list - last->_next = pp; - } else - first = pp; - last = pp; - - i++; - } - - pq = _CLNEW PhraseQueue(i); //i==tps.length - CND_CONDITION(pq != NULL,"Could not allocate memory for pq"); - } - - PhraseScorer::~PhraseScorer() { - //Func - Destructor - //Pre - true - //Post - The instance has been destroyed - - //The PhraseQueue pq (which is a PriorityQueue) pq is actually empty at present, the elements - //having been transferred by pqToList() to the linked list starting with - //first. The nodes of that linked list are deleted by the destructor of - //first, rather than the destructor of pq. - _CLDELETE(first); - _CLDELETE(pq); - } - - bool PhraseScorer::next(){ - if (firstTime) { - init(); - firstTime = false; - } else if (more) { - more = last->next(); // trigger further scanning - } - return doNext(); - } - - // next without initial increment - bool PhraseScorer::doNext() { - while (more) { - while (more && first->doc < last->doc) { // find doc w/ all the terms - more = first->skipTo(last->doc); // skip first upto last - firstToLast(); // and move it to the end - } - - if (more) { - // found a doc with all of the terms - freq = phraseFreq(); // check for phrase - if (freq == 0.0f) // no match - more = last->next(); // trigger further scanning - else - return true; // found a match - } - } - return false; // no more matches - } - - qreal PhraseScorer::score(){ - //System.out.println("scoring " + first.doc); - qreal raw = getSimilarity()->tf(freq) * value; // raw score - return raw * Similarity::decodeNorm(norms[first->doc]); // normalize - } - - bool PhraseScorer::skipTo(int32_t target) { - for (PhrasePositions* pp = first; more && pp != NULL; pp = pp->_next) { - more = pp->skipTo(target); - } - if (more) - sort(); // re-sort - return doNext(); - } - - void PhraseScorer::init() { - for (PhrasePositions* pp = first; more && pp != NULL; pp = pp->_next) - more = pp->next(); - if(more) - sort(); - } - - void PhraseScorer::sort() { - pq->clear(); - for (PhrasePositions* pp = first; pp != NULL; pp = pp->_next) - pq->put(pp); - pqToList(); - } - - - - void PhraseScorer::pqToList(){ - //Func - Transfers the PhrasePositions from the PhraseQueue pq to - // the PhrasePositions list with first as its first element - //Pre - pq != NULL - // first = NULL - // last = NULL - //Post - All PhrasePositions have been transfered to the list - // of PhrasePositions of which the first element is pointed to by first - // and the last element is pointed to by last - - CND_PRECONDITION(pq != NULL,"pq is NULL"); - - last = first = NULL; - - PhrasePositions* PhrasePos = NULL; - - //As long pq is not empty - while (pq->top() != NULL){ - //Pop a PhrasePositions instance - PhrasePos = pq->pop(); - - // add next to end of list - if (last != NULL) { - last->_next = PhrasePos; - } else { - first = PhrasePos; - } - - //Let last point to the new last PhrasePositions instance just added - last = PhrasePos; - //Reset the next of last to NULL - last->_next = NULL; - } - - //Check to see that pq is empty now - CND_CONDITION(pq->size()==0, "pq is not empty while it should be"); - } - - void PhraseScorer::firstToLast(){ - //Func - Moves first to the end of the list - //Pre - first is NULL or points to an PhrasePositions Instance - // last is NULL or points to an PhrasePositions Instance - // first and last both are NULL or both are not NULL - //Post - The first element has become the last element in the list - - CND_PRECONDITION(((first==NULL && last==NULL) ||(first !=NULL && last != NULL)), - "Either first or last is NULL but not both"); - - //Check if first and last are valid pointers - if(first && last){ - last->_next = first; - last = first; - first = first->_next; - last->_next = NULL; - } - } - - - void PhraseScorer::explain(int32_t _doc, Explanation* tfExplanation) { - while (next() && doc() < _doc){ - } - - qreal phraseFreq = (doc() == _doc) ? freq : 0.0f; - tfExplanation->setValue(getSimilarity()->tf(phraseFreq)); - - StringBuffer buf; - buf.append(_T("tf(phraseFreq=")); - buf.appendFloat(phraseFreq,2); - buf.append(_T(")")); - tfExplanation->setDescription(buf.getBuffer()); - } - - TCHAR* PhraseScorer::toString() { - StringBuffer buf; - buf.append(_T("scorer(")); - - TCHAR* tmp = weight->toString(); - buf.append(tmp); - _CLDELETE_CARRAY(tmp); - - buf.append(_T(")")); - - return buf.toString(); - } - -CL_NS_END diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/search/PhraseScorer.h qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/search/PhraseScorer.h --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/search/PhraseScorer.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/search/PhraseScorer.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,65 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#ifndef _lucene_search_PhraseScorer_ -#define _lucene_search_PhraseScorer_ - -#if defined(_LUCENE_PRAGMA_ONCE) -# pragma once -#endif - -#include "PhraseQueue.h" -#include "PhrasePositions.h" -#include "Scorer.h" -#include "Similarity.h" - -CL_NS_DEF(search) - - class PhraseScorer: public Scorer { - private: - Weight* weight; - qreal freq; - bool firstTime; - bool more; - - protected: - uint8_t* norms; - qreal value; - - PhraseQueue* pq; //is used to order the list point to by first and last - PhrasePositions* first; //Points to the first in the list of PhrasePositions - PhrasePositions* last; //Points to the last in the list of PhrasePositions - - public: - //Constructor - PhraseScorer(Weight* weight, CL_NS(index)::TermPositions** tps, - int32_t* positions, Similarity* similarity, uint8_t* norms); - virtual ~PhraseScorer(); - - int32_t doc() const { return first->doc; } - bool next(); - qreal score(); - bool skipTo(int32_t target); - - - void explain(int32_t doc, Explanation* ret); - TCHAR* toString(); - protected: - virtual qreal phraseFreq() =0; - - //Transfers the PhrasePositions from the PhraseQueue pq to - //the PhrasePositions list with first as its first element - void pqToList(); - - //Moves first to the end of the list - void firstToLast(); - private: - bool doNext(); - void init(); - void sort(); - }; -CL_NS_END -#endif diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/search/PrefixQuery.cpp qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/search/PrefixQuery.cpp --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/search/PrefixQuery.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/search/PrefixQuery.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,273 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#include "CLucene/StdHeader.h" -#include "PrefixQuery.h" -#include "CLucene/util/BitSet.h" - -CL_NS_USE(util) -CL_NS_USE(index) -CL_NS_DEF(search) - - PrefixQuery::PrefixQuery(Term* Prefix){ - //Func - Constructor. - // Constructs a query for terms starting with prefix - //Pre - Prefix != NULL - //Post - The instance has been created - - //Get a pointer to Prefix - prefix = _CL_POINTER(Prefix); - } - - PrefixQuery::PrefixQuery(const PrefixQuery& clone):Query(clone){ - prefix = _CL_POINTER(clone.prefix); - } - Query* PrefixQuery::clone() const{ - return _CLNEW PrefixQuery(*this); - } - - Term* PrefixQuery::getPrefix(bool pointer){ - if ( pointer ) - return _CL_POINTER(prefix); - else - return prefix; - } - - PrefixQuery::~PrefixQuery(){ - //Func - Destructor - //Pre - true - //Post - The instance has been destroyed. - - //Delete prefix by finalizing it - _CLDECDELETE(prefix); - } - - - /** Returns a hash code value for this object.*/ - size_t PrefixQuery::hashCode() const { - return Similarity::floatToByte(getBoost()) ^ prefix->hashCode(); - } - - const TCHAR* PrefixQuery::getQueryName()const{ - //Func - Returns the name "PrefixQuery" - //Pre - true - //Post - The string "PrefixQuery" has been returned - - return getClassName(); - } - const TCHAR* PrefixQuery::getClassName(){ - //Func - Returns the name "PrefixQuery" - //Pre - true - //Post - The string "PrefixQuery" has been returned - - return _T("PrefixQuery"); - } - - bool PrefixQuery::equals(Query * other) const{ - if (!(other->instanceOf(PrefixQuery::getClassName()))) - return false; - - PrefixQuery* rq = (PrefixQuery*)other; - bool ret = (this->getBoost() == rq->getBoost()) - && (this->prefix->equals(rq->prefix)); - - return ret; - } - - Query* PrefixQuery::rewrite(IndexReader* reader){ - BooleanQuery* query = _CLNEW BooleanQuery(); - TermEnum* enumerator = reader->terms(prefix); - Term* lastTerm = NULL; - try { - const TCHAR* prefixText = prefix->text(); - const TCHAR* prefixField = prefix->field(); - const TCHAR* tmp; - size_t i; - int32_t prefixLen = prefix->textLength(); - do { - lastTerm = enumerator->term(); - if (lastTerm != NULL && lastTerm->field() == prefixField ){ - - //now see if term->text() starts with prefixText - int32_t termLen = lastTerm->textLength(); - if ( prefixLen>termLen ) - break; //the prefix is longer than the term, can't be matched - - tmp = lastTerm->text(); - - //check for prefix match in reverse, since most change will be at the end - for ( i=prefixLen-1;i!=-1;--i ){ - if ( tmp[i] != prefixText[i] ){ - tmp=NULL;//signals inequality - break; - } - } - if ( tmp == NULL ) - break; - - TermQuery* tq = _CLNEW TermQuery(lastTerm); // found a match - tq->setBoost(getBoost()); // set the boost - query->add(tq,true,false, false); // add to query - } else - break; - _CLDECDELETE(lastTerm); - } while (enumerator->next()); - }_CLFINALLY( - enumerator->close(); - _CLDELETE(enumerator); - _CLDECDELETE(lastTerm); - ); - _CLDECDELETE(lastTerm); - - - //if we only added one clause and the clause is not prohibited then - //we can just return the query - if (query->getClauseCount() == 1) { // optimize 1-clause queries - BooleanClause* c=0; - query->getClauses(&c); - - if (!c->prohibited) { // just return clause - c->deleteQuery=false; - Query* ret = c->query; - - _CLDELETE(query); - return ret; - } - } - - return query; - } - - Query* PrefixQuery::combine(Query** queries) { - return Query::mergeBooleanQueries(queries); - } - - TCHAR* PrefixQuery::toString(const TCHAR* field) const{ - //Func - Creates a user-readable version of this query and returns it as as string - //Pre - field != NULL - //Post - a user-readable version of this query has been returned as as string - - //Instantiate a stringbuffer buffer to store the readable version temporarily - CL_NS(util)::StringBuffer buffer; - //check if field equal to the field of prefix - if( field==NULL || _tcscmp(prefix->field(),field) != 0 ) { - //Append the field of prefix to the buffer - buffer.append(prefix->field()); - //Append a colon - buffer.append(_T(":") ); - } - //Append the text of the prefix - buffer.append(prefix->text()); - //Append a wildchar character - buffer.append(_T("*")); - //if the boost factor is not eaqual to 1 - if (getBoost() != 1.0f) { - //Append ^ - buffer.append(_T("^")); - //Append the boost factor - buffer.appendFloat( getBoost(),1); - } - //Convert StringBuffer buffer to TCHAR block and return it - return buffer.toString(); - } - - - - - - - - -PrefixFilter::PrefixFilter( Term* prefix ) -{ - this->prefix = _CL_POINTER(prefix); -} - -PrefixFilter::~PrefixFilter() -{ - _CLDECDELETE(prefix); -} - -PrefixFilter::PrefixFilter( const PrefixFilter& copy ) : - prefix( _CL_POINTER(copy.prefix) ) -{ -} - -Filter* PrefixFilter::clone() const { - return _CLNEW PrefixFilter(*this ); -} - -TCHAR* PrefixFilter::toString() -{ - //Instantiate a stringbuffer buffer to store the readable version temporarily - CL_NS(util)::StringBuffer buffer; - //check if field equal to the field of prefix - if( prefix->field() != NULL ) { - //Append the field of prefix to the buffer - buffer.append(prefix->field()); - //Append a colon - buffer.append(_T(":") ); - } - //Append the text of the prefix - buffer.append(prefix->text()); - buffer.append(_T("*")); - - //Convert StringBuffer buffer to TCHAR block and return it - return buffer.toString(); -} - -/** Returns a BitSet with true for documents which should be permitted in -search results, and false for those that should not. */ -BitSet* PrefixFilter::bits( IndexReader* reader ) -{ - BitSet* bts = _CLNEW BitSet( reader->maxDoc() ); - TermEnum* enumerator = reader->terms(prefix); - TermDocs* docs = reader->termDocs(); - const TCHAR* prefixText = prefix->text(); - const TCHAR* prefixField = prefix->field(); - const TCHAR* tmp; - size_t i; - int32_t prefixLen = prefix->textLength(); - Term* lastTerm = NULL; - - try{ - do{ - lastTerm = enumerator->term(false); - if (lastTerm != NULL && lastTerm->field() == prefixField ){ - //now see if term->text() starts with prefixText - int32_t termLen = lastTerm->textLength(); - if ( prefixLen>termLen ) - break; //the prefix is longer than the term, can't be matched - - tmp = lastTerm->text(); - - //check for prefix match in reverse, since most change will be at the end - for ( i=prefixLen-1;i!=-1;--i ){ - if ( tmp[i] != prefixText[i] ){ - tmp=NULL;//signals inequality - break; - } - } - if ( tmp == NULL ) - break; - - docs->seek(enumerator); - while (docs->next()) { - bts->set(docs->doc()); - } - } - }while(enumerator->next()); - } _CLFINALLY( - docs->close(); - _CLDELETE(docs); - enumerator->close(); - _CLDELETE(enumerator); - ) - - return bts; -} - -CL_NS_END diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/search/PrefixQuery.h qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/search/PrefixQuery.h --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/search/PrefixQuery.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/search/PrefixQuery.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,75 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#ifndef _lucene_search_PrefixQuery -#define _lucene_search_PrefixQuery -#if defined(_LUCENE_PRAGMA_ONCE) -# pragma once -#endif - -#include "CLucene/index/Term.h" -#include "CLucene/index/Terms.h" -#include "CLucene/index/IndexReader.h" -#include "SearchHeader.h" -#include "BooleanQuery.h" -#include "TermQuery.h" -#include "CLucene/util/StringBuffer.h" - -CL_NS_DEF(search) - //PrefixQuery is a Query that matches documents containing terms with a specified prefix. - - class PrefixQuery: public Query { - private: - CL_NS(index)::Term* prefix; - protected: - PrefixQuery(const PrefixQuery& clone); - public: - - //Constructor. Constructs a query for terms starting with prefix - PrefixQuery(CL_NS(index)::Term* Prefix); - - //Destructor - ~PrefixQuery(); - - //Returns the name "PrefixQuery" - const TCHAR* getQueryName() const; - static const TCHAR* getClassName(); - - /** Returns the prefix of this query. */ - CL_NS(index)::Term* getPrefix(bool pointer=true); - - Query* combine(Query** queries); - Query* rewrite(CL_NS(index)::IndexReader* reader); - Query* clone() const; - bool equals(Query * other) const; - - //Creates a user-readable version of this query and returns it as as string - TCHAR* toString(const TCHAR* field) const; - - size_t hashCode() const; - }; - - - class PrefixFilter: public Filter - { - private: - CL_NS(index)::Term* prefix; - protected: - PrefixFilter( const PrefixFilter& copy ); - - public: - PrefixFilter(CL_NS(index)::Term* prefix); - ~PrefixFilter(); - - /** Returns a BitSet with true for documents which should be permitted in - search results, and false for those that should not. */ - CL_NS(util)::BitSet* bits( CL_NS(index)::IndexReader* reader ); - - Filter* clone() const; - TCHAR* toString(); - }; -CL_NS_END -#endif diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/search/QueryFilter.cpp qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/search/QueryFilter.cpp --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/search/QueryFilter.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/search/QueryFilter.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,73 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#include "CLucene/StdHeader.h" -#include "QueryFilter.h" -#include "IndexSearcher.h" - -CL_NS_DEF(search) -CL_NS_USE(util) -CL_NS_USE(index) - - -QueryFilter::QueryFilter( const Query* query ) -{ - this->query = query->clone(); -} - - -QueryFilter::~QueryFilter() -{ - _CLDELETE( query ); -} - - -QueryFilter::QueryFilter( const QueryFilter& copy ) -{ - this->query = copy.query->clone(); -} - - -Filter* QueryFilter::clone() const { - return _CLNEW QueryFilter(*this ); -} - - -TCHAR* QueryFilter::toString() -{ - TCHAR* qt = query->toString(); - size_t len = _tcslen(qt) + 14; - TCHAR* ret = _CL_NEWARRAY( TCHAR, len ); - ret[0] = 0; - _sntprintf( ret, len, _T("QueryFilter(%s)"), qt ); - _CLDELETE_CARRAY(qt); - return ret; -} - - -/** Returns a BitSet with true for documents which should be permitted in -search results, and false for those that should not. */ -BitSet* QueryFilter::bits( IndexReader* reader ) -{ - BitSet* bits = _CLNEW BitSet(reader->maxDoc()); - - IndexSearcher s(reader); - QFHitCollector hc(bits); - s._search(query, NULL, &hc); - return bits; -} - - -QueryFilter::QFHitCollector::QFHitCollector(CL_NS(util)::BitSet* bits){ - this->bits = bits; -} - -void QueryFilter::QFHitCollector::collect(const int32_t doc, const qreal score) { - bits->set(doc); // set bit for hit -} - - -CL_NS_END diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/search/QueryFilter.h qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/search/QueryFilter.h --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/search/QueryFilter.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/search/QueryFilter.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,44 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#ifndef _lucene_search_QueryFilter_ -#define _lucene_search_QueryFilter_ - -#include "CLucene/util/BitSet.h" -#include "CLucene/index/IndexReader.h" -#include "SearchHeader.h" -#include "CachingWrapperFilter.h" - -CL_NS_DEF(search) - -class QueryFilter: public Filter -{ -private: - Query* query; - - class QFHitCollector: public HitCollector{ - CL_NS(util)::BitSet* bits; - public: - QFHitCollector(CL_NS(util)::BitSet* bits); - void collect(const int32_t doc, const qreal score); - }; - -protected: - QueryFilter( const QueryFilter& copy ); -public: - QueryFilter( const Query* query ); - - ~QueryFilter(); - - CL_NS(util)::BitSet* bits( CL_NS(index)::IndexReader* reader ); - - Filter *clone() const; - - TCHAR *toString(); -}; - -CL_NS_END -#endif diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/search/RangeFilter.cpp qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/search/RangeFilter.cpp --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/search/RangeFilter.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/search/RangeFilter.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,150 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#include "CLucene/StdHeader.h" -#include "RangeFilter.h" - -CL_NS_DEF(search) -CL_NS_USE(index) -CL_NS_USE(util) -CL_NS_USE(document) - - -RangeFilter::RangeFilter( const TCHAR* fieldName, const TCHAR* lowerTerm, const TCHAR* upperTerm, bool includeLower, bool includeUpper ) -{ - this->field = STRDUP_TtoT(fieldName); - if ( lowerTerm != NULL ) - this->lowerValue = STRDUP_TtoT(lowerTerm); - else - this->lowerValue = NULL; - if ( upperTerm != NULL ) - this->upperValue = STRDUP_TtoT(upperTerm); - else - this->upperValue = NULL; - this->includeLower = includeLower; - this->includeUpper = includeUpper; -} - - -/** - * Constructs a filter for field fieldName matching - * less than or equal to upperTerm. - */ -RangeFilter* RangeFilter::Less( TCHAR* fieldName, TCHAR* upperTerm ) { - return new RangeFilter( fieldName, NULL, upperTerm, false, true ); -} - - -/** -* Constructs a filter for field fieldName matching -* more than or equal to lowerTerm. -*/ -RangeFilter* RangeFilter::More( TCHAR* fieldName, TCHAR* lowerTerm ) { - return new RangeFilter( fieldName, lowerTerm, NULL, true, false ); -} - - -RangeFilter::~RangeFilter() -{ - _CLDELETE_CARRAY( lowerValue ); - _CLDELETE_CARRAY( field ); - _CLDELETE_CARRAY( upperValue ); -} - - -RangeFilter::RangeFilter( const RangeFilter& copy ) : - field( STRDUP_TtoT(copy.field) ), - lowerValue( STRDUP_TtoT(copy.lowerValue) ), - upperValue( STRDUP_TtoT(copy.upperValue) ), - includeLower( copy.includeLower ), - includeUpper( copy.includeUpper ) -{ -} - - -Filter* RangeFilter::clone() const { - return _CLNEW RangeFilter(*this ); -} - - -TCHAR* RangeFilter::toString() -{ - size_t len = (field ? _tcslen(field) : 0) + (lowerValue ? _tcslen(lowerValue) : 0) + (upperValue ? _tcslen(upperValue) : 0) + 8; - TCHAR* ret = _CL_NEWARRAY( TCHAR, len ); - ret[0] = 0; - _sntprintf( ret, len, _T("%s: [%s-%s]"), field, (lowerValue?lowerValue:_T("")), (upperValue?upperValue:_T("")) ); - - return ret; -} - - -/** Returns a BitSet with true for documents which should be permitted in -search results, and false for those that should not. */ -BitSet* RangeFilter::bits( IndexReader* reader ) -{ - BitSet* bts = _CLNEW BitSet( reader->maxDoc() ); - Term* term = NULL; - - Term* t = _CLNEW Term( field, (lowerValue ? lowerValue : _T("")), false ); - TermEnum* enumerator = reader->terms( t ); // get enumeration of all terms after lowerValue - _CLDECDELETE( t ); - - if( enumerator->term(false) == NULL ) { - _CLDELETE( enumerator ); - return bts; - } - - bool checkLower = false; - if( !includeLower ) // make adjustments to set to exclusive - checkLower = true; - - TermDocs* termDocs = reader->termDocs(); - - try - { - do - { - term = enumerator->term(); - - if( term == NULL || _tcscmp(term->field(), field) ) - break; - - if( !checkLower || lowerValue == NULL || _tcscmp(term->text(), lowerValue) > 0 ) - { - checkLower = false; - if( upperValue != NULL ) - { - int compare = _tcscmp( upperValue, term->text() ); - - /* if beyond the upper term, or is exclusive and - * this is equal to the upper term, break out */ - if( (compare < 0) || (!includeUpper && compare == 0) ) - break; - } - - termDocs->seek( enumerator->term(false) ); - while( termDocs->next() ) { - bts->set( termDocs->doc() ); - } - } - - _CLDECDELETE( term ); - } - while( enumerator->next() ); - } - _CLFINALLY - ( - _CLDECDELETE( term ); - termDocs->close(); - _CLVDELETE( termDocs ); - enumerator->close(); - _CLDELETE( enumerator ); - ); - - return bts; -} - -CL_NS_END diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/search/RangeFilter.h qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/search/RangeFilter.h --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/search/RangeFilter.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/search/RangeFilter.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,51 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ - -#ifndef _lucene_search_RangeFilter_ -#define _lucene_search_RangeFilter_ - -#include "CLucene/document/DateField.h" -#include "CLucene/index/Term.h" -#include "CLucene/index/Terms.h" -#include "CLucene/index/IndexReader.h" -#include "CLucene/util/BitSet.h" -#include "CLucene/search/Filter.h" - -CL_NS_DEF(search) - -class RangeFilter: public Filter -{ -private: - const TCHAR* field; - TCHAR* lowerValue; - TCHAR* upperValue; - bool includeLower; - bool includeUpper; - -protected: - RangeFilter( const RangeFilter& copy ); - -public: - RangeFilter( const TCHAR* fieldName, const TCHAR* lowerValue, const TCHAR* upperValue, bool includeLower, bool includeUpper ); - - static RangeFilter* Less( TCHAR* fieldName, TCHAR* upperTerm ); - - static RangeFilter* More( TCHAR* fieldName, TCHAR* lowerTerm ); - - ~RangeFilter(); - - /** Returns a BitSet with true for documents which should be permitted in - search results, and false for those that should not. */ - CL_NS(util)::BitSet* bits( CL_NS(index)::IndexReader* reader ); - - Filter* clone() const; - - TCHAR* toString(); -}; - -CL_NS_END -#endif diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/search/RangeQuery.cpp qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/search/RangeQuery.cpp --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/search/RangeQuery.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/search/RangeQuery.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,204 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#include "CLucene/StdHeader.h" -#include "RangeQuery.h" - -#include "SearchHeader.h" -#include "Scorer.h" -#include "BooleanQuery.h" -#include "TermQuery.h" - -#include "CLucene/index/Term.h" -#include "CLucene/index/Terms.h" -#include "CLucene/index/IndexReader.h" -#include "CLucene/util/StringBuffer.h" - - -CL_NS_USE(index) -CL_NS_USE(util) -CL_NS_DEF(search) - - RangeQuery::RangeQuery(Term* lowerTerm, Term* upperTerm, const bool Inclusive){ - //Func - Constructor - //Pre - (LowerTerm != NULL OR UpperTerm != NULL) AND - // if LowerTerm and UpperTerm are valid pointer then the fieldnames must be the same - //Post - The instance has been created - - if (lowerTerm == NULL && upperTerm == NULL) - { - _CLTHROWA(CL_ERR_IllegalArgument,"At least one term must be non-null"); - } - if (lowerTerm != NULL && upperTerm != NULL && lowerTerm->field() != upperTerm->field()) - { - _CLTHROWA(CL_ERR_IllegalArgument,"Both terms must be for the same field"); - } - - // if we have a lowerTerm, start there. otherwise, start at beginning - if (lowerTerm != NULL) { - this->lowerTerm = _CL_POINTER(lowerTerm); - } - else { - this->lowerTerm = _CLNEW Term(upperTerm, LUCENE_BLANK_STRING); - } - this->upperTerm = (upperTerm != NULL ? _CL_POINTER(upperTerm) : NULL); - this->inclusive = Inclusive; - } - RangeQuery::RangeQuery(const RangeQuery& clone): - Query(clone){ - this->inclusive = clone.inclusive; - this->upperTerm = (clone.upperTerm != NULL ? _CL_POINTER(clone.upperTerm) : NULL ); - this->lowerTerm = (clone.lowerTerm != NULL ? _CL_POINTER(clone.lowerTerm) : NULL ); - } - Query* RangeQuery::clone() const{ - return _CLNEW RangeQuery(*this); - } - - RangeQuery::~RangeQuery() { - //Func - Destructor - //Pre - true - //Post - The instance has been destroyed - - _CLDECDELETE(lowerTerm); - _CLDECDELETE(upperTerm); - } - - /** Returns a hash code value for this object.*/ - size_t RangeQuery::hashCode() const { - return Similarity::floatToByte(getBoost()) ^ - (lowerTerm != NULL ? lowerTerm->hashCode() : 0) ^ - (upperTerm != NULL ? upperTerm->hashCode() : 0) ^ - (this->inclusive ? 1 : 0); - } - - const TCHAR* RangeQuery::getQueryName() const{ - return getClassName(); - } - const TCHAR* RangeQuery::getClassName(){ - return _T("RangeQuery"); - } - - Query* RangeQuery::combine(Query** queries) { - return Query::mergeBooleanQueries(queries); - } - - bool RangeQuery::equals(Query * other) const{ - if (!(other->instanceOf(RangeQuery::getClassName()))) - return false; - - RangeQuery* rq = (RangeQuery*)other; - bool ret = (this->getBoost() == rq->getBoost()) - && (this->isInclusive() == rq->isInclusive()) - && (this->getLowerTerm()->equals(rq->getLowerTerm())) - && (this->getUpperTerm()->equals(rq->getUpperTerm())); - - return ret; - } - - - /** - * FIXME: Describe rewrite method here. - * - * @param reader an IndexReader value - * @return a Query value - * @exception IOException if an error occurs - */ - Query* RangeQuery::rewrite(IndexReader* reader){ - - BooleanQuery* query = _CLNEW BooleanQuery; - TermEnum* enumerator = reader->terms(lowerTerm); - Term* lastTerm = NULL; - try { - bool checkLower = false; - if (!inclusive) // make adjustments to set to exclusive - checkLower = true; - - const TCHAR* testField = getField(); - do { - lastTerm = enumerator->term(); - if (lastTerm != NULL && lastTerm->field() == testField ) { - if (!checkLower || _tcscmp(lastTerm->text(),lowerTerm->text()) > 0) { - checkLower = false; - if (upperTerm != NULL) { - int compare = _tcscmp(upperTerm->text(),lastTerm->text()); - /* if beyond the upper term, or is exclusive and - * this is equal to the upper term, break out */ - if ((compare < 0) || (!inclusive && compare == 0)) - break; - } - TermQuery* tq = _CLNEW TermQuery(lastTerm); // found a match - tq->setBoost(getBoost()); // set the boost - query->add(tq, true, false, false); // add to query - } - }else { - break; - } - _CLDECDELETE(lastTerm); - } - while (enumerator->next()); - }catch(...){ - _CLDECDELETE(lastTerm); //always need to delete this - _CLDELETE(query); //in case of error, delete the query - enumerator->close(); - _CLDELETE(enumerator); - throw; //rethrow - } - _CLDECDELETE(lastTerm); //always need to delete this - enumerator->close(); - _CLDELETE(enumerator); - - return query; - } - - /** Prints a user-readable version of this query. */ - TCHAR* RangeQuery::toString(const TCHAR* field) const - { - StringBuffer buffer; - if ( field==NULL || _tcscmp(getField(),field)!=0 ) - { - buffer.append( getField() ); - buffer.append( _T(":")); - } - buffer.append(inclusive ? _T("[") : _T("{")); - buffer.append(lowerTerm != NULL ? lowerTerm->text() : _T("NULL")); - buffer.append(_T(" TO ")); - buffer.append(upperTerm != NULL ? upperTerm->text() : _T("NULL")); - buffer.append(inclusive ? _T("]") : _T("}")); - if (getBoost() != 1.0f) - { - buffer.append( _T("^")); - buffer.appendFloat( getBoost(),1 ); - } - return buffer.toString(); - } - - - const TCHAR* RangeQuery::getField() const - { - return (lowerTerm != NULL ? lowerTerm->field() : upperTerm->field()); - } - - /** Returns the lower term of this range query */ - Term* RangeQuery::getLowerTerm(bool pointer) const { - if ( pointer ) - return _CL_POINTER(lowerTerm); - else - return lowerTerm; - } - - /** Returns the upper term of this range query */ - Term* RangeQuery::getUpperTerm(bool pointer) const { - if ( pointer ) - return _CL_POINTER(upperTerm); - else - return upperTerm; - } - - /** Returns true if the range query is inclusive */ - bool RangeQuery::isInclusive() const { return inclusive; } - - -CL_NS_END diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/search/RangeQuery.h qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/search/RangeQuery.h --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/search/RangeQuery.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/search/RangeQuery.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,71 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#ifndef _lucene_search_RangeQuery_ -#define _lucene_search_RangeQuery_ -#if defined(_LUCENE_PRAGMA_ONCE) -# pragma once -#endif - -#include "SearchHeader.h" -#include "Scorer.h" -#include "TermQuery.h" - -#include "CLucene/index/Term.h" -#include "CLucene/index/Terms.h" - -#include "CLucene/util/StringBuffer.h" - - -CL_NS_DEF(search) - /** Constructs a query selecting all terms greater than - * lowerTerm but less than upperTerm. - * There must be at least one term and either term may be null, - * in which case there is no bound on that side, but if there are - * two terms, both terms must be for the same field. - */ - class RangeQuery: public Query - { - private: - CL_NS(index)::Term* lowerTerm; - CL_NS(index)::Term* upperTerm; - bool inclusive; - protected: - RangeQuery(const RangeQuery& clone); - - public: - // Constructs a query selecting all terms greater than - // lowerTerm but less than upperTerm. - // There must be at least one term and either term may be NULL-- - // in which case there is no bound on that side, but if there are - // two term, both terms must be for the same field. - RangeQuery(CL_NS(index)::Term* LowerTerm, CL_NS(index)::Term* UpperTerm, const bool Inclusive); - ~RangeQuery(); - - const TCHAR* getQueryName() const; - static const TCHAR* getClassName(); - - Query* rewrite(CL_NS(index)::IndexReader* reader); - - Query* combine(Query** queries); - - // Prints a user-readable version of this query. - TCHAR* toString(const TCHAR* field) const; - - Query* clone() const; - - bool equals(Query * other) const; - - CL_NS(index)::Term* getLowerTerm(bool pointer=true) const; - CL_NS(index)::Term* getUpperTerm(bool pointer=true) const; - bool isInclusive() const; - const TCHAR* getField() const; - - size_t hashCode() const; - }; - -CL_NS_END -#endif diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/search/Scorer.h qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/search/Scorer.h --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/search/Scorer.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/search/Scorer.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,80 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#ifndef _lucene_search_Scorer_ -#define _lucene_search_Scorer_ - -#if defined(_LUCENE_PRAGMA_ONCE) -# pragma once -#endif - -#include "Similarity.h" -#include "SearchHeader.h" -#include "Explanation.h" - -CL_NS_DEF(search) - /** Expert: Implements scoring for a class of queries. */ -class Scorer: LUCENE_BASE { - private: - Similarity* similarity; - protected: - /** Constructs a Scorer. */ - Scorer(Similarity* similarity) { - this->similarity = similarity; - } - public: - virtual ~Scorer(){ - } - - /** Returns the Similarity implementation used by this scorer. */ - Similarity* getSimilarity() const{ - return this->similarity; - } - - /** Scores all documents and passes them to a collector. */ - void score(HitCollector* hc) { - while (next()) { - hc->collect(doc(), score()); - } - } - - /** Advance to the next document matching the query. Returns true iff there - * is another match. */ - virtual bool next() = 0; - - /** Returns the current document number. Initially invalid, until {@link - * #next()} is called the first time. */ - virtual int32_t doc() const = 0; - - /** Returns the score of the current document. Initially invalid, until - * {@link #next()} is called the first time. */ - virtual qreal score() = 0; - - /** Skips to the first match beyond the current whose document number is - * greater than or equal to target.

Returns true iff there is such - * a match.

Behaves as if written:

-         *   boolean skipTo(int32_t target) {
-         *     do {
-         *       if (!next())
-         * 	     return false;
-         *     } while (target > doc());
-         *     return true;
-         *   }
-         * 
- * Most implementations are considerably more efficient than that. - */ - virtual bool skipTo(int32_t target) = 0; - - /** Returns an explanation of the score for doc. */ - virtual void explain(int32_t doc, Explanation* ret) = 0; - - - /** Returns an string which explains the object */ - virtual TCHAR* toString() = 0; - - }; -CL_NS_END -#endif diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/search/SearchHeader.cpp qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/search/SearchHeader.cpp --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/search/SearchHeader.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/search/SearchHeader.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,141 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#include "CLucene/StdHeader.h" -#include "SearchHeader.h" -#include "BooleanQuery.h" -#include "FieldDocSortedHitQueue.h" - -CL_NS_USE(index) -CL_NS_DEF(search) - -CL_NS(document)::Document* Searchable::doc(const int32_t i){ - CL_NS(document)::Document* ret = _CLNEW CL_NS(document)::Document; - if (!doc(i,ret) ) - _CLDELETE(ret); - return ret; -} - -//static -Query* Query::mergeBooleanQueries(Query** queries) { - CL_NS(util)::CLVector allClauses; - int32_t i = 0; - while ( queries[i] != NULL ){ - BooleanQuery* bq = (BooleanQuery*)queries[i]; - - int32_t size = bq->getClauseCount(); - BooleanClause** clauses = _CL_NEWARRAY(BooleanClause*, size); - bq->getClauses(clauses); - - for (int32_t j = 0;j::iterator itr = allClauses.begin(); - while (itr != allClauses.end() ) { - result->add(*itr); - } - return result; -} - -Query::Query(const Query& clone):boost(clone.boost){ - //constructor -} -Weight* Query::_createWeight(Searcher* searcher){ - _CLTHROWA(CL_ERR_UnsupportedOperation,"UnsupportedOperationException: Query::_createWeight"); -} - -Query::Query(): - boost(1.0f) -{ - //constructor -} -Query::~Query(){ -} - -/** Expert: called to re-write queries into primitive queries. */ -Query* Query::rewrite(CL_NS(index)::IndexReader* reader){ - return this; -} - -Query* Query::combine(Query** queries){ - _CLTHROWA(CL_ERR_UnsupportedOperation,"UnsupportedOperationException: Query::combine"); -} -Similarity* Query::getSimilarity(Searcher* searcher) { - return searcher->getSimilarity(); -} -bool Query::instanceOf(const TCHAR* other) const{ - const TCHAR* t = getQueryName(); - if ( t==other || _tcscmp( t, other )==0 ) - return true; - else - return false; -} -TCHAR* Query::toString() const{ - return toString(LUCENE_BLANK_STRING); -} - -void Query::setBoost(qreal b) { boost = b; } - -qreal Query::getBoost() const { return boost; } - -Weight* Query::weight(Searcher* searcher){ - Query* query = searcher->rewrite(this); - Weight* weight = query->_createWeight(searcher); - qreal sum = weight->sumOfSquaredWeights(); - qreal norm = getSimilarity(searcher)->queryNorm(sum); - weight->normalize(norm); - return weight; -} - -TopFieldDocs::TopFieldDocs (int32_t totalHits, FieldDoc** fieldDocs, int32_t scoreDocsLen, SortField** fields): - TopDocs (totalHits, NULL, scoreDocsLen) -{ - this->fields = fields; - this->fieldDocs = fieldDocs; - this->scoreDocs = _CL_NEWARRAY(ScoreDoc,scoreDocsLen); - for (int32_t i=0;iscoreDocs[i] = this->fieldDocs[i]->scoreDoc; -} -TopFieldDocs::~TopFieldDocs(){ - if ( fieldDocs ){ - for (int32_t i=0;i= 0 -//Post - The instance has been created - -} - -TopDocs::~TopDocs(){ -//Func - Destructor -//Pre - true -//Post - The instance has been destroyed - - _CLDELETE_ARRAY(scoreDocs); -} - -CL_NS_END diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/search/SearchHeader.h qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/search/SearchHeader.h --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/search/SearchHeader.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/search/SearchHeader.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,456 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#ifndef _lucene_search_SearchHeader_ -#define _lucene_search_SearchHeader_ - -#if defined(_LUCENE_PRAGMA_ONCE) -# pragma once -#endif - -#include "CLucene/index/IndexReader.h" -#include "CLucene/index/Term.h" -#include "Filter.h" -#include "CLucene/document/Document.h" -#include "Sort.h" -#include "CLucene/util/VoidList.h" -#include "Explanation.h" -#include "Similarity.h" - -CL_NS_DEF(search) - - //predefine classes - class Scorer; - class Query; - class Hits; - class Sort; - class FieldDoc; - class TopFieldDocs; - - /** Expert: Returned by low-level search implementations. - * @see TopDocs */ - struct ScoreDoc { - /** Expert: A hit document's number. - * @see Searcher#doc(int32_t) - */ - int32_t doc; - - /** Expert: The score of this document for the query. */ - qreal score; - }; - - /** Expert: Returned by low-level search implementations. - * @see Searcher#search(Query,Filter,int32_t) */ - class TopDocs:LUCENE_BASE { - public: - /** Expert: The total number of hits for the query. - * @see Hits#length() - */ - int32_t totalHits; - - /** Expert: The top hits for the query. */ - ScoreDoc* scoreDocs; - int32_t scoreDocsLength; - - /** Expert: Constructs a TopDocs. TopDocs takes ownership of the ScoreDoc array*/ - TopDocs(const int32_t th, ScoreDoc* sds, int32_t scoreDocsLength); - ~TopDocs(); - }; - - // Lower-level search API. - // @see Searcher#search(Query,HitCollector) - class HitCollector: LUCENE_BASE { - public: - /** Called once for every non-zero scoring document, with the document number - * and its score. - * - *

If, for example, an application wished to collect all of the hits for a - * query in a BitSet, then it might:

-      *   Searcher searcher = new IndexSearcher(indexReader);
-      *   final BitSet bits = new BitSet(indexReader.maxDoc());
-      *   searcher.search(query, new HitCollector() {
-      *       public void collect(int32_t doc, float score) {
-      *         bits.set(doc);
-      *       }
-      *     });
-      * 
- * - *

Note: This is called in an inner search loop. For good search - * performance, implementations of this method should not call - * {@link Searcher#doc(int32_t)} or - * {@link IndexReader#document(int32_t)} on every - * document number encountered. Doing so can slow searches by an order - * of magnitude or more. - *

Note: The score passed to this method is a raw score. - * In other words, the score will not necessarily be a float whose value is - * between 0 and 1. - */ - virtual void collect(const int32_t doc, const qreal score) = 0; - virtual ~HitCollector(){} - }; - - /** Expert: Calculate query weights and build query scorers. - * - *

A Weight is constructed by a query, given a Searcher ({@link - * Query#_createWeight(Searcher)}). The {@link #sumOfSquaredWeights()} method - * is then called on the top-level query to compute the query normalization - * factor (@link Similarity#queryNorm(qreal)}). This factor is then passed to - * {@link #normalize(qreal)}. At this point the weighting is complete and a - * scorer may be constructed by calling {@link #scorer(IndexReader)}. - */ - class Weight: LUCENE_BASE { - public: - virtual ~Weight(){ - }; - - /** The query that this concerns. */ - virtual Query* getQuery() = 0; - - /** The weight for this query. */ - virtual qreal getValue() = 0; - - /** The sum of squared weights of contained query clauses. */ - virtual qreal sumOfSquaredWeights() = 0; - - /** Assigns the query normalization factor to this. */ - virtual void normalize(qreal norm) = 0; - - /** Constructs a scorer for this. */ - virtual Scorer* scorer(CL_NS(index)::IndexReader* reader) = 0; - - /** An explanation of the score computation for the named document. */ - virtual void explain(CL_NS(index)::IndexReader* reader, int32_t doc, Explanation* ret) = 0; - - virtual TCHAR* toString(){ - return STRDUP_TtoT(_T("Weight")); - } - }; - - class HitDoc:LUCENE_BASE { - public: - qreal score; - int32_t id; - CL_NS(document)::Document* doc; - - HitDoc* next; // in doubly-linked cache - HitDoc* prev; // in doubly-linked cache - - HitDoc(const qreal s, const int32_t i); - ~HitDoc(); - }; - - - - // A ranked list of documents, used to hold search results. - class Hits:LUCENE_BASE { - private: - Query* query; - Searcher* searcher; - Filter* filter; - const Sort* sort; - - size_t _length; // the total number of hits - CL_NS(util)::CLVector > hitDocs; // cache of hits retrieved - - HitDoc* first; // head of LRU cache - HitDoc* last; // tail of LRU cache - int32_t numDocs; // number cached - int32_t maxDocs; // max to cache - - public: - Hits(Searcher* s, Query* q, Filter* f, const Sort* sort=NULL); - ~Hits(); - - /** Returns the total number of hits available in this set. */ - int32_t length() const; - - /** Returns the stored fields of the nth document in this set. -

Documents are cached, so that repeated requests for the same element may - return the same Document object. - * - * @memory Memory belongs to the hits object. Don't delete the return value. - */ - CL_NS(document)::Document& doc(const int32_t n); - - /** Returns the id for the nth document in this set. */ - int32_t id (const int32_t n); - - /** Returns the score for the nth document in this set. */ - qreal score(const int32_t n); - - private: - // Tries to add new documents to hitDocs. - // Ensures that the hit numbered _min has been retrieved. - void getMoreDocs(const size_t _min); - - HitDoc* getHitDoc(const size_t n); - - void addToFront(HitDoc* hitDoc); - - void remove(const HitDoc* hitDoc); - - }; - - /** The interface for search implementations. - * - *

Implementations provide search over a single index, over multiple - * indices, and over indices on remote servers. - */ - class Searchable: LUCENE_BASE { - public: - virtual ~Searchable(){ - } - - /** Lower-level search API. - * - *

{@link HitCollector#collect(int32_t,qreal)} is called for every non-zero - * scoring document. - * - *

Applications should only use this if they need all of the - * matching documents. The high-level search API ({@link - * Searcher#search(Query*)}) is usually more efficient, as it skips - * non-high-scoring hits. - * - * @param query to match documents - * @param filter if non-null, a bitset used to eliminate some documents - * @param results to receive hits - */ - virtual void _search(Query* query, Filter* filter, HitCollector* results) = 0; - - /** Frees resources associated with this Searcher. - * Be careful not to call this method while you are still using objects - * like {@link Hits}. - */ - virtual void close() = 0; - - /** Expert: Returns the number of documents containing term. - * Called by search code to compute term weights. - * @see IndexReader#docFreq(Term). - */ - virtual int32_t docFreq(const CL_NS(index)::Term* term) const = 0; - - /** Expert: Returns one greater than the largest possible document number. - * Called by search code to compute term weights. - * @see IndexReader#maxDoc(). - */ - virtual int32_t maxDoc() const = 0; - - /** Expert: Low-level search implementation. Finds the top n - * hits for query, applying filter if non-null. - * - *

Called by {@link Hits}. - * - *

Applications should usually call {@link Searcher#search(Query*)} or - * {@link Searcher#search(Query*,Filter*)} instead. - */ - virtual TopDocs* _search(Query* query, Filter* filter, const int32_t n) = 0; - - /** Expert: Returns the stored fields of document i. - * Called by {@link HitCollector} implementations. - * @see IndexReader#document(int32_t). - */ - virtual bool doc(int32_t i, CL_NS(document)::Document* d) = 0; - _CL_DEPRECATED( doc(i, document) ) CL_NS(document)::Document* doc(const int32_t i); - - /** Expert: called to re-write queries into primitive queries. */ - virtual Query* rewrite(Query* query) = 0; - - /** Returns an Explanation that describes how doc scored against - * query. - * - *

This is intended to be used in developing Similarity implementations, - * and, for good performance, should not be displayed with every hit. - * Computing an explanation is as expensive as executing the query over the - * entire index. - */ - virtual void explain(Query* query, int32_t doc, Explanation* ret) = 0; - - /** Expert: Low-level search implementation with arbitrary sorting. Finds - * the top n hits for query, applying - * filter if non-null, and sorting the hits by the criteria in - * sort. - * - *

Applications should usually call {@link - * Searcher#search(Query,Filter,Sort)} instead. - */ - virtual TopFieldDocs* _search(Query* query, Filter* filter, const int32_t n, const Sort* sort) = 0; - }; - - - - /** An abstract base class for search implementations. - * Implements some common utility methods. - */ - class Searcher:public Searchable { - private: - /** The Similarity implementation used by this searcher. */ - Similarity* similarity; - - public: - Searcher(){ - similarity = Similarity::getDefault(); - } - virtual ~Searcher(){ - } - - // Returns the documents matching query. - Hits* search(Query* query) { - return search(query, (Filter*)NULL ); - } - - // Returns the documents matching query and - // filter. - Hits* search(Query* query, Filter* filter) { - return _CLNEW Hits(this, query, filter); - } - - /** Returns documents matching query sorted by - * sort. - */ - Hits* search(Query* query, const Sort* sort){ - return _CLNEW Hits(this, query, NULL, sort); - } - - /** Returns documents matching query and filter, - * sorted by sort. - */ - Hits* search(Query* query, Filter* filter, const Sort* sort){ - return _CLNEW Hits(this, query, filter, sort); - } - - /** Lower-level search API. - * - *

{@link HitCollector#collect(int32_t ,qreal)} is called for every non-zero - * scoring document. - * - *

Applications should only use this if they need all of the - * matching documents. The high-level search API ({@link - * Searcher#search(Query*)}) is usually more efficient, as it skips - * non-high-scoring hits. - *

Note: The score passed to this method is a raw score. - * In other words, the score will not necessarily be a float whose value is - * between 0 and 1. - */ - void _search(Query* query, HitCollector* results) { - Searchable::_search(query, NULL, results); - } - - /** Expert: Set the Similarity implementation used by this Searcher. - * - * @see Similarity#setDefault(Similarity) - */ - void setSimilarity(Similarity* similarity) { - this->similarity = similarity; - } - - /** Expert: Return the Similarity implementation used by this Searcher. - * - *

This defaults to the current value of {@link Similarity#getDefault()}. - */ - Similarity* getSimilarity(){ - return this->similarity; - } - }; - - /** The abstract base class for queries. -

Instantiable subclasses are: -

    -
  • {@link TermQuery} -
  • {@link MultiTermQuery} -
  • {@link BooleanQuery} -
  • {@link WildcardQuery} -
  • {@link PhraseQuery} -
  • {@link PrefixQuery} -
  • {@link PhrasePrefixQuery} -
  • {@link FuzzyQuery} -
  • {@link RangeQuery} -
  • {@link spans.SpanQuery} -
-

A parser for queries is contained in: -

    -
  • {@link queryParser.QueryParser QueryParser} -
- */ - class Query :LUCENE_BASE { - private: - // query boost factor - qreal boost; - protected: - Query(const Query& clone); - public: - Query(); - virtual ~Query(); - - /** Sets the boost for this query clause to b. Documents - * matching this clause will (in addition to the normal weightings) have - * their score multiplied by b. - */ - void setBoost(qreal b); - - /** Gets the boost for this clause. Documents matching - * this clause will (in addition to the normal weightings) have their score - * multiplied by b. The boost is 1.0 by default. - */ - qreal getBoost() const; - - /** Expert: Constructs an initializes a Weight for a top-level query. */ - Weight* weight(Searcher* searcher); - - /** Expert: called to re-write queries into primitive queries. */ - virtual Query* rewrite(CL_NS(index)::IndexReader* reader); - - /** Expert: called when re-writing queries under MultiSearcher. - * - *

Only implemented by derived queries, with no - * {@link #_createWeight(Searcher)} implementatation. - */ - virtual Query* combine(Query** queries); - - /** Expert: merges the clauses of a set of BooleanQuery's into a single - * BooleanQuery. - * - *

A utility for use by {@link #combine(Query[])} implementations. - */ - static Query* mergeBooleanQueries(Query** queries); - - /** Expert: Returns the Similarity implementation to be used for this query. - * Subclasses may override this method to specify their own Similarity - * implementation, perhaps one that delegates through that of the Searcher. - * By default the Searcher's Similarity implementation is returned.*/ - Similarity* getSimilarity(Searcher* searcher); - - /** Returns a clone of this query. */ - virtual Query* clone() const = 0; - virtual const TCHAR* getQueryName() const = 0; - bool instanceOf(const TCHAR* other) const; - - /** Prints a query to a string, with field as the default field - * for terms.

The representation used is one that is readable by - * {@link queryParser.QueryParser QueryParser} - * (although, if the query was created by the parser, the printed - * representation may not be exactly what was parsed). - */ - virtual TCHAR* toString(const TCHAR* field) const = 0; - - virtual bool equals(Query* other) const = 0; - virtual size_t hashCode() const = 0; - - /** Prints a query to a string. */ - TCHAR* toString() const; - - - /** Expert: Constructs an appropriate Weight implementation for this query. - * - *

Only implemented by primitive queries, which re-write to themselves. - * This is an Internal function - */ - virtual Weight* _createWeight(Searcher* searcher); - - }; - - -CL_NS_END -#endif diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/search/Similarity.cpp qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/search/Similarity.cpp --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/search/Similarity.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/search/Similarity.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,233 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#include "CLucene/StdHeader.h" -#include "Similarity.h" - -#include "CLucene/index/Term.h" -#include "SearchHeader.h" - -CL_NS_USE(index) -CL_NS_DEF(search) - -#ifdef _CL_HAVE_NO_FLOAT_BYTE - #if defined(_LUCENE_PRAGMA_WARNINGS) - #pragma message ("==================Using fallback float<->byte encodings!!!==================") - #else - #warning "==================Using fallback float<->byte encodings!!!==================" - #endif - - //if the autoconf figured out that we can't do the conversions properly, then - //we fall back on the old, inaccurate way of doing things. - qreal NORM_TABLE[] = { - 0.0,5.820766E-10,6.9849193E-10,8.1490725E-10,9.313226E-10,1.1641532E-9,1.3969839E-9, - 1.6298145E-9,1.8626451E-9,2.3283064E-9,2.7939677E-9,3.259629E-9,3.7252903E-9, - 4.656613E-9,5.5879354E-9,6.519258E-9,7.4505806E-9,9.313226E-9,1.1175871E-8,1.3038516E-8, - 1.4901161E-8,1.8626451E-8,2.2351742E-8,2.6077032E-8,2.9802322E-8,3.7252903E-8,4.4703484E-8, - 5.2154064E-8,5.9604645E-8,7.4505806E-8,8.940697E-8,1.0430813E-7,1.1920929E-7,1.4901161E-7, - 1.7881393E-7,2.0861626E-7,2.3841858E-7,2.9802322E-7,3.5762787E-7,4.172325E-7,4.7683716E-7, - 5.9604645E-7,7.1525574E-7,8.34465E-7,9.536743E-7,1.1920929E-6,1.4305115E-6,1.66893E-6, - 1.9073486E-6,2.3841858E-6,2.861023E-6,3.33786E-6,3.8146973E-6,4.7683716E-6,5.722046E-6, - 6.67572E-6,7.6293945E-6,9.536743E-6,1.1444092E-5,1.335144E-5,1.5258789E-5,1.9073486E-5, - 2.2888184E-5,2.670288E-5,3.0517578E-5,3.8146973E-5,4.5776367E-5,5.340576E-5,6.1035156E-5, - 7.6293945E-5,9.1552734E-5,1.0681152E-4,1.2207031E-4,1.5258789E-4,1.8310547E-4,2.1362305E-4, - 2.4414062E-4,3.0517578E-4,3.6621094E-4,4.272461E-4,4.8828125E-4,6.1035156E-4,7.324219E-4, - 8.544922E-4,9.765625E-4,0.0012207031,0.0014648438,0.0017089844,0.001953125,0.0024414062, - 0.0029296875,0.0034179688,0.00390625,0.0048828125,0.005859375,0.0068359375, - 0.0078125,0.009765625,0.01171875,0.013671875,0.015625,0.01953125,0.0234375, - 0.02734375,0.03125,0.0390625,0.046875,0.0546875,0.0625,0.078125,0.09375,0.109375, - 0.125,0.15625,0.1875,0.21875,0.25,0.3125,0.375,0.4375,0.5,0.625,0.75, - 0.875,1.0,1.25,1.5,1.75,2,2.5,3,3.5,4.0,5.0,6.0,7.0,8.0,10.0,12.0,14.0,16.0,20.0,24.0,28.0,32.0,40.0,48.0,56.0, - 64.0,80.0,96.0,112.0,128.0,160.0,192.0,224.0,256.0,320.0,384.0,448.0,512.0,640.0,768.0,896.0,1024.0,1280.0,1536.0,1792.0, - 2048.0,2560.0,3072.0,3584.0,4096.0,5120.0,6144.0,7168.0,8192.0,10240.0,12288.0,14336.0,16384.0,20480.0,24576.0, - 28672.0,32768.0,40960.0,49152.0,57344.0,65536.0,81920.0,98304.0,114688.0,131072.0,163840.0,196608.0, - 229376.0,262144.0,327680.0,393216.0,458752.0,524288.0,655360.0,786432.0,917504.0,1048576.0,1310720.0, - 1572864.0,1835008.0,2097152.0,2621440.0,3145728.0,3670016.0,4194304.0,5242880.0,6291456.0,7340032.0, - 8388608.0,10485760.0,12582912.0,14680064.0,16777216.0,20971520.0,25165824.0,29360128.0,33554432.0, - 41943040.0,50331648.0,58720256.0,67108864.0,83886080.0,100663296.0,117440512.0,134217728.0, - 167772160.0,201326592.0,234881024.0,268435456.0,335544320.0,402653184.0,469762048.0,536870912.0, - 671088640.0,805306368.0,939524096.0,1073741824.0,1342177280.0,1610612736.0,1879048192.0, - 2147483648.0,2684354560.0,3221225472.0,3758096384.0,4294967296.0,5368709120.0,6442450944.0,7516192768.0 - }; - - qreal Similarity::byteToFloat(uint8_t b) { - return NORM_TABLE[b]; - } - - uint8_t Similarity::floatToByte(qreal f) { - return Similarity::encodeNorm(f); - } - -#else - - /** Cache of decoded bytes. */ - qreal NORM_TABLE[256]; - bool NORM_TABLE_initd=false; - - //float to bits conversion utilities... - union clvalue { - int32_t i; - float f; //must use a float type, else types dont match up - }; - - int32_t floatToIntBits(qreal value) - { - clvalue u; - int32_t e, f; - u.f = (float)value; - e = u.i & 0x7f800000; - f = u.i & 0x007fffff; - - if (e == 0x7f800000 && f != 0) - u.i = 0x7fc00000; - - return u.i; - } - - qreal intBitsToFloat(int32_t bits) - { - clvalue u; - u.i = bits; - return u.f; - } - - - qreal Similarity::byteToFloat(uint8_t b) { - if (b == 0) // zero is a special case - return 0.0f; - int32_t mantissa = b & 7; - int32_t exponent = (b >> 3) & 31; - int32_t bits = ((exponent+(63-15)) << 24) | (mantissa << 21); - return intBitsToFloat(bits); - } - - uint8_t Similarity::floatToByte(qreal f) { - if (f < 0.0f) // round negatives up to zero - f = 0.0f; - - if (f == 0.0f) // zero is a special case - return 0; - - int32_t bits = floatToIntBits(f); // parse qreal into parts - int32_t mantissa = (bits & 0xffffff) >> 21; - int32_t exponent = (((bits >> 24) & 0x7f) - 63) + 15; - - if (exponent > 31) { // overflow: use max value - exponent = 31; - mantissa = 7; - } - - if (exponent < 0) { // underflow: use min value - exponent = 0; - mantissa = 1; - } - - return (uint8_t)((exponent << 3) | mantissa); // pack into a uint8_t - } -#endif - - /** The Similarity implementation used by default. */ - Similarity* _defaultImpl=NULL; - - void Similarity::setDefault(Similarity* similarity) { - _defaultImpl = similarity; - } - - Similarity* Similarity::getDefault() { - if ( _defaultImpl == NULL ){ - _defaultImpl = _CLNEW DefaultSimilarity(); - } - return _defaultImpl; - } - - qreal Similarity::decodeNorm(uint8_t b) { -#ifndef _CL_HAVE_NO_FLOAT_BYTE - if ( !NORM_TABLE_initd ){ - for (int i = 0; i < 256; i++) - NORM_TABLE[i] = byteToFloat(i); - NORM_TABLE_initd=true; - } -#endif - return NORM_TABLE[b]; - } - - uint8_t Similarity::encodeNorm(qreal f) { -#ifdef _CL_HAVE_NO_FLOAT_BYTE - int32_t i=0; - if ( f <= 0 ) - return 0; - - while ( i<256 && f > NORM_TABLE[i] ){ - i++; - } - if ( i == 0 ) - return 0; - else if ( i == 255 && f>NORM_TABLE[255] ) - return 255; - else - return i; -#else - return floatToByte(f); -#endif - } - - - qreal Similarity::idf(Term* term, Searcher* searcher) { - return idf(searcher->docFreq(term), searcher->maxDoc()); - } - - - qreal Similarity::idf(CL_NS(util)::CLVector* terms, Searcher* searcher) { - qreal _idf = 0.0f; - for (CL_NS(util)::CLVector::iterator i = terms->begin(); i != terms->end(); i++ ) { - _idf += idf((Term*)*i, searcher); - } - return _idf; - } - - Similarity::~Similarity(){ - } - - - - - DefaultSimilarity::DefaultSimilarity(){ - } - DefaultSimilarity::~DefaultSimilarity(){ - } - - qreal DefaultSimilarity::lengthNorm(const TCHAR* fieldName, int32_t numTerms) { - if ( numTerms == 0 ) //prevent div by zero - return 0; - qreal ret = (qreal)(1.0 / sqrt((qreal)numTerms)); - return ret; - } - - qreal DefaultSimilarity::queryNorm(qreal sumOfSquaredWeights) { - if ( sumOfSquaredWeights == 0 ) //prevent div by zero - return 0.0f; - qreal ret = (qreal)(1.0 / sqrt(sumOfSquaredWeights)); - return ret; - } - - qreal DefaultSimilarity::tf(qreal freq) { - return sqrt(freq); - } - - qreal DefaultSimilarity::sloppyFreq(int32_t distance) { - return 1.0f / (distance + 1); - } - - qreal DefaultSimilarity::idf(int32_t docFreq, int32_t numDocs) { - return (qreal)(log(numDocs/(qreal)(docFreq+1)) + 1.0); - } - - qreal DefaultSimilarity::coord(int32_t overlap, int32_t maxOverlap) { - if ( maxOverlap == 0 ) - return 0.0f; - return overlap / (qreal)maxOverlap; - } -CL_NS_END diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/search/Similarity.h qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/search/Similarity.h --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/search/Similarity.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/search/Similarity.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,268 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#ifndef _lucene_search_Similarity_ -#define _lucene_search_Similarity_ - -#if defined(_LUCENE_PRAGMA_ONCE) -# pragma once -#endif - -#include "CLucene/index/Term.h" - -CL_NS_DEF(search) - -class Searcher;//save including the searchheader.h -class DefaultSimilarity; - -/** Expert: Scoring API. -*

Subclasses implement search scoring. -* -*

The score of query q for document d is defined -* in terms of these methods as follows: -* -* -* -* -* -* -* -* -* -* -* -*
score(q,d) =
-* Σ -* {@link #tf(int32_t) tf}(t in d) * -* {@link #idf(Term,Searcher) idf}(t) * -* {@link Field#getBoost getBoost}(t.field in d) * -* {@link #lengthNorm(TCHAR*,int32_t) lengthNorm}(t.field in d) -*  * -* {@link #coord(int32_t,int32_t) coord}(q,d) * -* {@link #queryNorm(qreal) queryNorm}(q) -*
-* t in q -*
-* -* @see #setDefault(Similarity) -* @see IndexWriter#setSimilarity(Similarity) -* @see Searcher#setSimilarity(Similarity) -*/ -class Similarity:LUCENE_BASE { -public: - virtual ~Similarity(); - - /** Set the default Similarity implementation used by indexing and search - * code. - * - * @see Searcher#setSimilarity(Similarity) - * @see IndexWriter#setSimilarity(Similarity) - */ - static void setDefault(Similarity* similarity); - - /** Return the default Similarity implementation used by indexing and search - * code. - * - *

This is initially an instance of {@link DefaultSimilarity}. - * - * @see Searcher#setSimilarity(Similarity) - * @see IndexWriter#setSimilarity(Similarity) - */ - static Similarity* getDefault(); - - /** Encodes a normalization factor for storage in an index. - * - *

The encoding uses a five-bit exponent and three-bit mantissa, thus - * representing values from around 7x10^9 to 2x10^-9 with about one - * significant decimal digit of accuracy. Zero is also represented. - * Negative numbers are rounded up to zero. Values too large to represent - * are rounded down to the largest representable value. Positive values too - * small to represent are rounded up to the smallest positive representable - * value. - * - * @see Field#setBoost(qreal) - */ - static uint8_t encodeNorm(qreal f); - - /** Decodes a normalization factor stored in an index. - * @see #encodeNorm(qreal) - */ - static qreal decodeNorm(uint8_t b); - - static uint8_t floatToByte(qreal f); - static qreal byteToFloat(uint8_t b); - - /** Computes a score factor for a phrase. - * - *

The default implementation sums the {@link #idf(Term,Searcher)} factor - * for each term in the phrase. - * - * @param terms the terms in the phrase - * @param searcher the document collection being searched - * @return a score factor for the phrase - */ - qreal idf(CL_NS(util)::CLVector* terms, Searcher* searcher); - //qreal idf(Term** terms, Searcher* searcher); - - - /** Computes a score factor for a simple term. - * - *

The default implementation is:

-   *   return idf(searcher.docFreq(term), searcher.maxDoc());
-   * 
- * - * Note that {@link Searcher#maxDoc()} is used instead of - * {@link IndexReader#numDocs()} because it is proportional to - * {@link Searcher#docFreq(Term)} , i.e., when one is inaccurate, - * so is the other, and in the same direction. - * - * @param term the term in question - * @param searcher the document collection being searched - * @return a score factor for the term - */ - qreal idf(CL_NS(index)::Term* term, Searcher* searcher); - - - /** Computes a score factor based on a term or phrase's frequency in a - * document. This value is multiplied by the {@link #idf(Term, Searcher)} - * factor for each term in the query and these products are then summed to - * form the initial score for a document. - * - *

Terms and phrases repeated in a document indicate the topic of the - * document, so implementations of this method usually return larger values - * when freq is large, and smaller values when freq - * is small. - * - *

The default implementation calls {@link #tf(qreal)}. - * - * @param freq the frequency of a term within a document - * @return a score factor based on a term's within-document frequency - */ - inline qreal tf(int32_t freq){ return tf((qreal)freq); } - - /** Computes the normalization value for a field given the total number of - * terms contained in a field. These values, together with field boosts, are - * stored in an index and multipled into scores for hits on each field by the - * search code. - * - *

Matches in longer fields are less precise, so implemenations of this - * method usually return smaller values when numTokens is large, - * and larger values when numTokens is small. - * - *

That these values are computed under {@link - * IndexWriter#addDocument(Document)} and stored then using - * {#encodeNorm(qreal)}. Thus they have limited precision, and documents - * must be re-indexed if this method is altered. - * - * @param fieldName the name of the field - * @param numTokens the total number of tokens contained in fields named - * fieldName of doc. - * @return a normalization factor for hits on this field of this document - * - * @see Field#setBoost(qreal) - */ - virtual qreal lengthNorm(const TCHAR* fieldName, int32_t numTokens) = 0; - - /** Computes the normalization value for a query given the sum of the squared - * weights of each of the query terms. This value is then multipled into the - * weight of each query term. - * - *

This does not affect ranking, but rather just attempts to make scores - * from different queries comparable. - * - * @param sumOfSquaredWeights the sum of the squares of query term weights - * @return a normalization factor for query weights - */ - virtual qreal queryNorm(qreal sumOfSquaredWeights) = 0; - - /** Computes the amount of a sloppy phrase match, based on an edit distance. - * This value is summed for each sloppy phrase match in a document to form - * the frequency that is passed to {@link #tf(qreal)}. - * - *

A phrase match with a small edit distance to a document passage more - * closely matches the document, so implementations of this method usually - * return larger values when the edit distance is small and smaller values - * when it is large. - * - * @see PhraseQuery#setSlop(int32_t) - * @param distance the edit distance of this sloppy phrase match - * @return the frequency increment for this match - */ - virtual qreal sloppyFreq(int32_t distance) = 0; - - /** Computes a score factor based on a term or phrase's frequency in a - * document. This value is multiplied by the {@link #idf(Term, Searcher)} - * factor for each term in the query and these products are then summed to - * form the initial score for a document. - * - *

Terms and phrases repeated in a document indicate the topic of the - * document, so implemenations of this method usually return larger values - * when freq is large, and smaller values when freq - * is small. - * - * @param freq the frequency of a term within a document - * @return a score factor based on a term's within-document frequency - */ - virtual qreal tf(qreal freq) = 0; - - /** Computes a score factor based on a term's document frequency (the number - * of documents which contain the term). This value is multiplied by the - * {@link #tf(int32_t)} factor for each term in the query and these products are - * then summed to form the initial score for a document. - * - *

Terms that occur in fewer documents are better indicators of topic, so - * implemenations of this method usually return larger values for rare terms, - * and smaller values for common terms. - * - * @param docFreq the number of documents which contain the term - * @param numDocs the total number of documents in the collection - * @return a score factor based on the term's document frequency - */ - virtual qreal idf(int32_t docFreq, int32_t numDocs) = 0; - - /** Computes a score factor based on the fraction of all query terms that a - * document contains. This value is multiplied into scores. - * - *

The presence of a large portion of the query terms indicates a better - * match with the query, so implemenations of this method usually return - * larger values when the ratio between these parameters is large and smaller - * values when the ratio between them is small. - * - * @param overlap the number of query terms matched in the document - * @param maxOverlap the total number of terms in the query - * @return a score factor based on term overlap with the query - */ - virtual qreal coord(int32_t overlap, int32_t maxOverlap) = 0; -}; - - -/** Expert: Default scoring implementation. */ -class DefaultSimilarity: public Similarity { -public: - DefaultSimilarity(); - ~DefaultSimilarity(); - - /** Implemented as 1/sqrt(numTerms). */ - qreal lengthNorm(const TCHAR* fieldName, int32_t numTerms); - - /** Implemented as 1/sqrt(sumOfSquaredWeights). */ - qreal queryNorm(qreal sumOfSquaredWeights); - - /** Implemented as sqrt(freq). */ - inline qreal tf(qreal freq); - - /** Implemented as 1 / (distance + 1). */ - qreal sloppyFreq(int32_t distance); - - /** Implemented as log(numDocs/(docFreq+1)) + 1. */ - qreal idf(int32_t docFreq, int32_t numDocs); - - /** Implemented as overlap / maxOverlap. */ - qreal coord(int32_t overlap, int32_t maxOverlap); -}; - -CL_NS_END -#endif diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/search/SloppyPhraseScorer.cpp qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/search/SloppyPhraseScorer.cpp --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/search/SloppyPhraseScorer.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/search/SloppyPhraseScorer.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,106 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#include "CLucene/StdHeader.h" -#include "SloppyPhraseScorer.h" - -#include "PhraseScorer.h" -#include "CLucene/index/Terms.h" - -CL_NS_USE(index) -CL_NS_DEF(search) - - SloppyPhraseScorer::SloppyPhraseScorer(Weight* weight, CL_NS(index)::TermPositions** tps, - int32_t* positions, Similarity* similarity, - int32_t slop, uint8_t* norms): - PhraseScorer(weight,tps,positions,similarity,norms){ - //Func - Constructor - //Pre - tps != NULL - // tpsLength >= 0 - // n != NULL - //Post - Instance has been created - - CND_PRECONDITION(tps != NULL, "tps is NULL"); - //CND_PRECONDITION(n != NULL, _T("n is NULL")) = checked in PhraseScorer; - - this->slop = slop; - } - - qreal SloppyPhraseScorer::phraseFreq() { - //Func - Returns the freqency of the phrase - //Pre - first != NULL - // last != NULL - // pq != NULL - //Post - The frequency of the phrase has been returned - - CND_PRECONDITION(first != NULL,"first is NULL"); - CND_PRECONDITION(last != NULL,"last is NULL"); - CND_PRECONDITION(pq != NULL,"pq is NULL"); - - //Clear the PhraseQueue pq; - pq->clear(); - - int32_t end = 0; - - //declare iterator - PhrasePositions* pp = NULL; - - // build pq from list - - //Sort the list of PhrasePositions using pq - for (pp = first; pp != NULL; pp = pp->_next) { - //Read the first TermPosition of the current PhrasePositions pp - pp->firstPosition(); - //Check if the position of the pp is bigger than end - if (pp->position > end){ - end = pp->position; - } - //Store the current PhrasePositions pp into the PhraseQueue pp - pq->put(pp); - } - - qreal freq = 0.0f; - - bool done = false; - - do { - //Pop a PhrasePositions pp from the PhraseQueue pp - pp = pq->pop(); - //Get start position - int32_t start = pp->position; - //Get next position - int32_t next = pq->top()->position; - - for (int32_t pos = start; pos <= next; pos = pp->position) { - //advance pp to min window - start = pos; - - if (!pp->nextPosition()) { - //ran out of a term -- done - done = true; - break; - } - } - - //Calculate matchLength - int32_t matchLength = end - start; - //Check if matchLength is smaller than slop - if (matchLength <= slop){ - // penalize longer matches - freq += 1.0 / (matchLength + 1); - } - - if (pp->position > end){ - end = pp->position; - } - - //restore pq - pq->put(pp); - }while (!done); - - return freq; - } -CL_NS_END diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/search/SloppyPhraseScorer.h qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/search/SloppyPhraseScorer.h --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/search/SloppyPhraseScorer.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/search/SloppyPhraseScorer.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,34 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#ifndef _lucene_search_SloppyPhraseScorer_ -#define _lucene_search_SloppyPhraseScorer_ -#if defined(_LUCENE_PRAGMA_ONCE) -# pragma once -#endif - -#include "PhraseScorer.h" -#include "CLucene/index/Terms.h" - - -CL_NS_DEF(search) - class SloppyPhraseScorer: public PhraseScorer { - private: - int32_t slop; - - public: - SloppyPhraseScorer(Weight* weight, CL_NS(index)::TermPositions** tps, - int32_t* positions, Similarity* similarity, - int32_t slop, uint8_t* norms); - ~SloppyPhraseScorer(){ - } - - protected: - qreal phraseFreq(); - }; -CL_NS_END -#endif - diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/search/Sort.cpp qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/search/Sort.cpp --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/search/Sort.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/search/Sort.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,345 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#include "CLucene/StdHeader.h" -#include "Sort.h" -#include "Compare.h" - -CL_NS_USE(util) -CL_NS_DEF(search) - - - - /** Represents sorting by document score (relevancy). */ - SortField* SortField::FIELD_SCORE = _CLNEW SortField (NULL, DOCSCORE,false); - - /** Represents sorting by document number (index order). */ - SortField* SortField::FIELD_DOC = _CLNEW SortField (NULL, DOC,false); - - - /** Represents sorting by computed relevance. Using this sort criteria - * returns the same results as calling {@link Searcher#search(Query) Searcher#search()} - * without a sort criteria, only with slightly more overhead. */ - Sort* Sort::RELEVANCE = _CLNEW Sort(); - - /** Represents sorting by index order. */ - Sort* Sort::INDEXORDER = _CLNEW Sort (SortField::FIELD_DOC); - - - - - /** Creates a sort by terms in the given field where the type of term value - * is determined dynamically ({@link #AUTO AUTO}). - * @param field Name of field to sort by, cannot be null. - */ - SortField::SortField (const TCHAR* field) { - this->type = AUTO; - this->reverse = false; - this->field = CLStringIntern::intern(field CL_FILELINE); - this->factory = NULL; - } - - /** Creates a sort, possibly in reverse, by terms in the given field where - * the type of term value is determined dynamically ({@link #AUTO AUTO}). - * @param field Name of field to sort by, cannot be null. - * @param reverse True if natural order should be reversed. - - SortField::SortField (const TCHAR* field, bool reverse) { - this->field = CLStringIntern::intern(field CL_FILELINE); - this->reverse = reverse; - this->type = AUTO; - this->factory = NULL; - }*/ - - - /** Creates a sort, possibly in reverse, by terms in the given field with the - * type of term values explicitly given. - * @param field Name of field to sort by. Can be null if - * type is SCORE or DOC. - * @param type Type of values in the terms. - * @param reverse True if natural order should be reversed (default=false). - */ - SortField::SortField (const TCHAR* field, int32_t type, bool reverse) { - this->field = (field != NULL) ? CLStringIntern::intern(field CL_FILELINE) : field; - this->type = type; - this->reverse = reverse; - this->factory = NULL; - } - - SortField::SortField(const SortField& clone){ - this->field = (clone.field != NULL) ? CLStringIntern::intern(clone.field CL_FILELINE) : clone.field; - this->type = clone.type; - this->reverse = clone.reverse; - this->factory = clone.factory; - } - SortField* SortField::clone() const{ - return _CLNEW SortField(*this); - } - - /** Creates a sort by terms in the given field sorted - * according to the given locale. - * @param field Name of field to sort by, cannot be null. - * @param locale Locale of values in the field. - */ - /*SortField::SortField (TCHAR* field, Locale* locale) { - this->field = (field != NULL) ? CLStringIntern::intern(field): field; - this->type = STRING; - this->locale = locale; - }*/ - - /** Creates a sort, possibly in reverse, by terms in the given field sorted - * according to the given locale. - * @param field Name of field to sort by, cannot be null. - * @param locale Locale of values in the field. - */ - /*SortField::SortField (TCHAR* field, Locale* locale, bool reverse) { - this->field = (field != NULL) ? CLStringIntern::intern(field): field; - this->type = STRING; - this->locale = locale; - this->reverse = reverse; - }*/ - - - /** Creates a sort, possibly in reverse, with a custom comparison function. - * @param field Name of field to sort by; cannot be null. - * @param comparator Returns a comparator for sorting hits. - * @param reverse True if natural order should be reversed (default=false). - */ - SortField::SortField (const TCHAR* field, SortComparatorSource* comparator, bool reverse) { - this->field = (field != NULL) ? CLStringIntern::intern(field CL_FILELINE): field; - this->type = CUSTOM; - this->reverse = reverse; - this->factory = comparator; - } - - SortField::~SortField(){ - CLStringIntern::unintern(field); - } - - TCHAR* SortField::toString() const { - CL_NS(util)::StringBuffer buffer; - switch (type) { - case DOCSCORE: buffer.append(_T("")); - break; - - case DOC: buffer.append(_T("")); - break; - - case CUSTOM: buffer.append (_T("getName()); - buffer.append(_T(">")); - break; - - default: buffer.append( _T("\"")); - buffer.append( field ); - buffer.append( _T("\"") ); - break; - } - - //if (locale != null) buffer.append ("("+locale+")"); todo: - if (reverse) buffer.appendChar('!'); - - return buffer.toString(); - } - - - - - - - - - - - - - - /** Sorts by computed relevance. This is the same sort criteria as - * calling {@link Searcher#search(Query) Searcher#search()} without a sort criteria, only with - * slightly more overhead. */ - Sort::Sort() { - fields=NULL; - SortField** fields=_CL_NEWARRAY(SortField*,3); - fields[0]=SortField::FIELD_SCORE; - fields[1]=SortField::FIELD_DOC; - fields[2]=NULL; - setSort (fields); - _CLDELETE_ARRAY(fields); - } - - Sort::~Sort(){ - clear(); - } - void Sort::clear(){ - if ( fields != NULL ){ - int32_t i=0; - while ( fields[i] != NULL ){ - if ( fields[i] != SortField::FIELD_SCORE && - fields[i] != SortField::FIELD_DOC ){ - _CLDELETE(fields[i]); - } - i++; - } - _CLDELETE_ARRAY(fields); - } - } - - /** Sorts possibly in reverse by the terms in field then by - * index order (document number). The type of value in field is determined - * automatically. - * @see SortField#AUTO - */ - Sort::Sort (const TCHAR* field, bool reverse) { - this->fields=NULL; - setSort (field, reverse); - } - - - /** Sorts in succession by the terms in each field. - * The type of value in field is determined - * automatically. - * @see SortField#AUTO - */ - Sort::Sort (const TCHAR** fields) { - this->fields=NULL; - setSort (fields); - } - - - /** Sorts by the criteria in the given SortField. */ - Sort::Sort (SortField* field) { - this->fields=NULL; - setSort (field); - } - - - /** Sorts in succession by the criteria in each SortField. */ - Sort::Sort (SortField** fields) { - this->fields=NULL; - setSort (fields); - } - - - /** Sets the sort to the terms in field possibly in reverse, - * then by index order (document number). */ - void Sort::setSort (const TCHAR* field, bool reverse) { - clear(); - fields = _CL_NEWARRAY(SortField*,3); - fields[0] = _CLNEW SortField (field, SortField::AUTO, reverse); - fields[1] = SortField::FIELD_DOC; - fields[2] = NULL; - } - - - /** Sets the sort to the terms in each field in succession. */ - void Sort::setSort (const TCHAR** fieldnames) { - clear(); - - int32_t n = 0; - while ( fieldnames[n] != NULL ) - n++; - - fields = _CL_NEWARRAY(SortField*,n+1); - for (int32_t i = 0; i < n; ++i) { - fields[i] = _CLNEW SortField (fieldnames[i], SortField::AUTO,false); - } - fields[n]=NULL; - } - - - /** Sets the sort to the given criteria. */ - void Sort::setSort (SortField* field) { - clear(); - - this->fields = _CL_NEWARRAY(SortField*,2); - this->fields[0] = field; - this->fields[1] = NULL; - } - - - /** Sets the sort to the given criteria in succession. */ - void Sort::setSort (SortField** fields) { - clear(); - - int n=0; - while ( fields[n] != NULL ) - n++; - this->fields = _CL_NEWARRAY(SortField*,n+1); - for (int i=0;ifields[i]=fields[i]; - } - - TCHAR* Sort::toString() const { - CL_NS(util)::StringBuffer buffer; - - int32_t i = 0; - while ( fields[i] != NULL ){ - if (i>0) - buffer.appendChar(','); - - const TCHAR* p = fields[i]->toString(); - buffer.append(p); - _CLDELETE_CARRAY(p); - - i++; - } - - return buffer.toString(); - } - - - - - - ScoreDocComparator* ScoreDocComparator::INDEXORDER = _CLNEW ScoreDocComparators::IndexOrder; - ScoreDocComparator* ScoreDocComparator::RELEVANCE = _CLNEW ScoreDocComparators::Relevance; - - ScoreDocComparator::~ScoreDocComparator(){ - } - - -class ScoreDocComparatorImpl: public ScoreDocComparator{ - Comparable** cachedValues; - FieldCacheAuto* fca; - int32_t cachedValuesLen; -public: - ScoreDocComparatorImpl(FieldCacheAuto* fca){ - this->fca = fca; - if ( fca->contentType != FieldCacheAuto::COMPARABLE_ARRAY ) - _CLTHROWA(CL_ERR_InvalidCast,"Invalid field cache auto type"); - this->cachedValues = fca->comparableArray; - this->cachedValuesLen = fca->contentLen; - } - ~ScoreDocComparatorImpl(){ - } - int32_t compare (struct ScoreDoc* i, struct ScoreDoc* j){ - CND_PRECONDITION(i->doc >= 0 && i->doc < cachedValuesLen, "i->doc out of range") - CND_PRECONDITION(j->doc >= 0 && j->doc < cachedValuesLen, "j->doc out of range") - return cachedValues[i->doc]->compareTo (cachedValues[j->doc]); - } - - CL_NS(util)::Comparable* sortValue (struct ScoreDoc* i){ - CND_PRECONDITION(i->doc >= 0 && i->doc < cachedValuesLen, "i->doc out of range") - return cachedValues[i->doc]; - } - - int32_t sortType(){ - return SortField::CUSTOM; - } -}; - -ScoreDocComparator* SortComparator::newComparator (CL_NS(index)::IndexReader* reader, const TCHAR* fieldname){ - return _CLNEW ScoreDocComparatorImpl(FieldCache::DEFAULT->getCustom (reader, fieldname, this)); -} -SortComparator::SortComparator(){ -} -SortComparator::~SortComparator(){ -} - - -CL_NS_END diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/search/Sort.h qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/search/Sort.h --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/search/Sort.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/search/Sort.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,356 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#ifndef _lucene_search_Sort_ -#define _lucene_search_Sort_ - -#if defined(_LUCENE_PRAGMA_ONCE) -# pragma once -#endif - -#include "CLucene/index/IndexReader.h" -#include "SearchHeader.h" - -CL_NS_DEF(search) - - class SortField; //predefine - class Sort; - -/** - * Expert: Compares two ScoreDoc objects for sorting. - * - */ - class ScoreDocComparator:LUCENE_BASE { - protected: - ScoreDocComparator(){} - public: - virtual ~ScoreDocComparator(); -// CL_NS(util)::Comparable** cachedValues; -// ScoreDocComparator(CL_NS(util)::Comparable** cachedValues); - - /** - * Compares two ScoreDoc objects and returns a result indicating their - * sort order. - * @param i First ScoreDoc - * @param j Second ScoreDoc - * @return -1 if i should come before j
1 if i should come after j
0 if they are equal - * @see java.util.Comparator - */ - virtual int32_t compare (struct ScoreDoc* i, struct ScoreDoc* j) = 0; - - /** - * Returns the value used to sort the given document. The - * object returned must implement the java.io.Serializable - * interface. This is used by multisearchers to determine how to collate results from their searchers. - * @see FieldDoc - * @param i Document - * @return Serializable object - */ - virtual CL_NS(util)::Comparable* sortValue (struct ScoreDoc* i) = 0; - - - /** - * Returns the type of sort. Should return SortField.SCORE, SortField.DOC, SortField.STRING, SortField.INTEGER, - * SortField::FLOAT or SortField.CUSTOM. It is not valid to return SortField.AUTO. - * This is used by multisearchers to determine how to collate results from their searchers. - * @return One of the constants in SortField. - * @see SortField - */ - virtual int32_t sortType() = 0; - - /** Special comparator for sorting hits according to computed relevance (document score). */ - static ScoreDocComparator* RELEVANCE; - - /** Special comparator for sorting hits according to index order (document number). */ - static ScoreDocComparator* INDEXORDER; - }; - -/** - * Expert: returns a comparator for sorting ScoreDocs. - * - */ -class SortComparatorSource:LUCENE_BASE { -public: - virtual ~SortComparatorSource(){ - } - - /** - * return a reference to a string describing the name of the comparator - * this is used in the explanation - */ - virtual TCHAR* getName() = 0; - - virtual size_t hashCode() = 0; - - /** - * Creates a comparator for the field in the given index. - * @param reader Index to create comparator for. - * @param fieldname Field to create comparator for. - * @return Comparator of ScoreDoc objects. - * @throws IOException If an error occurs reading the index. - */ - virtual ScoreDocComparator* newComparator (CL_NS(index)::IndexReader* reader, const TCHAR* fieldname) = 0; -}; - - -/** - * Abstract base class for sorting hits returned by a Query. - * - *

This class should only be used if the other SortField - * types (SCORE, DOC, STRING, INT, FLOAT) do not provide an - * adequate sorting. It maintains an internal cache of values which - * could be quite large. The cache is an array of Comparable, - * one for each document in the index. There is a distinct - * Comparable for each unique term in the field - if - * some documents have the same term in the field, the cache - * array will have entries which reference the same Comparable. - * - */ -class SortComparator: public SortComparatorSource { -public: - virtual ScoreDocComparator* newComparator (CL_NS(index)::IndexReader* reader, const TCHAR* fieldname); - - SortComparator(); - virtual ~SortComparator(); - - /** - * Returns an object which, when sorted according to natural order, - * will order the Term values in the correct order. - *

For example, if the Terms contained integer values, this method - * would return new Integer(termtext). Note that this - * might not always be the most efficient implementation - for this - * particular example, a better implementation might be to make a - * ScoreDocLookupComparator that uses an internal lookup table of int. - * @param termtext The textual value of the term. - * @return An object representing termtext that sorts - * according to the natural order of termtext. - * @see Comparable - * @see ScoreDocComparator - */ - virtual CL_NS(util)::Comparable* getComparable (const TCHAR* termtext) = 0; - -}; - - -/** - * Stores information about how to sort documents by terms in an individual - * field. Fields must be indexed in order to sort by them. - * - */ -class SortField:LUCENE_BASE { -private: - const TCHAR* field; - int32_t type; // defaults to determining type dynamically - //Locale* locale; // defaults to "natural order" (no Locale) - bool reverse; // defaults to natural order - SortComparatorSource* factory; - -protected: - SortField (const SortField& clone); -public: - virtual ~SortField(); - - /** Sort by document score (relevancy). Sort values are Float and higher - * values are at the front. - * PORTING: this is the same as SCORE in java, it had to be renamed because - * SCORE is a system macro on some platforms (AIX). - */ - LUCENE_STATIC_CONSTANT(int32_t, DOCSCORE=0); - - /** Sort by document number (index order). Sort values are Integer and lower - * values are at the front. */ - LUCENE_STATIC_CONSTANT(int32_t, DOC=1); - - /** Guess type of sort based on field contents. A regular expression is used - * to look at the first term indexed for the field and determine if it - * represents an integer number, a floating point number, or just arbitrary - * string characters. */ - LUCENE_STATIC_CONSTANT(int32_t, AUTO=2); - - /** Sort using term values as Strings. Sort values are String and lower - * values are at the front. */ - LUCENE_STATIC_CONSTANT(int32_t, STRING=3); - - /** Sort using term values as encoded Integers. Sort values are Integer and - * lower values are at the front. */ - LUCENE_STATIC_CONSTANT(int32_t, INT=4); - - /** Sort using term values as encoded Floats. Sort values are Float and - * lower values are at the front. */ - LUCENE_STATIC_CONSTANT(int32_t, FLOAT=5); - - /** Sort using a custom Comparator. Sort values are any Comparable and - * sorting is done according to natural order. */ - LUCENE_STATIC_CONSTANT(int32_t, CUSTOM=9); - - // IMPLEMENTATION NOTE: the FieldCache.STRING_INDEX is in the same "namespace" - // as the above static int values. Any new values must not have the same value - // as FieldCache.STRING_INDEX. - - /** Represents sorting by document score (relevancy). */ - static SortField* FIELD_SCORE; - - /** Represents sorting by document number (index order). */ - static SortField* FIELD_DOC; - - SortField (const TCHAR* field); - //SortField (const TCHAR* field, bool reverse); - //todo: we cannot make reverse use default field of =false. - //because bool and int are the same type in c, overloading is not possible - SortField (const TCHAR* field, int32_t type, bool reverse); - - /* - SortField (TCHAR* field, Locale* locale) { - SortField (TCHAR* field, Locale* locale, bool reverse);*/ - - SortField (const TCHAR* field, SortComparatorSource* comparator, bool reverse=false); - - /** Returns the name of the field. Could return null - * if the sort is by SCORE or DOC. - * @return Name of field, possibly null. - */ - const TCHAR* getField() const { return field; } - - SortField* clone() const; - - /** Returns the type of contents in the field. - * @return One of the constants SCORE, DOC, AUTO, STRING, INT or FLOAT. - */ - int32_t getType() const { return type; } - - /** Returns the Locale by which term values are interpreted. - * May return null if no Locale was specified. - * @return Locale, or null. - */ - /*Locale getLocale() { - return locale; - }*/ - - /** Returns whether the sort should be reversed. - * @return True if natural order should be reversed. - */ - bool getReverse() const { return reverse; } - - SortComparatorSource* getFactory() const { return factory; } - - TCHAR* toString() const; -}; - - - -/** - * Encapsulates sort criteria for returned hits. - * - *

The fields used to determine sort order must be carefully chosen. - * Documents must contain a single term in such a field, - * and the value of the term should indicate the document's relative position in - * a given sort order. The field must be indexed, but should not be tokenized, - * and does not need to be stored (unless you happen to want it back with the - * rest of your document data). In other words: - * - *

document.add (new Field ("byNumber", Integer.toString(x), false, true, false)); - *
- * - *

Valid Types of Values

- * - *

There are three possible kinds of term values which may be put into - * sorting fields: Integers, Floats, or Strings. Unless - * {@link SortField SortField} objects are specified, the type of value - * in the field is determined by parsing the first term in the field. - * - *

Integer term values should contain only digits and an optional - * preceeding negative sign. Values must be base 10 and in the range - * Integer.MIN_VALUE and Integer.MAX_VALUE inclusive. - * Documents which should appear first in the sort - * should have low value integers, later documents high values - * (i.e. the documents should be numbered 1..n where - * 1 is the first and n the last). - * - *

Float term values should conform to values accepted by - * {@link Float Float.valueOf(String)} (except that NaN - * and Infinity are not supported). - * Documents which should appear first in the sort - * should have low values, later documents high values. - * - *

String term values can contain any valid String, but should - * not be tokenized. The values are sorted according to their - * {@link Comparable natural order}. Note that using this type - * of term value has higher memory requirements than the other - * two types. - * - *

Object Reuse

- * - *

One of these objects can be - * used multiple times and the sort order changed between usages. - * - *

This class is thread safe. - * - *

Memory Usage

- * - *

Sorting uses of caches of term values maintained by the - * internal HitQueue(s). The cache is static and contains an integer - * or float array of length IndexReader.maxDoc() for each field - * name for which a sort is performed. In other words, the size of the - * cache in bytes is: - * - *

4 * IndexReader.maxDoc() * (# of different fields actually used to sort) - * - *

For String fields, the cache is larger: in addition to the - * above array, the value of every term in the field is kept in memory. - * If there are many unique terms in the field, this could - * be quite large. - * - *

Note that the size of the cache is not affected by how many - * fields are in the index and might be used to sort - only by - * the ones actually used to sort a result set. - * - *

The cache is cleared each time a new IndexReader is - * passed in, or if the value returned by maxDoc() - * changes for the current IndexReader. This class is not set up to - * be able to efficiently sort hits from more than one index - * simultaneously. - * - */ -class Sort:LUCENE_BASE { - // internal representation of the sort criteria - SortField** fields; - void clear(); -public: - ~Sort(); - - /** Represents sorting by computed relevance. Using this sort criteria - * returns the same results as calling {@link Searcher#search(Query) Searcher#search()} - * without a sort criteria, only with slightly more overhead. */ - static Sort* RELEVANCE; - - /** Represents sorting by index order. */ - static Sort* INDEXORDER; - - Sort(); - Sort (const TCHAR* field, bool reverse=false); - Sort (const TCHAR** fields); - Sort (SortField* field); - Sort (SortField** fields); - void setSort (const TCHAR* field, bool reverse=false); - void setSort (const TCHAR** fieldnames); - void setSort (SortField* field); - void setSort (SortField** fields); - - TCHAR* toString() const; - - /** - * Representation of the sort criteria. - * @return a pointer to the of SortField array used in this sort criteria - */ - SortField** getSort() const{ return fields; } -}; - - - - - -CL_NS_END -#endif diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/search/TermQuery.cpp qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/search/TermQuery.cpp --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/search/TermQuery.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/search/TermQuery.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,213 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#include "CLucene/StdHeader.h" -#include "TermQuery.h" - -#include "SearchHeader.h" -#include "Scorer.h" -#include "CLucene/index/Term.h" -#include "TermScorer.h" -#include "CLucene/index/IndexReader.h" -#include "CLucene/util/StringBuffer.h" -#include "CLucene/index/Terms.h" - -CL_NS_USE(index) -CL_NS_DEF(search) - - - /** Constructs a query for the term t. */ - TermQuery::TermQuery(Term* t): - term( _CL_POINTER(t) ) - { - } - TermQuery::TermQuery(const TermQuery& clone): - Query(clone){ - this->term=_CL_POINTER(clone.term); - } - TermQuery::~TermQuery(){ - _CLDECDELETE(term); - } - - Query* TermQuery::clone() const{ - return _CLNEW TermQuery(*this); - } - - const TCHAR* TermQuery::getClassName(){ - return _T("TermQuery"); - } - const TCHAR* TermQuery::getQueryName() const{ - return getClassName(); - } - size_t TermQuery::hashCode() const { - return Similarity::floatToByte(getBoost()) ^ term->hashCode(); - } - - - //added by search highlighter - Term* TermQuery::getTerm(bool pointer) const - { - if ( pointer ) - return _CL_POINTER(term); - else - return term; - } - - - /** Prints a user-readable version of this query. */ - TCHAR* TermQuery::toString(const TCHAR* field) const{ - CL_NS(util)::StringBuffer buffer; - if ( field==NULL || _tcscmp(term->field(),field)!= 0 ) { - buffer.append(term->field()); - buffer.append(_T(":")); - } - buffer.append(term->text()); - if (getBoost() != 1.0f) { - buffer.append(_T("^")); - buffer.appendFloat( getBoost(),1 ); - } - return buffer.toString(); - } - - /** Returns true iff o is equal to this. */ - bool TermQuery::equals(Query* other) const { - if (!(other->instanceOf(TermQuery::getClassName()))) - return false; - - TermQuery* tq = (TermQuery*)other; - return (this->getBoost() == tq->getBoost()) - && this->term->equals(tq->term); - } - - - TermQuery::TermWeight::TermWeight(Searcher* searcher, TermQuery* _this, Term* _term) { - this->_this = _this; - this->_term = _term; - this->searcher = searcher; - value=0; - idf=0; - queryNorm=0; - queryWeight=0; - } - TermQuery::TermWeight::~TermWeight(){ - } - - //return a *new* string describing this object - TCHAR* TermQuery::TermWeight::toString() { - int32_t size=_tcslen(_this->getQueryName()) + 10; - TCHAR* tmp = _CL_NEWARRAY(TCHAR, size);//_tcslen(weight()) - _sntprintf(tmp,size,_T("weight(%s)"),_this->getQueryName()); - return tmp; - } - - qreal TermQuery::TermWeight::sumOfSquaredWeights() { - idf = _this->getSimilarity(searcher)->idf(_term, searcher); // compute idf - queryWeight = idf * _this->getBoost(); // compute query weight - return queryWeight * queryWeight; // square it - } - - void TermQuery::TermWeight::normalize(qreal queryNorm) { - this->queryNorm = queryNorm; - queryWeight *= queryNorm; // normalize query weight - value = queryWeight * idf; // idf for document - } - - Scorer* TermQuery::TermWeight::scorer(IndexReader* reader) { - TermDocs* termDocs = reader->termDocs(_term); - - if (termDocs == NULL) - return NULL; - - return _CLNEW TermScorer(this, termDocs, _this->getSimilarity(searcher), - reader->norms(_term->field())); - } - - void TermQuery::TermWeight::explain(IndexReader* reader, int32_t doc, Explanation* result){ - TCHAR buf[LUCENE_SEARCH_EXPLANATION_DESC_LEN]; - TCHAR* tmp; - - tmp = getQuery()->toString(); - _sntprintf(buf,LUCENE_SEARCH_EXPLANATION_DESC_LEN, - _T("weight(%s in %d), product of:"),tmp,doc); - _CLDELETE_CARRAY(tmp); - result->setDescription(buf); - - _sntprintf(buf,LUCENE_SEARCH_EXPLANATION_DESC_LEN, - _T("idf(docFreq=%d)"), searcher->docFreq(_term) ); - Explanation* idfExpl = _CLNEW Explanation(idf, buf); - - // explain query weight - Explanation* queryExpl = _CLNEW Explanation(); - tmp = getQuery()->toString(); - _sntprintf(buf,LUCENE_SEARCH_EXPLANATION_DESC_LEN, - _T("queryWeight(%s), product of:"), tmp); - _CLDELETE_CARRAY(tmp); - queryExpl->setDescription(buf); - - Explanation* boostExpl = _CLNEW Explanation(_this->getBoost(), _T("boost")); - if (_this->getBoost() != 1.0f) - queryExpl->addDetail(boostExpl); - else - _CLDELETE(boostExpl); - - queryExpl->addDetail(idfExpl->clone()); - - Explanation* queryNormExpl = _CLNEW Explanation(queryNorm,_T("queryNorm")); - queryExpl->addDetail(queryNormExpl); - - queryExpl->setValue(_this->getBoost()* // always 1.0 - idfExpl->getValue() * - queryNormExpl->getValue()); - - // explain field weight - const TCHAR* field = _term->field(); - Explanation* fieldExpl = _CLNEW Explanation(); - - tmp = _term->toString(); - _sntprintf(buf,LUCENE_SEARCH_EXPLANATION_DESC_LEN, - _T("fieldWeight(%s in %d), product of:"),tmp,doc); - _CLDELETE_CARRAY(tmp); - fieldExpl->setDescription(buf); - - Scorer* sc = scorer(reader); - Explanation* tfExpl = _CLNEW Explanation; - sc->explain(doc, tfExpl); - _CLDELETE(sc); - fieldExpl->addDetail(tfExpl); - fieldExpl->addDetail(idfExpl); - - Explanation* fieldNormExpl = _CLNEW Explanation(); - uint8_t* fieldNorms = reader->norms(field); - qreal fieldNorm = - fieldNorms!=NULL ? Similarity::decodeNorm(fieldNorms[doc]) : 0.0f; - fieldNormExpl->setValue(fieldNorm); - - _sntprintf(buf,LUCENE_SEARCH_EXPLANATION_DESC_LEN, - _T("fieldNorm(field=%s, doc=%d)"),field,doc); - fieldNormExpl->setDescription(buf); - fieldExpl->addDetail(fieldNormExpl); - - fieldExpl->setValue(tfExpl->getValue() * - idfExpl->getValue() * - fieldNormExpl->getValue()); - - /*if (queryExpl->getValue() == 1.0f){ - _CLDELETE(result); - return fieldExpl; - }else{*/ - result->addDetail(queryExpl); - result->addDetail(fieldExpl); - - // combine them - result->setValue(queryExpl->getValue() * fieldExpl->getValue()); - //} - } - - Weight* TermQuery::_createWeight(Searcher* searcher) { - return _CLNEW TermWeight(searcher,this,term); - } -CL_NS_END - diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/search/TermQuery.h qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/search/TermQuery.h --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/search/TermQuery.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/search/TermQuery.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,81 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#ifndef _lucene_search_TermQuery_ -#define _lucene_search_TermQuery_ - -#if defined(_LUCENE_PRAGMA_ONCE) -# pragma once -#endif - -#include "SearchHeader.h" -#include "Scorer.h" -#include "CLucene/index/Term.h" -#include "TermScorer.h" -#include "CLucene/index/IndexReader.h" -#include "CLucene/util/StringBuffer.h" -#include "CLucene/index/Terms.h" - -CL_NS_DEF(search) - - - /** A Query that matches documents containing a term. - This may be combined with other terms with a {@link BooleanQuery}. - */ - class TermQuery: public Query { - private: - CL_NS(index)::Term* term; - - - class TermWeight: public Weight { - private: - Searcher* searcher; - qreal value; - qreal idf; - qreal queryNorm; - qreal queryWeight; - TermQuery* _this; - CL_NS(index)::Term* _term; - - public: - TermWeight(Searcher* searcher, TermQuery* _this, CL_NS(index)::Term* _term); - ~TermWeight(); - TCHAR* toString(); - Query* getQuery() { return (Query*)_this; } - qreal getValue() { return value; } - - qreal sumOfSquaredWeights(); - void normalize(qreal queryNorm); - Scorer* scorer(CL_NS(index)::IndexReader* reader); - void explain(CL_NS(index)::IndexReader* reader, int32_t doc, Explanation* ret); - }; - - protected: - Weight* _createWeight(Searcher* searcher); - TermQuery(const TermQuery& clone); - public: - // Constructs a query for the term t. - TermQuery(CL_NS(index)::Term* t); - ~TermQuery(); - - static const TCHAR* getClassName(); - const TCHAR* getQueryName() const; - - //added by search highlighter - CL_NS(index)::Term* getTerm(bool pointer=true) const; - - // Prints a user-readable version of this query. - TCHAR* toString(const TCHAR* field) const; - - bool equals(Query* other) const; - Query* clone() const; - - /** Returns a hash code value for this object.*/ - size_t hashCode() const; - }; -CL_NS_END -#endif - diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/search/TermScorer.cpp qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/search/TermScorer.cpp --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/search/TermScorer.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/search/TermScorer.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,120 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#include "CLucene/StdHeader.h" -#include "TermScorer.h" - -#include "CLucene/index/Terms.h" -#include "TermQuery.h" - -CL_NS_USE(index) -CL_NS_DEF(search) - - //TermScorer takes TermDocs and delets it when TermScorer is cleaned up - TermScorer::TermScorer(Weight* w, CL_NS(index)::TermDocs* td, - Similarity* similarity,uint8_t* _norms): - Scorer(similarity), - termDocs(td), - norms(_norms), - weight(w), - weightValue(w->getValue()), - _doc(0), - pointer(0), - pointerMax(0) - { - memset(docs,0,32*sizeof(int32_t)); - memset(freqs,0,32*sizeof(int32_t)); - - for (int32_t i = 0; i < LUCENE_SCORE_CACHE_SIZE; i++) - scoreCache[i] = getSimilarity()->tf(i) * weightValue; - } - - TermScorer::~TermScorer(){ - _CLDELETE(termDocs); - } - bool TermScorer::next(){ - pointer++; - if (pointer >= pointerMax) { - pointerMax = termDocs->read(docs, freqs, 32); // refill buffer - if (pointerMax != 0) { - pointer = 0; - } else { - termDocs->close(); // close stream - _doc = LUCENE_INT32_MAX_SHOULDBE; // set to sentinel value - return false; - } - } - _doc = docs[pointer]; - return true; - } - - bool TermScorer::skipTo(int32_t target) { - // first scan in cache - for (pointer++; pointer < pointerMax; pointer++) { - if (docs[pointer] >= target) { - _doc = docs[pointer]; - return true; - } - } - - // not found in cache, seek underlying stream - bool result = termDocs->skipTo(target); - if (result) { - pointerMax = 1; - pointer = 0; - docs[pointer] = _doc = termDocs->doc(); - freqs[pointer] = termDocs->freq(); - } else { - _doc = LUCENE_INT32_MAX_SHOULDBE; - } - return result; - } - - void TermScorer::explain(int32_t doc, Explanation* tfExplanation) { - TermQuery* query = (TermQuery*)weight->getQuery(); - int32_t tf = 0; - while (pointer < pointerMax) { - if (docs[pointer] == doc) - tf = freqs[pointer]; - pointer++; - } - if (tf == 0) { - while (termDocs->next()) { - if (termDocs->doc() == doc) { - tf = termDocs->freq(); - } - } - } - termDocs->close(); - tfExplanation->setValue(getSimilarity()->tf(tf)); - - TCHAR buf[LUCENE_SEARCH_EXPLANATION_DESC_LEN+1]; - TCHAR* termToString = query->getTerm(false)->toString(); - _sntprintf(buf,LUCENE_SEARCH_EXPLANATION_DESC_LEN,_T("tf(termFreq(%s)=%d)"), termToString, tf); - _CLDELETE_CARRAY(termToString); - tfExplanation->setDescription(buf); - } - - TCHAR* TermScorer::toString() { - TCHAR* wb = weight->toString(); - int32_t rl = _tcslen(wb) + 9; //9=_tcslen("scorer(" ")") + 1 - TCHAR* ret = _CL_NEWARRAY(TCHAR,rl); - _sntprintf(ret,rl,_T("scorer(%s)"), wb); - _CLDELETE_ARRAY(wb); - return ret; - } - - qreal TermScorer::score(){ - int32_t f = freqs[pointer]; - qreal raw = // compute tf(f)*weight - f < LUCENE_SCORE_CACHE_SIZE // check cache - ? scoreCache[f] // cache hit - : getSimilarity()->tf(f) * weightValue; // cache miss - - return raw * Similarity::decodeNorm(norms[_doc]); // normalize for field - } - -CL_NS_END diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/search/TermScorer.h qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/search/TermScorer.h --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/search/TermScorer.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/search/TermScorer.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,53 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#ifndef _lucene_search_TermScorer_ -#define _lucene_search_TermScorer_ - -#if defined(_LUCENE_PRAGMA_ONCE) -# pragma once -#endif - -#include "Scorer.h" -#include "CLucene/index/Terms.h" -#include "CLucene/search/Similarity.h" -#include "SearchHeader.h" - -CL_NS_DEF(search) - - class TermScorer: public Scorer { - private: - CL_NS(index)::TermDocs* termDocs; - uint8_t* norms; - Weight* weight; - const qreal weightValue; - int32_t _doc; - - int32_t docs[32]; // buffered doc numbers - int32_t freqs[32]; // buffered term freqs - int32_t pointer; - int32_t pointerMax; - - qreal scoreCache[LUCENE_SCORE_CACHE_SIZE]; - public: - - //TermScorer takes TermDocs and delets it when TermScorer is cleaned up - TermScorer(Weight* weight, CL_NS(index)::TermDocs* td, - Similarity* similarity, uint8_t* _norms); - - ~TermScorer(); - - int32_t doc() const { return _doc; } - - bool next(); - bool skipTo(int32_t target); - void explain(int32_t doc, Explanation* ret); - TCHAR* toString(); - - qreal score(); - }; -CL_NS_END -#endif diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/search/WildcardQuery.cpp qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/search/WildcardQuery.cpp --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/search/WildcardQuery.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/search/WildcardQuery.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,147 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#include "CLucene/StdHeader.h" -#include "WildcardQuery.h" -#include "CLucene/util/BitSet.h" - -CL_NS_USE(index) -CL_NS_USE(util) -CL_NS_DEF(search) - - - WildcardQuery::WildcardQuery(Term* term): - MultiTermQuery( term ){ - //Func - Constructor - //Pre - term != NULL - //Post - Instance has been created - - } - - WildcardQuery::~WildcardQuery(){ - //Func - Destructor - //Pre - true - //Post - true - - } - - const TCHAR* WildcardQuery::getQueryName() const{ - //Func - Returns the string "WildcardQuery" - //Pre - true - //Post - The string "WildcardQuery" has been returned - return getClassName(); - } - - const TCHAR* WildcardQuery::getClassName(){ - return _T("WildcardQuery"); - } - - - FilteredTermEnum* WildcardQuery::getEnum(IndexReader* reader) { - return _CLNEW WildcardTermEnum(reader, getTerm(false)); - } - - WildcardQuery::WildcardQuery(const WildcardQuery& clone): - MultiTermQuery(clone) - { - } - - Query* WildcardQuery::clone() const{ - return _CLNEW WildcardQuery(*this); - } - size_t WildcardQuery::hashCode() const{ - //todo: we should give the query a seeding value... but - //need to do it for all hascode functions - return Similarity::floatToByte(getBoost()) ^ getTerm()->hashCode(); - } - bool WildcardQuery::equals(Query* other) const{ - if (!(other->instanceOf(WildcardQuery::getClassName()))) - return false; - - WildcardQuery* tq = (WildcardQuery*)other; - return (this->getBoost() == tq->getBoost()) - && getTerm()->equals(tq->getTerm()); - } - - - - - - - - - - - - -WildcardFilter::WildcardFilter( Term* term ) -{ - this->term = _CL_POINTER(term); -} - -WildcardFilter::~WildcardFilter() -{ - _CLDECDELETE(term); -} - -WildcardFilter::WildcardFilter( const WildcardFilter& copy ) : - term( _CL_POINTER(copy.term) ) -{ -} - -Filter* WildcardFilter::clone() const { - return _CLNEW WildcardFilter(*this ); -} - - -TCHAR* WildcardFilter::toString() -{ - //Instantiate a stringbuffer buffer to store the readable version temporarily - CL_NS(util)::StringBuffer buffer; - //check if field equal to the field of prefix - if( term->field() != NULL ) { - //Append the field of prefix to the buffer - buffer.append(term->field()); - //Append a colon - buffer.append(_T(":") ); - } - //Append the text of the prefix - buffer.append(term->text()); - - //Convert StringBuffer buffer to TCHAR block and return it - return buffer.toString(); -} - - -/** Returns a BitSet with true for documents which should be permitted in -search results, and false for those that should not. */ -BitSet* WildcardFilter::bits( IndexReader* reader ) -{ - BitSet* bts = _CLNEW BitSet( reader->maxDoc() ); - - WildcardTermEnum termEnum (reader, term); - if (termEnum.term(false) == NULL) - return bts; - - TermDocs* termDocs = reader->termDocs(); - try{ - do{ - termDocs->seek(&termEnum); - - while (termDocs->next()) { - bts->set(termDocs->doc()); - } - }while(termEnum.next()); - } _CLFINALLY( - termDocs->close(); - _CLDELETE(termDocs); - termEnum.close(); - ) - - return bts; -} - -CL_NS_END diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/search/WildcardQuery.h qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/search/WildcardQuery.h --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/search/WildcardQuery.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/search/WildcardQuery.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,69 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#ifndef _lucene_search_WildcardQuery_ -#define _lucene_search_WildcardQuery_ -#if defined(_LUCENE_PRAGMA_ONCE) -# pragma once -#endif - -#include "CLucene/index/IndexReader.h" -#include "CLucene/index/Term.h" -#include "MultiTermQuery.h" -#include "WildcardTermEnum.h" - -CL_NS_DEF(search) - - /** Implements the wildcard search query. Supported wildcards are *, which - * matches any character sequence (including the empty one), and ?, - * which matches any single character. Note this query can be slow, as it - * needs to iterate over all terms. In order to prevent extremely slow WildcardQueries, - * a Wildcard term must not start with one of the wildcards * or - * ?. - * - * @see WildcardTermEnum - */ - class WildcardQuery: public MultiTermQuery { - protected: - FilteredTermEnum* getEnum(CL_NS(index)::IndexReader* reader); - WildcardQuery(const WildcardQuery& clone); - public: - WildcardQuery(CL_NS(index)::Term* term); - ~WildcardQuery(); - - //Returns the string "WildcardQuery" - const TCHAR* getQueryName() const; - static const TCHAR* getClassName(); - - size_t hashCode() const; - bool equals(Query* other) const; - Query* clone() const; - }; - - - -class WildcardFilter: public Filter -{ -private: - CL_NS(index)::Term* term; -protected: - WildcardFilter( const WildcardFilter& copy ); - -public: - WildcardFilter(CL_NS(index)::Term* term); - ~WildcardFilter(); - - /** Returns a BitSet with true for documents which should be permitted in - search results, and false for those that should not. */ - CL_NS(util)::BitSet* bits( CL_NS(index)::IndexReader* reader ); - - Filter* clone() const; - TCHAR* toString(); -}; - - -CL_NS_END -#endif diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/search/WildcardTermEnum.cpp qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/search/WildcardTermEnum.cpp --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/search/WildcardTermEnum.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/search/WildcardTermEnum.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,150 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#include "CLucene/StdHeader.h" -#include "WildcardTermEnum.h" - -CL_NS_USE(index) -CL_NS_DEF(search) - - bool WildcardTermEnum::termCompare(Term* term) { - if ( term!=NULL && __term->field() == term->field() ) { - const TCHAR* searchText = term->text(); - const TCHAR* patternText = __term->text(); - if ( _tcsncmp( searchText, pre, preLen ) == 0 ){ - return wildcardEquals(patternText+preLen, __term->textLength()-preLen, 0, searchText, term->textLength(), preLen); - } - } - _endEnum = true; - return false; - } - - /** Creates new WildcardTermEnum */ - WildcardTermEnum::WildcardTermEnum(IndexReader* reader, Term* term): - FilteredTermEnum(), - __term(_CL_POINTER(term)), - fieldMatch(false), - _endEnum(false) - { - - pre = stringDuplicate(term->text()); - - const TCHAR* sidx = _tcschr( pre, LUCENE_WILDCARDTERMENUM_WILDCARD_STRING ); - const TCHAR* cidx = _tcschr( pre, LUCENE_WILDCARDTERMENUM_WILDCARD_CHAR ); - const TCHAR* tidx = sidx; - if (tidx == NULL) - tidx = cidx; - else if ( cidx && cidx > pre) - tidx = min(sidx, cidx); - CND_PRECONDITION(tidx != NULL, "tidx==NULL"); - int32_t idx = (int32_t)(tidx - pre); - preLen = idx; - CND_PRECONDITION(preLentextLength(), "preLen >= term->textLength()"); - pre[preLen]=0; //trim end - - Term* t = _CLNEW Term(__term, pre); - setEnum( reader->terms(t) ); - _CLDECDELETE(t); - } - - void WildcardTermEnum::close() - { - if ( __term != NULL ){ - FilteredTermEnum::close(); - - _CLDECDELETE(__term); - __term = NULL; - - _CLDELETE_CARRAY( pre ); - } - } - WildcardTermEnum::~WildcardTermEnum() { - close(); - } - - qreal WildcardTermEnum::difference() { - return 1.0f; - } - - bool WildcardTermEnum::endEnum() { - return _endEnum; - } - - bool WildcardTermEnum::wildcardEquals(const TCHAR* pattern, int32_t patternLen, int32_t patternIdx, const TCHAR* str, int32_t strLen, int32_t stringIdx) - { - for (int32_t p = patternIdx; ; ++p) - { - for (int32_t s = stringIdx; ; ++p, ++s) - { - // End of str yet? - bool sEnd = (s >= strLen); - // End of pattern yet? - bool pEnd = (p >= patternLen); - - // If we're looking at the end of the str... - if (sEnd) - { - // Assume the only thing left on the pattern is/are wildcards - bool justWildcardsLeft = true; - - // Current wildcard position - int32_t wildcardSearchPos = p; - // While we haven't found the end of the pattern, - // and haven't encountered any non-wildcard characters - while (wildcardSearchPos < patternLen && justWildcardsLeft) - { - // Check the character at the current position - TCHAR wildchar = pattern[wildcardSearchPos]; - // If it's not a wildcard character, then there is more - // pattern information after this/these wildcards. - - if (wildchar != LUCENE_WILDCARDTERMENUM_WILDCARD_CHAR && - wildchar != LUCENE_WILDCARDTERMENUM_WILDCARD_STRING){ - justWildcardsLeft = false; - }else{ - // to prevent "cat" matches "ca??" - if (wildchar == LUCENE_WILDCARDTERMENUM_WILDCARD_CHAR) - return false; - - wildcardSearchPos++; // Look at the next character - } - } - - // This was a prefix wildcard search, and we've matched, so - // return true. - if (justWildcardsLeft) - return true; - } - - // If we've gone past the end of the str, or the pattern, - // return false. - if (sEnd || pEnd) - break; - - // Match a single character, so continue. - if (pattern[p] == LUCENE_WILDCARDTERMENUM_WILDCARD_CHAR) - continue; - - if (pattern[p] == LUCENE_WILDCARDTERMENUM_WILDCARD_STRING) - { - // Look at the character beyond the '*'. - ++p; - // Examine the str, starting at the last character. - for (int32_t i = strLen; i >= s; --i) - { - if (wildcardEquals(pattern, patternLen, p, str, strLen, i)) - return true; - } - break; - } - if (pattern[p] != str[s]) - break; - } - return false; - } - } - -CL_NS_END diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/search/WildcardTermEnum.h qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/search/WildcardTermEnum.h --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/search/WildcardTermEnum.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/search/WildcardTermEnum.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,67 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#ifndef _lucene_search_WildcardTermEnum_ -#define _lucene_search_WildcardTermEnum_ -#if defined(_LUCENE_PRAGMA_ONCE) -# pragma once -#endif - -#include "CLucene/index/IndexReader.h" -#include "CLucene/index/Term.h" -#include "CLucene/index/Terms.h" -#include "FilteredTermEnum.h" - -CL_NS_DEF(search) - /** - * Subclass of FilteredTermEnum for enumerating all terms that match the - * specified wildcard filter term-> - *

- * Term enumerations are always ordered by term->compareTo(). Each term in - * the enumeration is greater than all that precede it. - */ - class WildcardTermEnum: public FilteredTermEnum { - private: - CL_NS(index)::Term* __term; - TCHAR* pre; - int32_t preLen; - bool fieldMatch; - bool _endEnum; - - /******************************************** - * const TCHAR* equality with support for wildcards - ********************************************/ - - protected: - bool termCompare(CL_NS(index)::Term* term) ; - - public: - - /** - * Creates a new WildcardTermEnum. Passing in a - * {@link Term Term} that does not contain a - * LUCENE_WILDCARDTERMENUM_WILDCARD_STRING or - * LUCENE_WILDCARDTERMENUM_WILDCARD_CHAR will cause an exception to be thrown. - */ - WildcardTermEnum(CL_NS(index)::IndexReader* reader, CL_NS(index)::Term* term); - ~WildcardTermEnum(); - - qreal difference() ; - - bool endEnum() ; - - /** - * Determines if a word matches a wildcard pattern. - */ - static bool wildcardEquals(const TCHAR* pattern, int32_t patternLen, int32_t patternIdx, const TCHAR* str, int32_t strLen, int32_t stringIdx); - - void close(); - - const char* getObjectName(){ return WildcardTermEnum::getClassName(); } - static const char* getClassName(){ return "WildcardTermEnum"; } - }; -CL_NS_END -#endif diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/StdHeader.cpp qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/StdHeader.cpp --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/StdHeader.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/StdHeader.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,136 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -* -* Changes are Copyright (C) 2015 The Qt Company Ltd. -------------------------------------------------------------------------------*/ -#include "CLucene/StdHeader.h" -#include "CLucene/util/Misc.h" - -#include "CLucene/search/Sort.h" -#include "CLucene/search/Similarity.h" -#include "CLucene/search/FieldCache.h" -#include "CLucene/search/FieldSortedHitQueue.h" - -#if defined(_CLCOMPILER_MSVC) && defined(_DEBUG) -# define CRTDBG_MAP_ALLOC -# include -#ifndef UNDER_CE -# include -#endif -#endif - -CL_NS_USE(util) - -const TCHAR *_CONST_LUCENE_BLANK_STRING = _T(""); -const char *_CONST_LUCENE_BLANK_ASTRING = ""; -TCHAR* _LUCENE_BLANK_STRING = const_cast(_CONST_LUCENE_BLANK_STRING); -char* _LUCENE_BLANK_ASTRING = const_cast(_CONST_LUCENE_BLANK_ASTRING); - -#ifndef Q_CC_MIPS -#if defined(_LUCENE_THREADMUTEX_USINGDEFAULT) -# if defined(_LUCENE_PRAGMA_WARNINGS) -# pragma message ("==================Using clunky thread mutex!!!==================") -# else -# if !defined(Q_OS_SOLARIS) -# warning "==================Using clunky thread mutex!!!==================" -# endif -# endif -#endif - -#if defined(_ASCII) -# if defined(_LUCENE_PRAGMA_WARNINGS) -# pragma message ("==================Using ascii mode!!!==================") -# else -# if !defined(Q_OS_SOLARIS) -# warning "==================Using ascii mode!!!==================" -# endif -# endif -#endif - -//This causes confusion, because CLucene doesn't really need hashed maps/sets. My experience with the -//hash maps on linux are that there are no significant improvements in using them (infact it adversely -//affected performance... therefore we'll just silently ignore -/*#if defined(LUCENE_DISABLE_HASHING) -# if defined(_LUCENE_PRAGMA_WARNINGS) -# pragma message ("==================Hashing not available or is disabled! CLucene may run slower than optimal ==================") -# else -# if !defined(Q_OS_SOLARIS) -# warning "==================Hashing not available or is disabled! CLucene may run slower than optimal ==================" -# endif -# endif -#endif*/ -#endif - -//clears all static memory. do not attempt to do anything else -//in clucene after calling this function -void _lucene_shutdown(){ - CL_NS(search)::FieldSortedHitQueue::Comparators.clear(); - _CLDELETE(CL_NS(search)::Sort::RELEVANCE); - _CLDELETE(CL_NS(search)::Sort::INDEXORDER); - _CLDELETE(CL_NS(search)::ScoreDocComparator::INDEXORDER); - _CLDELETE(CL_NS(search)::ScoreDocComparator::RELEVANCE); - _CLDELETE(CL_NS(search)::SortField::FIELD_SCORE); - _CLDELETE(CL_NS(search)::SortField::FIELD_DOC); - _CLDELETE(CL_NS(search)::FieldCache::DEFAULT); - - _CLLDELETE(CL_NS(search)::Similarity::getDefault()); - - CL_NS(util)::CLStringIntern::shutdown(); -} - -void CLDebugBreak(){ - //can be used for debug breaking... -#if defined(_CLCOMPILER_MSVC) && defined(_DEBUG) - _CrtDbgBreak(); -#else - int i=0; //a line to put breakpoint on -#endif -} - -//these are functions that lucene uses which -//are not replacement functions -char* lucenestrdup(const char* v CL_FILELINEPARAM){ - size_t len = strlen(v); - char* ret = new char[len+1]; - strncpy(ret,v,len+1); -#if defined(LUCENE_ENABLE_MEMLEAKTRACKING) -# if defined(LUCENE_ENABLE_FILELINEINFO) - CL_NS(debug)::LuceneBase::__cl_voidpadd((void*)ret,file,line,len); -# else - CL_NS(debug)::LuceneBase::__cl_voidpadd((void*)ret,__FILE__,__LINE__,len); -# endif -#endif - return ret; -} - -#ifdef _UCS2 -wchar_t* lucenewcsdup(const wchar_t* v CL_FILELINEPARAM){ - size_t len = _tcslen(v); - wchar_t* ret = new wchar_t[len+1]; - _tcsncpy(ret,v,len+1); -#if defined(LUCENE_ENABLE_MEMLEAKTRACKING) -# if defined(LUCENE_ENABLE_FILELINEINFO) - CL_NS(debug)::LuceneBase::__cl_voidpadd((void*)ret,file,line,len); -# else - CL_NS(debug)::LuceneBase::__cl_voidpadd((void*)ret,__FILE__,__LINE__,len); -# endif -#endif - return ret; -} -#endif //ucs2 - - -//ok, these are the exceptions, but these never -//exist on non-msvc platform, so lets put it here -#ifndef _CL_HAVE_FILELENGTH -int64_t lucene_filelength(int filehandle) -{ - struct fileStat info; - if (fileHandleStat(filehandle, &info) == -1) - _CLTHROWA( CL_ERR_IO,"fileStat error" ); - return info.st_size; -} -#endif diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/StdHeader.h qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/StdHeader.h --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/StdHeader.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/StdHeader.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,509 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -* -* Changes are Copyright (C) 2015 The Qt Company Ltd. -------------------------------------------------------------------------------*/ -#ifndef lucene_stdheader_h -#define lucene_stdheader_h - -#if defined(OVERRIDE_DEFAULT_CLCONFIG) - #include "AltCLConfig.h" -#else - #include "CLucene/CLConfig.h" -#endif - -//first inclusion of compiler.h (it will be called again later) -#include "CLucene/config/compiler.h" - -extern void _lucene_shutdown(); -extern int _lucene_counter_break; //can set a watch on this -#if defined(LUCENE_ENABLE_MEMLEAKTRACKING) - extern bool _lucene_disable_debuglogging; //if LUCENE_ENABLE_CONSTRUCTOR_LOG is on, dont do log if this is true -#endif - -//////////////////////////////////////////////////////// -// default includes -//////////////////////////////////////////////////////// -#ifndef LUCENE_DISABLE_INCLUDES - -#include - -#if defined(_CL_STDC_HEADERS) - #include - #include -#else - #if defined(_CL_HAVE_STDLIB_H) - #include - #endif -#endif - -#if defined(_CL_HAVE_STRING_H) - #if !defined(_CL_STDC_HEADERS) && defined(_CL_HAVE_MEMORY_H) - #include - #endif - #include -#elif defined(_CL_HAVE_STRINGS_H) - //note: as a side note, strtok is not thread-safe.. so be careful where you use it! - #error "strtok replacement for BSD has not been implemented" - #include - #if !defined(_CL_HAVE_STRCHR) - #define strchr index - #define strrchr rindex - #endif -#endif - -#if defined(_CL_HAVE_UNISTD_H) - #include -#elif defined(_CL_HAVE_IO_H) && defined(_CL_HAVE_DIRECT_H) -#ifndef UNDER_CE - #include - #include -#endif -#else - #error "Neither unistd.h or (io.h & direct.h) were available" -#endif - -#ifndef _CL_DISABLE_NATIVE_EXCEPTIONS - #ifdef _CL_HAVE_STDEXCEPT - #include - #else - #error "CLucene can't compile with exception handling on because header is not available" - #endif -#endif - -#if defined(_CL_STAT_MACROS_BROKEN) - #error "Haven't implemented STAT_MACROS_BROKEN fix yet" -#elif defined(_CL_HAVE_SYS_STAT_H) -#ifdef UNDER_CE - #include -#else - #include -#endif -#else - #error "Haven't implemented platforms with no sys/stat.h" -#endif - -#if defined(_CL_HAVE_STDARG_H) - #include -#else - #error "CLucene can compile, but some extras may not work" -#endif - -#if defined(_CL_HAVE_MATH_H) - #include -#else - #error "CLucene can't compile without " -#endif - -#if defined(_CL_HAVE_MAP) - #include -#else - #error "CLucene can't compile without the map header" -#endif - -#if defined(_CL_HAVE_LIST) - #include -#else - #error "CLucene can't compile without the list header" -#endif - -#if defined(_CL_HAVE_SET) - #include -#else - #error "CLucene can't compile without the set header" -#endif - -#if defined(_CL_HAVE_VECTOR) - #include -#else - #error "CLucene can't compile without the vector header" -#endif - -#if !defined(LUCENE_DISABLE_HASHING) && defined(_CL_HAVE_HASH_MAP) && defined(_CL_HAVE_HASH_SET) - //hashing is all or nothing! - #include - #include -#elif !defined(LUCENE_DISABLE_HASHING) && defined(_CL_HAVE_EXT_HASH_MAP) && defined(_CL_HAVE_EXT_HASH_SET) - #include - #include -#elif !defined(LUCENE_DISABLE_HASHING) - #define LUCENE_DISABLE_HASHING -#endif -#if !defined(LUCENE_DISABLE_HASHING) && !defined(CL_NS_HASHING) - #define CL_NS_HASHING(func) std::func -#endif - -#if defined(_CL_HAVE_ALGORITHM) -# include -#else -# error "Can't compile clucene without " -#endif - -#if defined(_CL_HAVE_FUNCTIONAL) -# include -#else -# error "Can't compile clucene without " -#endif - -#if !defined(_CL_HAVE_PRINTF) - #error "CLucene can't compile without printf, replacements have not been implemented" -#endif - -#if !defined(_CL_HAVE_SNPRINTF) && !defined(_CL_HAVE__SNPRINTF) - #error "CLucene can't compile without snprintf, replacements have not been implemented" -#elif !defined(_CL_HAVE__SNPRINTF)&& defined(_CL_HAVE_SVNPRINTF) - #define _snprintf snprintf -#endif - -#if defined(_UCS2) - #if defined(_CL_HAVE_WCHAR_H) - #include - #else - //actually the repl_wchar.h replacements header will - //always be included. It replaces some functions - //that are missing in some wchar.h headers. - #endif -#endif - -#if defined(_UCS2) && defined(_CL_HAVE_WCTYPE_H) - #include -#elif defined(_ASCII) && defined(_CL_HAVE_CTYPE_H) - #include - #undef LUCENE_USE_INTERNAL_CHAR_FUNCTIONS -#elif defined(_UCS2) - //must be in _UCS2 to use internal char functions - #undef LUCENE_USE_INTERNAL_CHAR_FUNCTIONS - #define LUCENE_USE_INTERNAL_CHAR_FUNCTIONS -#else - #error "Cannot compile in _ASCII without ctype.h" -#endif - -//always include replacement, some missing tchar defines -#include "CLucene/config/repl_tchar.h" - -#if defined(_CL_HAVE_ERRNO_H) -#ifndef UNDER_CE - #include -#endif -#else - #error "Haven't implemented platforms with no errno.h" -#endif - -#if defined(_CL_HAVE_FCNTL_H) -#ifndef UNDER_CE - #include -#endif -#else - #error "Haven't implemented platforms with no fcntl.h" -#endif - -#if defined(_CL_HAVE_WINDOWS_H) - #include -#endif - -#endif //LUCENE_DISABLE_INCLUDES -// -//////////////////////////////////////////////////////// - -//second inclusion of compiler.h -//this gives CompilerXXX.h a chance to include other headers -#include "CLucene/config/compiler.h" -// -//////////////////////////////////////////////////////// - - -//////////////////////////////////////////////////////// -// Character functions. -// Here we decide whose character functions to use -//////////////////////////////////////////////////////// -#if defined(LUCENE_USE_INTERNAL_CHAR_FUNCTIONS) - #define stringCaseFold cl_tcscasefold - #define stringCaseFoldCmp cl_tcscasefoldcmp - - #undef _istspace - #undef _istdigit - #undef _istalnum - #undef _istalpha - #undef _totlower - #undef _totupper - #define _istalnum cl_isalnum - #define _istalpha cl_isletter - #define _istspace cl_isspace - #define _istdigit cl_isdigit - #define _totlower cl_tolower - #define _totupper cl_toupper - - //here are some functions to help deal with utf8/ucs2 conversions - //lets let the user decide what mb functions to use... we provide pure utf8 ones no matter what. - /*#undef _mbtowc - #undef _mbstowcs - #undef _wctomb - #undef _wcstombs - #define _mbtowc lucene_mbstowc - #define _mbsstowcs lucene_mbstowcs - #define _wctomb lucene_wcto_mb - #define _wcstombs lucene_wcstombs*/ -#else - //we are using native functions - //here are some functions to help deal with utf8/ucs2 conversions - /*#define _mbtowc mbtowc - #define _wctomb wctomb - #define _mbstowcs mbstowcs - #define _wcstombs wcstombs*/ - - //we are using native character functions - #if defined(_ASCII) - #undef _istspace - #undef _istdigit - #undef _istalnum - #undef _istalpha - #undef _totlower - #undef _totupper - #define _istspace(x) isspace((unsigned char)x) - #define _istdigit(x) isdigit((unsigned char)x) - #define _istalnum(x) isalnum((unsigned char)x) - #define _istalpha(x) isalpha((unsigned char)x) - #define _totlower(x) tolower((unsigned char)x) - #define _totupper(x) toupper((unsigned char)x) - #endif -#endif - -//the methods contained in gunichartables.h -typedef unsigned long clunichar; -bool cl_isletter(clunichar c); -bool cl_isalnum(clunichar c); -bool cl_isdigit(clunichar c); -bool cl_isspace (clunichar c); -TCHAR cl_tolower (TCHAR c); -TCHAR cl_toupper (TCHAR c); - -int cl_tcscasefoldcmp(const TCHAR * dst, const TCHAR * src); -TCHAR* cl_tcscasefold( TCHAR * str, int len=-1 ); - -//we provide utf8 conversion functions -size_t lucene_utf8towc (wchar_t *ret, const char *s, size_t n); -size_t lucene_utf8towcs(wchar_t *, const char *, size_t maxslen); -size_t lucene_wctoutf8 (char * ret, const wchar_t str); -size_t lucene_wcstoutf8 (char *, const wchar_t *, size_t maxslen); -size_t lucene_utf8charlen(const char *p); - -///a blank string... -extern TCHAR* _LUCENE_BLANK_STRING; -#define LUCENE_BLANK_STRING _LUCENE_BLANK_STRING -extern char* _LUCENE_BLANK_ASTRING; -#define LUCENE_BLANK_ASTRING _LUCENE_BLANK_ASTRING - -/* Converts a string into a form that is independent of case. The - * result will not correspond to any particular case, but can be - * compared for equality or ordered with the results of calling - * stringCaseFold() on other strings. - * - * If we did not define this elsewhere, then just convert to lower case - */ -#ifndef stringCaseFold - #define stringCaseFold _tcslwr -#endif -/* Compares 2 strings using case folding (if available) - * If we did not define this elsewhere, then just compare - * using normal method - */ -#ifndef stringCaseFoldCmp - #define stringCaseFoldCmp _tcsicmp -#endif - -//now that all the character routines are completed, include the -//wchar.h replacements. -#include "CLucene/config/repl_wchar.h" //always include replacements - -//a replacement for _tcsdup. This uses new TCHAR[] instead of malloc, so that we can use delete[] to free -#if defined(LUCENE_ENABLE_FILELINEINFO) - #define CL_FILELINE ,__FILE__,__LINE__ - #define CL_FILELINEREF ,file,line /// StringArray; -typedef CL_NS(util)::CLVector StringArrayWithDeletor; -typedef CL_NS(util)::CLVector StringArrayConst; -typedef CL_NS(util)::CLVector StringArrayConstWithDeletor; - -typedef CL_NS(util)::CLVector AStringArray; -typedef CL_NS(util)::CLVector AStringArrayWithDeletor; -typedef CL_NS(util)::CLVector AStringArrayConst; -typedef CL_NS(util)::CLVector AStringArrayConstWithDeletor; -CL_NS_END - -// -//////////////////////////////////////////////////////// - -#endif // STDHEADER_H diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/store/Directory.h qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/store/Directory.h --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/store/Directory.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/store/Directory.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,108 +0,0 @@ -/* - * Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team - * - * Distributable under the terms of either the Apache License (Version 2.0) or - * the GNU Lesser General Public License, as specified in the COPYING file. - * - * Changes are Copyright (C) 2015 The Qt Company Ltd. -*/ -#ifndef _lucene_store_Directory -#define _lucene_store_Directory - -#if defined(_LUCENE_PRAGMA_ONCE) -# pragma once -#endif - -#include - -#include "CLucene/store/Lock.h" -#include "CLucene/util/VoidList.h" -#include "CLucene/util/Misc.h" - -#include "IndexInput.h" -#include "IndexOutput.h" - -CL_NS_DEF(store) - -/** A Directory is a flat list of files. Files may be written once, when they -* are created. Once a file is created it may only be opened for read, or -* deleted. Random access is permitted both when reading and writing. -* -*

Direct i/o is not used directly, but rather all i/o is -* through this API. This permits things such as:

    -*
  • implementation of RAM-based indices; -*
  • implementation indices stored in a database, via a database; -*
  • implementation of an index as a single file; -*
-* -*/ -class Directory : LUCENE_REFBASE -{ -protected: - Directory() {} - // Removes an existing file in the directory. - virtual bool doDeleteFile(const QString& name) = 0; - -public: - DEFINE_MUTEX(THIS_LOCK) - - virtual ~Directory() {}; - - // Returns an array of strings, one for each file in the directory. - virtual QStringList list() const = 0; - - // Returns true iff a file with the given name exists. - virtual bool fileExists(const QString& name) const = 0; - - // Returns the time the named file was last modified. - virtual int64_t fileModified(const QString& name) const = 0; - - // Returns the length of a file in the directory. - virtual int64_t fileLength(const QString& name) const = 0; - - // Returns a stream reading an existing file. - virtual IndexInput* openInput(const QString& name) = 0; - virtual IndexInput* openInput(const QString& name, int32_t bufferSize) - { - // didnt overload bufferSize - return openInput(name); - } - - // Set the modified time of an existing file to now. - virtual void touchFile(const QString& name) = 0; - - // Removes an existing file in the directory. - virtual bool deleteFile(const QString& name, const bool throwError = true) { - bool ret = doDeleteFile(name); - if (!ret && throwError) { - char buffer[200]; - _snprintf(buffer, 200, "couldn't delete file %s", - name.toLocal8Bit().constData()); - _CLTHROWA(CL_ERR_IO, buffer); - } - return ret; - } - - // Renames an existing file in the directory. - // If a file already exists with the new name, then it is replaced. - virtual void renameFile(const QString& from, const QString& to) = 0; - - // Creates a new, empty file in the directory with the given name. - // Returns a stream writing this file. - virtual IndexOutput* createOutput(const QString& name) = 0; - - // Construct a {@link Lock}. - // @param name the name of the lock file - virtual LuceneLock* makeLock(const QString& name) = 0; - - // Closes the store. - virtual void close() = 0; - - virtual QString toString() const = 0; - - virtual QString getDirectoryType() const = 0; -}; - -CL_NS_END - -#endif diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/store/FSDirectory.cpp qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/store/FSDirectory.cpp --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/store/FSDirectory.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/store/FSDirectory.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,662 +0,0 @@ -/* - * Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team - * - * Distributable under the terms of either the Apache License (Version 2.0) or - * the GNU Lesser General Public License, as specified in the COPYING file. - * - * Changes are Copyright (C) 2015 The Qt Company Ltd. -*/ -#include -#include -#include -#include -#include - -#include "CLucene/StdHeader.h" -#include "FSDirectory.h" -#include "CLucene/index/IndexReader.h" -#include "CLucene/util/Misc.h" -#include "CLucene/debug/condition.h" - -CL_NS_DEF(store) -CL_NS_USE(util) - -bool FSDirectory::disableLocks = false; - -// This cache of directories ensures that there is a unique Directory instance -// per path, so that synchronization on the Directory can be used to synchronize -// access between readers and writers. -static CL_NS(util)::CLHashMap DIRECTORIES(false, false); - -// # pragma mark -- FSDirectory::FSLock - -FSDirectory::FSLock::FSLock(const QString& _lockDir, const QString& name) - : lockDir(_lockDir) - , lockFile(_lockDir + QDir::separator() + name) -{ -} - -FSDirectory::FSLock::~FSLock() -{ -} - -bool FSDirectory::FSLock::obtain() -{ - if (disableLocks) - return true; - - if (QFile::exists(lockFile)) - return false; - - QDir dir(lockDir); - if (!dir.exists()) { - if (!dir.mkpath(lockDir)) { - // 34: len of "Couldn't create lock directory: " - char* err = _CL_NEWARRAY( - char, 34 + strlen(lockDir.toLocal8Bit().constData()) + 1); - strcpy(err, "Couldn't create lock directory: "); - strcat(err, lockDir.toLocal8Bit().constData()); - _CLTHROWA_DEL(CL_ERR_IO, err); - } - } - - QFile file(lockFile); - return file.open(QIODevice::ReadWrite); -} - -void FSDirectory::FSLock::release() -{ - if (disableLocks) - return; - - QFile file(lockFile); - file.remove(); -} - -bool FSDirectory::FSLock::isLocked() -{ - if (disableLocks) - return false; - return QFile::exists(lockFile); -} - -QString FSDirectory::FSLock::toString() const -{ - QString ret(QLatin1String("Lock@")); - return ret.append(lockFile); -} - -// # pragma mark -- FSDirectory::FSIndexInput - -FSDirectory::FSIndexInput::FSIndexInput(const QString& path, int32_t bufferSize) - : BufferedIndexInput(bufferSize) -{ - CND_PRECONDITION(!path.isEmpty(), "path is NULL"); - - handle = _CLNEW SharedHandle(); - handle->fhandle.setFileName(path); - handle->fhandle.open(QIODevice::ReadOnly); - - if (handle->fhandle.error() != QFile::NoError) { - switch(handle->fhandle.error()) { - case 1: - _CLTHROWA(CL_ERR_IO, "An error occurred when reading from the file"); - break; - case 2: - _CLTHROWA(CL_ERR_IO, "An error occurred when writing to the file."); - break; - case 5: - _CLTHROWA(CL_ERR_IO, "The file could not be opened."); - break; - case 6: - _CLTHROWA(CL_ERR_IO, "The operation was aborted."); - break; - case 7: - _CLTHROWA(CL_ERR_IO, "A timeout occurred."); - break; - case 8: - _CLTHROWA(CL_ERR_IO, "An unspecified error occurred."); - break; - case 9: - _CLTHROWA(CL_ERR_IO, "The file could not be removed."); - break; - case 10: - _CLTHROWA(CL_ERR_IO, "The file could not be renamed."); - break; - case 11: - _CLTHROWA(CL_ERR_IO, "The position in the file could not be changed."); - break; - case 12: - _CLTHROWA(CL_ERR_IO, "The file could not be resized.e"); - break; - case 13: - _CLTHROWA(CL_ERR_IO, "The file could not be accessed."); - break; - case 14: - _CLTHROWA(CL_ERR_IO, "The file could not be copied."); - break; - case 4: - default: - _CLTHROWA(CL_ERR_IO, "A fatal error occurred."); - } - } - - //Store the file length - handle->_length = handle->fhandle.size(); - handle->_fpos = 0; - this->_pos = 0; -} - -FSDirectory::FSIndexInput::FSIndexInput(const FSIndexInput& other) - : BufferedIndexInput(other) -{ - if (other.handle == NULL) - _CLTHROWA(CL_ERR_NullPointer, "other handle is null"); - - SCOPED_LOCK_MUTEX(*other.handle->THIS_LOCK) - - _pos = other.handle->_fpos; - handle = _CL_POINTER(other.handle); -} - -FSDirectory::FSIndexInput::~FSIndexInput() -{ - FSIndexInput::close(); -} - -void FSDirectory::FSIndexInput::close() -{ - BufferedIndexInput::close(); -#ifdef _LUCENE_THREADMUTEX - if (handle != NULL) { - // Here we have a bit of a problem... We need to lock the handle to - // ensure that we can safely delete the handle... But if we delete the - // handle, then the scoped unlock, won't be able to unlock the mutex... - - // take a reference of the lock object... - _LUCENE_THREADMUTEX* mutex = handle->THIS_LOCK; - //lock the mutex - mutex->lock(); - - // determine if we are about to delete the handle... - bool doUnlock = (handle->__cl_refcount > 1); - // decdelete (deletes if refcount is down to 0) - _CLDECDELETE(handle); - - if (doUnlock) - mutex->unlock(); - else - delete mutex; - } -#else - _CLDECDELETE(handle); -#endif -} - -IndexInput* FSDirectory::FSIndexInput::clone() const -{ - return _CLNEW FSDirectory::FSIndexInput(*this); -} - -void FSDirectory::FSIndexInput::seekInternal(const int64_t position) -{ - CND_PRECONDITION(position >= 0 && position < handle->_length, - "Seeking out of range") - _pos = position; -} - -void FSDirectory::FSIndexInput::readInternal(uint8_t* b, const int32_t len) -{ - SCOPED_LOCK_MUTEX(*handle->THIS_LOCK) - - CND_PRECONDITION(handle != NULL, "shared file handle has closed"); - CND_PRECONDITION(handle->fhandle.isOpen(), "file is not open"); - - if (handle->_fpos != _pos) { - handle->fhandle.seek(_pos); - if (handle->fhandle.pos() != _pos) - _CLTHROWA( CL_ERR_IO, "File IO Seek error"); - handle->_fpos = _pos; - } - - bufferLength = (int32_t)handle->fhandle.read((char*)b, len); - if (bufferLength == 0) - _CLTHROWA(CL_ERR_IO, "read past EOF"); - - if (bufferLength == -1) - _CLTHROWA(CL_ERR_IO, "read error"); - - _pos += bufferLength; - handle->_fpos =_pos; -} - -// # pragma mark -- FSDirectory::FSIndexInput::SharedHandle - -FSDirectory::FSIndexInput::SharedHandle::SharedHandle() - : _fpos(0) - , _length(0) -{ -#ifdef _LUCENE_THREADMUTEX - THIS_LOCK = new _LUCENE_THREADMUTEX; -#endif -} - -FSDirectory::FSIndexInput::SharedHandle::~SharedHandle() -{ - if (fhandle.isOpen()) - fhandle.close(); -} - -// # pragma mark -- FSDirectory::FSIndexOutput - -FSDirectory::FSIndexOutput::FSIndexOutput(const QString& path) -{ - //O_BINARY - Opens file in binary (untranslated) mode - //O_CREAT - Creates and opens new file for writing. Has no effect if file specified by filename exists - //O_RANDOM - Specifies that caching is optimized for, but not restricted to, random access from disk. - //O_WRONLY - Opens file for writing only; - fhandle.setFileName(path); - fhandle.open(QIODevice::ReadWrite | QIODevice::Truncate); - - if (fhandle.error() != QFile::NoError) { - switch(fhandle.error()) { - case 1: - _CLTHROWA(CL_ERR_IO, "An error occurred when reading from the file"); - break; - case 2: - _CLTHROWA(CL_ERR_IO, "An error occurred when writing to the file."); - break; - case 5: - _CLTHROWA(CL_ERR_IO, "The file could not be opened."); - break; - case 6: - _CLTHROWA(CL_ERR_IO, "The operation was aborted."); - break; - case 7: - _CLTHROWA(CL_ERR_IO, "A timeout occurred."); - break; - case 8: - _CLTHROWA(CL_ERR_IO, "An unspecified error occurred."); - break; - case 9: - _CLTHROWA(CL_ERR_IO, "The file could not be removed."); - break; - case 10: - _CLTHROWA(CL_ERR_IO, "The file could not be renamed."); - break; - case 11: - _CLTHROWA(CL_ERR_IO, "The position in the file could not be changed."); - break; - case 12: - _CLTHROWA(CL_ERR_IO, "The file could not be resized.e"); - break; - case 13: - _CLTHROWA(CL_ERR_IO, "The file could not be accessed."); - break; - case 14: - _CLTHROWA(CL_ERR_IO, "The file could not be copied."); - break; - case 4: - default: - _CLTHROWA(CL_ERR_IO, "A fatal error occurred."); - } - } -} - -FSDirectory::FSIndexOutput::~FSIndexOutput() -{ - if (fhandle.isOpen()) { - try { - FSIndexOutput::close(); - } catch (CLuceneError& err) { - //ignore IO errors... - if (err.number() != CL_ERR_IO) - throw; - } - } -} - -void FSDirectory::FSIndexOutput::close() -{ - try { - BufferedIndexOutput::close(); - } catch (CLuceneError& err) { - //ignore IO errors... - if (err.number() != CL_ERR_IO) - throw; - } - fhandle.close(); -} - -int64_t FSDirectory::FSIndexOutput::length() -{ - CND_PRECONDITION(fhandle.isOpen(), "file is not open"); - return fhandle.size(); -} - -void FSDirectory::FSIndexOutput::seek(const int64_t pos) -{ - CND_PRECONDITION(fhandle.isOpen(), "file is not open"); - - BufferedIndexOutput::seek(pos); - fhandle.seek(pos); - if (fhandle.pos() != pos) - _CLTHROWA(CL_ERR_IO, "File IO Seek error"); -} - -void FSDirectory::FSIndexOutput::flushBuffer(const uint8_t* b, const int32_t size) -{ - CND_PRECONDITION(fhandle.isOpen(), "file is not open"); - - if (size > 0 && fhandle.write((const char*)b, size) != size) - _CLTHROWA(CL_ERR_IO, "File IO Write error"); -} - -// # pragma mark -- FSDirectory - -FSDirectory::FSDirectory(const QString& path, const bool createDir) - : Directory() - , refCount(0) - , useMMap(false) -{ - //set a realpath so that if we change directory, we can still function - directory = QFileInfo(path).absoluteFilePath(); - lockDir = directory; - - QDir dir(lockDir); - if (!dir.exists()) { - if (!dir.mkpath(lockDir)) - _CLTHROWA(CL_ERR_IO, "Cannot create temp directory"); - } - - QFileInfo info(lockDir); - if (info.isFile() || info.isSymLink()) - _CLTHROWA(CL_ERR_IO, "Found regular file where directory expected"); - - if (createDir) - create(); - - dir.setPath(directory); - if (!dir.exists()) { - //19: len of " is not a directory" - char* err = - _CL_NEWARRAY(char, 19 + strlen(path.toLocal8Bit().constData()) + 1); - strcpy(err, path.toLocal8Bit().constData()); - strcat(err, " is not a directory"); - _CLTHROWA_DEL(CL_ERR_IO, err); - } -} - -void FSDirectory::create() -{ - SCOPED_LOCK_MUTEX(THIS_LOCK) - - bool clear = false; - QDir dir(directory); - if (!dir.exists()) { - if (!dir.mkpath(directory)) { - char* err = _CL_NEWARRAY( // 27 len of "Couldn't create directory:" - char, 27 + strlen(directory.toLocal8Bit().constData()) + 1); - strcpy(err, "Couldn't create directory: "); - strcat(err, directory.toLocal8Bit().constData()); - _CLTHROWA_DEL(CL_ERR_IO, err); - } - } else { - clear = true; - } - - QFileInfo info(directory); - if (info.isFile() || info.isSymLink()) { - char tmp[1024]; - _snprintf(tmp, 1024, "%s not a directory", - directory.toLocal8Bit().constData()); - _CLTHROWA(CL_ERR_IO, tmp); - } - - if (clear) { - dir.setPath(directory); - // clear probably existing lucene index files - QStringList fileList = dir.entryList(QDir::Files | QDir::Hidden - | QDir::NoSymLinks); - foreach(const QString file, fileList) { - if (CL_NS(index)::IndexReader::isLuceneFile(file)) { - if (!dir.remove(file)) - _CLTHROWA(CL_ERR_IO, "Couldn't delete file "); - } - } - - // clear probably existing file locks - QFileInfo dirInfo(lockDir); - if (dirInfo.exists() && dirInfo.isReadable() && dirInfo.isWritable() - && !dirInfo.isFile() && !dirInfo.isSymLink()) { - QDir lockDirectory(lockDir); - fileList = dir.entryList(QStringList() << getLockPrefix() - + QLatin1Char('*'), QDir::Files | QDir::Hidden | QDir::NoSymLinks); - - foreach(const QString file, fileList) { - if (!lockDirectory.remove(file)) - _CLTHROWA(CL_ERR_IO, "Couldn't delete file "); - } - } - else { - //todo: richer error: + lockDir.getAbsolutePath()); - _CLTHROWA(CL_ERR_IO, "Cannot read lock directory"); - } - } -} - -void FSDirectory::priv_getFN(QString& buffer, const QString& name) const -{ - buffer.clear(); - buffer.append(directory); - buffer.append(QDir::separator()); - buffer.append(name); -} - -FSDirectory::~FSDirectory() -{ -} - -QStringList FSDirectory::list() const -{ - CND_PRECONDITION(!directory.isEmpty(), "directory is not open"); - - QDir dir(directory); - return dir.entryList(QDir::Files | QDir::Hidden); -} - -bool FSDirectory::fileExists(const QString& name) const -{ - CND_PRECONDITION(!directory.isEmpty(), "directory is not open"); - - QDir dir(directory); - return dir.entryList().contains(name); -} - -QString FSDirectory::getDirName() const -{ - return directory; -} - -//static -FSDirectory* FSDirectory::getDirectory(const QString& file, const bool _create) -{ - FSDirectory* dir = NULL; - { - if (file.isEmpty()) - _CLTHROWA(CL_ERR_IO, "Invalid directory"); - - SCOPED_LOCK_MUTEX(DIRECTORIES.THIS_LOCK) - dir = DIRECTORIES.get(file); - if ( dir == NULL ){ - dir = _CLNEW FSDirectory(file, _create); - DIRECTORIES.put(dir->directory, dir); - } else if (_create) { - dir->create(); - } - - { - SCOPED_LOCK_MUTEX(dir->THIS_LOCK) - dir->refCount++; - } - } - - return _CL_POINTER(dir); -} - -int64_t FSDirectory::fileModified(const QString& name) const -{ - CND_PRECONDITION(!directory.isEmpty(), "directory is not open"); - - QFileInfo fInfo(directory + QDir::separator() + name); - return fInfo.lastModified().toTime_t(); -} - -//static -int64_t FSDirectory::fileModified(const QString& dir, const QString& name) -{ - QFileInfo fInfo(dir + QDir::separator() + name); - return fInfo.lastModified().toTime_t(); -} - -void FSDirectory::touchFile(const QString& name) -{ - CND_PRECONDITION(!directory.isEmpty(), "directory is not open"); - - QFile file(directory + QDir::separator() + name); - if (!file.open(QIODevice::ReadWrite)) - _CLTHROWA(CL_ERR_IO, "IO Error while touching file"); -} - -int64_t FSDirectory::fileLength(const QString& name) const -{ - CND_PRECONDITION(!directory.isEmpty(), "directory is not open"); - - QFileInfo fInfo(directory + QDir::separator() + name); - return fInfo.size(); -} - -IndexInput* FSDirectory::openInput(const QString& name) -{ - return openInput(name, CL_NS(store)::BufferedIndexOutput::BUFFER_SIZE); -} - -IndexInput* FSDirectory::openInput(const QString& name, int32_t bufferSize ) -{ - CND_PRECONDITION(directory[0]!=0,"directory is not open") - - return _CLNEW FSIndexInput(directory + QDir::separator() + name, bufferSize); -} - -void FSDirectory::close() -{ - SCOPED_LOCK_MUTEX(DIRECTORIES.THIS_LOCK) - { - SCOPED_LOCK_MUTEX(THIS_LOCK) - - CND_PRECONDITION(!directory.isEmpty(), "directory is not open"); - - //refcount starts at 1 - if (--refCount <= 0) { - Directory* dir = DIRECTORIES.get(getDirName()); - if (dir) { - //this will be removed in ~FSDirectory - DIRECTORIES.remove(getDirName()); - _CLDECDELETE(dir); - } - } - } -} - -QString FSDirectory::getLockPrefix() const -{ - CND_PRECONDITION(!directory.isEmpty(), "directory is not open"); - - QString dirName(QFileInfo(directory).absoluteFilePath()); - if (dirName.isEmpty()) - _CLTHROWA(CL_ERR_Runtime, "Invalid directory path"); - - // to be compatible with jlucene, - // we need to make some changes ... - if (dirName.at(1) == QLatin1Char(':')) - dirName[0] = dirName.at(0).toUpper(); - - TCHAR tBuffer[2048] = { 0 }; - dirName.toWCharArray(tBuffer); - - char aBuffer[4096] = { 0 }; - STRCPY_TtoA(aBuffer, tBuffer, 4096); - - QString string(QLatin1String("lucene-")); - QByteArray hash(QCryptographicHash::hash(aBuffer, QCryptographicHash::Md5)); - - // TODO: verify this !!! - return string.append(QLatin1String(hash.toHex().constData())); -} - -bool FSDirectory::doDeleteFile(const QString& name) -{ - CND_PRECONDITION(!directory.isEmpty(), "directory is not open"); - - QDir dir(directory); - return dir.remove(name); -} - -void FSDirectory::renameFile(const QString& from, const QString& to) -{ - CND_PRECONDITION(!directory.isEmpty(), "directory is not open"); - SCOPED_LOCK_MUTEX(THIS_LOCK) - - if (fileExists(to)) - deleteFile(to, false); - - QFile file(directory + QDir::separator() + from); - QString newFile(directory + QDir::separator() + to); - if (!file.rename(newFile)) { - // try a second time if we fail - if (fileExists(to)) - deleteFile(to, false); - - if (!file.rename(newFile)) { - QString error(QLatin1String("Could not rename: %1 to %2!!!!")); - error.arg(from).arg(newFile); - QByteArray bArray(error.toLocal8Bit()); - _CLTHROWA(CL_ERR_IO, bArray.constData()); - } - } -} - -IndexOutput* FSDirectory::createOutput(const QString& name) -{ - CND_PRECONDITION(!directory.isEmpty(), "directory is not open"); - - QString file = directory + QDir::separator() + name; - if (QFileInfo(file).exists()) { - if (!QFile::remove(file)) { - QByteArray bArray("Cannot overwrite: "); - bArray.append(name.toLocal8Bit()); - _CLTHROWA(CL_ERR_IO, bArray.constData()); - } - } - return _CLNEW FSIndexOutput(file); -} - -LuceneLock* FSDirectory::makeLock(const QString& name) -{ - CND_PRECONDITION(!directory.isEmpty(), "directory is not open"); - - - QString lockFile(getLockPrefix()); - lockFile.append(QLatin1Char('-')).append(name); - - return _CLNEW FSLock(lockDir, lockFile); -} - -QString FSDirectory::toString() const -{ - return QString::fromLatin1("FSDirectory@").append(directory); -} - -CL_NS_END diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/store/FSDirectory.h qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/store/FSDirectory.h --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/store/FSDirectory.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/store/FSDirectory.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,216 +0,0 @@ -/* - * Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team - * - * Distributable under the terms of either the Apache License (Version 2.0) or - * the GNU Lesser General Public License, as specified in the COPYING file. - * - * Changes are Copyright (C) 2015 The Qt Company Ltd. -*/ -#ifndef _lucene_store_FSDirectory_ -#define _lucene_store_FSDirectory_ - -#if defined(_LUCENE_PRAGMA_ONCE) -# pragma once -#endif - -#include -#include -#include - -#include "Directory.h" -#include "Lock.h" -#include "CLucene/util/VoidMap.h" -#include "CLucene/util/StringBuffer.h" - -CL_NS_DEF(store) - -/** -* Straightforward implementation of {@link Directory} as a directory of files. -*

If the system property 'disableLuceneLocks' has the String value of -* "true", lock creation will be disabled. -* -* @see Directory -*/ -class FSDirectory : public Directory -{ -public: - // Destructor - only call this if you are sure the directory - // is not being used anymore. Otherwise use the ref-counting - // facilities of _CLDECDELETE - ~FSDirectory(); - - // Get a list of strings, one for each file in the directory. - QStringList list() const; - - // Returns true iff a file with the given name exists. - bool fileExists(const QString& name) const; - - // Returns the text name of the directory - QString getDirName() const; ///Directories are cached, so that, for a given canonical path, the same - FSDirectory instance will always be returned. This permits - synchronization on directories. - - @param file the path to the directory. - @param create if true, create, or erase any existing contents. - @return the FSDirectory for the named file. - */ - static FSDirectory* getDirectory(const QString& file, const bool create); - - // Returns the time the named file was last modified. - int64_t fileModified(const QString& name) const; - - //static - // Returns the time the named file was last modified. - static int64_t fileModified(const QString& dir, const QString& name); - - // static - // Returns the length in bytes of a file in the directory. - int64_t fileLength(const QString& name) const; - - // Returns a stream reading an existing file. - IndexInput* openInput(const QString& name); - IndexInput* openInput(const QString& name, int32_t bufferSize); - - // Renames an existing file in the directory. - void renameFile(const QString& from, const QString& to); - - // Set the modified time of an existing file to now. - void touchFile(const QString& name); - - // Creates a new, empty file in the directory with the given name. - // Returns a stream writing this file. - IndexOutput* createOutput(const QString& name); - - // Construct a {@link Lock}. - // @param name the name of the lock file - LuceneLock* makeLock(const QString& name); - - // Decrease the ref-count to the directory by one. If the object is no - // longer needed, then the object is removed from the directory pool. - void close(); - - // If MMap is available, this can disable use of mmap reading. - void setUseMMap(bool value) { useMMap = value; } - - // Gets whether the directory is using MMap for inputstreams. - bool getUseMMap() const { return useMMap; } - - QString toString() const; - - static QString DirectoryType() { return QLatin1String("FS"); } - QString getDirectoryType() const { return QLatin1String("FS"); } - - // Set whether Lucene's use of lock files is disabled. By default, - // lock files are enabled. They should only be disabled if the index - // is on a read-only medium like a CD-ROM. - static void setDisableLocks(bool doDisableLocks) - { disableLocks = doDisableLocks; } - - // Returns whether Lucene's use of lock files is disabled. - // @return true if locks are disabled, false if locks are enabled. - static bool getDisableLocks() { return disableLocks; } - -protected: - FSDirectory(const QString& path, const bool createDir); - // Removes an existing file in the directory. - bool doDeleteFile(const QString& name); - -private: - class FSLock : public LuceneLock { - public: - FSLock (const QString& lockDir, const QString& name); - ~FSLock(); - - bool obtain(); - void release(); - bool isLocked(); - QString toString() const; - - QString lockDir; - QString lockFile; - }; - friend class FSDirectory::FSLock; - - class FSIndexInput : public BufferedIndexInput { - public: - FSIndexInput(const QString& path, int32_t bufferSize = - CL_NS(store)::BufferedIndexOutput::BUFFER_SIZE); - ~FSIndexInput(); - - void close(); - IndexInput* clone() const; - - int64_t length() - { return handle->_length; } - - QString getDirectoryType() const - { return FSDirectory::DirectoryType(); } - - protected: - FSIndexInput(const FSIndexInput& clone); - // Random-access methods - void seekInternal(const int64_t position); - // IndexInput methods - void readInternal(uint8_t* b, const int32_t len); - - private: - // We used a shared handle between all the fsindexinput clones. - // This reduces number of file handles we need, and it means - // we dont have to use file tell (which is slow) before doing a read. - class SharedHandle : LUCENE_REFBASE { - public: - SharedHandle(); - ~SharedHandle(); - - int64_t _fpos; - int64_t _length; - - QFile fhandle; - DEFINE_MUTEX(*THIS_LOCK) - }; - SharedHandle* handle; - int64_t _pos; - }; - friend class FSDirectory::FSIndexInput; - - class FSIndexOutput : public BufferedIndexOutput { - public: - FSIndexOutput(const QString& path); - ~FSIndexOutput(); - - void close(); - int64_t length(); - void seek(const int64_t pos); - - protected: - void flushBuffer(const uint8_t* b, const int32_t size); - - private: - QFile fhandle; - }; - friend class FSDirectory::FSIndexOutput; - -private: - QString directory; - int refCount; - void create(); - - QString lockDir; - QString getLockPrefix() const; - static bool disableLocks; - - void priv_getFN(QString& buffer, const QString& name) const; - bool useMMap; -}; - -CL_NS_END - -#endif diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/store/IndexInput.cpp qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/store/IndexInput.cpp --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/store/IndexInput.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/store/IndexInput.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,233 +0,0 @@ - /*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#include "CLucene/StdHeader.h" -#include "IndexInput.h" - -CL_NS_USE(util) -CL_NS_DEF(store) - - IndexInput::IndexInput() - { - } - IndexInput::IndexInput(const IndexInput& other) - { - } - - int32_t IndexInput::readInt() { - int32_t b = (readByte() << 24); - b |= (readByte() << 16); - b |= (readByte() << 8); - return (b | readByte()); - } - - int32_t IndexInput::readVInt() { - uint8_t b = readByte(); - int32_t i = b & 0x7F; - for (int32_t shift = 7; (b & 0x80) != 0; shift += 7) { - b = readByte(); - i |= (b & 0x7F) << shift; - } - return i; - } - - int64_t IndexInput::readLong() { - int64_t i = ((int64_t)readInt() << 32); - return (i | ((int64_t)readInt() & 0xFFFFFFFFL)); - } - - int64_t IndexInput::readVLong() { - uint8_t b = readByte(); - int64_t i = b & 0x7F; - for (int32_t shift = 7; (b & 0x80) != 0; shift += 7) { - b = readByte(); - i |= (((int64_t)b) & 0x7FL) << shift; - } - return i; - } - - void IndexInput::skipChars( const int32_t count) { - for (int32_t i = 0; i < count; i++) { - TCHAR b = readByte(); - if ((b & 0x80) == 0) { - // Do Nothing. - } else if ((b & 0xE0) != 0xE0) { - readByte(); - } else { - readByte(); - readByte(); - } - } - } - - int32_t IndexInput::readString(TCHAR* buffer, const int32_t maxLength){ - int32_t len = readVInt(); - int32_t ml=maxLength-1; - if ( len >= ml ){ - readChars(buffer, 0, ml); - buffer[ml] = 0; - //we have to finish reading all the data for this string! - if ( len-ml > 0 ){ - //seek(getFilePointer()+(len-ml)); <- that was the wrong way to "finish reading" - skipChars(len-ml); - } - return ml; - }else{ - readChars(buffer, 0, len); - buffer[len] = 0; - return len; - } - } - - TCHAR* IndexInput::readString(const bool _unique){ - int32_t len = readVInt(); - - if ( len == 0){ - if ( _unique ) //todo: does non unique ever occur? - return stringDuplicate(LUCENE_BLANK_STRING); - else - return LUCENE_BLANK_STRING; - } - - TCHAR* ret = _CL_NEWARRAY(TCHAR,len+1); - readChars(ret, 0, len); - ret[len] = 0; - - return ret; - } - - void IndexInput::readChars( TCHAR* buffer, const int32_t start, const int32_t len) { - const int32_t end = start + len; - TCHAR b; - for (int32_t i = start; i < end; ++i) { - b = readByte(); - if ((b & 0x80) == 0) { - b = (b & 0x7F); - } else if ((b & 0xE0) != 0xE0) { - b = (((b & 0x1F) << 6) - | (readByte() & 0x3F)); - } else { - b = ((b & 0x0F) << 12) | ((readByte() & 0x3F) << 6); - b |= (readByte() & 0x3F); - } - buffer[i] = b; - } - } - - - - - - -BufferedIndexInput::BufferedIndexInput(int32_t _bufferSize): - buffer(NULL), - bufferSize(_bufferSize), - bufferStart(0), - bufferLength(0), - bufferPosition(0) - { - } - - BufferedIndexInput::BufferedIndexInput(const BufferedIndexInput& other): - IndexInput(other), - buffer(NULL), - bufferSize(other.bufferSize), - bufferStart(other.bufferStart), - bufferLength(other.bufferLength), - bufferPosition(other.bufferPosition) - { - /* DSR: Does the fact that sometime clone.buffer is not NULL even when - ** clone.bufferLength is zero indicate memory corruption/leakage? - ** if ( clone.buffer != NULL) { */ - if (other.bufferLength != 0 && other.buffer != NULL) { - buffer = _CL_NEWARRAY(uint8_t,bufferLength); - memcpy(buffer,other.buffer,bufferLength * sizeof(uint8_t)); - } - } - - void BufferedIndexInput::readBytes(uint8_t* b, const int32_t len){ - if (len < bufferSize) { - for (int32_t i = 0; i < len; ++i) // read byte-by-byte - b[i] = readByte(); - } else { // read all-at-once - int64_t start = getFilePointer(); - seekInternal(start); - readInternal(b, len); - - bufferStart = start + len; // adjust stream variables - bufferPosition = 0; - bufferLength = 0; // trigger refill() on read - } - } - - int64_t BufferedIndexInput::getFilePointer() const{ - return bufferStart + bufferPosition; - } - - void BufferedIndexInput::seek(const int64_t pos) { - if ( pos < 0 ) - _CLTHROWA(CL_ERR_IO, "IO Argument Error. Value must be a positive value."); - if (pos >= bufferStart && pos < (bufferStart + bufferLength)) - bufferPosition = (int32_t)(pos - bufferStart); // seek within buffer - else { - bufferStart = pos; - bufferPosition = 0; - bufferLength = 0; // trigger refill() on read() - seekInternal(pos); - } - } - void BufferedIndexInput::close(){ - _CLDELETE_ARRAY(buffer); - bufferLength = 0; - bufferPosition = 0; - bufferStart = 0; - } - - - BufferedIndexInput::~BufferedIndexInput(){ - BufferedIndexInput::close(); - } - - void BufferedIndexInput::refill() { - int64_t start = bufferStart + bufferPosition; - int64_t end = start + bufferSize; - if (end > length()) // don't read past EOF - end = length(); - bufferLength = (int32_t)(end - start); - if (bufferLength == 0) - _CLTHROWA(CL_ERR_IO, "IndexInput read past EOF"); - - if (buffer == NULL){ - buffer = _CL_NEWARRAY(uint8_t,bufferSize); // allocate buffer lazily - } - readInternal(buffer, bufferLength); - - - bufferStart = start; - bufferPosition = 0; - } - - -IndexInputStream::IndexInputStream(IndexInput* input){ - this->input = input; - this->size = input->length(); - this->position = input->getFilePointer(); -} -IndexInputStream::~IndexInputStream(){ -} -int32_t IndexInputStream::fillBuffer(char* start, int32_t space){ - int64_t avail = input->length()-input->getFilePointer(); - if ( avail == 0 ) - return -1; - else if ( availreadBytes((uint8_t*)start,space); - return space; -} - -CL_NS_END - diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/store/IndexInput.h qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/store/IndexInput.h --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/store/IndexInput.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/store/IndexInput.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,190 +0,0 @@ -/* - * Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team - * - * Distributable under the terms of either the Apache License (Version 2.0) or - * the GNU Lesser General Public License, as specified in the COPYING file. - * - * Changes are Copyright (C) 2015 The Qt Company Ltd. -*/ -#ifndef _lucene_store_IndexInput_ -#define _lucene_store_IndexInput_ - -#if defined(_LUCENE_PRAGMA_ONCE) -# pragma once -#endif - -#include - -#include "CLucene/util/bufferedstream.h" -#include "IndexOutput.h" - -CL_NS_DEF(store) - - /** Abstract base class for input from a file in a {@link Directory}. A - * random-access input stream. Used for all Lucene index input operations. - * @see Directory - * @see IndexOutput - */ - class IndexInput: LUCENE_BASE { - private: - void skipChars( const int32_t count); - protected: - IndexInput(); - IndexInput(const IndexInput& clone); - public: - virtual ~IndexInput(){} - virtual IndexInput* clone() const =0; - - DEFINE_MUTEX(THIS_LOCK) - - /** Reads and returns a single byte. - * @see IndexOutput#writeByte(byte) - */ - virtual uint8_t readByte() =0; - - /** Reads a specified number of bytes into an array at the specified offset. - * @param b the array to read bytes into - * @param offset the offset in the array to start storing bytes - * @param len the number of bytes to read - * @see IndexOutput#writeBytes(byte[],int32_t) - */ - virtual void readBytes(uint8_t* b, const int32_t len) =0; - - /** Reads four bytes and returns an int. - * @see IndexOutput#writeInt(int32_t) - */ - int32_t readInt(); - - /** Reads an int stored in variable-length format. Reads between one and - * five bytes. Smaller values take fewer bytes. Negative numbers are not - * supported. - * @see IndexOutput#writeVInt(int32_t) - */ - virtual int32_t readVInt(); - - /** Reads eight bytes and returns a long. - * @see IndexOutput#writeLong(long) - */ - int64_t readLong(); - - /** Reads a long stored in variable-length format. Reads between one and - * nine bytes. Smaller values take fewer bytes. Negative numbers are not - * supported. */ - int64_t readVLong(); - - /** Reads a string. - * @see IndexOutput#writeString(String) - * maxLength is the amount read into the buffer, the whole string is still read from the stream - * returns the amount read - */ - int32_t readString(TCHAR* buffer, const int32_t maxlength); - - /** Reads a string. - * @see IndexOutput#writeString(String) - * If unique is true (default) the string will be duplicated. - * If false and the length is zero, LUCENE_BLANK_STRING is returned - */ - TCHAR* readString(const bool unique=true); - - - /** Reads UTF-8 encoded characters into an array. - * @param buffer the array to read characters into - * @param start the offset in the array to start storing characters - * @param length the number of characters to read - * @see IndexOutput#writeChars(String,int32_t,int32_t) - */ - void readChars( TCHAR* buffer, const int32_t start, const int32_t len); - - /** Closes the stream to futher operations. */ - virtual void close() =0; - - /** Returns the current position in this file, where the next read will - * occur. - * @see #seek(long) - */ - virtual int64_t getFilePointer() const =0; - - /** Sets current position in this file, where the next read will occur. - * @see #getFilePointer() - */ - virtual void seek(const int64_t pos) =0; - - /** The number of bytes in the file. */ - virtual int64_t length() = 0; - - virtual QString getDirectoryType() const = 0; - }; - - /** Abstract base class for input from a file in a {@link Directory}. A - * random-access input stream. Used for all Lucene index input operations. - * @see Directory - * @see IndexOutput - */ - class BufferedIndexInput: public IndexInput{ - private: - uint8_t* buffer; //array of bytes - void refill(); - protected: - int32_t bufferSize; //size of the buffer - int64_t bufferStart; // position in file of buffer - int32_t bufferLength; // end of valid l_byte_ts - int32_t bufferPosition; // next uint8_t to read - - /** Returns a clone of this stream. - * - *

Clones of a stream access the same data, and are positioned at the same - * point as the stream they were cloned from. - * - *

Expert: Subclasses must ensure that clones may be positioned at - * different points in the input from each other and from the stream they - * were cloned from. - */ - BufferedIndexInput(const BufferedIndexInput& clone); - BufferedIndexInput(int32_t bufferSize = CL_NS(store)::BufferedIndexOutput::BUFFER_SIZE); - public: - - virtual ~BufferedIndexInput(); - virtual IndexInput* clone() const = 0; - void close(); - inline uint8_t readByte(){ - if (bufferPosition >= bufferLength) - refill(); - - return buffer[bufferPosition++]; - } - void readBytes(uint8_t* b, const int32_t len); - int64_t getFilePointer() const; - void seek(const int64_t pos); - - protected: - /** Expert: implements buffer refill. Reads bytes from the current position - * in the input. - * @param b the array to read bytes into - * @param offset the offset in the array to start storing bytes - * @param length the number of bytes to read - */ - virtual void readInternal(uint8_t* b, const int32_t len) = 0; - - /** Expert: implements seek. Sets current position in this file, where the - * next {@link #readInternal(byte[],int32_t,int32_t)} will occur. - * @see #readInternal(byte[],int32_t,int32_t) - */ - virtual void seekInternal(const int64_t pos) = 0; - }; - - /** - * JStream InputStream which reads from an IndexInput. This class is - * used by the FieldReader to create binary fields. You can then use - * a GZipInputStream to read compressed data or any of the other - * JStream stream types. - * - */ - class IndexInputStream: public jstreams::BufferedInputStream{ - IndexInput* input; - public: - IndexInputStream(IndexInput* input); - ~IndexInputStream(); - int32_t fillBuffer(char* start, int32_t space); - }; -CL_NS_END -#endif diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/store/IndexOutput.cpp qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/store/IndexOutput.cpp --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/store/IndexOutput.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/store/IndexOutput.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,163 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#include "CLucene/StdHeader.h" -#include "IndexOutput.h" - -CL_NS_USE(util) -CL_NS_DEF(store) - - - IndexOutput::IndexOutput() - { - } - - IndexOutput::~IndexOutput(){ - } - - BufferedIndexOutput::BufferedIndexOutput() - { - buffer = _CL_NEWARRAY(uint8_t, BUFFER_SIZE ); - bufferStart = 0; - bufferPosition = 0; - } - - BufferedIndexOutput::~BufferedIndexOutput(){ - if ( buffer != NULL ) - close(); - } - - void BufferedIndexOutput::close(){ - flush(); - _CLDELETE_ARRAY( buffer ); - - bufferStart = 0; - bufferPosition = 0; - } - - void BufferedIndexOutput::writeByte(const uint8_t b) { - CND_PRECONDITION(buffer!=NULL,"IndexOutput is closed") - if (bufferPosition >= BUFFER_SIZE) - flush(); - buffer[bufferPosition++] = b; - } - - void BufferedIndexOutput::writeBytes(const uint8_t* b, const int32_t length) { - if ( length < 0 ) - _CLTHROWA(CL_ERR_IllegalArgument, "IO Argument Error. Value must be a positive value."); - int32_t bytesLeft = BUFFER_SIZE - bufferPosition; - // is there enough space in the buffer? - if (bytesLeft >= length) { - // we add the data to the end of the buffer - memcpy(buffer + bufferPosition, b, length); - bufferPosition += length; - // if the buffer is full, flush it - if (BUFFER_SIZE - bufferPosition == 0) - flush(); - } else { - // is data larger then buffer? - if (length > BUFFER_SIZE) { - // we flush the buffer - if (bufferPosition > 0) - flush(); - // and write data at once - flushBuffer(b, length); - bufferStart += length; - } else { - // we fill/flush the buffer (until the input is written) - int64_t pos = 0; // position in the input data - int32_t pieceLength; - while (pos < length) { - if ( length - pos < bytesLeft ) - pieceLength = length - pos; - else - pieceLength = bytesLeft; - memcpy(buffer + bufferPosition, b + pos, pieceLength); - pos += pieceLength; - bufferPosition += pieceLength; - // if the buffer is full, flush it - bytesLeft = BUFFER_SIZE - bufferPosition; - if (bytesLeft == 0) { - flush(); - bytesLeft = BUFFER_SIZE; - } - } - } - } - } - - void IndexOutput::writeInt(const int32_t i) { - writeByte((uint8_t)(i >> 24)); - writeByte((uint8_t)(i >> 16)); - writeByte((uint8_t)(i >> 8)); - writeByte((uint8_t) i); - } - - void IndexOutput::writeVInt(const int32_t vi) { - uint32_t i = vi; - while ((i & ~0x7F) != 0) { - writeByte((uint8_t)((i & 0x7f) | 0x80)); - i >>= 7; //doing unsigned shift - } - writeByte( (uint8_t)i ); - } - - void IndexOutput::writeLong(const int64_t i) { - writeInt((int32_t) (i >> 32)); - writeInt((int32_t) i); - } - - void IndexOutput::writeVLong(const int64_t vi) { - uint64_t i = vi; - while ((i & ~0x7F) != 0) { - writeByte((uint8_t)((i & 0x7f) | 0x80)); - i >>= 7; //doing unsigned shift - } - writeByte((uint8_t)i); - } - - void IndexOutput::writeString(const TCHAR* s, const int32_t length ) { - writeVInt(length); - writeChars(s, 0, length); - } - - void IndexOutput::writeChars(const TCHAR* s, const int32_t start, const int32_t length){ - if ( length < 0 || start < 0 ) - _CLTHROWA(CL_ERR_IllegalArgument, "IO Argument Error. Value must be a positive value."); - - const int32_t end = start + length; - for (int32_t i = start; i < end; ++i) { - const int32_t code = (int32_t)s[i]; - if (code >= 0x01 && code <= 0x7F) - writeByte((uint8_t)code); - else if (((code >= 0x80) && (code <= 0x7FF)) || code == 0) { - writeByte((uint8_t)(0xC0 | (code >> 6))); - writeByte((uint8_t)(0x80 | (code & 0x3F))); - } else { - writeByte((uint8_t)(0xE0 | (((uint32_t)code) >> 12))); //unsigned shift - writeByte((uint8_t)(0x80 | ((code >> 6) & 0x3F))); - writeByte((uint8_t)(0x80 | (code & 0x3F))); - } - } - } - - - int64_t BufferedIndexOutput::getFilePointer() const{ - return bufferStart + bufferPosition; - } - - void BufferedIndexOutput::seek(const int64_t pos) { - flush(); - bufferStart = pos; - } - - void BufferedIndexOutput::flush() { - flushBuffer(buffer, bufferPosition); - bufferStart += bufferPosition; - bufferPosition = 0; - } - -CL_NS_END diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/store/IndexOutput.h qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/store/IndexOutput.h --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/store/IndexOutput.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/store/IndexOutput.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,152 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#ifndef _lucene_store_IndexOutput_ -#define _lucene_store_IndexOutput_ -#if defined(_LUCENE_PRAGMA_ONCE) -# pragma once -#endif - -CL_NS_DEF(store) - - -/** Abstract class for output to a file in a Directory. A random-access output -* stream. Used for all Lucene index output operations. -* @see Directory -* @see IndexInput -*/ -class IndexOutput:LUCENE_BASE{ - bool isclosed; -public: - IndexOutput(); - virtual ~IndexOutput(); - - /** Writes a single byte. - * @see IndexInput#readByte() - */ - virtual void writeByte(const uint8_t b) = 0; - - /** Writes an array of bytes. - * @param b the bytes to write - * @param length the number of bytes to write - * @see IndexInput#readBytes(byte[],int32_t,int32_t) - */ - virtual void writeBytes(const uint8_t* b, const int32_t length) = 0; - - /** Writes an int as four bytes. - * @see IndexInput#readInt() - */ - void writeInt(const int32_t i); - - /** Writes an int in a variable-length format. Writes between one and - * five bytes. Smaller values take fewer bytes. Negative numbers are not - * supported. - * @see IndexInput#readVInt() - */ - void writeVInt(const int32_t vi); - - /** Writes a long as eight bytes. - * @see IndexInput#readLong() - */ - void writeLong(const int64_t i); - - /** Writes an long in a variable-length format. Writes between one and five - * bytes. Smaller values take fewer bytes. Negative numbers are not - * supported. - * @see IndexInput#readVLong() - */ - void writeVLong(const int64_t vi); - - /** Writes a string. - * @see IndexInput#readString() - */ - void writeString(const TCHAR* s, const int32_t length); - - /** Writes a sequence of UTF-8 encoded characters from a string. - * @param s the source of the characters - * @param start the first character in the sequence - * @param length the number of characters in the sequence - * @see IndexInput#readChars(char[],int32_t,int32_t) - */ - void writeChars(const TCHAR* s, const int32_t start, const int32_t length); - - /** Closes this stream to further operations. */ - virtual void close() = 0; - - /** Returns the current position in this file, where the next write will - * occur. - * @see #seek(long) - */ - virtual int64_t getFilePointer() const = 0; - - /** Sets current position in this file, where the next write will occur. - * @see #getFilePointer() - */ - virtual void seek(const int64_t pos) = 0; - - /** The number of bytes in the file. */ - virtual int64_t length() = 0; - - /** Forces any buffered output to be written. */ - virtual void flush() = 0; -}; - -/** Base implementation class for buffered {@link IndexOutput}. */ -class BufferedIndexOutput : public IndexOutput{ -public: - LUCENE_STATIC_CONSTANT(int32_t, BUFFER_SIZE=LUCENE_STREAM_BUFFER_SIZE); -private: - uint8_t* buffer; - int64_t bufferStart; // position in file of buffer - int32_t bufferPosition; // position in buffer - -public: - BufferedIndexOutput(); - virtual ~BufferedIndexOutput(); - - /** Writes a single byte. - * @see IndexInput#readByte() - */ - virtual void writeByte(const uint8_t b); - - /** Writes an array of bytes. - * @param b the bytes to write - * @param length the number of bytes to write - * @see IndexInput#readBytes(byte[],int32_t,int32_t) - */ - virtual void writeBytes(const uint8_t* b, const int32_t length); - - /** Closes this stream to further operations. */ - virtual void close(); - - /** Returns the current position in this file, where the next write will - * occur. - * @see #seek(long) - */ - int64_t getFilePointer() const; - - /** Sets current position in this file, where the next write will occur. - * @see #getFilePointer() - */ - virtual void seek(const int64_t pos); - - /** The number of bytes in the file. */ - virtual int64_t length() = 0; - - /** Forces any buffered output to be written. */ - void flush(); - -protected: - /** Expert: implements buffer write. Writes bytes at the current position in - * the output. - * @param b the bytes to write - * @param len the number of bytes to write - */ - virtual void flushBuffer(const uint8_t* b, const int32_t len) = 0; -}; - -CL_NS_END -#endif diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/store/InputStream.h qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/store/InputStream.h --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/store/InputStream.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/store/InputStream.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,21 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#ifndef _lucene_store_InputStream_ -#define _lucene_store_InputStream_ - -#if defined(_LUCENE_PRAGMA_ONCE) -# pragma once -#endif - -CL_NS_DEF(store) - -deprecated... please use IndexInput.h header -and change InputStream to IndexInput - - -CL_NS_END -#endif diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/store/Lock.cpp qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/store/Lock.cpp --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/store/Lock.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/store/Lock.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,27 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#include "CLucene/StdHeader.h" -#include "Lock.h" - -CL_NS_DEF(store) - - bool LuceneLock::obtain(int64_t lockWaitTimeout) { - bool locked = obtain(); - int maxSleepCount = (int)(lockWaitTimeout / LOCK_POLL_INTERVAL); - int sleepCount = 0; - while (!locked) { - if (sleepCount++ == maxSleepCount) { - _CLTHROWA(CL_ERR_IO,"Lock obtain timed out"); - } - _LUCENE_SLEEP(LOCK_POLL_INTERVAL); - locked = obtain(); - } - return locked; - } - - -CL_NS_END diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/store/Lock.h qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/store/Lock.h --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/store/Lock.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/store/Lock.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,106 +0,0 @@ -/* - * Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team - * - * Distributable under the terms of either the Apache License (Version 2.0) or - * the GNU Lesser General Public License, as specified in the COPYING file. - * - * Changes are Copyright (C) 2015 The Qt Company Ltd. -*/ -#ifndef _lucene_store_Lock_ -#define _lucene_store_Lock_ - -#if defined(_LUCENE_PRAGMA_ONCE) -# pragma once -#endif - -CL_NS_DEF(store) - -class LuceneLock : LUCENE_BASE -{ -public: - LUCENE_STATIC_CONSTANT(int64_t, LOCK_POLL_INTERVAL = 1000); - - virtual ~LuceneLock() {} - - // Attempts to obtain exclusive access and immediately return upon success - // or failure. Return true if exclusive access is obtained. - virtual bool obtain() = 0; - - // Attempts to obtain an exclusive lock within amount of time given. - // Currently polls once per second until lockWaitTimeout is passed. - // @param lockWaitTimeout length of time to wait in ms - // @return true if lock was obtained - // @throws IOException if lock wait times out or obtain() throws an IOException - bool obtain(int64_t lockWaitTimeout); - - // Release exclusive access. - virtual void release() = 0; - - // Returns true if the resource is currently locked. Note that one must - // still call {@link #obtain()} before using the resource. - virtual bool isLocked() = 0; - - virtual QString toString() const = 0; -}; - - -// Utility class for executing code with exclusive access. -template -class LuceneLockWith -{ -public: - // Constructs an executor that will grab the named lock. Defaults - // lockWaitTimeout to LUCENE_COMMIT_LOCK_TIMEOUT. - // @deprecated Kept only to avoid breaking existing code. - LuceneLockWith(LuceneLock* lock, int64_t lockWaitTimeout) - { - this->lock = lock; - this->lockWaitTimeout = lockWaitTimeout; - } - - virtual ~LuceneLockWith() {} - - // Calls {@link #doBody} while lock is obtained. Blocks if lock - // cannot be obtained immediately. Retries to obtain lock once per second - // until it is obtained, or until it has tried ten times. Lock is released - // when {@link #doBody} exits. - T runAndReturn() - { - bool locked = false; - T ret = NULL; - try { - locked = lock->obtain(lockWaitTimeout); - ret = doBody(); - } _CLFINALLY ( - if (locked) - lock->release(); - ); - return ret; - } - - // @see runAndReturn - // Same as runAndReturn, except doesn't return any value. The only - // difference is that no void values are used - void run() - { - bool locked = false; - try { - locked = lock->obtain(lockWaitTimeout); - doBody(); - } _CLFINALLY ( - if (locked) - lock->release(); - ); - } - -protected: - virtual T doBody() = 0; - -private: - LuceneLock* lock; - int64_t lockWaitTimeout; -}; - -CL_NS_END - -#endif diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/store/MMapInput.cpp qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/store/MMapInput.cpp --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/store/MMapInput.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/store/MMapInput.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,203 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#include "CLucene/StdHeader.h" -#if defined(LUCENE_FS_MMAP) - -#include "FSDirectory.h" -#include "CLucene/util/Misc.h" -#include "CLucene/debug/condition.h" - -#ifndef _CLCOMPILER_MSVC - #include -#endif - -CL_NS_DEF(store) -CL_NS_USE(util) - - FSDirectory::MMapIndexInput::MMapIndexInput(const char* path): - pos(0), - data(NULL), - _length(0), - isClone(false) - { - //Func - Constructor. - // Opens the file named path - //Pre - path != NULL - //Post - if the file could not be opened an exception is thrown. - - CND_PRECONDITION(path != NULL, "path is NULL"); - -#ifdef _CLCOMPILER_MSVC - mmaphandle = NULL; - fhandle = CreateFileA(path,GENERIC_READ,FILE_SHARE_READ, 0,OPEN_EXISTING,0,0); - - //Check if a valid fhandle was retrieved - if (fhandle < 0){ - DWORD err = GetLastError(); - if ( err == ERROR_FILE_NOT_FOUND ) - _CLTHROWA(CL_ERR_IO, "File does not exist"); - else if ( err == EACCES ) - _CLTHROWA(ERROR_ACCESS_DENIED, "File Access denied"); - else if ( err == ERROR_TOO_MANY_OPEN_FILES ) - _CLTHROWA(CL_ERR_IO, "Too many open files"); - else - _CLTHROWA(CL_ERR_IO, "File IO Error"); - } - - DWORD dummy=0; - _length = GetFileSize(fhandle,&dummy); - - if ( _length > 0 ){ - mmaphandle = CreateFileMappingA(fhandle,NULL,PAGE_READONLY,0,0,NULL); - if ( mmaphandle != NULL ){ - void* address = MapViewOfFile(mmaphandle,FILE_MAP_READ,0,0,0); - if ( address != NULL ){ - data = (uint8_t*)address; - return; //SUCCESS! - } - } - CloseHandle(mmaphandle); - - char* lpMsgBuf=0; - DWORD dw = GetLastError(); - - FormatMessageA( - FORMAT_MESSAGE_ALLOCATE_BUFFER | - FORMAT_MESSAGE_FROM_SYSTEM, - NULL, - dw, - MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), - lpMsgBuf, - 0, NULL ); - - char* errstr = _CL_NEWARRAY(char, strlen(lpMsgBuf)+40); - sprintf(errstr, "MMapIndexInput::MMapIndexInput failed with error %d: %s", dw, lpMsgBuf); - LocalFree(lpMsgBuf); - - _CLTHROWA_DEL(CL_ERR_IO,errstr); - } - -#else //_CLCOMPILER_MSVC - fhandle = ::open (path, O_RDONLY); - if (fhandle < 0){ - _CLTHROWA(CL_ERR_IO,strerror(errno)); - }else{ - // stat it - struct stat sb; - if (::fstat (fhandle, &sb)){ - _CLTHROWA(CL_ERR_IO,strerror(errno)); - }else{ - // get length from stat - _length = sb.st_size; - - // mmap the file - void* address = ::mmap(0, _length, PROT_READ, MAP_SHARED, fhandle, 0); - if (address == MAP_FAILED){ - _CLTHROWA(CL_ERR_IO,strerror(errno)); - }else{ - data = (uint8_t*)address; - } - } - } -#endif - } - - FSDirectory::MMapIndexInput::MMapIndexInput(const MMapIndexInput& clone): IndexInput(clone){ - //Func - Constructor - // Uses clone for its initialization - //Pre - clone is a valide instance of FSIndexInput - //Post - The instance has been created and initialized by clone - -#ifdef _CLCOMPILER_MSVC - mmaphandle = NULL; - fhandle = NULL; -#endif - - data = clone.data; - pos = clone.pos; - - //clone the file length - _length = clone._length; - //Keep in mind that this instance is a clone - isClone = true; - } - - uint8_t FSDirectory::MMapIndexInput::readByte(){ - return *(data+(pos++)); - } - - void FSDirectory::MMapIndexInput::readBytes(uint8_t* b, const int32_t len){ - memcpy(b, data+pos, len); - pos+=len; - } - int32_t FSDirectory::MMapIndexInput::readVInt(){ - uint8_t b = *(data+(pos++)); - int32_t i = b & 0x7F; - for (int shift = 7; (b & 0x80) != 0; shift += 7) { - b = *(data+(pos++)); - i |= (b & 0x7F) << shift; - } - return i; - } - int64_t FSDirectory::MMapIndexInput::getFilePointer() const{ - return pos; - } - void FSDirectory::MMapIndexInput::seek(const int64_t pos){ - this->pos=pos; - } - - FSDirectory::MMapIndexInput::~MMapIndexInput(){ - //Func - Destructor - //Pre - True - //Post - The file for which this instance is responsible has been closed. - // The instance has been destroyed - - close(); - } - - IndexInput* FSDirectory::MMapIndexInput::clone() const - { - return _CLNEW FSDirectory::MMapIndexInput(*this); - } - void FSDirectory::MMapIndexInput::close() { - //IndexInput::close(); - - if ( !isClone ){ -#ifdef _CLCOMPILER_MSVC - if ( data != NULL ){ - if ( ! UnmapViewOfFile(data) ){ - CND_PRECONDITION( false, "UnmapViewOfFile(data) failed"); //todo: change to rich error - } - } - - if ( mmaphandle != NULL ){ - if ( ! CloseHandle(mmaphandle) ){ - CND_PRECONDITION( false, "CloseHandle(mmaphandle) failed"); - } - } - if ( fhandle != NULL ){ - if ( !CloseHandle(fhandle) ){ - CND_PRECONDITION( false, "CloseHandle(fhandle) failed"); - } - } - mmaphandle = NULL; - fhandle = NULL; -#else - if ( data != NULL ) - ::munmap(data, _length); - if ( fhandle > 0 ) - ::close(fhandle); - fhandle = 0; -#endif - } - data = NULL; - pos = 0; - } - - -CL_NS_END -#endif diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/store/OutputStream.h qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/store/OutputStream.h --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/store/OutputStream.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/store/OutputStream.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,23 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#ifndef _lucene_store_IndexOutput_ -#define _lucene_store_IndexOutput_ -#if defined(_LUCENE_PRAGMA_ONCE) -# pragma once -#endif - -CL_NS_DEF(store) - - -deprecated... please use IndexOutput.h header -and change OutputStream to OutdexInput - - - -CL_NS_END - -#endif // _lucene_store_IndexOutput_ diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/store/RAMDirectory.cpp qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/store/RAMDirectory.cpp --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/store/RAMDirectory.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/store/RAMDirectory.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,446 +0,0 @@ -/* - * Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team - * - * Distributable under the terms of either the Apache License (Version 2.0) or - * the GNU Lesser General Public License, as specified in the COPYING file. - * - * Changes are Copyright (C) 2015 The Qt Company Ltd. -*/ -#include "CLucene/StdHeader.h" -#include "RAMDirectory.h" - -#include "Lock.h" -#include "Directory.h" -#include "FSDirectory.h" -#include "CLucene/index/IndexReader.h" -#include "CLucene/util/VoidMap.h" -#include "CLucene/util/Misc.h" -#include "CLucene/debug/condition.h" - -CL_NS_USE(util) -CL_NS_DEF(store) - -RAMFile::RAMFile() -{ - length = 0; - lastModified = Misc::currentTimeMillis(); -} - -RAMFile::~RAMFile() -{ -} - - -RAMDirectory::RAMLock::RAMLock(const QString& name, RAMDirectory* dir) - : directory(dir) -{ - fname = name; -} - -RAMDirectory::RAMLock::~RAMLock() -{ - directory = NULL; -} - -QString RAMDirectory::RAMLock::toString() const -{ - return QLatin1String("LockFile@RAM"); -} - -bool RAMDirectory::RAMLock::isLocked() -{ - return directory->fileExists(fname); -} - -bool RAMDirectory::RAMLock::obtain() -{ - SCOPED_LOCK_MUTEX(directory->files_mutex); - if (!directory->fileExists(fname)) { - IndexOutput* tmp = directory->createOutput(fname); - tmp->close(); - _CLDELETE(tmp); - - return true; - } - return false; -} - -void RAMDirectory::RAMLock::release() -{ - directory->deleteFile(fname); -} - -RAMIndexOutput::~RAMIndexOutput() -{ - if (deleteFile) - _CLDELETE(file); - file = NULL; -} - -RAMIndexOutput::RAMIndexOutput(RAMFile* f) - : file(f) -{ - pointer = 0; - deleteFile = false; -} - -RAMIndexOutput::RAMIndexOutput() - : file(_CLNEW RAMFile) -{ - pointer = 0; - deleteFile = true; -} - -void RAMIndexOutput::writeTo(IndexOutput* out) -{ - flush(); - int64_t end = file->length; - int64_t pos = 0; - int32_t p = 0; - while (pos < end) { - int32_t length = CL_NS(store)::BufferedIndexOutput::BUFFER_SIZE; - int64_t nextPos = pos + length; - if (nextPos > end) { // at the last buffer - length = (int32_t)(end - pos); - } - out->writeBytes((uint8_t*)file->buffers[p++], length); - pos = nextPos; - } -} - -void RAMIndexOutput::reset() -{ - seek(_ILONGLONG(0)); - file->length = _ILONGLONG(0); -} - -void RAMIndexOutput::flushBuffer(const uint8_t* src, const int32_t len) -{ - uint8_t* b = NULL; - int32_t bufferPos = 0; - while (bufferPos != len) { - uint32_t bufferNumber = pointer/CL_NS(store)::BufferedIndexOutput::BUFFER_SIZE; - int32_t bufferOffset = pointer%CL_NS(store)::BufferedIndexOutput::BUFFER_SIZE; - int32_t bytesInBuffer = CL_NS(store)::BufferedIndexOutput::BUFFER_SIZE - bufferOffset; - int32_t remainInSrcBuffer = len - bufferPos; - int32_t bytesToCopy = bytesInBuffer >= remainInSrcBuffer ? remainInSrcBuffer : bytesInBuffer; - - if (bufferNumber == file->buffers.size()){ - b = _CL_NEWARRAY(uint8_t, CL_NS(store)::BufferedIndexOutput::BUFFER_SIZE); - file->buffers.push_back( b ); - }else{ - b = file->buffers[bufferNumber]; - } - memcpy(b+bufferOffset, src+bufferPos, bytesToCopy * sizeof(uint8_t)); - bufferPos += bytesToCopy; - pointer += bytesToCopy; - } - if (pointer > file->length) - file->length = pointer; - - file->lastModified = Misc::currentTimeMillis(); -} - -void RAMIndexOutput::close() -{ - BufferedIndexOutput::close(); -} - -/** Random-at methods */ -void RAMIndexOutput::seek(const int64_t pos) -{ - BufferedIndexOutput::seek(pos); - pointer = (int32_t)pos; -} - -int64_t RAMIndexOutput::length() -{ - return file->length; -} - - -RAMIndexInput::RAMIndexInput(RAMFile* f) - : file(f) -{ - pointer = 0; - _length = f->length; -} - -RAMIndexInput::RAMIndexInput(const RAMIndexInput& other) - : BufferedIndexInput(other) -{ - file = other.file; - pointer = other.pointer; - _length = other._length; -} - -RAMIndexInput::~RAMIndexInput() -{ - RAMIndexInput::close(); -} - -IndexInput* RAMIndexInput::clone() const -{ - return _CLNEW RAMIndexInput(*this); -} - -int64_t RAMIndexInput::length() -{ - return _length; -} - -QString RAMIndexInput::getDirectoryType() const -{ - return RAMDirectory::DirectoryType(); -} - -void RAMIndexInput::readInternal(uint8_t* dest, const int32_t len) -{ - const int64_t bytesAvailable = file->length - pointer; - int64_t remainder = len <= bytesAvailable ? len : bytesAvailable; - int32_t start = pointer; - int32_t destOffset = 0; - while (remainder != 0) { - int32_t bufferNumber = start / CL_NS(store)::BufferedIndexOutput::BUFFER_SIZE; - int32_t bufferOffset = start % CL_NS(store)::BufferedIndexOutput::BUFFER_SIZE; - int32_t bytesInBuffer = CL_NS(store)::BufferedIndexOutput::BUFFER_SIZE - bufferOffset; - - /* The buffer's entire length (bufferLength) is defined by IndexInput.h - ** as int32_t, so obviously the number of bytes in a given segment of the - ** buffer won't exceed the the capacity of int32_t. Therefore, the - ** int64_t->int32_t cast on the next line is safe. */ - int32_t bytesToCopy = bytesInBuffer >= remainder ? static_cast(remainder) : bytesInBuffer; - uint8_t* b = file->buffers[bufferNumber]; - memcpy(dest + destOffset, b + bufferOffset, bytesToCopy * sizeof(uint8_t)); - - destOffset += bytesToCopy; - start += bytesToCopy; - remainder -= bytesToCopy; - pointer += bytesToCopy; - } -} - -void RAMIndexInput::close() -{ - BufferedIndexInput::close(); -} - -void RAMIndexInput::seekInternal(const int64_t pos) -{ - CND_PRECONDITION(pos >= 0 && pos < this->_length, "Seeking out of range") - pointer = (int32_t)pos; -} - -// #pragma mark -- RAMDirectory - -QStringList RAMDirectory::list() const -{ - SCOPED_LOCK_MUTEX(files_mutex); - - QStringList names; - - FileMap::const_iterator itr; - for (itr = files.begin(); itr != files.end(); ++itr) - names.push_back(itr->first); - - return names; -} - -RAMDirectory::RAMDirectory() - : Directory() - , files(false, true) -{ -} - -RAMDirectory::~RAMDirectory() -{ - //todo: should call close directory? -} - -void RAMDirectory::_copyFromDir(Directory* dir, bool closeDir) -{ - QStringList names = dir->list(); - uint8_t buf[CL_NS(store)::BufferedIndexOutput::BUFFER_SIZE]; - - foreach (const QString& name, names) { - if (!CL_NS(index)::IndexReader::isLuceneFile(name)) - continue; - - // make place on ram disk - IndexOutput* os = createOutput(name); - // read current file - IndexInput* is = dir->openInput(name); - - // and copy to ram disk - //todo: this could be a problem when copying from big indexes... - int64_t readCount = 0; - int64_t len = is->length(); - while (readCount < len) { - int32_t toRead = CL_NS(store)::BufferedIndexOutput::BUFFER_SIZE; - if ((readCount + toRead) > len) - toRead = int32_t(len - readCount); - is->readBytes(buf, toRead); - os->writeBytes(buf, toRead); - readCount += toRead; - } - - // graceful cleanup - is->close(); - _CLDELETE(is); - os->close(); - _CLDELETE(os); - } - if (closeDir) - dir->close(); -} - -RAMDirectory::RAMDirectory(Directory* dir) - : Directory() - , files(false, true) -{ - _copyFromDir(dir, false); -} - -RAMDirectory::RAMDirectory(const QString& dir) - : Directory() - , files(false, true) -{ - Directory* fsdir = FSDirectory::getDirectory(dir, false); - try { - _copyFromDir(fsdir, false); - } _CLFINALLY ( - fsdir->close(); - _CLDECDELETE(fsdir); - ); -} - -bool RAMDirectory::fileExists(const QString& name) const -{ - SCOPED_LOCK_MUTEX(files_mutex); - return files.exists(name); -} - -int64_t RAMDirectory::fileModified(const QString& name) const -{ - SCOPED_LOCK_MUTEX(files_mutex); - const RAMFile* f = files.get(name); - return f->lastModified; -} - -int64_t RAMDirectory::fileLength(const QString& name) const -{ - SCOPED_LOCK_MUTEX(files_mutex); - RAMFile* f = files.get(name); - return f->length; -} - - -IndexInput* RAMDirectory::openInput(const QString& name) -{ - SCOPED_LOCK_MUTEX(files_mutex); - RAMFile* file = files.get(name); - if (file == NULL) { - _CLTHROWA(CL_ERR_IO, // DSR:PROPOSED: Better error checking. - "[RAMDirectory::open] The requested file does not exist."); - } - return _CLNEW RAMIndexInput(file); -} - -void RAMDirectory::close() -{ - SCOPED_LOCK_MUTEX(files_mutex); - files.clear(); -} - -bool RAMDirectory::doDeleteFile(const QString& name) -{ - SCOPED_LOCK_MUTEX(files_mutex); - files.remove(name); - return true; -} - -void RAMDirectory::renameFile(const QString& from, const QString& to) -{ - SCOPED_LOCK_MUTEX(files_mutex); - FileMap::iterator itr = files.find(from); - - /* DSR:CL_BUG_LEAK: - ** If a file named $to already existed, its old value was leaked. - ** My inclination would be to prevent this implicit deletion with an - ** exception, but it happens routinely in CLucene's internals (e.g., during - ** IndexWriter.addIndexes with the file named 'segments'). */ - if (files.exists(to)) - files.remove(to); - - if (itr == files.end()) { - char tmp[1024]; - _snprintf(tmp, 1024, "cannot rename %s, file does not exist", - from.toLocal8Bit().constData()); - _CLTHROWT(CL_ERR_IO, tmp); - } - - CND_PRECONDITION(itr != files.end(), "itr == files.end()") - - RAMFile* file = itr->second; - files.removeitr(itr, true, true); - files.put(to, file); -} - - -void RAMDirectory::touchFile(const QString& name) -{ - RAMFile* file = NULL; - { - SCOPED_LOCK_MUTEX(files_mutex); - file = files.get(name); - } - uint64_t ts1 = file->lastModified; - uint64_t ts2 = Misc::currentTimeMillis(); - - //make sure that the time has actually changed - while (ts1 == ts2) { - _LUCENE_SLEEP(1); - ts2 = Misc::currentTimeMillis(); - }; - - file->lastModified = ts2; -} - -IndexOutput* RAMDirectory::createOutput(const QString& name) -{ - /* Check the $files VoidMap to see if there was a previous file named - ** $name. If so, delete the old RAMFile object, but reuse the existing - ** char buffer ($n) that holds the filename. If not, duplicate the - ** supplied filename buffer ($name) and pass ownership of that memory ($n) - ** to $files. */ - - SCOPED_LOCK_MUTEX(files_mutex); - - QString n = files.getKey(name); - if (!n.isEmpty()) { - RAMFile* rf = files.get(name); - _CLDELETE(rf); - } else { - n = name; - } - - RAMFile* file = _CLNEW RAMFile(); -#ifdef _DEBUG - file->filename = n; -#endif - files[n] = file; - - return _CLNEW RAMIndexOutput(file); -} - -LuceneLock* RAMDirectory::makeLock(const QString& name) -{ - return _CLNEW RAMLock(name, this); -} - -QString RAMDirectory::toString() const -{ - return QLatin1String("RAMDirectory"); -} - -CL_NS_END diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/store/RAMDirectory.h qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/store/RAMDirectory.h --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/store/RAMDirectory.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/store/RAMDirectory.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,195 +0,0 @@ -/* - * Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team - * - * Distributable under the terms of either the Apache License (Version 2.0) or - * the GNU Lesser General Public License, as specified in the COPYING file. - * - * Changes are Copyright (C) 2015 The Qt Company Ltd. -*/ -#ifndef _lucene_store_RAMDirectory_ -#define _lucene_store_RAMDirectory_ - -#if defined(_LUCENE_PRAGMA_ONCE) -# pragma once -#endif - -#include -#include - -#include "Lock.h" -#include "Directory.h" -#include "CLucene/util/VoidMap.h" -#include "CLucene/util/Arrays.h" - -CL_NS_DEF(store) - -class RAMFile : LUCENE_BASE -{ -public: - CL_NS(util)::CLVector > buffers; - int64_t length; - uint64_t lastModified; - -#ifdef _DEBUG - QString filename; -#endif - - RAMFile(); - ~RAMFile(); -}; - -class RAMIndexOutput : public BufferedIndexOutput -{ -protected: - RAMFile* file; - int32_t pointer; - bool deleteFile; - - // output methods: - void flushBuffer(const uint8_t* src, const int32_t len); - -public: - RAMIndexOutput(RAMFile* f); - RAMIndexOutput(); - /** Construct an empty output buffer. */ - virtual ~RAMIndexOutput(); - - virtual void close(); - - // Random-at methods - virtual void seek(const int64_t pos); - int64_t length(); - /** Resets this to an empty buffer. */ - void reset(); - /** Copy the current contents of this buffer to the named output. */ - void writeTo(IndexOutput* output); -}; - -class RAMIndexInput : public BufferedIndexInput -{ -private: - RAMFile* file; - int32_t pointer; - int64_t _length; - -protected: - /** IndexInput methods */ - RAMIndexInput(const RAMIndexInput& clone); - void readInternal(uint8_t *dest, const int32_t len); - - /** Random-at methods */ - void seekInternal(const int64_t pos); - -public: - RAMIndexInput(RAMFile* f); - ~RAMIndexInput(); - IndexInput* clone() const; - - void close(); - int64_t length(); - QString getDirectoryType() const; -}; - - -/** -* A memory-resident {@link Directory} implementation. -*/ -class RAMDirectory : public Directory -{ - class RAMLock : public LuceneLock - { - private: - RAMDirectory* directory; - QString fname; - public: - RAMLock(const QString& name, RAMDirectory* dir); - virtual ~RAMLock(); - bool obtain(); - void release(); - bool isLocked(); - virtual QString toString() const; - }; - - typedef CL_NS(util)::CLHashMap > FileMap; - -protected: - /// Removes an existing file in the directory. - virtual bool doDeleteFile(const QString& name); - - /** - * Creates a new RAMDirectory instance from a different - * Directory implementation. This can be used to load - * a disk-based index into memory. - *

- * This should be used only with indices that can fit into memory. - * - * @param dir a Directory value - * @exception IOException if an error occurs - */ - void _copyFromDir(Directory* dir, bool closeDir); - FileMap files; // unlike the java Hashtable, FileMap is not synchronized, and all access must be protected by a lock - -public: -#ifndef _CL_DISABLE_MULTITHREADING //do this so that the mutable keyword still works without mt enabled - mutable DEFINE_MUTEX(files_mutex) // mutable: const methods must also be able to synchronize properly -#endif - - // Returns a null terminated array of strings, one for each file in the directory. - QStringList list() const; - - /** Constructs an empty {@link Directory}. */ - RAMDirectory(); - - // Destructor - only call this if you are sure the directory - // is not being used anymore. Otherwise use the ref-counting - // facilities of dir->close - virtual ~RAMDirectory(); - RAMDirectory(Directory* dir); - - /** - * Creates a new RAMDirectory instance from the {@link FSDirectory}. - * - * @param dir a String specifying the full index directory path - */ - RAMDirectory(const QString& dir); - - /// Returns true iff the named file exists in this directory. - bool fileExists(const QString& name) const; - - /// Returns the time the named file was last modified. - int64_t fileModified(const QString& name) const; - - /// Returns the length in bytes of a file in the directory. - int64_t fileLength(const QString& name) const; - - /// Removes an existing file in the directory. - virtual void renameFile(const QString& from, const QString& to); - - /** Set the modified time of an existing file to now. */ - void touchFile(const QString& name); - - /// Creates a new, empty file in the directory with the given name. - /// Returns a stream writing this file. - virtual IndexOutput* createOutput(const QString& name); - - /// Construct a {@link Lock}. - /// @param name the name of the lock file - LuceneLock* makeLock(const QString& name); - - /// Returns a stream reading an existing file. - IndexInput* openInput(const QString& name); - - virtual void close(); - - QString toString() const; - - static QString DirectoryType() { return QLatin1String("RAM"); } - QString getDirectoryType() const { return DirectoryType(); } -}; - -CL_NS_END - -#endif diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/store/TransactionalRAMDirectory.cpp qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/store/TransactionalRAMDirectory.cpp --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/store/TransactionalRAMDirectory.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/store/TransactionalRAMDirectory.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,212 +0,0 @@ -/* - * Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team - * - * Distributable under the terms of either the Apache License (Version 2.0) or - * the GNU Lesser General Public License, as specified in the COPYING file. - * - * Changes are Copyright (C) 2015 The Qt Company Ltd. -*/ -#include "CLucene/StdHeader.h" -#include "TransactionalRAMDirectory.h" - -CL_NS_DEF(store) -CL_NS_USE(util) - -TransactionalRAMDirectory::TransactionalRAMDirectory() - : RAMDirectory() - , filesToRestoreOnAbort(false, true) -{ - transOpen = false; -} - -TransactionalRAMDirectory::~TransactionalRAMDirectory() -{ -} - -bool TransactionalRAMDirectory::archiveOrigFileIfNecessary(const QString& name) -{ - // If a file named $name was present when the transaction started and the - // original RAMFile object has not been archived for restoration upon - // transaction abort, then do so, and return true. - // In any other case, return false. - if (fileExists(name) && filesToRemoveOnAbort.find(name) == filesToRemoveOnAbort.end()) { - // The file exists, but isn't recorded as having been created after the - // start of the transaction, so it must've been present at the start of - // the transaction. - - // Transfer memory ownership of both the key and the value from files to - // filesToRestoreOnAbort. - QString origName = files.getKey(name); - RAMFile* origFile = files.get(name); - files.remove(name, true, true); - filesToRestoreOnAbort.put(origName, origFile); - - CND_CONDITION(!fileExists(name), - "File should not exist immediately after archival."); - return true; - } - - return false; -} - -void TransactionalRAMDirectory::unarchiveOrigFile(const QString& name) -{ - QString origName = filesToRestoreOnAbort.getKey(name); - if (origName.isEmpty()) { - _CLTHROWA(CL_ERR_RAMTransaction, - "File submitted for unarchival was not archived."); - } - RAMFile* origFile = filesToRestoreOnAbort.get(name); - // Transfer memory ownership back to files from filesToRestoreOnAbort. - filesToRestoreOnAbort.remove(name, true, true); - files.put(origName, origFile); -} - -bool TransactionalRAMDirectory::transIsOpen() const -{ - return transOpen; -} - -void TransactionalRAMDirectory::transStart() -{ - if (transOpen) { - _CLTHROWA(CL_ERR_RAMTransaction, - "Must resolve previous transaction before starting another."); - } - - CND_CONDITION(filesToRemoveOnAbort.size() == 0, - "filesToRemoveOnAbort should have been cleared by either its" - " constructor or transResolved."); - - CND_CONDITION(filesToRestoreOnAbort.size() == 0, - "filesToRestoreOnAbort should have been cleared by either its" - " constructor or transResolved."); - - transOpen = true; -} - -void TransactionalRAMDirectory::transResolved() -{ - // This method implements actions common to both forms of transaction - // resolution. - filesToRemoveOnAbort.clear(); - filesToRestoreOnAbort.clear(); - transOpen = false; -} - -void TransactionalRAMDirectory::transCommit() -{ - if (!transOpen) - _CLTHROWA(CL_ERR_RAMTransaction, "There is no open transaction."); - - // All storage is in memory, so commit is ultra-simple. - transResolved(); -} - -void TransactionalRAMDirectory::transAbort() -{ - if (!transOpen) - _CLTHROWA(CL_ERR_RAMTransaction, "There is no open transaction."); - - // Delete each file in filesToRemoveOnAbort. - FilenameSet::const_iterator itrDel = filesToRemoveOnAbort.begin(); - for ( ; itrDel != filesToRemoveOnAbort.end(); ++itrDel) { - size_t nameLength = itrDel->first.length(); - - // Special exception: Refrain from deleting a lock's flag file, as that - // would interfere with the operation of the lock. - if (!(nameLength >= 5 - && itrDel->first.rightRef(5) == QLatin1String(".lock"))) { - RAMDirectory::deleteFile(itrDel->first); - } - } - // Ownership of the memory of both the key and the value never left files, - // so there's no need for a special directive to filesToRemoveOnAbort. - filesToRemoveOnAbort.clear(); - - // Now that any new-since-trans-start files with the same names as - // already-present-at-trans-start files are out of the way, restore each - // file in filesToRestoreOnAbort. - TransFileMap::const_iterator itr = filesToRestoreOnAbort.begin(); - for ( ; itr != filesToRestoreOnAbort.end(); ++itr) { - files.put(itr->first, itr->second); - filesToRestoreOnAbort.remove(itr->first); - } - - CND_CONDITION(filesToRestoreOnAbort.size() == 0, - "filesToRestoreOnAbort should be empty."); - - transResolved(); -} - -bool TransactionalRAMDirectory::doDeleteFile(const QString& name) -{ - if (!transOpen) - return RAMDirectory::doDeleteFile(name); - - bool wasOriginalAndWasArchived = archiveOrigFileIfNecessary(name); - if (!wasOriginalAndWasArchived) { - // The file to be deleted wasn't present at transaction start, so instead - // of archiving it, we delete it the conventional way, making sure to - // erase its record in filesToRemoveOnAbort if it was listed there. - filesToRemoveOnAbort.remove(name); - return RAMDirectory::doDeleteFile(name); - } - return true; -} - -void TransactionalRAMDirectory::renameFile(const QString& from, const QString& to) -{ - // During the review on 2005.03.18, decided not to implement transactional - // renameFile for two reasons: - // a) It's not needed in the limited scenario for which - // TransactionalRAMDirectory was designed (IndexWriter::addDocument and - // subcode). - // b) Supporting renaming during a transaction would add considerable - // bookkeeping overhead, reducing the performance of the overwhelmingly - // typical case (commit) in order to support the rare case (abort). - // - // This was not a thinly disguised punt due to the complication of - // implementing renameFile transactionally; rather, several implementations - // were considered, but it seemed wrongheaded to degrade the performance of - // the typical case based on the mere potential need to support renameFile - // at some future point for the benefit of the atypical case. - if (transOpen) { - _CLTHROWA(CL_ERR_RAMTransaction, - "TransactionalRAMDirectory disallows renameFile during a transaction."); - } - RAMDirectory::renameFile(from, to); -} - -IndexOutput* TransactionalRAMDirectory::createOutput(const QString& name) -{ - if (!transOpen) - return RAMDirectory::createOutput(name); - - bool wasOriginalAndWasArchived = archiveOrigFileIfNecessary(name); - try { - IndexOutput* ret = RAMDirectory::createOutput(name); - // Importantly, we store a pointer to the filename memory managed by - // files, rather than that passed in by the client (name). We don't make - // an additional copy of the filename's memory because the transactional - // metadata container filesToRemoveOnAbort is not at risk of outliving - // files. - filesToRemoveOnAbort.put(files.getKey(name), NULL); - return ret; - } catch (...) { - if (wasOriginalAndWasArchived) { - unarchiveOrigFile(name); - } - throw; - } -} - -void TransactionalRAMDirectory::close() -{ - if (transOpen) - transAbort(); - - RAMDirectory::close(); -} - -CL_NS_END diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/store/TransactionalRAMDirectory.h qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/store/TransactionalRAMDirectory.h --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/store/TransactionalRAMDirectory.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/store/TransactionalRAMDirectory.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,76 +0,0 @@ -/* - * Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team - * - * Distributable under the terms of either the Apache License (Version 2.0) or - * the GNU Lesser General Public License, as specified in the COPYING file. - * - * Changes are Copyright (C) 2015 The Qt Company Ltd. -*/ -#ifndef _lucene_store_TransactionalRAMDirectory_ -#define _lucene_store_TransactionalRAMDirectory_ - -#if defined(_LUCENE_PRAGMA_ONCE) -# pragma once -#endif - -#include - -#include "RAMDirectory.h" -#include "CLucene/util/VoidList.h" - -CL_NS_DEF(store) - -/*** -This transactional in-memory Directory was created to address a specific -situation, and was deliberately pared down to the simplest viable -implementation. For the sake of simplicity, this implementation imposes -restrictions on what operations can be performed in the directory while a -transaction is in progress (documented in TransactionalRAMDirectory.cpp). - -Because the Lucene Directory interface itself is rather simplistic, it -would not be difficult to expand TransactionalRAMDirectory so that it -provided fully general transactionality. However, the developer of this -original implementation was of the opinion that the last thing CLucene -needs is gratuitous features that exceed their required complexity and -haven't been rigorously tested. -*/ -class TransactionalRAMDirectory : public RAMDirectory -{ -private: - typedef CL_NS(util)::CLSet FilenameSet; - FilenameSet filesToRemoveOnAbort; - - typedef CL_NS(util)::CLSet > TransFileMap; - TransFileMap filesToRestoreOnAbort; - - bool transOpen; - - void transResolved(); - bool archiveOrigFileIfNecessary(const QString& name); - void unarchiveOrigFile(const QString& name); - -protected: - bool doDeleteFile(const QString& name); - -public: - TransactionalRAMDirectory(); - virtual ~TransactionalRAMDirectory(); - - bool transIsOpen() const; - void transStart(); - void transCommit(); - void transAbort(); - - // Constrained operations: - void renameFile(const QString& from, const QString& to); - IndexOutput* createOutput(const QString& name); - - void close(); -}; - -CL_NS_END - -#endif diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/util/Arrays.h qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/util/Arrays.h --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/util/Arrays.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/util/Arrays.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,164 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#ifndef _lucene_util_Arrays_ -#define _lucene_util_Arrays_ - -#if defined(_LUCENE_PRAGMA_ONCE) -# pragma once -#endif - -#include "VoidList.h" - -CL_NS_DEF(util) - class Arrays{ - public: - template - class _Arrays { - protected: - //used by binarySearch to check for equality - virtual bool equals(_type a,_type b) const = 0; - virtual int32_t compare(_type a,_type b) const = 0; - public: - virtual ~_Arrays(){ - } - - void sort(_type* a, int32_t alen, int32_t fromIndex, int32_t toIndex) const{ - CND_PRECONDITION(fromIndex < toIndex,"fromIndex >= toIndex"); - CND_PRECONDITION(fromIndex >= 0,"fromIndex < 0"); - - // First presort the array in chunks of length 6 with insertion - // sort. A mergesort would give too much overhead for this length. - for (int32_t chunk = fromIndex; chunk < toIndex; chunk += 6) - { - int32_t end = min(chunk + 6, toIndex); - for (int32_t i = chunk + 1; i < end; i++) - { - if (compare(a[i - 1], a[i]) > 0) - { - // not already sorted - int32_t j = i; - _type elem = a[j]; - do - { - a[j] = a[j - 1]; - j--; - } - while (j > chunk && compare(a[j - 1], elem) > 0); - a[j] = elem; - } - } - } - - int32_t len = toIndex - fromIndex; - // If length is smaller or equal 6 we are done. - if (len <= 6) - return; - - _type* src = a; - _type* dest = _CL_NEWARRAY(_type,alen); - _type* t = NULL; // t is used for swapping src and dest - - // The difference of the fromIndex of the src and dest array. - int32_t srcDestDiff = -fromIndex; - - // The merges are done in this loop - for (int32_t size = 6; size < len; size <<= 1) - { - for (int32_t start = fromIndex; start < toIndex; start += size << 1) - { - // mid is the start of the second sublist; - // end the start of the next sublist (or end of array). - int32_t mid = start + size; - int32_t end = min(toIndex, mid + size); - - // The second list is empty or the elements are already in - // order - no need to merge - if (mid >= end || compare(src[mid - 1], src[mid]) <= 0) - { - memcpy(dest + start + srcDestDiff, src+start, (end-start)*sizeof(_type)); - }// The two halves just need swapping - no need to merge - else if (compare(src[start], src[end - 1]) > 0) - { - memcpy(dest+end-size+srcDestDiff, src+start, size * sizeof(_type)); - memcpy(dest+start+srcDestDiff, src+mid, (end-mid) * sizeof(_type)); - - }else{ - // Declare a lot of variables to save repeating - // calculations. Hopefully a decent JIT will put these - // in registers and make this fast - int32_t p1 = start; - int32_t p2 = mid; - int32_t i = start + srcDestDiff; - - // The main merge loop; terminates as soon as either - // half is ended - while (p1 < mid && p2 < end) - { - dest[i++] = src[(compare(src[p1], src[p2]) <= 0 - ? p1++ : p2++)]; - } - - // Finish up by copying the remainder of whichever half - // wasn't finished. - if (p1 < mid) - memcpy(dest+i,src+p1, (mid-p1) * sizeof(_type)); - else - memcpy(dest+i,src+p2, (end-p2) * sizeof(_type)); - } - } - // swap src and dest ready for the next merge - t = src; - src = dest; - dest = t; - fromIndex += srcDestDiff; - toIndex += srcDestDiff; - srcDestDiff = -srcDestDiff; - } - - // make sure the result ends up back in the right place. Note - // that src and dest may have been swapped above, so src - // contains the sorted array. - if (src != a) - { - // Note that fromIndex == 0. - memcpy(a+srcDestDiff,src,toIndex * sizeof(_type)); - } - } - }; - }; - - template - class CLListEquals: - public CL_NS_STD(binary_function) - { - typedef typename class1::const_iterator _itr1; - typedef typename class2::const_iterator _itr2; - public: - CLListEquals(){ - } - bool equals( class1* val1, class2* val2 ) const{ - static _comparator comp; - if ( val1 == val2 ) - return true; - size_t size = val1->size(); - if ( size != val2->size() ) - return false; - - _itr1 itr1 = val1->begin(); - _itr2 itr2 = val2->begin(); - while ( --size >= 0 ){ - if ( !comp(*itr1,*itr2) ) - return false; - itr1++; - itr2++; - } - return true; - } - }; -CL_NS_END -#endif diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/util/BitSet.cpp qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/util/BitSet.cpp --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/util/BitSet.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/util/BitSet.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,119 +0,0 @@ -/* - * Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team - * - * Distributable under the terms of either the Apache License (Version 2.0) or - * the GNU Lesser General Public License, as specified in the COPYING file. - * - * Changes are Copyright (C) 2015 The Qt Company Ltd. -*/ -#include "CLucene/StdHeader.h" -#include "BitSet.h" -#include "CLucene/store/Directory.h" - -CL_NS_USE(store) -CL_NS_DEF(util) - -BitSet::BitSet(const BitSet& copy) - : _size(copy._size) - , _count(-1) -{ - int32_t len = (_size >> 3) + 1; - bits = _CL_NEWARRAY(uint8_t, len); - memcpy(bits, copy.bits, len); -} - -BitSet::BitSet(int32_t size) - : _size(size) - , _count(-1) -{ - int32_t len = (_size >> 3) + 1; - bits = _CL_NEWARRAY(uint8_t, len); - memset(bits, 0, len); -} - -BitSet::BitSet(CL_NS(store)::Directory* d, const QString& name) -{ - _count = -1; - CL_NS(store)::IndexInput* input = d->openInput(name); - try { - _size = input->readInt(); // read size - _count = input->readInt(); // read count - - bits = _CL_NEWARRAY(uint8_t,(_size >> 3) + 1); // allocate bits - input->readBytes(bits, (_size >> 3) + 1); // read bits - } _CLFINALLY ( - input->close(); - _CLDELETE(input ); - ); -} - -void BitSet::write(CL_NS(store)::Directory* d, const QString& name) -{ - CL_NS(store)::IndexOutput* output = d->createOutput(name); - try { - output->writeInt(size()); // write size - output->writeInt(count()); // write count - output->writeBytes(bits, (_size >> 3) + 1); // write bits - } _CLFINALLY ( - output->close(); - _CLDELETE(output); - ); -} - -BitSet::~BitSet() -{ - _CLDELETE_ARRAY(bits); -} - -void BitSet::set(int32_t bit, bool val) -{ - if (val) - bits[bit >> 3] |= 1 << (bit & 7); - else - bits[bit >> 3] &= ~(1 << (bit & 7)); - - _count = -1; -} - -int32_t BitSet::size() const -{ - return _size; -} - -int32_t BitSet::count() -{ - // if the BitSet has been modified - if (_count == -1) { - static const uint8_t BYTE_COUNTS[] = { - 0, 1, 1, 2, 1, 2, 2, 3, 1, 2, 2, 3, 2, 3, 3, 4, - 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, - 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, - 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, - 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, - 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, - 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, - 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7, - 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, - 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, - 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, - 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7, - 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, - 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7, - 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7, - 4, 5, 5, 6, 5, 6, 6, 7, 5, 6, 6, 7, 6, 7, 7, 8}; - - int32_t c = 0; - int32_t end = (_size >> 3) + 1; - for (int32_t i = 0; i < end; i++) - c += BYTE_COUNTS[bits[i]]; // sum bits per uint8_t - _count = c; - } - return _count; -} - -BitSet* BitSet::clone() const -{ - return _CLNEW BitSet(*this); -} - -CL_NS_END diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/util/BitSet.h qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/util/BitSet.h --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/util/BitSet.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/util/BitSet.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,62 +0,0 @@ -/* - * Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team - * - * Distributable under the terms of either the Apache License (Version 2.0) or - * the GNU Lesser General Public License, as specified in the COPYING file. - * - * Changes are Copyright (C) 2015 The Qt Company Ltd. -*/ -#ifndef _lucene_util_BitSet_ -#define _lucene_util_BitSet_ - -#if defined(_LUCENE_PRAGMA_ONCE) -# pragma once -#endif - -#include - -#include "CLucene/store/Directory.h" - -CL_NS_DEF(util) - -class BitSet : LUCENE_BASE -{ -public: - // Create a bitset with the specified size - BitSet (int32_t size); - BitSet(CL_NS(store)::Directory* d, const QString& name); - void write(CL_NS(store)::Directory* d, const QString& name); - - // Destructor for the bit set - ~BitSet(); - - // get the value of the specified bit - inline bool get(const int32_t bit) const - { - return (bits[bit >> 3] & (1 << (bit & 7))) != 0; - } - - // set the value of the specified bit - void set(int32_t bit, bool val = true); - - ///returns the size of the bitset - int32_t size() const; - - // Returns the total number of one bits in this BitSet. This is - // efficiently computed and cached, so that, if the BitSet is not changed, - // no recomputation is done for repeated calls. - int32_t count(); - BitSet *clone() const; - -protected: - BitSet(const BitSet& copy); - -private: - int32_t _size; - int32_t _count; - uint8_t *bits; -}; - -CL_NS_END - -#endif diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/util/bufferedstream.h qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/util/bufferedstream.h --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/util/bufferedstream.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/util/bufferedstream.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,157 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Jos van den Oever -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -/* This file is part of Strigi Desktop Search - * - * Copyright (C) 2006 Jos van den Oever - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library 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 - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public License - * along with this library; see the file COPYING.LIB. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - */ -#ifndef BUFFEREDSTREAM_H -#define BUFFEREDSTREAM_H - -#include "streambase.h" -#include "inputstreambuffer.h" - -#include -#include - -namespace jstreams { - -template -class BufferedInputStream : public StreamBase { -private: - bool finishedWritingToBuffer; - InputStreamBuffer buffer; - - void writeToBuffer(int32_t minsize); - int32_t read_(const T*& start, int32_t min, int32_t max); -protected: - /** - * This function must be implemented by the subclasses. - * It should write a maximum of @p space characters at the buffer - * position pointed to by @p start. If no more data is available due to - * end of file, -1 should be returned. If an error occurs, the status - * should be set to Error, an error message should be set and the function - * must return -1. - **/ - virtual int32_t fillBuffer(T* start, int32_t space) = 0; - // this function might be useful if you want to reuse a bufferedstream - void resetBuffer() {printf("implement 'resetBuffer'\n");} - BufferedInputStream(); -public: - int32_t read(const T*& start, int32_t min, int32_t max); - int64_t reset(int64_t); - virtual int64_t skip(int64_t ntoskip); -}; - -template -BufferedInputStream::BufferedInputStream() { - finishedWritingToBuffer = false; -} - -template -void -BufferedInputStream::writeToBuffer(int32_t ntoread) { - int32_t missing = ntoread - buffer.avail; - int32_t nwritten = 0; - while (missing > 0 && nwritten >= 0) { - int32_t space; - space = buffer.makeSpace(missing); - T* start = buffer.readPos + buffer.avail; - nwritten = fillBuffer(start, space); - assert(StreamBase::status != Eof); - if (nwritten > 0) { - buffer.avail += nwritten; - missing = ntoread - buffer.avail; - } - } - if (nwritten < 0) { - finishedWritingToBuffer = true; - } -} -template -int32_t -BufferedInputStream::read(const T*& start, int32_t min, int32_t max) { - if (StreamBase::status == Error) return -2; - if (StreamBase::status == Eof) return -1; - - // do we need to read data into the buffer? - if (!finishedWritingToBuffer && min > buffer.avail) { - // do we have enough space in the buffer? - writeToBuffer(min); - if (StreamBase::status == Error) return -2; - } - - int32_t nread = buffer.read(start, max); - - BufferedInputStream::position += nread; - if (BufferedInputStream::position > BufferedInputStream::size - && BufferedInputStream::size > 0) { - // error: we read more than was specified in size - // this is an error because all dependent code might have been labouring - // under a misapprehension - BufferedInputStream::status = Error; - BufferedInputStream::error = "Stream is longer than specified."; - nread = -2; - } else if (BufferedInputStream::status == Ok && buffer.avail == 0 - && finishedWritingToBuffer) { - BufferedInputStream::status = Eof; - if (BufferedInputStream::size == -1) { - BufferedInputStream::size = BufferedInputStream::position; - } - // save one call to read() by already returning -1 if no data is there - if (nread == 0) nread = -1; - } - return nread; -} -template -int64_t -BufferedInputStream::reset(int64_t newpos) { - if (StreamBase::status == Error) return -2; - // check to see if we have this position - int64_t d = BufferedInputStream::position - newpos; - if (buffer.readPos - d >= buffer.start && -d < buffer.avail) { - BufferedInputStream::position -= d; - buffer.avail += (int32_t)d; - buffer.readPos -= d; - StreamBase::status = Ok; - } - return StreamBase::position; -} -template -int64_t -BufferedInputStream::skip(int64_t ntoskip) { - const T *begin; - int32_t nread; - int64_t skipped = 0; - while (ntoskip) { - int32_t step = (int32_t)((ntoskip > buffer.size) ?buffer.size :ntoskip); - nread = read(begin, 1, step); - if (nread <= 0) { - return skipped; - } - ntoskip -= nread; - skipped += nread; - } - return skipped; -} -} - -#endif diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/util/dirent.cpp qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/util/dirent.cpp --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/util/dirent.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/util/dirent.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,221 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Matt J. Weinstein -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#include "CLucene/StdHeader.h" - -#if !defined(_CL_HAVE_DIRENT_H) && !defined(_CL_HAVE_SYS_NDIR_H) && !defined(_CL_HAVE_SYS_DIR_H) && !defined(_CL_HAVE_NDIR_H) -#include "dirent.h" - -DIR * -opendir (const char *szPath) -{ - DIR *nd; - char szFullPath[CL_MAX_PATH]; - - errno = 0; - - if (!szPath) - { - errno = EFAULT; - return NULL; - } - - if (szPath[0] == '\0') - { - errno = ENOTDIR; - return NULL; - } - - /* Attempt to determine if the given path really is a directory. */ - struct _stat rcs; - if ( _stat(szPath,&rcs) == -1) - { - /* call GetLastError for more error info */ - errno = ENOENT; - return NULL; - } - if (!(rcs.st_mode & _S_IFDIR)) - { - /* Error, entry exists but not a directory. */ - errno = ENOTDIR; - return NULL; - } - - /* Make an absolute pathname. */ - _realpath(szPath,szFullPath); - - /* Allocate enough space to store DIR structure and the complete - * directory path given. */ - //nd = (DIR *) malloc (sizeof (DIR) + _tcslen (szFullPath) + _tcslen (DIRENT_SLASH) + - // _tcslen (DIRENT_SEARCH_SUFFIX)+1); - nd = new DIR; - - if (!nd) - { - /* Error, out of memory. */ - errno = ENOMEM; - return NULL; - } - - /* Create the search expression. */ - strcpy (nd->dd_name, szFullPath); - - /* Add on a slash if the path does not end with one. */ - if (nd->dd_name[0] != '\0' && - nd->dd_name[strlen (nd->dd_name) - 1] != '/' && - nd->dd_name[strlen (nd->dd_name) - 1] != '\\') - { - strcat (nd->dd_name, DIRENT_SLASH); - } - - /* Add on the search pattern */ - strcat (nd->dd_name, DIRENT_SEARCH_SUFFIX); - - /* Initialize handle to -1 so that a premature closedir doesn't try - * to call _findclose on it. */ - nd->dd_handle = -1; - - /* Initialize the status. */ - nd->dd_stat = 0; - - /* Initialize the dirent structure. ino and reclen are invalid under - * Win32, and name simply points at the appropriate part of the - * findfirst_t structure. */ - //nd->dd_dir.d_ino = 0; - //nd->dd_dir.d_reclen = 0; - nd->dd_dir.d_namlen = 0; - nd->dd_dir.d_name = nd->dd_dta.name; - - return nd; -} - - -struct dirent * readdir (DIR * dirp) -{ - errno = 0; - - /* Check for valid DIR struct. */ - if (!dirp) - { - errno = EFAULT; - return NULL; - } - - if (dirp->dd_dir.d_name != dirp->dd_dta.name) - { - /* The structure does not seem to be set up correctly. */ - errno = EINVAL; - return NULL; - } - - bool bCallFindNext = true; - - if (dirp->dd_stat < 0) - { - /* We have already returned all files in the directory - * (or the structure has an invalid dd_stat). */ - return NULL; - } - else if (dirp->dd_stat == 0) - { - /* We haven't started the search yet. */ - /* Start the search */ - dirp->dd_handle = _findfirst (dirp->dd_name, &(dirp->dd_dta)); - - if (dirp->dd_handle == -1) - { - /* Whoops! Seems there are no files in that - * directory. */ - dirp->dd_stat = -1; - } - else - { - dirp->dd_stat = 1; - } - - /* Dont call _findnext first time. */ - bCallFindNext = false; - } - - while (dirp->dd_stat > 0) - { - if (bCallFindNext) - { - /* Get the next search entry. */ - if (_findnext (dirp->dd_handle, &(dirp->dd_dta))) - { - /* We are off the end or otherwise error. */ - _findclose (dirp->dd_handle); - dirp->dd_handle = -1; - dirp->dd_stat = -1; - return NULL; - } - else - { - /* Update the status to indicate the correct - * number. */ - dirp->dd_stat++; - } - } - - /* Successfully got an entry. Everything about the file is - * already appropriately filled in except the length of the - * file name. */ - dirp->dd_dir.d_namlen = strlen (dirp->dd_dir.d_name); - - bool bThisFolderOrUpFolder = dirp->dd_dir.d_name[0] == '.' && - (dirp->dd_dir.d_name[1] == 0 || (dirp->dd_dir.d_name[1] == '.' && dirp->dd_dir.d_name[2] == 0)); - - if (!bThisFolderOrUpFolder) - { - struct _stat buf; - char buffer[CL_MAX_DIR]; - size_t bl = strlen(dirp->dd_name)-strlen(DIRENT_SEARCH_SUFFIX); - strncpy(buffer,dirp->dd_name,bl); - buffer[bl]=0; - strcat(buffer, dirp->dd_dir.d_name); - if ( _stat(buffer,&buf) == 0 ) - { - /* Finally we have a valid entry. */ - return &dirp->dd_dir; - } - } - - /* Allow to find next file. */ - bCallFindNext = true; - } - - return NULL; -} - - - -int32_t -closedir (DIR * dirp) -{ - int32_t rc; - - errno = 0; - rc = 0; - - if (!dirp) - { - errno = EFAULT; - return -1; - } - - if (dirp->dd_handle != -1) - { - rc = _findclose (dirp->dd_handle); - } - - /* Delete the dir structure. */ - _CLVDELETE(dirp); - - return rc; -} -#endif //HAVE_DIRENT_H - diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/util/dirent.h qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/util/dirent.h --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/util/dirent.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/util/dirent.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,105 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Matt J. Weinstein -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#ifndef lucene_util_dirent_H -#define lucene_util_dirent_H - -#if defined(_LUCENE_PRAGMA_ONCE) -# pragma once -#endif - -#if !defined(_CL_HAVE_DIRENT_H) && !defined(_CL_HAVE_SYS_NDIR_H) && !defined(_CL_HAVE_SYS_DIR_H) && !defined(_CL_HAVE_NDIR_H) - -/** -\unit - * dirent.c - * - * Derived from DIRLIB.C by Matt J. Weinstein - * This note appears in the DIRLIB.H - * DIRLIB.H by M. J. Weinstein Released to public domain 1-Jan-89 - * - * Updated by Jeremy Bettis - * Significantly revised and rewinddir, seekdir and telldir added by Colin - * Cut down again & changed by Ben van Klinken - * Peters - * - */ - -/** dirent structure - used by the dirent.h directory iteration functions */ -struct dirent -{ - unsigned short d_namlen; /* Length of name in d_name. */ - char *d_name; /* File name. */ -}; - -/** DIR structure - used by the dirent.h directory iteration functions*/ -struct DIR -{ - /** disk transfer area for this dir */ - struct _finddata_t dd_dta; - - /* dirent struct to return from dir (NOTE: this makes this thread - * safe as long as only one thread uses a particular DIR struct at - * a time) */ - struct dirent dd_dir; - - /** _findnext handle */ - intptr_t dd_handle; - - /** - * Status of search: - * 0 = not started yet (next entry to read is first entry) - * -1 = off the end - * positive = 0 based index of next entry - */ - int32_t dd_stat; - - /** given path for dir with search pattern (struct is extended) */ - char dd_name[CL_MAX_DIR]; - -}; - -#define DIRENT_SEARCH_SUFFIX "*" -#define DIRENT_SLASH PATH_DELIMITERA - - -/** -* Returns a pointer to a DIR structure appropriately filled in to begin -* searching a directory. -*/ -DIR* opendir (const char* filespec); - -/** -* Return a pointer to a dirent structure filled with the information on the -* next entry in the directory. -*/ -struct dirent* readdir (DIR* dir); - -/** -* Frees up resources allocated by opendir. -*/ -int32_t closedir (DIR* dir); - - -#elif defined (_CL_HAVE_DIRENT_H) -# include -# define NAMLEN(dirent) strlen((dirent)->d_name) - -#else -# define dirent direct -# define NAMLEN(dirent) (dirent)->d_namlen -# if defined(_CL_HAVE_SYS_NDIR_H) -# include -# endif -# if defined(_CL_HHAVE_SYS_DIR_H) -# include -# endif -# if defined(_CL_HHAVE_NDIR_H) -# include -# endif - -#endif //HAVE_DIRENT_H -#endif diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/util/Equators.cpp qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/util/Equators.cpp --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/util/Equators.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/util/Equators.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,180 +0,0 @@ -/* - * Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team - * - * Distributable under the terms of either the Apache License (Version 2.0) or - * the GNU Lesser General Public License, as specified in the COPYING file. - * - * Changes are Copyright (C) 2015 The Qt Company Ltd. -*/ -#include "CLucene/StdHeader.h" -#include "Equators.h" - -CL_NS_DEF(util) - -bool Equals::Int32::operator()(const int32_t val1, const int32_t val2) const -{ - return (val1)==(val2); -} - -bool Equals::Char::operator()(const char* val1, const char* val2) const -{ - if ( val1 == val2 ) - return true; - return (strcmp(val1, val2) == 0); -} - -#ifdef _UCS2 -bool Equals::WChar::operator()(const wchar_t* val1, const wchar_t* val2) const -{ - if (val1 == val2) - return true; - return (_tcscmp(val1, val2) == 0); -} -#endif - -bool Equals::Qstring::operator()(const QString& val1, const QString& val2) const -{ - return (val1 == val2); -} - -/////////////////////////////////////////////////////////////////////////////// -// Comparors -/////////////////////////////////////////////////////////////////////////////// - -int32_t Compare::Int32::getValue() const -{ - return value; -} - -Compare::Int32::Int32(int32_t val) -{ - value = val; -} - -Compare::Int32::Int32() -{ - value = 0; -} - -int32_t Compare::Int32::compareTo(void* o) -{ - try { - Int32* other = (Int32*)o; - if (value == other->value) - return 0; - // Returns just -1 or 1 on inequality; doing math might overflow. - return value > other->value ? 1 : -1; - } catch(...) { - _CLTHROWA(CL_ERR_Runtime, "Couldnt compare types"); - } -} - -bool Compare::Int32::operator()(int32_t t1, int32_t t2) const -{ - return t1 > t2 ? true : false; -} - -size_t Compare::Int32::operator()(int32_t t) const -{ - return t; -} - -qreal Compare::Float::getValue() const -{ - return value; -} - -Compare::Float::Float(qreal val) -{ - value = val; -} - -int32_t Compare::Float::compareTo(void* o) -{ - try { - Float* other = (Float*)o; - if (value == other->value) - return 0; - // Returns just -1 or 1 on inequality; doing math might overflow. - return value > other->value ? 1 : -1; - } catch(...) { - _CLTHROWA(CL_ERR_Runtime,"Couldnt compare types"); - } -} - -bool Compare::Char::operator()(const char* val1, const char* val2) const -{ - if ( val1 == val2) - return false; - return (strcmp(val1, val2) < 0); -} - -size_t Compare::Char::operator()(const char* val1) const -{ - return CL_NS(util)::Misc::ahashCode(val1); -} - -#ifdef _UCS2 -bool Compare::WChar::operator()(const wchar_t* val1, const wchar_t* val2) const -{ - if ( val1==val2) - return false; - return (_tcscmp(val1, val2) < 0); -} - -size_t Compare::WChar::operator()(const wchar_t* val1) const -{ - return CL_NS(util)::Misc::whashCode(val1); -} -#endif - -const TCHAR* Compare::TChar::getValue() const -{ - return s; -} - -Compare::TChar::TChar() -{ - s = NULL; -} - -Compare::TChar::TChar(const TCHAR* str) -{ - this->s = str; -} - -int32_t Compare::TChar::compareTo(void* o) -{ - try { - TChar* os = (TChar*)o; - return _tcscmp(s, os->s); - } catch(...) { - _CLTHROWA(CL_ERR_Runtime,"Couldnt compare types"); - } - -} - -bool Compare::TChar::operator()(const TCHAR* val1, const TCHAR* val2) const -{ - if (val1 == val2) - return false; - - return (_tcscmp(val1, val2) < 0); -} - -size_t Compare::TChar::operator()(const TCHAR* val1) const -{ - return CL_NS(util)::Misc::thashCode(val1); -} - -bool Compare::Qstring::operator()(const QString& val1, const QString& val2) const -{ - return (val1 < val2); -} - -size_t Compare::Qstring::operator ()(const QString& val1) const -{ - return CL_NS(util)::Misc::qhashCode(val1); -} - -CL_NS_END diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/util/Equators.h qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/util/Equators.h --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/util/Equators.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/util/Equators.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,274 +0,0 @@ -/* - * Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team - * - * Distributable under the terms of either the Apache License (Version 2.0) or - * the GNU Lesser General Public License, as specified in the COPYING file. - * - * Changes are Copyright (C) 2015 The Qt Company Ltd. -*/ -#ifndef _lucene_util_Equators_ -#define _lucene_util_Equators_ - -#if defined(_LUCENE_PRAGMA_ONCE) -# pragma once -#endif - -#include - -//#ifdef QT_LINUXBASE -// we are going to use qreal now, we basically maintain our own clucene anyway -//// LSB doesn't define float_t - see http://bugs.linuxbase.org/show_bug.cgi?id=2374 -//typedef float float_t; -//#endif - -CL_NS_DEF(util) - -/////////////////////////////////////////////////////////////////////////////// -// Equators -/////////////////////////////////////////////////////////////////////////////// - -class Equals{ -public: - class Int32:public CL_NS_STD(binary_function) - { - public: - bool operator()( const int32_t val1, const int32_t val2 ) const; - }; - - class Char:public CL_NS_STD(binary_function) - { - public: - bool operator()( const char* val1, const char* val2 ) const; - }; -#ifdef _UCS2 - class WChar: public CL_NS_STD(binary_function) - { - public: - bool operator()( const wchar_t* val1, const wchar_t* val2 ) const; - }; - class TChar: public WChar{ - }; -#else - class TChar: public Char{ - }; -#endif - - template - class Void:public CL_NS_STD(binary_function) - { - public: - bool operator()( _cl* val1, _cl* val2 ) const{ - return val1==val2; - } - }; - - class Qstring : public CL_NS_STD(binary_function) - { - public: - bool operator() (const QString& val1, const QString& val2) const; - }; -}; - - -/////////////////////////////////////////////////////////////////////////////// -// Comparors -/////////////////////////////////////////////////////////////////////////////// - -class Comparable : LUCENE_BASE -{ -public: - virtual ~Comparable(){ - } - - virtual int32_t compareTo(void* o) = 0; -}; - -/** @internal */ -class Compare{ -public: - class _base - { // traits class for hash containers - public: - enum - { // parameters for hash table - bucket_size = 4, // 0 < bucket_size - min_buckets = 8 - }; // min_buckets = 2 ^^ N, 0 < N - - _base() - { - } - }; - - class Int32:public _base, public Comparable{ - int32_t value; - public: - int32_t getValue() const; - Int32(int32_t val); - Int32(); - int32_t compareTo(void* o); - bool operator()( int32_t t1, int32_t t2 ) const; - size_t operator()( int32_t t ) const; - }; - - - class Float:public Comparable{ - qreal value; - public: - qreal getValue() const; - Float(qreal val); - int32_t compareTo(void* o); - }; - - - class Char: public _base // - { - public: - bool operator()( const char* val1, const char* val2 ) const; - size_t operator()( const char* val1) const; - }; - -#ifdef _UCS2 - class WChar: public _base // - { - public: - bool operator()( const wchar_t* val1, const wchar_t* val2 ) const; - size_t operator()( const wchar_t* val1) const; - }; -#endif - - class TChar: public _base, public Comparable{ - const TCHAR* s; - public: - const TCHAR* getValue() const; - - TChar(); - TChar(const TCHAR* str); - int32_t compareTo(void* o); - bool operator()( const TCHAR* val1, const TCHAR* val2 ) const; - size_t operator()( const TCHAR* val1) const; - }; - - - template - class Void:public _base // - { - public: - int32_t compareTo(_cl* o){ - if ( this == o ) - return o; - else - return this > o ? 1 : -1; - } - bool operator()( _cl* t1, _cl* t2 ) const{ - return t1 > t2 ? true : false; - } - size_t operator()( _cl* t ) const{ - return (size_t)t; - } - }; - - class Qstring : public _base - { - public: - bool operator() (const QString& val1, const QString& val2) const; - size_t operator() (const QString& val1) const; - }; -}; - -/////////////////////////////////////////////////////////////////////////////// -// allocators -/////////////////////////////////////////////////////////////////////////////// - -class Deletor -{ -public: - - template - class Array{ - public: - static void doDelete(_kt* arr){ - _CLDELETE_LARRAY(arr); - } - }; - class tcArray{ - public: - static void doDelete(const TCHAR* arr){ - _CLDELETE_CARRAY(arr); - } - }; - class acArray{ - public: - static void doDelete(const char* arr){ - _CLDELETE_CaARRAY(arr); - } - }; - - class Unintern{ - public: - static void doDelete(TCHAR* arr); - }; - template - class Object{ - public: - static void doDelete(_kt* obj){ - _CLLDELETE(obj); - } - }; - template - class Void{ - public: - static void doDelete(_kt* obj){ - _CLVDELETE(obj); - } - }; - class Dummy{ - public: - static void doDelete(const void* nothing) - { - // TODO: remove all occurances where it hits this point - // CND_WARNING(false, "Deletor::Dummy::doDelete run, set deleteKey - // or deleteValue to false"); - } - }; - class DummyInt32{ - public: - static void doDelete(const int32_t nothing){ - } - }; - class DummyFloat{ - public: - static void doDelete(const qreal nothing){ - } - }; - template - class ConstNullVal{ - public: - static void doDelete(const _type nothing) - { - // TODO: remove all occurances where it hits this point - // CND_WARNING(false, "Deletor::Dummy::doDelete run, set deleteKey - // or deleteValue to false"); - } - }; - - template - class NullVal{ - public: - static void doDelete(_type nothing) - { - // TODO: remove all occurances where it hits this point - // CND_WARNING(false, "Deletor::Dummy::doDelete run, set deleteKey - // or deleteValue to false"); - } - }; - class DummyQString { - public: - static void doDelete(const QString& nothing) { - } - }; -}; -//////////////////////////////////////////////////////////////////////////////// - -CL_NS_END -#endif diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/util/FastCharStream.cpp qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/util/FastCharStream.cpp --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/util/FastCharStream.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/util/FastCharStream.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,107 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#include "CLucene/StdHeader.h" -#include "FastCharStream.h" - -#include "CLucene/util/Reader.h" - -CL_NS_DEF(util) - -const int32_t FastCharStream::maxRewindSize = LUCENE_MAX_WORD_LEN*2; - - FastCharStream::FastCharStream(Reader* reader): - pos(0), - rewindPos(0), - resetPos(0), - col(1), - line(1), - input(reader) - { - input->mark(maxRewindSize); - } - FastCharStream::~FastCharStream(){ - } - void FastCharStream::readChar(TCHAR &c) { - try{ - int32_t r = input->read(); - if ( r == -1 ) - input = NULL; - c = r; - }catch(CLuceneError& err){ - if ( err.number() == CL_ERR_IO ) - input = 0; - throw err; - } - } - int FastCharStream::GetNext() - { - // printf("getnext\n"); - if (input == 0 ) // end of file - { - _CLTHROWA(CL_ERR_IO,"warning : FileReader.GetNext : Read TCHAR over EOS."); - } - // this is rather inefficient - // implementing the functions from the java version of - // charstream will be much more efficient. - ++pos; - if ( pos > resetPos + maxRewindSize && rewindPos == 0) { - // move the marker one position (~expensive) - resetPos = pos-(maxRewindSize/2); - if ( resetPos != input->reset(resetPos) ) - _CLTHROWA(CL_ERR_IO,"Unexpected reset() result"); - input->mark(maxRewindSize); - input->skip((maxRewindSize/2) - 1); - } - TCHAR ch; - readChar(ch); - - if (input == NULL) { // eof - return -1; - } - if (rewindPos == 0) { - col += 1; - if(ch == '\n') { - line++; - col = 1; - } - } else { - rewindPos--; - } - return ch; - } - - void FastCharStream::UnGet(){ -// printf("UnGet \n"); - if (input == 0) - return; - if ( pos == 0 ) { - _CLTHROWA(CL_ERR_IO,"error : No character can be UnGet"); - } - rewindPos++; - - input->reset(pos-1); - pos--; - } - - int FastCharStream::Peek() { - int c = GetNext(); - UnGet(); - return c; - } - - bool FastCharStream::Eos() const { - return input==NULL; - } - - int32_t FastCharStream::Column() const { - return col; - } - - int32_t FastCharStream::Line() const { - return line; - } -CL_NS_END diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/util/FastCharStream.h qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/util/FastCharStream.h --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/util/FastCharStream.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/util/FastCharStream.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,55 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#ifndef _lucene_util_FastCharStream_ -#define _lucene_util_FastCharStream_ - -#if defined(_LUCENE_PRAGMA_ONCE) -# pragma once -#endif - -#include "CLucene/util/Reader.h" - -CL_NS_DEF(util) - - /** Ported implementation of the FastCharStream class. */ - class FastCharStream:LUCENE_BASE - { - static const int32_t maxRewindSize; - int32_t pos; - int32_t rewindPos; - int64_t resetPos; - int32_t col; - int32_t line; - // read character from stream return false on error - void readChar(TCHAR &); - public: - Reader* input; - - /// Initializes a new instance of the FastCharStream class LUCENE_EXPORT. - FastCharStream(Reader* reader); - ~FastCharStream(); - - /// Returns the next TCHAR from the stream. - int GetNext(); - - void UnGet(); - - /// Returns the current top TCHAR from the input stream without removing it. - int Peek(); - - - /// Returns True if the end of stream was reached. - bool Eos() const; - - /// Gets the current column. - int32_t Column() const; - - /// Gets the current line. - int32_t Line() const; - }; -CL_NS_END -#endif diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/util/fileinputstream.cpp qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/util/fileinputstream.cpp --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/util/fileinputstream.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/util/fileinputstream.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,103 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Jos van den Oever -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -/* This file is part of Strigi Desktop Search - * - * Copyright (C) 2006 Jos van den Oever - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library 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 - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public License - * along with this library; see the file COPYING.LIB. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - */ -#include "jstreamsconfig.h" -#include "fileinputstream.h" - -#ifndef UNDER_CE -#include -#endif -#include -namespace jstreams { - -const int32_t FileInputStream::defaultBufferSize = 1048576; -FileInputStream::FileInputStream(const char *filepath, int32_t buffersize) { - // try to open the file for reading - file = fopen(filepath, "rb"); - this->filepath = filepath; - if (file == 0) { - // handle error - error = "Could not read file '"; - error += filepath; - error += "': "; -#ifndef UNDER_CE - error += strerror(errno); -#endif - status = Error; - return; - } - // determine file size. if the stream is not seekable, the size will be -1 - fseek(file, 0, SEEK_END); - size = ftell(file); - fseek(file, 0, SEEK_SET); - - // if the file has size 0, make sure that it's really empty - // this is useful for filesystems like /proc that report files as size 0 - // for files that do contain content - if (size == 0) { - char dummy[1]; - size_t n = fread(dummy, 1, 1, file); - if (n == 1) { - size = -1; - fseek(file, 0, SEEK_SET); - } else { - fclose(file); - file = 0; - return; - } - } - - // allocate memory in the buffer - int32_t bufsize = (size <= buffersize) ?size+1 :buffersize; - mark(bufsize); -} -FileInputStream::~FileInputStream() { - if (file) { - if (fclose(file)) { - // handle error - error = "Could not close file '" + filepath + "'."; - } - } -} -int32_t -FileInputStream::fillBuffer(char* start, int32_t space) { - if (file == 0) return -1; - // read into the buffer - int32_t nwritten = fread(start, 1, space, file); - // check the file stream status - if (ferror(file)) { - error = "Could not read from file '" + filepath + "'."; - fclose(file); - file = 0; - status = Error; - return -1; - } - if (feof(file)) { - fclose(file); - file = 0; - } - return nwritten; -} -} diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/util/fileinputstream.h qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/util/fileinputstream.h --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/util/fileinputstream.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/util/fileinputstream.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,38 +0,0 @@ -/** - * Copyright 2003-2006 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#ifndef FILEINPUTSTREAM_H -#define FILEINPUTSTREAM_H - -#include "bufferedstream.h" - -namespace jstreams { - -class FileInputStream : public BufferedInputStream { -private: - FILE *file; - std::string filepath; - -public: - static const int32_t defaultBufferSize; - FileInputStream(const char *filepath, int32_t buffersize=defaultBufferSize); - ~FileInputStream(); - int32_t fillBuffer(char* start, int32_t space); -}; - -} // end namespace jstreams - -#endif - diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/util/inputstreambuffer.h qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/util/inputstreambuffer.h --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/util/inputstreambuffer.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/util/inputstreambuffer.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,126 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Jos van den Oever -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -/* This file is part of Strigi Desktop Search - * - * Copyright (C) 2006 Jos van den Oever - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library 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 - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public License - * along with this library; see the file COPYING.LIB. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - */ -#ifndef INPUTSTREAMBUFFER_H -#define INPUTSTREAMBUFFER_H - -#include - -namespace jstreams { - -template -class InputStreamBuffer { -private: -public: - T* start; - int32_t size; - T* readPos; - int32_t avail; - - InputStreamBuffer(); - ~InputStreamBuffer(); - void setSize(int32_t size); - int32_t read(const T*& start, int32_t max=0); - - /** - * This function prepares the buffer for a new write. - * returns the number of available places. - **/ - int32_t makeSpace(int32_t needed); -}; - -template -InputStreamBuffer::InputStreamBuffer() { - readPos = start = 0; - size = avail = 0; -} -template -InputStreamBuffer::~InputStreamBuffer() { - free(start); -} -template -void -InputStreamBuffer::setSize(int32_t size) { - // store pointer information - int32_t offset = (int32_t)(readPos - start); - - // allocate memory in the buffer - if ( start == 0 ) - start = (T*)malloc(size*sizeof(T)); - else - start = (T*)realloc(start, size*sizeof(T)); - this->size = size; - - // restore pointer information - readPos = start + offset; -} -template -int32_t -InputStreamBuffer::makeSpace(int32_t needed) { - // determine how much space is available for writing - int32_t space = size - ((int32_t)(readPos - start)) - avail; - if (space >= needed) { - // there's enough space - return space; - } - - if (avail) { - if (readPos != start) { -// printf("moving\n"); - // move data to the start of the buffer - memmove(start, readPos, avail*sizeof(T)); - space += (int32_t)(readPos - start); - readPos = start; - } - } else { - // we may start writing at the start of the buffer - readPos = start; - space = size; - } - if (space >= needed) { - // there's enough space now - return space; - } - - // still not enough space, we have to allocate more -// printf("resize %i %i %i %i %i\n", avail, needed, space, size + needed - space, size); - setSize(size + needed - space); - return needed; -} -template -int32_t -InputStreamBuffer::read(const T*& start, int32_t max) { - start = readPos; - if (max <= 0 || max > avail) { - max = avail; - } - readPos += max; - avail -= max; - return max; -} - -} // end namespace jstreams - -#endif diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/util/jstreamsconfig.h qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/util/jstreamsconfig.h --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/util/jstreamsconfig.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/util/jstreamsconfig.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,9 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ - -//this is just a compatibility header for jstreams -#include "CLucene/StdHeader.h" diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/util/Misc.cpp qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/util/Misc.cpp --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/util/Misc.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/util/Misc.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,295 +0,0 @@ -/* - * Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team - * - * Distributable under the terms of either the Apache License (Version 2.0) or - * the GNU Lesser General Public License, as specified in the COPYING file. - * - * Changes are Copyright (C) 2015 The Qt Company Ltd. -*/ -#include "CLucene/StdHeader.h" -#include "Misc.h" - -#ifdef _CL_TIME_WITH_SYS_TIME -# include -# include -#else -# if defined(_CL_HAVE_SYS_TIME_H) -# include -# else -# include -# endif -#endif - -#ifdef _CL_HAVE_SYS_TIMEB_H -# include -#endif - -#ifdef UNDER_CE -#include -#endif - -CL_NS_DEF(util) - -uint64_t Misc::currentTimeMillis() -{ -#ifndef UNDER_CE -#if defined(_CLCOMPILER_MSVC) || defined(__MINGW32__) || defined(__BORLANDC__) - struct _timeb tstruct; - _ftime(&tstruct); - - return (((uint64_t) tstruct.time) * 1000) + tstruct.millitm; -#else - struct timeval tstruct; - if (gettimeofday(&tstruct, NULL) < 0) { - _CLTHROWA(CL_ERR_Runtime,"Error in gettimeofday call."); - } - - return (((uint64_t) tstruct.tv_sec) * 1000) + tstruct.tv_usec / 1000; -#endif -#else //UNDER_CE - QT_USE_NAMESPACE - QTime t = QTime::currentTime(); - return t.second() * 1000 + t.msec(); -#endif //UNDER_CE -} - -// #pragma mark -- char related utils - -size_t Misc::ahashCode(const char* str) -{ - // Compute the hash code using a local variable to be reentrant. - size_t hashCode = 0; - while (*str != 0) - hashCode = hashCode * 31 + *str++; - return hashCode; -} - -size_t Misc::ahashCode(const char* str, size_t len) -{ - // Compute the hash code using a local variable to be reentrant. - size_t count = len; - size_t hashCode = 0; - for (size_t i = 0; i < count; i++) - hashCode = hashCode * 31 + *str++; - return hashCode; -} - -char* Misc::ajoin(const char* a, const char* b, const char* c, const char* d, - const char* e, const char* f) -{ -#define aLEN(x) (x == NULL ? 0 : strlen(x)) - const size_t totalLen = aLEN(a) + aLEN(b) + aLEN(c) + aLEN(d) + aLEN(e) - + aLEN(f) + sizeof(char); /* Space for terminator. */ - - char* buf = _CL_NEWARRAY(char, totalLen); - buf[0] = 0; - if (a != NULL) - strcat(buf, a); - - if (b != NULL) - strcat(buf, b); - - if (c != NULL) - strcat(buf, c); - - if (d != NULL) - strcat(buf, d); - - if (e != NULL) - strcat(buf, e); - - if (f != NULL) - strcat(buf, f); - - return buf; -} - -char* Misc::segmentname(const char* segment, const char* ext, int32_t x) -{ - CND_PRECONDITION(ext != NULL, "ext is NULL"); - - char* buf = _CL_NEWARRAY(char, CL_MAX_PATH); - if (x == -1) - _snprintf(buf, CL_MAX_PATH, "%s%s", segment, ext); - else - _snprintf(buf, CL_MAX_PATH, "%s%s%d", segment, ext, x); - return buf; -} - -void Misc::segmentname(char* buffer, int32_t bufferLen, const char* segment, - const char* ext, int32_t x) -{ - CND_PRECONDITION(buffer != NULL, "buffer is NULL"); - CND_PRECONDITION(segment != NULL, "segment is NULL"); - CND_PRECONDITION(ext != NULL, "extention is NULL"); - - if (x == -1) - _snprintf(buffer, bufferLen, "%s%s", segment, ext); - else - _snprintf(buffer, bufferLen, "%s%s%d", segment, ext, x); -} - -// #pragma mark -- qt related utils - -size_t Misc::qhashCode(const QString& str) -{ - size_t hashCode = 0; - for (int i = 0; i < str.count(); ++i) - hashCode = hashCode * 31 + str.at(i).unicode(); - return hashCode; -} - -size_t Misc::qhashCode(const QString& str, size_t len) -{ - size_t count = len; - size_t hashCode = 0; - for (size_t i = 0; i < count; ++i) - hashCode = hashCode * 31 + str.at(i).unicode(); - return hashCode; -} - -QString Misc::qjoin(const QString &a, const QString &b, const QString &c, - const QString &d, const QString &e, const QString &f) -{ - QString buffer; - - if (!a.isNull() && !a.isEmpty()) - buffer.append(a); - - if (!b.isNull() && !b.isEmpty()) - buffer.append(b); - - if (!c.isNull() && !c.isEmpty()) - buffer.append(c); - - if (!d.isNull() && !d.isEmpty()) - buffer.append(d); - - if (!e.isNull() && !e.isEmpty()) - buffer.append(e); - - if (!f.isNull() && !f.isEmpty()) - buffer.append(f); - - return buffer; -} - -QString Misc::segmentname(const QString& segment, const QString& ext, int32_t x) -{ - CND_PRECONDITION(!ext.isEmpty(), "ext is NULL"); - - if (x == -1) - return QString(segment + ext); - - QString buf(QLatin1String("%1%2%3")); - return buf.arg(segment).arg(ext).arg(x); -} - -void Misc::segmentname(QString& buffer, int32_t bufferLen, - const QString& segment, const QString& ext, int32_t x) -{ - CND_PRECONDITION(!segment.isEmpty(), "segment is NULL"); - CND_PRECONDITION(!ext.isEmpty(), "extention is NULL"); - - buffer = segment + ext; - if (x != -1) - buffer += QString::number(x); -} - -// #pragma mark -- TCHAR related utils - -int32_t Misc::stringDifference(const TCHAR* s1, int32_t len1, const TCHAR* s2, - int32_t len2) -{ - int32_t len = len1 < len2 ? len1 : len2; - for (int32_t i = 0; i < len; i++) - if (s1[i] != s2[i]) - return i; - return len; -} - -/* DSR:CL_BUG: (See comment for join method in Misc.h): */ -TCHAR* Misc::join (const TCHAR* a, const TCHAR* b, const TCHAR* c, - const TCHAR* d, const TCHAR* e, const TCHAR* f) -{ -#define LEN(x) (x == NULL ? 0 : _tcslen(x)) - const size_t totalLen = LEN(a) + LEN(b) + LEN(c) + LEN(d) + LEN(e) + LEN(f) - + sizeof(TCHAR); /* Space for terminator. */ - - TCHAR* buf = _CL_NEWARRAY(TCHAR, totalLen); - buf[0] = 0; - if (a != NULL) - _tcscat(buf, a); - - if (b != NULL) - _tcscat(buf, b); - - if (c != NULL) - _tcscat(buf, c); - - if (d != NULL) - _tcscat(buf, d); - - if (e != NULL) - _tcscat(buf, e); - - if (f != NULL) - _tcscat(buf, f); - - return buf; -} - -#ifdef _UCS2 - -size_t Misc::whashCode(const wchar_t* str) -{ - // Compute the hash code using a local variable to be reentrant. - size_t hashCode = 0; - while (*str != 0) - hashCode = hashCode * 31 + *str++; - return hashCode; -} - -size_t Misc::whashCode(const wchar_t* str, size_t len) -{ - // Compute the hash code using a local variable to be reentrant. - size_t count = len; - size_t hashCode = 0; - for (size_t i = 0; i < count; i++) - hashCode = hashCode * 31 + *str++; - return hashCode; -} - -char* Misc::_wideToChar(const wchar_t* s CL_FILELINEPARAM) -{ - size_t len = _tcslen(s); - char* msg = _CL_NEWARRAY(char, len + 1); - _cpywideToChar(s, msg, len + 1); - return msg; -} - -void Misc::_cpywideToChar(const wchar_t* s, char* d, size_t len) -{ - size_t sLen = wcslen(s); - for (uint32_t i = 0; i < len && i < sLen + 1; i++) - d[i] = LUCENE_OOR_CHAR(s[i]); -} - -wchar_t* Misc::_charToWide(const char* s CL_FILELINEPARAM) -{ - size_t len = strlen(s); - wchar_t* msg = _CL_NEWARRAY(wchar_t, len + 1); - _cpycharToWide(s, msg, len + 1); - return msg; -} - -void Misc::_cpycharToWide(const char* s, wchar_t* d, size_t len) -{ - size_t sLen = strlen(s); - for (uint32_t i = 0; i < len && i < sLen + 1; i++) - d[i] = s[i]; -} - -#endif - -CL_NS_END diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/util/Misc.h qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/util/Misc.h --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/util/Misc.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/util/Misc.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,75 +0,0 @@ -/* - * Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team - * - * Distributable under the terms of either the Apache License (Version 2.0) or - * the GNU Lesser General Public License, as specified in the COPYING file. - * - * Changes are Copyright (C) 2015 The Qt Company Ltd. -*/ -#ifndef _lucene_util_Misc_H -#define _lucene_util_Misc_H - -#if defined(_LUCENE_PRAGMA_ONCE) -# pragma once -#endif - -#include - -CL_NS_DEF(util) - -class Misc -{ -public: - static uint64_t currentTimeMillis(); - - static size_t ahashCode(const char* str); - static size_t ahashCode(const char* str, size_t len); - static char* ajoin(const char* a, const char* b, const char* c = NULL, - const char* d = NULL, const char* e = NULL, const char* f = NULL); - static char* segmentname(const char* segment, const char* ext, int32_t x = -1); - static void segmentname(char* buffer, int32_t bufferLen, const char* segment, - const char* ext, int32_t x = -1); - - static size_t qhashCode(const QString& str); - static size_t qhashCode(const QString& str, size_t len); - static QString qjoin(const QString& a, const QString& b, - const QString& c = QString(), const QString& d = QString(), - const QString& e = QString(), const QString& f = QString()); - static QString segmentname(const QString& segment, const QString& ext, - int32_t x = -1 ); - static void segmentname(QString& buffer, int32_t bufferLen, - const QString& Segment, const QString& ext, int32_t x = -1); - - // Compares two strings, character by character, and returns the - // first position where the two strings differ from one another. - // - // @param s1 The first string to compare - // @param s1Len The length of the first string to compare - // @param s2 The second string to compare - // @param s2Len The length of the second string to compare - // @return The first position where the two strings differ. - static int32_t stringDifference(const TCHAR* s1, int32_t s1Len, - const TCHAR* s2, int32_t s2Len); - static TCHAR* join (const TCHAR* a, const TCHAR* b, const TCHAR* c = NULL, - const TCHAR* d = NULL, const TCHAR* e = NULL, const TCHAR* f = NULL ); - -#ifdef _UCS2 - static size_t whashCode(const wchar_t* str); - static size_t whashCode(const wchar_t* str, size_t len); - -# define thashCode whashCode - - static char* _wideToChar(const wchar_t* s CL_FILELINEPARAM); - static void _cpywideToChar(const wchar_t* s, char* d, size_t len); - - static wchar_t* _charToWide(const char* s CL_FILELINEPARAM); - static void _cpycharToWide(const char* s, wchar_t* d, size_t len); - -#else -# define thashCode ahashCode -#endif -}; - -CL_NS_END - -#endif diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/util/PriorityQueue.h qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/util/PriorityQueue.h --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/util/PriorityQueue.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/util/PriorityQueue.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,177 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#ifndef _lucene_util_PriorityQueue_ -#define _lucene_util_PriorityQueue_ - -#if defined(_LUCENE_PRAGMA_ONCE) -# pragma once -#endif -CL_NS_DEF(util) - -// A PriorityQueue maintains a partial ordering of its elements such that the -// least element can always be found in constant time. Put()'s and pop()'s -// require log(size) time. -template class PriorityQueue:LUCENE_BASE { - private: - _type* heap; //(was object[]) - size_t _size; - bool dk; - size_t maxSize; - - void upHeap(){ - size_t i = _size; - _type node = heap[i]; // save bottom node (WAS object) - int32_t j = ((uint32_t)i) >> 1; - while (j > 0 && lessThan(node,heap[j])) { - heap[i] = heap[j]; // shift parents down - i = j; - j = ((uint32_t)j) >> 1; - } - heap[i] = node; // install saved node - } - void downHeap(){ - size_t i = 1; - _type node = heap[i]; // save top node - size_t j = i << 1; // find smaller child - size_t k = j + 1; - if (k <= _size && lessThan(heap[k], heap[j])) { - j = k; - } - while (j <= _size && lessThan(heap[j],node)) { - heap[i] = heap[j]; // shift up child - i = j; - j = i << 1; - k = j + 1; - if (k <= _size && lessThan(heap[k], heap[j])) { - j = k; - } - } - heap[i] = node; // install saved node - } - - protected: - PriorityQueue(){ - this->_size = 0; - this->dk = false; - this->heap = NULL; - this->maxSize = 0; - } - - // Determines the ordering of objects in this priority queue. Subclasses - // must define this one method. - virtual bool lessThan(_type a, _type b)=0; - - // Subclass constructors must call this. - void initialize(const int32_t maxSize, bool deleteOnClear){ - _size = 0; - dk = deleteOnClear; - int32_t heapSize = maxSize + 1; - heap = _CL_NEWARRAY(_type,heapSize); - this->maxSize = maxSize; - } - - public: - virtual ~PriorityQueue(){ - clear(); - _CLDELETE_ARRAY(heap); - } - - /** - * Adds an Object to a PriorityQueue in log(size) time. - * If one tries to add more objects than maxSize from initialize - * a RuntimeException (ArrayIndexOutOfBound) is thrown. - */ - void put(_type element){ - if ( _size>=maxSize ) - _CLTHROWA(CL_ERR_IndexOutOfBounds,"add is out of bounds"); - - ++_size; - heap[_size] = element; - upHeap(); - } - - /** - * Adds element to the PriorityQueue in log(size) time if either - * the PriorityQueue is not full, or not lessThan(element, top()). - * @param element - * @return true if element is added, false otherwise. - */ - bool insert(_type element){ - if(_size < maxSize){ - put(element); - return true; - }else if(_size > 0 && !lessThan(element, top())){ - if ( dk ){ - _valueDeletor::doDelete(heap[1]); - } - heap[1] = element; - adjustTop(); - return true; - }else - return false; - } - - /** - * Returns the least element of the PriorityQueue in constant time. - */ - _type top(){ - if (_size > 0) - return heap[1]; - else - return NULL; - } - - /** Removes and returns the least element of the PriorityQueue in log(size) - * time. - */ - _type pop(){ - if (_size > 0) { - _type result = heap[1]; // save first value - heap[1] = heap[_size]; // move last to first - - heap[_size] = (_type)0; // permit GC of objects - --_size; - downHeap(); // adjust heap - return result; - } else - return (_type)NULL; - } - - /**Should be called when the object at top changes values. Still log(n) - worst case, but it's at least twice as fast to

-		    { pq.top().change(); pq.adjustTop(); }
-		   
instead of
-		    { o = pq.pop(); o.change(); pq.push(o); }
-		   
- */ - void adjustTop(){ - downHeap(); - } - - - /** - * Returns the number of elements currently stored in the PriorityQueue. - */ - size_t size(){ - return _size; - } - - /** - * Removes all entries from the PriorityQueue. - */ - void clear(){ - for (size_t i = 1; i <= _size; ++i){ - if ( dk ){ - _valueDeletor::doDelete(heap[i]); - } - } - _size = 0; - } - }; - -CL_NS_END -#endif diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/util/Reader.cpp qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/util/Reader.cpp --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/util/Reader.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/util/Reader.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,186 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#include "CLucene/StdHeader.h" -#include "Reader.h" - -CL_NS_DEF(util) - -StringReader::StringReader ( const TCHAR* value ): - Reader(NULL,true){ - reader = new jstreams::StringReader(value); -} -StringReader::StringReader ( const TCHAR* value, const int32_t length ): - Reader(NULL,true){ - reader = new jstreams::StringReader(value,length); -} -StringReader::StringReader ( const TCHAR* value, const int32_t length, bool copyData ): - Reader(NULL,true){ - reader = new jstreams::StringReader(value,length, copyData); -} -StringReader::~StringReader(){ -} - - -FileReader::FileReader ( const char* path, const char* enc, - const int32_t cachelen, const int32_t /*cachebuff*/ ): - Reader(NULL, true) -{ - this->input = new jstreams::FileInputStream(path, cachelen); - this->reader = new SimpleInputStreamReader(this->input,enc); //(this is a jstream object) -} - -FileReader::~FileReader (){ - if (input) - delete input; -} -int32_t FileReader::read(const TCHAR*& start, int32_t _min, int32_t _max) { - return reader->read(start, _min, _max); -} -int64_t FileReader::mark(int32_t readlimit) { - return reader->mark(readlimit); -} -int64_t FileReader::reset(int64_t newpos) { - return reader->reset(newpos); -} - - - -SimpleInputStreamReader::SimpleInputStreamReader(jstreams::StreamBase *i, const char* enc) -{ - finishedDecoding = false; - input = i; - charbuf.setSize(262); - - if ( strcmp(enc,"ASCII")==0 ) - encoding = ASCII; -#ifdef _UCS2 - else if ( strcmp(enc,"UTF-8")==0 ) - encoding = UTF8; - else if ( strcmp(enc,"UCS-2LE")==0 ) - encoding = UCS2_LE; -#endif - else - _CLTHROWA(CL_ERR_IllegalArgument,"Unsupported encoding, use jstreams iconv based instead"); - - mark(262); - charsLeft = 0; -} -SimpleInputStreamReader::~SimpleInputStreamReader(){ - input = NULL; -} -int32_t SimpleInputStreamReader::decode(TCHAR* start, int32_t space){ - // decode from charbuf - const char *inbuf = charbuf.readPos; - const char *inbufend = charbuf.readPos + charbuf.avail; - TCHAR *outbuf = start; - const TCHAR *outbufend = outbuf + space; - - if ( encoding == ASCII ){ - while ( outbuf inbufend ){ - break; //character incomplete - }else{ - size_t rd = lucene_utf8towc(outbuf,inbuf,inbufend-inbuf); - if ( rd == 0 ){ - error = "Invalid multibyte sequence."; - status = jstreams::Error; - return -1; - }else{ - inbuf+=rd; - outbuf++; - } - } - } -#endif //_UCS2 - }else - _CLTHROWA(CL_ERR_Runtime,"Unexpected encoding"); - - if ( outbuf < outbufend ) { - //we had enough room to convert the entire input - if ( inbuf < inbufend ) { - // last character is incomplete - // move from inbuf to the end to the start of - // the buffer - memmove(charbuf.start, inbuf, inbufend-inbuf); - charbuf.readPos = charbuf.start; - charbuf.avail = inbufend-inbuf; - } else if ( outbuf < outbufend ) { //input sequence was completely converted - charbuf.readPos = charbuf.start; - charbuf.avail = 0; - if (input == NULL) { - finishedDecoding = true; - } - } - } else { - charbuf.readPos += charbuf.avail - (inbufend-inbuf); - charbuf.avail = inbufend-inbuf; - } - return outbuf-start; -} - -int32_t SimpleInputStreamReader::fillBuffer(TCHAR* start, int32_t space) { - // fill up charbuf - if (input && charbuf.readPos == charbuf.start) { - const char *begin; - int32_t numRead; - numRead = input->read(begin, 1, charbuf.size - charbuf.avail); - //printf("filled up charbuf\n"); - if (numRead < -1) { - error = input->getError(); - status = jstreams::Error; - input = 0; - return numRead; - } - if (numRead < 1) { - // signal end of input buffer - input = 0; - if (charbuf.avail) { - error = "stream ends on incomplete character"; - status = jstreams::Error; - } - return -1; - } - // copy data into other buffer - memmove( charbuf.start + charbuf.avail, begin, numRead * sizeof(char)); - charbuf.avail = numRead + charbuf.avail; - } - // decode - int32_t n = decode(start, space); - //printf("decoded %i\n", n); - return n; -} - -CL_NS_END diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/util/Reader.h qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/util/Reader.h --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/util/Reader.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/util/Reader.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,138 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#ifndef _lucene_util_Reader_ -#define _lucene_util_Reader_ - -#if defined(_LUCENE_PRAGMA_ONCE) -# pragma once -#endif - -#include "streambase.h" -#include "stringreader.h" -#include "fileinputstream.h" -#include "bufferedstream.h" - -CL_NS_DEF(util) -/** -* An inline wrapper that reads from Jos van den Oever's jstreams -*/ -class Reader:LUCENE_BASE { -typedef jstreams::StreamBase jsReader; -public: - bool deleteReader; - jsReader* reader; - - Reader(jsReader* reader, bool deleteReader){ - this->reader = reader; - this->deleteReader = deleteReader; - } - virtual ~Reader(){ - if ( deleteReader ) - delete reader; - reader = NULL; - } - inline int read(){ - const TCHAR*b; - int32_t nread = reader->read(b, 1,1); - if ( nread < -1 ) //if not eof - _CLTHROWA(CL_ERR_IO,reader->getError() ); - else if ( nread == -1 ) - return -1; - else - return b[0]; - } - /** - * Read at least 1 character, and as much as is conveniently available - */ - inline int32_t read(const TCHAR*& start){ - int32_t nread = reader->read(start,1,0); - if ( nread < -1 ) //if not eof - _CLTHROWA(CL_ERR_IO,reader->getError()); - else - return nread; - } - inline int32_t read(const TCHAR*& start, int32_t len){ - int32_t nread = reader->read(start, len, len); - if ( nread < -1 ) //if not eof - _CLTHROWA(CL_ERR_IO,reader->getError()); - else - return nread; - } - inline int64_t skip(int64_t ntoskip){ - int64_t skipped = reader->skip(ntoskip); - if ( skipped < 0 ) - _CLTHROWA(CL_ERR_IO,reader->getError()); - else - return skipped; - } - inline int64_t mark(int32_t readAheadlimit){ - int64_t pos = reader->mark(readAheadlimit); - if ( pos < 0 ) - _CLTHROWA(CL_ERR_IO,reader->getError()); - else - return pos; - } - int64_t reset(int64_t pos){ - int64_t r = reader->reset(pos); - if ( r < 0 ) - _CLTHROWA(CL_ERR_IO,reader->getError()); - else - return r; - } -}; - -///A helper class which constructs a the jstreams StringReader. -class StringReader: public Reader{ -public: - StringReader ( const TCHAR* value ); - StringReader ( const TCHAR* value, const int32_t length ); - StringReader ( const TCHAR* value, const int32_t length, bool copyData ); - ~StringReader(); -}; - -/** A very simple inputstreamreader implementation. For a -* more complete InputStreamReader, use the jstreams version -* located in the contrib package -*/ -class SimpleInputStreamReader: public jstreams::BufferedInputStream{ - int32_t decode(TCHAR* start, int32_t space); - int encoding; - enum{ - ASCII=1, - UTF8=2, - UCS2_LE=3 - }; - bool finishedDecoding; - jstreams::StreamBase* input; - int32_t charsLeft; - - jstreams::InputStreamBuffer charbuf; - int32_t fillBuffer(TCHAR* start, int32_t space); -public: - SimpleInputStreamReader(jstreams::StreamBase *i, const char* encoding); - ~SimpleInputStreamReader(); -}; - -/** -* A helper class which constructs a FileReader with a specified -* simple encodings, or a given inputstreamreader -*/ -class FileReader: public Reader{ - jstreams::FileInputStream* input; -public: - FileReader ( const char* path, const char* enc, - const int32_t cachelen = 13, - const int32_t cachebuff = 14 ); //todo: optimise these cache values - ~FileReader (); - - int32_t read(const TCHAR*& start, int32_t _min, int32_t _max); - int64_t mark(int32_t readlimit); - int64_t reset(int64_t); -}; - -CL_NS_END -#endif diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/util/streambase.h qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/util/streambase.h --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/util/streambase.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/util/streambase.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,148 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Jos van den Oever -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -* -* Changes are Copyright (C) 2015 The Qt Company Ltd. -------------------------------------------------------------------------------*/ -/* This file is part of Strigi Desktop Search - * - * Copyright (C) 2006 Jos van den Oever - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library 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 - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public License - * along with this library; see the file COPYING.LIB. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - */ -#ifndef STREAMBASE_H -#define STREAMBASE_H - -#include - -#if defined(_BUILD_FOR_QT_) - #include "StdHeader.h" -#endif - -#define INT32MAX 0x7FFFFFFFL - -namespace jstreams { - -enum StreamStatus { Ok, Eof, Error }; - -/** - * @short Base class for stream read access to many different file types. - * - * This class is based on the interface java.io.InputStream. It allows - * for uniform access to streamed resources. - * The main difference with the java equivalent is a performance improvement. - * When reading data, data is not copied into a buffer provided by the caller, - * but a pointer to the read data is provided. This makes this interface - * especially useful for deriving from it and implementing filterers or - * transformers. - */ -// java mapping: long=int64, int=int32, byte=uint8_t -template -class StreamBase { -protected: - int64_t size; - int64_t position; - std::string error; - StreamStatus status; -public: - StreamBase() :size(-1), position(0), status(Ok){ } - virtual ~StreamBase(){} - /** - * @brief Return a string representation of the last error. - * If no error has occurred, an empty string is returned. - **/ - const char* getError() const { return error.c_str(); } - StreamStatus getStatus() const { return status; } - /** - * @brief Get the current position in the stream. - * The value obtained from this function can be used to reset the stream. - **/ - int64_t getPosition() const { return position; } - /** - * @brief Return the size of the stream. - * If the size of the stream is unknown, -1 - * is returned. If the end of the stream has been reached the size is - * always known. - **/ - int64_t getSize() const { return size; } - /** - * @brief Reads characters from the stream and sets \a start to - * the first character that was read. - * - * If @p ntoread is @c 0, then at least one character will be read. - * - * @param start Pointer passed by reference that will be set to point to - * the retrieved array of characters. If the end of the stream - * is encountered or an error occurs, the value of @p start - * is undefined. - * @param min The number of characters to read from the stream. - * @param max The maximum number of characters to read from the stream. - * @return the number of characters that were read. If -1 is returned, the - * end of the stream has been reached. If -2 is returned, an error - * has occurred. - **/ - virtual int32_t read(const T*& start, int32_t min, int32_t max) = 0; - /** - * Skip @param ntoskip bytes. Unless an error occurs or the end of file is - * encountered, this amount of bytes is skipped. - * This function returns new position in the stream. - **/ - virtual int64_t skip(int64_t ntoskip); - /** - * @brief Repositions this stream to given requested position. - * Reset is guaranteed to work after a successful call to read(), - * when the new position is in the range of the data returned by read(). - * This means that @p pos must lie between than the position - * corresponding to the start parameter (x) of the read function - * and the position corresponding to the last position in the returned - * buffer (x + nread). - **/ - virtual int64_t reset(int64_t pos) = 0; - int64_t mark(int32_t readlimit) { - int64_t p = getPosition(); - const T* ptr; - read(ptr, readlimit, -1); - return reset(p); - } -}; -#define SKIPSTEP 1024 -template -int64_t -StreamBase::skip(int64_t ntoskip) { - const T *begin; - int32_t nread; - int64_t skipped = 0; - while (ntoskip) { - int32_t step = (int32_t)((ntoskip > SKIPSTEP) ?SKIPSTEP :ntoskip); - nread = read(begin, 1, step); - if (nread < -1 ) { - // an error occurred - return nread; - } else if (nread < 1) { - ntoskip = 0; - } else { - skipped += nread; - ntoskip -= nread; - } - } - return skipped; -} - -} // end namespace jstreams - -#endif diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/util/StringBuffer.cpp qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/util/StringBuffer.cpp --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/util/StringBuffer.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/util/StringBuffer.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,335 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#include "CLucene/StdHeader.h" -#include "StringBuffer.h" -#include "Misc.h" - -CL_NS_DEF(util) - - StringBuffer::StringBuffer(TCHAR* buf,int32_t maxlen, const bool consumeBuffer){ - buffer = buf; - bufferLength = maxlen; - bufferOwner = !consumeBuffer; - len = 0; - } - StringBuffer::StringBuffer(){ - //Func - Constructor. Allocates a buffer with the default length. - //Pre - true - //Post - buffer of length bufferLength has been allocated - - //Initialize - bufferLength = LUCENE_DEFAULT_TOKEN_BUFFER_SIZE; - len = 0; - //Allocate a buffer of length bufferLength - buffer = _CL_NEWARRAY(TCHAR,bufferLength); - bufferOwner = true; - } - - StringBuffer::StringBuffer(const int32_t initSize){ - //Func - Constructor. Allocates a buffer of length initSize + 1 - //Pre - initSize > 0 - //Post - A buffer has been allocated of length initSize + 1 - - //Initialize the bufferLength to initSize + 1 The +1 is for the terminator '\0' - bufferLength = initSize + 1; - len = 0; - //Allocate a buffer of length bufferLength - buffer = _CL_NEWARRAY(TCHAR,bufferLength); - bufferOwner = true; - } - - StringBuffer::StringBuffer(const TCHAR* value){ - //Func - Constructor. - // Creates an instance of Stringbuffer containing a copy of the string value - //Pre - value != NULL - //Post - An instance of StringBuffer has been created containing the copy of the string value - - //Initialize the length of the string to be stored in buffer - len = (int32_t) _tcslen(value); - - //Calculate the space occupied in buffer by a copy of value - const int32_t occupiedLength = len + 1; - - // Minimum allocated buffer length is LUCENE_DEFAULT_TOKEN_BUFFER_SIZE. - bufferLength = (occupiedLength >= LUCENE_DEFAULT_TOKEN_BUFFER_SIZE - ? occupiedLength : LUCENE_DEFAULT_TOKEN_BUFFER_SIZE); - - //Allocate a buffer of length bufferLength - buffer = _CL_NEWARRAY(TCHAR,bufferLength); - bufferOwner = true; - //Copy the string value into buffer - _tcsncpy(buffer, value, occupiedLength); - //Assert that the buffer has been terminated at the end of the string - CND_PRECONDITION (buffer[len] == '\0', "Buffer was not correctly terminated"); - } - - StringBuffer::~StringBuffer() { - // Func - Destructor - // Pre - true - // Post - Instanc has been destroyed - - if( bufferOwner ){ - _CLDELETE_CARRAY(buffer); - }else - buffer = NULL; - } - void StringBuffer::clear(){ - //Func - Clears the Stringbuffer and resets it to it default empty state - //Pre - true - //Post - pre(buffer) has been destroyed and a new one has been allocated - - //Destroy the current buffer if present - _CLDELETE_CARRAY(buffer); - - //Initialize - len = 0; - bufferLength = LUCENE_DEFAULT_TOKEN_BUFFER_SIZE; - //Allocate a buffer of length bufferLength - buffer = _CL_NEWARRAY(TCHAR,bufferLength); - } - - void StringBuffer::appendChar(const TCHAR character) { - //Func - Appends a single character - //Pre - true - //Post - The character has been appended to the string in the buffer - - //Check if the current buffer length is sufficient to have the string value appended - if (len + 1 > bufferLength){ - //Have the size of the current string buffer increased because it is too small - growBuffer(len + 1); - } - //Put character at position len which is the end of the string in the buffer - //Note that this action might overwrite the terminator of the string '\0', which - //is kind of tricky - buffer[len] = character; - //Increase the len by to represent the correct length of the string in the buffer - len++; - } - - void StringBuffer::append(const TCHAR* value) { - //Func - Appends a copy of the string value - //Pre - value != NULL - //Post - value has been copied and appended to the string in buffer - - append(value, _tcslen(value)); - } - void StringBuffer::append(const TCHAR* value, size_t appendedLength) { - //Func - Appends a copy of the string value - //Pre - value != NULL - // appendedLength contains the length of the string value which is to be appended - //Post - value has been copied and appended to the string in buffer - - //Check if the current buffer length is sufficient to have the string value appended - if (len + appendedLength + 1 > bufferLength){ - //Have the size of the current string buffer increased because it is too small - growBuffer(len + appendedLength + 1); - } - - //Copy the string value into the buffer at postion len - _tcsncpy(buffer + len, value, appendedLength); - - //Add the length of the copied string to len to reflect the new length of the string in - //the buffer (Note: len is not the bufferlength!) - len += appendedLength; - } - - void StringBuffer::appendInt(const int32_t value) { - //Func - Appends an integer (after conversion to a character string) - //Pre - true - //Post - The converted integer value has been appended to the string in buffer - - //instantiate a buffer of 30 charactes for the conversion of the integer - TCHAR buf[30]; - //Convert the integer value to a string buf using the radix 10 (duh) - _i64tot(value, buf, 10); - //Have the converted integer now stored in buf appended to the string in buffer - append(buf); - } - - void StringBuffer::appendFloat(const qreal value, const int32_t digits){ - //Func - Appends a qreal (after conversion to a character string) - //Pre - digits > 0. Indicates the minimum number of characters printed - //Post - The converted qreal value has been appended to the string in buffer - - //using sprintf("%f" was not reliable on other plaforms... we use a custom float convertor - //bvk: also, using sprintf and %f seems excessivelly slow - if(digits>8) - _CLTHROWA(CL_ERR_IllegalArgument,"Too many digits..."); - - //the maximum number of characters that int64 will hold is 23. so we need 23*2+2 - TCHAR buf[48]; //the buffer to hold - int64_t v = (int64_t)value; //the integer value of the float - _i64tot(v,buf,10); //add the whole number - - size_t len = 99-_tcslen(buf); //how many digits we have to work with? - size_t dig = len< (size_t)digits ? len : digits; - if ( dig > 0 ){ - _tcscat(buf,_T(".")); //add a decimal point - - int64_t remi=(int64_t)((value-v)*pow((qreal)10,(qreal)(dig+1))); //take the remainder and make a whole number - if ( remi<0 ) remi*=-1; - int64_t remadj=remi/10; - if ( remi-(remadj*10) >=5 ) - remadj++; //adjust remainder - - // add as many zeros as necessary between the decimal point and the - // significant part of the number. Fixes a bug when trying to print - // numbers that have zeros right after the decimal point - if (remadj) { - int32_t numZeros = dig - (int32_t)log10((qreal)remadj) - 1; - while(numZeros-- > 0) - _tcscat(buf,_T("0")); //add a zero before the decimal point - } - - _i64tot(remadj,buf+_tcslen(buf),10); //add the remainder - } - - append(buf); - } - - void StringBuffer::prepend(const TCHAR* value){ - //Func - Puts a copy of the string value infront of the current string in the StringBuffer - //Pre - value != NULL - //Post - The string in pre(buffer) has been shifted n positions where n equals the length of value. - // The string value was then copied to the beginning of stringbuffer - - prepend(value, _tcslen(value)); - } - - void StringBuffer::prepend(const TCHAR* value, const size_t prependedLength) { - //Func - Puts a copy of the string value in front of the string in the StringBuffer - //Pre - value != NULL - // prependedLength contains the length of the string value which is to be prepended - //Post - A copy of the string value is has been in front of the string in buffer - //todo: something is wrong with this code, i'm sure... it only grows (and therefore moves if the buffer is to small) - //Check if the current buffer length is sufficient to have the string value prepended - if (prependedLength + len + 1 > bufferLength){ - //Have the size of the current string buffer increased because it is too small - //Because prependedLength is passed as the second argument to growBuffer, - //growBuffer will have left the first prependedLength characters empty - //when it recopied buffer during reallocation. - growBuffer(prependedLength + len + 1, prependedLength); - } - - //Copy the string value into the buffer at postion 0 - _tcsncpy(buffer, value, prependedLength); - //Add the length of the copied string to len to reflect the new length of the string in - //the buffer (Note: len is not the bufferlength!) - len += prependedLength; - } - - int32_t StringBuffer::length() const{ - //Func - Returns the length of the string in the StringBuffer - //Pre - true - //Post - The length len of the string in the buffer has been returned - - return len; - } - TCHAR* StringBuffer::toString(){ - //Func - Returns a copy of the current string in the StringBuffer sized equal to the length of the string - // in the StringBuffer. - //Pre - true - //Post - The copied string has been returned - - //Instantiate a buffer equal to the length len + 1 - TCHAR* ret = _CL_NEWARRAY(TCHAR,len + 1); - if (ret){ - //Copy the string in buffer - _tcsncpy(ret, buffer, len); - //terminate the string - ret[len] = '\0'; - } - //return the the copy - return ret; - } - TCHAR* StringBuffer::getBuffer() { - //Func - '\0' terminates the buffer and returns its pointer - //Pre - true - //Post - buffer has been '\0' terminated and returned - - // Check if the current buffer is '\0' terminated - if (len == bufferLength){ - //Make space for terminator, if necessary. - growBuffer(len + 1); - } - //'\0' buffer so it can be returned properly - buffer[len] = '\0'; - - return buffer; - } - - void StringBuffer::reserve(const int32_t size){ - if ( bufferLength >= size ) - return; - bufferLength = size; - - //Allocate a new buffer of length bufferLength - TCHAR* tmp = _CL_NEWARRAY(TCHAR,bufferLength); - _tcsncpy(tmp, buffer, len); - tmp[len] = '\0'; - - //destroy the old buffer - if (buffer){ - _CLDELETE_CARRAY(buffer); - } - //Assign the new buffer tmp to buffer - buffer = tmp; - } - - void StringBuffer::growBuffer(const int32_t minLength) { - //Func - Has the buffer grown to a minimum length of minLength or bigger - //Pre - minLength >= len + 1 - //Post - The buffer has been grown to a minimum length of minLength or bigger - - growBuffer(minLength, 0); - } - void StringBuffer::growBuffer(const int32_t minLength, const int32_t skippingNInitialChars) { - //Func - Has the buffer grown to a minimum length of minLength or bigger and shifts the - // current string in buffer by skippingNInitialChars forward - //Pre - After growth, must have at least enough room for contents + terminator so - // minLength >= skippingNInitialChars + len + 1 - // skippingNInitialChars >= 0 - //Post - The buffer has been grown to a minimum length of minLength or bigger and - // if skippingNInitialChars > 0, the contents of the buffer has beeen shifted - // forward by skippingNInitialChars positions as the buffer is reallocated, - // leaving the first skippingNInitialChars uninitialized (presumably to be - // filled immediately thereafter by the caller). - - CND_PRECONDITION (skippingNInitialChars >= 0, "skippingNInitialChars is less than zero"); - CND_PRECONDITION (minLength >= skippingNInitialChars + len + 1,"skippingNInitialChars is not large enough"); - - //More aggressive growth strategy to offset smaller default buffer size: - if ( !bufferOwner ){ - if ( bufferLength 0 ){ - printf("ERROR: stringaPool still contains intern'd strings (refcounts):\n"); - __strintrntype::iterator itr = stringaPool.begin(); - while ( itr != stringaPool.end() ){ - printf(" %s (%d)\n",(itr->first), (itr->second)); - ++itr; - } - } - - if ( stringPool.size() > 0 ){ - printf("ERROR: stringPool still contains intern'd strings (refcounts):\n"); - __wcsintrntype::iterator itr = stringPool.begin(); - while ( itr != stringPool.end() ){ - _tprintf(_T(" %s (%d)\n"),(itr->first), (itr->second)); - ++itr; - } - } - #endif - } - - const TCHAR* CLStringIntern::intern(const TCHAR* str CL_FILELINEPARAM){ - if ( str == NULL ) - return NULL; - if ( str[0] == 0 ) - return LUCENE_BLANK_STRING; - - SCOPED_LOCK_MUTEX(THIS_LOCK) - - __wcsintrntype::iterator itr = stringPool.find(str); - if ( itr==stringPool.end() ){ -#ifdef _UCS2 - TCHAR* ret = lucenewcsdup(str CL_FILELINEREF); -#else - TCHAR* ret = lucenestrdup(str CL_FILELINEREF); -#endif - stringPool[ret]= 1; - return ret; - }else{ - (itr->second)++; - return itr->first; - } - } - - bool CLStringIntern::unintern(const TCHAR* str){ - if ( str == NULL ) - return false; - if ( str[0] == 0 ) - return false; - - SCOPED_LOCK_MUTEX(THIS_LOCK) - - __wcsintrntype::iterator itr = stringPool.find(str); - if ( itr != stringPool.end() ){ - if ( (itr->second) == 1 ){ - stringPool.removeitr(itr); - return true; - }else - (itr->second)--; - } - return false; - } - - const char* CLStringIntern::internA(const char* str CL_FILELINEPARAM){ - if ( str == NULL ) - return NULL; - if ( str[0] == 0 ) - return _LUCENE_BLANK_ASTRING; - - SCOPED_LOCK_MUTEX(THIS_LOCK) - - __strintrntype::iterator itr = stringaPool.find(str); - if ( itr==stringaPool.end() ){ - char* ret = lucenestrdup(str CL_FILELINE); - stringaPool[ret] = 1; - return ret; - }else{ - (itr->second)++; - return itr->first; - } - } - - bool CLStringIntern::uninternA(const char* str){ - if ( str == NULL ) - return false; - if ( str[0] == 0 ) - return false; - - SCOPED_LOCK_MUTEX(THIS_LOCK) - - __strintrntype::iterator itr = stringaPool.find(str); - if ( itr!=stringaPool.end() ){ - if ( (itr->second) == 1 ){ - stringaPool.removeitr(itr); - return true; - }else - (itr->second)--; - } - return false; - } - - /* removed because of multi-threading problems... - __wcsintrntype::iterator CLStringIntern::internitr(const TCHAR* str CL_FILELINEPARAM){ - if ( str[0] == 0 ){ - if ( !blanksinitd ){ - CLStringIntern::stringPool.put(LUCENE_BLANK_STRING,1); - wblank=stringPool.find(str); - blanksinitd=true; - } - return wblank; - } - __wcsintrntype::iterator itr = stringPool.find(str); - if (itr==stringPool.end()){ -#ifdef _UCS2 - TCHAR* ret = lucenewcsdup(str CL_FILELINEREF); -#else - TCHAR* ret = lucenestrdup(str CL_FILELINEREF); -#endif - stringPool.put(ret,1); - return stringPool.find(str); - }else{ - (itr->second)++; - return itr; - } - } - bool CLStringIntern::uninternitr(__wcsintrntype::iterator itr){ - if ( itr!=stringPool.end() ){ - if ( itr==wblank ) - return false; - if ( (itr->second) == 1 ){ - stringPool.removeitr(itr); - return true; - }else - (itr->second)--; - } - return false; - } -*/ - -CL_NS_END diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/util/StringIntern.h qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/util/StringIntern.h --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/util/StringIntern.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/util/StringIntern.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,61 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#ifndef _lucene_util_StringIntern_H -#define _lucene_util_StringIntern_H - -#if defined(_LUCENE_PRAGMA_ONCE) -# pragma once -#endif - -#include "VoidMap.h" -CL_NS_DEF(util) -typedef CL_NS(util)::CLHashMap __wcsintrntype; -typedef CL_NS(util)::CLHashMap __strintrntype; - - /** Functions for intern'ing strings. This - * is a process of pooling strings thus using less memory, - * and furthermore allows intern'd strings to be directly - * compared: - * string1==string2, rather than _tcscmp(string1,string2) - */ - class CLStringIntern{ - static __wcsintrntype stringPool; - static __strintrntype stringaPool; - STATIC_DEFINE_MUTEX(THIS_LOCK) - public: - /** - * Internalise the specified string. - * \return Returns a pointer to the internalised string - */ - static const char* internA(const char* str CL_FILELINEPARAM); - /** - * Uninternalise the specified string. Decreases - * the reference count and frees the string if - * reference count is zero - * \returns true if string was destroyed, otherwise false - */ - static bool uninternA(const char* str); - - /** - * Internalise the specified string. - * \return Returns a pointer to the internalised string - */ - static const TCHAR* intern(const TCHAR* str CL_FILELINEPARAM); - - /** - * Uninternalise the specified string. Decreases - * the reference count and frees the string if - * reference count is zero - * \returns true if string was destroyed, otherwise false - */ - static bool unintern(const TCHAR* str); - - static void shutdown(); - }; - -CL_NS_END -#endif diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/util/stringreader.h qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/util/stringreader.h --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/util/stringreader.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/util/stringreader.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,124 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Jos van den Oever -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -/* This file is part of Strigi Desktop Search - * - * Copyright (C) 2006 Jos van den Oever - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library 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 - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public License - * along with this library; see the file COPYING.LIB. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - */ -#ifndef STRINGREADER_H -#define STRINGREADER_H - -/** - * Author: Jos van den Oever - * Ben van Klinken - **/ - - -#include "streambase.h" - -namespace jstreams { - -template -class StringReader : public StreamBase { -private: - int64_t markpt; - T* data; - bool dataowner; - StringReader(const StringReader&); - void operator=(const StringReader&); -public: - StringReader(const T* value, int32_t length = -1, bool copy = true); - ~StringReader(); - int32_t read(const T*& start, int32_t min, int32_t max); - int64_t skip(int64_t ntoskip); - int64_t reset(int64_t pos); -}; - -typedef StringReader StringInputStream; - -template -StringReader::StringReader(const T* value, int32_t length, bool copy) - : markpt(0), dataowner(copy) { - if (length < 0) { - length = 0; - while (value[length] != '\0') { - length++; - } - } - StreamBase::size = length; - if (copy) { - data = new T[length+1]; - size_t s = (size_t)(length*sizeof(T)); - memcpy(data, value, s); - data[length] = 0; - } else { - // casting away const is ok, because we don't write anyway - data = (T*)value; - } -} -template -StringReader::~StringReader() { - if (dataowner) { - delete [] data; - } -} -template -int32_t -StringReader::read(const T*& start, int32_t min, int32_t max) { - int64_t left = StreamBase::size - StreamBase::position; - if (left == 0) { - StreamBase::status = Eof; - return -1; - } - if (min < 0) min = 0; - int32_t nread = (int32_t)((max > left || max < 1) ?left :max); - start = data + StreamBase::position; - StreamBase::position += nread; - if (StreamBase::position == StreamBase::size) { - StreamBase::status = Eof; - } - return nread; -} -template -int64_t -StringReader::skip(int64_t ntoskip) { - const T* start; - return read(start, ntoskip, ntoskip); -} -template -int64_t -StringReader::reset(int64_t newpos) { - if (newpos < 0) { - StreamBase::status = Ok; - StreamBase::position = 0; - } else if (newpos < StreamBase::size) { - StreamBase::status = Ok; - StreamBase::position = newpos; - } else { - StreamBase::position = StreamBase::size; - StreamBase::status = Eof; - } - return StreamBase::position; -} - -} // end namespace jstreams - -#endif diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/util/subinputstream.h qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/util/subinputstream.h --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/util/subinputstream.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/util/subinputstream.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,141 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Jos van den Oever -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -/* This file is part of Strigi Desktop Search - * - * Copyright (C) 2006 Jos van den Oever - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library 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 - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public License - * along with this library; see the file COPYING.LIB. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - */ -#ifndef SUBINPUTSTREAM_H -#define SUBINPUTSTREAM_H - -#include "streambase.h" - -namespace jstreams { - -template -class SubInputStream : public StreamBase { -private: - const int64_t offset; - StreamBase *input; -public: - SubInputStream(StreamBase *input, int64_t size=-1); - int32_t read(const T*& start, int32_t min, int32_t max); - int64_t reset(int64_t newpos); - int64_t skip(int64_t ntoskip); -}; -template -SubInputStream::SubInputStream(StreamBase *i, int64_t length) - : offset(i->getPosition()), input(i) { - assert(length >= -1); -// printf("substream offset: %lli\n", offset); - StreamBase::size = length; -} - -template -int32_t SubInputStream::read(const T*& start, int32_t min, int32_t max) { - if (StreamBase::size != -1) { - const int64_t left = StreamBase::size - StreamBase::position; - if (left == 0) { - return -1; - } - // restrict the amount of data that can be read - if (max <= 0 || max > left) { - max = (int32_t)left; - } - if (min > max) min = max; - if (left < min) min = (int32_t)left; - } - int32_t nread = input->read(start, min, max); - if (nread < -1) { - fprintf(stderr, "substream too short.\n"); - StreamBase::status = Error; - StreamBase::error = input->getError(); - } else if (nread < min) { - if (StreamBase::size == -1) { - StreamBase::status = Eof; - if (nread > 0) { - StreamBase::position += nread; - StreamBase::size = StreamBase::position; - } - } else { -// fprintf(stderr, "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! nread %i min %i max %i size %lli\n", nread, min, max, size); -// fprintf(stderr, "pos %lli parentpos %lli\n", position, input->getPosition()); -// fprintf(stderr, "status: %i error: %s\n", input->getStatus(), input->getError()); - // we expected data but didn't get enough so that's an error - StreamBase::status = Error; - StreamBase::error = "Premature end of stream\n"; - nread = -2; - } - } else { - StreamBase::position += nread; - if (StreamBase::position == StreamBase::size) { - StreamBase::status = Eof; - } - } - return nread; -} - -template -int64_t SubInputStream::reset(int64_t newpos) { -// fprintf(stderr, "subreset pos: %lli newpos: %lli offset: %lli\n", position, -// newpos, offset); - StreamBase::position = input->reset(newpos + offset); - if (StreamBase::position < offset) { - printf("###########\n"); - StreamBase::status = Error; - StreamBase::error = input->getError(); - } else { - StreamBase::position -= offset; - StreamBase::status = input->getStatus(); - } - return StreamBase::position; -} - -template -int64_t SubInputStream::skip(int64_t ntoskip) { -// printf("subskip pos: %lli ntoskip: %lli offset: %lli\n", position, ntoskip, offset); - if (StreamBase::size == StreamBase::position) { - StreamBase::status = Eof; - return -1; - } - if (StreamBase::size != -1) { - const int64_t left = StreamBase::size - StreamBase::position; - // restrict the amount of data that can be skipped - if (ntoskip > left) { - ntoskip = left; - } - } - int64_t skipped = input->skip(ntoskip); - if (input->getStatus() == Error) { - StreamBase::status = Error; - StreamBase::error = input->getError(); - } else { - StreamBase::position += skipped; - if (StreamBase::position == StreamBase::size) { - StreamBase::status = Eof; - } - } - return skipped; -} - -} //end namespace jstreams - -#endif diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/util/ThreadLocal.cpp qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/util/ThreadLocal.cpp --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/util/ThreadLocal.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/util/ThreadLocal.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,55 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#include "CLucene/StdHeader.h" -#include "CLucene/LuceneThreads.h" -#include "ThreadLocal.h" - -CL_NS_DEF(util) - -DEFINE_MUTEX(ThreadLocalBase::ThreadLocalBase_THIS_LOCK) - -ThreadLocalBase::ShutdownHooksType ThreadLocalBase::shutdownHooks(false); -ThreadLocalBase::ThreadLocalsType ThreadLocalBase::threadLocals(false,false); - -ThreadLocalBase::ThreadLocalBase(){ -} -ThreadLocalBase::~ThreadLocalBase(){ -} - -void ThreadLocalBase::UnregisterCurrentThread(){ - _LUCENE_THREADID_TYPE id = _LUCENE_CURRTHREADID; - SCOPED_LOCK_MUTEX(ThreadLocalBase_THIS_LOCK) - - ThreadLocalsType::iterator itr = threadLocals.lower_bound(id); - ThreadLocalsType::iterator end = threadLocals.upper_bound(id); - while ( itr != end ){ - itr->second->setNull(); - ++itr; - } -} -void ThreadLocalBase::shutdown(){ - SCOPED_LOCK_MUTEX(ThreadLocalBase_THIS_LOCK) - - ThreadLocalsType::iterator itr = threadLocals.begin(); - while ( itr != threadLocals.end() ){ - itr->second->setNull(); - ++itr; - } - - ShutdownHooksType::iterator itr2 = shutdownHooks.begin(); - while ( itr2 != shutdownHooks.end() ){ - ShutdownHook* hook = *itr2; - hook(false); - } -} -void ThreadLocalBase::registerShutdownHook(ShutdownHook* hook){ - SCOPED_LOCK_MUTEX(ThreadLocalBase_THIS_LOCK) - shutdownHooks.insert(hook); -} - - -CL_NS_END diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/util/ThreadLocal.h qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/util/ThreadLocal.h --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/util/ThreadLocal.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/util/ThreadLocal.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,143 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -* -* Changes are Copyright (C) 2015 The Qt Company Ltd. -------------------------------------------------------------------------------*/ -#ifndef _lucene_util_ThreadLocal_H -#define _lucene_util_ThreadLocal_H - -#if defined(_LUCENE_PRAGMA_ONCE) -# pragma once -#endif - -#include "CLucene/util/VoidMap.h" - -CL_NS_DEF(util) - -class ThreadLocalBase: LUCENE_BASE{ -public: - /** - * A hook called when CLucene is starting or shutting down, - * this can be used for setting up and tearing down static - * variables - */ - typedef void ShutdownHook(bool startup); - -protected: - STATIC_DEFINE_MUTEX(ThreadLocalBase_THIS_LOCK) - typedef CL_NS(util)::CLMultiMap<_LUCENE_THREADID_TYPE, ThreadLocalBase*, - CL_NS(util)::CLuceneThreadIdCompare, - CL_NS(util)::Deletor::ConstNullVal<_LUCENE_THREADID_TYPE>, - CL_NS(util)::Deletor::ConstNullVal > ThreadLocalsType; - static ThreadLocalsType threadLocals; - //todo: using http://en.wikipedia.org/wiki/Thread-local_storage#Pthreads_implementation - //would work better... but lots of testing would be needed first... - typedef CL_NS(util)::CLSetList, - CL_NS(util)::Deletor::ConstNullVal > ShutdownHooksType; - static ShutdownHooksType shutdownHooks; - - ThreadLocalBase(); -public: - virtual ~ThreadLocalBase(); - - /** - * Call this function to clear the local thread data for this - * ThreadLocal. Calling set(NULL) does the same thing, except - * this function is virtual and can be called without knowing - * the template. - */ - virtual void setNull() = 0; - - /** - * If you want to clean up thread specific memory, then you should - * make sure this thread is called when the thread is not going to be used - * again. This will clean up threadlocal data which can contain quite a lot - * of data, so if you are creating lots of new threads, then it is a good idea - * to use this function, otherwise there will be many memory leaks. - */ - static void UnregisterCurrentThread(); - - /** - * Call this function to shutdown CLucene - */ - static void shutdown(); - - /** - * Add this function to the shutdown hook list. This function will be called - * when CLucene is shutdown. - */ - static void registerShutdownHook(ShutdownHook* hook); -}; - -template -class ThreadLocal: public ThreadLocalBase{ - typedef CL_NS(util)::CLSet<_LUCENE_THREADID_TYPE, T, - CL_NS(util)::CLuceneThreadIdCompare, - CL_NS(util)::Deletor::ConstNullVal<_LUCENE_THREADID_TYPE>, - _deletor > LocalsType; - LocalsType locals; - DEFINE_MUTEX(locals_LOCK) -public: - ThreadLocal(); - ~ThreadLocal(); - T get(); - void setNull(); - void set(T t); -}; - -template -ThreadLocal::ThreadLocal(): - locals(false,true) -{ - //add this object to the base's list of threadlocals to be - //notified in case of UnregisterThread() - _LUCENE_THREADID_TYPE id = _LUCENE_CURRTHREADID; - SCOPED_LOCK_MUTEX(ThreadLocalBase_THIS_LOCK) - threadLocals.insert( CL_NS_STD(pair)(id, this) ); -} - -template -ThreadLocal::~ThreadLocal(){ - //remove this object to the base's list of threadlocals - _LUCENE_THREADID_TYPE id = _LUCENE_CURRTHREADID; - SCOPED_LOCK_MUTEX(ThreadLocalBase_THIS_LOCK) - - //remove all the thread local data for this object - locals.clear(); - - //remove this object from the ThreadLocalBase threadLocal list - ThreadLocalsType::iterator itr = threadLocals.lower_bound(id); - ThreadLocalsType::iterator end = threadLocals.upper_bound(id); - while ( itr != end ){ - if ( itr->second == this){ - threadLocals.erase(itr); - break; - } - ++itr; - } -} - -template -T ThreadLocal::get(){ - return locals.get(_LUCENE_CURRTHREADID); -} - -template -void ThreadLocal::setNull(){ - set(NULL); -} - -template -void ThreadLocal::set(T t){ - _LUCENE_THREADID_TYPE id = _LUCENE_CURRTHREADID; - locals.remove(id); - if ( t != NULL ) - locals.insert( CL_NS_STD(pair)(id, t) ); -} - -CL_NS_END -#endif diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/util/VoidList.h qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/util/VoidList.h --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/util/VoidList.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/util/VoidList.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,174 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#ifndef _lucene_util_VoidList_ -#define _lucene_util_VoidList_ - -#if defined(_LUCENE_PRAGMA_ONCE) -# pragma once -#endif - -#include "Equators.h" - -CL_NS_DEF(util) - -/** -* A template to encapsulate various list type classes -* @internal -*/ -template -class __CLList:public base,LUCENE_BASE { -private: - bool dv; -public: - DEFINE_MUTEX(THIS_LOCK) - - typedef typename base::const_iterator const_iterator; - typedef typename base::iterator iterator; - - virtual ~__CLList(){ - clear(); - } - - __CLList ( const bool deleteValue ): - dv(deleteValue) - { - } - - void setDoDelete(bool val){ dv=val; } - - //sets array to the contents of this array. - //array must be size+1, otherwise memory may be overwritten - void toArray(_kt* into) const{ - int i=0; - for ( const_iterator itr=base::begin();itr!=base::end();itr++ ){ - into[i] = *itr; - i++; - } - into[i] = NULL; - } - - void set(int32_t i, _kt val) { - if ( dv ) - _valueDeletor::doDelete((*this)[i]); - (*this)[i] = val; - } - - //todo: check this - void delete_back(){ - if ( base::size() > 0 ){ - iterator itr = base::end(); - if ( itr != base::begin()) - itr --; - _kt key = *itr; - base::erase(itr); - if ( dv ) - _valueDeletor::doDelete(key); - } - } - - void delete_front(){ - if ( base::size() > 0 ){ - iterator itr = base::begin(); - _kt key = *itr; - base::erase(itr); - if ( dv ) - _valueDeletor::doDelete(key); - } - } - - void clear(){ - if ( dv ){ - iterator itr = base::begin(); - while ( itr != base::end() ){ - _valueDeletor::doDelete(*itr); - ++itr; - } - } - base::clear(); - } - - void remove(int32_t i, bool dontDelete=false){ - iterator itr=base::begin(); - itr+=i; - _kt key = *itr; - base::erase( itr ); - if ( dv && !dontDelete ) - _valueDeletor::doDelete(key); - } - void remove(iterator itr, bool dontDelete=false){ - _kt key = *itr; - base::erase( itr ); - if ( dv && !dontDelete ) - _valueDeletor::doDelete(key); - } - -}; - -//growable arrays of Objects (like a collection or list) -//a list, so can contain duplicates -//it grows in chunks... todo: check jlucene for initial size of array, and growfactors -template -class CLVector:public __CLList<_kt, CL_NS_STD(vector)<_kt> , _valueDeletor> -{ -public: - CLVector ( const bool deleteValue=true ): - __CLList<_kt, CL_NS_STD(vector)<_kt> , _valueDeletor>(deleteValue) - { - } -}; - -//An array-backed implementation of the List interface -//a list, so can contain duplicates -//*** a very simple list - use -//(This class is roughly equivalent to Vector, except that it is unsynchronized.) -#define CLArrayList CLVector -#define CLHashSet CLHashList - -//implementation of the List interface, provides access to the first and last list elements in O(1) -//no comparator is required... and so can contain duplicates -//a simple list with no comparator -//*** a very simple list - use -#ifdef LUCENE_DISABLE_HASHING - #define CLHashList CLSetList -#else - -template -class CLHashList:public __CLList<_kt, CL_NS_HASHING(hash_set)<_kt,_Comparator> , _valueDeletor> -{ -public: - CLHashList ( const bool deleteValue=true ): - __CLList<_kt, CL_NS_HASHING(hash_set)<_kt,_Comparator> , _valueDeletor>(deleteValue) - { - } -}; -#endif - -template -class CLLinkedList:public __CLList<_kt, CL_NS_STD(list)<_kt> , _valueDeletor> -{ -public: - CLLinkedList ( const bool deleteValue=true ): - __CLList<_kt, CL_NS_STD(list)<_kt> , _valueDeletor>(deleteValue) - { - } -}; -template -class CLSetList:public __CLList<_kt, CL_NS_STD(set)<_kt,_Comparator> , _valueDeletor> -{ -public: - CLSetList ( const bool deleteValue=true ): - __CLList<_kt, CL_NS_STD(set)<_kt,_Comparator> , _valueDeletor>(deleteValue) - { - } -}; - -CL_NS_END -#endif diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/util/VoidMap.h qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/util/VoidMap.h --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene/util/VoidMap.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene/util/VoidMap.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,269 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#ifndef _lucene_util_VoidMap_ -#define _lucene_util_VoidMap_ - -#if defined(_LUCENE_PRAGMA_ONCE) -# pragma once -#endif - - -CL_NS_DEF(util) - -/** -* A template to encapsulate various map type classes -* @internal -*/ -template -class __CLMap: public base, LUCENE_BASE { -private: - bool dk; - bool dv; -public: - DEFINE_MUTEX(THIS_LOCK) - - typedef typename base::iterator iterator; - typedef typename base::const_iterator const_iterator; - typedef CL_NS_STD(pair)<_kt, _vt> _pair; - - ///Default constructor for the __CLMap - __CLMap (): - dk(true), - dv(true) - { - } - - ///Deconstructor for the __CLMap - ~__CLMap (){ - clear(); - } - - void setDeleteKey(bool val){ dk = val; } - void setDeleteValue(bool val){ dv = val; } - - ///Construct the VoidMap and set the deleteTypes to the specified values - ///\param deleteKey if true then the key variable is deleted when an object is deleted - ///\param keyDelType delete the key variable using the specified type - ///\param deleteValue if true then the value variable is deleted when an object is deleted - ///\param valueDelType delete the value variable using the specified type - /*__CLMap ( const bool deleteKey, const bool deleteValue ): - dk(deleteKey), - dv(deleteValue) - { - }*/ - - ///checks to see if the specified key exists - ///\param k the key to check for - ///\returns true if the key exists - bool exists(_kt k)const{ - const_iterator itr = base::find(k); - bool ret = itr!=base::end(); - return ret; - } - - ///put the specified pair into the map. remove any old items first - ///\param k the key - ///\param v the value - void put(_kt k,_vt v){ - //todo: check if this is always right! - //must should look through code, for - //cases where map is not unique!!! - if ( dk || dv ) - remove(k); - - //todo: replacing the old item might be quicker... - - base::insert(_pair(k,v)); - } - - - ///using a non-const key, get a non-const value - _vt get( _kt k) const { - const_iterator itr = base::find(k); - if ( itr==base::end() ) - return _vt(); - else - return itr->second; - } - ///using a non-const key, get the actual key - _kt getKey( _kt k) const { - const_iterator itr = base::find(k); - if ( itr==base::end() ) - return _kt(); - else - return itr->first; - } - - void removeitr (iterator itr, const bool dontDeleteKey = false, const bool dontDeleteValue = false){ - //delete key&val first. This prevents potential loops (deleting object removes itself) - _kt key = itr->first; - _vt val = itr->second; - base::erase(itr); - - //keys & vals need to be deleted after erase, because the hashvalue is still needed - if ( dk && !dontDeleteKey ) - _KeyDeletor::doDelete(key); - if ( dv && !dontDeleteValue ) - _ValueDeletor::doDelete(val); - } - ///delete and optionally delete the specified key and associated value - void remove(_kt key, const bool dontDeleteKey = false, const bool dontDeleteValue = false){ - iterator itr = base::find(key); - if ( itr!=base::end() ) - removeitr(itr,dontDeleteKey,dontDeleteValue); - } - - ///clear all keys and values in the map - void clear(){ - if ( dk || dv ){ - iterator itr = base::begin(); - while ( itr!=base::end() ){ - #ifdef _CL_HAVE_EXT_HASH_MAP - removeitr(itr); - itr = base::begin(); - - #else - if ( dk ) - _KeyDeletor::doDelete(itr->first); - if ( dv ) - _ValueDeletor::doDelete(itr->second); - ++itr; - - #endif - } - } - base::clear(); - } -}; - -// makes no guarantees as to the order of the map -// cannot contain duplicate keys; each key can map to at most one value -#define CLHashtable CLHashMap - -#if defined(_CL_HAVE_GOOGLE_DENSE_HASH_MAP) -//do nothing -#elif defined(LUCENE_DISABLE_HASHING) - - //a CLSet with CLHashMap traits -template -class CLHashMap:public __CLMap<_kt,_vt, - CL_NS_STD(map)<_kt,_vt, CL_Compare>, - _KeyDeletor,_ValueDeletor> -{ - typedef typename CL_NS_STD(map)<_kt,_vt,CL_Compare> _base; - typedef __CLMap<_kt, _vt, CL_NS_STD(map)<_kt,_vt, CL_Compare>, - _KeyDeletor,_ValueDeletor> _this; -public: - CLHashMap ( const bool deleteKey=false, const bool deleteValue=false ) - { - _this::setDeleteKey(deleteKey); - _this::setDeleteValue(deleteValue); - } -}; -#elif defined(_CL_HAVE_EXT_HASH_MAP) - //ext/hash_map syntax -//HashMap class is roughly equivalent to Hashtable, except that it is unsynchronized -template -class CLHashMap:public __CLMap<_kt,_vt, - CL_NS_HASHING(hash_map)<_kt,_vt, _Hasher,_Equals>, - _KeyDeletor,_ValueDeletor> -{ - typedef __CLMap<_kt,_vt, CL_NS_HASHING(hash_map)<_kt,_vt, _Hasher,_Equals>, - _KeyDeletor,_ValueDeletor> _this; -public: - CLHashMap ( const bool deleteKey=false, const bool deleteValue=false ) - { - _this::setDeleteKey(deleteKey); - _this::setDeleteValue(deleteValue); - } -}; - -#else -//HashMap class is roughly equivalent to Hashtable, except that it is unsynchronized -template -class CLHashMap:public __CLMap<_kt,_vt, - CL_NS_HASHING(hash_map)<_kt,_vt, _Hasher>, - _KeyDeletor,_ValueDeletor> -{ - typedef __CLMap<_kt,_vt, CL_NS_HASHING(hash_map)<_kt,_vt, _Hasher>, - _KeyDeletor,_ValueDeletor> _this; -public: - CLHashMap ( const bool deleteKey=false, const bool deleteValue=false ) - { - _this::setDeleteKey(deleteKey); - _this::setDeleteValue(deleteValue); - } -}; -#endif - -//A collection that contains no duplicates -//does not guarantee that the order will remain constant over time -template -class CLSet:public __CLMap<_kt,_vt, - CL_NS_STD(map)<_kt,_vt, CL_Compare>, - _KeyDeletor,_ValueDeletor> -{ - typedef typename CL_NS_STD(map)<_kt,_vt,CL_Compare> _base; - typedef __CLMap<_kt, _vt, CL_NS_STD(map)<_kt,_vt, CL_Compare>, - _KeyDeletor,_ValueDeletor> _this; -public: - CLSet ( const bool deleteKey=false, const bool deleteValue=false ) - { - _this::setDeleteKey(deleteKey); - _this::setDeleteValue(deleteValue); - } -}; - - -//A collection that can contains duplicates -template -class CLMultiMap:public __CLMap<_kt,_vt, - CL_NS_STD(multimap)<_kt,_vt>, - _KeyDeletor,_ValueDeletor> -{ - typedef typename CL_NS_STD(multimap)<_kt,_vt> _base; - typedef __CLMap<_kt, _vt, CL_NS_STD(multimap)<_kt,_vt>, - _KeyDeletor,_ValueDeletor> _this; -public: - CLMultiMap ( const bool deleteKey=false, const bool deleteValue=false ) - { - _this::setDeleteKey(deleteKey); - _this::setDeleteValue(deleteValue); - } -}; - - -//*** need to create a class that allows duplicates - use -//#define CLSet __CLMap -CL_NS_END - -#ifdef _CL_HAVE_GOOGLE_DENSE_HASH_MAP -#include "GoogleSparseMap.h" -#endif - -#endif diff -Nru qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene.h qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene.h --- qttools-opensource-src-5.7.1/src/assistant/3rdparty/clucene/src/CLucene.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/3rdparty/clucene/src/CLucene.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,38 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -//Includes some standard headers for searching and indexing. -#ifndef _lucene_CLucene_ -#define _lucene_CLucene_ - -#include "CLucene/StdHeader.h" -#include "CLucene/debug/condition.h" -#include "CLucene/debug/mem.h" -#include "CLucene/index/IndexReader.h" -#include "CLucene/index/IndexWriter.h" -#include "CLucene/index/MultiReader.h" -#include "CLucene/index/Term.h" -#include "CLucene/search/IndexSearcher.h" -#include "CLucene/search/MultiSearcher.h" -#include "CLucene/search/DateFilter.h" -#include "CLucene/search/WildcardQuery.h" -#include "CLucene/search/FuzzyQuery.h" -#include "CLucene/search/PhraseQuery.h" -#include "CLucene/search/PrefixQuery.h" -#include "CLucene/search/RangeQuery.h" -#include "CLucene/search/BooleanQuery.h" -#include "CLucene/document/Document.h" -#include "CLucene/document/Field.h" -#include "CLucene/document/DateField.h" -#include "CLucene/store/Directory.h" -#include "CLucene/store/FSDirectory.h" -#include "CLucene/queryParser/QueryParser.h" -#include "CLucene/queryParser/MultiFieldQueryParser.h" -#include "CLucene/analysis/standard/StandardAnalyzer.h" -#include "CLucene/analysis/Analyzers.h" -#include "CLucene/util/Reader.h" - -#endif diff -Nru qttools-opensource-src-5.7.1/src/assistant/assistant/aboutdialog.cpp qttools-opensource-src-5.9.1/src/assistant/assistant/aboutdialog.cpp --- qttools-opensource-src-5.7.1/src/assistant/assistant/aboutdialog.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/assistant/aboutdialog.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -103,7 +103,7 @@ m_closeButton = new QPushButton(); m_closeButton->setText(tr("&Close")); - connect(m_closeButton, SIGNAL(clicked()), this, SLOT(close())); + connect(m_closeButton, &QAbstractButton::clicked, this, &QWidget::close); m_layout = new QGridLayout(this); m_layout->addWidget(m_aboutLabel, 1, 0, 1, -1); diff -Nru qttools-opensource-src-5.7.1/src/assistant/assistant/aboutdialog.h qttools-opensource-src-5.9.1/src/assistant/assistant/aboutdialog.h --- qttools-opensource-src-5.7.1/src/assistant/assistant/aboutdialog.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/assistant/aboutdialog.h 2017-06-23 12:03:39.000000000 +0000 @@ -45,11 +45,11 @@ public: AboutLabel(QWidget *parent = 0); void setText(const QString &text, const QByteArray &resources); - QSize minimumSizeHint() const; + QSize minimumSizeHint() const override; private: - QVariant loadResource(int type, const QUrl &name); - void setSource(const QUrl &url); + QVariant loadResource(int type, const QUrl &name) override; + void setSource(const QUrl &url) override; QMap m_resourceMap; }; diff -Nru qttools-opensource-src-5.7.1/src/assistant/assistant/assistant.pro qttools-opensource-src-5.9.1/src/assistant/assistant/assistant.pro --- qttools-opensource-src-5.7.1/src/assistant/assistant/assistant.pro 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/assistant/assistant.pro 2017-06-23 12:03:39.000000000 +0000 @@ -102,9 +102,15 @@ RESOURCES += assistant.qrc \ assistant_images.qrc +QMAKE_TARGET_PRODUCT = Qt Assistant +QMAKE_TARGET_DESCRIPTION = Tool for viewing on-line documentation in Qt help file format + win32 { - !wince*:LIBS += -lshell32 - RC_FILE = assistant.rc + LIBS += -lshell32 + RC_ICONS = assistant.ico + VERSION = $${QT_VERSION}.0 +} else { + VERSION = $${QT_VERSION} } mac { @@ -113,6 +119,4 @@ QMAKE_INFO_PLIST = Info_mac.plist } -contains(SQLPLUGINS, sqlite):QTPLUGIN += qsqlite - load(qt_app) diff -Nru qttools-opensource-src-5.7.1/src/assistant/assistant/assistant.rc qttools-opensource-src-5.9.1/src/assistant/assistant/assistant.rc --- qttools-opensource-src-5.7.1/src/assistant/assistant/assistant.rc 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/assistant/assistant.rc 1970-01-01 00:00:00.000000000 +0000 @@ -1,32 +0,0 @@ -#include "winver.h" - -IDI_ICON1 ICON DISCARDABLE "assistant.ico" - -VS_VERSION_INFO VERSIONINFO - FILEVERSION 1,0,0,0 - PRODUCTVERSION 1,0,0,0 - FILEFLAGS 0x0L - FILEFLAGSMASK 0x3fL - FILEOS 0x00040004L - FILETYPE 0x1L - FILESUBTYPE 0x0L -BEGIN - BLOCK "StringFileInfo" - BEGIN - BLOCK "000004b0" - BEGIN - VALUE "CompanyName", "Digia Plc and/or its subsidiary(-ies)" - VALUE "FileDescription", "Qt Assistant" - VALUE "FileVersion", "1.0.0.0" - VALUE "LegalCopyright", "Copyright (C) 2015 The Qt Company Ltd." - VALUE "InternalName", "assistant.exe" - VALUE "OriginalFilename", "assistant.exe" - VALUE "ProductName", "Qt Assistant" - VALUE "ProductVersion", "1.0.0.0" - END - END - BLOCK "VarFileInfo" - BEGIN - VALUE "Translation", 0x0, 1200 - END -END diff -Nru qttools-opensource-src-5.7.1/src/assistant/assistant/bookmarkdialog.cpp qttools-opensource-src-5.9.1/src/assistant/assistant/bookmarkdialog.cpp --- qttools-opensource-src-5.7.1/src/assistant/assistant/bookmarkdialog.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/assistant/bookmarkdialog.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -51,18 +51,17 @@ ui.newFolderButton->setVisible(false); ui.buttonBox->button(QDialogButtonBox::Ok)->setDefault(true); - connect(ui.buttonBox, SIGNAL(accepted()), this, SLOT(accepted())); - connect(ui.buttonBox, SIGNAL(rejected()), this, SLOT(rejected())); - connect(ui.newFolderButton, SIGNAL(clicked()), this, SLOT(addFolder())); - connect(ui.toolButton, SIGNAL(clicked()), this, SLOT(toolButtonClicked())); - connect(ui.bookmarkEdit, SIGNAL(textChanged(QString)), this, - SLOT(textChanged(QString))); + connect(ui.buttonBox, &QDialogButtonBox::accepted, this, &BookmarkDialog::accepted); + connect(ui.buttonBox, &QDialogButtonBox::rejected, this, &BookmarkDialog::rejected); + connect(ui.newFolderButton, &QAbstractButton::clicked, this, &BookmarkDialog::addFolder); + connect(ui.toolButton, &QAbstractButton::clicked, this, &BookmarkDialog::toolButtonClicked); + connect(ui.bookmarkEdit, &QLineEdit::textChanged, this, &BookmarkDialog::textChanged); bookmarkProxyModel = new BookmarkFilterModel(this); bookmarkProxyModel->setSourceModel(bookmarkModel); ui.bookmarkFolders->setModel(bookmarkProxyModel); - connect(ui.bookmarkFolders, SIGNAL(currentIndexChanged(int)), this, - SLOT(currentIndexChanged(int))); + connect(ui.bookmarkFolders, QOverload::of(&QComboBox::currentIndexChanged), + this, QOverload::of(&BookmarkDialog::currentIndexChanged)); bookmarkTreeModel = new BookmarkTreeModel(this); bookmarkTreeModel->setSourceModel(bookmarkModel); @@ -74,10 +73,10 @@ ui.treeView->viewport()->installEventFilter(this); ui.treeView->setContextMenuPolicy(Qt::CustomContextMenu); - connect(ui.treeView, SIGNAL(customContextMenuRequested(QPoint)), this, - SLOT(customContextMenuRequested(QPoint))); - connect(ui.treeView->selectionModel(), SIGNAL(currentChanged(QModelIndex, - QModelIndex)), this, SLOT(currentIndexChanged(QModelIndex))); + connect(ui.treeView, &QWidget::customContextMenuRequested, + this, &BookmarkDialog::customContextMenuRequested); + connect(ui.treeView->selectionModel(), &QItemSelectionModel::currentChanged, + this, QOverload::of(&BookmarkDialog::currentIndexChanged)); ui.bookmarkFolders->setCurrentIndex(ui.bookmarkFolders->count() > 1 ? 1 : 0); @@ -156,7 +155,7 @@ void BookmarkDialog::rejected() { TRACE_OBJ - foreach (const QPersistentModelIndex &index, cache) + for (const QPersistentModelIndex &index : qAsConst(cache)) bookmarkModel->removeItem(index); reject(); } @@ -209,7 +208,7 @@ if (isRootItem(index)) return; // check if we go to rename the "Bookmarks Menu", bail - QMenu menu(QLatin1String(""), this); + QMenu menu(QString(), this); QAction *renameItem = menu.addAction(tr("Rename Folder")); QAction *picked = menu.exec(ui.treeView->mapToGlobal(point)); diff -Nru qttools-opensource-src-5.7.1/src/assistant/assistant/bookmarkdialog.h qttools-opensource-src-5.9.1/src/assistant/assistant/bookmarkdialog.h --- qttools-opensource-src-5.7.1/src/assistant/assistant/bookmarkdialog.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/assistant/bookmarkdialog.h 2017-06-23 12:03:39.000000000 +0000 @@ -46,7 +46,7 @@ private: bool isRootItem(const QModelIndex &index) const; - bool eventFilter(QObject *object, QEvent *event); + bool eventFilter(QObject *object, QEvent *event) override; private slots: void currentIndexChanged(int index); diff -Nru qttools-opensource-src-5.7.1/src/assistant/assistant/bookmarkfiltermodel.cpp qttools-opensource-src-5.9.1/src/assistant/assistant/bookmarkfiltermodel.cpp --- qttools-opensource-src-5.7.1/src/assistant/assistant/bookmarkfiltermodel.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/assistant/bookmarkfiltermodel.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -42,50 +42,47 @@ beginResetModel(); if (sourceModel) { - disconnect(sourceModel, SIGNAL(dataChanged(QModelIndex,QModelIndex)), - this, SLOT(changed(QModelIndex,QModelIndex))); - disconnect(sourceModel, SIGNAL(rowsInserted(QModelIndex,int,int)), - this, SLOT(rowsInserted(QModelIndex,int,int))); - disconnect(sourceModel, - SIGNAL(rowsAboutToBeRemoved(QModelIndex,int,int)), this, - SLOT(rowsAboutToBeRemoved(QModelIndex,int,int))); - disconnect(sourceModel, SIGNAL(rowsRemoved(QModelIndex,int,int)), - this, SLOT(rowsRemoved(QModelIndex,int,int))); - disconnect(sourceModel, SIGNAL(layoutAboutToBeChanged()), this, - SLOT(layoutAboutToBeChanged())); - disconnect(sourceModel, SIGNAL(layoutChanged()), this, - SLOT(layoutChanged())); - disconnect(sourceModel, SIGNAL(modelAboutToBeReset()), this, - SLOT(modelAboutToBeReset())); - disconnect(sourceModel, SIGNAL(modelReset()), this, SLOT(modelReset())); + disconnect(sourceModel, &QAbstractItemModel::dataChanged, + this, &BookmarkFilterModel::changed); + disconnect(sourceModel, &QAbstractItemModel::rowsInserted, + this, &BookmarkFilterModel::rowsInserted); + disconnect(sourceModel, &QAbstractItemModel::rowsAboutToBeRemoved, + this, &BookmarkFilterModel::rowsAboutToBeRemoved); + disconnect(sourceModel, &QAbstractItemModel::rowsRemoved, + this, &BookmarkFilterModel::rowsRemoved); + disconnect(sourceModel, &QAbstractItemModel::layoutAboutToBeChanged, + this, &BookmarkFilterModel::layoutAboutToBeChanged); + disconnect(sourceModel, &QAbstractItemModel::layoutChanged, + this, &BookmarkFilterModel::layoutChanged); + disconnect(sourceModel, &QAbstractItemModel::modelAboutToBeReset, + this, &BookmarkFilterModel::modelAboutToBeReset); + disconnect(sourceModel, &QAbstractItemModel::modelReset, + this, &BookmarkFilterModel::modelReset); } - QAbstractProxyModel::setSourceModel(sourceModel); sourceModel = qobject_cast (_sourceModel); + QAbstractProxyModel::setSourceModel(sourceModel); - connect(sourceModel, SIGNAL(dataChanged(QModelIndex,QModelIndex)), this, - SLOT(changed(QModelIndex,QModelIndex))); - - connect(sourceModel, SIGNAL(rowsInserted(QModelIndex,int,int)), - this, SLOT(rowsInserted(QModelIndex,int,int))); - - connect(sourceModel, SIGNAL(rowsAboutToBeRemoved(QModelIndex,int,int)), - this, SLOT(rowsAboutToBeRemoved(QModelIndex,int,int))); - connect(sourceModel, SIGNAL(rowsRemoved(QModelIndex,int,int)), this, - SLOT(rowsRemoved(QModelIndex,int,int))); - - connect(sourceModel, SIGNAL(layoutAboutToBeChanged()), this, - SLOT(layoutAboutToBeChanged())); - connect(sourceModel, SIGNAL(layoutChanged()), this, - SLOT(layoutChanged())); - - connect(sourceModel, SIGNAL(modelAboutToBeReset()), this, - SLOT(modelAboutToBeReset())); - connect(sourceModel, SIGNAL(modelReset()), this, SLOT(modelReset())); + if (sourceModel) { + connect(sourceModel, &QAbstractItemModel::dataChanged, + this, &BookmarkFilterModel::changed); + connect(sourceModel, &QAbstractItemModel::rowsInserted, + this, &BookmarkFilterModel::rowsInserted); + connect(sourceModel, &QAbstractItemModel::rowsAboutToBeRemoved, + this, &BookmarkFilterModel::rowsAboutToBeRemoved); + connect(sourceModel, &QAbstractItemModel::rowsRemoved, + this, &BookmarkFilterModel::rowsRemoved); + connect(sourceModel, &QAbstractItemModel::layoutAboutToBeChanged, + this, &BookmarkFilterModel::layoutAboutToBeChanged); + connect(sourceModel, &QAbstractItemModel::layoutChanged, + this, &BookmarkFilterModel::layoutChanged); + connect(sourceModel, &QAbstractItemModel::modelAboutToBeReset, + this, &BookmarkFilterModel::modelAboutToBeReset); + connect(sourceModel, &QAbstractItemModel::modelReset, + this, &BookmarkFilterModel::modelReset); - if (sourceModel) setupCache(sourceModel->index(0, 0, QModelIndex()).parent()); - + } endResetModel(); } diff -Nru qttools-opensource-src-5.7.1/src/assistant/assistant/bookmarkfiltermodel.h qttools-opensource-src-5.9.1/src/assistant/assistant/bookmarkfiltermodel.h --- qttools-opensource-src-5.7.1/src/assistant/assistant/bookmarkfiltermodel.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/assistant/bookmarkfiltermodel.h 2017-06-23 12:03:39.000000000 +0000 @@ -46,22 +46,22 @@ public: explicit BookmarkFilterModel(QObject *parent = 0); - void setSourceModel(QAbstractItemModel *sourceModel); + void setSourceModel(QAbstractItemModel *sourceModel) override; - int rowCount(const QModelIndex &index) const; - int columnCount(const QModelIndex &index) const; + int rowCount(const QModelIndex &index) const override; + int columnCount(const QModelIndex &index) const override; - QModelIndex mapToSource(const QModelIndex &proxyIndex) const; - QModelIndex mapFromSource(const QModelIndex &sourceIndex) const; + QModelIndex mapToSource(const QModelIndex &proxyIndex) const override; + QModelIndex mapFromSource(const QModelIndex &sourceIndex) const override; - QModelIndex parent(const QModelIndex &child) const; - QModelIndex index(int row, int column, const QModelIndex &parent) const; + QModelIndex parent(const QModelIndex &child) const override; + QModelIndex index(int row, int column, const QModelIndex &parent) const override; - Qt::DropActions supportedDropActions () const; - Qt::ItemFlags flags(const QModelIndex &index) const; + Qt::DropActions supportedDropActions () const override; + Qt::ItemFlags flags(const QModelIndex &index) const override; - QVariant data(const QModelIndex &index, int role) const; - bool setData(const QModelIndex &index, const QVariant &value, int role); + QVariant data(const QModelIndex &index, int role) const override; + bool setData(const QModelIndex &index, const QVariant &value, int role) override; void filterBookmarks(); void filterBookmarkFolders(); @@ -94,10 +94,10 @@ Q_OBJECT public: BookmarkTreeModel(QObject *parent = 0); - int columnCount(const QModelIndex &parent = QModelIndex()) const; + int columnCount(const QModelIndex &parent = QModelIndex()) const override; protected: - bool filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const; + bool filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const override; }; QT_END_NAMESPACE diff -Nru qttools-opensource-src-5.7.1/src/assistant/assistant/bookmarkitem.cpp qttools-opensource-src-5.9.1/src/assistant/assistant/bookmarkitem.cpp --- qttools-opensource-src-5.7.1/src/assistant/assistant/bookmarkitem.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/assistant/bookmarkitem.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -164,7 +164,7 @@ << "Label:" << data(0).toString() << "parent:" << m_parent << "this:" << this; - foreach (BookmarkItem *item, m_children) + for (BookmarkItem *item : m_children) item->dumpTree(indent + 4); } diff -Nru qttools-opensource-src-5.7.1/src/assistant/assistant/bookmarkmanager.cpp qttools-opensource-src-5.9.1/src/assistant/assistant/bookmarkmanager.cpp --- qttools-opensource-src-5.7.1/src/assistant/assistant/bookmarkmanager.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/assistant/bookmarkmanager.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -54,7 +54,7 @@ ui.lineEdit->setFocus(); // force the focus in event on bookmark manager - emit focusInEvent(); + emit focusInEventOccurred(); } } @@ -71,11 +71,8 @@ setDropIndicatorShown(true); setExpandsOnDoubleClick(true); - connect(this, SIGNAL(expanded(QModelIndex)), this, - SLOT(setExpandedData(QModelIndex))); - connect(this, SIGNAL(collapsed(QModelIndex)), this, - SLOT(setExpandedData(QModelIndex))); - + connect(this, &QTreeView::expanded, this, &BookmarkTreeView::setExpandedData); + connect(this, &QTreeView::collapsed, this, &BookmarkTreeView::setExpandedData); } void BookmarkManager::BookmarkTreeView::subclassKeyPressEvent(QKeyEvent *event) @@ -162,13 +159,14 @@ { TRACE_OBJ bookmarkWidget->installEventFilter(this); - connect(bookmarkWidget->ui.add, SIGNAL(clicked()), this, - SLOT(addBookmark())); - connect(bookmarkWidget->ui.remove, SIGNAL(clicked()), this, - SLOT(removeBookmark())); - connect(bookmarkWidget->ui.lineEdit, SIGNAL(textChanged(QString)), this, - SLOT(textChanged(QString))); - connect(bookmarkWidget, SIGNAL(focusInEvent()), this, SLOT(focusInEvent())); + connect(bookmarkWidget->ui.add, &QAbstractButton::clicked, + this, &BookmarkManager::addBookmarkActivated); + connect(bookmarkWidget->ui.remove, &QAbstractButton::clicked, + this, &BookmarkManager::removeBookmarkActivated); + connect(bookmarkWidget->ui.lineEdit, &QLineEdit::textChanged, + this, &BookmarkManager::textChanged); + connect(bookmarkWidget, &BookmarkWidget::focusInEventOccurred, + this, &BookmarkManager::focusInEventOccurred); bookmarkTreeView->setModel(bookmarkModel); bookmarkTreeView->installEventFilter(this); @@ -176,26 +174,27 @@ bookmarkTreeView->setContextMenuPolicy(Qt::CustomContextMenu); bookmarkWidget->ui.stackedWidget->addWidget(bookmarkTreeView); - connect(bookmarkTreeView, SIGNAL(activated(QModelIndex)), this, - SLOT(setSourceFromIndex(QModelIndex))); - connect(bookmarkTreeView, SIGNAL(customContextMenuRequested(QPoint)), this, - SLOT(customContextMenuRequested(QPoint))); - - connect(&HelpEngineWrapper::instance(), SIGNAL(setupFinished()), this, - SLOT(setupFinished())); - connect(bookmarkModel, SIGNAL(rowsRemoved(QModelIndex,int,int)), this, - SLOT(refreshBookmarkMenu())); - connect(bookmarkModel, SIGNAL(rowsInserted(QModelIndex,int,int)), this, - SLOT(refreshBookmarkMenu())); - connect(bookmarkModel, SIGNAL(dataChanged(QModelIndex,QModelIndex)), this, - SLOT(refreshBookmarkMenu())); - - connect(bookmarkModel, SIGNAL(rowsRemoved(QModelIndex,int,int)), this, - SLOT(refreshBookmarkToolBar())); - connect(bookmarkModel, SIGNAL(rowsInserted(QModelIndex,int,int)), this, - SLOT(refreshBookmarkToolBar())); - connect(bookmarkModel, SIGNAL(dataChanged(QModelIndex,QModelIndex)), this, - SLOT(refreshBookmarkToolBar())); + connect(bookmarkTreeView, &QAbstractItemView::activated, + [this](const QModelIndex &index) { setSourceFromIndex(index, false); }); + connect(bookmarkTreeView, &QWidget::customContextMenuRequested, + this, &BookmarkManager::customContextMenuRequested); + + connect(&HelpEngineWrapper::instance(), &HelpEngineWrapper::setupFinished, + this, &BookmarkManager::setupFinished); + + connect(bookmarkModel, &QAbstractItemModel::rowsRemoved, + this, &BookmarkManager::refreshBookmarkMenu); + connect(bookmarkModel, &QAbstractItemModel::rowsInserted, + this, &BookmarkManager::refreshBookmarkMenu); + connect(bookmarkModel, &QAbstractItemModel::dataChanged, + this, &BookmarkManager::refreshBookmarkMenu); + + connect(bookmarkModel, &QAbstractItemModel::rowsRemoved, + this, &BookmarkManager::refreshBookmarkToolBar); + connect(bookmarkModel, &QAbstractItemModel::rowsInserted, + this, &BookmarkManager::refreshBookmarkToolBar); + connect(bookmarkModel, &QAbstractItemModel::dataChanged, + this, &BookmarkManager::refreshBookmarkToolBar); } BookmarkManager::~BookmarkManager() @@ -333,14 +332,14 @@ typeAndSearchModel->setSourceModel(bookmarkFilterModel); } -void BookmarkManager::addBookmark() +void BookmarkManager::addBookmarkActivated() { TRACE_OBJ if (CentralWidget *widget = CentralWidget::instance()) addBookmark(widget->currentTitle(), widget->currentSource().toString()); } -void BookmarkManager::removeBookmark() +void BookmarkManager::removeBookmarkActivated() { TRACE_OBJ removeItem(bookmarkTreeView->currentIndex()); @@ -351,12 +350,12 @@ TRACE_OBJ if (bookmarkManagerWidget == 0) { bookmarkManagerWidget = new BookmarkManagerWidget(bookmarkModel); - connect(bookmarkManagerWidget, SIGNAL(setSource(QUrl)), this, - SIGNAL(setSource(QUrl))); - connect(bookmarkManagerWidget, SIGNAL(setSourceInNewTab(QUrl)) - , this, SIGNAL(setSourceInNewTab(QUrl))); - connect(bookmarkManagerWidget, SIGNAL(managerWidgetAboutToClose()) - , this, SLOT(managerWidgetAboutToClose())); + connect(bookmarkManagerWidget, &BookmarkManagerWidget::setSource, + this, &BookmarkManager::setSource); + connect(bookmarkManagerWidget, &BookmarkManagerWidget::setSourceInNewTab, + this, &BookmarkManager::setSourceInNewTab); + connect(bookmarkManagerWidget, &BookmarkManagerWidget::managerWidgetAboutToClose, + this, &BookmarkManager::managerWidgetAboutToClose); } bookmarkManagerWidget->show(); bookmarkManagerWidget->raise(); @@ -371,9 +370,10 @@ bookmarkMenu->clear(); bookmarkMenu->addAction(tr("Manage Bookmarks..."), this, - SLOT(manageBookmarks())); - bookmarkMenu->addAction(QIcon::fromTheme("bookmark-new"), - tr("Add Bookmark..."), this, SLOT(addBookmark()), QKeySequence(tr("Ctrl+D"))); + &BookmarkManager::manageBookmarks); + bookmarkMenu->addAction(QIcon::fromTheme("bookmark-new"), tr("Add Bookmark..."), + this, &BookmarkManager::addBookmarkActivated, + QKeySequence(tr("Ctrl+D"))); bookmarkMenu->addSeparator(); @@ -386,8 +386,8 @@ for (int i = 0; i < bookmarkModel->rowCount(root); ++i) buildBookmarksMenu(bookmarkModel->index(i, 0, root), bookmarkMenu); - connect(bookmarkMenu, SIGNAL(triggered(QAction*)), this, - SLOT(setSourceFromAction(QAction*))); + connect(bookmarkMenu, &QMenu::triggered, + this, &BookmarkManager::setSourceFromAction); } void BookmarkManager::refreshBookmarkToolBar() @@ -409,8 +409,8 @@ QMenu *menu = new QMenu(button); for (int j = 0; j < bookmarkModel->rowCount(index); ++j) buildBookmarksMenu(bookmarkModel->index(j, 0, index), menu); - connect(menu, SIGNAL(triggered(QAction*)), this, - SLOT(setSourceFromAction(QAction*))); + connect(menu, &QMenu::triggered, + this, &BookmarkManager::setSourceFromAction); button->setMenu(menu); button->setToolButtonStyle(Qt::ToolButtonTextBesideIcon); button->setIcon(qvariant_cast(index.data(Qt::DecorationRole))); @@ -419,7 +419,7 @@ } else { QAction *action = m_toolBar->addAction( qvariant_cast(index.data(Qt::DecorationRole)), - index.data().toString(), this, SLOT(setSourceFromAction())); + index.data().toString(), this, &BookmarkManager::setSourceFromAction); action->setData(index.data(UserRoleUrl).toString()); } } @@ -440,17 +440,13 @@ void BookmarkManager::setSourceFromAction() { TRACE_OBJ - setSourceFromAction(qobject_cast (sender())); -} + const QAction *action = qobject_cast(sender()); + if (!action) + return; -void BookmarkManager::setSourceFromAction(QAction *action) -{ - TRACE_OBJ - if (action) { - const QVariant &data = action->data(); - if (data.canConvert()) - emit setSource(data.toUrl()); - } + const QVariant &data = action->data(); + if (data.canConvert()) + emit setSource(data.toUrl()); } void BookmarkManager::setSourceFromIndex(const QModelIndex &index, bool newTab) @@ -488,7 +484,7 @@ QAction *showItem = 0; QAction *showItemInNewTab = 0; - QMenu menu(QLatin1String("")); + QMenu menu; if (!typeAndSearch && bookmarkModel->data(index, UserRoleFolder).toBool()) { remove = menu.addAction(tr("Delete Folder")); rename = menu.addAction(tr("Rename Folder")); @@ -509,7 +505,7 @@ setSourceFromIndex(index, pickedAction == showItemInNewTab); } -void BookmarkManager::focusInEvent() +void BookmarkManager::focusInEventOccurred() { TRACE_OBJ const QModelIndex &index = bookmarkTreeView->indexAt(QPoint(2, 2)); diff -Nru qttools-opensource-src-5.7.1/src/assistant/assistant/bookmarkmanager.h qttools-opensource-src-5.9.1/src/assistant/assistant/bookmarkmanager.h --- qttools-opensource-src-5.7.1/src/assistant/assistant/bookmarkmanager.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/assistant/bookmarkmanager.h 2017-06-23 12:03:39.000000000 +0000 @@ -71,25 +71,24 @@ ~BookmarkManager(); void removeItem(const QModelIndex &index); - bool eventFilter(QObject *object, QEvent *event); + bool eventFilter(QObject *object, QEvent *event) override; void buildBookmarksMenu(const QModelIndex &index, QMenu *menu); void showBookmarkDialog(const QString &name, const QString &url); private slots: void setupFinished(); - void addBookmark(); - void removeBookmark(); + void addBookmarkActivated(); + void removeBookmarkActivated(); void manageBookmarks(); void refreshBookmarkMenu(); void refreshBookmarkToolBar(); void renameBookmark(const QModelIndex &index); void setSourceFromAction(); - void setSourceFromAction(QAction *action); - void setSourceFromIndex(const QModelIndex &index, bool newTab = false); + void setSourceFromIndex(const QModelIndex &index, bool newTab); - void focusInEvent(); + void focusInEventOccurred(); void managerWidgetAboutToClose(); void textChanged(const QString &text); void customContextMenuRequested(const QPoint &point); @@ -123,10 +122,10 @@ Ui::BookmarkWidget ui; signals: - void focusInEvent(); + void focusInEventOccurred(); private: - void focusInEvent(QFocusEvent *event); + void focusInEvent(QFocusEvent *event) override; }; class BookmarkManager::BookmarkTreeView : public QTreeView diff -Nru qttools-opensource-src-5.7.1/src/assistant/assistant/bookmarkmanagerwidget.cpp qttools-opensource-src-5.9.1/src/assistant/assistant/bookmarkmanagerwidget.cpp --- qttools-opensource-src-5.7.1/src/assistant/assistant/bookmarkmanagerwidget.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/assistant/bookmarkmanagerwidget.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -58,27 +58,36 @@ ui.treeView->viewport()->installEventFilter(this); ui.treeView->setContextMenuPolicy(Qt::CustomContextMenu); - connect(ui.treeView, SIGNAL(customContextMenuRequested(QPoint)), this, - SLOT(customContextMenuRequested(QPoint))); + connect(ui.treeView, &QWidget::customContextMenuRequested, + this, &BookmarkManagerWidget::customContextMenuRequested); - connect(ui.remove, SIGNAL(clicked()), this, SLOT(removeItem())); - connect(ui.lineEdit, SIGNAL(textChanged(QString)), this, - SLOT(textChanged(QString))); - new QShortcut(QKeySequence::Find, ui.lineEdit, SLOT(setFocus())); - - importExportMenu.addAction(tr("Import..."), this, SLOT(importBookmarks())); - importExportMenu.addAction(tr("Export..."), this, SLOT(exportBookmarks())); + connect(ui.remove, &QAbstractButton::clicked, + [this]() { removeItem(); }); + connect(ui.lineEdit, &QLineEdit::textChanged, + this, &BookmarkManagerWidget::textChanged); + QShortcut *shortcut = new QShortcut(QKeySequence::Find, ui.lineEdit); + connect(shortcut, &QShortcut::activated, + ui.lineEdit, QOverload<>::of(&QWidget::setFocus)); + + importExportMenu.addAction(tr("Import..."), this, + &BookmarkManagerWidget::importBookmarks); + importExportMenu.addAction(tr("Export..."), this, + &BookmarkManagerWidget::exportBookmarks); ui.importExport->setMenu(&importExportMenu); - new QShortcut(QKeySequence::FindNext, this, SLOT(findNext())); - new QShortcut(QKeySequence::FindPrevious, this, SLOT(findPrevious())); - - connect(bookmarkModel, SIGNAL(rowsRemoved(QModelIndex,int,int)), this, - SLOT(refeshBookmarkCache())); - connect(bookmarkModel, SIGNAL(rowsInserted(QModelIndex,int,int)), this, - SLOT(refeshBookmarkCache())); - connect(bookmarkModel, SIGNAL(dataChanged(QModelIndex,QModelIndex)), this, - SLOT(refeshBookmarkCache())); + shortcut = new QShortcut(QKeySequence::FindNext, this); + connect(shortcut, &QShortcut::activated, + this, &BookmarkManagerWidget::findNext); + shortcut = new QShortcut(QKeySequence::FindPrevious, this); + connect(shortcut, &QShortcut::activated, + this, &BookmarkManagerWidget::findPrevious); + + connect(bookmarkModel, &QAbstractItemModel::rowsRemoved, + this, &BookmarkManagerWidget::refeshBookmarkCache); + connect(bookmarkModel, &QAbstractItemModel::rowsInserted, + this, &BookmarkManagerWidget::refeshBookmarkCache); + connect(bookmarkModel, &QAbstractItemModel::dataChanged, + this, &BookmarkManagerWidget::refeshBookmarkCache); ui.treeView->setCurrentIndex(ui.treeView->indexAt(QPoint(2, 2))); } @@ -264,7 +273,7 @@ QAction *showItem = 0; QAction *showItemInNewTab = 0; - QMenu menu(QLatin1String("")); + QMenu menu; if (bookmarkModel->data(index, UserRoleFolder).toBool()) { remove = menu.addAction(tr("Delete Folder")); rename = menu.addAction(tr("Rename Folder")); diff -Nru qttools-opensource-src-5.7.1/src/assistant/assistant/bookmarkmanagerwidget.h qttools-opensource-src-5.9.1/src/assistant/assistant/bookmarkmanagerwidget.h --- qttools-opensource-src-5.7.1/src/assistant/assistant/bookmarkmanagerwidget.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/assistant/bookmarkmanagerwidget.h 2017-06-23 12:03:39.000000000 +0000 @@ -49,7 +49,7 @@ ~BookmarkManagerWidget(); protected: - void closeEvent(QCloseEvent *event); + void closeEvent(QCloseEvent *event) override; signals: void setSource(const QUrl &url); @@ -60,7 +60,7 @@ private: void renameItem(const QModelIndex &index); void selectNextIndex(bool direction) const; - bool eventFilter(QObject *object, QEvent *event); + bool eventFilter(QObject *object, QEvent *event) override; private slots: void findNext(); diff -Nru qttools-opensource-src-5.7.1/src/assistant/assistant/bookmarkmodel.cpp qttools-opensource-src-5.9.1/src/assistant/assistant/bookmarkmodel.cpp --- qttools-opensource-src-5.7.1/src/assistant/assistant/bookmarkmodel.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/assistant/bookmarkmodel.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -127,7 +127,7 @@ void BookmarkModel::expandFoldersIfNeeeded(QTreeView *treeView) { - foreach (const QModelIndex &index, cache) + for (const QModelIndex &index : qAsConst(cache)) treeView->setExpanded(index, index.data(UserRoleExpanded).toBool()); } @@ -154,7 +154,7 @@ indexes = collectItems(index); indexes.append(index); - foreach (const QModelIndex &itemToRemove, indexes) { + for (const QModelIndex &itemToRemove : qAsConst(indexes)) { if (!removeRow(itemToRemove.row(), itemToRemove.parent())) return false; cache.remove(itemFromIndex(itemToRemove)); @@ -239,7 +239,7 @@ case Qt::EditRole: { case Qt::DisplayRole: if (index.data(UserRoleFolder).toBool() && index.column() == 1) - return QLatin1String(""); + return QString(); return item->data(index.column()); } break; @@ -315,7 +315,7 @@ { QList hits; const QModelIndexList &list = collectItems(QModelIndex()); - foreach(const QModelIndex &index, list) { + for (const QModelIndex &index : list) { if (index.data().toString().contains(label, Qt::CaseInsensitive)) hits.prepend(index); // list is reverse sorted } @@ -368,7 +368,7 @@ QByteArray data; QDataStream stream(&data, QIODevice::WriteOnly); - foreach (const QModelIndex &index, indexes) { + for (const QModelIndex &index : indexes) { if (index.column() == 0) collectItems(index, 0, &stream); } @@ -413,7 +413,7 @@ BookmarkModel::setupCache(const QModelIndex &parent) { const QModelIndexList &list = collectItems(parent); - foreach (const QModelIndex &index, list) + for (const QModelIndex &index : list) cache.insert(itemFromIndex(index), index); } diff -Nru qttools-opensource-src-5.7.1/src/assistant/assistant/bookmarkmodel.h qttools-opensource-src-5.9.1/src/assistant/assistant/bookmarkmodel.h --- qttools-opensource-src-5.7.1/src/assistant/assistant/bookmarkmodel.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/assistant/bookmarkmodel.h 2017-06-23 12:03:39.000000000 +0000 @@ -56,31 +56,31 @@ QModelIndex addItem(const QModelIndex &parent, bool isFolder = false); bool removeItem(const QModelIndex &index); - int rowCount(const QModelIndex &index = QModelIndex()) const; - int columnCount(const QModelIndex &index = QModelIndex()) const; + int rowCount(const QModelIndex &index = QModelIndex()) const override; + int columnCount(const QModelIndex &index = QModelIndex()) const override; - QModelIndex parent(const QModelIndex &index) const; - QModelIndex index(int row, int column, const QModelIndex &index) const; + QModelIndex parent(const QModelIndex &index) const override; + QModelIndex index(int row, int column, const QModelIndex &index) const override; - Qt::DropActions supportedDropActions () const; - Qt::ItemFlags flags(const QModelIndex &index) const; + Qt::DropActions supportedDropActions () const override; + Qt::ItemFlags flags(const QModelIndex &index) const override; - QVariant data(const QModelIndex &index, int role) const; + QVariant data(const QModelIndex &index, int role) const override; void setData(const QModelIndex &index, const QVector &data); - bool setData(const QModelIndex &index, const QVariant &value, int role); - QVariant headerData(int section, Qt::Orientation orientation, int role) const; + bool setData(const QModelIndex &index, const QVariant &value, int role) override; + QVariant headerData(int section, Qt::Orientation orientation, int role) const override; QModelIndex indexFromItem(BookmarkItem *item) const; BookmarkItem *itemFromIndex(const QModelIndex &index) const; QList indexListFor(const QString &label) const; - bool insertRows(int position, int rows, const QModelIndex &parent); - bool removeRows(int position, int rows, const QModelIndex &parent); + bool insertRows(int position, int rows, const QModelIndex &parent) override; + bool removeRows(int position, int rows, const QModelIndex &parent) override; - QStringList mimeTypes() const; - QMimeData* mimeData(const QModelIndexList &indexes) const; + QStringList mimeTypes() const override; + QMimeData* mimeData(const QModelIndexList &indexes) const override; bool dropMimeData(const QMimeData *data, Qt::DropAction action, int row, - int column, const QModelIndex &parent); + int column, const QModelIndex &parent) override; private: void setupCache(const QModelIndex &parent); diff -Nru qttools-opensource-src-5.7.1/src/assistant/assistant/centralwidget.cpp qttools-opensource-src-5.9.1/src/assistant/assistant/centralwidget.cpp --- qttools-opensource-src-5.7.1/src/assistant/assistant/centralwidget.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/assistant/centralwidget.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -71,10 +71,12 @@ setContextMenuPolicy(Qt::CustomContextMenu); setSizePolicy(QSizePolicy(QSizePolicy::Maximum, QSizePolicy::Preferred, QSizePolicy::TabWidget)); - connect(this, SIGNAL(currentChanged(int)), this, SLOT(slotCurrentChanged(int))); - connect(this, SIGNAL(tabCloseRequested(int)), this, SLOT(slotTabCloseRequested(int))); - connect(this, SIGNAL(customContextMenuRequested(QPoint)), this, - SLOT(slotCustomContextMenuRequested(QPoint))); + connect(this, &QTabBar::currentChanged, + this, &TabBar::slotCurrentChanged); + connect(this, &QTabBar::tabCloseRequested, + this, &TabBar::slotTabCloseRequested); + connect(this, &QWidget::customContextMenuRequested, + this, &TabBar::slotCustomContextMenuRequested); } TabBar::~TabBar() @@ -145,8 +147,9 @@ if (tab < 0) return; - QMenu menu(QLatin1String(""), this); - menu.addAction(tr("New &Tab"), OpenPagesManager::instance(), SLOT(createPage())); + QMenu menu(QString(), this); + menu.addAction(tr("New &Tab"), OpenPagesManager::instance(), + &OpenPagesManager::createBlankPage); const bool enableAction = count() > 1; QAction *closePage = menu.addAction(tr("&Close Tab")); @@ -198,13 +201,11 @@ vboxLayout->addWidget(m_findWidget); m_findWidget->hide(); - connect(m_findWidget, SIGNAL(findNext()), this, SLOT(findNext())); - connect(m_findWidget, SIGNAL(findPrevious()), this, SLOT(findPrevious())); - connect(m_findWidget, SIGNAL(find(QString,bool,bool)), this, - SLOT(find(QString,bool,bool))); - connect(m_findWidget, SIGNAL(escapePressed()), this, SLOT(activateTab())); - connect(m_tabBar, SIGNAL(addBookmark(QString,QString)), this, - SIGNAL(addBookmark(QString,QString))); + connect(m_findWidget, &FindWidget::findNext, this, &CentralWidget::findNext); + connect(m_findWidget, &FindWidget::findPrevious, this, &CentralWidget::findPrevious); + connect(m_findWidget, &FindWidget::find, this, &CentralWidget::find); + connect(m_findWidget, &FindWidget::escapePressed, this, &CentralWidget::activateTab); + connect(m_tabBar, &TabBar::addBookmark, this, &CentralWidget::addBookmark); } CentralWidget::~CentralWidget() @@ -288,11 +289,11 @@ const int index = m_stackedWidget->addWidget(page); m_tabBar->setTabData(m_tabBar->addNewTab(page->title()), QVariant::fromValue(viewerAt(index))); - connect (page, SIGNAL(titleChanged()), m_tabBar, SLOT(titleChanged())); + connect(page, &HelpViewer::titleChanged, m_tabBar, &TabBar::titleChanged); if (fromSearch) { - connect(currentHelpViewer(), SIGNAL(loadFinished(bool)), this, - SLOT(highlightSearchTerms())); + connect(currentHelpViewer(), &HelpViewer::loadFinished, + this, &CentralWidget::highlightSearchTerms); } } @@ -323,8 +324,8 @@ void CentralWidget::connectTabBar() { TRACE_OBJ - connect(m_tabBar, SIGNAL(currentTabChanged(HelpViewer*)), - OpenPagesManager::instance(), SLOT(setCurrentPage(HelpViewer*))); + connect(m_tabBar, &TabBar::currentTabChanged, OpenPagesManager::instance(), + QOverload::of(&OpenPagesManager::setCurrentPage)); } // -- public slots @@ -420,8 +421,8 @@ #if !defined(QT_NO_PRINTER) && !defined(QT_NO_PRINTDIALOG) initPrinter(); QPrintPreviewDialog preview(m_printer, this); - connect(&preview, SIGNAL(paintRequested(QPrinter*)), - SLOT(printPreview(QPrinter*))); + connect(&preview, &QPrintPreviewDialog::paintRequested, + this, &CentralWidget::printPreviewToPrinter); preview.exec(); #endif } @@ -437,8 +438,8 @@ void CentralWidget::setSourceFromSearch(const QUrl &url) { TRACE_OBJ - connect(currentHelpViewer(), SIGNAL(loadFinished(bool)), this, - SLOT(highlightSearchTerms())); + connect(currentHelpViewer(), &HelpViewer::loadFinished, + this, &CentralWidget::highlightSearchTerms); currentHelpViewer()->setSource(url); currentHelpViewer()->setFocus(Qt::OtherFocusReason); } @@ -526,10 +527,11 @@ // otherwise it's the central widget. This is needed, so an embedding // program can just set the focus to the central widget and it does // The Right Thing(TM) - QObject *receiver = m_stackedWidget; + QWidget *receiver = m_stackedWidget; if (HelpViewer *viewer = currentHelpViewer()) receiver = viewer; - QTimer::singleShot(1, receiver, SLOT(setFocus())); + QTimer::singleShot(1, receiver, + QOverload<>::of(&QWidget::setFocus)); } // -- private slots @@ -539,30 +541,16 @@ TRACE_OBJ QHelpSearchEngine *searchEngine = HelpEngineWrapper::instance().searchEngine(); - QList queryList = searchEngine->query(); - - QStringList terms; - foreach (const QHelpSearchQuery &query, queryList) { - switch (query.fieldName) { - default: break; - case QHelpSearchQuery::ALL: { - case QHelpSearchQuery::PHRASE: - case QHelpSearchQuery::DEFAULT: - case QHelpSearchQuery::ATLEAST: - foreach (QString term, query.wordList) - terms.append(term.remove(QLatin1Char('"'))); - } - } - } + const QStringList &words = searchEngine->searchInput().split(QRegExp("\\W+"), QString::SkipEmptyParts); HelpViewer *viewer = currentHelpViewer(); - foreach (const QString& term, terms) - viewer->findText(term, 0, false, true); - disconnect(viewer, SIGNAL(loadFinished(bool)), this, - SLOT(highlightSearchTerms())); + for (const QString &word : words) + viewer->findText(word, 0, false, true); + disconnect(viewer, &HelpViewer::loadFinished, + this, &CentralWidget::highlightSearchTerms); } -void CentralWidget::printPreview(QPrinter *p) +void CentralWidget::printPreviewToPrinter(QPrinter *p) { TRACE_OBJ #ifndef QT_NO_PRINTER @@ -603,17 +591,19 @@ { TRACE_OBJ #if defined(BROWSER_QTWEBKIT) - connect(page, SIGNAL(printRequested()), this, SLOT(print())); + connect(page, &HelpViewer::printRequested, + this, &CentralWidget::print); #endif - connect(page, SIGNAL(copyAvailable(bool)), this, - SIGNAL(copyAvailable(bool))); - connect(page, SIGNAL(forwardAvailable(bool)), this, - SIGNAL(forwardAvailable(bool))); - connect(page, SIGNAL(backwardAvailable(bool)), this, - SIGNAL(backwardAvailable(bool))); - connect(page, SIGNAL(sourceChanged(QUrl)), this, - SLOT(handleSourceChanged(QUrl))); - connect(page, SIGNAL(highlighted(QString)), this, SLOT(slotHighlighted(QString))); + connect(page, &HelpViewer::copyAvailable, + this, &CentralWidget::copyAvailable); + connect(page, &HelpViewer::forwardAvailable, + this, &CentralWidget::forwardAvailable); + connect(page, &HelpViewer::backwardAvailable, + this, &CentralWidget::backwardAvailable); + connect(page, &HelpViewer::sourceChanged, + this, &CentralWidget::handleSourceChanged); + connect(page, QOverload::of(&HelpViewer::highlighted), + this, &CentralWidget::slotHighlighted); } bool CentralWidget::eventFilter(QObject *object, QEvent *e) diff -Nru qttools-opensource-src-5.7.1/src/assistant/assistant/centralwidget.h qttools-opensource-src-5.9.1/src/assistant/assistant/centralwidget.h --- qttools-opensource-src-5.7.1/src/assistant/assistant/centralwidget.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/assistant/centralwidget.h 2017-06-23 12:03:39.000000000 +0000 @@ -135,19 +135,19 @@ void addBookmark(const QString &title, const QString &url); protected: - void keyPressEvent(QKeyEvent *); - void focusInEvent(QFocusEvent *event); + void keyPressEvent(QKeyEvent *) override; + void focusInEvent(QFocusEvent *event) override; private slots: void highlightSearchTerms(); - void printPreview(QPrinter *printer); + void printPreviewToPrinter(QPrinter *printer); void handleSourceChanged(const QUrl &url); void slotHighlighted(const QString &link); private: void initPrinter(); void connectSignals(HelpViewer *page); - bool eventFilter(QObject *object, QEvent *e); + bool eventFilter(QObject *object, QEvent *e) override; void removePage(int index); void setCurrentPage(HelpViewer *page); diff -Nru qttools-opensource-src-5.7.1/src/assistant/assistant/cmdlineparser.cpp qttools-opensource-src-5.9.1/src/assistant/assistant/cmdlineparser.cpp --- qttools-opensource-src-5.7.1/src/assistant/assistant/cmdlineparser.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/assistant/cmdlineparser.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -60,7 +60,9 @@ " file.\n" "-setCurrentFilter filter Set the filter as the active filter.\n" "-remove-search-index Removes the full text search index.\n" - "-rebuild-search-index Re-builds the full text search index (potentially slow).\n" + "-rebuild-search-index Obsolete. Use -remove-search-index instead.\n" + " Removes the full text search index.\n" + " It will be rebuilt on next Assistant run.\n" "-quiet Does not display any error or\n" " status message.\n" "-help Displays this help.\n" @@ -76,7 +78,6 @@ m_search(Untouched), m_register(None), m_removeSearchIndex(false), - m_rebuildSearchIndex(false), m_quiet(false) { TRACE_OBJ @@ -117,7 +118,7 @@ else if (arg == QLatin1String("-remove-search-index")) m_removeSearchIndex = true; else if (arg == QLatin1String("-rebuild-search-index")) - m_rebuildSearchIndex = true; + m_removeSearchIndex = true; else if (arg == QLatin1String("-help")) showHelp = true; else @@ -342,12 +343,6 @@ return m_removeSearchIndex; } -bool CmdLineParser::rebuildSearchIndex() const -{ - TRACE_OBJ - return m_rebuildSearchIndex; -} - CmdLineParser::RegisterState CmdLineParser::registerRequest() const { TRACE_OBJ diff -Nru qttools-opensource-src-5.7.1/src/assistant/assistant/cmdlineparser.h qttools-opensource-src-5.9.1/src/assistant/assistant/cmdlineparser.h --- qttools-opensource-src-5.7.1/src/assistant/assistant/cmdlineparser.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/assistant/cmdlineparser.h 2017-06-23 12:03:39.000000000 +0000 @@ -94,7 +94,6 @@ RegisterState m_register; QString m_currentFilter; bool m_removeSearchIndex; - bool m_rebuildSearchIndex; bool m_quiet; QString m_error; }; diff -Nru qttools-opensource-src-5.7.1/src/assistant/assistant/contentwindow.cpp qttools-opensource-src-5.9.1/src/assistant/assistant/contentwindow.cpp --- qttools-opensource-src-5.7.1/src/assistant/assistant/contentwindow.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/assistant/contentwindow.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -54,14 +54,15 @@ layout->setMargin(4); layout->addWidget(m_contentWidget); - connect(m_contentWidget, SIGNAL(customContextMenuRequested(QPoint)), this, - SLOT(showContextMenu(QPoint))); - connect(m_contentWidget, SIGNAL(linkActivated(QUrl)), this, - SIGNAL(linkActivated(QUrl))); + connect(m_contentWidget, &QWidget::customContextMenuRequested, + this, &ContentWindow::showContextMenu); + connect(m_contentWidget, &QHelpContentWidget::linkActivated, + this, &ContentWindow::linkActivated); QHelpContentModel *contentModel = qobject_cast(m_contentWidget->model()); - connect(contentModel, SIGNAL(contentsCreated()), this, SLOT(expandTOC())); + connect(contentModel, &QHelpContentModel::contentsCreated, + this, &ContentWindow::expandTOC); } ContentWindow::~ContentWindow() diff -Nru qttools-opensource-src-5.7.1/src/assistant/assistant/contentwindow.h qttools-opensource-src-5.9.1/src/assistant/assistant/contentwindow.h --- qttools-opensource-src-5.7.1/src/assistant/assistant/contentwindow.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/assistant/contentwindow.h 2017-06-23 12:03:39.000000000 +0000 @@ -60,9 +60,9 @@ void itemClicked(const QModelIndex &index); private: - void focusInEvent(QFocusEvent *e); - void keyPressEvent(QKeyEvent *e); - bool eventFilter(QObject *o, QEvent *e); + void focusInEvent(QFocusEvent *e) override; + void keyPressEvent(QKeyEvent *e) override; + bool eventFilter(QObject *o, QEvent *e) override; QHelpContentWidget * const m_contentWidget; int m_expandDepth; diff -Nru qttools-opensource-src-5.7.1/src/assistant/assistant/filternamedialog.cpp qttools-opensource-src-5.9.1/src/assistant/assistant/filternamedialog.cpp --- qttools-opensource-src-5.7.1/src/assistant/assistant/filternamedialog.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/assistant/filternamedialog.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -38,14 +38,13 @@ { TRACE_OBJ m_ui.setupUi(this); - connect(m_ui.buttonBox->button(QDialogButtonBox::Ok), - SIGNAL(clicked()), this, SLOT(accept())); - connect(m_ui.buttonBox->button(QDialogButtonBox::Cancel), - SIGNAL(clicked()), this, SLOT(reject())); - connect(m_ui.lineEdit, SIGNAL(textChanged(QString)), - this, SLOT(updateOkButton())); + connect(m_ui.buttonBox->button(QDialogButtonBox::Ok), &QAbstractButton::clicked, + this, &QDialog::accept); + connect(m_ui.buttonBox->button(QDialogButtonBox::Cancel), &QAbstractButton::clicked, + this, &QDialog::reject); + connect(m_ui.lineEdit, &QLineEdit::textChanged, + this, &FilterNameDialog::updateOkButton); m_ui.buttonBox->button(QDialogButtonBox::Ok)->setDisabled(true); - } QString FilterNameDialog::filterName() const diff -Nru qttools-opensource-src-5.7.1/src/assistant/assistant/findwidget.cpp qttools-opensource-src-5.9.1/src/assistant/assistant/findwidget.cpp --- qttools-opensource-src-5.7.1/src/assistant/assistant/findwidget.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/assistant/findwidget.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -56,29 +56,28 @@ resourcePath.append(QLatin1String("mac")); #endif - toolClose = setupToolButton(QLatin1String(""), + toolClose = setupToolButton(QString(), resourcePath + QLatin1String("/closetab.png")); hboxLayout->addWidget(toolClose); - connect(toolClose, SIGNAL(clicked()), SLOT(hide())); + connect(toolClose, &QAbstractButton::clicked, this, &QWidget::hide); editFind = new QLineEdit(this); hboxLayout->addWidget(editFind); editFind->setMinimumSize(QSize(150, 0)); - connect(editFind, SIGNAL(textChanged(QString)), this, - SLOT(textChanged(QString))); - connect(editFind, SIGNAL(returnPressed()), this, SIGNAL(findNext())); - connect(editFind, SIGNAL(textChanged(QString)), this, SLOT(updateButtons())); + connect(editFind, &QLineEdit::textChanged, this, &FindWidget::textChanged); + connect(editFind, &QLineEdit::returnPressed, this, &FindWidget::findNext); + connect(editFind, &QLineEdit::textChanged, this, &FindWidget::updateButtons); toolPrevious = setupToolButton(tr("Previous"), resourcePath + QLatin1String("/previous.png")); - connect(toolPrevious, SIGNAL(clicked()), this, SIGNAL(findPrevious())); + connect(toolPrevious, &QAbstractButton::clicked, this, &FindWidget::findPrevious); hboxLayout->addWidget(toolPrevious); toolNext = setupToolButton(tr("Next"), resourcePath + QLatin1String("/next.png")); hboxLayout->addWidget(toolNext); - connect(toolNext, SIGNAL(clicked()), this, SIGNAL(findNext())); + connect(toolNext, &QAbstractButton::clicked, this, &FindWidget::findNext); checkCase = new QCheckBox(tr("Case Sensitive"), this); hboxLayout->addWidget(checkCase); diff -Nru qttools-opensource-src-5.7.1/src/assistant/assistant/findwidget.h qttools-opensource-src-5.9.1/src/assistant/assistant/findwidget.h --- qttools-opensource-src-5.7.1/src/assistant/assistant/findwidget.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/assistant/findwidget.h 2017-06-23 12:03:39.000000000 +0000 @@ -60,15 +60,15 @@ void find(const QString &text, bool forward, bool incremental); protected: - void hideEvent(QHideEvent* event); - void showEvent(QShowEvent * event); + void hideEvent(QHideEvent* event) override; + void showEvent(QShowEvent * event) override; private slots: void updateButtons(); void textChanged(const QString &text); private: - bool eventFilter(QObject *object, QEvent *e); + bool eventFilter(QObject *object, QEvent *e) override; QToolButton* setupToolButton(const QString &text, const QString &icon); private: diff -Nru qttools-opensource-src-5.7.1/src/assistant/assistant/globalactions.cpp qttools-opensource-src-5.9.1/src/assistant/assistant/globalactions.cpp --- qttools-opensource-src-5.7.1/src/assistant/assistant/globalactions.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/assistant/globalactions.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -64,7 +64,7 @@ m_backAction->setEnabled(false); m_backAction->setShortcuts(QKeySequence::Back); m_backAction->setIcon(QIcon(resourcePath + QLatin1String("/previous.png"))); - connect(m_backAction, SIGNAL(triggered()), centralWidget, SLOT(backward())); + connect(m_backAction, &QAction::triggered, centralWidget, &CentralWidget::backward); m_actionList << m_backAction; m_nextAction = new QAction(tr("&Forward"), parent); @@ -72,7 +72,7 @@ m_nextAction->setEnabled(false); m_nextAction->setShortcuts(QKeySequence::Forward); m_nextAction->setIcon(QIcon(resourcePath + QLatin1String("/next.png"))); - connect(m_nextAction, SIGNAL(triggered()), centralWidget, SLOT(forward())); + connect(m_nextAction, &QAction::triggered, centralWidget, &CentralWidget::forward); m_actionList << m_nextAction; setupNavigationMenus(m_backAction, m_nextAction, centralWidget); @@ -80,7 +80,7 @@ m_homeAction = new QAction(tr("&Home"), parent); m_homeAction->setShortcut(tr("ALT+Home")); m_homeAction->setIcon(QIcon(resourcePath + QLatin1String("/home.png"))); - connect(m_homeAction, SIGNAL(triggered()), centralWidget, SLOT(home())); + connect(m_homeAction, &QAction::triggered, centralWidget, &CentralWidget::home); m_actionList << m_homeAction; QAction *separator = new QAction(parent); @@ -91,14 +91,14 @@ m_zoomInAction->setPriority(QAction::LowPriority); m_zoomInAction->setIcon(QIcon(resourcePath + QLatin1String("/zoomin.png"))); m_zoomInAction->setShortcut(QKeySequence::ZoomIn); - connect(m_zoomInAction, SIGNAL(triggered()), centralWidget, SLOT(zoomIn())); + connect(m_zoomInAction, &QAction::triggered, centralWidget, &CentralWidget::zoomIn); m_actionList << m_zoomInAction; m_zoomOutAction = new QAction(tr("Zoom &out"), parent); m_zoomOutAction->setPriority(QAction::LowPriority); m_zoomOutAction->setIcon(QIcon(resourcePath + QLatin1String("/zoomout.png"))); m_zoomOutAction->setShortcut(QKeySequence::ZoomOut); - connect(m_zoomOutAction, SIGNAL(triggered()), centralWidget, SLOT(zoomOut())); + connect(m_zoomOutAction, &QAction::triggered, centralWidget, &CentralWidget::zoomOut); m_actionList << m_zoomOutAction; separator = new QAction(parent); @@ -111,21 +111,21 @@ m_copyAction->setIcon(QIcon(resourcePath + QLatin1String("/editcopy.png"))); m_copyAction->setShortcuts(QKeySequence::Copy); m_copyAction->setEnabled(false); - connect(m_copyAction, SIGNAL(triggered()), centralWidget, SLOT(copy())); + connect(m_copyAction, &QAction::triggered, centralWidget, &CentralWidget::copy); m_actionList << m_copyAction; m_printAction = new QAction(tr("&Print..."), parent); m_printAction->setPriority(QAction::LowPriority); m_printAction->setIcon(QIcon(resourcePath + QLatin1String("/print.png"))); m_printAction->setShortcut(QKeySequence::Print); - connect(m_printAction, SIGNAL(triggered()), centralWidget, SLOT(print())); + connect(m_printAction, &QAction::triggered, centralWidget, &CentralWidget::print); m_actionList << m_printAction; m_findAction = new QAction(tr("&Find in Text..."), parent); m_findAction->setIconText(tr("&Find")); m_findAction->setIcon(QIcon(resourcePath + QLatin1String("/find.png"))); m_findAction->setShortcuts(QKeySequence::Find); - connect(m_findAction, SIGNAL(triggered()), centralWidget, SLOT(showTextSearch())); + connect(m_findAction, &QAction::triggered, centralWidget, &CentralWidget::showTextSearch); m_actionList << m_findAction; #if defined (Q_OS_UNIX) && !defined(Q_OS_MAC) @@ -211,17 +211,17 @@ { #if defined(BROWSER_QTWEBKIT) m_backMenu = new QMenu(parent); - connect(m_backMenu, SIGNAL(aboutToShow()), this, - SLOT(slotAboutToShowBackMenu())); - connect(m_backMenu, SIGNAL(triggered(QAction*)), this, - SLOT(slotOpenActionUrl(QAction*))); + connect(m_backMenu, &QMenu::aboutToShow, + this, &GlobalActions::slotAboutToShowBackMenu); + connect(m_backMenu, &QMenu::triggered, + this, &GlobalActions::slotOpenActionUrl); back->setMenu(m_backMenu); m_nextMenu = new QMenu(parent); - connect(m_nextMenu, SIGNAL(aboutToShow()), this, - SLOT(slotAboutToShowNextMenu())); - connect(m_nextMenu, SIGNAL(triggered(QAction*)), this, - SLOT(slotOpenActionUrl(QAction*))); + connect(m_nextMenu, &QMenu::aboutToShow, + this, &GlobalActions::slotAboutToShowNextMenu); + connect(m_nextMenu, &QMenu::triggered, + this, &GlobalActions::slotOpenActionUrl); next->setMenu(m_nextMenu); #else Q_UNUSED(back) diff -Nru qttools-opensource-src-5.7.1/src/assistant/assistant/helpbrowsersupport.cpp qttools-opensource-src-5.9.1/src/assistant/assistant/helpbrowsersupport.cpp --- qttools-opensource-src-5.7.1/src/assistant/assistant/helpbrowsersupport.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/assistant/helpbrowsersupport.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -93,13 +93,13 @@ HelpNetworkReply(const QNetworkRequest &request, const QByteArray &fileData, const QString &mimeType); - virtual void abort(); + void abort() override; - virtual qint64 bytesAvailable() const + qint64 bytesAvailable() const override { return data.length() + QNetworkReply::bytesAvailable(); } protected: - virtual qint64 readData(char *data, qint64 maxlen); + qint64 readData(char *data, qint64 maxlen) override; private: QByteArray data; @@ -155,8 +155,8 @@ } protected: - void abort() { TRACE_OBJ } - qint64 readData(char*, qint64) { TRACE_OBJ return qint64(-1); } + void abort() override { TRACE_OBJ } + qint64 readData(char*, qint64) override { TRACE_OBJ return qint64(-1); } }; // -- HelpNetworkAccessManager @@ -167,8 +167,8 @@ HelpNetworkAccessManager(QObject *parent); protected: - virtual QNetworkReply *createRequest(Operation op, - const QNetworkRequest &request, QIODevice *outgoingData = 0); + QNetworkReply *createRequest(Operation op, + const QNetworkRequest &request, QIODevice *outgoingData = 0) override; }; HelpNetworkAccessManager::HelpNetworkAccessManager(QObject *parent) diff -Nru qttools-opensource-src-5.7.1/src/assistant/assistant/helpenginewrapper.cpp qttools-opensource-src-5.9.1/src/assistant/assistant/helpenginewrapper.cpp --- qttools-opensource-src-5.7.1/src/assistant/assistant/helpenginewrapper.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/assistant/helpenginewrapper.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -107,7 +107,7 @@ const QString HelpEngineWrapper::TrUnfiltered() { static QString s; - if (s.isNull()) + if (s.isEmpty()) s = HelpEngineWrapper::tr("Unfiltered"); return s; } @@ -121,7 +121,7 @@ * Note that this Singleton cannot be static, because it has to be * deleted before the QApplication. */ - if (helpEngineWrapper == 0) + if (!helpEngineWrapper) helpEngineWrapper = new HelpEngineWrapper(collectionFile); return *helpEngineWrapper; } @@ -146,24 +146,24 @@ * This call is reverted by initialDocSetupDone(), which must be * called after the new docs have been installed. */ - disconnect(d->m_helpEngine, SIGNAL(setupFinished()), - searchEngine(), SLOT(indexDocumentation())); + disconnect(d->m_helpEngine, &QHelpEngineCore::setupFinished, + searchEngine(), &QHelpSearchEngine::scheduleIndexDocumentation); - connect(d, SIGNAL(documentationRemoved(QString)), - this, SIGNAL(documentationRemoved(QString))); - connect(d, SIGNAL(documentationUpdated(QString)), - this, SIGNAL(documentationUpdated(QString))); - connect(d->m_helpEngine, SIGNAL(currentFilterChanged(QString)), - this, SLOT(handleCurrentFilterChanged(QString))); - connect(d->m_helpEngine, SIGNAL(setupFinished()), - this, SIGNAL(setupFinished())); + connect(d, &HelpEngineWrapperPrivate::documentationRemoved, + this, &HelpEngineWrapper::documentationRemoved); + connect(d, &HelpEngineWrapperPrivate::documentationUpdated, + this, &HelpEngineWrapper::documentationUpdated); + connect(d->m_helpEngine, &QHelpEngineCore::currentFilterChanged, + this, &HelpEngineWrapper::handleCurrentFilterChanged); + connect(d->m_helpEngine, &QHelpEngineCore::setupFinished, + this, &HelpEngineWrapper::setupFinished); } HelpEngineWrapper::~HelpEngineWrapper() { TRACE_OBJ const QStringList &namespaces = d->m_helpEngine->registeredDocumentations(); - foreach (const QString &nameSpace, namespaces) { + for (const QString &nameSpace : namespaces) { const QString &docFile = d->m_helpEngine->documentationFileName(nameSpace); d->m_qchWatcher->removePath(docFile); @@ -175,8 +175,8 @@ void HelpEngineWrapper::initialDocSetupDone() { TRACE_OBJ - connect(d->m_helpEngine, SIGNAL(setupFinished()), - searchEngine(), SLOT(indexDocumentation())); + connect(d->m_helpEngine, &QHelpEngineCore::setupFinished, + searchEngine(), &QHelpSearchEngine::scheduleIndexDocumentation); setupData(); } @@ -759,11 +759,11 @@ void HelpEngineWrapperPrivate::initFileSystemWatchers() { TRACE_OBJ - foreach(const QString &ns, m_helpEngine->registeredDocumentations()) { + for (const QString &ns : m_helpEngine->registeredDocumentations()) { const QString &docFile = m_helpEngine->documentationFileName(ns); m_qchWatcher->addPath(docFile); - connect(m_qchWatcher, SIGNAL(fileChanged(QString)), - this, SLOT(qchFileChanged(QString))); + connect(m_qchWatcher, &QFileSystemWatcher::fileChanged, this, + QOverload::of(&HelpEngineWrapperPrivate::qchFileChanged)); } checkDocFilesWatched(); } @@ -795,7 +795,7 @@ * may not exist anymore or contain a different namespace. */ QString ns; - foreach (const QString &curNs, m_helpEngine->registeredDocumentations()) { + for (const QString &curNs : m_helpEngine->registeredDocumentations()) { if (m_helpEngine->documentationFileName(curNs) == fileName) { ns = curNs; break; @@ -817,14 +817,15 @@ * was sent. */ - QMap::Iterator it = m_recentQchUpdates.find(fileName); + const auto &it = m_recentQchUpdates.find(fileName); const QDateTime &now = QDateTime::currentDateTime(); // Case 1: This is the first recent signal for the file. if (it == m_recentQchUpdates.end()) { QSharedPointer forwarder(new TimeoutForwarder(fileName)); m_recentQchUpdates.insert(fileName, RecentSignal(now, forwarder)); - QTimer::singleShot(UpdateGracePeriod, forwarder.data(), SLOT(forward())); + QTimer::singleShot(UpdateGracePeriod, forwarder.data(), + &TimeoutForwarder::forward); return; } @@ -834,7 +835,7 @@ it.value().first = now; else QTimer::singleShot(UpdateGracePeriod, it.value().second.data(), - SLOT(forward())); + &TimeoutForwarder::forward); return; } diff -Nru qttools-opensource-src-5.7.1/src/assistant/assistant/helpviewer.h qttools-opensource-src-5.9.1/src/assistant/assistant/helpviewer.h --- qttools-opensource-src-5.7.1/src/assistant/assistant/helpviewer.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/assistant/helpviewer.h 2017-06-23 12:03:39.000000000 +0000 @@ -48,8 +48,10 @@ class HelpEngineWrapper; #if defined(BROWSER_QTWEBKIT) +#define TEXTBROWSER_OVERRIDE class HelpViewer : public QWebView #elif defined(BROWSER_QTEXTBROWSER) +#define TEXTBROWSER_OVERRIDE override class HelpViewer : public QTextBrowser #endif { @@ -80,7 +82,7 @@ void setTitle(const QString &title); QUrl source() const; - void setSource(const QUrl &url); + void setSource(const QUrl &url) TEXTBROWSER_OVERRIDE; QString selectedText() const; bool isForwardAvailable() const; @@ -102,10 +104,10 @@ #ifndef QT_NO_CLIPBOARD void copy(); #endif - void home(); + void home() TEXTBROWSER_OVERRIDE; - void forward(); - void backward(); + void forward() TEXTBROWSER_OVERRIDE; + void backward() TEXTBROWSER_OVERRIDE; signals: void titleChanged(); @@ -124,10 +126,10 @@ #endif protected: - void keyPressEvent(QKeyEvent *e); - void wheelEvent(QWheelEvent *event); - void mousePressEvent(QMouseEvent *event); - void mouseReleaseEvent(QMouseEvent *event); + void keyPressEvent(QKeyEvent *e) override; + void wheelEvent(QWheelEvent *event) override; + void mousePressEvent(QMouseEvent *event) override; + void mouseReleaseEvent(QMouseEvent *event) override; private slots: void actionChanged(); @@ -135,9 +137,9 @@ void setLoadFinished(bool ok); private: - bool eventFilter(QObject *obj, QEvent *event); - void contextMenuEvent(QContextMenuEvent *event); - QVariant loadResource(int type, const QUrl &name); + bool eventFilter(QObject *obj, QEvent *event) override; + void contextMenuEvent(QContextMenuEvent *event) override; + QVariant loadResource(int type, const QUrl &name) TEXTBROWSER_OVERRIDE; bool handleForwardBackwardMouseButtons(QMouseEvent *e); private: diff -Nru qttools-opensource-src-5.7.1/src/assistant/assistant/helpviewer_p.h qttools-opensource-src-5.9.1/src/assistant/assistant/helpviewer_p.h --- qttools-opensource-src-5.7.1/src/assistant/assistant/helpviewer_p.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/assistant/helpviewer_p.h 2017-06-23 12:03:39.000000000 +0000 @@ -86,38 +86,42 @@ return true; } - void openLink(bool newPage) - { - if(lastAnchor.isEmpty()) - return; - if (newPage) - OpenPagesManager::instance()->createPage(lastAnchor); - else - CentralWidget::instance()->setSource(lastAnchor); - lastAnchor.clear(); - } - public slots: void openLink() { - openLink(false); + doOpenLink(false); } void openLinkInNewPage() { - openLink(true); + doOpenLink(true); } public: int zoomCount; bool forceFont; QString lastAnchor; + +private: + + void doOpenLink(bool newPage) + { + if (lastAnchor.isEmpty()) + return; + if (newPage) + OpenPagesManager::instance()->createPage(lastAnchor); + else + CentralWidget::instance()->setSource(lastAnchor); + lastAnchor.clear(); + } + #elif defined(BROWSER_QTWEBKIT) qreal webDpiRatio; #endif // BROWSER_QTWEBKIT public: bool m_loadFinished; + }; QT_END_NAMESPACE diff -Nru qttools-opensource-src-5.7.1/src/assistant/assistant/helpviewer_qtb.cpp qttools-opensource-src-5.9.1/src/assistant/assistant/helpviewer_qtb.cpp --- qttools-opensource-src-5.7.1/src/assistant/assistant/helpviewer_qtb.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/assistant/helpviewer_qtb.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -64,8 +64,8 @@ font.setPointSize(int(font.pointSize() + zoom)); setViewerFont(font); - connect(this, SIGNAL(sourceChanged(QUrl)), this, SIGNAL(titleChanged())); - connect(this, SIGNAL(loadFinished(bool)), this, SLOT(setLoadFinished(bool))); + connect(this, &QTextBrowser::sourceChanged, this, &HelpViewer::titleChanged); + connect(this, &HelpViewer::loadFinished, this, &HelpViewer::setLoadFinished); } QFont HelpViewer::viewerFont() const @@ -341,17 +341,17 @@ link = anchorAt(event->pos()); if (link.isRelative()) link = source().resolved(link); - menu.addAction(tr("Open Link"), d, SLOT(openLink())); - menu.addAction(tr("Open Link in New Tab\tCtrl+LMB"), d, SLOT(openLinkInNewPage())); + menu.addAction(tr("Open Link"), d, &HelpViewerPrivate::openLink); + menu.addAction(tr("Open Link in New Tab\tCtrl+LMB"), d, &HelpViewerPrivate::openLinkInNewPage); if (!link.isEmpty() && link.isValid()) copyAnchorAction = menu.addAction(tr("Copy &Link Location")); } else if (!selectedText().isEmpty()) { #ifndef QT_NO_CLIPBOARD - menu.addAction(tr("Copy"), this, SLOT(copy())); + menu.addAction(tr("Copy"), this, &HelpViewer::copy); #endif } else { - menu.addAction(tr("Reload"), this, SLOT(reload())); + menu.addAction(tr("Reload"), this, &HelpViewer::reload); } #ifndef QT_NO_CLIPBOARD diff -Nru qttools-opensource-src-5.7.1/src/assistant/assistant/helpviewer_qwv.cpp qttools-opensource-src-5.9.1/src/assistant/assistant/helpviewer_qwv.cpp --- qttools-opensource-src-5.7.1/src/assistant/assistant/helpviewer_qwv.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/assistant/helpviewer_qwv.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -82,8 +82,8 @@ QWebPage *HelpPage::createWindow(QWebPage::WebWindowType) { TRACE_OBJ - HelpPage* newPage = static_cast(OpenPagesManager::instance() - ->createPage()->page()); + HelpPage *newPage = static_cast(OpenPagesManager::instance() + ->createBlankPage()->page()); newPage->closeNewTabIfNeeded = closeNewTabIfNeeded; closeNewTabIfNeeded = false; return newPage; @@ -95,7 +95,8 @@ switch (action) { case OpenLinkInNewWindow: closeNewTabIfNeeded = true; - default: // fall through + Q_FALLTHROUGH(); + default: QWebPage::triggerAction(action, checked); break; } @@ -280,7 +281,7 @@ bool found = QWebView::findText(text, options); options = QWebPage::HighlightAllOccurrences; - QWebView::findText(QLatin1String(""), options); // clear first + QWebView::findText(QString(), options); // clear first QWebView::findText(text, options); // force highlighting of all other matches return found; } diff -Nru qttools-opensource-src-5.7.1/src/assistant/assistant/indexwindow.cpp qttools-opensource-src-5.9.1/src/assistant/assistant/indexwindow.cpp --- qttools-opensource-src-5.7.1/src/assistant/assistant/indexwindow.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/assistant/indexwindow.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -58,24 +58,24 @@ layout->addWidget(l); l->setBuddy(m_searchLineEdit); - connect(m_searchLineEdit, SIGNAL(textChanged(QString)), this, - SLOT(filterIndices(QString))); + connect(m_searchLineEdit, &QLineEdit::textChanged, + this, &IndexWindow::filterIndices); m_searchLineEdit->installEventFilter(this); layout->setMargin(4); layout->addWidget(m_searchLineEdit); HelpEngineWrapper &helpEngine = HelpEngineWrapper::instance(); m_indexWidget->installEventFilter(this); - connect(helpEngine.indexModel(), SIGNAL(indexCreationStarted()), this, - SLOT(disableSearchLineEdit())); - connect(helpEngine.indexModel(), SIGNAL(indexCreated()), this, - SLOT(enableSearchLineEdit())); - connect(m_indexWidget, SIGNAL(linkActivated(QUrl,QString)), this, - SIGNAL(linkActivated(QUrl))); - connect(m_indexWidget, SIGNAL(linksActivated(QMap,QString)), - this, SIGNAL(linksActivated(QMap,QString))); - connect(m_searchLineEdit, SIGNAL(returnPressed()), m_indexWidget, - SLOT(activateCurrentItem())); + connect(helpEngine.indexModel(), &QHelpIndexModel::indexCreationStarted, + this, &IndexWindow::disableSearchLineEdit); + connect(helpEngine.indexModel(), &QHelpIndexModel::indexCreated, + this, &IndexWindow::enableSearchLineEdit); + connect(m_indexWidget, &QHelpIndexWidget::linkActivated, + this, &IndexWindow::linkActivated); + connect(m_indexWidget, &QHelpIndexWidget::linksActivated, + this, &IndexWindow::linksActivated); + connect(m_searchLineEdit, &QLineEdit::returnPressed, + m_indexWidget, &QHelpIndexWidget::activateCurrentItem); layout->addWidget(m_indexWidget); m_indexWidget->viewport()->installEventFilter(this); @@ -111,7 +111,7 @@ } break; case Qt::Key_Down: - idx = m_indexWidget->model()->index(idx.row()+1, + idx = m_indexWidget->model()->index(idx.row() + 1, idx.column(), idx.parent()); if (idx.isValid()) { m_indexWidget->setCurrentIndex(idx); @@ -194,16 +194,16 @@ TRACE_OBJ QHelpIndexModel *model = qobject_cast(indexWidget->model()); if (model) { - QString keyword = model->data(index, Qt::DisplayRole).toString(); - QMap links = model->linksForKeyword(keyword); + const QString keyword = model->data(index, Qt::DisplayRole).toString(); + const QMap links = model->linksForKeyword(keyword); QUrl url; if (links.count() > 1) { TopicChooser tc(this, keyword, links); if (tc.exec() == QDialog::Accepted) url = tc.link(); - } else if (links.count() == 1) { - url = links.constBegin().value(); + } else if (!links.isEmpty()) { + url = links.first(); } else { return; } diff -Nru qttools-opensource-src-5.7.1/src/assistant/assistant/indexwindow.h qttools-opensource-src-5.9.1/src/assistant/assistant/indexwindow.h --- qttools-opensource-src-5.7.1/src/assistant/assistant/indexwindow.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/assistant/indexwindow.h 2017-06-23 12:03:39.000000000 +0000 @@ -64,8 +64,8 @@ void disableSearchLineEdit(); private: - bool eventFilter(QObject *obj, QEvent *e); - void focusInEvent(QFocusEvent *e); + bool eventFilter(QObject *obj, QEvent *e) override; + void focusInEvent(QFocusEvent *e) override; void open(QHelpIndexWidget *indexWidget, const QModelIndex &index); QLineEdit *m_searchLineEdit; diff -Nru qttools-opensource-src-5.7.1/src/assistant/assistant/Info_mac.plist qttools-opensource-src-5.9.1/src/assistant/assistant/Info_mac.plist --- qttools-opensource-src-5.7.1/src/assistant/assistant/Info_mac.plist 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/assistant/Info_mac.plist 2017-06-23 12:03:39.000000000 +0000 @@ -1,6 +1,6 @@ - - + + NSPrincipalClass NSApplication @@ -8,13 +8,13 @@ @ICON@ CFBundlePackageType APPL - CFBundleGetInfoString - Created by Qt/QMake CFBundleSignature ???? CFBundleIdentifier - org.qt-project.assistant + org.qt-project.assistant CFBundleExecutable @EXECUTABLE@ + NSHumanReadableCopyright + (C) 2017 The Qt Company Ltd diff -Nru qttools-opensource-src-5.7.1/src/assistant/assistant/main.cpp qttools-opensource-src-5.9.1/src/assistant/assistant/main.cpp --- qttools-opensource-src-5.7.1/src/assistant/assistant/main.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/assistant/main.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -42,8 +42,6 @@ #include #include -#include - #include #if defined(BROWSER_QTWEBKIT) @@ -92,7 +90,7 @@ { TRACE_OBJ const QStringList &namespaces = collection.registeredDocumentations(); - foreach (const QString &ns, namespaces) { + for (const QString &ns : namespaces) { QFileInfo fi(collection.documentationFileName(ns)); if (!fi.exists() || !fi.isFile()) collection.unregisterDocumentation(ns); @@ -148,7 +146,7 @@ * Ensure that the cached collection contains all docs that * the collection contains. */ - foreach (const QString &doc, docs) { + for (const QString &doc : docs) { if (!cachedDocs.contains(doc)) { const QString &docFile = collection.documentationFileName(doc); if (!cachedCollection.registerDocumentation(docFile)) { @@ -171,38 +169,16 @@ QString path = QFileInfo(collectionFile).path(); path += QLatin1Char('/') + indexFilesFolder(collectionFile); - QLocalSocket localSocket; - localSocket.connectToServer(QString(QLatin1String("QtAssistant%1")) - .arg(QLatin1String(QT_VERSION_STR))); - - QDir dir(path); // check if there is no other instance ruinning - if (!dir.exists() || localSocket.waitForConnected()) + QDir dir(path); + if (!dir.exists()) return false; - QStringList lst = dir.entryList(QDir::Files | QDir::Hidden); - foreach (const QString &item, lst) + const QStringList &list = dir.entryList(QDir::Files | QDir::Hidden); + for (const QString &item : list) dir.remove(item); return true; } -bool rebuildSearchIndex(QCoreApplication *app, const QString &collectionFile, - CmdLineParser &cmd) -{ - TRACE_OBJ - QHelpEngine engine(collectionFile); - if (!engine.setupData()) { - cmd.showMessage(QCoreApplication::translate("Assistant", "Error: %1") - .arg(engine.error()), true); - return false; - } - - QHelpSearchEngine * const searchEngine = engine.searchEngine(); - QObject::connect(searchEngine, SIGNAL(indexingFinished()), app, - SLOT(quit())); - searchEngine->reindexDocumentation(); - return app->exec() == 0; -} - QCoreApplication* createApplication(int &argc, char *argv[]) { TRACE_OBJ @@ -219,7 +195,10 @@ } } #endif - return new QApplication(argc, argv); + QApplication *app = new QApplication(argc, argv); + app->connect(app, &QGuiApplication::lastWindowClosed, + &QCoreApplication::quit); + return app; } bool registerDocumentation(QHelpEngineCore &collection, CmdLineParser &cmd, @@ -388,11 +367,6 @@ ? EXIT_SUCCESS : EXIT_FAILURE; } - if (cmd.rebuildSearchIndex()) { - return rebuildSearchIndex(a.data(), cachedCollectionFile, cmd) - ? EXIT_SUCCESS : EXIT_FAILURE; - } - if (!QSqlDatabase::isDriverAvailable(QLatin1String("QSQLITE"))) { cmd.showMessage(QCoreApplication::translate("Assistant", "Cannot load sqlite database driver!"), @@ -411,7 +385,6 @@ MainWindow *w = new MainWindow(&cmd); w->show(); - a->connect(a.data(), SIGNAL(lastWindowClosed()), a.data(), SLOT(quit())); /* * We need to be careful here: The main window has to be deleted before diff -Nru qttools-opensource-src-5.7.1/src/assistant/assistant/mainwindow.cpp qttools-opensource-src-5.9.1/src/assistant/assistant/mainwindow.cpp --- qttools-opensource-src-5.7.1/src/assistant/assistant/mainwindow.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/assistant/mainwindow.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -156,18 +156,20 @@ openPagesDock->setWidget(openPagesManager->openPagesWidget()); addDockWidget(Qt::LeftDockWidgetArea, openPagesDock); - connect(m_centralWidget, SIGNAL(addBookmark(QString,QString)), - bookMarkManager, SLOT(addBookmark(QString,QString))); - connect(bookMarkManager, SIGNAL(escapePressed()), this, - SLOT(activateCurrentCentralWidgetTab())); - connect(bookMarkManager, SIGNAL(setSource(QUrl)), m_centralWidget, - SLOT(setSource(QUrl))); - connect(bookMarkManager, SIGNAL(setSourceInNewTab(QUrl)), - openPagesManager, SLOT(createPage(QUrl))); + connect(m_centralWidget, &CentralWidget::addBookmark, + bookMarkManager, &BookmarkManager::addBookmark); + connect(bookMarkManager, &BookmarkManager::escapePressed, + this, &MainWindow::activateCurrentCentralWidgetTab); + connect(bookMarkManager, &BookmarkManager::setSource, + m_centralWidget, &CentralWidget::setSource); + connect(bookMarkManager, &BookmarkManager::setSourceInNewTab, + [openPagesManager](const QUrl &url){ openPagesManager->createPage(url); }); QHelpSearchEngine *searchEngine = helpEngineWrapper.searchEngine(); - connect(searchEngine, SIGNAL(indexingStarted()), this, SLOT(indexingStarted())); - connect(searchEngine, SIGNAL(indexingFinished()), this, SLOT(indexingFinished())); + connect(searchEngine, &QHelpSearchEngine::indexingStarted, + this, &MainWindow::indexingStarted); + connect(searchEngine, &QHelpSearchEngine::indexingFinished, + this, &MainWindow::indexingFinished); QString defWindowTitle = tr("Qt Assistant"); setWindowTitle(defWindowTitle); @@ -239,7 +241,7 @@ updateAboutMenuText(); - QTimer::singleShot(0, this, SLOT(insertLastPages())); + QTimer::singleShot(0, this, &MainWindow::insertLastPages); if (m_cmdLine->enableRemoteControl()) (void)new RemoteControl(this); @@ -277,14 +279,14 @@ } if (usesDefaultCollection()) - QTimer::singleShot(0, this, SLOT(lookForNewQtDocumentation())); + QTimer::singleShot(0, this, &MainWindow::lookForNewQtDocumentation); else checkInitState(); - connect(&helpEngineWrapper, SIGNAL(documentationRemoved(QString)), - this, SLOT(documentationRemoved(QString))); - connect(&helpEngineWrapper, SIGNAL(documentationUpdated(QString)), - this, SLOT(documentationUpdated(QString))); + connect(&helpEngineWrapper, &HelpEngineWrapper::documentationRemoved, + this, &MainWindow::documentationRemoved); + connect(&helpEngineWrapper, &HelpEngineWrapper::documentationUpdated, + this, &MainWindow::documentationUpdated); setTabPosition(Qt::AllDockWidgetAreas, QTabWidget::North); GlobalActions::instance()->updateActions(); @@ -295,8 +297,7 @@ MainWindow::~MainWindow() { TRACE_OBJ - if (m_qtDocInstaller) - delete m_qtDocInstaller; + delete m_qtDocInstaller; } bool MainWindow::usesDefaultCollection() const @@ -328,7 +329,7 @@ } bool assistantInternalDocRegistered = false; QString intern(QLatin1String("org.qt-project.assistantinternal-")); - foreach (const QString &ns, helpEngineWrapper.registeredDocumentations()) { + for (const QString &ns : helpEngineWrapper.registeredDocumentations()) { if (ns.startsWith(intern)) { intern = ns; assistantInternalDocRegistered = true; @@ -426,7 +427,7 @@ QDir::Files, QDir::Name); if (!entries.isEmpty()) { result.reserve(entries.size()); - foreach (const QFileInfo &fi, entries) + for (const QFileInfo &fi : entries) result.append(fi.baseName()); return result; } @@ -444,12 +445,11 @@ TRACE_OBJ HelpEngineWrapper &helpEngine = HelpEngineWrapper::instance(); - const QStringList docs = newQtDocumentation(); + const QStringList &docs = newQtDocumentation(); const int docCount = docs.size(); QList qtDocInfos; qtDocInfos.reserve(docCount); - for (int d = 0; d < docCount; ++d) { - const QString &doc = docs.at(d); + for (const QString &doc : docs) { const QtDocInstaller::DocInfo docInfo(doc, helpEngine.qtDocInfo(doc)); qtDocInfos.append(docInfo); if (warnAboutMissingModules && (docInfo.second.isEmpty() || docInfo.second.first().isEmpty())) @@ -457,12 +457,12 @@ } m_qtDocInstaller = new QtDocInstaller(qtDocInfos); - connect(m_qtDocInstaller, SIGNAL(docsInstalled(bool)), this, - SLOT(qtDocumentationInstalled())); - connect(m_qtDocInstaller, SIGNAL(qchFileNotFound(QString)), this, - SLOT(resetQtDocInfo(QString))); - connect(m_qtDocInstaller, SIGNAL(registerDocumentation(QString,QString)), - this, SLOT(registerDocumentation(QString,QString))); + connect(m_qtDocInstaller, &QtDocInstaller::docsInstalled, + this, &MainWindow::qtDocumentationInstalled); + connect(m_qtDocInstaller, &QtDocInstaller::qchFileNotFound, + this, &MainWindow::resetQtDocInfo); + connect(m_qtDocInstaller, &QtDocInstaller::registerDocumentation, + this, &MainWindow::registerDocumentation); if (helpEngine.qtDocInfo(QLatin1String("qt")).count() != 2) statusBar()->showMessage(tr("Looking for Qt Documentation...")); m_qtDocInstaller->installDocs(); @@ -487,10 +487,10 @@ if (helpEngine.contentModel()->isCreatingContents() || helpEngine.indexModel()->isCreatingIndex()) { if (!m_connectedInitSignals) { - connect(helpEngine.contentModel(), SIGNAL(contentsCreated()), - this, SLOT(checkInitState())); - connect(helpEngine.indexModel(), SIGNAL(indexCreated()), this, - SLOT(checkInitState())); + connect(helpEngine.contentModel(), &QHelpContentModel::contentsCreated, + this, &MainWindow::checkInitState); + connect(helpEngine.indexModel(), &QHelpIndexModel::indexCreated, + this, &MainWindow::checkInitState); m_connectedInitSignals = true; } } else { @@ -522,22 +522,25 @@ #endif QMenu *menu = menuBar()->addMenu(tr("&File")); - OpenPagesManager * const openPages = OpenPagesManager::instance(); - m_newTabAction = menu->addAction(tr("New &Tab"), openPages, SLOT(createPage())); + OpenPagesManager *const openPages = OpenPagesManager::instance(); + m_newTabAction = menu->addAction(tr("New &Tab"), + openPages, &OpenPagesManager::createBlankPage); m_newTabAction->setShortcut(QKeySequence::AddTab); m_closeTabAction = menu->addAction(tr("&Close Tab"), - openPages, SLOT(closeCurrentPage())); + openPages, &OpenPagesManager::closeCurrentPage); m_closeTabAction->setShortcuts(QKeySequence::Close); m_closeTabAction->setEnabled(openPages->pageCount() > 1); - connect(openPages, SIGNAL(pageClosed()), this, SLOT(handlePageCountChanged())); - connect(openPages, SIGNAL(pageAdded(int)), this, SLOT(handlePageCountChanged())); + connect(openPages, &OpenPagesManager::pageClosed, + this, &MainWindow::handlePageCountChanged); + connect(openPages, &OpenPagesManager::pageAdded, + this, &MainWindow::handlePageCountChanged); menu->addSeparator(); - m_pageSetupAction = menu->addAction(tr("Page Set&up..."), m_centralWidget, - SLOT(pageSetup())); - m_printPreviewAction = menu->addAction(tr("Print Preview..."), m_centralWidget, - SLOT(printPreview())); + m_pageSetupAction = menu->addAction(tr("Page Set&up..."), + m_centralWidget, &CentralWidget::pageSetup); + m_printPreviewAction = menu->addAction(tr("Print Preview..."), + m_centralWidget, &CentralWidget::printPreview); GlobalActions *globalActions = GlobalActions::instance(this); menu->addAction(globalActions->printAction()); @@ -546,10 +549,12 @@ QIcon appExitIcon = QIcon::fromTheme("application-exit"); QAction *tmp; #ifdef Q_OS_WIN - tmp = menu->addAction(appExitIcon, tr("E&xit"), this, SLOT(close())); + tmp = menu->addAction(appExitIcon, tr("E&xit"), + this, &QWidget::close); tmp->setShortcut(QKeySequence(tr("CTRL+Q"))); #else - tmp = menu->addAction(appExitIcon, tr("&Quit"), this, SLOT(close())); + tmp = menu->addAction(appExitIcon, tr("&Quit"), + this, &QWidget::close); tmp->setShortcut(QKeySequence::Quit); #endif tmp->setMenuRole(QAction::QuitRole); @@ -558,77 +563,83 @@ menu->addAction(globalActions->copyAction()); menu->addAction(globalActions->findAction()); - QAction *findNextAction = menu->addAction(tr("Find &Next"), m_centralWidget, - SLOT(findNext())); + QAction *findNextAction = menu->addAction(tr("Find &Next"), + m_centralWidget, &CentralWidget::findNext); findNextAction->setShortcuts(QKeySequence::FindNext); QAction *findPreviousAction = menu->addAction(tr("Find &Previous"), - m_centralWidget, SLOT(findPrevious())); + m_centralWidget, &CentralWidget::findPrevious); findPreviousAction->setShortcuts(QKeySequence::FindPrevious); menu->addSeparator(); - tmp = menu->addAction(tr("Preferences..."), this, SLOT(showPreferences())); + tmp = menu->addAction(tr("Preferences..."), + this, &MainWindow::showPreferences); tmp->setMenuRole(QAction::PreferencesRole); m_viewMenu = menuBar()->addMenu(tr("&View")); m_viewMenu->addAction(globalActions->zoomInAction()); m_viewMenu->addAction(globalActions->zoomOutAction()); - m_resetZoomAction = m_viewMenu->addAction(tr("Normal &Size"), m_centralWidget, - SLOT(resetZoom())); + m_resetZoomAction = m_viewMenu->addAction(tr("Normal &Size"), + m_centralWidget, &CentralWidget::resetZoom); m_resetZoomAction->setPriority(QAction::LowPriority); m_resetZoomAction->setIcon(QIcon(resourcePath + QLatin1String("/resetzoom.png"))); m_resetZoomAction->setShortcut(tr("Ctrl+0")); m_viewMenu->addSeparator(); - m_viewMenu->addAction(tr("Contents"), this, SLOT(showContents()), - QKeySequence(tr("ALT+C"))); - m_viewMenu->addAction(tr("Index"), this, SLOT(showIndex()), - QKeySequence(tr("ALT+I"))); - m_viewMenu->addAction(tr("Bookmarks"), this, SLOT(showBookmarksDockWidget()), - QKeySequence(tr("ALT+O"))); - m_viewMenu->addAction(tr("Search"), this, SLOT(showSearch()), - QKeySequence(tr("ALT+S"))); - m_viewMenu->addAction(tr("Open Pages"), this, SLOT(showOpenPages()), - QKeySequence(tr("ALT+P"))); + m_viewMenu->addAction(tr("Contents"), + this, &MainWindow::showContents, QKeySequence(tr("ALT+C"))); + m_viewMenu->addAction(tr("Index"), + this, &MainWindow::showIndex, QKeySequence(tr("ALT+I"))); + m_viewMenu->addAction(tr("Bookmarks"), + this, &MainWindow::showBookmarksDockWidget, QKeySequence(tr("ALT+O"))); + m_viewMenu->addAction(tr("Search"), + this, &MainWindow::showSearch, QKeySequence(tr("ALT+S"))); + m_viewMenu->addAction(tr("Open Pages"), + this, &MainWindow::showOpenPages, QKeySequence(tr("ALT+P"))); menu = menuBar()->addMenu(tr("&Go")); menu->addAction(globalActions->homeAction()); menu->addAction(globalActions->backAction()); menu->addAction(globalActions->nextAction()); - m_syncAction = menu->addAction(tr("Sync with Table of Contents"), this, - SLOT(syncContents())); + m_syncAction = menu->addAction(tr("Sync with Table of Contents"), + this, &MainWindow::syncContents); m_syncAction->setIconText(tr("Sync")); m_syncAction->setIcon(QIcon(resourcePath + QLatin1String("/synctoc.png"))); menu->addSeparator(); - tmp = menu->addAction(tr("Next Page"), openPages, SLOT(nextPage())); + tmp = menu->addAction(tr("Next Page"), + openPages, &OpenPagesManager::nextPage); tmp->setShortcuts(QList() << QKeySequence(tr("Ctrl+Alt+Right")) << QKeySequence(Qt::CTRL + Qt::Key_PageDown)); - tmp = menu->addAction(tr("Previous Page"), openPages, SLOT(previousPage())); + tmp = menu->addAction(tr("Previous Page"), + openPages, &OpenPagesManager::previousPage); tmp->setShortcuts(QList() << QKeySequence(tr("Ctrl+Alt+Left")) << QKeySequence(Qt::CTRL + Qt::Key_PageUp)); + const Qt::Modifier modifier = #ifdef Q_OS_MAC - QShortcut *sct = new QShortcut(QKeySequence(Qt::ALT + Qt::Key_Tab), this); - connect(sct, SIGNAL(activated()), openPages, SLOT(nextPageWithSwitcher())); - sct = new QShortcut(QKeySequence(Qt::ALT + Qt::SHIFT + Qt::Key_Tab), this); - connect(sct, SIGNAL(activated()), openPages, SLOT(previousPageWithSwitcher())); + Qt::ALT; #else - QShortcut *sct = new QShortcut(QKeySequence(Qt::CTRL + Qt::Key_Tab), this); - connect(sct, SIGNAL(activated()), openPages, SLOT(nextPageWithSwitcher())); - sct = new QShortcut(QKeySequence(Qt::CTRL + Qt::SHIFT + Qt::Key_Tab), this); - connect(sct, SIGNAL(activated()), openPages, SLOT(previousPageWithSwitcher())); + Qt::CTRL; #endif + QShortcut *sct = new QShortcut(QKeySequence(modifier + Qt::Key_Tab), this); + connect(sct, &QShortcut::activated, + openPages, &OpenPagesManager::nextPageWithSwitcher); + sct = new QShortcut(QKeySequence(modifier + Qt::SHIFT + Qt::Key_Tab), this); + connect(sct, &QShortcut::activated, + openPages, &OpenPagesManager::previousPageWithSwitcher); + BookmarkManager::instance()->setBookmarksMenu(menuBar()->addMenu(tr("&Bookmarks"))); menu = menuBar()->addMenu(tr("&Help")); - m_aboutAction = menu->addAction(tr("About..."), this, SLOT(showAboutDialog())); + m_aboutAction = menu->addAction(tr("About..."), + this, &MainWindow::showAboutDialog); m_aboutAction->setMenuRole(QAction::AboutRole); #if defined(Q_OS_UNIX) && !defined(Q_OS_MAC) @@ -654,42 +665,43 @@ #if defined(Q_OS_MAC) QMenu *windowMenu = new QMenu(tr("&Window"), this); menuBar()->insertMenu(menu->menuAction(), windowMenu); - windowMenu->addAction(tr("Zoom"), this, SLOT(showMaximized())); - windowMenu->addAction(tr("Minimize"), this, SLOT(showMinimized()), - QKeySequence(tr("Ctrl+M"))); + windowMenu->addAction(tr("Zoom"), + this, &QWidget::showMaximized); + windowMenu->addAction(tr("Minimize"), + this, &QWidget::showMinimized, QKeySequence(tr("Ctrl+M"))); #endif // content viewer connections - connect(m_centralWidget, SIGNAL(copyAvailable(bool)), globalActions, - SLOT(setCopyAvailable(bool))); - connect(m_centralWidget, SIGNAL(currentViewerChanged()), globalActions, - SLOT(updateActions())); - connect(m_centralWidget, SIGNAL(forwardAvailable(bool)), globalActions, - SLOT(updateActions())); - connect(m_centralWidget, SIGNAL(backwardAvailable(bool)), globalActions, - SLOT(updateActions())); - connect(m_centralWidget, SIGNAL(highlighted(QString)), statusBar(), - SLOT(showMessage(QString))); + connect(m_centralWidget, &CentralWidget::copyAvailable, + globalActions, &GlobalActions::setCopyAvailable); + connect(m_centralWidget, &CentralWidget::currentViewerChanged, + globalActions, &GlobalActions::updateActions); + connect(m_centralWidget, &CentralWidget::forwardAvailable, + globalActions, &GlobalActions::updateActions); + connect(m_centralWidget, &CentralWidget::backwardAvailable, + globalActions, &GlobalActions::updateActions); + connect(m_centralWidget, &CentralWidget::highlighted, + [this](const QString &link) { statusBar()->showMessage(link);} ); // index window - connect(m_indexWindow, SIGNAL(linkActivated(QUrl)), m_centralWidget, - SLOT(setSource(QUrl))); - connect(m_indexWindow, SIGNAL(linksActivated(QMap,QString)), - this, SLOT(showTopicChooser(QMap,QString))); - connect(m_indexWindow, SIGNAL(escapePressed()), this, - SLOT(activateCurrentCentralWidgetTab())); + connect(m_indexWindow, &IndexWindow::linkActivated, + m_centralWidget, &CentralWidget::setSource); + connect(m_indexWindow, &IndexWindow::linksActivated, + this, &MainWindow::showTopicChooser); + connect(m_indexWindow, &IndexWindow::escapePressed, + this, &MainWindow::activateCurrentCentralWidgetTab); // content window - connect(m_contentWindow, SIGNAL(linkActivated(QUrl)), m_centralWidget, - SLOT(setSource(QUrl))); - connect(m_contentWindow, SIGNAL(escapePressed()), this, - SLOT(activateCurrentCentralWidgetTab())); + connect(m_contentWindow, &ContentWindow::linkActivated, + m_centralWidget, &CentralWidget::setSource); + connect(m_contentWindow, &ContentWindow::escapePressed, + this, &MainWindow::activateCurrentCentralWidgetTab); // search window - connect(m_searchWindow, SIGNAL(requestShowLink(QUrl)), - CentralWidget::instance(), SLOT(setSourceFromSearch(QUrl))); - connect(m_searchWindow, SIGNAL(requestShowLinkInNewTab(QUrl)), - OpenPagesManager::instance(), SLOT(createNewPageFromSearch(QUrl))); + connect(m_searchWindow, &SearchWidget::requestShowLink, + CentralWidget::instance(), &CentralWidget::setSourceFromSearch); + connect(m_searchWindow, &SearchWidget::requestShowLinkInNewTab, + OpenPagesManager::instance(), &OpenPagesManager::createNewPageFromSearch); #if defined(QT_NO_PRINTER) m_pageSetupAction->setVisible(false); @@ -729,12 +741,12 @@ filterToolBar->hide(); toolBarMenu()->addAction(filterToolBar->toggleViewAction()); - connect(&helpEngine, SIGNAL(setupFinished()), this, - SLOT(setupFilterCombo()), Qt::QueuedConnection); - connect(m_filterCombo, SIGNAL(activated(QString)), this, - SLOT(filterDocumentation(QString))); - connect(&helpEngine, SIGNAL(currentFilterChanged(QString)), this, - SLOT(currentFilterChanged(QString))); + connect(&helpEngine, &HelpEngineWrapper::setupFinished, + this, &MainWindow::setupFilterCombo, Qt::QueuedConnection); + connect(m_filterCombo, QOverload::of(&QComboBox::activated), + this, &MainWindow::filterDocumentation); + connect(&helpEngine, &HelpEngineWrapper::currentFilterChanged, + this, &MainWindow::currentFilterChanged); setupFilterCombo(); } @@ -751,7 +763,7 @@ addressToolBar->setObjectName(QLatin1String("AddressToolBar")); insertToolBarBreak(addressToolBar); - addressToolBar->addWidget(new QLabel(tr("Address:").append(QLatin1String(" ")), + addressToolBar->addWidget(new QLabel(tr("Address:").append(QChar::Space), this)); addressToolBar->addWidget(m_addressLineEdit); @@ -760,12 +772,12 @@ toolBarMenu()->addAction(addressToolBar->toggleViewAction()); // address lineedit - connect(m_addressLineEdit, SIGNAL(returnPressed()), this, - SLOT(gotoAddress())); - connect(m_centralWidget, SIGNAL(currentViewerChanged()), this, - SLOT(showNewAddress())); - connect(m_centralWidget, SIGNAL(sourceChanged(QUrl)), this, - SLOT(showNewAddress(QUrl))); + connect(m_addressLineEdit, &QLineEdit::returnPressed, + this, &MainWindow::gotoAddress); + connect(m_centralWidget, &CentralWidget::currentViewerChanged, + this, QOverload<>::of(&MainWindow::showNewAddress)); + connect(m_centralWidget, &CentralWidget::sourceChanged, + this, QOverload<>::of(&MainWindow::showNewAddress)); } void MainWindow::updateAboutMenuText() @@ -828,12 +840,12 @@ { TRACE_OBJ PreferencesDialog dia(this); - connect(&dia, SIGNAL(updateApplicationFont()), this, - SLOT(updateApplicationFont())); - connect(&dia, SIGNAL(updateBrowserFont()), m_centralWidget, - SLOT(updateBrowserFont())); - connect(&dia, SIGNAL(updateUserInterface()), m_centralWidget, - SLOT(updateUserInterface())); + connect(&dia, &PreferencesDialog::updateApplicationFont, + this, &MainWindow::updateApplicationFont); + connect(&dia, &PreferencesDialog::updateBrowserFont, + m_centralWidget, &CentralWidget::updateBrowserFont); + connect(&dia, &PreferencesDialog::updateUserInterface, + m_centralWidget, &CentralWidget::updateUserInterface); dia.showDialog(); } @@ -899,7 +911,7 @@ "

Version %2

" "

Browser: %3

" "

Copyright (C) %4 The Qt Company Ltd.

") - .arg(tr("Qt Assistant"), QLatin1String(QT_VERSION_STR), browser, QStringLiteral("2016")), + .arg(tr("Qt Assistant"), QLatin1String(QT_VERSION_STR), browser, QStringLiteral("2017")), resources); QLatin1String path(":/qt-project.org/assistant/images/assistant-128.png"); aboutDia.setPixmap(QString(path)); @@ -1033,8 +1045,8 @@ if (helpEngine.usesAppFont()) font = helpEngine.appFont(); - QWidgetList widgets = qApp->allWidgets(); - foreach (QWidget* widget, widgets) + const QWidgetList &widgets = QApplication::allWidgets(); + for (QWidget *widget : widgets) widget->setFont(font); } diff -Nru qttools-opensource-src-5.7.1/src/assistant/assistant/mainwindow.h qttools-opensource-src-5.9.1/src/assistant/assistant/mainwindow.h --- qttools-opensource-src-5.7.1/src/assistant/assistant/mainwindow.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/assistant/mainwindow.h 2017-06-23 12:03:39.000000000 +0000 @@ -110,7 +110,7 @@ private: bool initHelpDB(bool registerInternalDoc); void setupActions(); - void closeEvent(QCloseEvent *e); + void closeEvent(QCloseEvent *e) override; void activateDockWidget(QWidget *w); void updateAboutMenuText(); void setupFilterToolbar(); diff -Nru qttools-opensource-src-5.7.1/src/assistant/assistant/openpagesmanager.cpp qttools-opensource-src-5.9.1/src/assistant/assistant/openpagesmanager.cpp --- qttools-opensource-src-5.7.1/src/assistant/assistant/openpagesmanager.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/assistant/openpagesmanager.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -70,18 +70,18 @@ TRACE_OBJ m_openPagesWidget = new OpenPagesWidget(m_model); m_openPagesWidget->setFrameStyle(QFrame::NoFrame); - connect(m_openPagesWidget, SIGNAL(setCurrentPage(QModelIndex)), this, - SLOT(setCurrentPage(QModelIndex))); - connect(m_openPagesWidget, SIGNAL(closePage(QModelIndex)), this, - SLOT(closePage(QModelIndex))); - connect(m_openPagesWidget, SIGNAL(closePagesExcept(QModelIndex)), this, - SLOT(closePagesExcept(QModelIndex))); + connect(m_openPagesWidget, &OpenPagesWidget::setCurrentPage, + this, QOverload::of(&OpenPagesManager::setCurrentPage)); + connect(m_openPagesWidget, &OpenPagesWidget::closePage, + this, QOverload::of(&OpenPagesManager::closePage)); + connect(m_openPagesWidget, &OpenPagesWidget::closePagesExcept, + this, &OpenPagesManager::closePagesExcept); m_openPagesSwitcher = new OpenPagesSwitcher(m_model); - connect(m_openPagesSwitcher, SIGNAL(closePage(QModelIndex)), this, - SLOT(closePage(QModelIndex))); - connect(m_openPagesSwitcher, SIGNAL(setCurrentPage(QModelIndex)), this, - SLOT(setCurrentPage(QModelIndex))); + connect(m_openPagesSwitcher, &OpenPagesSwitcher::closePage, + this, QOverload::of(&OpenPagesManager::closePage)); + connect(m_openPagesSwitcher, &OpenPagesSwitcher::setCurrentPage, + this, QOverload::of(&OpenPagesManager::setCurrentPage)); setupInitialPages(defaultCollection, cmdLineUrl); } @@ -159,7 +159,7 @@ m_openPagesSwitcher->selectCurrentPage(); } -HelpViewer *OpenPagesManager::createPage() +HelpViewer *OpenPagesManager::createBlankPage() { TRACE_OBJ return createPage(QUrl(QLatin1String("about:blank"))); diff -Nru qttools-opensource-src-5.7.1/src/assistant/assistant/openpagesmanager.h qttools-opensource-src-5.9.1/src/assistant/assistant/openpagesmanager.h --- qttools-opensource-src-5.7.1/src/assistant/assistant/openpagesmanager.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/assistant/openpagesmanager.h 2017-06-23 12:03:39.000000000 +0000 @@ -62,7 +62,7 @@ public slots: HelpViewer *createPage(const QUrl &url, bool fromSearch = false); HelpViewer *createNewPageFromSearch(const QUrl &url); - HelpViewer *createPage(); + HelpViewer *createBlankPage(); void closeCurrentPage(); void nextPage(); diff -Nru qttools-opensource-src-5.7.1/src/assistant/assistant/openpagesmodel.cpp qttools-opensource-src-5.9.1/src/assistant/assistant/openpagesmodel.cpp --- qttools-opensource-src-5.7.1/src/assistant/assistant/openpagesmodel.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/assistant/openpagesmodel.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -69,7 +69,8 @@ TRACE_OBJ beginInsertRows(QModelIndex(), rowCount(), rowCount()); HelpViewer *page = new HelpViewer(zoom); - connect(page, SIGNAL(titleChanged()), this, SLOT(handleTitleChanged())); + connect(page, &HelpViewer::titleChanged, + this, &OpenPagesModel::handleTitleChanged); m_pages << page; endInsertRows(); page->setSource(url); diff -Nru qttools-opensource-src-5.7.1/src/assistant/assistant/openpagesmodel.h qttools-opensource-src-5.9.1/src/assistant/assistant/openpagesmodel.h --- qttools-opensource-src-5.7.1/src/assistant/assistant/openpagesmodel.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/assistant/openpagesmodel.h 2017-06-23 12:03:39.000000000 +0000 @@ -44,9 +44,9 @@ Q_OBJECT friend class OpenPagesManager; public: - virtual int rowCount(const QModelIndex &parent = QModelIndex()) const; - virtual int columnCount(const QModelIndex &parent = QModelIndex()) const; - virtual QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const; + int rowCount(const QModelIndex &parent = QModelIndex()) const override; + int columnCount(const QModelIndex &parent = QModelIndex()) const override; + QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override; void addPage(const QUrl &url, qreal zoom = 0); void removePage(int index); diff -Nru qttools-opensource-src-5.7.1/src/assistant/assistant/openpagesswitcher.cpp qttools-opensource-src-5.9.1/src/assistant/assistant/openpagesswitcher.cpp --- qttools-opensource-src-5.7.1/src/assistant/assistant/openpagesswitcher.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/assistant/openpagesswitcher.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -66,10 +66,10 @@ layout->setMargin(0); layout->addWidget(m_openPagesWidget); - connect(m_openPagesWidget, SIGNAL(closePage(QModelIndex)), this, - SIGNAL(closePage(QModelIndex))); - connect(m_openPagesWidget, SIGNAL(setCurrentPage(QModelIndex)), this, - SIGNAL(setCurrentPage(QModelIndex))); + connect(m_openPagesWidget, &OpenPagesWidget::closePage, + this, &OpenPagesSwitcher::closePage); + connect(m_openPagesWidget, &OpenPagesWidget::setCurrentPage, + this, &OpenPagesSwitcher::setCurrentPage); } OpenPagesSwitcher::~OpenPagesSwitcher() diff -Nru qttools-opensource-src-5.7.1/src/assistant/assistant/openpagesswitcher.h qttools-opensource-src-5.9.1/src/assistant/assistant/openpagesswitcher.h --- qttools-opensource-src-5.7.1/src/assistant/assistant/openpagesswitcher.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/assistant/openpagesswitcher.h 2017-06-23 12:03:39.000000000 +0000 @@ -51,9 +51,9 @@ void selectAndHide(); void selectCurrentPage(); - void setVisible(bool visible); - void focusInEvent(QFocusEvent *event); - bool eventFilter(QObject *object, QEvent *event); + void setVisible(bool visible) override; + void focusInEvent(QFocusEvent *event) override; + bool eventFilter(QObject *object, QEvent *event) override; signals: void closePage(const QModelIndex &index); diff -Nru qttools-opensource-src-5.7.1/src/assistant/assistant/openpageswidget.cpp qttools-opensource-src-5.9.1/src/assistant/assistant/openpageswidget.cpp --- qttools-opensource-src-5.7.1/src/assistant/assistant/openpageswidget.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/assistant/openpageswidget.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -101,12 +101,12 @@ setUniformRowHeights(true); setContextMenuPolicy(Qt::CustomContextMenu); - connect(this, SIGNAL(clicked(QModelIndex)), this, - SLOT(handleClicked(QModelIndex))); - connect(this, SIGNAL(pressed(QModelIndex)), this, - SLOT(handlePressed(QModelIndex))); - connect(this, SIGNAL(customContextMenuRequested(QPoint)), this, - SLOT(contextMenuRequested(QPoint))); + connect(this, &QAbstractItemView::clicked, + this, &OpenPagesWidget::handleClicked); + connect(this, &QAbstractItemView::pressed, + this, &OpenPagesWidget::handlePressed); + connect(this, &QWidget::customContextMenuRequested, + this, &OpenPagesWidget::contextMenuRequested); } OpenPagesWidget::~OpenPagesWidget() diff -Nru qttools-opensource-src-5.7.1/src/assistant/assistant/openpageswidget.h qttools-opensource-src-5.9.1/src/assistant/assistant/openpageswidget.h --- qttools-opensource-src-5.7.1/src/assistant/assistant/openpageswidget.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/assistant/openpageswidget.h 2017-06-23 12:03:39.000000000 +0000 @@ -42,7 +42,7 @@ public: explicit OpenPagesDelegate(QObject *parent = 0); void paint(QPainter *painter, const QStyleOptionViewItem &option, - const QModelIndex &index) const; + const QModelIndex &index) const override; mutable QModelIndex pressedIndex; }; @@ -68,7 +68,7 @@ void handleClicked(const QModelIndex &index); private: - bool eventFilter(QObject *obj, QEvent *event); + bool eventFilter(QObject *obj, QEvent *event) override; bool m_allowContextMenu; OpenPagesDelegate *m_delegate; diff -Nru qttools-opensource-src-5.7.1/src/assistant/assistant/preferencesdialog.cpp qttools-opensource-src-5.9.1/src/assistant/assistant/preferencesdialog.cpp --- qttools-opensource-src-5.7.1/src/assistant/assistant/preferencesdialog.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/assistant/preferencesdialog.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -122,9 +122,9 @@ static RegisteredDocEntries registeredDocEntries(const HelpEngineWrapper &wrapper) { RegisteredDocEntries result; - const QStringList nameSpaces = wrapper.registeredDocumentations(); + const QStringList &nameSpaces = wrapper.registeredDocumentations(); result.reserve(nameSpaces.size()); - foreach (const QString &nameSpace, nameSpaces) { + for (const QString &nameSpace : nameSpaces) { RegisteredDocEntry entry; entry.nameSpace = nameSpace; entry.fileName = wrapper.documentationFileName(nameSpace); @@ -152,26 +152,24 @@ connect(m_ui.registeredDocsFilterLineEdit, &QLineEdit::textChanged, m_registereredDocsFilterModel, &QSortFilterProxyModel::setFilterFixedString); - connect(m_ui.buttonBox->button(QDialogButtonBox::Ok), SIGNAL(clicked()), - this, SLOT(applyChanges())); - connect(m_ui.buttonBox->button(QDialogButtonBox::Cancel), SIGNAL(clicked()), - this, SLOT(reject())); + connect(m_ui.buttonBox->button(QDialogButtonBox::Ok), &QAbstractButton::clicked, + this, &PreferencesDialog::applyChanges); + connect(m_ui.buttonBox->button(QDialogButtonBox::Cancel), &QAbstractButton::clicked, + this, &QDialog::reject); if (!m_hideFiltersTab) { m_ui.attributeWidget->header()->hide(); m_ui.attributeWidget->setRootIsDecorated(false); - connect(m_ui.attributeWidget, SIGNAL(itemChanged(QTreeWidgetItem*,int)), - this, SLOT(updateFilterMap())); - - connect(m_ui.filterWidget, - SIGNAL(currentItemChanged(QListWidgetItem*,QListWidgetItem*)), this, - SLOT(updateAttributes(QListWidgetItem*))); - - connect(m_ui.filterAddButton, SIGNAL(clicked()), this, - SLOT(addFilter())); - connect(m_ui.filterRemoveButton, SIGNAL(clicked()), this, - SLOT(removeFilter())); + connect(m_ui.attributeWidget, &QTreeWidget::itemChanged, + this, &PreferencesDialog::updateFilterMap); + connect(m_ui.filterWidget, &QListWidget::currentItemChanged, + this, &PreferencesDialog::updateAttributes); + + connect(m_ui.filterAddButton, &QAbstractButton::clicked, + this, &PreferencesDialog::addFilter); + connect(m_ui.filterRemoveButton, &QAbstractButton::clicked, + this, &PreferencesDialog::removeFilter); updateFilterPage(); } else { @@ -179,13 +177,13 @@ } if (!m_hideDocsTab) { - connect(m_ui.docAddButton, SIGNAL(clicked()), this, - SLOT(addDocumentationLocal())); - connect(m_ui.docRemoveButton, SIGNAL(clicked()), this, - SLOT(removeDocumentation())); + connect(m_ui.docAddButton, &QAbstractButton::clicked, + this, &PreferencesDialog::addDocumentationLocal); + connect(m_ui.docRemoveButton, &QAbstractButton::clicked, + this, &PreferencesDialog::removeDocumentation); m_docsBackup.reserve(m_registeredDocsModel->rowCount()); - foreach (const RegisteredDocEntry &e, m_registeredDocsModel->docEntries()) + for (const RegisteredDocEntry &e : m_registeredDocsModel->docEntries()) m_docsBackup.append(e.nameSpace); } else { m_ui.tabWidget->removeTab(m_ui.tabWidget->indexOf(m_ui.docsTab)); @@ -239,7 +237,7 @@ m_filterMapBackup.clear(); const QStringList &filters = helpEngine.customFilters(); - foreach (const QString &filter, filters) { + for (const QString &filter : filters) { if (filter == HelpEngineWrapper::TrUnfiltered()) continue; QStringList atts = helpEngine.filterAttributes(filter); @@ -250,7 +248,7 @@ m_ui.filterWidget->addItems(m_filterMap.keys()); - foreach (const QString &a, helpEngine.filterAttributes()) + for (const QString &a : helpEngine.filterAttributes()) new QTreeWidgetItem(m_ui.attributeWidget, QStringList() << a); if (!m_filterMap.keys().isEmpty()) @@ -260,12 +258,10 @@ void PreferencesDialog::updateAttributes(QListWidgetItem *item) { TRACE_OBJ - QStringList checkedList; - if (item) - checkedList = m_filterMap.value(item->text()); - QTreeWidgetItem *itm; + const QStringList &checkedList = item ? m_filterMap.value(item->text()) : QStringList(); + for (int i = 0; i < m_ui.attributeWidget->topLevelItemCount(); ++i) { - itm = m_ui.attributeWidget->topLevelItem(i); + QTreeWidgetItem *itm = m_ui.attributeWidget->topLevelItem(i); if (checkedList.contains(itm->text(0))) itm->setCheckState(0, Qt::Checked); else @@ -328,14 +324,14 @@ void PreferencesDialog::addDocumentationLocal() { TRACE_OBJ - const QStringList fileNames = QFileDialog::getOpenFileNames(this, + const QStringList &fileNames = QFileDialog::getOpenFileNames(this, tr("Add Documentation"), QString(), tr("Qt Compressed Help Files (*.qch)")); if (fileNames.isEmpty()) return; QStringList invalidFiles; QStringList alreadyRegistered; - foreach (const QString &fileName, fileNames) { + for (const QString &fileName : fileNames) { const QString nameSpace = QHelpEngineCore::namespaceName(fileName); if (nameSpace.isEmpty()) { invalidFiles.append(fileName); @@ -360,7 +356,7 @@ if (!invalidFiles.isEmpty() || !alreadyRegistered.isEmpty()) { QString message; if (!alreadyRegistered.isEmpty()) { - foreach (const QString &ns, alreadyRegistered) { + for (const QString &ns : qAsConst(alreadyRegistered)) { message += tr("The namespace %1 is already registered!") .arg(QString("%1").arg(ns)) + QLatin1String("
"); } @@ -371,7 +367,7 @@ if (!invalidFiles.isEmpty()) { message += tr("The specified file is not a valid Qt Help File!"); message.append(QLatin1String("
    ")); - foreach (const QString &file, invalidFiles) + for (const QString &file : qAsConst(invalidFiles)) message += QLatin1String("
  • ") + file + QLatin1String("
  • "); message.append(QLatin1String("
")); } @@ -384,7 +380,7 @@ QList PreferencesDialog::currentRegisteredDocsSelection() const { QList result; - foreach (const QModelIndex &index, m_ui.registeredDocsListView->selectionModel()->selectedRows()) + for (const QModelIndex &index : m_ui.registeredDocsListView->selectionModel()->selectedRows()) result.append(m_registereredDocsFilterModel->mapToSource(index).row()); return result; } @@ -402,7 +398,7 @@ bool foundBefore = false; for (int i = currentSelection.size() - 1; i >= 0; --i) { const int row = currentSelection.at(i); - const QString& ns = entries.at(row).nameSpace; + const QString &ns = entries.at(row).nameSpace; if (!foundBefore && OpenPagesManager::instance()->pagesOpenForNamespace(ns)) { if (0 == QMessageBox::information(this, tr("Remove Documentation"), tr("Some documents currently opened in Assistant reference the " @@ -419,7 +415,7 @@ m_registeredDocsModel->setDocEntries(entries); if (m_registereredDocsFilterModel->rowCount()) { - const QModelIndex first = m_registereredDocsFilterModel->index(0, 0); + const QModelIndex &first = m_registereredDocsFilterModel->index(0, 0); m_ui.registeredDocsListView->selectionModel()->setCurrentIndex(first, QItemSelectionModel::ClearAndSelect); } @@ -433,24 +429,20 @@ if (m_filterMap.count() != m_filterMapBackup.count()) { filtersWereChanged = true; } else { - QMapIterator it(m_filterMapBackup); - while (it.hasNext() && !filtersWereChanged) { - it.next(); + for (auto it = m_filterMapBackup.cbegin(), end = m_filterMapBackup.cend(); it != end && !filtersWereChanged; ++it) { if (!m_filterMap.contains(it.key())) { filtersWereChanged = true; } else { - QStringList a = it.value(); - QStringList b = m_filterMap.value(it.key()); + const QStringList &a = it.value(); + const QStringList &b = m_filterMap.value(it.key()); if (a.count() != b.count()) { filtersWereChanged = true; } else { - QStringList::const_iterator i(a.constBegin()); - while (i != a.constEnd()) { - if (!b.contains(*i)) { + for (const QString &aStr : a) { + if (!b.contains(aStr)) { filtersWereChanged = true; break; } - ++i; } } } @@ -459,16 +451,13 @@ } if (filtersWereChanged) { - foreach (const QString &filter, m_removedFilters) + for (const QString &filter : qAsConst(m_removedFilters)) helpEngine.removeCustomFilter(filter); - QMapIterator it(m_filterMap); - while (it.hasNext()) { - it.next(); + for (auto it = m_filterMap.cbegin(), end = m_filterMap.cend(); it != end; ++it) helpEngine.addCustomFilter(it.key(), it.value()); - } } - foreach (const QString &doc, m_unregDocs) { + for (const QString &doc : qAsConst(m_unregDocs)) { OpenPagesManager::instance()->closePages(doc); helpEngine.unregisterDocumentation(doc); } @@ -517,21 +506,21 @@ m_browserFontPanel->setChecked(helpEngine.usesBrowserFont()); - connect(m_appFontPanel, SIGNAL(toggled(bool)), this, - SLOT(appFontSettingToggled(bool))); - connect(m_browserFontPanel, SIGNAL(toggled(bool)), this, - SLOT(browserFontSettingToggled(bool))); - - QList allCombos = m_appFontPanel->findChildren(); - foreach (QComboBox* box, allCombos) { - connect(box, SIGNAL(currentIndexChanged(int)), this, - SLOT(appFontSettingChanged(int))); + connect(m_appFontPanel, &QGroupBox::toggled, + this, &PreferencesDialog::appFontSettingToggled); + connect(m_browserFontPanel, &QGroupBox::toggled, + this, &PreferencesDialog::browserFontSettingToggled); + + const QList &appCombos = m_appFontPanel->findChildren(); + for (QComboBox* box : appCombos) { + connect(box, QOverload::of(&QComboBox::currentIndexChanged), + this, &PreferencesDialog::appFontSettingChanged); } - allCombos = m_browserFontPanel->findChildren(); - foreach (QComboBox* box, allCombos) { - connect(box, SIGNAL(currentIndexChanged(int)), this, - SLOT(browserFontSettingChanged(int))); + const QList &browserCombos = m_browserFontPanel->findChildren(); + for (QComboBox* box : browserCombos) { + connect(box, QOverload::of(&QComboBox::currentIndexChanged), + this, &PreferencesDialog::browserFontSettingChanged); } } @@ -574,9 +563,12 @@ m_showTabs = helpEngine.showTabs(); m_ui.showTabs->setChecked(m_showTabs); - connect(m_ui.blankPageButton, SIGNAL(clicked()), this, SLOT(setBlankPage())); - connect(m_ui.currentPageButton, SIGNAL(clicked()), this, SLOT(setCurrentPage())); - connect(m_ui.defaultPageButton, SIGNAL(clicked()), this, SLOT(setDefaultPage())); + connect(m_ui.blankPageButton, &QAbstractButton::clicked, + this, &PreferencesDialog::setBlankPage); + connect(m_ui.currentPageButton, &QAbstractButton::clicked, + this, &PreferencesDialog::setCurrentPage); + connect(m_ui.defaultPageButton, &QAbstractButton::clicked, + this, &PreferencesDialog::setDefaultPage); } void PreferencesDialog::setBlankPage() diff -Nru qttools-opensource-src-5.7.1/src/assistant/assistant/qtdocinstaller.cpp qttools-opensource-src-5.9.1/src/assistant/assistant/qtdocinstaller.cpp --- qttools-opensource-src-5.7.1/src/assistant/assistant/qtdocinstaller.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/assistant/qtdocinstaller.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -67,7 +67,7 @@ m_qchFiles = m_qchDir.entryList(QStringList() << QLatin1String("*.qch")); bool changes = false; - foreach (const DocInfo &docInfo, m_docInfos) { + for (const DocInfo &docInfo : qAsConst(m_docInfos)) { changes |= installDoc(docInfo); m_mutex.lock(); if (m_abort) { @@ -96,10 +96,10 @@ emit qchFileNotFound(component); return false; } - foreach (const QString &f, m_qchFiles) { + for (const QString &f : qAsConst(m_qchFiles)) { if (f.startsWith(component)) { QFileInfo fi(m_qchDir.absolutePath() + QDir::separator() + f); - if (dt.isValid() && fi.lastModified().toTime_t() == dt.toTime_t() + if (dt.isValid() && fi.lastModified().toSecsSinceEpoch() == dt.toSecsSinceEpoch() && qchFile == fi.absoluteFilePath()) return false; emit registerDocumentation(component, fi.absoluteFilePath()); diff -Nru qttools-opensource-src-5.7.1/src/assistant/assistant/qtdocinstaller.h qttools-opensource-src-5.9.1/src/assistant/assistant/qtdocinstaller.h --- qttools-opensource-src-5.7.1/src/assistant/assistant/qtdocinstaller.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/assistant/qtdocinstaller.h 2017-06-23 12:03:39.000000000 +0000 @@ -56,7 +56,7 @@ void docsInstalled(bool newDocsInstalled); private: - void run(); + void run() override; bool installDoc(const DocInfo &docInfo); bool m_abort; diff -Nru qttools-opensource-src-5.7.1/src/assistant/assistant/remotecontrol.cpp qttools-opensource-src-5.9.1/src/assistant/assistant/remotecontrol.cpp --- qttools-opensource-src-5.7.1/src/assistant/assistant/remotecontrol.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/assistant/remotecontrol.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -64,22 +64,22 @@ { TRACE_OBJ - connect(m_mainWindow, SIGNAL(initDone()), this, SLOT(applyCache())); + connect(m_mainWindow, &MainWindow::initDone, + this, &RemoteControl::applyCache); StdInListener *l = new StdInListener(this); - connect(l, SIGNAL(receivedCommand(QString)), - this, SLOT(handleCommandString(QString))); + connect(l, &StdInListener::receivedCommand, + this, &RemoteControl::handleCommandString); l->start(); } void RemoteControl::handleCommandString(const QString &cmdString) { TRACE_OBJ - QStringList cmds = cmdString.split(QLatin1Char(';')); - QStringList::const_iterator it = cmds.constBegin(); - while (it != cmds.constEnd()) { + const QStringList &commands = cmdString.split(QLatin1Char(';')); + for (const QString &command : commands) { QString cmd, arg; - splitInputString(*it, cmd, arg); + splitInputString(command, cmd, arg); if (m_debug) QMessageBox::information(0, tr("Debugging Remote Control"), @@ -109,8 +109,6 @@ handleUnregisterCommand(arg); else break; - - ++it; } m_mainWindow->raise(); m_mainWindow->activateWindow(); @@ -123,7 +121,7 @@ QString cmdLine = input.trimmed(); int i = cmdLine.indexOf(QLatin1Char(' ')); cmd = cmdLine.left(i); - arg = cmdLine.mid(i+1); + arg = cmdLine.mid(i + 1); cmd = cmd.toLower(); } @@ -186,11 +184,8 @@ m_mainWindow->setSearchVisible(true); if (QHelpSearchQueryWidget *w = se->queryWidget()) { w->collapseExtendedSearch(); - QList queryList; - queryList << QHelpSearchQuery(QHelpSearchQuery::DEFAULT, - QStringList(arg)); - w->setQuery(queryList); - se->search(queryList); + w->setSearchInput(arg); + se->search(arg); } } } else { @@ -208,9 +203,9 @@ clearCache(); m_activateIdentifier = arg; } else { - const QMap &links = helpEngine.linksForIdentifier(arg); + const QMap links = helpEngine.linksForIdentifier(arg); if (!links.isEmpty()) - CentralWidget::instance()->setSource(links.constBegin().value()); + CentralWidget::instance()->setSource(links.first()); } } @@ -275,10 +270,10 @@ m_mainWindow->setIndexString(m_activateKeyword); helpEngine.indexWidget()->activateCurrentItem(); } else if (!m_activateIdentifier.isEmpty()) { - QMap links = + const QMap links = helpEngine.linksForIdentifier(m_activateIdentifier); if (!links.isEmpty()) - CentralWidget::instance()->setSource(links.constBegin().value()); + CentralWidget::instance()->setSource(links.first()); } else if (!m_currentFilter.isEmpty()) { helpEngine.setCurrentFilter(m_currentFilter); } diff -Nru qttools-opensource-src-5.7.1/src/assistant/assistant/searchwidget.cpp qttools-opensource-src-5.9.1/src/assistant/assistant/searchwidget.cpp --- qttools-opensource-src-5.7.1/src/assistant/assistant/searchwidget.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/assistant/searchwidget.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -66,17 +66,18 @@ setFocusProxy(queryWidget); - connect(queryWidget, SIGNAL(search()), this, SLOT(search())); - connect(resultWidget, SIGNAL(requestShowLink(QUrl)), this, - SIGNAL(requestShowLink(QUrl))); - - connect(searchEngine, SIGNAL(searchingStarted()), this, - SLOT(searchingStarted())); - connect(searchEngine, SIGNAL(searchingFinished(int)), this, - SLOT(searchingFinished(int))); + connect(queryWidget, &QHelpSearchQueryWidget::search, + this, &SearchWidget::search); + connect(resultWidget, &QHelpSearchResultWidget::requestShowLink, + this, &SearchWidget::requestShowLink); + + connect(searchEngine, &QHelpSearchEngine::searchingStarted, + this, &SearchWidget::searchingStarted); + connect(searchEngine, &QHelpSearchEngine::searchingFinished, + this, &SearchWidget::searchingFinished); QTextBrowser* browser = resultWidget->findChild(); - if (browser) // Will be null if lib was configured not to use CLucene. + if (browser) browser->viewport()->installEventFilter(this); } @@ -122,8 +123,7 @@ void SearchWidget::search() const { TRACE_OBJ - QList query = searchEngine->queryWidget()->query(); - searchEngine->search(query); + searchEngine->search(searchEngine->queryWidget()->searchInput()); } void SearchWidget::searchingStarted() @@ -132,10 +132,10 @@ qApp->setOverrideCursor(QCursor(Qt::WaitCursor)); } -void SearchWidget::searchingFinished(int hits) +void SearchWidget::searchingFinished(int searchResultCount) { TRACE_OBJ - Q_UNUSED(hits) + Q_UNUSED(searchResultCount) qApp->restoreOverrideCursor(); } @@ -186,7 +186,7 @@ QKeySequence keySeq; #ifndef QT_NO_CLIPBOARD keySeq = QKeySequence::Copy; - QAction *copyAction = menu.addAction(tr("&Copy") + QLatin1String("\t") + + QAction *copyAction = menu.addAction(tr("&Copy") + QLatin1Char('\t') + keySeq.toString(QKeySequence::NativeText)); copyAction->setEnabled(QTextCursor(browser->textCursor()).hasSelection()); #endif @@ -196,7 +196,7 @@ keySeq = QKeySequence(Qt::CTRL); QAction *newTabAction = menu.addAction(tr("Open Link in New Tab") + - QLatin1String("\t") + keySeq.toString(QKeySequence::NativeText) + + QLatin1Char('\t') + keySeq.toString(QKeySequence::NativeText) + QLatin1String("LMB")); newTabAction->setEnabled(!link.isEmpty() && link.isValid()); @@ -204,7 +204,7 @@ keySeq = QKeySequence::SelectAll; QAction *selectAllAction = menu.addAction(tr("Select All") + - QLatin1String("\t") + keySeq.toString(QKeySequence::NativeText)); + QLatin1Char('\t') + keySeq.toString(QKeySequence::NativeText)); QAction *usedAction = menu.exec(mapToGlobal(contextMenuEvent->pos())); #ifndef QT_NO_CLIPBOARD diff -Nru qttools-opensource-src-5.7.1/src/assistant/assistant/searchwidget.h qttools-opensource-src-5.9.1/src/assistant/assistant/searchwidget.h --- qttools-opensource-src-5.7.1/src/assistant/assistant/searchwidget.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/assistant/searchwidget.h 2017-06-23 12:03:39.000000000 +0000 @@ -59,12 +59,12 @@ private slots: void search() const; void searchingStarted(); - void searchingFinished(int hits); + void searchingFinished(int searchResultCount); private: - bool eventFilter(QObject* o, QEvent *e); - void keyPressEvent(QKeyEvent *keyEvent); - void contextMenuEvent(QContextMenuEvent *contextMenuEvent); + bool eventFilter(QObject* o, QEvent *e) override; + void keyPressEvent(QKeyEvent *keyEvent) override; + void contextMenuEvent(QContextMenuEvent *contextMenuEvent) override; private: int zoomCount; diff -Nru qttools-opensource-src-5.7.1/src/assistant/assistant/stdinlistener.cpp qttools-opensource-src-5.9.1/src/assistant/assistant/stdinlistener.cpp --- qttools-opensource-src-5.7.1/src/assistant/assistant/stdinlistener.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/assistant/stdinlistener.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -38,7 +38,8 @@ : QSocketNotifier(fileno(stdin), QSocketNotifier::Read, parent) { TRACE_OBJ - connect(this, SIGNAL(activated(int)), this, SLOT(receivedData())); + connect(this, &QSocketNotifier::activated, + this, &StdInListener::receivedData); } StdInListener::~StdInListener() diff -Nru qttools-opensource-src-5.7.1/src/assistant/assistant/stdinlistener_win.cpp qttools-opensource-src-5.9.1/src/assistant/assistant/stdinlistener_win.cpp --- qttools-opensource-src-5.7.1/src/assistant/assistant/stdinlistener_win.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/assistant/stdinlistener_win.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -51,11 +51,9 @@ bool ok = true; char chBuf[4096]; DWORD dwRead; + HANDLE hStdinDup; -#ifndef Q_OS_WINCE - HANDLE hStdin, hStdinDup; - - hStdin = GetStdHandle(STD_INPUT_HANDLE); + const HANDLE hStdin = GetStdHandle(STD_INPUT_HANDLE); if (hStdin == INVALID_HANDLE_VALUE) return; @@ -64,10 +62,6 @@ 0, false, DUPLICATE_SAME_ACCESS); CloseHandle(hStdin); -#else - HANDLE hStdinDup; - hStdinDup = stdin; -#endif while (ok) { ok = ReadFile(hStdinDup, chBuf, sizeof(chBuf), &dwRead, NULL); diff -Nru qttools-opensource-src-5.7.1/src/assistant/assistant/topicchooser.cpp qttools-opensource-src-5.9.1/src/assistant/assistant/topicchooser.cpp --- qttools-opensource-src-5.7.1/src/assistant/assistant/topicchooser.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/assistant/topicchooser.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -53,8 +53,7 @@ m_filterModel->setSourceModel(model); m_filterModel->setFilterCaseSensitivity(Qt::CaseInsensitive); - QMap::const_iterator it = links.constBegin(); - for (; it != links.constEnd(); ++it) { + for (auto it = links.cbegin(), end = links.cend(); it != end; ++it) { m_links.append(it.value()); QStandardItem *item = new QStandardItem(it.key()); item->setToolTip(it.value().toString()); @@ -68,10 +67,14 @@ if (m_filterModel->rowCount() != 0) ui.listWidget->setCurrentIndex(m_filterModel->index(0, 0)); - connect(ui.buttonCancel, SIGNAL(clicked()), this, SLOT(reject())); - connect(ui.buttonDisplay, SIGNAL(clicked()), this, SLOT(acceptDialog())); - connect(ui.lineEdit, SIGNAL(textChanged(QString)), this, SLOT(setFilter(QString))); - connect(ui.listWidget, SIGNAL(activated(QModelIndex)), this, SLOT(activated(QModelIndex))); + connect(ui.buttonCancel, &QAbstractButton::clicked, + this, &QDialog::reject); + connect(ui.buttonDisplay, &QAbstractButton::clicked, + this, &TopicChooser::acceptDialog); + connect(ui.lineEdit, &QLineEdit::textChanged, + this, &TopicChooser::setFilter); + connect(ui.listWidget, &QAbstractItemView::activated, + this, &TopicChooser::activated); const QByteArray ba = HelpEngineWrapper::instance().topicChooserGeometry(); if (!ba.isEmpty()) diff -Nru qttools-opensource-src-5.7.1/src/assistant/assistant/topicchooser.h qttools-opensource-src-5.9.1/src/assistant/assistant/topicchooser.h --- qttools-opensource-src-5.7.1/src/assistant/assistant/topicchooser.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/assistant/topicchooser.h 2017-06-23 12:03:39.000000000 +0000 @@ -53,7 +53,7 @@ void activated(const QModelIndex &index); private: - bool eventFilter(QObject *object, QEvent *event); + bool eventFilter(QObject *object, QEvent *event) override; private: Ui::TopicChooser ui; diff -Nru qttools-opensource-src-5.7.1/src/assistant/assistant.pro qttools-opensource-src-5.9.1/src/assistant/assistant.pro --- qttools-opensource-src-5.7.1/src/assistant/assistant.pro 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/assistant.pro 2017-06-23 12:03:39.000000000 +0000 @@ -1,13 +1,12 @@ TEMPLATE = subdirs -SUBDIRS += clucene \ +SUBDIRS += \ help \ assistant \ qhelpgenerator \ qcollectiongenerator \ qhelpconverter -help.depends = clucene assistant.depends = help qhelpgenerator.depends = help qcollectiongenerator.depends = help diff -Nru qttools-opensource-src-5.7.1/src/assistant/clucene/clucene.pro qttools-opensource-src-5.9.1/src/assistant/clucene/clucene.pro --- qttools-opensource-src-5.7.1/src/assistant/clucene/clucene.pro 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/clucene/clucene.pro 1970-01-01 00:00:00.000000000 +0000 @@ -1,33 +0,0 @@ -MODULE = clucene - -TARGET = QtCLucene -QT = core - -include(fulltextsearch.pri) - -CONFIG += warn_off -contains(QT_CONFIG, reduce_exports) { - CONFIG += hide_symbols - # workaround for compiler errors on Ubuntu - linux*-g++*:DEFINES += _GLIBCXX_EXTERN_TEMPLATE=0 -} - -# impossible to disable exceptions in clucene atm -CONFIG += exceptions - -# otherwise mingw headers do not declare common functions like _i64tow -win32-g++*:QMAKE_CXXFLAGS_CXX11 = -std=gnu++0x - -msvc { - QMAKE_CFLAGS_RELEASE -= -O2 - QMAKE_CXXFLAGS_RELEASE -= -O2 - DEFINES += _SILENCE_STDEXT_HASH_DEPRECATION_WARNINGS -} - -# the following define could be set globally in case we need it elsewhere -solaris* { - DEFINES += Q_SOLARIS_VERSION=$$system(uname -r | sed -e 's/5\\.//') -} - -CONFIG += internal_module -load(qt_module) diff -Nru qttools-opensource-src-5.7.1/src/assistant/clucene/fulltextsearch.pri qttools-opensource-src-5.9.1/src/assistant/clucene/fulltextsearch.pri --- qttools-opensource-src-5.7.1/src/assistant/clucene/fulltextsearch.pri 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/clucene/fulltextsearch.pri 1970-01-01 00:00:00.000000000 +0000 @@ -1,161 +0,0 @@ -DEFINES += _BUILD_FOR_QT_ LUCENE_DISABLE_MEMTRACKING -win32:DEFINES += _CRT_SECURE_NO_DEPRECATE _MT - -CLUCENEDIR = ../3rdparty/clucene/src/CLucene - -INCLUDEPATH += . .. \ - $$CLUCENEDIR \ - $$CLUCENEDIR/../ \ - $$CLUCENEDIR/analysis \ - $$CLUCENEDIR/analysis/standard \ - $$CLUCENEDIR/config \ - $$CLUCENEDIR/debug \ - $$CLUCENEDIR/document \ - $$CLUCENEDIR/index \ - $$CLUCENEDIR/queryParser \ - $$CLUCENEDIR/search \ - $$CLUCENEDIR/store \ - $$CLUCENEDIR/util - - -SOURCES += $$CLUCENEDIR/StdHeader.cpp \ - $$CLUCENEDIR/analysis/AnalysisHeader.cpp \ - $$CLUCENEDIR/analysis/Analyzers.cpp \ - $$CLUCENEDIR/config/gunichartables.cpp \ - $$CLUCENEDIR/config/repl_lltot.cpp \ - $$CLUCENEDIR/config/repl_tcscasecmp.cpp \ - $$CLUCENEDIR/config/repl_tcslwr.cpp \ - $$CLUCENEDIR/config/repl_tcstod.cpp \ - $$CLUCENEDIR/config/repl_tcstoll.cpp \ - $$CLUCENEDIR/config/repl_tprintf.cpp \ - $$CLUCENEDIR/config/threads.cpp \ - $$CLUCENEDIR/config/utf8.cpp \ - $$CLUCENEDIR/debug/condition.cpp \ - $$CLUCENEDIR/debug/error.cpp \ - $$CLUCENEDIR/debug/memtracking.cpp \ - $$CLUCENEDIR/document/DateField.cpp \ - $$CLUCENEDIR/document/Document.cpp \ - $$CLUCENEDIR/document/Field.cpp \ - $$CLUCENEDIR/index/CompoundFile.cpp \ - $$CLUCENEDIR/index/DocumentWriter.cpp \ - $$CLUCENEDIR/index/FieldInfos.cpp \ - $$CLUCENEDIR/index/FieldsReader.cpp \ - $$CLUCENEDIR/index/FieldsWriter.cpp \ - $$CLUCENEDIR/index/IndexModifier.cpp \ - $$CLUCENEDIR/index/IndexReader.cpp \ - $$CLUCENEDIR/index/IndexWriter.cpp \ - $$CLUCENEDIR/index/MultiReader.cpp \ - $$CLUCENEDIR/index/SegmentInfos.cpp \ - $$CLUCENEDIR/index/SegmentMergeInfo.cpp \ - $$CLUCENEDIR/index/SegmentMergeQueue.cpp \ - $$CLUCENEDIR/index/SegmentMerger.cpp \ - $$CLUCENEDIR/index/SegmentReader.cpp \ - $$CLUCENEDIR/index/SegmentTermDocs.cpp \ - $$CLUCENEDIR/index/SegmentTermEnum.cpp \ - $$CLUCENEDIR/index/SegmentTermPositions.cpp \ - $$CLUCENEDIR/index/SegmentTermVector.cpp \ - $$CLUCENEDIR/index/Term.cpp \ - $$CLUCENEDIR/index/TermInfo.cpp \ - $$CLUCENEDIR/index/TermInfosReader.cpp \ - $$CLUCENEDIR/index/TermInfosWriter.cpp \ - $$CLUCENEDIR/index/TermVectorReader.cpp \ - $$CLUCENEDIR/index/TermVectorWriter.cpp \ - $$CLUCENEDIR/queryParser/Lexer.cpp \ - $$CLUCENEDIR/queryParser/MultiFieldQueryParser.cpp \ - $$CLUCENEDIR/queryParser/QueryParser.cpp \ - $$CLUCENEDIR/queryParser/QueryParserBase.cpp \ - $$CLUCENEDIR/queryParser/QueryToken.cpp \ - $$CLUCENEDIR/queryParser/TokenList.cpp \ - $$CLUCENEDIR/search/BooleanQuery.cpp \ - $$CLUCENEDIR/search/BooleanScorer.cpp \ - $$CLUCENEDIR/search/CachingWrapperFilter.cpp \ - $$CLUCENEDIR/search/ChainedFilter.cpp \ - $$CLUCENEDIR/search/ConjunctionScorer.cpp \ - $$CLUCENEDIR/search/DateFilter.cpp \ - $$CLUCENEDIR/search/ExactPhraseScorer.cpp \ - $$CLUCENEDIR/search/Explanation.cpp \ - $$CLUCENEDIR/search/FieldCache.cpp \ - $$CLUCENEDIR/search/FieldCacheImpl.cpp \ - $$CLUCENEDIR/search/FieldDocSortedHitQueue.cpp \ - $$CLUCENEDIR/search/FieldSortedHitQueue.cpp \ - $$CLUCENEDIR/search/FilteredTermEnum.cpp \ - $$CLUCENEDIR/search/FuzzyQuery.cpp \ - $$CLUCENEDIR/search/HitQueue.cpp \ - $$CLUCENEDIR/search/Hits.cpp \ - $$CLUCENEDIR/search/IndexSearcher.cpp \ - $$CLUCENEDIR/search/MultiSearcher.cpp \ - $$CLUCENEDIR/search/MultiTermQuery.cpp \ - $$CLUCENEDIR/search/PhrasePositions.cpp \ - $$CLUCENEDIR/search/PhraseQuery.cpp \ - $$CLUCENEDIR/search/PhraseScorer.cpp \ - $$CLUCENEDIR/search/PrefixQuery.cpp \ - $$CLUCENEDIR/search/QueryFilter.cpp \ - $$CLUCENEDIR/search/RangeFilter.cpp \ - $$CLUCENEDIR/search/RangeQuery.cpp \ - $$CLUCENEDIR/search/SearchHeader.cpp \ - $$CLUCENEDIR/search/Similarity.cpp \ - $$CLUCENEDIR/search/SloppyPhraseScorer.cpp \ - $$CLUCENEDIR/search/Sort.cpp \ - $$CLUCENEDIR/search/TermQuery.cpp \ - $$CLUCENEDIR/search/TermScorer.cpp \ - $$CLUCENEDIR/search/WildcardQuery.cpp \ - $$CLUCENEDIR/search/WildcardTermEnum.cpp \ - $$CLUCENEDIR/store/FSDirectory.cpp \ - $$CLUCENEDIR/store/IndexInput.cpp \ - $$CLUCENEDIR/store/IndexOutput.cpp \ - $$CLUCENEDIR/store/Lock.cpp \ - $$CLUCENEDIR/store/MMapInput.cpp \ - $$CLUCENEDIR/store/RAMDirectory.cpp \ - $$CLUCENEDIR/store/TransactionalRAMDirectory.cpp \ - $$CLUCENEDIR/util/BitSet.cpp \ - $$CLUCENEDIR/util/Equators.cpp \ - $$CLUCENEDIR/util/FastCharStream.cpp \ - $$CLUCENEDIR/util/fileinputstream.cpp \ - $$CLUCENEDIR/util/Misc.cpp \ - $$CLUCENEDIR/util/Reader.cpp \ - $$CLUCENEDIR/util/StringBuffer.cpp \ - $$CLUCENEDIR/util/StringIntern.cpp \ - $$CLUCENEDIR/util/ThreadLocal.cpp \ - $$CLUCENEDIR/analysis/standard/StandardAnalyzer.cpp \ - $$CLUCENEDIR/analysis/standard/StandardFilter.cpp \ - $$CLUCENEDIR/analysis/standard/StandardTokenizer.cpp - - -#Header files -HEADERS += qclucene_global_p.h \ - qclucene-config_p.h \ - qanalyzer_p.h \ - qtokenizer_p.h \ - qtoken_p.h \ - qtokenstream_p.h \ - qdocument_p.h \ - qfield_p.h \ - qindexreader_p.h \ - qindexwriter_p.h \ - qterm_p.h \ - qqueryparser_p.h \ - qfilter_p.h \ - qhits_p.h \ - qsearchable_p.h \ - qsort_p.h \ - qquery_p.h \ - qreader_p.h - - -#Source files -SOURCES += qanalyzer.cpp \ - qtokenizer.cpp \ - qtoken.cpp \ - qtokenstream.cpp \ - qdocument.cpp \ - qfield.cpp \ - qindexreader.cpp \ - qindexwriter.cpp \ - qterm.cpp \ - qqueryparser.cpp \ - qfilter.cpp \ - qhits.cpp \ - qsearchable.cpp \ - qsort.cpp \ - qquery.cpp \ - qreader.cpp diff -Nru qttools-opensource-src-5.7.1/src/assistant/clucene/license.txt qttools-opensource-src-5.9.1/src/assistant/clucene/license.txt --- qttools-opensource-src-5.7.1/src/assistant/clucene/license.txt 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/clucene/license.txt 1970-01-01 00:00:00.000000000 +0000 @@ -1,503 +0,0 @@ - GNU LESSER GENERAL PUBLIC LICENSE - Version 2.1, February 1999 - - Copyright (C) 1991, 1999 Free Software Foundation, Inc. - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - -[This is the first released version of the Lesser GPL. It also counts - as the successor of the GNU Library Public License, version 2, hence - the version number 2.1.] - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -Licenses are intended to guarantee your freedom to share and change -free software--to make sure the software is free for all its users. - - This license, the Lesser General Public License, applies to some -specially designated software packages--typically libraries--of the -Free Software Foundation and other authors who decide to use it. You -can use it too, but we suggest you first think carefully about whether -this license or the ordinary General Public License is the better -strategy to use in any particular case, based on the explanations below. - - When we speak of free software, we are referring to freedom of use, -not price. Our General Public Licenses are designed to make sure that -you have the freedom to distribute copies of free software (and charge -for this service if you wish); that you receive source code or can get -it if you want it; that you can change the software and use pieces of -it in new free programs; and that you are informed that you can do -these things. - - To protect your rights, we need to make restrictions that forbid -distributors to deny you these rights or to ask you to surrender these -rights. These restrictions translate to certain responsibilities for -you if you distribute copies of the library or if you modify it. - - For example, if you distribute copies of the library, whether gratis -or for a fee, you must give the recipients all the rights that we gave -you. You must make sure that they, too, receive or can get the source -code. If you link other code with the library, you must provide -complete object files to the recipients, so that they can relink them -with the library after making changes to the library and recompiling -it. And you must show them these terms so they know their rights. - - We protect your rights with a two-step method: (1) we copyright the -library, and (2) we offer you this license, which gives you legal -permission to copy, distribute and/or modify the library. - - To protect each distributor, we want to make it very clear that -there is no warranty for the free library. Also, if the library is -modified by someone else and passed on, the recipients should know -that what they have is not the original version, so that the original -author's reputation will not be affected by problems that might be -introduced by others. - - Finally, software patents pose a constant threat to the existence of -any free program. We wish to make sure that a company cannot -effectively restrict the users of a free program by obtaining a -restrictive license from a patent holder. Therefore, we insist that -any patent license obtained for a version of the library must be -consistent with the full freedom of use specified in this license. - - Most GNU software, including some libraries, is covered by the -ordinary GNU General Public License. This license, the GNU Lesser -General Public License, applies to certain designated libraries, and -is quite different from the ordinary General Public License. We use -this license for certain libraries in order to permit linking those -libraries into non-free programs. - - When a program is linked with a library, whether statically or using -a shared library, the combination of the two is legally speaking a -combined work, a derivative of the original library. The ordinary -General Public License therefore permits such linking only if the -entire combination fits its criteria of freedom. The Lesser General -Public License permits more lax criteria for linking other code with -the library. - - We call this license the "Lesser" General Public License because it -does Less to protect the user's freedom than the ordinary General -Public License. It also provides other free software developers Less -of an advantage over competing non-free programs. These disadvantages -are the reason we use the ordinary General Public License for many -libraries. However, the Lesser license provides advantages in certain -special circumstances. - - For example, on rare occasions, there may be a special need to -encourage the widest possible use of a certain library, so that it becomes -a de-facto standard. To achieve this, non-free programs must be -allowed to use the library. A more frequent case is that a free -library does the same job as widely used non-free libraries. In this -case, there is little to gain by limiting the free library to free -software only, so we use the Lesser General Public License. - - In other cases, permission to use a particular library in non-free -programs enables a greater number of people to use a large body of -free software. For example, permission to use the GNU C Library in -non-free programs enables many more people to use the whole GNU -operating system, as well as its variant, the GNU/Linux operating -system. - - Although the Lesser General Public License is Less protective of the -users' freedom, it does ensure that the user of a program that is -linked with the Library has the freedom and the wherewithal to run -that program using a modified version of the Library. - - The precise terms and conditions for copying, distribution and -modification follow. Pay close attention to the difference between a -"work based on the library" and a "work that uses the library". The -former contains code derived from the library, whereas the latter must -be combined with the library in order to run. - - GNU LESSER GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License Agreement applies to any software library or other -program which contains a notice placed by the copyright holder or -other authorized party saying it may be distributed under the terms of -this Lesser General Public License (also called "this License"). -Each licensee is addressed as "you". - - A "library" means a collection of software functions and/or data -prepared so as to be conveniently linked with application programs -(which use some of those functions and data) to form executables. - - The "Library", below, refers to any such software library or work -which has been distributed under these terms. A "work based on the -Library" means either the Library or any derivative work under -copyright law: that is to say, a work containing the Library or a -portion of it, either verbatim or with modifications and/or translated -straightforwardly into another language. (Hereinafter, translation is -included without limitation in the term "modification".) - - "Source code" for a work means the preferred form of the work for -making modifications to it. For a library, complete source code means -all the source code for all modules it contains, plus any associated -interface definition files, plus the scripts used to control compilation -and installation of the library. - - Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running a program using the Library is not restricted, and output from -such a program is covered only if its contents constitute a work based -on the Library (independent of the use of the Library in a tool for -writing it). Whether that is true depends on what the Library does -and what the program that uses the Library does. - - 1. You may copy and distribute verbatim copies of the Library's -complete source code as you receive it, in any medium, provided that -you conspicuously and appropriately publish on each copy an -appropriate copyright notice and disclaimer of warranty; keep intact -all the notices that refer to this License and to the absence of any -warranty; and distribute a copy of this License along with the -Library. - - You may charge a fee for the physical act of transferring a copy, -and you may at your option offer warranty protection in exchange for a -fee. - - 2. You may modify your copy or copies of the Library or any portion -of it, thus forming a work based on the Library, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) The modified work must itself be a software library. - - b) You must cause the files modified to carry prominent notices - stating that you changed the files and the date of any change. - - c) You must cause the whole of the work to be licensed at no - charge to all third parties under the terms of this License. - - d) If a facility in the modified Library refers to a function or a - table of data to be supplied by an application program that uses - the facility, other than as an argument passed when the facility - is invoked, then you must make a good faith effort to ensure that, - in the event an application does not supply such function or - table, the facility still operates, and performs whatever part of - its purpose remains meaningful. - - (For example, a function in a library to compute square roots has - a purpose that is entirely well-defined independent of the - application. Therefore, Subsection 2d requires that any - application-supplied function or table used by this function must - be optional: if the application does not supply it, the square - root function must still compute square roots.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Library, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Library, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote -it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Library. - -In addition, mere aggregation of another work not based on the Library -with the Library (or with a work based on the Library) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may opt to apply the terms of the ordinary GNU General Public -License instead of this License to a given copy of the Library. To do -this, you must alter all the notices that refer to this License, so -that they refer to the ordinary GNU General Public License, version 2, -instead of to this License. (If a newer version than version 2 of the -ordinary GNU General Public License has appeared, then you can specify -that version instead if you wish.) Do not make any other change in -these notices. - - Once this change is made in a given copy, it is irreversible for -that copy, so the ordinary GNU General Public License applies to all -subsequent copies and derivative works made from that copy. - - This option is useful when you wish to copy part of the code of -the Library into a program that is not a library. - - 4. You may copy and distribute the Library (or a portion or -derivative of it, under Section 2) in object code or executable form -under the terms of Sections 1 and 2 above provided that you accompany -it with the complete corresponding machine-readable source code, which -must be distributed under the terms of Sections 1 and 2 above on a -medium customarily used for software interchange. - - If distribution of object code is made by offering access to copy -from a designated place, then offering equivalent access to copy the -source code from the same place satisfies the requirement to -distribute the source code, even though third parties are not -compelled to copy the source along with the object code. - - 5. A program that contains no derivative of any portion of the -Library, but is designed to work with the Library by being compiled or -linked with it, is called a "work that uses the Library". Such a -work, in isolation, is not a derivative work of the Library, and -therefore falls outside the scope of this License. - - However, linking a "work that uses the Library" with the Library -creates an executable that is a derivative of the Library (because it -contains portions of the Library), rather than a "work that uses the -library". The executable is therefore covered by this License. -Section 6 states terms for distribution of such executables. - - When a "work that uses the Library" uses material from a header file -that is part of the Library, the object code for the work may be a -derivative work of the Library even though the source code is not. -Whether this is true is especially significant if the work can be -linked without the Library, or if the work is itself a library. The -threshold for this to be true is not precisely defined by law. - - If such an object file uses only numerical parameters, data -structure layouts and accessors, and small macros and small inline -functions (ten lines or less in length), then the use of the object -file is unrestricted, regardless of whether it is legally a derivative -work. (Executables containing this object code plus portions of the -Library will still fall under Section 6.) - - Otherwise, if the work is a derivative of the Library, you may -distribute the object code for the work under the terms of Section 6. -Any executables containing that work also fall under Section 6, -whether or not they are linked directly with the Library itself. - - 6. As an exception to the Sections above, you may also combine or -link a "work that uses the Library" with the Library to produce a -work containing portions of the Library, and distribute that work -under terms of your choice, provided that the terms permit -modification of the work for the customer's own use and reverse -engineering for debugging such modifications. - - You must give prominent notice with each copy of the work that the -Library is used in it and that the Library and its use are covered by -this License. You must supply a copy of this License. If the work -during execution displays copyright notices, you must include the -copyright notice for the Library among them, as well as a reference -directing the user to the copy of this License. Also, you must do one -of these things: - - a) Accompany the work with the complete corresponding - machine-readable source code for the Library including whatever - changes were used in the work (which must be distributed under - Sections 1 and 2 above); and, if the work is an executable linked - with the Library, with the complete machine-readable "work that - uses the Library", as object code and/or source code, so that the - user can modify the Library and then relink to produce a modified - executable containing the modified Library. (It is understood - that the user who changes the contents of definitions files in the - Library will not necessarily be able to recompile the application - to use the modified definitions.) - - b) Use a suitable shared library mechanism for linking with the - Library. A suitable mechanism is one that (1) uses at run time a - copy of the library already present on the user's computer system, - rather than copying library functions into the executable, and (2) - will operate properly with a modified version of the library, if - the user installs one, as long as the modified version is - interface-compatible with the version that the work was made with. - - c) Accompany the work with a written offer, valid for at - least three years, to give the same user the materials - specified in Subsection 6a, above, for a charge no more - than the cost of performing this distribution. - - d) If distribution of the work is made by offering access to copy - from a designated place, offer equivalent access to copy the above - specified materials from the same place. - - e) Verify that the user has already received a copy of these - materials or that you have already sent this user a copy. - - For an executable, the required form of the "work that uses the -Library" must include any data and utility programs needed for -reproducing the executable from it. However, as a special exception, -the materials to be distributed need not include anything that is -normally distributed (in either source or binary form) with the major -components (compiler, kernel, and so on) of the operating system on -which the executable runs, unless that component itself accompanies -the executable. - - It may happen that this requirement contradicts the license -restrictions of other proprietary libraries that do not normally -accompany the operating system. Such a contradiction means you cannot -use both them and the Library together in an executable that you -distribute. - - 7. You may place library facilities that are a work based on the -Library side-by-side in a single library together with other library -facilities not covered by this License, and distribute such a combined -library, provided that the separate distribution of the work based on -the Library and of the other library facilities is otherwise -permitted, and provided that you do these two things: - - a) Accompany the combined library with a copy of the same work - based on the Library, uncombined with any other library - facilities. This must be distributed under the terms of the - Sections above. - - b) Give prominent notice with the combined library of the fact - that part of it is a work based on the Library, and explaining - where to find the accompanying uncombined form of the same work. - - 8. You may not copy, modify, sublicense, link with, or distribute -the Library except as expressly provided under this License. Any -attempt otherwise to copy, modify, sublicense, link with, or -distribute the Library is void, and will automatically terminate your -rights under this License. However, parties who have received copies, -or rights, from you under this License will not have their licenses -terminated so long as such parties remain in full compliance. - - 9. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Library or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Library (or any work based on the -Library), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Library or works based on it. - - 10. Each time you redistribute the Library (or any work based on the -Library), the recipient automatically receives a license from the -original licensor to copy, distribute, link with or modify the Library -subject to these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties with -this License. - - 11. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Library at all. For example, if a patent -license would not permit royalty-free redistribution of the Library by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Library. - -If any portion of this section is held invalid or unenforceable under any -particular circumstance, the balance of the section is intended to apply, -and the section as a whole is intended to apply in other circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 12. If the distribution and/or use of the Library is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Library under this License may add -an explicit geographical distribution limitation excluding those countries, -so that distribution is permitted only in or among countries not thus -excluded. In such case, this License incorporates the limitation as if -written in the body of this License. - - 13. The Free Software Foundation may publish revised and/or new -versions of the Lesser General Public License from time to time. -Such new versions will be similar in spirit to the present version, -but may differ in detail to address new problems or concerns. - -Each version is given a distinguishing version number. If the Library -specifies a version number of this License which applies to it and -"any later version", you have the option of following the terms and -conditions either of that version or of any later version published by -the Free Software Foundation. If the Library does not specify a -license version number, you may choose any version ever published by -the Free Software Foundation. - - 14. If you wish to incorporate parts of the Library into other free -programs whose distribution conditions are incompatible with these, -write to the author to ask for permission. For software which is -copyrighted by the Free Software Foundation, write to the Free -Software Foundation; we sometimes make exceptions for this. Our -decision will be guided by the two goals of preserving the free status -of all derivatives of our free software and of promoting the sharing -and reuse of software generally. - - NO WARRANTY - - 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO -WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. -EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR -OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY -KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE -LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME -THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN -WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY -AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU -FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR -CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE -LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING -RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A -FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF -SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGES. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Libraries - - If you develop a new library, and you want it to be of the greatest -possible use to the public, we recommend making it free software that -everyone can redistribute and change. You can do so by permitting -redistribution under these terms (or, alternatively, under the terms of the -ordinary General Public License). - - To apply these terms, attach the following notices to the library. It is -safest to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least the -"copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - -Also add information on how to contact you by electronic and paper mail. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the library, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the - library `Frob' (a library for tweaking knobs) written by James Random Hacker. - - , 1 April 1990 - Ty Coon, President of Vice - -That's all there is to it! - diff -Nru qttools-opensource-src-5.7.1/src/assistant/clucene/qanalyzer.cpp qttools-opensource-src-5.9.1/src/assistant/clucene/qanalyzer.cpp --- qttools-opensource-src-5.7.1/src/assistant/clucene/qanalyzer.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/clucene/qanalyzer.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,242 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team. -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the QtTools module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qanalyzer_p.h" -#include "qclucene_global_p.h" - -#include -#include - -QT_BEGIN_NAMESPACE - -QCLuceneAnalyzerPrivate::QCLuceneAnalyzerPrivate() - : QSharedData() -{ - analyzer = 0; - deleteCLuceneAnalyzer = true; -} - -QCLuceneAnalyzerPrivate::QCLuceneAnalyzerPrivate(const QCLuceneAnalyzerPrivate &other) - : QSharedData() -{ - analyzer = _CL_POINTER(other.analyzer); - deleteCLuceneAnalyzer = other.deleteCLuceneAnalyzer; -} - -QCLuceneAnalyzerPrivate::~QCLuceneAnalyzerPrivate() -{ - if (deleteCLuceneAnalyzer) - _CLDECDELETE(analyzer); -} - - -QCLuceneAnalyzer::QCLuceneAnalyzer() - : d(new QCLuceneAnalyzerPrivate()) -{ - //nothing todo, private -} - -QCLuceneAnalyzer::~QCLuceneAnalyzer() -{ - // nothing todo -} - -qint32 QCLuceneAnalyzer::positionIncrementGap(const QString &fieldName) const -{ - Q_UNUSED(fieldName); - return 0; -} - -QCLuceneTokenStream QCLuceneAnalyzer::tokenStream(const QString &fieldName, - const QCLuceneReader &reader) const -{ - TCHAR *fName = QStringToTChar(fieldName); - QCLuceneTokenStream tokenStream; - tokenStream.d->tokenStream = d->analyzer->tokenStream(fName, reader.d->reader); - delete [] fName; - - return tokenStream; -} - - -QCLuceneStandardAnalyzer::QCLuceneStandardAnalyzer() - : QCLuceneAnalyzer() -{ - d->analyzer = new lucene::analysis::standard::StandardAnalyzer(); -} - -QCLuceneStandardAnalyzer::~QCLuceneStandardAnalyzer() -{ - // nothing todo -} - -QCLuceneStandardAnalyzer::QCLuceneStandardAnalyzer(const QStringList &stopWords) -{ - const TCHAR **tArray = new const TCHAR*[stopWords.count() +1]; - - for(int i = 0; i < stopWords.count(); ++i) { - TCHAR *stopWord = QStringToTChar(stopWords.at(i)); - tArray[i] = STRDUP_TtoT(stopWord); - delete [] stopWord; - } - tArray[stopWords.count()] = 0; - - d->analyzer = new lucene::analysis::standard::StandardAnalyzer(tArray); - - for (int i = 0; i < stopWords.count(); ++i) - delete [] tArray[i]; - - delete [] tArray; -} - - -QCLuceneWhitespaceAnalyzer::QCLuceneWhitespaceAnalyzer() - : QCLuceneAnalyzer() -{ - d->analyzer = new lucene::analysis::WhitespaceAnalyzer(); -} - -QCLuceneWhitespaceAnalyzer::~QCLuceneWhitespaceAnalyzer() -{ - // nothing todo -} - - -QCLuceneSimpleAnalyzer::QCLuceneSimpleAnalyzer() - : QCLuceneAnalyzer() -{ - d->analyzer = new lucene::analysis::SimpleAnalyzer(); -} - -QCLuceneSimpleAnalyzer::~QCLuceneSimpleAnalyzer() -{ - // nothing todo -} - - -QCLuceneStopAnalyzer::QCLuceneStopAnalyzer() - : QCLuceneAnalyzer() -{ - d->analyzer = new lucene::analysis::StopAnalyzer(); -} - -QCLuceneStopAnalyzer::~QCLuceneStopAnalyzer() -{ - // nothing todo -} - -QCLuceneStopAnalyzer::QCLuceneStopAnalyzer(const QStringList &stopWords) - : QCLuceneAnalyzer() -{ - const TCHAR **tArray = new const TCHAR*[stopWords.count() +1]; - - for(int i = 0; i < stopWords.count(); ++i) { - TCHAR *stopWord = QStringToTChar(stopWords.at(i)); - tArray[i] = STRDUP_TtoT(stopWord); - delete [] stopWord; - } - tArray[stopWords.count()] = 0; - - d->analyzer = new lucene::analysis::StopAnalyzer(tArray); - - for (int i = 0; i < stopWords.count(); ++i) - delete [] tArray[i]; - - delete [] tArray; -} - -QStringList QCLuceneStopAnalyzer::englishStopWords() const -{ - QStringList stopWordList; - - const TCHAR** stopWords = lucene::analysis::StopAnalyzer::ENGLISH_STOP_WORDS; - for (qint32 i = 0; stopWords[i] != 0; ++i) - stopWordList.append(TCharToQString(stopWords[i])); - - return stopWordList; -} - - -QCLuceneKeywordAnalyzer::QCLuceneKeywordAnalyzer() - : QCLuceneAnalyzer() -{ - d->analyzer = new lucene::analysis::KeywordAnalyzer(); -} - -QCLuceneKeywordAnalyzer::~QCLuceneKeywordAnalyzer() -{ - // nothing todo -} - - -QCLucenePerFieldAnalyzerWrapper::QCLucenePerFieldAnalyzerWrapper( - QCLuceneAnalyzer *defaultAnalyzer) - : QCLuceneAnalyzer() -{ - d->analyzer = new - lucene::analysis::PerFieldAnalyzerWrapper(defaultAnalyzer->d->analyzer); - - analyzers.append(defaultAnalyzer); - defaultAnalyzer->d->deleteCLuceneAnalyzer = false; -} - -QCLucenePerFieldAnalyzerWrapper::~QCLucenePerFieldAnalyzerWrapper() -{ - qDeleteAll(analyzers); -} - -void QCLucenePerFieldAnalyzerWrapper::addAnalyzer(const QString &fieldName, - QCLuceneAnalyzer *analyzer) -{ - lucene::analysis::PerFieldAnalyzerWrapper *analyzerWrapper = - static_cast (d->analyzer); - - if (analyzerWrapper == 0) - return; - - analyzers.append(analyzer); - analyzer->d->deleteCLuceneAnalyzer = false; - - TCHAR *fName = QStringToTChar(fieldName); - analyzerWrapper->addAnalyzer(fName, analyzer->d->analyzer); - delete [] fName; -} - -QT_END_NAMESPACE diff -Nru qttools-opensource-src-5.7.1/src/assistant/clucene/qanalyzer_p.h qttools-opensource-src-5.9.1/src/assistant/clucene/qanalyzer_p.h --- qttools-opensource-src-5.7.1/src/assistant/clucene/qanalyzer_p.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/clucene/qanalyzer_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,175 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team. -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the QtTools module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QANALYZER_P_H -#define QANALYZER_P_H - -// -// W A R N I N G -// ------------- -// -// This file is not part of the Qt API. It exists for the convenience -// of the help generator tools. This header file may change from version -// to version without notice, or even be removed. -// -// We mean it. -// - -#include "qreader_p.h" -#include "qtokenstream_p.h" -#include "qclucene_global_p.h" - -#include -#include -#include -#include -#include - -CL_NS_DEF(analysis) - class Analyzer; -CL_NS_END -CL_NS_USE(analysis) - -QT_BEGIN_NAMESPACE - -class QCLuceneIndexWriter; -class QCLuceneQueryParser; -class QCLuceneStopAnalyzer; -class QCLuceneSimpleAnalyzer; -class QCLuceneKeywordAnalyzer; -class QCLuceneStandardAnalyzer; -class QCLuceneWhitespaceAnalyzer; -class QCLucenePerFieldAnalyzerWrapper; - -class Q_CLUCENE_EXPORT QCLuceneAnalyzerPrivate : public QSharedData -{ -public: - QCLuceneAnalyzerPrivate(); - QCLuceneAnalyzerPrivate(const QCLuceneAnalyzerPrivate &other); - - ~QCLuceneAnalyzerPrivate(); - - Analyzer *analyzer; - bool deleteCLuceneAnalyzer; - -private: - QCLuceneAnalyzerPrivate &operator=(const QCLuceneAnalyzerPrivate &other); -}; - -class Q_CLUCENE_EXPORT QCLuceneAnalyzer -{ -public: - virtual ~QCLuceneAnalyzer(); - - qint32 positionIncrementGap(const QString &fieldName) const; - QCLuceneTokenStream tokenStream(const QString &fieldName, - const QCLuceneReader &reader) const; - -protected: - friend class QCLuceneIndexWriter; - friend class QCLuceneQueryParser; - friend class QCLuceneStopAnalyzer; - friend class QCLuceneSimpleAnalyzer; - friend class QCLuceneKeywordAnalyzer; - friend class QCLuceneStandardAnalyzer; - friend class QCLuceneWhitespaceAnalyzer; - friend class QCLucenePerFieldAnalyzerWrapper; - QSharedDataPointer d; - -private: - QCLuceneAnalyzer(); -}; - -class Q_CLUCENE_EXPORT QCLuceneStandardAnalyzer : public QCLuceneAnalyzer -{ -public: - QCLuceneStandardAnalyzer(); - QCLuceneStandardAnalyzer(const QStringList &stopWords); - - ~QCLuceneStandardAnalyzer(); -}; - -class Q_CLUCENE_EXPORT QCLuceneWhitespaceAnalyzer : public QCLuceneAnalyzer -{ -public: - QCLuceneWhitespaceAnalyzer(); - ~QCLuceneWhitespaceAnalyzer(); -}; - -class Q_CLUCENE_EXPORT QCLuceneSimpleAnalyzer : public QCLuceneAnalyzer -{ -public: - QCLuceneSimpleAnalyzer(); - ~QCLuceneSimpleAnalyzer(); -}; - -class Q_CLUCENE_EXPORT QCLuceneStopAnalyzer : public QCLuceneAnalyzer -{ -public: - QCLuceneStopAnalyzer(); - QCLuceneStopAnalyzer(const QStringList &stopWords); - - ~QCLuceneStopAnalyzer(); - - QStringList englishStopWords() const; -}; - -class Q_CLUCENE_EXPORT QCLuceneKeywordAnalyzer : public QCLuceneAnalyzer -{ -public: - QCLuceneKeywordAnalyzer(); - ~QCLuceneKeywordAnalyzer(); -}; - -class Q_CLUCENE_EXPORT QCLucenePerFieldAnalyzerWrapper : public QCLuceneAnalyzer -{ -public: - QCLucenePerFieldAnalyzerWrapper(QCLuceneAnalyzer *defaultAnalyzer); - ~QCLucenePerFieldAnalyzerWrapper(); - - void addAnalyzer(const QString &fieldName, QCLuceneAnalyzer *analyzer); - -private: - QList analyzers; -}; - -QT_END_NAMESPACE - -#endif // QANALYZER_P_H diff -Nru qttools-opensource-src-5.7.1/src/assistant/clucene/qclucene-config_p.h qttools-opensource-src-5.9.1/src/assistant/clucene/qclucene-config_p.h --- qttools-opensource-src-5.7.1/src/assistant/clucene/qclucene-config_p.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/clucene/qclucene-config_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,586 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team. -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the QtTools module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QCLUCENE_CONFIG_P_H -#define QCLUCENE_CONFIG_P_H - -// -// W A R N I N G -// ------------- -// -// This file is not part of the Qt API. It exists for the convenience -// of the help generator tools. This header file may change from version -// to version without notice, or even be removed. -// -// We mean it. -// - -#include - -#ifdef Q_OS_ANDROID -# include -#endif - -#ifndef _SRC_CLUCENE_CLUCENE_CONFIG_H -#define _SRC_CLUCENE_CLUCENE_CONFIG_H 1 - -/* -src/CLucene/clucene-config.h. -Generated -automatically -at -end -of -configure. -*/ -/* config.h.tmp. Generated by configure. */ -/* config.h.tmp.in. Generated from configure.ac by autoheader. */ - -/* Disable multithreading */ -/* #undef _CL_DISABLE_MULTITHREADING */ - -/* Define to 1 if you have the header file. */ -#ifndef _CL_HAVE_ALGORITHM -#define _CL_HAVE_ALGORITHM 1 -#endif - -/* Define to 1 if you have the header file. */ -#ifndef _CL_HAVE_CTYPE_H -#define _CL_HAVE_CTYPE_H 1 -#endif - -/* Define to 1 if you have the header file, and it defines `DIR'. - */ -#ifndef _CL_HAVE_DIRENT_H -#define _CL_HAVE_DIRENT_H 1 -#endif - -#if !defined (__MINGW32__) - /* Define to 1 if you have the header file. */ -# ifndef _CL_HAVE_DLFCN_H -# define _CL_HAVE_DLFCN_H 1 -# endif -#endif - -/* Define to 1 if you have the header file. */ -#ifndef _CL_HAVE_ERRNO_H -#define _CL_HAVE_ERRNO_H 1 -#endif - -#if !defined(__SUNPRO_CC) && !defined(__SUNPRO_C) - /* Define to 1 if you have the header file. */ -# ifndef _CL_HAVE_EXT_HASH_MAP -# define _CL_HAVE_EXT_HASH_MAP 1 -# endif - - /* Define to 1 if you have the header file. */ -# ifndef _CL_HAVE_EXT_HASH_SET -# define _CL_HAVE_EXT_HASH_SET 1 -# endif -#endif - -/* Define to 1 if you have the header file. */ -#ifndef _CL_HAVE_FCNTL_H -#define _CL_HAVE_FCNTL_H 1 -#endif - -#if !defined(__xlC__) && !defined(__xlc__) && !defined (__MINGW32__) && \ - !defined(__HP_aCC) && !defined(__SUNPRO_C) && !defined(__SUNPRO_CC) || \ - defined(__SUNPRO_CC) && (__SUNPRO_CC > 0x550) || (defined(__HP_aCC) && defined(__ia64)) - /* Define to 1 if the system has the type `float_t'. */ -# ifndef _CL_HAVE_FLOAT_T -# define _CL_HAVE_FLOAT_T 1 -# endif -#endif - -/* Define to 1 if you have the header file. */ -#ifndef _CL_HAVE_FUNCTIONAL -#define _CL_HAVE_FUNCTIONAL 1 -#endif - -/* Does not support new float byte<->float conversions */ -#ifndef _CL_HAVE_FUNCTIONING_FLOAT_BYTE -#define _CL_HAVE_FUNCTIONING_FLOAT_BYTE -#endif - -/* Define to 1 if you have the `getpagesize' function. */ -#ifndef _CL_HAVE_GETPAGESIZE -#define _CL_HAVE_GETPAGESIZE 1 -#endif - -/* Define to 1 if you have the header file. */ -/* #undef _CL_HAVE_HASH_MAP */ - -/* Define to 1 if you have the header file. */ -/* #undef _CL_HAVE_HASH_SET */ - -/* Define to 1 if the system has the type `intptr_t'. */ -#ifndef _CL_HAVE_INTPTR_T -#define _CL_HAVE_INTPTR_T 1 -#endif - -/* Define to 1 if you have the header file. */ -#ifndef _CL_HAVE_INTTYPES_H -#define _CL_HAVE_INTTYPES_H 1 -#endif - -/* Define to 1 if you have the header file. */ -#ifndef _CL_HAVE_LIST -#define _CL_HAVE_LIST 1 -#endif - -/* Define to 1 if you have the `lltoa' function. */ -/* #undef _CL_HAVE_LLTOA */ - -#if defined(__MINGW32__) - /* Define to 1 if you have the `lltow' function. */ -# ifndef _CL_HAVE_LLTOW -# define _CL_HAVE_LLTOW 1 -# endif -#endif - -#if !defined(__SUNPRO_CC) && !defined(__SUNPRO_C) && !defined(__xlC__) && !defined(__xlc__) - /* Define to 1 if long double works and has more range or precision than double. */ -# ifndef _CL_HAVE_LONG_DOUBLE -# define _CL_HAVE_LONG_DOUBLE 1 -# endif -#endif - -/* Define to 1 if you have the header file. */ -#ifndef _CL_HAVE_MAP -#define _CL_HAVE_MAP 1 -#endif - -/* Define to 1 if you have the header file. */ -#ifndef _CL_HAVE_MATH_H -#define _CL_HAVE_MATH_H 1 -#endif - -/* Define to 1 if you have the header file. */ -#ifndef _CL_HAVE_MEMORY_H -#define _CL_HAVE_MEMORY_H 1 -#endif - -#if !defined(__MINGW32__) && !defined(__HP_aCC) && !defined(__xlC__) && !defined(__xlc__) - /* Define to 1 if you have a working `mmap' system call. */ -# ifndef _CL_HAVE_MMAP -# define _CL_HAVE_MMAP 1 -# endif -#endif - -/* define if the compiler implements namespaces */ -#ifndef _CL_HAVE_NAMESPACES -#define _CL_HAVE_NAMESPACES -#endif - -#if defined(__SUNPRO_CC) || defined(__SUNPRO_C) || defined(__HP_aCC) || defined(__xlC__) || defined(__xlc__) - /* Define if you have the nanosleep function */ -# ifndef _CL_HAVE_NANOSLEEP -# define _CL_HAVE_NANOSLEEP 1 -# endif -#endif - -/* Define to 1 if you have the header file, and it defines `DIR'. */ -/* #undef _CL_HAVE_NDIR_H */ - -/* Does not support new float byte<->float conversions */ -/* #undef _CL_HAVE_NO_FLOAT_BYTE */ - -/* Does not support try/catch blocks */ -/* #undef _CL_HAVE_NO_FUNCTION_TRY_BLOCKS */ - -/* Define to 1 if you have the `printf' function. */ -#ifndef _CL_HAVE_PRINTF -#define _CL_HAVE_PRINTF 1 -#endif - -#if !defined(__MINGW32__) - /* Define if you have POSIX threads libraries and header files. */ -# ifndef _CL_HAVE_PTHREAD -# define _CL_HAVE_PTHREAD 1 -# endif -#endif - -/* Define if recursive pthread mutexes are available */ -/* #undef _CL_HAVE_PTHREAD_MUTEX_RECURSIVE */ - -/* Define to 1 if you have the header file. */ -#ifndef _CL_HAVE_SET -#define _CL_HAVE_SET 1 -#endif - -/* Define to 1 if you have the `snprintf' function. */ -#ifndef _CL_HAVE_SNPRINTF -#define _CL_HAVE_SNPRINTF 1 -#endif - -/* Defined if the snprintf overflow test fails */ -/* #undef _CL_HAVE_SNPRINTF_BUG */ - -/* Define to 1 if you have the `snwprintf' function. */ -/* #undef _CL_HAVE_SNWPRINTF */ - -#if !defined(__HP_aCC) && !defined(__SUNPRO_CC) && !defined(__SUNPRO_C) - /* define if the compiler supports ISO C++ standard library */ -# ifndef _CL_HAVE_STD -# define _CL_HAVE_STD -# endif -#endif - -/* Define to 1 if you have the header file. */ -#ifndef _CL_HAVE_STDARG_H -#define _CL_HAVE_STDARG_H 1 -#endif - -/* x */ -#ifndef _CL_HAVE_STDEXCEPT -#define _CL_HAVE_STDEXCEPT -#endif - -#if !defined(__SUNPRO_CC) && !defined(__SUNPRO_C) && !defined(__HP_aCC) && \ - !defined(__xlC__) && !defined(__xlc__) - /* Define to 1 if you have the header file. */ -# ifndef _CL_HAVE_STDINT_H -# define _CL_HAVE_STDINT_H 1 -# endif -#endif - -#if !defined(__HP_aCC) - /* Define to 1 if you have the header file. */ -# ifndef _CL_HAVE_STDLIB_H -# define _CL_HAVE_STDLIB_H 1 -# endif - - /* define if the compiler supports Standard Template Library */ -# ifndef _CL_HAVE_STL -# define _CL_HAVE_STL -# endif -#endif - -/* Define to 1 if you have the header file. */ -#ifndef _CL_HAVE_STRINGS_H -#define _CL_HAVE_STRINGS_H 1 -#endif - -/* Define to 1 if you have the header file. */ -#ifndef _CL_HAVE_STRING_H -#define _CL_HAVE_STRING_H 1 -#endif - -/* Define to 1 if you have the `strlwr' function. */ -/* #undef _CL_HAVE_STRLWR */ - -/* Define to 1 if you have the `strtoll' function. */ -/* #undef _CL_HAVE_STRTOLL */ - -/* Define to 1 if you have the `strupr' function. */ -/* #undef _CL_HAVE_STRUPR */ - -/* Defined if the swprintf test fails */ -#ifndef _CL_HAVE_SWPRINTF_BUG -#define _CL_HAVE_SWPRINTF_BUG -#endif - -/* Define to 1 if you have the header file, and it defines `DIR'. - */ -/* #undef _CL_HAVE_SYS_DIR_H */ - -/* Define to 1 if you have the header file, and it defines `DIR'. - */ -/* #undef _CL_HAVE_SYS_NDIR_H */ - -/* Define to 1 if you have the header file. */ -#ifndef _CL_HAVE_SYS_STAT_H -#define _CL_HAVE_SYS_STAT_H 1 -#endif - -/* Define to 1 if you have the header file. */ -#if !defined(__OpenBSD__) && !defined(__ANDROID_API__) || __ANDROID_API__ < 21 -# ifndef _CL_HAVE_SYS_TIMEB_H -# define _CL_HAVE_SYS_TIMEB_H 1 -# endif -#endif - -/* Define to 1 if you have the header file. */ -#ifndef _CL_HAVE_SYS_TYPES_H -#define _CL_HAVE_SYS_TYPES_H 1 -#endif - -#if defined(__MINGW32__) - /* Define to 1 if you have the header file. */ - # ifndef _CL_HAVE_TCHAR_H - # define _CL_HAVE_TCHAR_H 1 - # endif -#endif - -#if defined(__MINGW32__) || defined(__SUNPRO_CC) || defined(__SUNPRO_C) - /* Define to 1 if you have the `tell' function. */ -# ifndef _CL_HAVE_TELL -# define _CL_HAVE_TELL 1 -# endif -#endif - -/* Define to 1 if you have the header file. */ -#ifndef _CL_HAVE_UNISTD_H -#define _CL_HAVE_UNISTD_H 1 -#endif - -/* Define to 1 if you have the header file. */ -#ifndef _CL_HAVE_VECTOR -#define _CL_HAVE_VECTOR 1 -#endif - -/* Define to 1 if you have the `vsnwprintf' function. */ -/* #undef _CL_HAVE_VSNWPRINTF */ - -/* Define to 1 if you have the header file. */ -#ifndef _CL_HAVE_WCHAR_H -#define _CL_HAVE_WCHAR_H 1 -#endif - -/* Define to 1 if the system has the type `wchar_t'. */ -#ifndef _CL_HAVE_WCHAR_T -#define _CL_HAVE_WCHAR_T 1 -#endif - -#if !defined(__SUNPRO_CC) && !defined(__SUNPRO_C) && !defined(__MINGW32__) && \ - !defined(Q_OS_MAC) && !defined(__HP_aCC) - /* Define to 1 if you have the `wcscasecmp' function. */ -# ifndef _CL_HAVE_WCSCASECMP -# define _CL_HAVE_WCSCASECMP 1 -# endif -#endif - -/* Define to 1 if you have the `wcscat' function. */ -#ifndef _CL_HAVE_WCSCAT -#define _CL_HAVE_WCSCAT 1 -#endif - -/* Define to 1 if you have the `wcschr' function. */ -#ifndef _CL_HAVE_WCSCHR -#define _CL_HAVE_WCSCHR 1 -#endif - -/* Define to 1 if you have the `wcscmp' function. */ -#ifndef _CL_HAVE_WCSCMP -#define _CL_HAVE_WCSCMP 1 -#endif - -/* Define to 1 if you have the `wcscpy' function. */ -#ifndef _CL_HAVE_WCSCPY -#define _CL_HAVE_WCSCPY 1 -#endif - -/* Define to 1 if you have the `wcscspn' function. */ -#ifndef _CL_HAVE_WCSCSPN -#define _CL_HAVE_WCSCSPN 1 -#endif - -#if defined(__MINGW32__) - /* Define to 1 if you have the `wcsicmp' function. */ -# ifndef _CL_HAVE_WCSICMP -# define _CL_HAVE_WCSICMP 1 -# endif -#endif - -/* Define to 1 if you have the `wcslen' function. */ -#ifndef _CL_HAVE_WCSLEN -#define _CL_HAVE_WCSLEN 1 -#endif - -/* Define to 1 if you have the `wcsncmp' function. */ -#ifndef _CL_HAVE_WCSNCMP -#define _CL_HAVE_WCSNCMP 1 -#endif - -/* Define to 1 if you have the `wcsncpy' function. */ -#ifndef _CL_HAVE_WCSNCPY -#define _CL_HAVE_WCSNCPY 1 -#endif - -/* Define to 1 if you have the `wcsstr' function. */ -#ifndef _CL_HAVE_WCSSTR -#define _CL_HAVE_WCSSTR 1 -#endif - -/* Define to 1 if you have the `wcstod' function. */ -#ifndef _CL_HAVE_WCSTOD -#define _CL_HAVE_WCSTOD 1 -#endif - -#if !defined(__SUNPRO_CC) && !defined(__SUNPRO_C) && !defined(__HP_aCC) && !defined(Q_OS_ANDROID) - /* Define to 1 if you have the `wcstoll' function. */ -# ifndef _CL_HAVE_WCSTOLL -# define _CL_HAVE_WCSTOLL 1 -# endif -#endif - -#if defined(__MINGW32__) - /* Define to 1 if you have the `wcsupr' function. */ -# ifndef _CL_HAVE_WCSUPR -# define _CL_HAVE_WCSUPR 1 -# endif -#endif - -#if defined(__SUNPRO_CC) || defined(__SUNPRO_C) || defined(__HP_aCC) - /* Define to 1 if you have a functioning header file. */ -# ifndef _CL_HAVE_WCTYPE_H -# define _CL_HAVE_WCTYPE_H -# endif -#endif - -/* Define to 1 if you have the `wprintf' function. */ -/* #undef _CL_HAVE_WPRINTF */ - -#if defined(__MINGW32__) - /* Define to 1 if you have the `_filelength' function. */ -# ifndef _CL_HAVE__FILELENGTH -# define _CL_HAVE__FILELENGTH 1 -# endif -#endif - -/* How to define a static const in a class */ -#ifndef LUCENE_STATIC_CONSTANT_SYNTAX -#define LUCENE_STATIC_CONSTANT_SYNTAX 1 -#endif - -/* Name of package */ -#ifndef _CL_PACKAGE -#define _CL_PACKAGE "clucene-core" -#endif - -/* Define to the address where bug reports for this package should be sent. */ -#ifndef _CL_PACKAGE_BUGREPORT -#define _CL_PACKAGE_BUGREPORT "" -#endif - -/* Define to the full name of this package. */ -#ifndef _CL_PACKAGE_NAME -#define _CL_PACKAGE_NAME "" -#endif - -/* Define to the full name and version of this package. */ -#ifndef _CL_PACKAGE_STRING -#define _CL_PACKAGE_STRING "" -#endif - -/* Define to the one symbol short name of this package. */ -#ifndef _CL_PACKAGE_TARNAME -#define _CL_PACKAGE_TARNAME "" -#endif - -/* Define to the version of this package. */ -#ifndef _CL_PACKAGE_VERSION -#define _CL_PACKAGE_VERSION "" -#endif - -/* Define to the necessary symbol if this constant uses a non-standard name on - your system. */ -/* #undef _CL_PTHREAD_CREATE_JOINABLE */ - -/* The size of a `unsigned char', as computed by sizeof. */ -/* #undef _CL_SIZEOF_UNSIGNED_CHAR */ - -/* The size of a `unsigned int', as computed by sizeof. */ -/* #undef _CL_SIZEOF_UNSIGNED_INT */ - -/* The size of a `unsigned long', as computed by sizeof. */ -/* #undef _CL_SIZEOF_UNSIGNED_LONG */ - -/* The size of a `unsigned long long', as computed by sizeof. */ -/* #undef _CL_SIZEOF_UNSIGNED_LONG_LONG */ - -/* The size of a `unsigned __int64', as computed by sizeof. */ -/* #undef _CL_SIZEOF_UNSIGNED___INT64 */ - -/* Define to 1 if the `S_IS*' macros in do not work properly. */ -/* #undef _CL_STAT_MACROS_BROKEN */ - -#if !defined(__HP_aCC) - /* Define to 1 if you have the ANSI C header files. */ -# ifndef _CL_STDC_HEADERS -# define _CL_STDC_HEADERS 1 -# endif - -/* Define to 1 if you can safely include both and . */ -# ifndef _CL_TIME_WITH_SYS_TIME -# define _CL_TIME_WITH_SYS_TIME 1 -# endif -#endif - -/* Version number of package */ -#ifndef _CL_VERSION -#define _CL_VERSION "0.9.17" -#endif - -/* Forces into Ascii mode */ -/* #undef _ASCII */ - -/* Conditional Debugging */ -/* #undef _CL__CND_DEBUG */ - -/* debugging option */ -/* #undef _DEBUG */ - -/* Number of bits in a file offset, on hosts where this is settable. */ -/* #undef _FILE_OFFSET_BITS */ - -/* If not already defined, then define as a datatype of *exactly* 32 bits. */ -/* #undef uint32_t */ - -/* If not already defined, then define as a datatype of *exactly* 64 bits. */ -/* #undef uint64_t */ - -/* If not already defined, then define as a datatype of *exactly* 8 bits. */ -/* #undef uint8_t */ - -/* once: -_SRC_CLUCENE_CLUCENE_CONFIG_H -*/ -#endif - - -#if defined Q_CC_MSVC && _MSC_VER < 1300 -# define LUCENE_NO_STDC_NAMESPACE -#endif - - -#endif // QCLUCENE_CONFIG_P_H - diff -Nru qttools-opensource-src-5.7.1/src/assistant/clucene/qclucene_global_p.h qttools-opensource-src-5.9.1/src/assistant/clucene/qclucene_global_p.h --- qttools-opensource-src-5.7.1/src/assistant/clucene/qclucene_global_p.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/clucene/qclucene_global_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,154 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team. -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the QtTools module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QCLUCENE_GLOBAL_P_H -#define QCLUCENE_GLOBAL_P_H - -// -// W A R N I N G -// ------------- -// -// This file is not part of the Qt API. It exists for the convenience -// of the help generator tools. This header file may change from version -// to version without notice, or even be removed. -// -// We mean it. -// - -#if !defined(_MSC_VER) -# include "qclucene-config_p.h" -#endif - -#include -#include - -#if !defined(_MSC_VER) && !defined(__MINGW32__) && defined(_CL_HAVE_WCHAR_H) && defined(_CL_HAVE_WCHAR_T) -# if !defined(TCHAR) -# define TCHAR wchar_t -# endif -#else -# include -#endif - -QT_BEGIN_NAMESPACE - -#ifdef QT_STATIC -# define Q_CLUCENE_EXPORT -#elif defined(QT_BUILD_CLUCENE_LIB) -# define Q_CLUCENE_EXPORT Q_DECL_EXPORT -#else -# define Q_CLUCENE_EXPORT Q_DECL_IMPORT -#endif - -// -// W A R N I N G -// ------------- -// -// adjustments here, need to be done in -// QTDIR/src/3rdparty/clucene/src/CLucene/StdHeader.h as well -// -#if defined(_LUCENE_DONTIMPLEMENT_NS_MACROS) - -#elif !defined(DISABLE_NAMESPACE) -# ifdef QT_NAMESPACE -# define CL_NS_DEF(sub) namespace QT_NAMESPACE { namespace lucene{ namespace sub{ -# define CL_NS_DEF2(sub,sub2) namespace QT_NAMESPACE { namespace lucene{ namespace sub{ namespace sub2 { - -# define CL_NS_END }}} -# define CL_NS_END2 }}}} - -# define CL_NS_USE(sub) using namespace QT_NAMESPACE::lucene::sub; -# define CL_NS_USE2(sub,sub2) using namespace QT_NAMESPACE::lucene::sub::sub2; - -# define CL_NS(sub) QT_NAMESPACE::lucene::sub -# define CL_NS2(sub,sub2) QT_NAMESPACE::lucene::sub::sub2 -# else -# define CL_NS_DEF(sub) namespace lucene{ namespace sub{ -# define CL_NS_DEF2(sub,sub2) namespace lucene{ namespace sub{ namespace sub2 { - -# define CL_NS_END }} -# define CL_NS_END2 }}} - -# define CL_NS_USE(sub) using namespace lucene::sub; -# define CL_NS_USE2(sub,sub2) using namespace lucene::sub::sub2; - -# define CL_NS(sub) lucene::sub -# define CL_NS2(sub,sub2) lucene::sub::sub2 -# endif -#else -# define CL_NS_DEF(sub) -# define CL_NS_DEF2(sub, sub2) -# define CL_NS_END -# define CL_NS_END2 -# define CL_NS_USE(sub) -# define CL_NS_USE2(sub,sub2) -# define CL_NS(sub) -# define CL_NS2(sub,sub2) -#endif - -namespace QtCLuceneHelpers { - inline TCHAR* QStringToTChar(const QString &str) - { - TCHAR *string = new TCHAR[(str.length() +1) * sizeof(TCHAR)]; - memset(string, 0, (str.length() +1) * sizeof(TCHAR)); - #if defined(UNICODE) || defined(_CL_HAVE_WCHAR_H) && defined(_CL_HAVE_WCHAR_T) - str.toWCharArray(string); - #else - const QByteArray ba = str.toLatin1(); - strcpy(string, ba.constData()); - #endif - return string; - } - - inline QString TCharToQString(const TCHAR *string) - { - #if defined(UNICODE) || defined(_CL_HAVE_WCHAR_H) && defined(_CL_HAVE_WCHAR_T) - QString retValue = QString::fromWCharArray(string); - return retValue; - #else - return QString(QLatin1String(string)); - #endif - } -} -using namespace QtCLuceneHelpers; - -QT_END_NAMESPACE - -#endif // QCLUCENE_GLOBAL_P_H diff -Nru qttools-opensource-src-5.7.1/src/assistant/clucene/qdocument.cpp qttools-opensource-src-5.9.1/src/assistant/clucene/qdocument.cpp --- qttools-opensource-src-5.7.1/src/assistant/clucene/qdocument.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/clucene/qdocument.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,203 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team. -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the QtTools module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qdocument_p.h" -#include "qreader_p.h" -#include "qclucene_global_p.h" - -#include -#include -#include - -QT_BEGIN_NAMESPACE - -QCLuceneDocumentPrivate::QCLuceneDocumentPrivate() - : QSharedData() -{ - document = 0; - deleteCLuceneDocument = true; -} - -QCLuceneDocumentPrivate::QCLuceneDocumentPrivate(const QCLuceneDocumentPrivate &other) - : QSharedData() -{ - document = _CL_POINTER(other.document); - deleteCLuceneDocument = other.deleteCLuceneDocument; -} - -QCLuceneDocumentPrivate::~QCLuceneDocumentPrivate() -{ - if (deleteCLuceneDocument) - _CLDECDELETE(document); -} - - -QCLuceneDocument::QCLuceneDocument() - : d(new QCLuceneDocumentPrivate()) -{ - // nothing todo - d->document = new lucene::document::Document(); -} - -QCLuceneDocument::~QCLuceneDocument() -{ - qDeleteAll(fieldList); - fieldList.clear(); -} - -void QCLuceneDocument::add(QCLuceneField *field) -{ - field->d->deleteCLuceneField = false; - d->document->add(*field->d->field); - fieldList.append(field); -} - -QCLuceneField* QCLuceneDocument::getField(const QString &name) const -{ - QCLuceneField* field = 0; - foreach (field, fieldList) { - if (field->name() == name && field->d->field != 0) - return field; - } - - field = 0; - TCHAR *fieldName = QStringToTChar(name); - lucene::document::Field *f = d->document->getField(fieldName); - if (f) { - field = new QCLuceneField(); - field->d->field = f; - fieldList.append(field); - field->d->deleteCLuceneField = false; - - lucene::util::Reader *r = f->readerValue(); - if (r) { - field->reader->d->reader = r; - field->reader->d->deleteCLuceneReader = false; - } - } - delete [] fieldName; - - return field; -} - -QString QCLuceneDocument::get(const QString &name) const -{ - QCLuceneField* field = getField(name); - if (field) - return field->stringValue(); - - return QString(); -} - -QString QCLuceneDocument::toString() const -{ - return TCharToQString(d->document->toString()); -} - -void QCLuceneDocument::setBoost(qreal boost) -{ - d->document->setBoost(qreal(boost)); -} - -qreal QCLuceneDocument::getBoost() const -{ - return qreal(d->document->getBoost()); -} - -void QCLuceneDocument::removeField(const QString &name) -{ - TCHAR *fieldName = QStringToTChar(name); - d->document->removeField(fieldName); - delete [] fieldName; - - QList tmp; - lucene::document::DocumentFieldEnumeration *dfe = d->document->fields(); - while (dfe->hasMoreElements()) { - const lucene::document::Field* f = dfe->nextElement(); - foreach (QCLuceneField* field, fieldList) { - if (f == field->d->field) { - tmp.append(field); - break; - } - } - } - _CLDELETE(dfe); - fieldList = tmp; -} - -void QCLuceneDocument::removeFields(const QString &name) -{ - for (qint32 i = fieldList.count() -1; i >= 0; --i) { - QCLuceneField* field = fieldList.at(i); - if (field->name() == name) - delete fieldList.takeAt(i); - } - - TCHAR *fieldName = QStringToTChar(name); - d->document->removeFields(fieldName); - delete [] fieldName; -} - -QStringList QCLuceneDocument::getValues(const QString &name) const -{ - TCHAR *fieldName = QStringToTChar(name); - TCHAR **values = d->document->getValues(fieldName); - - QStringList retValue; - if (values) { - for (qint32 i = 0; 0 != values[i]; ++i) { - retValue.append(TCharToQString((const TCHAR*)values[i])); - delete [] values[i]; values[i] = 0; - } - delete values; - } - - delete [] fieldName; - return retValue; -} - -void QCLuceneDocument::clear() -{ - d->document->clear(); - qDeleteAll(fieldList); - fieldList.clear(); -} - -QT_END_NAMESPACE diff -Nru qttools-opensource-src-5.7.1/src/assistant/clucene/qdocument_p.h qttools-opensource-src-5.9.1/src/assistant/clucene/qdocument_p.h --- qttools-opensource-src-5.7.1/src/assistant/clucene/qdocument_p.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/clucene/qdocument_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,123 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team. -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the QtTools module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QDOCUMENT_P_H -#define QDOCUMENT_P_H - -// -// W A R N I N G -// ------------- -// -// This file is not part of the Qt API. It exists for the convenience -// of the help generator tools. This header file may change from version -// to version without notice, or even be removed. -// -// We mean it. -// - -#include "qfield_p.h" -#include "qclucene_global_p.h" - -#include -#include -#include -#include -#include - -CL_NS_DEF(document) - class Document; -CL_NS_END -CL_NS_USE(document) - -QT_BEGIN_NAMESPACE - -class QCLuceneHits; -class QCLuceneIndexReader; -class QCLuceneIndexWriter; -class QCLuceneIndexSearcher; -class QCLuceneMultiSearcher; - -class Q_CLUCENE_EXPORT QCLuceneDocumentPrivate : public QSharedData -{ -public: - QCLuceneDocumentPrivate(); - QCLuceneDocumentPrivate(const QCLuceneDocumentPrivate &other); - - ~QCLuceneDocumentPrivate(); - - Document *document; - bool deleteCLuceneDocument; - -private: - QCLuceneDocumentPrivate &operator=(const QCLuceneDocumentPrivate &other); -}; - -class Q_CLUCENE_EXPORT QCLuceneDocument -{ -public: - QCLuceneDocument(); - ~QCLuceneDocument(); - - void add(QCLuceneField *field); - QCLuceneField* getField(const QString &name) const; - QString get(const QString &name) const; - QString toString() const; - void setBoost(qreal boost); - qreal getBoost() const; - void removeField(const QString &name); - void removeFields(const QString &name); - QStringList getValues(const QString &name) const; - void clear(); - -protected: - friend class QCLuceneHits; - friend class QCLuceneIndexReader; - friend class QCLuceneIndexWriter; - friend class QCLuceneIndexSearcher; - friend class QCLuceneMultiSearcher; - QSharedDataPointer d; - -private: - mutable QList fieldList; -}; - -QT_END_NAMESPACE - -#endif // QDOCUMENT_P_H diff -Nru qttools-opensource-src-5.7.1/src/assistant/clucene/qfield.cpp qttools-opensource-src-5.9.1/src/assistant/clucene/qfield.cpp --- qttools-opensource-src-5.7.1/src/assistant/clucene/qfield.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/clucene/qfield.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,194 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team. -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the QtTools module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qfield_p.h" -#include "qreader_p.h" -#include "qclucene_global_p.h" - -#include -#include - -QT_BEGIN_NAMESPACE - -QCLuceneFieldPrivate::QCLuceneFieldPrivate() - : QSharedData() -{ - field = 0; - deleteCLuceneField = true; -} - -QCLuceneFieldPrivate::QCLuceneFieldPrivate(const QCLuceneFieldPrivate &other) - : QSharedData() -{ - field = _CL_POINTER(other.field); - deleteCLuceneField = other.deleteCLuceneField; -} - -QCLuceneFieldPrivate::~QCLuceneFieldPrivate() -{ - if (deleteCLuceneField) - _CLDECDELETE(field); -} - - -QCLuceneField::QCLuceneField() - : d(new QCLuceneFieldPrivate()) - , reader(0) -{ - // nothing todo -} - -QCLuceneField::QCLuceneField(const QString &name, const QString &value, int configs) - : d(new QCLuceneFieldPrivate()) - , reader(0) -{ - TCHAR* fieldName = QStringToTChar(name); - TCHAR* fieldValue = QStringToTChar(value); - - d->field = new lucene::document::Field(fieldName, fieldValue, configs); - - delete [] fieldName; - delete [] fieldValue; -} - -QCLuceneField::QCLuceneField(const QString &name, QCLuceneReader *reader, - int configs) - : d(new QCLuceneFieldPrivate()) - , reader(reader) -{ - TCHAR* fieldName = QStringToTChar(name); - - reader->d->deleteCLuceneReader = false; // clucene takes ownership - d->field = new lucene::document::Field(fieldName, reader->d->reader, configs); - - delete [] fieldName; -} - -QCLuceneField::~QCLuceneField() -{ - delete reader; -} - -QString QCLuceneField::name() const -{ - return TCharToQString(d->field->name()); -} - -QString QCLuceneField::stringValue() const -{ - return TCharToQString((const TCHAR*)d->field->stringValue()); -} - -QCLuceneReader* QCLuceneField::readerValue() const -{ - return reader; -} - -bool QCLuceneField::isStored() const -{ - return d->field->isStored(); -} - -bool QCLuceneField::isIndexed() const -{ - return d->field->isIndexed(); -} - -bool QCLuceneField::isTokenized() const -{ - return d->field->isTokenized(); -} - -bool QCLuceneField::isCompressed() const -{ - return d->field->isCompressed(); -} - -void QCLuceneField::setConfig(int termVector) -{ - d->field->setConfig(termVector); -} - -bool QCLuceneField::isTermVectorStored() const -{ - return d->field->isTermVectorStored(); -} - -bool QCLuceneField::isStoreOffsetWithTermVector() const -{ - return d->field->isStoreOffsetWithTermVector(); -} - -bool QCLuceneField::isStorePositionWithTermVector() const -{ - return d->field->isStorePositionWithTermVector(); -} - -qreal QCLuceneField::getBoost() const -{ - return qreal(d->field->getBoost()); -} - -void QCLuceneField::setBoost(qreal value) -{ - d->field->setBoost(qreal(value)); -} - -bool QCLuceneField::isBinary() const -{ - return d->field->isBinary(); -} - -bool QCLuceneField::getOmitNorms() const -{ - return d->field->getOmitNorms(); -} - -void QCLuceneField::setOmitNorms(bool omitNorms) -{ - d->field->setOmitNorms(omitNorms); -} - -QString QCLuceneField::toString() const -{ - return TCharToQString(d->field->toString()); -} - -QT_END_NAMESPACE diff -Nru qttools-opensource-src-5.7.1/src/assistant/clucene/qfield_p.h qttools-opensource-src-5.9.1/src/assistant/clucene/qfield_p.h --- qttools-opensource-src-5.7.1/src/assistant/clucene/qfield_p.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/clucene/qfield_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,142 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team. -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the QtTools module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QFIELD_P_H -#define QFIELD_P_H - -// -// W A R N I N G -// ------------- -// -// This file is not part of the Qt API. It exists for the convenience -// of the help generator tools. This header file may change from version -// to version without notice, or even be removed. -// -// We mean it. -// - -#include "qclucene_global_p.h" - -#include -#include -#include - -CL_NS_DEF(document) - class Field; -CL_NS_END -CL_NS_USE(document) - -QT_BEGIN_NAMESPACE - -class QCLuceneReader; -class QCLuceneDocument; - -class Q_CLUCENE_EXPORT QCLuceneFieldPrivate : public QSharedData -{ -public: - QCLuceneFieldPrivate(); - QCLuceneFieldPrivate(const QCLuceneFieldPrivate &other); - - ~QCLuceneFieldPrivate(); - - Field *field; - bool deleteCLuceneField; - -private: - QCLuceneFieldPrivate &operator=(const QCLuceneFieldPrivate &other); -}; - -class Q_CLUCENE_EXPORT QCLuceneField -{ -public: - enum Store { - STORE_YES = 1, - STORE_NO = 2, - STORE_COMPRESS = 4 - }; - - enum Index { - INDEX_NO = 16, - INDEX_TOKENIZED = 32, - INDEX_UNTOKENIZED = 64, - INDEX_NONORMS = 128 - }; - - enum TermVector { - TERMVECTOR_NO = 256, - TERMVECTOR_YES = 512, - TERMVECTOR_WITH_POSITIONS = 1024, - TERMVECTOR_WITH_OFFSETS = 2048 - }; - - QCLuceneField(const QString &name, const QString &value, int configs); - QCLuceneField(const QString &name, QCLuceneReader *reader, int configs); - ~QCLuceneField(); - - QString name() const; - QString stringValue() const; - QCLuceneReader* readerValue() const; - bool isStored() const; - bool isIndexed() const; - bool isTokenized() const; - bool isCompressed() const; - void setConfig(int termVector); - bool isTermVectorStored() const; - bool isStoreOffsetWithTermVector() const; - bool isStorePositionWithTermVector() const; - qreal getBoost() const; - void setBoost(qreal value); - bool isBinary() const; - bool getOmitNorms() const; - void setOmitNorms(bool omitNorms); - QString toString() const; - -protected: - QCLuceneField(); - friend class QCLuceneDocument; - QSharedDataPointer d; - -private: - QCLuceneReader* reader; -}; - -QT_END_NAMESPACE - -#endif // QFIELD_P_H diff -Nru qttools-opensource-src-5.7.1/src/assistant/clucene/qfilter.cpp qttools-opensource-src-5.9.1/src/assistant/clucene/qfilter.cpp --- qttools-opensource-src-5.7.1/src/assistant/clucene/qfilter.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/clucene/qfilter.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,80 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team. -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the QtTools module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qfilter_p.h" - -#include -#include - -QT_BEGIN_NAMESPACE - -QCLuceneFilterPrivate::QCLuceneFilterPrivate() - : QSharedData() -{ - filter = 0; - deleteCLuceneFilter = true; -} - -QCLuceneFilterPrivate::QCLuceneFilterPrivate(const QCLuceneFilterPrivate &other) - : QSharedData() -{ - filter = _CL_POINTER(other.filter); - deleteCLuceneFilter = other.deleteCLuceneFilter; -} - -QCLuceneFilterPrivate::~QCLuceneFilterPrivate () -{ - if (deleteCLuceneFilter) - _CLDECDELETE(filter); -} - - -QCLuceneFilter::QCLuceneFilter() - : d(new QCLuceneFilterPrivate()) -{ - // nothing todo -} - -QCLuceneFilter::~QCLuceneFilter() -{ - // nothing todo -} - -QT_END_NAMESPACE diff -Nru qttools-opensource-src-5.7.1/src/assistant/clucene/qfilter_p.h qttools-opensource-src-5.9.1/src/assistant/clucene/qfilter_p.h --- qttools-opensource-src-5.7.1/src/assistant/clucene/qfilter_p.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/clucene/qfilter_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,98 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team. -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the QtTools module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QFilter_P_H -#define QFilter_P_H - -// -// W A R N I N G -// ------------- -// -// This file is not part of the Qt API. It exists for the convenience -// of the help generator tools. This header file may change from version -// to version without notice, or even be removed. -// -// We mean it. -// - -#include "qclucene_global_p.h" - -#include -#include - -CL_NS_DEF(search) - class Filter; -CL_NS_END -CL_NS_USE(search) - -QT_BEGIN_NAMESPACE - -class QCLuceneHits; -class QCLuceneSearcher; - -class Q_CLUCENE_EXPORT QCLuceneFilterPrivate : public QSharedData -{ -public: - QCLuceneFilterPrivate(); - QCLuceneFilterPrivate(const QCLuceneFilterPrivate &other); - - ~QCLuceneFilterPrivate (); - - Filter *filter; - bool deleteCLuceneFilter; - -private: - QCLuceneFilterPrivate &operator=(const QCLuceneFilterPrivate &other); -}; - -class Q_CLUCENE_EXPORT QCLuceneFilter -{ - QCLuceneFilter(); - virtual ~QCLuceneFilter(); - -protected: - friend class QCLuceneHits; - friend class QCLuceneSearcher; - QSharedDataPointer d; -}; - -QT_END_NAMESPACE - -#endif // QFilter_P_H diff -Nru qttools-opensource-src-5.7.1/src/assistant/clucene/qhits.cpp qttools-opensource-src-5.9.1/src/assistant/clucene/qhits.cpp --- qttools-opensource-src-5.7.1/src/assistant/clucene/qhits.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/clucene/qhits.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,117 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team. -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the QtTools module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qhits_p.h" -#include "qsearchable_p.h" - -#include -#include - -QT_BEGIN_NAMESPACE - -QCLuceneHitsPrivate::QCLuceneHitsPrivate() - : QSharedData() -{ - hits = 0; - deleteCLuceneHits = true; -} - -QCLuceneHitsPrivate::QCLuceneHitsPrivate(const QCLuceneHitsPrivate &other) - : QSharedData() -{ - hits = _CL_POINTER(other.hits); - deleteCLuceneHits = other.deleteCLuceneHits; -} - -QCLuceneHitsPrivate::~QCLuceneHitsPrivate() -{ - if (deleteCLuceneHits) - _CLDECDELETE(hits); -} - - -QCLuceneHits::QCLuceneHits(const QCLuceneSearcher &searcher, - const QCLuceneQuery &query, const QCLuceneFilter &filter) - : d(new QCLuceneHitsPrivate()) -{ - d->hits = new lucene::search::Hits(searcher.d->searchable, query.d->query, - filter.d->filter); -} - -QCLuceneHits::QCLuceneHits(const QCLuceneSearcher &searcher, const QCLuceneQuery &query, - const QCLuceneFilter &filter, const QCLuceneSort &sort) - : d(new QCLuceneHitsPrivate()) -{ - d->hits = new lucene::search::Hits(searcher.d->searchable, query.d->query, - filter.d->filter, sort.d->sort); -} - -QCLuceneHits::~QCLuceneHits() -{ - // nothing todo -} - -QCLuceneDocument QCLuceneHits::document(const qint32 index) -{ - // TODO: check this - QCLuceneDocument document; - document.d->deleteCLuceneDocument = false; - lucene::document::Document &doc = d->hits->doc(int32_t(index)); - document.d->document = &doc; - - return document; -} - -qint32 QCLuceneHits::length() const -{ - return qint32(d->hits->length()); -} - -qint32 QCLuceneHits::id(const qint32 index) -{ - return qint32(d->hits->id(int32_t(index))); -} - -qreal QCLuceneHits::score(const qint32 index) -{ - return qreal(d->hits->score(int32_t(index))); -} - -QT_END_NAMESPACE diff -Nru qttools-opensource-src-5.7.1/src/assistant/clucene/qhits_p.h qttools-opensource-src-5.9.1/src/assistant/clucene/qhits_p.h --- qttools-opensource-src-5.7.1/src/assistant/clucene/qhits_p.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/clucene/qhits_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,109 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team. -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the QtTools module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QHITS_P_H -#define QHITS_P_H - -// -// W A R N I N G -// ------------- -// -// This file is not part of the Qt API. It exists for the convenience -// of the help generator tools. This header file may change from version -// to version without notice, or even be removed. -// -// We mean it. -// - -#include "qsort_p.h" -#include "qquery_p.h" -#include "qfilter_p.h" -#include "qdocument_p.h" -#include "qclucene_global_p.h" - -#include -#include - -CL_NS_DEF(search) - class Hits; -CL_NS_END -CL_NS_USE(search) - -QT_BEGIN_NAMESPACE - -class QCLuceneSearcher; - -class Q_CLUCENE_EXPORT QCLuceneHitsPrivate : public QSharedData -{ -public: - QCLuceneHitsPrivate(); - QCLuceneHitsPrivate(const QCLuceneHitsPrivate &other); - - ~QCLuceneHitsPrivate(); - - Hits *hits; - bool deleteCLuceneHits; - -private: - QCLuceneHitsPrivate &operator=(const QCLuceneHitsPrivate &other); -}; - -class Q_CLUCENE_EXPORT QCLuceneHits -{ -public: - QCLuceneHits(const QCLuceneSearcher &searcher, const QCLuceneQuery &query, - const QCLuceneFilter &filter); - QCLuceneHits(const QCLuceneSearcher &searcher, const QCLuceneQuery &query, - const QCLuceneFilter &filter, const QCLuceneSort &sort); - virtual ~QCLuceneHits(); - - QCLuceneDocument document(const qint32 index); - qint32 length() const; - qint32 id(const qint32 index); - qreal score(const qint32 index); - -protected: - friend class QCLuceneSearcher; - QSharedDataPointer d; -}; - -QT_END_NAMESPACE - -#endif // QHITS_P_H diff -Nru qttools-opensource-src-5.7.1/src/assistant/clucene/qindexreader.cpp qttools-opensource-src-5.9.1/src/assistant/clucene/qindexreader.cpp --- qttools-opensource-src-5.7.1/src/assistant/clucene/qindexreader.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/clucene/qindexreader.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,192 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team. -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the QtTools module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qindexreader_p.h" -#include "qclucene_global_p.h" - -#include -#include - -QT_BEGIN_NAMESPACE - -QCLuceneIndexReaderPrivate::QCLuceneIndexReaderPrivate() - : QSharedData() -{ - reader = 0; - deleteCLuceneIndexReader = true; -} - -QCLuceneIndexReaderPrivate::QCLuceneIndexReaderPrivate(const QCLuceneIndexReaderPrivate &other) - : QSharedData() -{ - reader = _CL_POINTER(other.reader); - deleteCLuceneIndexReader = other.deleteCLuceneIndexReader; -} - -QCLuceneIndexReaderPrivate::~QCLuceneIndexReaderPrivate() -{ - if (deleteCLuceneIndexReader) - _CLDECDELETE(reader); -} - - -QCLuceneIndexReader::QCLuceneIndexReader() - : d(new QCLuceneIndexReaderPrivate()) -{ - // nothing todo, private -} - -QCLuceneIndexReader::~QCLuceneIndexReader() -{ - // nothing todo -} - -bool QCLuceneIndexReader::isLuceneFile(const QString &filename) -{ - using namespace lucene::index; - - return IndexReader::isLuceneFile(filename); -} - -bool QCLuceneIndexReader::indexExists(const QString &directory) -{ - using namespace lucene::index; - return IndexReader::indexExists(directory); -} - -QCLuceneIndexReader QCLuceneIndexReader::open(const QString &path) -{ - using namespace lucene::index; - - QCLuceneIndexReader indexReader; - indexReader.d->reader = IndexReader::open(path); - - return indexReader; -} - -void QCLuceneIndexReader::unlock(const QString &path) -{ - using namespace lucene::index; - IndexReader::unlock(path); -} - -bool QCLuceneIndexReader::isLocked(const QString &directory) -{ - using namespace lucene::index; - return IndexReader::isLocked(directory); -} - -quint64 QCLuceneIndexReader::lastModified(const QString &directory) -{ - using namespace lucene::index; - return quint64(IndexReader::lastModified(directory)); -} - -qint64 QCLuceneIndexReader::getCurrentVersion(const QString &directory) -{ - using namespace lucene::index; - return qint64(IndexReader::getCurrentVersion(directory)); -} - -void QCLuceneIndexReader::close() -{ - d->reader->close(); -} - -bool QCLuceneIndexReader::isCurrent() -{ - return d->reader->isCurrent(); -} - -void QCLuceneIndexReader::undeleteAll() -{ - d->reader->undeleteAll(); -} - -qint64 QCLuceneIndexReader::getVersion() -{ - return qint64(d->reader->getVersion()); -} - -void QCLuceneIndexReader::deleteDocument(qint32 docNum) -{ - d->reader->deleteDocument(int32_t(docNum)); -} - -bool QCLuceneIndexReader::hasNorms(const QString &field) -{ - TCHAR *fieldName = QStringToTChar(field); - bool retValue = d->reader->hasNorms(fieldName); - delete [] fieldName; - - return retValue; -} - -qint32 QCLuceneIndexReader::deleteDocuments(const QCLuceneTerm &term) -{ - return d->reader->deleteDocuments(term.d->term); -} - -bool QCLuceneIndexReader::document(qint32 index, QCLuceneDocument &document) -{ - if (!document.d->document) - document.d->document = new lucene::document::Document(); - - if (d->reader->document(int32_t(index), document.d->document)) - return true; - - return false; -} - -void QCLuceneIndexReader::setNorm(qint32 doc, const QString &field, qreal value) -{ - TCHAR *fieldName = QStringToTChar(field); - d->reader->setNorm(int32_t(doc), fieldName, qreal(value)); - delete [] fieldName; -} - -void QCLuceneIndexReader::setNorm(qint32 doc, const QString &field, quint8 value) -{ - TCHAR *fieldName = QStringToTChar(field); - d->reader->setNorm(int32_t(doc), fieldName, uint8_t(value)); - delete [] fieldName; -} - -QT_END_NAMESPACE diff -Nru qttools-opensource-src-5.7.1/src/assistant/clucene/qindexreader_p.h qttools-opensource-src-5.9.1/src/assistant/clucene/qindexreader_p.h --- qttools-opensource-src-5.7.1/src/assistant/clucene/qindexreader_p.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/clucene/qindexreader_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,138 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team. -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the QtTools module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QINDEXREADER_P_H -#define QINDEXREADER_P_H - -// -// W A R N I N G -// ------------- -// -// This file is not part of the Qt API. It exists for the convenience -// of the help generator tools. This header file may change from version -// to version without notice, or even be removed. -// -// We mean it. -// - -#include "qterm_p.h" -#include "qdocument_p.h" -#include "qclucene_global_p.h" - -#include -#include -#include -#include - -CL_NS_DEF(index) - class IndexReader; -CL_NS_END -CL_NS_USE(index) - -QT_BEGIN_NAMESPACE - -class QCLuceneIndexWriter; -class QCLuceneIndexSearcher; - -class Q_CLUCENE_EXPORT QCLuceneIndexReaderPrivate : public QSharedData -{ -public: - QCLuceneIndexReaderPrivate(); - QCLuceneIndexReaderPrivate(const QCLuceneIndexReaderPrivate &other); - - ~QCLuceneIndexReaderPrivate(); - - IndexReader *reader; - bool deleteCLuceneIndexReader; - -private: - QCLuceneIndexReaderPrivate &operator=(const QCLuceneIndexReaderPrivate &other); -}; - -class Q_CLUCENE_EXPORT QCLuceneIndexReader -{ -public: - enum FieldOption { - ALL = 1, - INDEXED = 2, - UNINDEXED = 4, - INDEXED_WITH_TERMVECTOR = 8, - INDEXED_NO_TERMVECTOR = 16, - TERMVECTOR = 32, - TERMVECTOR_WITH_POSITION = 64, - TERMVECTOR_WITH_OFFSET = 128, - TERMVECTOR_WITH_POSITION_OFFSET = 256 - }; - - virtual ~QCLuceneIndexReader(); - - static bool isLuceneFile(const QString &filename); - static bool indexExists(const QString &directory); - static QCLuceneIndexReader open(const QString &path); - - static void unlock(const QString &path); - static bool isLocked(const QString &directory); - - static quint64 lastModified(const QString &directory); - static qint64 getCurrentVersion(const QString &directory); - - void close(); - bool isCurrent(); - void undeleteAll(); - qint64 getVersion(); - void deleteDocument(qint32 docNum); - bool hasNorms(const QString &field); - qint32 deleteDocuments(const QCLuceneTerm &term); - bool document(qint32 index, QCLuceneDocument &document); - void setNorm(qint32 doc, const QString &field, qreal value); - void setNorm(qint32 doc, const QString &field, quint8 value); - -protected: - friend class QCLuceneIndexWriter; - friend class QCLuceneIndexSearcher; - QSharedDataPointer d; - -private: - QCLuceneIndexReader(); -}; - -QT_END_NAMESPACE - -#endif // QINDEXREADER_P_H diff -Nru qttools-opensource-src-5.7.1/src/assistant/clucene/qindexwriter.cpp qttools-opensource-src-5.9.1/src/assistant/clucene/qindexwriter.cpp --- qttools-opensource-src-5.7.1/src/assistant/clucene/qindexwriter.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/clucene/qindexwriter.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,214 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team. -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the QtTools module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qindexwriter_p.h" -#include "qindexreader_p.h" - -#include -#include - -QT_BEGIN_NAMESPACE - -QCLuceneIndexWriterPrivate::QCLuceneIndexWriterPrivate() - : QSharedData() -{ - writer = 0; - deleteCLuceneIndexWriter = true; -} - -QCLuceneIndexWriterPrivate::QCLuceneIndexWriterPrivate(const QCLuceneIndexWriterPrivate &other) - : QSharedData() -{ - writer = _CL_POINTER(other.writer); - deleteCLuceneIndexWriter = other.deleteCLuceneIndexWriter; -} - -QCLuceneIndexWriterPrivate::~QCLuceneIndexWriterPrivate() -{ - if (deleteCLuceneIndexWriter) - _CLDECDELETE(writer); -} - - -QCLuceneIndexWriter::QCLuceneIndexWriter(const QString &path, - QCLuceneAnalyzer &analyzer, - bool create, bool closeDir) - : d(new QCLuceneIndexWriterPrivate()) - , analyzer(analyzer) -{ - d->writer = new lucene::index::IndexWriter(path, - analyzer.d->analyzer, create, closeDir); -} - -QCLuceneIndexWriter::~QCLuceneIndexWriter() -{ - // nothing todo -} - -void QCLuceneIndexWriter::close() -{ - d->writer->close(); -} - -void QCLuceneIndexWriter::optimize() -{ - d->writer->optimize(); -} - -qint32 QCLuceneIndexWriter::docCount() -{ - return qint32(d->writer->docCount()); -} - -QCLuceneAnalyzer QCLuceneIndexWriter::getAnalyzer() -{ - return analyzer; -} - -void QCLuceneIndexWriter::addIndexes(const QList &readers) -{ - using namespace lucene::index; - IndexReader** readerArray = new IndexReader*[readers.count()]; - - for (int i = 0; i < readers.count(); ++i) - readerArray[i] = (readers.at(i))->d->reader; - - d->writer->addIndexes(readerArray); - delete [] readerArray; -} - -void QCLuceneIndexWriter::addDocument(QCLuceneDocument &doc, - QCLuceneAnalyzer &analyzer) -{ - if (doc.d->document) - d->writer->addDocument(doc.d->document, analyzer.d->analyzer); -} - -qint32 QCLuceneIndexWriter::getMaxFieldLength() const -{ - return qint32(d->writer->getMaxFieldLength()); -} - -void QCLuceneIndexWriter::setMaxFieldLength(qint32 value) -{ - d->writer->setMaxFieldLength(int32_t(value)); -} - -qint32 QCLuceneIndexWriter::getMaxBufferedDocs() const -{ - return qint32(d->writer->getMaxBufferedDocs()); -} - -void QCLuceneIndexWriter::setMaxBufferedDocs(qint32 value) -{ - d->writer->setMaxBufferedDocs(int32_t(value)); -} - -qint64 QCLuceneIndexWriter::getWriteLockTimeout() const -{ - return qint64(d->writer->getWriteLockTimeout()); -} - -void QCLuceneIndexWriter::setWriteLockTimeout(qint64 writeLockTimeout) -{ - d->writer->setWriteLockTimeout(int64_t(writeLockTimeout)); -} - -qint64 QCLuceneIndexWriter::getCommitLockTimeout() const -{ - return qint64(d->writer->getCommitLockTimeout()); -} - -void QCLuceneIndexWriter::setCommitLockTimeout(qint64 commitLockTimeout) -{ - d->writer->setCommitLockTimeout(int64_t(commitLockTimeout)); -} - -qint32 QCLuceneIndexWriter::getMergeFactor() const -{ - return qint32(d->writer->getMergeFactor()); -} - -void QCLuceneIndexWriter::setMergeFactor(qint32 value) -{ - d->writer->setMergeFactor(int32_t(value)); -} - -qint32 QCLuceneIndexWriter::getTermIndexInterval() const -{ - return qint32(d->writer->getTermIndexInterval()); -} - -void QCLuceneIndexWriter::setTermIndexInterval(qint32 interval) -{ - d->writer->setTermIndexInterval(int32_t(interval)); -} - -qint32 QCLuceneIndexWriter::getMinMergeDocs() const -{ - return qint32(d->writer->getMinMergeDocs()); -} - -void QCLuceneIndexWriter::setMinMergeDocs(qint32 value) -{ - d->writer->setMinMergeDocs(int32_t(value)); -} - -qint32 QCLuceneIndexWriter::getMaxMergeDocs() const -{ - return qint32(d->writer->getMaxMergeDocs()); -} - -void QCLuceneIndexWriter::setMaxMergeDocs(qint32 value) -{ - d->writer->setMaxMergeDocs(int32_t(value)); -} - -bool QCLuceneIndexWriter::getUseCompoundFile() const -{ - return d->writer->getUseCompoundFile(); -} - -void QCLuceneIndexWriter::setUseCompoundFile(bool value) -{ - d->writer->setUseCompoundFile(value); -} - -QT_END_NAMESPACE diff -Nru qttools-opensource-src-5.7.1/src/assistant/clucene/qindexwriter_p.h qttools-opensource-src-5.9.1/src/assistant/clucene/qindexwriter_p.h --- qttools-opensource-src-5.7.1/src/assistant/clucene/qindexwriter_p.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/clucene/qindexwriter_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,147 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team. -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the QtTools module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QINDEXWRITER_P_H -#define QINDEXWRITER_P_H - -// -// W A R N I N G -// ------------- -// -// This file is not part of the Qt API. It exists for the convenience -// of the help generator tools. This header file may change from version -// to version without notice, or even be removed. -// -// We mean it. -// - -#include "qanalyzer_p.h" -#include "qdocument_p.h" -#include "qclucene_global_p.h" - -#include -#include -#include - -CL_NS_DEF(index) - class IndexWriter; -CL_NS_END -CL_NS_USE(index) - -QT_BEGIN_NAMESPACE - -class QCLuceneIndexReader; - -class Q_CLUCENE_EXPORT QCLuceneIndexWriterPrivate : public QSharedData -{ -public: - QCLuceneIndexWriterPrivate(); - QCLuceneIndexWriterPrivate(const QCLuceneIndexWriterPrivate &other); - - ~QCLuceneIndexWriterPrivate(); - - IndexWriter *writer; - bool deleteCLuceneIndexWriter; - -private: - QCLuceneIndexWriterPrivate &operator=(const QCLuceneIndexWriterPrivate &other); -}; - -class Q_CLUCENE_EXPORT QCLuceneIndexWriter -{ -public: - enum { - DEFAULT_MERGE_FACTOR = 10, - COMMIT_LOCK_TIMEOUT = 10000, - DEFAULT_MAX_BUFFERED_DOCS = 10, - DEFAULT_MAX_FIELD_LENGTH = 10000, - DEFAULT_TERM_INDEX_INTERVAL = 128, - DEFAULT_MAX_MERGE_DOCS = 0x7FFFFFFFL - }; - - QCLuceneIndexWriter(const QString &path, QCLuceneAnalyzer &analyzer, - bool create, bool closeDir = true); - virtual ~QCLuceneIndexWriter(); - - void close(); - void optimize(); - qint32 docCount(); - QCLuceneAnalyzer getAnalyzer(); - - void addIndexes(const QList &readers); - void addDocument(QCLuceneDocument &doc, QCLuceneAnalyzer &analyzer); - - qint32 getMaxFieldLength() const; - void setMaxFieldLength(qint32 value); - - qint32 getMaxBufferedDocs() const; - void setMaxBufferedDocs(qint32 value); - - qint64 getWriteLockTimeout() const; - void setWriteLockTimeout(qint64 writeLockTimeout); - - qint64 getCommitLockTimeout() const; - void setCommitLockTimeout(qint64 commitLockTimeout); - - qint32 getMergeFactor() const; - void setMergeFactor(qint32 value); - - qint32 getTermIndexInterval() const; - void setTermIndexInterval(qint32 interval); - - qint32 getMinMergeDocs() const; - void setMinMergeDocs(qint32 value); - - qint32 getMaxMergeDocs() const; - void setMaxMergeDocs(qint32 value); - - bool getUseCompoundFile() const; - void setUseCompoundFile(bool value); - -protected: - QSharedDataPointer d; - -private: - QCLuceneAnalyzer analyzer; -}; - -QT_END_NAMESPACE - -#endif // QINDEXWRITER_P_H diff -Nru qttools-opensource-src-5.7.1/src/assistant/clucene/qquery.cpp qttools-opensource-src-5.9.1/src/assistant/clucene/qquery.cpp --- qttools-opensource-src-5.7.1/src/assistant/clucene/qquery.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/clucene/qquery.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,381 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team. -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the QtTools module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qquery_p.h" -#include "qclucene_global_p.h" - -#include -#include -#include - -QT_BEGIN_NAMESPACE - -QCLuceneQueryPrivate::QCLuceneQueryPrivate() - : QSharedData() -{ - query = 0; - deleteCLuceneQuery = true; -} - -QCLuceneQueryPrivate::QCLuceneQueryPrivate(const QCLuceneQueryPrivate &other) - : QSharedData() -{ - query = _CL_POINTER(other.query); - deleteCLuceneQuery = other.deleteCLuceneQuery; -} - -QCLuceneQueryPrivate::~QCLuceneQueryPrivate() -{ - if (deleteCLuceneQuery) - _CLDECDELETE(query); -} - - -QCLuceneQuery::QCLuceneQuery() - : d(new QCLuceneQueryPrivate()) -{ - // nothing todo, private -} - -QCLuceneQuery::~QCLuceneQuery() -{ - // nothing todo -} - -void QCLuceneQuery::setBoost(qreal boost) -{ - d->query->setBoost(qreal(boost)); -} - -qreal QCLuceneQuery::getBoost() const -{ - return qreal(d->query->getBoost()); -} - -QString QCLuceneQuery::getQueryName() const -{ - return TCharToQString(d->query->getQueryName()); -} - -bool QCLuceneQuery::instanceOf(const QString &other) const -{ - if (other == getQueryName()) - return true; - - return false; -} - -QString QCLuceneQuery::toString(const QString &field) const -{ - TCHAR *fieldName = QStringToTChar(field); - QString retValue = TCharToQString(d->query->toString(fieldName)); - delete [] fieldName; - - return retValue; -} - -quint32 QCLuceneQuery::hashCode() const -{ - return quint32(d->query->hashCode()); -} - -QString QCLuceneQuery::toString() const -{ - return TCharToQString(d->query->toString()); -} - -bool QCLuceneQuery::equals(const QCLuceneQuery &other) const -{ - return d->query->equals(other.d->query); -} - - -QCLucenePrefixQuery::QCLucenePrefixQuery(const QCLuceneTerm &prefix) - : QCLuceneQuery() - , prefix(prefix) -{ - d->query = new lucene::search::PrefixQuery(prefix.d->term); -} - -QCLucenePrefixQuery::~QCLucenePrefixQuery() -{ - // nothing todo -} - -QString QCLucenePrefixQuery::getClassName() -{ - return TCharToQString(lucene::search::PrefixQuery::getClassName()); -} - -QCLuceneTerm QCLucenePrefixQuery::getPrefix() const -{ - return prefix; -} - - -QCLuceneRangeQuery::QCLuceneRangeQuery(const QCLuceneTerm &lowerTerm, - const QCLuceneTerm &upperTerm, - bool inclusive) - : QCLuceneQuery() - , lowerTerm(lowerTerm) - , upperTerm(upperTerm) -{ - d->query = new lucene::search::RangeQuery(lowerTerm.d->term, - upperTerm.d->term, inclusive); -} - -QCLuceneRangeQuery::~QCLuceneRangeQuery() -{ - // nothing todo -} - -QString QCLuceneRangeQuery::getClassName() -{ - return TCharToQString(lucene::search::RangeQuery::getClassName()); -} - -QCLuceneTerm QCLuceneRangeQuery::getLowerTerm() const -{ - return lowerTerm; -} - -QCLuceneTerm QCLuceneRangeQuery::getUpperTerm() const -{ - return upperTerm; -} - -bool QCLuceneRangeQuery::isInclusive() const -{ - lucene::search::RangeQuery *query = - static_cast (d->query); - - if (query == 0) - return false; - - return query->isInclusive(); -} - -QString QCLuceneRangeQuery::getField() const -{ - lucene::search::RangeQuery *query = - static_cast (d->query); - - if (query == 0) - return QString(); - - return TCharToQString(query->getField()); -} - - -QCLuceneTermQuery::QCLuceneTermQuery(const QCLuceneTerm &term) - : QCLuceneQuery() - , term(term) -{ - d->query = new lucene::search::TermQuery(term.d->term); -} - -QCLuceneTermQuery::~QCLuceneTermQuery() -{ - // nothing todo -} - -QString QCLuceneTermQuery::getClassName() -{ - return TCharToQString(lucene::search::TermQuery::getClassName()); -} - -QCLuceneTerm QCLuceneTermQuery::getTerm() const -{ - return term; -} - - -QCLuceneBooleanQuery::QCLuceneBooleanQuery() - : QCLuceneQuery() -{ - d->query = new lucene::search::BooleanQuery(); -} - -QCLuceneBooleanQuery::~QCLuceneBooleanQuery() -{ - qDeleteAll(queries); -} - -QString QCLuceneBooleanQuery::getClassName() -{ - return TCharToQString(lucene::search::BooleanQuery::getClassName()); -} - -quint32 QCLuceneBooleanQuery::getClauseCount() const -{ - lucene::search::BooleanQuery *query = - static_cast (d->query); - - if (query == 0) - return 1024; - - return quint32(query->getClauseCount()); -} - -quint32 QCLuceneBooleanQuery::getMaxClauseCount() const -{ - lucene::search::BooleanQuery *query = - static_cast (d->query); - - if (query == 0) - return 1024; - - return quint32(query->getMaxClauseCount()); -} - -void QCLuceneBooleanQuery::setMaxClauseCount(quint32 maxClauseCount) -{ - lucene::search::BooleanQuery *query = - static_cast (d->query); - - if (query == 0) - return; - - query->setMaxClauseCount(size_t(maxClauseCount)); -} - -void QCLuceneBooleanQuery::add(QCLuceneQuery *query, bool required, bool prohibited) -{ - add(query, false, required, prohibited); -} - -void QCLuceneBooleanQuery::add(QCLuceneQuery *query, bool delQuery, - bool required, bool prohibited) -{ - lucene::search::BooleanQuery *booleanQuery = - static_cast (d->query); - - if (booleanQuery == 0) - return; - - booleanQuery->add(query->d->query, delQuery, required, prohibited); - - if (delQuery) { - queries.append(query); - query->d->deleteCLuceneQuery = false; - } -} - - -QCLucenePhraseQuery::QCLucenePhraseQuery() - : QCLuceneQuery() -{ - d->query = new lucene::search::PhraseQuery(); -} - -QCLucenePhraseQuery::~QCLucenePhraseQuery() -{ - termList.clear(); -} - -QString QCLucenePhraseQuery::getClassName() -{ - return TCharToQString(lucene::search::RangeQuery::getClassName()); -} - -qint32 QCLucenePhraseQuery::getSlop() const -{ - lucene::search::PhraseQuery *phraseQuery = - static_cast (d->query); - - if (phraseQuery == 0) - return 0; - - return qint32(phraseQuery->getSlop()); -} - -void QCLucenePhraseQuery::setSlop(const qint32 slop) -{ - lucene::search::PhraseQuery *phraseQuery = - static_cast (d->query); - - if (phraseQuery == 0) - return; - - phraseQuery->setSlop(int32_t(slop)); -} - -void QCLucenePhraseQuery::addTerm(const QCLuceneTerm &term) -{ - lucene::search::PhraseQuery *phraseQuery = - static_cast (d->query); - - if (phraseQuery == 0) - return; - - termList.append(term); - phraseQuery->add(term.d->term); -} - -void QCLucenePhraseQuery::addTerm(const QCLuceneTerm &term, qint32 position) -{ - lucene::search::PhraseQuery *phraseQuery = - static_cast (d->query); - - if (phraseQuery == 0) - return; - - termList.insert(position, term); - phraseQuery->add(term.d->term, int32_t(position)); - -} - -QString QCLucenePhraseQuery::getFieldName() const -{ - lucene::search::PhraseQuery *phraseQuery = - static_cast (d->query); - - if (phraseQuery == 0) - return QString(); - - return TCharToQString(phraseQuery->getFieldName()); -} - -QList QCLucenePhraseQuery::getTerms() const -{ - return termList; -} - -QT_END_NAMESPACE diff -Nru qttools-opensource-src-5.7.1/src/assistant/clucene/qqueryparser.cpp qttools-opensource-src-5.9.1/src/assistant/clucene/qqueryparser.cpp --- qttools-opensource-src-5.7.1/src/assistant/clucene/qqueryparser.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/clucene/qqueryparser.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,199 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team. -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the QtPositioning module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qqueryparser_p.h" -#include "qquery_p.h" -#include "qclucene_global_p.h" - -#include -#include - -QT_BEGIN_NAMESPACE - -QCLuceneQueryParserPrivate::QCLuceneQueryParserPrivate() - : QSharedData() -{ - queryParser = 0; - deleteCLuceneQueryParser = true; -} - -QCLuceneQueryParserPrivate::QCLuceneQueryParserPrivate(const QCLuceneQueryParserPrivate &other) - : QSharedData() -{ - queryParser = _CL_POINTER(other.queryParser); - deleteCLuceneQueryParser = other.deleteCLuceneQueryParser; -} - -QCLuceneQueryParserPrivate::~QCLuceneQueryParserPrivate() -{ - if (deleteCLuceneQueryParser) - _CLDECDELETE(queryParser); -} - - -QCLuceneQueryParser::QCLuceneQueryParser(const QString &field, - QCLuceneAnalyzer &analyzer) - : d(new QCLuceneQueryParserPrivate()) - , field(field) - , analyzer(analyzer) -{ - TCHAR *fieldName = QStringToTChar(field); - - d->queryParser = new lucene::queryParser::QueryParser(fieldName, - analyzer.d->analyzer); - - delete [] fieldName; -} - -QCLuceneQueryParser::~QCLuceneQueryParser() -{ - // nothing todo -} - -QCLuceneQuery* QCLuceneQueryParser::parse(const QString &query) -{ - TCHAR *string = QStringToTChar(query); - - QCLuceneQuery *retValue = 0; - lucene::search::Query* q = d->queryParser->parse(string); - if (q) { - retValue = new QCLuceneQuery(); - retValue->d->query = q; - } - - delete [] string; - return retValue; -} - -QCLuceneQuery* QCLuceneQueryParser::parse(QCLuceneReader &reader) -{ - QCLuceneQuery *retValue = 0; - lucene::search::Query* q = d->queryParser->parse(reader.d->reader); - if (q) { - retValue = new QCLuceneQuery(); - retValue->d->query = q; - } - - return retValue; -} - -QCLuceneQuery* QCLuceneQueryParser::parse(const QString &query, const QString &field, - QCLuceneAnalyzer &analyzer) -{ - QCLuceneQueryParser parser(field, analyzer); - return parser.parse(query); -} - -QCLuceneAnalyzer QCLuceneQueryParser::getAnalyzer() -{ - return analyzer; -} - -QString QCLuceneQueryParser::getField() -{ - return field; -} - - -QCLuceneMultiFieldQueryParser::QCLuceneMultiFieldQueryParser( - const QStringList &fieldList, QCLuceneAnalyzer &analyzer) - : QCLuceneQueryParser(QLatin1String(""), analyzer) -{ - Q_UNUSED(fieldList) -} - -QCLuceneMultiFieldQueryParser::~QCLuceneMultiFieldQueryParser() -{ - // nothing todo -} - -QCLuceneQuery* QCLuceneMultiFieldQueryParser::parse(const QString &query, - const QStringList &fieldList, - QCLuceneAnalyzer &analyzer) -{ - QCLuceneBooleanQuery *retValue = new QCLuceneBooleanQuery(); - foreach (const QString &field, fieldList) { - QCLuceneQuery *q = QCLuceneQueryParser::parse(query, field, analyzer); - if (!q) { - delete retValue; - retValue = 0; break; - } else { - retValue->add(q, true, false, false); - } - } - - return retValue; -} - -QCLuceneQuery* QCLuceneMultiFieldQueryParser::parse(const QString &query, - const QStringList &fieldList, - QList flags, - QCLuceneAnalyzer &analyzer) -{ - QCLuceneBooleanQuery *retValue = new QCLuceneBooleanQuery(); - qint32 i = 0; - foreach (const QString &field, fieldList) { - QCLuceneQuery *q = QCLuceneQueryParser::parse(query, field, analyzer); - if (q) { - qint32 flag = flags.at(i); - switch (flag) { - case QCLuceneMultiFieldQueryParser::REQUIRED_FIELD: { - retValue->add(q, true, true, false); - } break; - - case QCLuceneMultiFieldQueryParser::PROHIBITED_FIELD: { - retValue->add(q, true, false, true); - } break; - - default: { - retValue->add(q, true, false, false); - } break; - } - - ++i; - } else { - delete retValue; - retValue = 0; break; - } - } - return retValue; -} - -QT_END_NAMESPACE diff -Nru qttools-opensource-src-5.7.1/src/assistant/clucene/qqueryparser_p.h qttools-opensource-src-5.9.1/src/assistant/clucene/qqueryparser_p.h --- qttools-opensource-src-5.7.1/src/assistant/clucene/qqueryparser_p.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/clucene/qqueryparser_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,132 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team. -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the QtTools module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QQUERYPARSER_P_H -#define QQUERYPARSER_P_H - -// -// W A R N I N G -// ------------- -// -// This file is not part of the Qt API. It exists for the convenience -// of the help generator tools. This header file may change from version -// to version without notice, or even be removed. -// -// We mean it. -// - -#include "qreader_p.h" -#include "qanalyzer_p.h" -#include "qclucene_global_p.h" - -#include -#include -#include -#include - -CL_NS_DEF(queryParser) - class QueryParser; -CL_NS_END -CL_NS_USE(queryParser) - -QT_BEGIN_NAMESPACE - -class QCLuceneQuery; -class QCLuceneMultiFieldQueryParser; - -class Q_CLUCENE_EXPORT QCLuceneQueryParserPrivate : public QSharedData -{ -public: - QCLuceneQueryParserPrivate(); - QCLuceneQueryParserPrivate(const QCLuceneQueryParserPrivate &other); - - ~QCLuceneQueryParserPrivate(); - - QueryParser *queryParser; - bool deleteCLuceneQueryParser; - -private: - QCLuceneQueryParserPrivate &operator=(const QCLuceneQueryParserPrivate &other); -}; - -class Q_CLUCENE_EXPORT QCLuceneQueryParser -{ -public: - QCLuceneQueryParser(const QString &field, QCLuceneAnalyzer &analyzer); - virtual ~QCLuceneQueryParser(); - - QCLuceneQuery* parse(const QString &query); - QCLuceneQuery* parse(QCLuceneReader &reader); - static QCLuceneQuery* parse(const QString &query, const QString &field, - QCLuceneAnalyzer &analyzer); - QCLuceneAnalyzer getAnalyzer(); - QString getField(); - -protected: - friend class QCLuceneMultiFieldQueryParser; - QSharedDataPointer d; - -private: - QString field; - QCLuceneAnalyzer analyzer; -}; - -class Q_CLUCENE_EXPORT QCLuceneMultiFieldQueryParser : public QCLuceneQueryParser -{ -public: - enum FieldFlags { - NORMAL_FIELD = 0, - REQUIRED_FIELD = 1, - PROHIBITED_FIELD = 2 - }; - - QCLuceneMultiFieldQueryParser(const QStringList &fieldList, - QCLuceneAnalyzer &analyzer); - ~QCLuceneMultiFieldQueryParser(); - - static QCLuceneQuery *parse(const QString &query, const QStringList &fieldList, - QCLuceneAnalyzer &analyzer); - static QCLuceneQuery *parse(const QString &query, const QStringList &fieldList, - QList flags, QCLuceneAnalyzer &analyzer); -}; - -QT_END_NAMESPACE - -#endif // QQUERYPARSER_P_H diff -Nru qttools-opensource-src-5.7.1/src/assistant/clucene/qquery_p.h qttools-opensource-src-5.9.1/src/assistant/clucene/qquery_p.h --- qttools-opensource-src-5.7.1/src/assistant/clucene/qquery_p.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/clucene/qquery_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,211 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team. -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the QtTools module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QQUERY_P_H -#define QQUERY_P_H - -// -// W A R N I N G -// ------------- -// -// This file is not part of the Qt API. It exists for the convenience -// of the help generator tools. This header file may change from version -// to version without notice, or even be removed. -// -// We mean it. -// - -#include "qterm_p.h" -#include "qclucene_global_p.h" - -#include -#include -#include -#include - -CL_NS_DEF(search) - class Query; -CL_NS_END -CL_NS_USE(search) - -QT_BEGIN_NAMESPACE - -class QCLuceneHits; -class QCLuceneTermQuery; -class QCLuceneRangeQuery; -class QCLuceneQueryParser; -class QCLucenePrefixQuery; -class QCLuceneBooleanQuery; -class QCLucenePhraseQuery; - -class Q_CLUCENE_EXPORT QCLuceneQueryPrivate : public QSharedData -{ -public: - QCLuceneQueryPrivate(); - QCLuceneQueryPrivate(const QCLuceneQueryPrivate &other); - - ~QCLuceneQueryPrivate(); - - Query *query; - bool deleteCLuceneQuery; - -private: - QCLuceneQueryPrivate &operator=(const QCLuceneQueryPrivate &other); -}; - -class Q_CLUCENE_EXPORT QCLuceneQuery -{ -public: - virtual ~QCLuceneQuery(); - - void setBoost(qreal boost); - qreal getBoost() const; - QString getQueryName() const; - bool instanceOf(const QString &other) const; - QString toString(const QString &field) const; - quint32 hashCode() const; - QString toString() const; - bool equals(const QCLuceneQuery &other) const; - -protected: - friend class QCLuceneHits; - friend class QCLuceneTermQuery; - friend class QCLuceneRangeQuery; - friend class QCLucenePrefixQuery; - friend class QCLuceneQueryParser; - friend class QCLuceneBooleanQuery; - friend class QCLucenePhraseQuery; - QSharedDataPointer d; - -private: - QCLuceneQuery(); -}; - -class Q_CLUCENE_EXPORT QCLucenePrefixQuery : public QCLuceneQuery -{ -public: - QCLucenePrefixQuery(const QCLuceneTerm &prefix); - ~QCLucenePrefixQuery(); - - static QString getClassName(); - - QCLuceneTerm getPrefix() const; - -private: - QCLuceneTerm prefix; -}; - -class Q_CLUCENE_EXPORT QCLuceneRangeQuery : public QCLuceneQuery -{ -public: - QCLuceneRangeQuery(const QCLuceneTerm &lowerTerm, - const QCLuceneTerm &upperTerm, bool inclusive); - ~QCLuceneRangeQuery(); - - static QString getClassName(); - - QCLuceneTerm getLowerTerm() const; - QCLuceneTerm getUpperTerm() const; - - bool isInclusive() const; - QString getField() const; - -private: - QCLuceneTerm lowerTerm; - QCLuceneTerm upperTerm; -}; - -class Q_CLUCENE_EXPORT QCLuceneTermQuery : public QCLuceneQuery -{ -public: - QCLuceneTermQuery(const QCLuceneTerm &term); - ~QCLuceneTermQuery(); - - static QString getClassName(); - - QCLuceneTerm getTerm() const; - -private: - QCLuceneTerm term; -}; - -class Q_CLUCENE_EXPORT QCLuceneBooleanQuery : public QCLuceneQuery -{ -public: - QCLuceneBooleanQuery(); - ~QCLuceneBooleanQuery(); - - static QString getClassName(); - - quint32 getClauseCount() const; - quint32 getMaxClauseCount() const; - void setMaxClauseCount(quint32 maxClauseCount); - - void add(QCLuceneQuery *query, bool required, bool prohibited); - void add(QCLuceneQuery *query, bool delQuery, bool required, bool prohibited); - -private: - QList queries; -}; - -class Q_CLUCENE_EXPORT QCLucenePhraseQuery : public QCLuceneQuery -{ -public: - QCLucenePhraseQuery(); - ~QCLucenePhraseQuery(); - - static QString getClassName(); - - qint32 getSlop() const; - void setSlop(const qint32 slop); - - void addTerm(const QCLuceneTerm &term); - void addTerm(const QCLuceneTerm &term, qint32 position); - - QString getFieldName() const; - QList getTerms() const; - -private: - QList termList; -}; - -QT_END_NAMESPACE - -#endif // QQUERY_P_H diff -Nru qttools-opensource-src-5.7.1/src/assistant/clucene/qreader.cpp qttools-opensource-src-5.9.1/src/assistant/clucene/qreader.cpp --- qttools-opensource-src-5.7.1/src/assistant/clucene/qreader.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/clucene/qreader.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,124 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team. -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the QtTools module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qreader_p.h" -#include "qclucene_global_p.h" - -#include -#include - -QT_BEGIN_NAMESPACE - -QCLuceneReaderPrivate::QCLuceneReaderPrivate() - : QSharedData() -{ - reader = 0; - deleteCLuceneReader = true; -} - -QCLuceneReaderPrivate::QCLuceneReaderPrivate(const QCLuceneReaderPrivate &other) - : QSharedData() -{ - reader = _CL_POINTER(other.reader); - deleteCLuceneReader = other.deleteCLuceneReader; -} - -QCLuceneReaderPrivate::~QCLuceneReaderPrivate() -{ - if (deleteCLuceneReader) - _CLDECDELETE(reader); -} - -QCLuceneReader::QCLuceneReader() - : d(new QCLuceneReaderPrivate()) -{ - // nothing todo -} - -QCLuceneReader::~QCLuceneReader() -{ - // nothing todo -} - - -QCLuceneStringReader::QCLuceneStringReader(const QString &value) - : QCLuceneReader() - , string(QStringToTChar(value)) -{ - d->reader = new lucene::util::StringReader(string); -} - -QCLuceneStringReader::QCLuceneStringReader(const QString &value, qint32 length) - : QCLuceneReader() - , string(QStringToTChar(value)) -{ - d->reader = new lucene::util::StringReader(string, int32_t(length)); -} - -QCLuceneStringReader::QCLuceneStringReader(const QString &value, qint32 length, - bool copyData) - : QCLuceneReader() - , string(QStringToTChar(value)) -{ - d->reader = new lucene::util::StringReader(string, int32_t(length), copyData); -} - -QCLuceneStringReader::~QCLuceneStringReader() -{ - delete [] string; -} - - -QCLuceneFileReader::QCLuceneFileReader(const QString &path, const QString &encoding, - qint32 cacheLength, qint32 cacheBuffer) - : QCLuceneReader() -{ - const QByteArray tmpPath = path.toLocal8Bit(); - const QByteArray tmpEncoding = encoding.toLatin1(); - d->reader = new lucene::util::FileReader(tmpPath.constData(), - tmpEncoding.constData(), int32_t(cacheLength), int32_t(cacheBuffer)); -} - -QCLuceneFileReader::~QCLuceneFileReader() -{ - // nothing todo -} - -QT_END_NAMESPACE diff -Nru qttools-opensource-src-5.7.1/src/assistant/clucene/qreader_p.h qttools-opensource-src-5.9.1/src/assistant/clucene/qreader_p.h --- qttools-opensource-src-5.7.1/src/assistant/clucene/qreader_p.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/clucene/qreader_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,127 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team. -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the QtTools module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QREADER_P_H -#define QREADER_P_H - -// -// W A R N I N G -// ------------- -// -// This file is not part of the Qt API. It exists for the convenience -// of the help generator tools. This header file may change from version -// to version without notice, or even be removed. -// -// We mean it. -// - -#include "qclucene_global_p.h" - -#include -#include -#include - -CL_NS_DEF(util) - class Reader; -CL_NS_END -CL_NS_USE(util) - -QT_BEGIN_NAMESPACE - -class QCLuceneField; -class QCLuceneAnalyzer; -class QCLuceneDocument; -class QCLuceneQueryParser; -class QCLuceneStandardTokenizer; - -class Q_CLUCENE_EXPORT QCLuceneReaderPrivate : public QSharedData -{ -public: - QCLuceneReaderPrivate(); - QCLuceneReaderPrivate(const QCLuceneReaderPrivate &other); - - ~QCLuceneReaderPrivate(); - - Reader* reader; - bool deleteCLuceneReader; - -private: - QCLuceneReaderPrivate &operator=(const QCLuceneReaderPrivate &other); -}; - -class Q_CLUCENE_EXPORT QCLuceneReader -{ -public: - QCLuceneReader(); - virtual ~QCLuceneReader(); - -protected: - friend class QCLuceneField; - friend class QCLuceneAnalyzer; - friend class QCLuceneDocument; - friend class QCLuceneQueryParser; - friend class QCLuceneStandardTokenizer; - QSharedDataPointer d; -}; - -class QCLuceneStringReader : public QCLuceneReader -{ -public: - QCLuceneStringReader(const QString &value); - QCLuceneStringReader(const QString &value, qint32 length); - QCLuceneStringReader(const QString &value, qint32 length, bool copyData); - - ~QCLuceneStringReader(); - -private: - TCHAR *string; -}; - -class Q_CLUCENE_EXPORT QCLuceneFileReader : public QCLuceneReader -{ -public: - QCLuceneFileReader(const QString &path, const QString &encoding, - qint32 cacheLength = 13, qint32 cacheBuffer = 14); - ~QCLuceneFileReader(); -}; - -QT_END_NAMESPACE - -#endif // QREADER_P_H diff -Nru qttools-opensource-src-5.7.1/src/assistant/clucene/qsearchable.cpp qttools-opensource-src-5.9.1/src/assistant/clucene/qsearchable.cpp --- qttools-opensource-src-5.7.1/src/assistant/clucene/qsearchable.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/clucene/qsearchable.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,226 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team. -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the QtTools module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qsearchable_p.h" - -#include -#include - -QT_BEGIN_NAMESPACE - -QCLuceneSearchablePrivate::QCLuceneSearchablePrivate() - : QSharedData() -{ - searchable = 0; - deleteCLuceneSearchable = true; -} - -QCLuceneSearchablePrivate::QCLuceneSearchablePrivate(const QCLuceneSearchablePrivate &other) - : QSharedData() -{ - searchable = _CL_POINTER(other.searchable); - deleteCLuceneSearchable = other.deleteCLuceneSearchable; -} - -QCLuceneSearchablePrivate::~QCLuceneSearchablePrivate() -{ - if (deleteCLuceneSearchable) - _CLDECDELETE(searchable); -} - - -QCLuceneSearchable::QCLuceneSearchable() - : d(new QCLuceneSearchablePrivate()) -{ - // nothing todo -} - -QCLuceneSearchable::~QCLuceneSearchable() -{ - // nothing todo -} - - -QCLuceneSearcher::QCLuceneSearcher() - : QCLuceneSearchable() -{ - // nothing todo -} - -QCLuceneSearcher::~QCLuceneSearcher() -{ - // nothing todo; -} - -QCLuceneHits QCLuceneSearcher::search(const QCLuceneQuery &query) -{ - return search(query, QCLuceneFilter()); -} - -QCLuceneHits QCLuceneSearcher::search(const QCLuceneQuery &query, - const QCLuceneFilter &filter) -{ - return QCLuceneHits(*this, query, filter); -} - -QCLuceneHits QCLuceneSearcher::search(const QCLuceneQuery &query, - const QCLuceneSort &sort) -{ - return QCLuceneHits(*this, query, QCLuceneFilter(), sort); -} - -QCLuceneHits QCLuceneSearcher::search(const QCLuceneQuery &query, - const QCLuceneFilter &filter, - const QCLuceneSort &sort) -{ - return QCLuceneHits(*this, query, filter, sort); -} - - -QCLuceneIndexSearcher::QCLuceneIndexSearcher(const QString &path) - : QCLuceneSearcher() -{ - lucene::search::IndexSearcher *searcher = - new lucene::search::IndexSearcher(path); - - reader.d->reader = searcher->getReader(); - reader.d->deleteCLuceneIndexReader = false; - - d->searchable = searcher; -} - -QCLuceneIndexSearcher::QCLuceneIndexSearcher(const QCLuceneIndexReader &reader) - : QCLuceneSearcher() - , reader(reader) -{ - d->searchable = new lucene::search::IndexSearcher(reader.d->reader); -} - -QCLuceneIndexSearcher::~QCLuceneIndexSearcher() -{ - // nothing todo -} - -void QCLuceneIndexSearcher::close() -{ - d->searchable->close(); -} - -qint32 QCLuceneIndexSearcher::maxDoc() const -{ - return qint32(d->searchable->maxDoc()); -} - -QCLuceneIndexReader QCLuceneIndexSearcher::getReader() -{ - return reader; -} - -bool QCLuceneIndexSearcher::doc(qint32 i, QCLuceneDocument &document) -{ - return d->searchable->doc(int32_t(i), document.d->document); -} - - -QCLuceneMultiSearcher::QCLuceneMultiSearcher(const QList searchables) -: QCLuceneSearcher() -{ - lucene::search::Searchable** list= - _CL_NEWARRAY(lucene::search::Searchable*, searchables.count()); - - d->searchable = new lucene::search::MultiSearcher(list); - - _CLDELETE_ARRAY(list); -} - -QCLuceneMultiSearcher::~QCLuceneMultiSearcher() -{ - // nothing todo -} - -void QCLuceneMultiSearcher::close() -{ - d->searchable->close(); -} - -qint32 QCLuceneMultiSearcher::maxDoc() const -{ - return qint32(d->searchable->maxDoc()); -} - -qint32 QCLuceneMultiSearcher::subDoc(qint32 index) const -{ - lucene::search::MultiSearcher *searcher = - static_cast (d->searchable); - - if (searcher == 0) - return 0; - - return qint32(searcher->subDoc(int32_t(index))); -} - -qint32 QCLuceneMultiSearcher::subSearcher(qint32 index) const -{ - lucene::search::MultiSearcher *searcher = - static_cast (d->searchable); - - if (searcher == 0) - return 0; - - return qint32(searcher->subSearcher(int32_t(index))); -} - -qint32 QCLuceneMultiSearcher::searcherIndex(qint32 index) const -{ - lucene::search::MultiSearcher *searcher = - static_cast (d->searchable); - - if (searcher == 0) - return 0; - - return qint32(searcher->searcherIndex(int32_t(index))); -} - -bool QCLuceneMultiSearcher::doc(qint32 i, QCLuceneDocument &document) -{ - return d->searchable->doc(int32_t(i), document.d->document); -} - -QT_END_NAMESPACE diff -Nru qttools-opensource-src-5.7.1/src/assistant/clucene/qsearchable_p.h qttools-opensource-src-5.9.1/src/assistant/clucene/qsearchable_p.h --- qttools-opensource-src-5.7.1/src/assistant/clucene/qsearchable_p.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/clucene/qsearchable_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,158 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team. -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the QtTools module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QSEARCHABLE_P_H -#define QSEARCHABLE_P_H - -// -// W A R N I N G -// ------------- -// -// This file is not part of the Qt API. It exists for the convenience -// of the help generator tools. This header file may change from version -// to version without notice, or even be removed. -// -// We mean it. -// - -#include "qhits_p.h" -#include "qsort_p.h" -#include "qquery_p.h" -#include "qfilter_p.h" -#include "qdocument_p.h" -#include "qindexreader_p.h" -#include "qclucene_global_p.h" - -#include -#include -#include -#include - -CL_NS_DEF(search) - class Searcher; -CL_NS_END -CL_NS_USE(search) - -QT_BEGIN_NAMESPACE - -class QCLuceneHits; -class QCLuceneSearcher; -class QCLuceneIndexSearcher; -class QCLuceneMultiSearcher; - -class Q_CLUCENE_EXPORT QCLuceneSearchablePrivate : public QSharedData -{ -public: - QCLuceneSearchablePrivate(); - QCLuceneSearchablePrivate(const QCLuceneSearchablePrivate &other); - - ~QCLuceneSearchablePrivate(); - - Searcher *searchable; - bool deleteCLuceneSearchable; - -private: - QCLuceneSearchablePrivate &operator=(const QCLuceneSearchablePrivate &other); -}; - -class Q_CLUCENE_EXPORT QCLuceneSearchable -{ -public: - virtual ~QCLuceneSearchable(); - -protected: - friend class QCLuceneSearcher; - friend class QCLuceneIndexSearcher; - friend class QCLuceneMultiSearcher; - QSharedDataPointer d; - -private: - QCLuceneSearchable(); -}; - -class Q_CLUCENE_EXPORT QCLuceneSearcher : public QCLuceneSearchable -{ -public: - QCLuceneSearcher(); - virtual ~QCLuceneSearcher(); - - QCLuceneHits search(const QCLuceneQuery &query); - QCLuceneHits search(const QCLuceneQuery &query, const QCLuceneFilter &filter); - QCLuceneHits search(const QCLuceneQuery &query, const QCLuceneSort &sort); - QCLuceneHits search(const QCLuceneQuery &query, const QCLuceneFilter &filter, - const QCLuceneSort &sort); - -protected: - friend class QCLuceneHits; -}; - -class Q_CLUCENE_EXPORT QCLuceneIndexSearcher : public QCLuceneSearcher -{ -public: - QCLuceneIndexSearcher(const QString &path); - QCLuceneIndexSearcher(const QCLuceneIndexReader &reader); - ~QCLuceneIndexSearcher(); - - void close(); - qint32 maxDoc() const; - QCLuceneIndexReader getReader(); - bool doc(qint32 i, QCLuceneDocument &document); - -private: - QCLuceneIndexReader reader; -}; - -class Q_CLUCENE_EXPORT QCLuceneMultiSearcher : public QCLuceneSearcher -{ -public: - QCLuceneMultiSearcher(const QList searchables); - ~QCLuceneMultiSearcher(); - - void close(); - qint32 maxDoc() const; - qint32 subDoc(qint32 index) const; - qint32 subSearcher(qint32 index) const; - qint32 searcherIndex(qint32 index) const; - bool doc(qint32 i, QCLuceneDocument &document); -}; - -QT_END_NAMESPACE - -#endif // QSEARCHABLE_P_H diff -Nru qttools-opensource-src-5.7.1/src/assistant/clucene/qsort.cpp qttools-opensource-src-5.9.1/src/assistant/clucene/qsort.cpp --- qttools-opensource-src-5.7.1/src/assistant/clucene/qsort.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/clucene/qsort.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,120 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team. -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the QtTools module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qsort_p.h" -#include "qclucene_global_p.h" - -#include -#include - -QT_BEGIN_NAMESPACE - -QCLuceneSortPrivate::QCLuceneSortPrivate() - : QSharedData() -{ - sort = 0; - deleteCLuceneSort = true; -} - -QCLuceneSortPrivate::QCLuceneSortPrivate (const QCLuceneSortPrivate &other) - : QSharedData() -{ - sort = _CL_POINTER(other.sort); - deleteCLuceneSort = other.deleteCLuceneSort; -} - -QCLuceneSortPrivate::~QCLuceneSortPrivate() -{ - if (deleteCLuceneSort) - _CLDECDELETE(sort); -} - - -QCLuceneSort::QCLuceneSort() - : d(new QCLuceneSortPrivate()) -{ - d->sort = new lucene::search::Sort(); -} - -QCLuceneSort::QCLuceneSort(const QStringList &fieldNames) - : d(new QCLuceneSortPrivate()) -{ - d->sort = new lucene::search::Sort(); - setSort(fieldNames); -} - -QCLuceneSort::QCLuceneSort(const QString &field, bool reverse) - : d(new QCLuceneSortPrivate()) -{ - d->sort = new lucene::search::Sort(); - setSort(field, reverse); -} - -QCLuceneSort::~QCLuceneSort() -{ - // nothing todo -} - -QString QCLuceneSort::toString() const -{ - return TCharToQString(d->sort->toString()); -} - -void QCLuceneSort::setSort(const QStringList &fieldNames) -{ - TCHAR **nameArray = new TCHAR*[fieldNames.count()]; - for (int i = 0; i < fieldNames.count(); ++i) - nameArray[i] = QStringToTChar(fieldNames.at(i)); - - d->sort->setSort((const TCHAR**)nameArray); - - for (int i = 0; i < fieldNames.count(); ++i) - delete [] nameArray[i]; - delete [] nameArray; -} - -void QCLuceneSort::setSort(const QString &field, bool reverse) -{ - TCHAR *name = QStringToTChar(field); - d->sort->setSort(name, reverse); - delete [] name; -} - -QT_END_NAMESPACE diff -Nru qttools-opensource-src-5.7.1/src/assistant/clucene/qsort_p.h qttools-opensource-src-5.9.1/src/assistant/clucene/qsort_p.h --- qttools-opensource-src-5.7.1/src/assistant/clucene/qsort_p.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/clucene/qsort_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,107 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team. -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the QtTools module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QSORT_P_H -#define QSORT_P_H - -// -// W A R N I N G -// ------------- -// -// This file is not part of the Qt API. It exists for the convenience -// of the help generator tools. This header file may change from version -// to version without notice, or even be removed. -// -// We mean it. -// - -#include "qclucene_global_p.h" - -#include -#include -#include -#include - -CL_NS_DEF(search) - class Sort; -CL_NS_END -CL_NS_USE(search) - -QT_BEGIN_NAMESPACE - -class QCLuceneHits; -class QCLuceneField; - -class Q_CLUCENE_EXPORT QCLuceneSortPrivate : public QSharedData -{ -public: - QCLuceneSortPrivate(); - QCLuceneSortPrivate (const QCLuceneSortPrivate &other); - - ~QCLuceneSortPrivate(); - - Sort *sort; - bool deleteCLuceneSort; - -private: - QCLuceneSortPrivate &operator=(const QCLuceneSortPrivate &other); -}; - -class Q_CLUCENE_EXPORT QCLuceneSort -{ -public: - QCLuceneSort(); - explicit QCLuceneSort(const QStringList &fieldNames); - explicit QCLuceneSort(const QString &field, bool reverse = false); - - virtual ~QCLuceneSort(); - - QString toString() const; - void setSort(const QStringList &fieldNames); - void setSort(const QString &field, bool reverse = false); - -protected: - friend class QCLuceneHits; - QSharedDataPointer d; -}; - -QT_END_NAMESPACE - -#endif // QSORT_P_H diff -Nru qttools-opensource-src-5.7.1/src/assistant/clucene/qterm.cpp qttools-opensource-src-5.9.1/src/assistant/clucene/qterm.cpp --- qttools-opensource-src-5.7.1/src/assistant/clucene/qterm.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/clucene/qterm.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,157 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team. -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the QtTools module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qterm_p.h" -#include "qclucene_global_p.h" - -#include -#include - -QT_BEGIN_NAMESPACE - -QCLuceneTermPrivate::QCLuceneTermPrivate() - : QSharedData() -{ - term = 0; - deleteCLuceneTerm = true; -} - -QCLuceneTermPrivate::QCLuceneTermPrivate(const QCLuceneTermPrivate &other) - : QSharedData() -{ - term = _CL_POINTER(other.term); - deleteCLuceneTerm = other.deleteCLuceneTerm; -} - -QCLuceneTermPrivate::~QCLuceneTermPrivate() -{ - if (deleteCLuceneTerm) - _CLDECDELETE(term); -} - - -QCLuceneTerm::QCLuceneTerm() - : d(new QCLuceneTermPrivate()) -{ - d->term = new lucene::index::Term(); -} - -QCLuceneTerm::QCLuceneTerm(const QString &field, const QString &text) - : d(new QCLuceneTermPrivate()) -{ - TCHAR *fieldName = QStringToTChar(field); - TCHAR *termText = QStringToTChar(text); - - d->term = new lucene::index::Term(fieldName, termText); - - delete [] fieldName; - delete [] termText; -} - -QCLuceneTerm::QCLuceneTerm(const QCLuceneTerm &fieldTerm, const QString &text) - : d(new QCLuceneTermPrivate()) -{ - TCHAR *termText = QStringToTChar(text); - d->term = new lucene::index::Term(fieldTerm.d->term, termText); - delete [] termText; -} - -QCLuceneTerm::~QCLuceneTerm() -{ - // nothing todo -} - -QString QCLuceneTerm::field() const -{ - return TCharToQString(d->term->field()); -} - -QString QCLuceneTerm::text() const -{ - return TCharToQString(d->term->text()); -} - -void QCLuceneTerm::set(const QString &field, const QString &text) -{ - set(field, text, true); -} - -void QCLuceneTerm::set(const QCLuceneTerm &fieldTerm, const QString &text) -{ - set(fieldTerm.field(), text, false); -} - -void QCLuceneTerm::set(const QString &field, const QString &text, bool internField) -{ - TCHAR *fieldName = QStringToTChar(field); - TCHAR *termText = QStringToTChar(text); - - d->term->set(fieldName, termText, internField); - - delete [] fieldName; - delete [] termText; -} - -bool QCLuceneTerm::equals(const QCLuceneTerm &other) const -{ - return d->term->equals(other.d->term); -} - -qint32 QCLuceneTerm::compareTo(const QCLuceneTerm &other) const -{ - return quint32(d->term->compareTo(other.d->term)); -} - -QString QCLuceneTerm::toString() const -{ - return TCharToQString(d->term->toString()); -} - -quint32 QCLuceneTerm::hashCode() const -{ - return quint32(d->term->hashCode()); -} - -quint32 QCLuceneTerm::textLength() const -{ - return quint32(d->term->textLength()); -} - -QT_END_NAMESPACE diff -Nru qttools-opensource-src-5.7.1/src/assistant/clucene/qterm_p.h qttools-opensource-src-5.9.1/src/assistant/clucene/qterm_p.h --- qttools-opensource-src-5.7.1/src/assistant/clucene/qterm_p.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/clucene/qterm_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,123 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team. -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the QtTools module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QTERM_P_H -#define QTERM_P_H - -// -// W A R N I N G -// ------------- -// -// This file is not part of the Qt API. It exists for the convenience -// of the help generator tools. This header file may change from version -// to version without notice, or even be removed. -// -// We mean it. -// - -#include "qclucene_global_p.h" - -#include -#include -#include - -CL_NS_DEF(index) - class Term; -CL_NS_END -CL_NS_USE(index) - -QT_BEGIN_NAMESPACE - -class QCLuceneTermQuery; -class QCLuceneRangeQuery; -class QCLucenePrefixQuery; -class QCLuceneIndexReader; -class QCLucenePhraseQuery; - -class Q_CLUCENE_EXPORT QCLuceneTermPrivate : public QSharedData -{ -public: - QCLuceneTermPrivate(); - QCLuceneTermPrivate(const QCLuceneTermPrivate &other); - - ~QCLuceneTermPrivate(); - - Term *term; - bool deleteCLuceneTerm; - -private: - QCLuceneTermPrivate &operator=(const QCLuceneTermPrivate &other); -}; - -class Q_CLUCENE_EXPORT QCLuceneTerm -{ -public: - QCLuceneTerm(); - QCLuceneTerm(const QString &field, const QString &text); - QCLuceneTerm(const QCLuceneTerm &fieldTerm, const QString &text); - - virtual ~QCLuceneTerm(); - - QString field() const; - QString text() const; - - void set(const QString &field, const QString &text); - void set(const QCLuceneTerm &fieldTerm, const QString &text); - void set(const QString &field, const QString &text, bool internField); - - bool equals(const QCLuceneTerm &other) const; - qint32 compareTo(const QCLuceneTerm &other) const; - - QString toString() const; - quint32 hashCode() const; - quint32 textLength() const; - -protected: - friend class QCLuceneTermQuery; - friend class QCLuceneRangeQuery; - friend class QCLucenePrefixQuery; - friend class QCLuceneIndexReader; - friend class QCLucenePhraseQuery; - QSharedDataPointer d; -}; - -QT_END_NAMESPACE - -#endif // QTERM_P_H diff -Nru qttools-opensource-src-5.7.1/src/assistant/clucene/qtoken.cpp qttools-opensource-src-5.9.1/src/assistant/clucene/qtoken.cpp --- qttools-opensource-src-5.7.1/src/assistant/clucene/qtoken.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/clucene/qtoken.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,173 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team. -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the QtTools module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qtoken_p.h" -#include "qclucene_global_p.h" - -#include -#include - -QT_BEGIN_NAMESPACE - -QCLuceneTokenPrivate::QCLuceneTokenPrivate() - : QSharedData() -{ - token = 0; - deleteCLuceneToken = true; -} - -QCLuceneTokenPrivate::QCLuceneTokenPrivate(const QCLuceneTokenPrivate &other) - : QSharedData() -{ - token = _CL_POINTER(other.token); - deleteCLuceneToken = other.deleteCLuceneToken; -} - -QCLuceneTokenPrivate::~QCLuceneTokenPrivate() -{ - if (deleteCLuceneToken) - _CLDECDELETE(token); -} - - -QCLuceneToken::QCLuceneToken() - : d(new QCLuceneTokenPrivate()) - , tokenText(0) - , tokenType(0) -{ - d->token = new lucene::analysis::Token(); -} - -QCLuceneToken::QCLuceneToken(const QString &text, qint32 startOffset, - qint32 endOffset, const QString &defaultTyp) - : d(new QCLuceneTokenPrivate()) - , tokenText(QStringToTChar(text)) - , tokenType(QStringToTChar(defaultTyp)) -{ - d->token = new lucene::analysis::Token(tokenText, int32_t(startOffset), - int32_t(endOffset), tokenType); -} - -QCLuceneToken::~QCLuceneToken() -{ - delete [] tokenText; - delete [] tokenType; -} - -quint32 QCLuceneToken::bufferLength() const -{ - return quint32(d->token->bufferLength()); -} - -void QCLuceneToken::growBuffer(quint32 size) -{ - d->token->growBuffer(size_t(size)); -} - -qint32 QCLuceneToken::positionIncrement() const -{ - return qint32(d->token->getPositionIncrement()); -} - -void QCLuceneToken::setPositionIncrement(qint32 positionIncrement) -{ - d->token->setPositionIncrement(int32_t(positionIncrement)); -} - -QString QCLuceneToken::termText() const -{ - return TCharToQString(d->token->termText()); -} - -void QCLuceneToken::setTermText(const QString &text) -{ - delete [] tokenText; - tokenText = QStringToTChar(text); - d->token->setText(tokenText); -} - -quint32 QCLuceneToken::termTextLength() const -{ - return quint32(d->token->termTextLength()); -} - -void QCLuceneToken::resetTermTextLength() const -{ - d->token->resetTermTextLen(); -} - -qint32 QCLuceneToken::startOffset() const -{ - return quint32(d->token->startOffset()); -} - -void QCLuceneToken::setStartOffset(qint32 value) -{ - d->token->setStartOffset(int32_t(value)); -} - -qint32 QCLuceneToken::endOffset() const -{ - return quint32(d->token->endOffset()); -} - -void QCLuceneToken::setEndOffset(qint32 value) -{ - d->token->setEndOffset(int32_t(value)); -} - -QString QCLuceneToken::type() const -{ - return TCharToQString(d->token->type()); -} - -void QCLuceneToken::setType(const QString &type) -{ - delete [] tokenType; - tokenType = QStringToTChar(type); - d->token->setType(tokenType); -} - -QString QCLuceneToken::toString() const -{ - return TCharToQString(d->token->toString()); -} - -QT_END_NAMESPACE diff -Nru qttools-opensource-src-5.7.1/src/assistant/clucene/qtokenizer.cpp qttools-opensource-src-5.9.1/src/assistant/clucene/qtokenizer.cpp --- qttools-opensource-src-5.7.1/src/assistant/clucene/qtokenizer.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/clucene/qtokenizer.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,140 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team. -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the QtTools module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qtokenizer_p.h" -#include "qclucene_global_p.h" - -#include -#include - -QT_BEGIN_NAMESPACE - -QCLuceneTokenizer::QCLuceneTokenizer() - : QCLuceneTokenStream() -{ - // nothing todo -} - -QCLuceneTokenizer::QCLuceneTokenizer(const QCLuceneReader &reader) - : QCLuceneTokenStream() - , reader(reader) -{ - // nothing todo -} - -QCLuceneTokenizer::~QCLuceneTokenizer() -{ - close(); -} - -void QCLuceneTokenizer::close() -{ - d->tokenStream->close(); -} - -bool QCLuceneTokenizer::next(QCLuceneToken &token) -{ - return d->tokenStream->next(token.d->token); -} - - -QCLuceneStandardTokenizer::QCLuceneStandardTokenizer(const QCLuceneReader &reader) - : QCLuceneTokenizer(reader) -{ - d->tokenStream = - new lucene::analysis::standard::StandardTokenizer(reader.d->reader); -} - -QCLuceneStandardTokenizer::~QCLuceneStandardTokenizer() -{ - // nothing todo -} - -bool QCLuceneStandardTokenizer::readApostrophe(const QString &string, - QCLuceneToken &token) -{ - lucene::analysis::standard::StandardTokenizer *stdTokenizer = - static_cast (d->tokenStream); - - if (stdTokenizer == 0) - return false; - - TCHAR* value = QStringToTChar(string); - lucene::util::StringBuffer buffer(value); - bool retValue = stdTokenizer->ReadApostrophe(&buffer, token.d->token); - delete [] value; - - return retValue; -} - -bool QCLuceneStandardTokenizer::readAt(const QString &string, QCLuceneToken &token) -{ - lucene::analysis::standard::StandardTokenizer *stdTokenizer = - static_cast (d->tokenStream); - - if (stdTokenizer == 0) - return false; - - TCHAR* value = QStringToTChar(string); - lucene::util::StringBuffer buffer(value); - bool retValue = stdTokenizer->ReadAt(&buffer, token.d->token); - delete [] value; - - return retValue; -} - -bool QCLuceneStandardTokenizer::readCompany(const QString &string, - QCLuceneToken &token) -{ - lucene::analysis::standard::StandardTokenizer *stdTokenizer = - static_cast (d->tokenStream); - - if (stdTokenizer == 0) - return false; - - TCHAR* value = QStringToTChar(string); - lucene::util::StringBuffer buffer(value); - bool retValue = stdTokenizer->ReadCompany(&buffer, token.d->token); - delete [] value; - - return retValue; -} - -QT_END_NAMESPACE diff -Nru qttools-opensource-src-5.7.1/src/assistant/clucene/qtokenizer_p.h qttools-opensource-src-5.9.1/src/assistant/clucene/qtokenizer_p.h --- qttools-opensource-src-5.7.1/src/assistant/clucene/qtokenizer_p.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/clucene/qtokenizer_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,120 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team. -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the QtTools module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QTOKENIZER_P_H -#define QTOKENIZER_P_H - -// -// W A R N I N G -// ------------- -// -// This file is not part of the Qt API. It exists for the convenience -// of the help generator tools. This header file may change from version -// to version without notice, or even be removed. -// -// We mean it. -// - -#include "qtoken_p.h" -#include "qreader_p.h" -#include "qtokenstream_p.h" -#include "qclucene_global_p.h" - -#include -#include - -QT_BEGIN_NAMESPACE - -class Q_CLUCENE_EXPORT QCLuceneTokenizer : public QCLuceneTokenStream -{ -public: - QCLuceneTokenizer(const QCLuceneReader &reader); - virtual ~QCLuceneTokenizer(); - - void close(); - bool next(QCLuceneToken &token); - -protected: - friend class QCLuceneStandardTokenizer; - -private: - QCLuceneTokenizer(); - QCLuceneReader reader; -}; - -class Q_CLUCENE_EXPORT QCLuceneStandardTokenizer : public QCLuceneTokenizer -{ -public: - QCLuceneStandardTokenizer(const QCLuceneReader &reader); - ~QCLuceneStandardTokenizer(); - - bool readApostrophe(const QString &string, QCLuceneToken &token); - bool readAt(const QString &string, QCLuceneToken &token); - bool readCompany(const QString &string, QCLuceneToken &token); -}; - -class QCLuceneCharTokenizer : public QCLuceneTokenizer -{ - -}; - -class QCLuceneLetterTokenizer : public QCLuceneCharTokenizer -{ - -}; - -class QCLuceneLowerCaseTokenizer : public QCLuceneLetterTokenizer -{ - -}; - -class QCLuceneWhitespaceTokenizer : public QCLuceneCharTokenizer -{ - -}; - -class QCLuceneKeywordTokenizer : public QCLuceneTokenizer -{ - -}; - -QT_END_NAMESPACE - -#endif // QTOKENIZER_P_H diff -Nru qttools-opensource-src-5.7.1/src/assistant/clucene/qtoken_p.h qttools-opensource-src-5.9.1/src/assistant/clucene/qtoken_p.h --- qttools-opensource-src-5.7.1/src/assistant/clucene/qtoken_p.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/clucene/qtoken_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,135 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team. -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the QtTools module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QTOKEN_P_H -#define QTOKEN_P_H - -// -// W A R N I N G -// ------------- -// -// This file is not part of the Qt API. It exists for the convenience -// of the help generator tools. This header file may change from version -// to version without notice, or even be removed. -// -// We mean it. -// - -#include "qclucene_global_p.h" - -#include -#include -#include - -CL_NS_DEF(analysis) - class Token; -CL_NS_END -CL_NS_USE(analysis) - -QT_BEGIN_NAMESPACE - -class QCLuceneTokenizer; -class QCLuceneTokenStream; -class QCLuceneStandardTokenizer; - -class Q_CLUCENE_EXPORT QCLuceneTokenPrivate : public QSharedData -{ -public: - QCLuceneTokenPrivate(); - QCLuceneTokenPrivate(const QCLuceneTokenPrivate &other); - - ~QCLuceneTokenPrivate(); - - Token *token; - bool deleteCLuceneToken; - -private: - QCLuceneTokenPrivate &operator=(const QCLuceneTokenPrivate &other); -}; - -class Q_CLUCENE_EXPORT QCLuceneToken -{ -public: - QCLuceneToken(); - QCLuceneToken(const QString &text, qint32 startOffset, - qint32 endOffset, const QString &defaultTyp = QLatin1String("word")); - - virtual ~QCLuceneToken(); - - void set(const QString &text, qint32 startOffset, - qint32 endOffset, const QString &defaultTyp = QLatin1String("word")); - - quint32 bufferLength() const; - void growBuffer(quint32 size); - - qint32 positionIncrement() const; - void setPositionIncrement(qint32 positionIncrement); - - QString termText() const; - void setTermText(const QString &text); - - quint32 termTextLength() const; - void resetTermTextLength() const; - - qint32 startOffset() const; - void setStartOffset(qint32 value); - - qint32 endOffset() const; - void setEndOffset(qint32 value); - - QString type() const; - void setType(const QString &type); - - QString toString() const; - -protected: - friend class QCLuceneTokenizer; - friend class QCLuceneTokenStream; - friend class QCLuceneStandardTokenizer; - QSharedDataPointer d; - -private: - TCHAR *tokenText; - TCHAR *tokenType; -}; - -QT_END_NAMESPACE - -#endif // QTOKEN_P_H diff -Nru qttools-opensource-src-5.7.1/src/assistant/clucene/qtokenstream.cpp qttools-opensource-src-5.9.1/src/assistant/clucene/qtokenstream.cpp --- qttools-opensource-src-5.7.1/src/assistant/clucene/qtokenstream.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/clucene/qtokenstream.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,90 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team. -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the QtTools module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qtokenstream_p.h" - -#include -#include - -QT_BEGIN_NAMESPACE - -QCLuceneTokenStreamPrivate::QCLuceneTokenStreamPrivate() - : QSharedData() -{ - tokenStream = 0; - deleteCLuceneTokenStream = true; -} - -QCLuceneTokenStreamPrivate::QCLuceneTokenStreamPrivate(const QCLuceneTokenStreamPrivate &other) - : QSharedData() -{ - tokenStream = _CL_POINTER(other.tokenStream); - deleteCLuceneTokenStream = other.deleteCLuceneTokenStream; -} - -QCLuceneTokenStreamPrivate::~QCLuceneTokenStreamPrivate() -{ - if (deleteCLuceneTokenStream) - _CLDECDELETE(tokenStream); -} - - -QCLuceneTokenStream::QCLuceneTokenStream() - : d(new QCLuceneTokenStreamPrivate()) -{ - // nothing todo -} - -QCLuceneTokenStream::~QCLuceneTokenStream() -{ - // nothing todo -} - -void QCLuceneTokenStream::close() -{ - d->tokenStream->close(); -} - -bool QCLuceneTokenStream::next(QCLuceneToken &token) -{ - return d->tokenStream->next(token.d->token); -} - -QT_END_NAMESPACE diff -Nru qttools-opensource-src-5.7.1/src/assistant/clucene/qtokenstream_p.h qttools-opensource-src-5.9.1/src/assistant/clucene/qtokenstream_p.h --- qttools-opensource-src-5.7.1/src/assistant/clucene/qtokenstream_p.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/clucene/qtokenstream_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,118 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team. -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the QtTools module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QTOKENSTREAM_P_H -#define QTOKENSTREAM_P_H - -// -// W A R N I N G -// ------------- -// -// This file is not part of the Qt API. It exists for the convenience -// of the help generator tools. This header file may change from version -// to version without notice, or even be removed. -// -// We mean it. -// - -#include "qtoken_p.h" -#include "qclucene_global_p.h" - -#include -#include -#include - -CL_NS_DEF(analysis) - class TokenStream; -CL_NS_END -CL_NS_USE(analysis) - -QT_BEGIN_NAMESPACE - -class QCLuceneAnalyzer; -class QCLuceneTokenizer; -class QCLuceneStopAnalyzer; -class QCLuceneSimpleAnalyzer; -class QCLuceneKeywordAnalyzer; -class QCLuceneStandardAnalyzer; -class QCLuceneWhitespaceAnalyzer; -class QCLucenePerFieldAnalyzerWrapper; - -class Q_CLUCENE_EXPORT QCLuceneTokenStreamPrivate : public QSharedData -{ -public: - QCLuceneTokenStreamPrivate(); - QCLuceneTokenStreamPrivate(const QCLuceneTokenStreamPrivate &other); - - ~QCLuceneTokenStreamPrivate(); - - TokenStream *tokenStream; - bool deleteCLuceneTokenStream; - -private: - QCLuceneTokenStreamPrivate &operator=(const QCLuceneTokenStreamPrivate &other); -}; - -class Q_CLUCENE_EXPORT QCLuceneTokenStream -{ -public: - virtual ~QCLuceneTokenStream(); - - void close(); - bool next(QCLuceneToken &token); - -protected: - friend class QCLuceneAnalyzer; - friend class QCLuceneTokenizer; - friend class QCLuceneStopAnalyzer; - friend class QCLuceneSimpleAnalyzer; - friend class QCLuceneKeywordAnalyzer; - friend class QCLuceneStandardAnalyzer; - friend class QCLuceneWhitespaceAnalyzer; - friend class QCLucenePerFieldAnalyzerWrapper; - QSharedDataPointer d; - -private: - QCLuceneTokenStream(); -}; - -QT_END_NAMESPACE - -#endif // QTOKENSTREAM_P_H diff -Nru qttools-opensource-src-5.7.1/src/assistant/help/doc/qthelp.qdocconf qttools-opensource-src-5.9.1/src/assistant/help/doc/qthelp.qdocconf --- qttools-opensource-src-5.7.1/src/assistant/help/doc/qthelp.qdocconf 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/help/doc/qthelp.qdocconf 2017-06-23 12:03:39.000000000 +0000 @@ -29,7 +29,7 @@ headerdirs += .. -sourcedirs = .. +sourcedirs += .. exampledirs = ../../../../examples/help \ snippets diff -Nru qttools-opensource-src-5.7.1/src/assistant/help/doc/src/qthelp-index.qdoc qttools-opensource-src-5.9.1/src/assistant/help/doc/src/qthelp-index.qdoc --- qttools-opensource-src-5.7.1/src/assistant/help/doc/src/qthelp-index.qdoc 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/help/doc/src/qthelp-index.qdoc 2017-06-23 12:03:39.000000000 +0000 @@ -58,36 +58,11 @@ \section1 License Information - Qt Help uses the CLucene indexing library to provide full-text searching - capabilities for Qt Assistant and applications that use Qt Help features. - - Developers using the \l{Qt Commercial License} who wish to distribute - applications that use the Qt Help features need to be aware of their - obligations under the GNU Lesser General Public License (LGPL). - - Developers using the Open Source Edition can choose to redistribute - the module under the appropriate version of the GNU LGPL; version 2.1 - for applications and libraries licensed under the GNU GPL version 2, - or version 3 for applications and libraries licensed under the GNU - GPL version 3. - - \legalese - Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team \BR - Changes are Copyright (C) 2016 The Qt Company Ltd. - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - \endlegalese + Qt Core is available under commercial licenses from \l{The Qt Company}. + In addition, it is available under the + \l{GNU Lesser General Public License, version 3}, or + the \l{GNU General Public License, version 2}. + See \l{Qt Licensing} for further details. + \generatelist{groupsbymodule attributions-qthelp} */ diff -Nru qttools-opensource-src-5.7.1/src/assistant/help/doc/src/qthelp.qdoc qttools-opensource-src-5.9.1/src/assistant/help/doc/src/qthelp.qdoc --- qttools-opensource-src-5.7.1/src/assistant/help/doc/src/qthelp.qdoc 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/help/doc/src/qthelp.qdoc 2017-06-23 12:03:39.000000000 +0000 @@ -59,37 +59,37 @@ \section1 Overview The Qt help system includes tools for generating and viewing - Qt help files. In addition it provides classes for accessing - help contents programatically to be able to integrate online + Qt help files. In addition, it provides classes for accessing + help contents programmatically to be able to integrate online help into Qt applications. The actual help data, meaning the table of contents, index - keywords or HTML documents, is contained in Qt compressed help + keywords, or HTML documents, is contained in Qt compressed help files. So, one such a help file represents usually one manual or documentation set. Since most products are more comprehensive and consist of a number of tools, one manual is rarely enough. - Instead, more manuals which should be accessible at the same + Instead, more manuals, which should be accessible at the same time, exist. Ideally, it should also be possible to reference certain points of interest of one manual to another. - Therefore, the Qt help system operates on help collection files + Therefore, the Qt help system operates on help collection files, which include any number of compressed help files. However, having collection files to merge many documentation sets may lead to some problems. For example, one index keyword - may be defined in different documentations. So, when only seeing - it in the index and activating it, you cannot be sure that + may be defined in different documentation sets. So, when only seeing + a keyword in the index and activating it, you cannot be sure that the expected documentation will be shown. Therefore, the Qt - help system offers the possibiltiy to filter the help contents - after certain attributes. This requires however, that the + help system offers the possibility to filter the help contents + after certain attributes. This requires, however, that the attributes have been assigned to the help contents before the generation of the compressed help file. As already mentioned, the Qt compressed help file contains all - data, so there is no need any longer to ship all single HTML - files. Instead, only the compressed help file and optionally the - collection file has to be distributed. The collection file is - optional since any existing collection file, e.g. from an older - release could be used. + data, so there is no need any longer to ship all the single HTML + files. Instead, only the compressed help file and, optionally, the + collection file have to be distributed. The collection file is + optional since any existing collection file, for example from an older + release, could be used. So, in general, there are four files interacting with the help system, two used for generating Qt help and two meant for @@ -104,22 +104,22 @@ \li \l {Qt Help Project} \li .qhp \li The input file for the help generator consisting of the table - of contents, indices and references to the actual documentation - files (*.html); it also defines a unique namespace for the + of contents, indices, and references to the actual documentation + files (*.html). It also defines a unique namespace for the documentation. \row \li Qt Compressed Help \li .qch \li The output file of the help generator. This binary file contains - all information specified in the help project file along with all - compressed documentation files. + all the information specified in the help project file along with + all the compressed documentation files. \row \li \l {Qt Help Collection Project} \li .qhcp \li The input file for the help collection generator. It contains - references to compressed help files which should be included in + references to the compressed help files that should be included in the collection; it also may contain other information for customizing Qt Assistant. @@ -138,15 +138,15 @@ documentation files already exist. Once the HTML documents are in place, a \l {Qt Help Project} file, with - an extension of \c .qhp, has to be created. After specifying all relevant + an extension of \c .qhp, has to be created. After specifying all the relevant information in this file, it needs to be compiled by calling: \snippet doc_src_qthelp.qdoc 2 - The file 'doc.qch' contains then all HTML files in compressed + The file \e doc.qch contains all the HTML files in compressed form along with the table of contents and index keywords. To test if the generated file is correct, open Qt Assistant and - install the file via the Settings|Documentation page. + install the file in \uicontrol Settings > \uicontrol Documentation. For the standard Qt source build, the .qhp file is generated and placed in the same directory as the HTML pages. @@ -156,7 +156,7 @@ The first step is to create a Qt Help Collection Project file. Since a Qt help collection stores primarily references to - compressed help files, the project 'mycollection.qhcp' file + compressed help files, the project \e mycollection.qhcp file looks unsurprisingly simple: \snippet doc_src_qthelp.qdoc 3 @@ -166,7 +166,7 @@ \snippet doc_src_qthelp.qdoc 4 Instead of running two tools, one for generating the compressed - help and one for generating the collection file, it is also + help and another for generating the collection file, it is also possible to just run the qcollectiongenerator tool with a slightly modified project file instructing the generator to create the compressed help first. @@ -174,7 +174,7 @@ \snippet doc_src_qthelp.qdoc 5 Of course, it is possible to specify more than one file in the - 'generate' or 'register' section, so any number of compressed + \c generate or \c register section, so any number of compressed help files can be generated and registered in one go. \section1 Using Qt Help @@ -186,16 +186,16 @@ \section2 Using Qt Assistant \QA operates on a collection file which can be specified - before start up. If no collection file is given, a default one + before startup. If no collection file is given, a default one will be created and used. In either case, it is possible to register any Qt compressed help file and access the help contents. When using Qt Assistant as the help browser for an application, it - would be desirable that it can be customized to fit better to the - application and doesn't look like an independent, standalone + should be possible to customize it to fit the application + better, so that it does not look like an independent, standalone help browser. To achieve this, several additional properties can - be set in an Qt help collection file, to change e.g. the title - or application icon of Qt Assistant. For more information,see the + be set in a Qt help collection file, to change for example the title + or application icon of Qt Assistant. For more information, see the \l{Qt Assistant Manual}. \section2 Using QHelpEngine API @@ -204,16 +204,16 @@ Qt Assistant, it is also possible to embed the online help in the application. The contents can then be retrieved via the QHelpEngine class and can be displayed in nearly any form. - Showing it in a QTextBrowser is probably the most common way, but + Showing the help in a QTextBrowser is probably the most common way, but embedding it in What's This help is also perfectly possible. Retrieving help data from the file engine does not involve a lot of code. The first step is to create an instance of the help engine. Then we ask the engine for the links assigned to - the identifier, in this case "MyDialog::ChangeButton". If a link - was found, meaning at least one help document exists to this topic, - we get the actual help contents by calling fileData() and display - the document to the user. + the identifier, in this case \c MyDialog::ChangeButton. If a link + was found, meaning at least one help document exists on this topic, + we get the actual help contents by calling QHelpEngineCore::fileData() and + display the document to the user. \snippet doc_src_qthelp.cpp 6 diff -Nru qttools-opensource-src-5.7.1/src/assistant/help/help.pro qttools-opensource-src-5.9.1/src/assistant/help/help.pro --- qttools-opensource-src-5.7.1/src/assistant/help/help.pro 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/help/help.pro 2017-06-23 12:03:39.000000000 +0000 @@ -1,17 +1,14 @@ TARGET = QtHelp -QT = core-private gui widgets -QT_PRIVATE = network sql clucene-private +QT = core-private gui widgets sql +QT_PRIVATE = network -DEFINES += QHELP_LIB QT_CLUCENE_SUPPORT +DEFINES += QHELP_LIB QMAKE_DOCS = $$PWD/doc/qthelp.qdocconf DEFINES -= QT_ASCII_CAST_WARNINGS -# impossible to disable exceptions in clucene atm and use help lib without -CONFIG += exceptions - RESOURCES += helpsystem.qrc SOURCES += qhelpenginecore.cpp \ qhelpengine.cpp \ @@ -25,16 +22,11 @@ qhelpsearchengine.cpp \ qhelpsearchquerywidget.cpp \ qhelpsearchresultwidget.cpp \ - qhelpsearchindex_default.cpp \ qhelpsearchindexwriter_default.cpp \ qhelpsearchindexreader_default.cpp \ qhelpsearchindexreader.cpp \ - qclucenefieldnames.cpp \ qhelp_global.cpp -# access to clucene -SOURCES += qhelpsearchindexwriter_clucene.cpp \ - qhelpsearchindexreader_clucene.cpp HEADERS += qhelpenginecore.h \ qhelpengine.h \ qhelpengine_p.h \ @@ -49,14 +41,8 @@ qhelpsearchengine.h \ qhelpsearchquerywidget.h \ qhelpsearchresultwidget.h \ - qhelpsearchindex_default_p.h \ qhelpsearchindexwriter_default_p.h \ qhelpsearchindexreader_default_p.h \ - qhelpsearchindexreader_p.h \ - qclucenefieldnames_p.h - -# access to clucene -HEADERS += qhelpsearchindexwriter_clucene_p.h \ - qhelpsearchindexreader_clucene_p.h + qhelpsearchindexreader_p.h load(qt_module) diff -Nru qttools-opensource-src-5.7.1/src/assistant/help/qclucenefieldnames.cpp qttools-opensource-src-5.9.1/src/assistant/help/qclucenefieldnames.cpp --- qttools-opensource-src-5.7.1/src/assistant/help/qclucenefieldnames.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/help/qclucenefieldnames.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,55 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the Qt Assistant of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qclucenefieldnames_p.h" - -QT_BEGIN_NAMESPACE - -namespace fulltextsearch { -namespace clucene { -const QString AttributeField(QLatin1String("attribute")); -const QString ContentField(QLatin1String("content")); -const QString NamespaceField(QLatin1String("namespace")); -const QString PathField(QLatin1String("path")); -const QString TitleField(QLatin1String("title")); -const QString TitleTokenizedField(QLatin1String("titleTokenized")); -} // namespace clucene -} // namespace fulltextsearch - -QT_END_NAMESPACE diff -Nru qttools-opensource-src-5.7.1/src/assistant/help/qclucenefieldnames_p.h qttools-opensource-src-5.9.1/src/assistant/help/qclucenefieldnames_p.h --- qttools-opensource-src-5.7.1/src/assistant/help/qclucenefieldnames_p.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/help/qclucenefieldnames_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,72 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the Qt Assistant of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QCLUCENEFIELDNAMES_P_H -#define QCLUCENEFIELDNAMES_P_H - -// -// W A R N I N G -// ------------- -// -// This file is not part of the Qt API. It exists purely as an -// implementation detail. This header file may change from version to -// version without notice, or even be removed. -// -// We mean it. -// - -#include -#include - -QT_BEGIN_NAMESPACE - -namespace fulltextsearch { -namespace clucene { - extern const QString AttributeField; - extern const QString ContentField; - extern const QString NamespaceField; - extern const QString PathField; - extern const QString TitleField; - extern const QString TitleTokenizedField; -} // namespace clucene -} // namespace fulltextsearch - -QT_END_NAMESPACE - -#endif // QCLUCENEFIELDNAMES_P_H diff -Nru qttools-opensource-src-5.7.1/src/assistant/help/qhelpcollectionhandler.cpp qttools-opensource-src-5.9.1/src/assistant/help/qhelpcollectionhandler.cpp --- qttools-opensource-src-5.7.1/src/assistant/help/qhelpcollectionhandler.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/help/qhelpcollectionhandler.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -55,12 +55,10 @@ : QObject(parent) , m_dbOpened(false) , m_collectionFile(collectionFile) - , m_connectionName(QString()) { - QFileInfo fi(m_collectionFile); + const QFileInfo fi(m_collectionFile); if (!fi.isAbsolute()) m_collectionFile = fi.absoluteFilePath(); - m_query.clear(); } QHelpCollectionHandler::~QHelpCollectionHandler() @@ -134,7 +132,7 @@ if (!m_dbOpened) return false; - QFileInfo fi(fileName); + const QFileInfo fi(fileName); if (fi.exists()) { emit error(tr("The collection file '%1' already exists."). arg(fileName)); @@ -146,9 +144,9 @@ return false; } - QString colFile = fi.absoluteFilePath(); - QString connectionName = QHelpGlobal::uniquifyConnectionName( - QLatin1String("QHelpCollectionHandlerCopy"), this); + const QString &colFile = fi.absoluteFilePath(); + const QString &connectionName = QHelpGlobal::uniquifyConnectionName( + QLatin1String("QHelpCollectionHandlerCopy"), this); QSqlQuery *copyQuery = 0; bool openingOk = true; { @@ -172,14 +170,13 @@ return false; } - QString oldBaseDir = QFileInfo(collectionFile()).absolutePath(); - QString oldFilePath; - QFileInfo newColFi(colFile); + const QString &oldBaseDir = QFileInfo(collectionFile()).absolutePath(); + const QFileInfo newColFi(colFile); m_query.exec(QLatin1String("SELECT Name, FilePath FROM NamespaceTable")); while (m_query.next()) { copyQuery->prepare(QLatin1String("INSERT INTO NamespaceTable VALUES(NULL, ?, ?)")); copyQuery->bindValue(0, m_query.value(0).toString()); - oldFilePath = m_query.value(1).toString(); + QString oldFilePath = m_query.value(1).toString(); if (!QDir::isAbsolutePath(oldFilePath)) oldFilePath = oldBaseDir + QDir::separator() + oldFilePath; copyQuery->bindValue(1, newColFi.absoluteDir().relativeFilePath(oldFilePath)); @@ -218,7 +215,7 @@ m_query.exec(QLatin1String("SELECT Key, Value FROM SettingsTable")); while (m_query.next()) { - if (m_query.value(0).toString() == QLatin1String("CluceneSearchNamespaces")) + if (m_query.value(0).toString() == QLatin1String("FTS5IndexedNamespaces")) continue; copyQuery->prepare(QLatin1String("INSERT INTO SettingsTable VALUES(?, ?)")); copyQuery->bindValue(0, m_query.value(0).toString()); @@ -234,29 +231,29 @@ bool QHelpCollectionHandler::createTables(QSqlQuery *query) { - QStringList tables; - tables << QLatin1String("CREATE TABLE NamespaceTable (" - "Id INTEGER PRIMARY KEY, " - "Name TEXT, " - "FilePath TEXT )") - << QLatin1String("CREATE TABLE FolderTable (" - "Id INTEGER PRIMARY KEY, " - "NamespaceId INTEGER, " - "Name TEXT )") - << QLatin1String("CREATE TABLE FilterAttributeTable (" - "Id INTEGER PRIMARY KEY, " - "Name TEXT )") - << QLatin1String("CREATE TABLE FilterNameTable (" - "Id INTEGER PRIMARY KEY, " - "Name TEXT )") - << QLatin1String("CREATE TABLE FilterTable (" - "NameId INTEGER, " - "FilterAttributeId INTEGER )") - << QLatin1String("CREATE TABLE SettingsTable (" - "Key TEXT PRIMARY KEY, " - "Value BLOB )"); + const QStringList tables = QStringList() + << QLatin1String("CREATE TABLE NamespaceTable (" + "Id INTEGER PRIMARY KEY, " + "Name TEXT, " + "FilePath TEXT )") + << QLatin1String("CREATE TABLE FolderTable (" + "Id INTEGER PRIMARY KEY, " + "NamespaceId INTEGER, " + "Name TEXT )") + << QLatin1String("CREATE TABLE FilterAttributeTable (" + "Id INTEGER PRIMARY KEY, " + "Name TEXT )") + << QLatin1String("CREATE TABLE FilterNameTable (" + "Id INTEGER PRIMARY KEY, " + "Name TEXT )") + << QLatin1String("CREATE TABLE FilterTable (" + "NameId INTEGER, " + "FilterAttributeId INTEGER )") + << QLatin1String("CREATE TABLE SettingsTable (" + "Key TEXT PRIMARY KEY, " + "Value BLOB )"); - foreach (const QString &q, tables) { + for (const QString &q : tables) { if (!query->exec(q)) return false; } @@ -325,7 +322,7 @@ idsToInsert.removeAll(m_query.value(1).toString()); } - foreach (const QString &id, idsToInsert) { + for (const QString &id : qAsConst(idsToInsert)) { m_query.prepare(QLatin1String("INSERT INTO FilterAttributeTable VALUES(NULL, ?)")); m_query.bindValue(0, id); m_query.exec(); @@ -348,7 +345,7 @@ m_query.bindValue(0, nameId); m_query.exec(); - foreach (const QString &att, attributes) { + for (const QString &att : attributes) { m_query.prepare(QLatin1String("INSERT INTO FilterTable VALUES(?, ?)")); m_query.bindValue(0, nameId); m_query.bindValue(1, attributeMap[att]); @@ -388,13 +385,13 @@ return false; } - QString ns = reader.namespaceName(); + const QString &ns = reader.namespaceName(); if (ns.isEmpty()) { emit error(tr("Invalid documentation file '%1'.").arg(fileName)); return false; } - int nsId = registerNamespace(ns, fileName); + const int nsId = registerNamespace(ns, fileName); if (nsId < 1) return false; @@ -402,7 +399,7 @@ return false; addFilterAttributes(reader.filterAttributes()); - foreach (const QString &filterName, reader.customFilters()) + for (const QString &filterName : reader.customFilters()) addCustomFilter(filterName, reader.filterAttributes(filterName)); optimizeDatabase(fileName); @@ -419,15 +416,13 @@ m_query.bindValue(0, namespaceName); m_query.exec(); - int nsId = -1; - if (m_query.next()) - nsId = m_query.value(0).toInt(); - - if (nsId < 0) { + if (!m_query.next()) { emit error(tr("The namespace %1 was not registered.").arg(namespaceName)); return false; } + const int nsId = m_query.value(0).toInt(); + m_query.prepare(QLatin1String("DELETE FROM NamespaceTable WHERE Id=?")); m_query.bindValue(0, nsId); m_query.exec(); @@ -450,23 +445,26 @@ QVariant QHelpCollectionHandler::customValue(const QString &key, const QVariant &defaultValue) const { - QVariant value = defaultValue; - if (m_dbOpened) { - m_query.prepare(QLatin1String("SELECT COUNT(Key) FROM SettingsTable WHERE Key=?")); - m_query.bindValue(0, key); - if (!m_query.exec() || !m_query.next() || !m_query.value(0).toInt()) { - m_query.clear(); - return defaultValue; - } + if (!m_dbOpened) + return defaultValue; + m_query.prepare(QLatin1String("SELECT COUNT(Key) FROM SettingsTable WHERE Key=?")); + m_query.bindValue(0, key); + if (!m_query.exec() || !m_query.next() || !m_query.value(0).toInt()) { m_query.clear(); - m_query.prepare(QLatin1String("SELECT Value FROM SettingsTable WHERE Key=?")); - m_query.bindValue(0, key); - if (m_query.exec() && m_query.next()) - value = m_query.value(0); + return defaultValue; + } + + m_query.clear(); + m_query.prepare(QLatin1String("SELECT Value FROM SettingsTable WHERE Key=?")); + m_query.bindValue(0, key); + if (m_query.exec() && m_query.next()) { + const QVariant &value = m_query.value(0); m_query.clear(); + return value; } - return value; + + return defaultValue; } bool QHelpCollectionHandler::setCustomValue(const QString &key, @@ -482,8 +480,7 @@ m_query.prepare(QLatin1String("UPDATE SettingsTable SET Value=? where Key=?")); m_query.bindValue(0, value); m_query.bindValue(1, key); - } - else { + } else { m_query.prepare(QLatin1String("INSERT INTO SettingsTable VALUES(?, ?)")); m_query.bindValue(0, key); m_query.bindValue(1, value); @@ -501,7 +498,7 @@ while (m_query.next()) atts.insert(m_query.value(0).toString()); - foreach (const QString &s, attributes) { + for (const QString &s : attributes) { if (!atts.contains(s)) { m_query.prepare(QLatin1String("INSERT INTO FilterAttributeTable VALUES(NULL, ?)")); m_query.bindValue(0, s); @@ -585,7 +582,6 @@ return; } - QSqlQuery query(db); db.exec(QLatin1String("PRAGMA synchronous=OFF")); db.exec(QLatin1String("PRAGMA cache_size=3000")); db.exec(QLatin1String("CREATE INDEX IF NOT EXISTS NameIndex ON IndexTable(Name)")); diff -Nru qttools-opensource-src-5.7.1/src/assistant/help/qhelpcontentwidget.cpp qttools-opensource-src-5.9.1/src/assistant/help/qhelpcontentwidget.cpp --- qttools-opensource-src-5.7.1/src/assistant/help/qhelpcontentwidget.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/help/qhelpcontentwidget.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -55,13 +55,15 @@ public: QHelpContentItemPrivate(const QString &t, const QString &l, QHelpDBReader *r, QHelpContentItem *p) + : parent(p), + title(t), + link(l), + helpDBReader(r) { - parent = p; - title = t; - link = l; - helpDBReader = r; } + void appendChild(QHelpContentItem *item) { childItems.append(item); } + QList childItems; QHelpContentItem *parent; QString title; @@ -83,7 +85,7 @@ void finishedSuccessFully(); private: - void run(); + void run() override; QHelpEnginePrivate *m_helpEngine; QStringList m_filterAttributes; @@ -95,7 +97,7 @@ class QHelpContentModelPrivate { public: - QHelpContentItem *rootItem; + QHelpContentItem *rootItem = nullptr; QHelpContentProvider *qhelpContentProvider; }; @@ -123,11 +125,6 @@ delete d; } -void QHelpContentItem::appendChild(QHelpContentItem *item) -{ - d->childItems.append(item); -} - /*! Returns the child of the content item in the give \a row. @@ -135,8 +132,6 @@ */ QHelpContentItem *QHelpContentItem::child(int row) const { - if (row >= childCount()) - return 0; return d->childItems.value(row); } @@ -255,7 +250,7 @@ const QStringList fileNames = m_helpEngine->orderedFileNameList; m_mutex.unlock(); - foreach (const QString &dbFileName, fileNames) { + for (const QString &dbFileName : fileNames) { m_mutex.lock(); if (m_abort) { delete rootItem; @@ -270,7 +265,7 @@ QThread::currentThread()), 0); if (!reader.init()) continue; - foreach (const QByteArray& ba, reader.contentsForFilter(atts)) { + for (const QByteArray &ba : reader.contentsForFilter(atts)) { if (ba.size() < 1) continue; @@ -290,7 +285,7 @@ m_mutex.lock(); item = new QHelpContentItem(title, link, m_helpEngine->fileNameReaderMap.value(dbFileName), rootItem); - rootItem->appendChild(item); + rootItem->d->appendChild(item); m_mutex.unlock(); stack.push(item); _depth = 1; @@ -303,7 +298,7 @@ if (depth == _depth) { item = new QHelpContentItem(title, link, m_helpEngine->fileNameReaderMap.value(dbFileName), stack.top()); - stack.top()->appendChild(item); + stack.top()->d->appendChild(item); } else if (depth < _depth) { stack.pop(); --_depth; @@ -349,12 +344,12 @@ : QAbstractItemModel(helpEngine) { d = new QHelpContentModelPrivate(); - d->rootItem = 0; d->qhelpContentProvider = new QHelpContentProvider(helpEngine); - connect(d->qhelpContentProvider, SIGNAL(finishedSuccessFully()), - this, SLOT(insertContents()), Qt::QueuedConnection); - connect(helpEngine->q, SIGNAL(readersAboutToBeInvalidated()), this, SLOT(invalidateContents())); + connect(d->qhelpContentProvider, &QHelpContentProvider::finishedSuccessFully, + this, &QHelpContentModel::insertContents, Qt::QueuedConnection); + connect(helpEngine->q, &QHelpEngineCore::readersAboutToBeInvalidated, + [this]() { invalidateContents(); }); } /*! @@ -369,7 +364,8 @@ void QHelpContentModel::invalidateContents(bool onShutDown) { if (onShutDown) { - disconnect(this, SLOT(insertContents())); + disconnect(d->qhelpContentProvider, &QHelpContentProvider::finishedSuccessFully, + this, &QHelpContentModel::insertContents); } else { beginResetModel(); } @@ -398,8 +394,7 @@ if (!newRootItem) return; beginResetModel(); - if (d->rootItem) - delete d->rootItem; + delete d->rootItem; d->rootItem = newRootItem; endResetModel(); emit contentsCreated(); @@ -521,8 +516,8 @@ { header()->hide(); setUniformRowHeights(true); - connect(this, SIGNAL(activated(QModelIndex)), - this, SLOT(showLink(QModelIndex))); + connect(this, &QAbstractItemView::activated, + this, &QHelpContentWidget::showLink); } /*! @@ -558,7 +553,7 @@ return true; } - for (int i=0; ichildCount(); ++i) { + for (int i = 0; i < parentItem->childCount(); ++i) { if (searchContentItem(model, model->index(i, 0, parent), cleanPath)) return true; } diff -Nru qttools-opensource-src-5.7.1/src/assistant/help/qhelpcontentwidget.h qttools-opensource-src-5.9.1/src/assistant/help/qhelpcontentwidget.h --- qttools-opensource-src-5.7.1/src/assistant/help/qhelpcontentwidget.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/help/qhelpcontentwidget.h 2017-06-23 12:03:39.000000000 +0000 @@ -72,7 +72,6 @@ private: QHelpContentItem(const QString &name, const QString &link, QHelpDBReader *reader, QHelpContentItem *parent = Q_NULLPTR); - void appendChild(QHelpContentItem *child); QHelpContentItemPrivate *d; friend class QHelpContentProvider; @@ -88,12 +87,12 @@ void createContents(const QString &customFilterName); QHelpContentItem *contentItemAt(const QModelIndex &index) const; - QVariant data(const QModelIndex &index, int role) const; + QVariant data(const QModelIndex &index, int role) const override; QModelIndex index(int row, int column, - const QModelIndex &parent = QModelIndex()) const; - QModelIndex parent(const QModelIndex &index) const; - int rowCount(const QModelIndex &parent = QModelIndex()) const; - int columnCount(const QModelIndex &parent = QModelIndex()) const; + const QModelIndex &parent = QModelIndex()) const override; + QModelIndex parent(const QModelIndex &index) const override; + int rowCount(const QModelIndex &parent = QModelIndex()) const override; + int columnCount(const QModelIndex &parent = QModelIndex()) const override; bool isCreatingContents() const; Q_SIGNALS: diff -Nru qttools-opensource-src-5.7.1/src/assistant/help/qhelpdatainterface.cpp qttools-opensource-src-5.9.1/src/assistant/help/qhelpdatainterface.cpp --- qttools-opensource-src-5.7.1/src/assistant/help/qhelpdatainterface.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/help/qhelpdatainterface.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -99,14 +99,11 @@ return m_children; } -bool QHelpDataIndexItem::operator==(const QHelpDataIndexItem & other) const +bool QHelpDataIndexItem::operator==(const QHelpDataIndexItem &other) const { - return (other.name == name) - && (other.reference == reference); + return (other.name == name) && (other.reference == reference); } - - /*! \internal \class QHelpDataFilterSection diff -Nru qttools-opensource-src-5.7.1/src/assistant/help/qhelpdbreader.cpp qttools-opensource-src-5.9.1/src/assistant/help/qhelpdbreader.cpp --- qttools-opensource-src-5.7.1/src/assistant/help/qhelpdbreader.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/help/qhelpdbreader.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -48,27 +48,19 @@ QT_BEGIN_NAMESPACE QHelpDBReader::QHelpDBReader(const QString &dbName) - : QObject(0) + : QObject(0), + m_dbName(dbName), + m_uniqueId(QHelpGlobal::uniquifyConnectionName(QLatin1String("QHelpDBReader"), + this)) { - initObject(dbName, - QHelpGlobal::uniquifyConnectionName(QLatin1String("QHelpDBReader"), - this)); } QHelpDBReader::QHelpDBReader(const QString &dbName, const QString &uniqueId, QObject *parent) - : QObject(parent) + : QObject(parent), + m_dbName(dbName), + m_uniqueId(uniqueId) { - initObject(dbName, uniqueId); -} - -void QHelpDBReader::initObject(const QString &dbName, const QString &uniqueId) -{ - m_dbName = dbName; - m_uniqueId = uniqueId; - m_initDone = false; - m_query = 0; - m_useAttributesCache = false; } QHelpDBReader::~QHelpDBReader() @@ -145,7 +137,7 @@ "FilterAttributeTable b WHERE a.FilterAttributeId=b.Id ORDER BY a.Id")); int oldId = -1; while (m_query->next()) { - int id = m_query->value(0).toInt(); + const int id = m_query->value(0).toInt(); if (id != oldId) { result.append(QStringList()); oldId = id; @@ -177,7 +169,7 @@ "c.FilterAttributeId=d.Id AND d.Name=\'%3\'")) .arg(quote(virtualFolder)).arg(quote(filePath)) .arg(quote(filterAttributes.first())); - for (int i=1; i &linkMap) const +void QHelpDBReader::linksForKeyword(const QString &keyword, + const QStringList &filterAttributes, + QMap *linkMap) const { if (!m_query) return; @@ -297,7 +290,7 @@ m_query->exec(query); while (m_query->next()) { if (m_indicesCache.contains(m_query->value(5).toInt())) { - linkMap.insertMulti(m_query->value(0).toString(), buildQUrl(m_query->value(1).toString(), + linkMap->insertMulti(m_query->value(0).toString(), buildQUrl(m_query->value(1).toString(), m_query->value(2).toString(), m_query->value(3).toString(), m_query->value(4).toString())); } @@ -311,7 +304,7 @@ "AND a.NamespaceId=f.Id AND b.IndexId=a.Id AND b.FilterAttributeId=c.Id " "AND a.Name='%1' AND c.Name='%2'")).arg(quote(keyword)) .arg(quote(filterAttributes.first())); - for (int i=1; ivalue(0).toString(); if (title.isEmpty()) // generate a title + corresponding path title = keyword + QLatin1String(" : ") + m_query->value(3).toString(); - linkMap.insertMulti(title, buildQUrl(m_query->value(1).toString(), + linkMap->insertMulti(title, buildQUrl(m_query->value(1).toString(), m_query->value(2).toString(), m_query->value(3).toString(), m_query->value(4).toString())); } @@ -336,7 +329,7 @@ void QHelpDBReader::linksForIdentifier(const QString &id, const QStringList &filterAttributes, - QMap &linkMap) const + QMap *linkMap) const { if (!m_query) return; @@ -358,7 +351,7 @@ m_query->exec(query); while (m_query->next()) { if (m_indicesCache.contains(m_query->value(5).toInt())) { - linkMap.insertMulti(m_query->value(0).toString(), buildQUrl(m_query->value(1).toString(), + linkMap->insertMulti(m_query->value(0).toString(), buildQUrl(m_query->value(1).toString(), m_query->value(2).toString(), m_query->value(3).toString(), m_query->value(4).toString())); } @@ -372,7 +365,7 @@ "AND a.NamespaceId=f.Id AND b.IndexId=a.Id AND b.FilterAttributeId=c.Id " "AND a.Identifier='%1' AND c.Name='%2'")).arg(quote(id)) .arg(quote(filterAttributes.first())); - for (int i=0; iexec(query); while (m_query->next()) { - linkMap.insertMulti(m_query->value(0).toString(), buildQUrl(m_query->value(1).toString(), + linkMap->insertMulti(m_query->value(0).toString(), buildQUrl(m_query->value(1).toString(), m_query->value(2).toString(), m_query->value(3).toString(), m_query->value(4).toString())); } @@ -419,7 +412,7 @@ "ContentsFilterTable b, FilterAttributeTable c " "WHERE a.Id=b.ContentsId AND b.FilterAttributeId=c.Id " "AND c.Name='%1'")).arg(quote(filterAttributes.first())); - for (int i=1; iexec(query); - while (m_query->next()) { + while (m_query->next()) contents.append(m_query->value(0).toByteArray()); - } return contents; } QUrl QHelpDBReader::urlOfPath(const QString &relativePath) const { - QUrl url; if (!m_query) - return url; + return QUrl(); m_query->exec(QLatin1String("SELECT a.Name, b.Name FROM NamespaceTable a, " "FolderTable b WHERE a.id=b.NamespaceId and a.Id=1")); - if (m_query->next()) { - QString rp = relativePath; - QString anchor; - int i = rp.indexOf(QLatin1Char('#')); - if (i > -1) { - rp = relativePath.left(i); - anchor = relativePath.mid(i+1); - } - url = buildQUrl(m_query->value(0).toString(), - m_query->value(1).toString(), rp, anchor); - } - return url; + if (!m_query->next()) + return QUrl(); + + const int idx = relativePath.indexOf(QLatin1Char('#')); + const QString &rp = idx < 0 ? relativePath : relativePath.left(idx); + const QString anchor = idx < 0 ? QString() : relativePath.mid(idx + 1); + return buildQUrl(m_query->value(0).toString(), + m_query->value(1).toString(), rp, anchor); } QStringList QHelpDBReader::files(const QStringList &filterAttributes, @@ -478,7 +465,7 @@ "WHERE b.FolderId=a.Id AND b.FileId=c.FileId " "AND c.FilterAttributeId=d.Id AND d.Name=\'%1\' %2")) .arg(quote(filterAttributes.first())).arg(extension); - for (int i=1; iexec(query)) @@ -564,16 +551,16 @@ return true; } - bool needUpdate = !m_viewAttributes.count(); + const bool needUpdate = !m_viewAttributes.count(); - foreach (const QString &s, attributes) + for (const QString &s : attributes) m_viewAttributes.remove(s); if (m_viewAttributes.count() || needUpdate) { m_viewAttributes.clear(); m_indicesCache = indexIds; } - foreach (const QString &s, attributes) + for (const QString &s : attributes) m_viewAttributes.insert(s); m_useAttributesCache = true; return true; diff -Nru qttools-opensource-src-5.7.1/src/assistant/help/qhelpdbreader_p.h qttools-opensource-src-5.9.1/src/assistant/help/qhelpdbreader_p.h --- qttools-opensource-src-5.7.1/src/assistant/help/qhelpdbreader_p.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/help/qhelpdbreader_p.h 2017-06-23 12:03:39.000000000 +0000 @@ -90,10 +90,10 @@ QStringList filterAttributes(const QString &filterName = QString()) const; QStringList indicesForFilter(const QStringList &filterAttributes) const; void linksForKeyword(const QString &keyword, const QStringList &filterAttributes, - QMap &linkMap) const; + QMap *linkMap) const; void linksForIdentifier(const QString &id, const QStringList &filterAttributes, - QMap &linkMap) const; + QMap *linkMap) const; QList contentsForFilter(const QStringList &filterAttributes) const; QUrl urlOfPath(const QString &relativePath) const; @@ -104,20 +104,19 @@ QVariant metaData(const QString &name) const; private: - void initObject(const QString &dbName, const QString &uniqueId); QUrl buildQUrl(const QString &ns, const QString &folder, const QString &relFileName, const QString &anchor) const; QString mergeList(const QStringList &list) const; QString quote(const QString &string) const; - bool m_initDone; + bool m_initDone = false; QString m_dbName; QString m_uniqueId; QString m_error; - QSqlQuery *m_query; + QSqlQuery *m_query = nullptr; mutable QString m_namespace; QSet m_viewAttributes; - bool m_useAttributesCache; + bool m_useAttributesCache = false; QSet m_indicesCache; }; diff -Nru qttools-opensource-src-5.7.1/src/assistant/help/qhelpenginecore.cpp qttools-opensource-src-5.9.1/src/assistant/help/qhelpenginecore.cpp --- qttools-opensource-src-5.7.1/src/assistant/help/qhelpenginecore.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/help/qhelpenginecore.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -44,7 +44,6 @@ #include #include -#include #include #include #include @@ -53,19 +52,13 @@ QT_BEGIN_NAMESPACE -QHelpEngineCorePrivate::QHelpEngineCorePrivate() -{ - QHelpGlobal::uniquifyConnectionName(QString(), this); - autoSaveFilter = true; -} - void QHelpEngineCorePrivate::init(const QString &collectionFile, QHelpEngineCore *helpEngineCore) { q = helpEngineCore; collectionHandler = new QHelpCollectionHandler(collectionFile, helpEngineCore); - connect(collectionHandler, SIGNAL(error(QString)), - this, SLOT(errorReceived(QString))); + connect(collectionHandler, &QHelpCollectionHandler::error, + this, &QHelpEngineCorePrivate::errorReceived); needsSetup = true; } @@ -78,11 +71,10 @@ void QHelpEngineCorePrivate::clearMaps() { emit q->readersAboutToBeInvalidated(); - QMap::iterator it = readerMap.begin(); - while (it != readerMap.end()) { - delete it.value(); - ++it; - } + + for (const QHelpDBReader *reader : qAsConst(readerMap)) + delete reader; + readerMap.clear(); fileNameReaderMap.clear(); virtualFolderMap.clear(); @@ -104,22 +96,21 @@ return false; } - const QHelpCollectionHandler::DocInfoList docList = - collectionHandler->registeredDocumentations(); - QFileInfo fi(collectionHandler->collectionFile()); - QString absFileName; - foreach(const QHelpCollectionHandler::DocInfo &info, docList) { - if (QDir::isAbsolutePath(info.fileName)) { - absFileName = info.fileName; - } else { - absFileName = QFileInfo(fi.absolutePath() + QDir::separator() + info.fileName) - .absoluteFilePath(); - } + const QHelpCollectionHandler::DocInfoList &docList = + collectionHandler->registeredDocumentations(); + const QFileInfo fi(collectionHandler->collectionFile()); + + for (const QHelpCollectionHandler::DocInfo &info : docList) { + const QString &absFileName = QDir::isAbsolutePath(info.fileName) + ? info.fileName + : QFileInfo(fi.absolutePath() + QDir::separator() + info.fileName) + .absoluteFilePath(); + QHelpDBReader *reader = new QHelpDBReader(absFileName, QHelpGlobal::uniquifyConnectionName(info.fileName, this), this); if (!reader->init()) { emit q->warning(QHelpEngineCore::tr("Cannot open documentation file %1: %2.") - .arg(absFileName, reader->errorMessage())); + .arg(absFileName, reader->errorMessage())); continue; } @@ -155,11 +146,11 @@ The core help engine can be used to perform different tasks. By calling linksForIdentifier() the engine returns - urls specifying the file locations inside the help system. The + URLs specifying the file locations inside the help system. The actual file data can then be retrived by calling fileData(). In contrast to all other functions in this class, linksForIdentifier() depends on the currently set custom filter. Depending on the filter, - the function may return different hits. + the function may return different results. Every help engine can contain any number of custom filters. A custom filter is defined by a name and set of filter attributes and can be @@ -359,16 +350,15 @@ QString QHelpEngineCore::documentationFileName(const QString &namespaceName) { if (d->setup()) { - const QHelpCollectionHandler::DocInfoList docList = + const QHelpCollectionHandler::DocInfoList &docList = d->collectionHandler->registeredDocumentations(); - foreach(const QHelpCollectionHandler::DocInfo &info, docList) { + for (const QHelpCollectionHandler::DocInfo &info : docList) { if (info.namespaceName == namespaceName) { if (QDir::isAbsolutePath(info.fileName)) return info.fileName; - QFileInfo fi(d->collectionHandler->collectionFile()); - fi.setFile(fi.absolutePath() + QDir::separator() + info.fileName); - return fi.absoluteFilePath(); + return QFileInfo(QFileInfo(d->collectionHandler->collectionFile()).absolutePath() + + QDir::separator() + info.fileName).absoluteFilePath(); } } } @@ -384,10 +374,9 @@ QStringList list; if (!d->setup()) return list; - const QHelpCollectionHandler::DocInfoList docList = d->collectionHandler->registeredDocumentations(); - foreach(const QHelpCollectionHandler::DocInfo &info, docList) { + const QHelpCollectionHandler::DocInfoList &docList = d->collectionHandler->registeredDocumentations(); + for (const QHelpCollectionHandler::DocInfo &info : docList) list.append(info.namespaceName); - } return list; } @@ -416,8 +405,7 @@ { d->error.clear(); d->needsSetup = true; - return d->collectionHandler->addCustomFilter(filterName, - attributes); + return d->collectionHandler->addCustomFilter(filterName, attributes); } /*! @@ -471,7 +459,7 @@ return QString(); if (d->currentFilter.isEmpty()) { - QString filter = + const QString &filter = d->collectionHandler->customValue(QLatin1String("CurrentFilter"), QString()).toString(); if (!filter.isEmpty() @@ -500,12 +488,15 @@ */ QList QHelpEngineCore::filterAttributeSets(const QString &namespaceName) const { + QList ret; if (d->setup()) { QHelpDBReader *reader = d->readerMap.value(namespaceName); if (reader) - return reader->filterAttributeSets(); + ret = reader->filterAttributeSets(); } - return QList(); + if (ret.isEmpty()) + ret.append(QStringList()); + return ret; } /*! @@ -530,8 +521,8 @@ url.setScheme(QLatin1String("qthelp")); url.setAuthority(namespaceName); - const QStringList files = reader->files(filterAttributes, extensionFilter); - foreach (const QString &file, files) { + const QStringList &files = reader->files(filterAttributes, extensionFilter); + for (const QString &file : files) { url.setPath(QLatin1String("/") + file); res.append(url); } @@ -548,15 +539,16 @@ { QUrl res; if (!d->setup() || !url.isValid() || url.toString().count(QLatin1Char('/')) < 4 - || url.scheme() != QLatin1String("qthelp")) + || url.scheme() != QLatin1String("qthelp")) { return res; + } - QString ns = url.authority(); + const QString &ns = url.authority(); QString filePath = url.path(); if (filePath.startsWith(QLatin1Char('/'))) filePath = filePath.mid(1); - QString virtualFolder = filePath.mid(0, filePath.indexOf(QLatin1Char('/'), 1)); - filePath = filePath.mid(virtualFolder.length()+1); + const QString &virtualFolder = filePath.mid(0, filePath.indexOf(QLatin1Char('/'), 1)); + filePath.remove(0, virtualFolder.length() + 1); QHelpDBReader *defaultReader = 0; if (d->readerMap.contains(ns)) { @@ -565,18 +557,18 @@ return url; } - QStringList filterAtts = filterAttributes(currentFilter()); - foreach (QHelpDBReader *reader, d->virtualFolderMap.values(virtualFolder)) { + const QStringList &attributes = filterAttributes(currentFilter()); + for (const QHelpDBReader *reader : d->virtualFolderMap.values(virtualFolder)) { if (reader == defaultReader) continue; - if (reader->fileExists(virtualFolder, filePath, filterAtts)) { + if (reader->fileExists(virtualFolder, filePath, attributes)) { res = url; res.setAuthority(reader->namespaceName()); return res; } } - foreach (QHelpDBReader *reader, d->virtualFolderMap.values(virtualFolder)) { + for (const QHelpDBReader *reader : d->virtualFolderMap.values(virtualFolder)) { if (reader == defaultReader) continue; if (reader->fileExists(virtualFolder, filePath)) { @@ -598,15 +590,16 @@ QByteArray QHelpEngineCore::fileData(const QUrl &url) const { if (!d->setup() || !url.isValid() || url.toString().count(QLatin1Char('/')) < 4 - || url.scheme() != QLatin1String("qthelp")) + || url.scheme() != QLatin1String("qthelp")) { return QByteArray(); + } - QString ns = url.authority(); + const QString &ns = url.authority(); QString filePath = url.path(); if (filePath.startsWith(QLatin1Char('/'))) filePath = filePath.mid(1); - QString virtualFolder = filePath.mid(0, filePath.indexOf(QLatin1Char('/'), 1)); - filePath = filePath.mid(virtualFolder.length()+1); + const QString &virtualFolder = filePath.mid(0, filePath.indexOf(QLatin1Char('/'), 1)); + filePath.remove(0, virtualFolder.length() + 1); QByteArray ba; QHelpDBReader *defaultReader = 0; @@ -616,7 +609,7 @@ } if (ba.isEmpty()) { - foreach (QHelpDBReader *reader, d->virtualFolderMap.values(virtualFolder)) { + for (const QHelpDBReader *reader : d->virtualFolderMap.values(virtualFolder)) { if (reader == defaultReader) continue; ba = reader->fileData(virtualFolder, filePath); @@ -628,9 +621,9 @@ } /*! - Returns a map of hits found for the \a id. A hit contains the - title of the document and the url where the keyword is located. - The result depends on the current filter, meaning only the keywords + Returns documents found for the \a id. The map contains the + document titles and their URLs. + The returned map contents depends on the current filter, meaning only the keywords registered for the current filter will be returned. */ QMap QHelpEngineCore::linksForIdentifier(const QString &id) const @@ -639,10 +632,25 @@ if (!d->setup()) return linkMap; - QStringList atts = filterAttributes(d->currentFilter); - foreach (QHelpDBReader *reader, d->readerMap) - reader->linksForIdentifier(id, atts, linkMap); + const QStringList &attributes = filterAttributes(d->currentFilter); + for (const QHelpDBReader *reader : qAsConst(d->readerMap)) + reader->linksForIdentifier(id, attributes, &linkMap); + + return linkMap; +} + +/*! + \since 4.5 + Returns all documents found for the \a keyword. The returned map consists of the + document titles and their URLs. +*/ +QMap QHelpEngineCore::linksForKeyword(const QString &keyword) const +{ + QMap linkMap; + const QStringList &attributes = filterAttributes(d->currentFilter); + for (const QHelpDBReader *reader : qAsConst(d->readerMap)) + reader->linksForKeyword(keyword, attributes, &linkMap); return linkMap; } diff -Nru qttools-opensource-src-5.7.1/src/assistant/help/qhelpenginecore.h qttools-opensource-src-5.9.1/src/assistant/help/qhelpenginecore.h --- qttools-opensource-src-5.7.1/src/assistant/help/qhelpenginecore.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/help/qhelpenginecore.h 2017-06-23 12:03:39.000000000 +0000 @@ -95,6 +95,7 @@ QByteArray fileData(const QUrl &url) const; QMap linksForIdentifier(const QString &id) const; + QMap linksForKeyword(const QString &keyword) const; bool removeCustomValue(const QString &key); QVariant customValue(const QString &key, diff -Nru qttools-opensource-src-5.7.1/src/assistant/help/qhelpengine.cpp qttools-opensource-src-5.9.1/src/assistant/help/qhelpengine.cpp --- qttools-opensource-src-5.7.1/src/assistant/help/qhelpengine.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/help/qhelpengine.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -47,27 +47,12 @@ #include #include -#include #include #include #include QT_BEGIN_NAMESPACE -QHelpEnginePrivate::QHelpEnginePrivate() - : QHelpEngineCorePrivate() - , contentModel(0) - , contentWidget(0) - , indexModel(0) - , indexWidget(0) - , searchEngine(0) -{ -} - -QHelpEnginePrivate::~QHelpEnginePrivate() -{ -} - void QHelpEnginePrivate::init(const QString &collectionFile, QHelpEngineCore *helpEngineCore) { @@ -78,10 +63,10 @@ if (!indexModel) indexModel = new QHelpIndexModel(this); - connect(helpEngineCore, SIGNAL(setupFinished()), this, - SLOT(applyCurrentFilter())); - connect(helpEngineCore, SIGNAL(currentFilterChanged(QString)), this, - SLOT(applyCurrentFilter())); + connect(helpEngineCore, &QHelpEngineCore::setupFinished, + this, &QHelpEnginePrivate::applyCurrentFilter); + connect(helpEngineCore, &QHelpEngineCore::currentFilterChanged, + this, &QHelpEnginePrivate::applyCurrentFilter); } void QHelpEnginePrivate::applyCurrentFilter() @@ -182,10 +167,10 @@ if (!d->contentWidget) { d->contentWidget = new QHelpContentWidget(); d->contentWidget->setModel(d->contentModel); - connect(d->contentModel, SIGNAL(contentsCreationStarted()), - d, SLOT(setContentsWidgetBusy())); - connect(d->contentModel, SIGNAL(contentsCreated()), - d, SLOT(unsetContentsWidgetBusy())); + connect(d->contentModel, &QHelpContentModel::contentsCreationStarted, + d, &QHelpEnginePrivate::setContentsWidgetBusy); + connect(d->contentModel, &QHelpContentModel::contentsCreated, + d, &QHelpEnginePrivate::unsetContentsWidgetBusy); } return d->contentWidget; } @@ -198,10 +183,10 @@ if (!d->indexWidget) { d->indexWidget = new QHelpIndexWidget(); d->indexWidget->setModel(d->indexModel); - connect(d->indexModel, SIGNAL(indexCreationStarted()), - d, SLOT(setIndexWidgetBusy())); - connect(d->indexModel, SIGNAL(indexCreated()), - d, SLOT(unsetIndexWidgetBusy())); + connect(d->indexModel, &QHelpIndexModel::indexCreationStarted, + d, &QHelpEnginePrivate::setIndexWidgetBusy); + connect(d->indexModel, &QHelpIndexModel::indexCreated, + d, &QHelpEnginePrivate::unsetIndexWidgetBusy); } return d->indexWidget; } diff -Nru qttools-opensource-src-5.7.1/src/assistant/help/qhelpengine_p.h qttools-opensource-src-5.9.1/src/assistant/help/qhelpengine_p.h --- qttools-opensource-src-5.7.1/src/assistant/help/qhelpengine_p.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/help/qhelpengine_p.h 2017-06-23 12:03:39.000000000 +0000 @@ -74,7 +74,6 @@ Q_OBJECT public: - QHelpEngineCorePrivate(); virtual ~QHelpEngineCorePrivate(); virtual void init(const QString &collectionFile, @@ -88,11 +87,11 @@ QMultiMap virtualFolderMap; QStringList orderedFileNameList; - QHelpCollectionHandler *collectionHandler; + QHelpCollectionHandler *collectionHandler = nullptr; QString currentFilter; QString error; - bool needsSetup; - bool autoSaveFilter; + bool needsSetup = true; + bool autoSaveFilter = true; protected: QHelpEngineCore *q; @@ -107,19 +106,16 @@ Q_OBJECT public: - QHelpEnginePrivate(); - ~QHelpEnginePrivate(); - void init(const QString &collectionFile, - QHelpEngineCore *helpEngineCore); + QHelpEngineCore *helpEngineCore) override; - QHelpContentModel *contentModel; - QHelpContentWidget *contentWidget; + QHelpContentModel *contentModel = nullptr; + QHelpContentWidget *contentWidget = nullptr; - QHelpIndexModel *indexModel; - QHelpIndexWidget *indexWidget; + QHelpIndexModel *indexModel = nullptr; + QHelpIndexWidget *indexWidget = nullptr; - QHelpSearchEngine *searchEngine; + QHelpSearchEngine *searchEngine = nullptr; void stopDataCollection(); diff -Nru qttools-opensource-src-5.7.1/src/assistant/help/qhelpgenerator.cpp qttools-opensource-src-5.9.1/src/assistant/help/qhelpgenerator.cpp --- qttools-opensource-src-5.7.1/src/assistant/help/qhelpgenerator.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/help/qhelpgenerator.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -40,7 +40,7 @@ #include "qhelpgenerator_p.h" #include "qhelpdatainterface_p.h" -#include +#include #include #include #include @@ -57,14 +57,11 @@ class QHelpGeneratorPrivate { public: - QHelpGeneratorPrivate(); - ~QHelpGeneratorPrivate(); - QString error; - QSqlQuery *query; + QSqlQuery *query = nullptr; - int namespaceId; - int virtualFolderId; + int namespaceId = -1; + int virtualFolderId = -1; QMap fileMap; QMap > fileFilterMap; @@ -76,19 +73,6 @@ double indexStep; }; -QHelpGeneratorPrivate::QHelpGeneratorPrivate() -{ - query = 0; - namespaceId = -1; - virtualFolderId = -1; -} - -QHelpGeneratorPrivate::~QHelpGeneratorPrivate() -{ -} - - - /*! \internal \class QHelpGenerator @@ -206,7 +190,7 @@ addProgress(1.0); emit statusChanged(tr("Insert custom filters...")); - foreach (const QHelpDataCustomFilter &f, helpData->customFilters()) { + for (const QHelpDataCustomFilter &f : helpData->customFilters()) { if (!registerCustomFilter(f.name, f.filterAttributes, true)) { cleanupDB(); return false; @@ -215,22 +199,20 @@ addProgress(1.0); int i = 1; - QList::const_iterator it = helpData->filterSections().constBegin(); - while (it != helpData->filterSections().constEnd()) { + for (const QHelpDataFilterSection &fs : helpData->filterSections()) { emit statusChanged(tr("Insert help data for filter section (%1 of %2)...") .arg(i++).arg(helpData->filterSections().count())); - insertFilterAttributes((*it).filterAttributes()); + insertFilterAttributes(fs.filterAttributes()); QByteArray ba; QDataStream s(&ba, QIODevice::WriteOnly); - foreach (QHelpDataContentItem *itm, (*it).contents()) + for (QHelpDataContentItem *itm : fs.contents()) writeTree(s, itm, 0); - if (!insertFiles((*it).files(), helpData->rootPath(), (*it).filterAttributes()) - || !insertContents(ba, (*it).filterAttributes()) - || !insertKeywords((*it).indices(), (*it).filterAttributes())) { + if (!insertFiles(fs.files(), helpData->rootPath(), fs.filterAttributes()) + || !insertContents(ba, fs.filterAttributes()) + || !insertKeywords(fs.indices(), fs.filterAttributes())) { cleanupDB(); return false; } - ++it; } cleanupDB(); @@ -246,11 +228,9 @@ int numberOfFiles = 0; int numberOfIndices = 0; - QList::const_iterator it = helpData->filterSections().constBegin(); - while (it != helpData->filterSections().constEnd()) { - numberOfFiles += (*it).files().count(); - numberOfIndices += (*it).indices().count(); - ++it; + for (const QHelpDataFilterSection &fs : helpData->filterSections()) { + numberOfFiles += fs.files().count(); + numberOfIndices += fs.indices().count(); } // init 2% // filters 1% @@ -265,9 +245,9 @@ void QHelpGenerator::addProgress(double step) { d->progress += step; - if ((d->progress-d->oldProgress) >= 1.0 && d->progress <= 100.0) { + if ((d->progress - d->oldProgress) >= 1.0 && d->progress <= 100.0) { d->oldProgress = d->progress; - emit progressChanged(ceil(d->progress)); + emit progressChanged(qCeil(d->progress)); } } @@ -286,8 +266,8 @@ s << depth; s << item->reference(); s << item->title(); - foreach (QHelpDataContentItem *i, item->children()) - writeTree(s, i, depth+1); + for (QHelpDataContentItem *i : item->children()) + writeTree(s, i, depth + 1); } /*! @@ -311,62 +291,62 @@ return false; } - QStringList tables; - tables << QLatin1String("CREATE TABLE NamespaceTable (" - "Id INTEGER PRIMARY KEY," - "Name TEXT )") - << QLatin1String("CREATE TABLE FilterAttributeTable (" - "Id INTEGER PRIMARY KEY, " - "Name TEXT )") - << QLatin1String("CREATE TABLE FilterNameTable (" - "Id INTEGER PRIMARY KEY, " - "Name TEXT )") - << QLatin1String("CREATE TABLE FilterTable (" - "NameId INTEGER, " - "FilterAttributeId INTEGER )") - << QLatin1String("CREATE TABLE IndexTable (" - "Id INTEGER PRIMARY KEY, " - "Name TEXT, " - "Identifier TEXT, " - "NamespaceId INTEGER, " - "FileId INTEGER, " - "Anchor TEXT )") - << QLatin1String("CREATE TABLE IndexItemTable (" - "Id INTEGER, " - "IndexId INTEGER )") - << QLatin1String("CREATE TABLE IndexFilterTable (" - "FilterAttributeId INTEGER, " - "IndexId INTEGER )") - << QLatin1String("CREATE TABLE ContentsTable (" - "Id INTEGER PRIMARY KEY, " - "NamespaceId INTEGER, " - "Data BLOB )") - << QLatin1String("CREATE TABLE ContentsFilterTable (" - "FilterAttributeId INTEGER, " - "ContentsId INTEGER )") - << QLatin1String("CREATE TABLE FileAttributeSetTable (" - "Id INTEGER, " - "FilterAttributeId INTEGER )") - << QLatin1String("CREATE TABLE FileDataTable (" - "Id INTEGER PRIMARY KEY, " - "Data BLOB )") - << QLatin1String("CREATE TABLE FileFilterTable (" - "FilterAttributeId INTEGER, " - "FileId INTEGER )") - << QLatin1String("CREATE TABLE FileNameTable (" - "FolderId INTEGER, " - "Name TEXT, " - "FileId INTEGER, " - "Title TEXT )") - << QLatin1String("CREATE TABLE FolderTable(" - "Id INTEGER PRIMARY KEY, " - "Name Text, " - "NamespaceID INTEGER )") - << QLatin1String("CREATE TABLE MetaDataTable(" - "Name Text, " - "Value BLOB )"); + const QStringList tables = QStringList() + << QLatin1String("CREATE TABLE NamespaceTable (" + "Id INTEGER PRIMARY KEY," + "Name TEXT )") + << QLatin1String("CREATE TABLE FilterAttributeTable (" + "Id INTEGER PRIMARY KEY, " + "Name TEXT )") + << QLatin1String("CREATE TABLE FilterNameTable (" + "Id INTEGER PRIMARY KEY, " + "Name TEXT )") + << QLatin1String("CREATE TABLE FilterTable (" + "NameId INTEGER, " + "FilterAttributeId INTEGER )") + << QLatin1String("CREATE TABLE IndexTable (" + "Id INTEGER PRIMARY KEY, " + "Name TEXT, " + "Identifier TEXT, " + "NamespaceId INTEGER, " + "FileId INTEGER, " + "Anchor TEXT )") + << QLatin1String("CREATE TABLE IndexItemTable (" + "Id INTEGER, " + "IndexId INTEGER )") + << QLatin1String("CREATE TABLE IndexFilterTable (" + "FilterAttributeId INTEGER, " + "IndexId INTEGER )") + << QLatin1String("CREATE TABLE ContentsTable (" + "Id INTEGER PRIMARY KEY, " + "NamespaceId INTEGER, " + "Data BLOB )") + << QLatin1String("CREATE TABLE ContentsFilterTable (" + "FilterAttributeId INTEGER, " + "ContentsId INTEGER )") + << QLatin1String("CREATE TABLE FileAttributeSetTable (" + "Id INTEGER, " + "FilterAttributeId INTEGER )") + << QLatin1String("CREATE TABLE FileDataTable (" + "Id INTEGER PRIMARY KEY, " + "Data BLOB )") + << QLatin1String("CREATE TABLE FileFilterTable (" + "FilterAttributeId INTEGER, " + "FileId INTEGER )") + << QLatin1String("CREATE TABLE FileNameTable (" + "FolderId INTEGER, " + "Name TEXT, " + "FileId INTEGER, " + "Title TEXT )") + << QLatin1String("CREATE TABLE FolderTable(" + "Id INTEGER PRIMARY KEY, " + "Name Text, " + "NamespaceID INTEGER )") + << QLatin1String("CREATE TABLE MetaDataTable(" + "Name Text, " + "Value BLOB )"); - foreach (const QString &q, tables) { + for (const QString &q : tables) { if (!d->query->exec(q)) { d->error = tr("Cannot create tables."); return false; @@ -394,7 +374,7 @@ if (!d->query->exec()) return false; - int fileId = d->query->lastInsertId().toInt(); + const int fileId = d->query->lastInsertId().toInt(); d->query->prepare(QLatin1String("INSERT INTO FileNameTable (FolderId, Name, FileId, Title) " " VALUES (0, '', ?, '')")); d->query->bindValue(0, fileId); @@ -464,7 +444,7 @@ emit statusChanged(tr("Insert files...")); QList filterAtts; - foreach (const QString &filterAtt, filterAttributes) { + for (const QString &filterAtt : filterAttributes) { d->query->prepare(QLatin1String("SELECT Id FROM FilterAttributeTable " "WHERE Name=?")); d->query->bindValue(0, filterAtt); @@ -480,7 +460,7 @@ if (filterSetId < 0) return false; ++filterSetId; - foreach (int attId, filterAtts) { + for (int attId : qAsConst(filterAtts)) { d->query->prepare(QLatin1String("INSERT INTO FileAttributeSetTable " "VALUES(?, ?)")); d->query->bindValue(0, filterSetId); @@ -501,7 +481,7 @@ QList fileNameDataList; int i = 0; - foreach (const QString &file, files) { + for (const QString &file : files) { const QString fileName = QDir::cleanPath(file); QFile fi(rootPath + QDir::separator() + fileName); @@ -529,8 +509,8 @@ } int fileId = -1; - QMap::Iterator fileMapIt = d->fileMap.find(fileName); - if (fileMapIt == d->fileMap.end()) { + const auto &it = d->fileMap.constFind(fileName); + if (it == d->fileMap.cend()) { fileDataList.append(qCompress(data)); fileNameData.name = fileName; @@ -544,10 +524,10 @@ ++tableFileId; } else { - fileId = fileMapIt.value(); + fileId = it.value(); QSet &fileFilterSet = d->fileFilterMap[fileId]; QSet &tmpFileFilterSet = tmpFileFilterMap[fileId]; - foreach (int filter, filterAtts) { + for (int filter : qAsConst(filterAtts)) { if (!fileFilterSet.contains(filter) && !tmpFileFilterSet.contains(filter)) { fileFilterSet.insert(filter); @@ -559,52 +539,43 @@ if (!tmpFileFilterMap.isEmpty()) { d->query->exec(QLatin1String("BEGIN")); - QMap >::const_iterator it = tmpFileFilterMap.constBegin(); - while (it != tmpFileFilterMap.constEnd()) { + for (auto it = tmpFileFilterMap.cbegin(), end = tmpFileFilterMap.cend(); it != end; ++it) { QList filterValues = it.value().toList(); std::sort(filterValues.begin(), filterValues.end()); - QList::const_iterator si = filterValues.constBegin(); - while (si != filterValues.constEnd()) { + for (int fv : qAsConst(filterValues)) { d->query->prepare(QLatin1String("INSERT INTO FileFilterTable " "VALUES(?, ?)")); - d->query->bindValue(0, *si); + d->query->bindValue(0, fv); d->query->bindValue(1, it.key()); d->query->exec(); - ++si; } - ++it; } - QList::const_iterator fileIt = fileDataList.constBegin(); - while (fileIt != fileDataList.constEnd()) { + for (const QByteArray &fileData : qAsConst(fileDataList)) { d->query->prepare(QLatin1String("INSERT INTO FileDataTable VALUES " "(Null, ?)")); - d->query->bindValue(0, *fileIt); + d->query->bindValue(0, fileData); d->query->exec(); - ++fileIt; - if (++i%20 == 0) - addProgress(d->fileStep*20.0); + if (++i % 20 == 0) + addProgress(d->fileStep * 20.0); } - QList::const_iterator fileNameIt = - fileNameDataList.constBegin(); - while (fileNameIt != fileNameDataList.constEnd()) { + for (const FileNameTableData &fnd : qAsConst(fileNameDataList)) { d->query->prepare(QLatin1String("INSERT INTO FileNameTable " "(FolderId, Name, FileId, Title) VALUES (?, ?, ?, ?)")); d->query->bindValue(0, 1); - d->query->bindValue(1, (*fileNameIt).name); - d->query->bindValue(2, (*fileNameIt).fileId); - d->query->bindValue(3, (*fileNameIt).title); + d->query->bindValue(1, fnd.name); + d->query->bindValue(2, fnd.fileId); + d->query->bindValue(3, fnd.title); d->query->exec(); - ++fileNameIt; } d->query->exec(QLatin1String("COMMIT")); } d->query->exec(QLatin1String("SELECT MAX(Id) FROM FileDataTable")); if (d->query->next() - && d->query->value(0).toInt() == tableFileId-1) { - addProgress(d->fileStep*(i%20)); + && d->query->value(0).toInt() == tableFileId - 1) { + addProgress(d->fileStep*(i % 20)); return true; } return false; @@ -625,7 +596,7 @@ idsToInsert.removeAll(d->query->value(1).toString()); } - foreach (const QString &id, idsToInsert) { + for (const QString &id : qAsConst(idsToInsert)) { d->query->prepare(QLatin1String("INSERT INTO FilterAttributeTable VALUES(NULL, ?)")); d->query->bindValue(0, id); d->query->exec(); @@ -660,7 +631,7 @@ d->query->bindValue(0, nameId); d->query->exec(); - foreach (const QString &att, filterAttribs) { + for (const QString &att : filterAttribs) { d->query->prepare(QLatin1String("INSERT INTO FilterTable VALUES(?, ?)")); d->query->bindValue(0, nameId); d->query->bindValue(1, attributeMap[att]); @@ -683,7 +654,7 @@ indexId = d->query->value(0).toInt() + 1; QList filterAtts; - foreach (const QString &filterAtt, filterAttributes) { + for (const QString &filterAtt : filterAttributes) { d->query->prepare(QLatin1String("SELECT Id FROM FilterAttributeTable WHERE Name=?")); d->query->bindValue(0, filterAtt); d->query->exec(); @@ -691,17 +662,12 @@ filterAtts.append(d->query->value(0).toInt()); } - int pos = -1; - QString fileName; - QString anchor; - QString fName; - int fileId = 1; QList indexFilterTable; int i = 0; d->query->exec(QLatin1String("BEGIN")); QSet indices; - foreach (const QHelpDataIndexItem &itm, keywords) { + for (const QHelpDataIndexItem &itm : keywords) { // Identical ids make no sense and just confuse the Assistant user, // so we ignore all repetitions. if (indices.contains(itm.identifier)) @@ -712,22 +678,14 @@ if (!itm.identifier.isEmpty()) indices.insert(itm.identifier); - pos = itm.reference.indexOf(QLatin1Char('#')); - fileName = itm.reference.left(pos); - if (pos > -1) - anchor = itm.reference.mid(pos+1); - else - anchor.clear(); - - fName = QDir::cleanPath(fileName); - if (fName.startsWith(QLatin1String("./"))) - fName = fName.mid(2); + const int pos = itm.reference.indexOf(QLatin1Char('#')); + const QString &fileName = itm.reference.left(pos); + const QString anchor = pos < 0 ? QString() : itm.reference.mid(pos + 1); - QMap::ConstIterator it = d->fileMap.find(fName); - if (it != d->fileMap.end()) - fileId = it.value(); - else - fileId = 1; + const QString &fName = QDir::cleanPath(fileName); + + const auto &it = d->fileMap.constFind(fName); + const int fileId = it == d->fileMap.cend() ? 1 : it.value(); d->query->prepare(QLatin1String("INSERT INTO IndexTable (Name, Identifier, NamespaceId, FileId, Anchor) " "VALUES(?, ?, ?, ?, ?)")); @@ -739,14 +697,14 @@ d->query->exec(); indexFilterTable.append(indexId++); - if (++i%100 == 0) - addProgress(d->indexStep*100.0); + if (++i % 100 == 0) + addProgress(d->indexStep * 100.0); } d->query->exec(QLatin1String("COMMIT")); d->query->exec(QLatin1String("BEGIN")); - foreach (int idx, indexFilterTable) { - foreach (int a, filterAtts) { + for (int idx : qAsConst(indexFilterTable)) { + for (int a : qAsConst(filterAtts)) { d->query->prepare(QLatin1String("INSERT INTO IndexFilterTable (FilterAttributeId, IndexId) " "VALUES(?, ?)")); d->query->bindValue(0, a); @@ -781,7 +739,7 @@ } // associate the filter attributes - foreach (const QString &filterAtt, filterAttributes) { + for (const QString &filterAtt : filterAttributes) { d->query->prepare(QLatin1String("INSERT INTO ContentsFilterTable (FilterAttributeId, ContentsId) " "SELECT Id, ? FROM FilterAttributeTable WHERE Name=?")); d->query->bindValue(0, contentId); @@ -806,7 +764,7 @@ while (d->query->next()) atts.insert(d->query->value(0).toString()); - foreach (const QString &s, attributes) { + for (const QString &s : attributes) { if (!atts.contains(s)) { d->query->prepare(QLatin1String("INSERT INTO FilterAttributeTable VALUES(NULL, ?)")); d->query->bindValue(0, s); @@ -821,13 +779,11 @@ if (!d->query) return false; - QMap::const_iterator it = metaData.constBegin(); - while (it != metaData.constEnd()) { + for (auto it = metaData.cbegin(), end = metaData.cend(); it != end; ++it) { d->query->prepare(QLatin1String("INSERT INTO MetaDataTable VALUES(?, ?)")); d->query->bindValue(0, it.key()); d->query->bindValue(1, it.value()); d->query->exec(); - ++it; } return true; } @@ -839,9 +795,9 @@ * We use a set, because there will be a lot of look-ups. */ QSet files; - foreach (const QHelpDataFilterSection &filterSection, helpData.filterSections()) { - foreach (const QString &file, filterSection.files()) { - QFileInfo fileInfo(helpData.rootPath() + QDir::separator() + file); + for (const QHelpDataFilterSection &filterSection : helpData.filterSections()) { + for (const QString &file : filterSection.files()) { + const QFileInfo fileInfo(helpData.rootPath() + QDir::separator() + file); const QString &canonicalFileName = fileInfo.canonicalFilePath(); if (!fileInfo.exists()) emit warning(tr("File '%1' does not exist.").arg(file)); @@ -857,7 +813,7 @@ * commented out can cause false warning. */ bool allLinksOk = true; - foreach (const QString &fileName, files) { + for (const QString &fileName : qAsConst(files)) { if (!fileName.endsWith(QLatin1String("html")) && !fileName.endsWith(QLatin1String("htm"))) continue; @@ -866,7 +822,7 @@ emit warning(tr("File '%1' cannot be opened.").arg(fileName)); continue; } - QRegExp linkPattern(QLatin1String("<(?:a href|img src)=\"?([^#\">]+)[#\">]")); + const QRegExp linkPattern(QLatin1String("<(?:a href|img src)=\"?([^#\">]+)[#\">]")); QTextStream stream(&htmlFile); const QString codec = QHelpGlobal::codecFromData(htmlFile.read(1000)); stream.setCodec(QTextCodec::codecForName(codec.toLatin1().constData())); @@ -874,10 +830,10 @@ QStringList invalidLinks; for (int pos = linkPattern.indexIn(content); pos != -1; pos = linkPattern.indexIn(content, pos + 1)) { - const QString& linkedFileName = linkPattern.cap(1); + const QString &linkedFileName = linkPattern.cap(1); if (linkedFileName.contains(QLatin1String("://"))) continue; - const QString curDir = QFileInfo(fileName).dir().path(); + const QString &curDir = QFileInfo(fileName).dir().path(); const QString &canonicalLinkedFileName = QFileInfo(curDir + QDir::separator() + linkedFileName).canonicalFilePath(); if (!files.contains(canonicalLinkedFileName) diff -Nru qttools-opensource-src-5.7.1/src/assistant/help/qhelp_global.cpp qttools-opensource-src-5.9.1/src/assistant/help/qhelp_global.cpp --- qttools-opensource-src-5.7.1/src/assistant/help/qhelp_global.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/help/qhelp_global.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -59,8 +59,8 @@ { QString title = QCoreApplication::translate("QHelp", "Untitled"); if (!content.isEmpty()) { - int start = content.indexOf(QLatin1String(""), 0, Qt::CaseInsensitive) + 7; - int end = content.indexOf(QLatin1String(""), 0, Qt::CaseInsensitive); + const int start = content.indexOf(QLatin1String(""), 0, Qt::CaseInsensitive) + 7; + const int end = content.indexOf(QLatin1String(""), 0, Qt::CaseInsensitive); if ((end - start) > 0) { title = content.mid(start, end - start); if (Qt::mightBeRichText(title) || title.contains(QLatin1Char('&'))) { @@ -83,10 +83,10 @@ QString QHelpGlobal::codecFromHtmlData(const QByteArray &data) { - QString head = QString::fromUtf8(data.constData(), qMin(1000, data.size())); + const QString &head = QString::fromUtf8(data.constData(), qMin(1000, data.size())); int start = head.indexOf(QLatin1String(" 0) { - QRegExp r(QLatin1String("charset=([^\"\\s]+)")); + const QRegExp r(QLatin1String("charset=([^\"\\s]+)")); while (start != -1) { const int end = head.indexOf(QLatin1Char('>'), start) + 1; if (end <= start) @@ -103,8 +103,8 @@ QString QHelpGlobal::codecFromXmlData(const QByteArray &data) { - QString head = QString::fromUtf8(data.constData(), qMin(1000, data.size())); - QRegExp encodingExp(QLatin1String("^\\s*<\\?xml version=" - "\"\\d\\.\\d\" encoding=\"([^\"]+)\"\\?>.*")); + const QString head = QString::fromUtf8(data.constData(), qMin(1000, data.size())); + const QRegExp encodingExp(QLatin1String("^\\s*<\\?xml version=" + "\"\\d\\.\\d\" encoding=\"([^\"]+)\"\\?>.*")); return encodingExp.exactMatch(head) ? encodingExp.cap(1) : QString(); } diff -Nru qttools-opensource-src-5.7.1/src/assistant/help/qhelpindexwidget.cpp qttools-opensource-src-5.9.1/src/assistant/help/qhelpindexwidget.cpp --- qttools-opensource-src-5.7.1/src/assistant/help/qhelpindexwidget.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/help/qhelpindexwidget.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -63,7 +63,7 @@ QSet indexIds(QHelpDBReader *reader) const; private: - void run(); + void run() override; QHelpEnginePrivate *m_helpEngine; QStringList m_indices; @@ -71,37 +71,30 @@ QMap > m_indexIds; QStringList m_filterAttributes; mutable QMutex m_mutex; - bool m_abort; + bool m_abort = false; }; class QHelpIndexModelPrivate { public: QHelpIndexModelPrivate(QHelpEnginePrivate *hE) + : helpEngine(hE), + indexProvider(new QHelpIndexProvider(helpEngine)) { - helpEngine = hE; - indexProvider = new QHelpIndexProvider(helpEngine); - insertedRows = 0; } QHelpEnginePrivate *helpEngine; QHelpIndexProvider *indexProvider; QStringList indices; - int insertedRows; + int insertedRows = 0; QString currentFilter; QList activeReaders; }; -static bool caseInsensitiveLessThan(const QString &as, const QString &bs) -{ - return QString::compare(as, bs, Qt::CaseInsensitive) < 0; -} - QHelpIndexProvider::QHelpIndexProvider(QHelpEnginePrivate *helpEngine) - : QThread(helpEngine) + : QThread(helpEngine), + m_helpEngine(helpEngine) { - m_helpEngine = helpEngine; - m_abort = false; } QHelpIndexProvider::~QHelpIndexProvider() @@ -148,9 +141,7 @@ QSet QHelpIndexProvider::indexIds(QHelpDBReader *reader) const { QMutexLocker lck(&m_mutex); - if (m_indexIds.contains(reader)) - return m_indexIds.value(reader); - return QSet(); + return m_indexIds.value(reader); } void QHelpIndexProvider::run() @@ -162,7 +153,7 @@ QSet indicesSet; m_mutex.unlock(); - foreach (const QString &dbFileName, m_helpEngine->fileNameReaderMap.keys()) { + for (const QString &dbFileName : m_helpEngine->fileNameReaderMap.keys()) { m_mutex.lock(); if (m_abort) { m_mutex.unlock(); @@ -175,10 +166,10 @@ QThread::currentThread()), 0); if (!reader.init()) continue; - QStringList lst = reader.indicesForFilter(atts); - if (!lst.isEmpty()) { + const QStringList &list = reader.indicesForFilter(atts); + if (!list.isEmpty()) { m_mutex.lock(); - foreach (const QString &s, lst) + for (const QString &s : list) indicesSet.insert(s); if (m_abort) { m_mutex.unlock(); @@ -192,7 +183,7 @@ } m_mutex.lock(); m_indices = indicesSet.values(); - std::sort(m_indices.begin(), m_indices.end(), caseInsensitiveLessThan); + m_indices.sort(Qt::CaseInsensitive); m_mutex.unlock(); } @@ -229,8 +220,10 @@ { d = new QHelpIndexModelPrivate(helpEngine); - connect(d->indexProvider, SIGNAL(finished()), this, SLOT(insertIndices())); - connect(helpEngine->q, SIGNAL(readersAboutToBeInvalidated()), this, SLOT(invalidateIndex())); + connect(d->indexProvider, &QThread::finished, + this, &QHelpIndexModel::insertIndices); + connect(helpEngine->q, &QHelpEngineCore::readersAboutToBeInvalidated, + [this]() { invalidateIndex(); }); } QHelpIndexModel::~QHelpIndexModel() @@ -240,8 +233,10 @@ void QHelpIndexModel::invalidateIndex(bool onShutDown) { - if (onShutDown) - disconnect(this, SLOT(insertIndices())); + if (onShutDown) { + disconnect(d->indexProvider, &QThread::finished, + this, &QHelpIndexModel::insertIndices); + } d->indexProvider->stopCollecting(); d->indices.clear(); if (!onShutDown) @@ -263,9 +258,9 @@ { d->indices = d->indexProvider->indices(); d->activeReaders = d->indexProvider->activeReaders(); - QStringList attributes = d->helpEngine->q->filterAttributes(d->currentFilter); + const QStringList &attributes = d->helpEngine->q->filterAttributes(d->currentFilter); if (attributes.count() > 1) { - foreach (QHelpDBReader *r, d->activeReaders) + for (QHelpDBReader *r : qAsConst(d->activeReaders)) r->createAttributesCache(attributes, d->indexProvider->indexIds(r)); } filter(QString()); @@ -282,16 +277,12 @@ } /*! - Returns all hits found for the \a keyword. A hit consists of - the URL and the document title. + \obsolete + Use QHelpEngineCore::linksForKeyword() instead. */ QMap QHelpIndexModel::linksForKeyword(const QString &keyword) const { - QMap linkMap; - QStringList filterAttributes = d->helpEngine->q->filterAttributes(d->currentFilter); - foreach (QHelpDBReader *reader, d->activeReaders) - reader->linksForKeyword(keyword, filterAttributes, linkMap); - return linkMap; + return d->helpEngine->q->linksForKeyword(keyword); } /*! @@ -316,34 +307,33 @@ int perfectMatch = -1; if (!wildcard.isEmpty()) { - QRegExp regExp(wildcard, Qt::CaseInsensitive); - regExp.setPatternSyntax(QRegExp::Wildcard); - foreach (const QString &index, d->indices) { + const QRegExp regExp(wildcard, Qt::CaseInsensitive, QRegExp::Wildcard); + for (const QString &index : qAsConst(d->indices)) { if (index.contains(regExp)) { lst.append(index); if (perfectMatch == -1 && index.startsWith(filter, Qt::CaseInsensitive)) { if (goodMatch == -1) - goodMatch = lst.count()-1; + goodMatch = lst.count() - 1; if (filter.length() == index.length()){ - perfectMatch = lst.count()-1; + perfectMatch = lst.count() - 1; } } else if (perfectMatch > -1 && index == filter) { - perfectMatch = lst.count()-1; + perfectMatch = lst.count() - 1; } } } } else { - foreach (const QString &index, d->indices) { + for (const QString &index : qAsConst(d->indices)) { if (index.contains(filter, Qt::CaseInsensitive)) { lst.append(index); if (perfectMatch == -1 && index.startsWith(filter, Qt::CaseInsensitive)) { if (goodMatch == -1) - goodMatch = lst.count()-1; + goodMatch = lst.count() - 1; if (filter.length() == index.length()){ - perfectMatch = lst.count()-1; + perfectMatch = lst.count() - 1; } } else if (perfectMatch > -1 && index == filter) { - perfectMatch = lst.count()-1; + perfectMatch = lst.count() - 1; } } } @@ -382,7 +372,7 @@ This signal is emitted when the item representing the \a keyword is activated and the item has more than one link associated. - The \a links consist of the document title and their URL. + The \a links consist of the document titles and their URLs. */ QHelpIndexWidget::QHelpIndexWidget() @@ -390,8 +380,8 @@ { setEditTriggers(QAbstractItemView::NoEditTriggers); setUniformItemSizes(true); - connect(this, SIGNAL(activated(QModelIndex)), - this, SLOT(showLink(QModelIndex))); + connect(this, &QAbstractItemView::activated, + this, &QHelpIndexWidget::showLink); } void QHelpIndexWidget::showLink(const QModelIndex &index) @@ -402,17 +392,15 @@ QHelpIndexModel *indexModel = qobject_cast(model()); if (!indexModel) return; - QVariant v = indexModel->data(index, Qt::DisplayRole); - QString name; - if (v.isValid()) - name = v.toString(); - - QMap links = indexModel->linksForKeyword(name); - if (links.count() == 1) { - emit linkActivated(links.constBegin().value(), name); - } else if (links.count() > 1) { + + const QVariant &v = indexModel->data(index, Qt::DisplayRole); + const QString name = v.isValid() ? v.toString() : QString(); + + const QMap &links = indexModel->linksForKeyword(name); + if (links.count() > 1) emit linksActivated(links, name); - } + else if (!links.isEmpty()) + emit linkActivated(links.first(), name); } /*! @@ -436,7 +424,7 @@ QHelpIndexModel *indexModel = qobject_cast(model()); if (!indexModel) return; - QModelIndex idx = indexModel->filter(filter, wildcard); + const QModelIndex &idx = indexModel->filter(filter, wildcard); if (idx.isValid()) setCurrentIndex(idx); } diff -Nru qttools-opensource-src-5.7.1/src/assistant/help/qhelpprojectdata.cpp qttools-opensource-src-5.9.1/src/assistant/help/qhelpprojectdata.cpp --- qttools-opensource-src-5.7.1/src/assistant/help/qhelpprojectdata.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/help/qhelpprojectdata.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -45,6 +45,7 @@ #include #include #include +#include #include #include #include @@ -93,18 +94,20 @@ readNext(); if (isStartElement()) { if (name() == QLatin1String("QtHelpProject") - && attributes().value(QLatin1String("version")) == QLatin1String("1.0")) + && attributes().value(QLatin1String("version")) + == QLatin1String("1.0")) { readProject(); - else + } else { raiseError(QCoreApplication::translate("QHelpProject", "Unknown token. Expected \"QtHelpProject\".")); + } } } if (hasError()) { raiseError(QCoreApplication::translate("QHelpProject", - "Error in line %1: %2").arg(lineNumber()) - .arg(errorString())); + "Error in line %1: %2").arg(lineNumber()) + .arg(errorString())); } } @@ -198,8 +201,8 @@ readNext(); if (isStartElement()) { if (name() == QLatin1String("section")) { - QString title = attributes().value(QLatin1String("title")).toString(); - QString ref = attributes().value(QLatin1String("ref")).toString(); + const QString &title = attributes().value(QLatin1String("title")).toString(); + const QString &ref = attributes().value(QLatin1String("ref")).toString(); if (contentStack.isEmpty()) { itm = new QHelpDataContentItem(0, title, ref); filterSectionList.last().addContent(itm); @@ -215,7 +218,7 @@ contentStack.pop(); continue; } else if (name() == QLatin1String("toc") && contentStack.isEmpty()) { - break; + return; } else { raiseUnknownTokenError(); } @@ -223,23 +226,33 @@ } } +static inline QString msgMissingAttribute(const QString &fileName, qint64 lineNumber, const QString &name) +{ + QString result; + QTextStream str(&result); + str << QDir::toNativeSeparators(fileName) << ':' << lineNumber + << ": Missing attribute in ."; + return result; +} + void QHelpProjectDataPrivate::readKeywords() { while (!atEnd()) { readNext(); if (isStartElement()) { if (name() == QLatin1String("keyword")) { - if (attributes().value(QLatin1String("ref")).toString().isEmpty() - || (attributes().value(QLatin1String("name")).toString().isEmpty() - && attributes().value(QLatin1String("id")).toString().isEmpty())) { - qWarning("Missing attribute in keyword at line %d.", (int)lineNumber()); + const QString &refAttribute = attributes().value(QStringLiteral("ref")).toString(); + const QString &nameAttribute = attributes().value(QStringLiteral("name")).toString(); + const QString &idAttribute = attributes().value(QStringLiteral("id")).toString(); + if (refAttribute.isEmpty() || (nameAttribute.isEmpty() && idAttribute.isEmpty())) { + qWarning("%s", qPrintable(msgMissingAttribute(fileName, lineNumber(), nameAttribute))); continue; } filterSectionList.last() - .addIndex(QHelpDataIndexItem(attributes(). - value(QLatin1String("name")).toString(), - attributes().value(QLatin1String("id")).toString(), - attributes().value(QLatin1String("ref")).toString())); + .addIndex(QHelpDataIndexItem(nameAttribute, idAttribute, refAttribute)); } else { raiseUnknownTokenError(); } @@ -247,7 +260,7 @@ if (name() == QLatin1String("keyword")) continue; else if (name() == QLatin1String("keywords")) - break; + return; else raiseUnknownTokenError(); } @@ -267,7 +280,7 @@ if (name() == QLatin1String("file")) continue; else if (name() == QLatin1String("files")) - break; + return; else raiseUnknownTokenError(); } @@ -287,15 +300,15 @@ return; } - QFileInfo fileInfo(rootPath + QLatin1Char('/') + pattern); + const QFileInfo fileInfo(rootPath + QLatin1Char('/') + pattern); const QDir &dir = fileInfo.dir(); const QString &path = dir.canonicalPath(); // QDir::entryList() is expensive, so we cache the results. - QMap::ConstIterator it = dirEntriesCache.find(path); - const QStringList &entries = it != dirEntriesCache.constEnd() ? + const auto &it = dirEntriesCache.constFind(path); + const QStringList &entries = it != dirEntriesCache.cend() ? it.value() : dir.entryList(QDir::Files); - if (it == dirEntriesCache.constEnd()) + if (it == dirEntriesCache.cend()) dirEntriesCache.insert(path, entries); bool matchFound = false; @@ -304,8 +317,8 @@ #else Qt::CaseSensitivity cs = Qt::CaseSensitive; #endif - QRegExp regExp(fileInfo.fileName(), cs, QRegExp::Wildcard); - foreach (const QString &file, entries) { + const QRegExp regExp(fileInfo.fileName(), cs, QRegExp::Wildcard); + for (const QString &file : entries) { if (regExp.exactMatch(file)) { matchFound = true; filterSectionList.last(). @@ -325,7 +338,7 @@ QUrl url; const QLatin1String scheme("qthelp"); url.setScheme(scheme); - const QString canonicalNamespace = nameSpace.toLower(); + const QString &canonicalNamespace = nameSpace.toLower(); url.setHost(canonicalNamespace); url.setPath(slash + vFolder); diff -Nru qttools-opensource-src-5.7.1/src/assistant/help/qhelpprojectdata_p.h qttools-opensource-src-5.9.1/src/assistant/help/qhelpprojectdata_p.h --- qttools-opensource-src-5.7.1/src/assistant/help/qhelpprojectdata_p.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/help/qhelpprojectdata_p.h 2017-06-23 12:03:39.000000000 +0000 @@ -67,12 +67,12 @@ bool readData(const QString &fileName); QString errorMessage() const; - QString namespaceName() const; - QString virtualFolder() const; - QList customFilters() const; - QList filterSections() const; - QMap metaData() const; - QString rootPath() const; + QString namespaceName() const override; + QString virtualFolder() const override; + QList customFilters() const override; + QList filterSections() const override; + QMap metaData() const override; + QString rootPath() const override; private: QHelpProjectDataPrivate *d; diff -Nru qttools-opensource-src-5.7.1/src/assistant/help/qhelpsearchengine.cpp qttools-opensource-src-5.9.1/src/assistant/help/qhelpsearchengine.cpp --- qttools-opensource-src-5.7.1/src/assistant/help/qhelpsearchengine.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/help/qhelpsearchengine.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -43,13 +43,8 @@ #include "qhelpsearchresultwidget.h" #include "qhelpsearchindexreader_p.h" -#if defined(QT_CLUCENE_SUPPORT) -# include "qhelpsearchindexreader_clucene_p.h" -# include "qhelpsearchindexwriter_clucene_p.h" -#else -# include "qhelpsearchindexreader_default_p.h" -# include "qhelpsearchindexwriter_default_p.h" -#endif +#include "qhelpsearchindexreader_default_p.h" +#include "qhelpsearchindexwriter_default_p.h" #include #include @@ -57,14 +52,103 @@ #include #include #include +#include QT_BEGIN_NAMESPACE -#if defined(QT_CLUCENE_SUPPORT) - using namespace fulltextsearch::clucene; -#else - using namespace fulltextsearch::std; -#endif +using namespace fulltextsearch::qt; + +class QHelpSearchResultData : public QSharedData +{ +public: + QUrl m_url; + QString m_title; + QString m_snippet; +}; + +/*! + \class QHelpSearchResult + \since 5.9 + \inmodule QtHelp + \brief The QHelpSearchResult class provides the data associated with the + search result. + + The QHelpSearchResult object is a data object that describes a single search result. + The vector of search result objects is returned by QHelpSearchEngine::searchResults(). + The description of the search result contains the document title and URL + that the search input matched. It also contains the snippet from + the document content containing the best match of the search input. + \sa QHelpSearchEngine +*/ + +/*! + Constructs a new empty QHelpSearchResult. +*/ +QHelpSearchResult::QHelpSearchResult() + : d(new QHelpSearchResultData) +{ +} + +/*! + Constructs a copy of \a other. +*/ +QHelpSearchResult::QHelpSearchResult(const QHelpSearchResult &other) + : d(other.d) +{ +} + +/*! + Constructs the search result containing \a url, \a title and \a snippet + as the description of the result. +*/ +QHelpSearchResult::QHelpSearchResult(const QUrl &url, const QString &title, const QString &snippet) + : d(new QHelpSearchResultData) +{ + d->m_url = url; + d->m_title = title; + d->m_snippet = snippet; +} + +/*! + Destroys the search result. +*/ +QHelpSearchResult::~QHelpSearchResult() +{ +} + +/*! + Assigns \a other to this search result and returns a reference to this search result. +*/ +QHelpSearchResult &QHelpSearchResult::operator=(const QHelpSearchResult &other) +{ + d = other.d; + return *this; +} + +/*! + Returns the document title of the search result. +*/ +QString QHelpSearchResult::title() const +{ + return d->m_title; +} + +/*! + Returns the document URL of the search result. +*/ +QUrl QHelpSearchResult::url() const +{ + return d->m_url; +} + +/*! + Returns the document snippet containing the search phrase of the search result. +*/ +QString QHelpSearchResult::snippet() const +{ + return d->m_snippet; +} + class QHelpSearchEnginePrivate : public QObject { @@ -75,16 +159,12 @@ void indexingFinished(); void searchingStarted(); - void searchingFinished(int hits); + void searchingFinished(int searchResultCount); private: QHelpSearchEnginePrivate(QHelpEngineCore *helpEngine) - : queryWidget(0) - , resultWidget(0) - , helpEngine(helpEngine) + : helpEngine(helpEngine) { - indexReader = 0; - indexWriter = 0; } ~QHelpSearchEnginePrivate() @@ -93,20 +173,16 @@ delete indexWriter; } - int hitCount() const + int searchResultCount() const { - int count = 0; - if (indexReader) - count = indexReader->hitCount(); - - return count; + return indexReader ? indexReader->searchResultCount() : 0; } - QList hits(int start, int end) const + QVector searchResults(int start, int end) const { return indexReader ? - indexReader->hits(start, end) : - QList(); + indexReader->searchResults(start, end) : + QVector(); } void updateIndex(bool reindex = false) @@ -120,9 +196,10 @@ if (!indexWriter) { indexWriter = new QHelpSearchIndexWriter(); - connect(indexWriter, SIGNAL(indexingStarted()), this, SIGNAL(indexingStarted())); - connect(indexWriter, SIGNAL(indexingFinished()), this, SIGNAL(indexingFinished())); - connect(indexWriter, SIGNAL(indexingFinished()), this, SLOT(optimizeIndex())); + connect(indexWriter, &QHelpSearchIndexWriter::indexingStarted, + this, &QHelpSearchEnginePrivate::indexingStarted); + connect(indexWriter, &QHelpSearchIndexWriter::indexingFinished, + this, &QHelpSearchEnginePrivate::indexingFinished); } indexWriter->cancelIndexing(); @@ -136,7 +213,7 @@ indexWriter->cancelIndexing(); } - void search(const QList &queryList) + void search(const QString &searchInput) { if (helpEngine.isNull()) return; @@ -145,18 +222,16 @@ return; if (!indexReader) { -#if defined(QT_CLUCENE_SUPPORT) - indexReader = new QHelpSearchIndexReaderClucene(); -#else indexReader = new QHelpSearchIndexReaderDefault(); -#endif // QT_CLUCENE_SUPPORT - connect(indexReader, SIGNAL(searchingStarted()), this, SIGNAL(searchingStarted())); - connect(indexReader, SIGNAL(searchingFinished(int)), this, SIGNAL(searchingFinished(int))); + connect(indexReader, &fulltextsearch::QHelpSearchIndexReader::searchingStarted, + this, &QHelpSearchEnginePrivate::searchingStarted); + connect(indexReader, &fulltextsearch::QHelpSearchIndexReader::searchingFinished, + this, &QHelpSearchEnginePrivate::searchingFinished); } - m_queryList = queryList; + m_searchInput = searchInput; indexReader->cancelSearching(); - indexReader->search(helpEngine->collectionFile(), indexFilesFolder(), queryList); + indexReader->search(helpEngine->collectionFile(), indexFilesFolder(), searchInput); } void cancelSearching() @@ -177,35 +252,27 @@ return indexFilesFolder; } -private slots: - void optimizeIndex() - { -#if defined(QT_CLUCENE_SUPPORT) - if (indexWriter && !helpEngine.isNull()) { - indexWriter->optimizeIndex(); - } -#endif - } - private: friend class QHelpSearchEngine; - QHelpSearchQueryWidget *queryWidget; - QHelpSearchResultWidget *resultWidget; + bool m_isIndexingScheduled = false; + + QHelpSearchQueryWidget *queryWidget = nullptr; + QHelpSearchResultWidget *resultWidget = nullptr; - fulltextsearch::QHelpSearchIndexReader *indexReader; - QHelpSearchIndexWriter *indexWriter; + fulltextsearch::QHelpSearchIndexReader *indexReader = nullptr; + QHelpSearchIndexWriter *indexWriter = nullptr; QPointer helpEngine; - QList m_queryList; + QString m_searchInput; }; #include "qhelpsearchengine.moc" - /*! \class QHelpSearchQuery + \obsolete \since 4.4 \inmodule QtHelp \brief The QHelpSearchQuery class contains the field name and the associated @@ -215,6 +282,8 @@ term. Depending on the field the search term might get split up into separate terms to be parsed differently by the search engine. + \note This class has been deprecated in favor of QString. + \sa QHelpSearchQueryWidget */ @@ -236,15 +305,14 @@ \value DEFAULT the default field provided by the search widget, several terms should be split and stored in the word list except search terms enclosed in quotes. - \value FUZZY a field only provided in use with clucene. Terms should be split in separate + \value FUZZY \obsolete Terms should be split in separate words and passed to the search engine. - \value WITHOUT a field only provided in use with clucene. Terms should be split in separate + \value WITHOUT \obsolete Terms should be split in separate words and passed to the search engine. - \value PHRASE a field only provided in use with clucene. Terms should not be split in separate - words. - \value ALL a field only provided in use with clucene. Terms should be split in separate + \value PHRASE \obsolete Terms should not be split in separate words. + \value ALL \obsolete Terms should be split in separate words and passed to the search engine - \value ATLEAST a field only provided in use with clucene. Terms should be split in separate + \value ATLEAST \obsolete Terms should be split in separate words and passed to the search engine */ @@ -264,23 +332,20 @@ on the end of the indexing process the indexingFinished() is emitted. To stop the indexing one can call cancelIndexing(). - While the indexing process has finished, the search engine can now be used to search - thru its index for a given term. To do this one may use the possibility of creating the - QHelpSearchQuery list by self or reuse the QHelpSearchQueryWidget which has the inbuild - functionality to set up a proper search queries list that get's passed to the search engines - search() function. - - After the list of querys has been passed to the search engine, the signal searchingStarted() - is emitted and after the search has finished the searchingFinished() signal is emitted. The - search process can be stopped by calling cancelSearching(). - - If the search succeeds, the searchingFinished() will be called with the search hits count, - which can be reused to fetch the search hits from the search engine. Calling the hits() - function with the range of hits you would like to get will return a list of the requested - SearchHits. They basically constist at the moment of a pair of strings where the values - of that pair are the documentation file path and the page title. + When the indexing process has finished, the search engine can be used to + search through the index for a given term using the search() function. When + the search input is passed to the search engine, the searchingStarted() + signal is emitted. When the search finishes, the searchingFinished() signal + is emitted. The search process can be stopped by calling cancelSearching(). + + If the search succeeds, searchingFinished() is called with the search result + count to fetch the search results from the search engine. Calling the + searchResults() function with a range returns a list of QHelpSearchResult + objects within the range. The results consist of the document title and URL, + as well as a snippet from the document that contains the best match for the + search input. - To display the given hits use the QHelpSearchResultWidget or build up your own one if you need + To display the given search results use the QHelpSearchResultWidget or build up your own one if you need more advanced functionality. Note that the QHelpSearchResultWidget can not be instantiated directly, you must retrieve the widget from the search engine in use as all connections will be established for you by the widget itself. @@ -305,10 +370,10 @@ */ /*! - \fn void QHelpSearchEngine::searchingFinished(int hits) + \fn void QHelpSearchEngine::searchingFinished(int searchResultCount) This signal is emitted when the search process is complete. - The hit count is stored in \a hits. + The search result count is stored in \a searchResultCount. */ /*! @@ -323,12 +388,17 @@ { d = new QHelpSearchEnginePrivate(helpEngine); - connect(helpEngine, SIGNAL(setupFinished()), this, SLOT(indexDocumentation())); + connect(helpEngine, &QHelpEngineCore::setupFinished, + this, &QHelpSearchEngine::scheduleIndexDocumentation); - connect(d, SIGNAL(indexingStarted()), this, SIGNAL(indexingStarted())); - connect(d, SIGNAL(indexingFinished()), this, SIGNAL(indexingFinished())); - connect(d, SIGNAL(searchingStarted()), this, SIGNAL(searchingStarted())); - connect(d, SIGNAL(searchingFinished(int)), this, SIGNAL(searchingFinished(int))); + connect(d, &QHelpSearchEnginePrivate::indexingStarted, + this, &QHelpSearchEngine::indexingStarted); + connect(d, &QHelpSearchEnginePrivate::indexingFinished, + this, &QHelpSearchEngine::indexingFinished); + connect(d, &QHelpSearchEnginePrivate::searchingStarted, + this, &QHelpSearchEngine::searchingStarted); + connect(d, &QHelpSearchEnginePrivate::searchingFinished, + this, &QHelpSearchEngine::searchingFinished); } /*! @@ -364,25 +434,37 @@ /*! \obsolete - Returns the amount of hits the search engine found. - \sa hitCount() + Use searchResultCount() instead. */ int QHelpSearchEngine::hitsCount() const { - return d->hitCount(); + return d->searchResultCount(); } /*! \since 4.6 - Returns the amount of hits the search engine found. + \obsolete + Use searchResultCount() instead. */ int QHelpSearchEngine::hitCount() const { - return d->hitCount(); + return d->searchResultCount(); +} + +/*! + \since 5.9 + Returns the number of results the search engine found. +*/ +int QHelpSearchEngine::searchResultCount() const +{ + return d->searchResultCount(); } /*! \typedef QHelpSearchEngine::SearchHit + \obsolete + + Use QHelpSearchResult instead. Typedef for QPair. The values of that pair are the documentation file path and the page title. @@ -391,20 +473,45 @@ */ /*! - Returns a list of search hits within the range of \a start \a end. + \obsolete + Use searchResults() instead. */ QList QHelpSearchEngine::hits(int start, int end) const { - return d->hits(start, end); + QList hits; + for (const QHelpSearchResult &result : searchResults(start, end)) + hits.append(qMakePair(result.url().toString(), result.title())); + return hits; } /*! - Returns the list of queries last searched for. + \since 5.9 + Returns a list of search results within the range from the index + specified by \a start to the index specified by \a end. +*/ +QVector QHelpSearchEngine::searchResults(int start, int end) const +{ + return d->searchResults(start, end); +} + +/*! + \since 5.9 + Returns the phrase that was last searched for. +*/ +QString QHelpSearchEngine::searchInput() const +{ + return d->m_searchInput; +} + +/*! + \obsolete \since 4.5 + Use searchInput() instead. */ QList QHelpSearchEngine::query() const { - return d->m_queryList; + return QList() << QHelpSearchQuery(QHelpSearchQuery::DEFAULT, + d->m_searchInput.split(QChar::Space)); } /*! @@ -432,16 +539,54 @@ } /*! - Starts the search process using the given list of queries \a queryList - build by the search field name and the values to search for. + \since 5.9 + Starts the search process using the given search phrase \a searchInput. + + The phrase may consist of several words. By default, the search engine returns + the list of documents that contain all the specified words. + The phrase may contain any combination of the logical operators AND, OR, and + NOT. The operator must be written in all capital letters, otherwise it will + be considered a part of the search phrase. + + If double quotation marks are used to group the words, + the search engine will search for an exact match of the quoted phrase. + + For more information about the text query syntax, + see \l {https://sqlite.org/fts5.html#full_text_query_syntax} + {SQLite FTS5 Extension}. +*/ +void QHelpSearchEngine::search(const QString &searchInput) +{ + d->search(searchInput); +} + +/*! + \obsolete + Use search(const QString &searchInput) instead. */ void QHelpSearchEngine::search(const QList &queryList) { - d->search(queryList); + if (queryList.isEmpty()) + return; + + d->search(queryList.first().wordList.join(QChar::Space)); +} + +/*! + \internal +*/ +void QHelpSearchEngine::scheduleIndexDocumentation() +{ + if (d->m_isIndexingScheduled) + return; + + d->m_isIndexingScheduled = true; + QTimer::singleShot(0, this, &QHelpSearchEngine::indexDocumentation); } void QHelpSearchEngine::indexDocumentation() { + d->m_isIndexingScheduled = false; d->updateIndex(); } diff -Nru qttools-opensource-src-5.7.1/src/assistant/help/qhelpsearchengine.h qttools-opensource-src-5.9.1/src/assistant/help/qhelpsearchengine.h --- qttools-opensource-src-5.7.1/src/assistant/help/qhelpsearchengine.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/help/qhelpsearchengine.h 2017-06-23 12:03:39.000000000 +0000 @@ -45,16 +45,17 @@ #include #include #include +#include #include #include QT_BEGIN_NAMESPACE - class QHelpEngineCore; class QHelpSearchQueryWidget; -class QHelpSearchResultWidget; class QHelpSearchEnginePrivate; +class QHelpSearchResultData; +class QHelpSearchResultWidget; class QHELP_EXPORT QHelpSearchQuery { @@ -70,6 +71,24 @@ QStringList wordList; }; +class QHELP_EXPORT QHelpSearchResult +{ +public: + QHelpSearchResult(); + QHelpSearchResult(const QHelpSearchResult &other); + QHelpSearchResult(const QUrl &url, const QString &title, const QString &snippet); + ~QHelpSearchResult(); + + QHelpSearchResult &operator=(const QHelpSearchResult &other); + + QString title() const; + QUrl url() const; + QString snippet() const; + +private: + QSharedDataPointer d; +}; + class QHELP_EXPORT QHelpSearchEngine : public QObject { Q_OBJECT @@ -81,29 +100,38 @@ QHelpSearchQueryWidget* queryWidget(); QHelpSearchResultWidget* resultWidget(); -#ifdef QT_DEPRECATED +#if QT_DEPRECATED_SINCE(5, 9) + typedef QPair SearchHit; + QT_DEPRECATED int hitsCount() const; + QT_DEPRECATED int hitCount() const; + QT_DEPRECATED QList hits(int start, int end) const; + QT_DEPRECATED QList query() const; #endif - int hitCount() const; - - typedef QPair SearchHit; - QList hits(int start, int end) const; - QList query() const; + int searchResultCount() const; + QVector searchResults(int start, int end) const; + QString searchInput() const; public Q_SLOTS: void reindexDocumentation(); void cancelIndexing(); - void search(const QList &queryList); +#if QT_DEPRECATED_SINCE(5, 9) + QT_DEPRECATED void search(const QList &queryList); +#endif + + void search(const QString &searchInput); void cancelSearching(); + void scheduleIndexDocumentation(); + Q_SIGNALS: void indexingStarted(); void indexingFinished(); void searchingStarted(); - void searchingFinished(int hits); + void searchingFinished(int searchResultCount); private Q_SLOTS: void indexDocumentation(); diff -Nru qttools-opensource-src-5.7.1/src/assistant/help/qhelpsearchindex_default.cpp qttools-opensource-src-5.9.1/src/assistant/help/qhelpsearchindex_default.cpp --- qttools-opensource-src-5.7.1/src/assistant/help/qhelpsearchindex_default.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/help/qhelpsearchindex_default.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,58 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the Qt Assistant of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qhelpsearchindex_default_p.h" - -QT_BEGIN_NAMESPACE - -QDataStream &operator>>(QDataStream &s, Document &l) -{ - s >> l.docNumber; - s >> l.frequency; - return s; -} - -QDataStream &operator<<(QDataStream &s, const Document &l) -{ - s << qint16(l.docNumber); - s << qint16(l.frequency); - return s; -} - -QT_END_NAMESPACE diff -Nru qttools-opensource-src-5.7.1/src/assistant/help/qhelpsearchindex_default_p.h qttools-opensource-src-5.9.1/src/assistant/help/qhelpsearchindex_default_p.h --- qttools-opensource-src-5.7.1/src/assistant/help/qhelpsearchindex_default_p.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/help/qhelpsearchindex_default_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,147 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the Qt Assistant of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QHELPSEARCHINDEXDEFAULT_H -#define QHELPSEARCHINDEXDEFAULT_H - -// -// W A R N I N G -// ------------- -// -// This file is not part of the Qt API. It exists for the convenience -// of the help generator tools. This header file may change from version -// to version without notice, or even be removed. -// -// We mean it. -// - -#include -#include -#include - -QT_BEGIN_NAMESPACE - -namespace QtHelpInternal { - -struct Document { - Document(qint16 d, qint16 f) - : docNumber(d), frequency(f) {} - - Document() - : docNumber(-1), frequency(0) {} - - bool operator==(const Document &doc) const { - return docNumber == doc.docNumber; - } - bool operator<(const Document &doc) const { - return frequency > doc.frequency; - } - bool operator<=(const Document &doc) const { - return frequency >= doc.frequency; - } - bool operator>(const Document &doc) const { - return frequency < doc.frequency; - } - - qint16 docNumber; - qint16 frequency; -}; - -struct DocumentInfo : public Document { - DocumentInfo() - : Document(-1, 0), documentTitle(QString()), documentUrl(QString()) {} - - DocumentInfo(qint16 d, qint16 f, const QString &title, const QString &url) - : Document(d, f), documentTitle(title), documentUrl(url) {} - - DocumentInfo(const Document &document, const QString &title, const QString &url) - : Document(document.docNumber, document.frequency), documentTitle(title), documentUrl(url) {} - - QString documentTitle; - QString documentUrl; -}; - -struct Entry { - Entry(qint16 d) { documents.append(Document(d, 1)); } - Entry(QVector l) : documents(l) {} - - QVector documents; -}; - -struct PosEntry { - PosEntry(int p) { positions.append(p); } - QList positions; -}; - -struct Term { - Term() : frequency(-1) {} - Term(const QString &t, int f, QVector l) : term(t), frequency(f), documents(l) {} - QString term; - int frequency; - QVectordocuments; - bool operator<(const Term &i2) const { return frequency < i2.frequency; } -}; - -struct TermInfo { - TermInfo() : frequency(-1) {} - TermInfo(const QString &t, int f, QVector l) - : term(t), frequency(f), documents(l) {} - - bool operator<(const TermInfo &i2) const { return frequency < i2.frequency; } - - QString term; - int frequency; - QVectordocuments; -}; - -} // namespace QtHelpInternal - -using QtHelpInternal::Document; -using QtHelpInternal::DocumentInfo; -using QtHelpInternal::Entry; -using QtHelpInternal::PosEntry; -using QtHelpInternal::Term; -using QtHelpInternal::TermInfo; - -QDataStream &operator>>(QDataStream &s, Document &l); -QDataStream &operator<<(QDataStream &s, const Document &l); - -QT_END_NAMESPACE - -#endif // QHELPSEARCHINDEXDEFAULT_H diff -Nru qttools-opensource-src-5.7.1/src/assistant/help/qhelpsearchindexreader_clucene.cpp qttools-opensource-src-5.9.1/src/assistant/help/qhelpsearchindexreader_clucene.cpp --- qttools-opensource-src-5.7.1/src/assistant/help/qhelpsearchindexreader_clucene.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/help/qhelpsearchindexreader_clucene.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,472 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the Qt Assistant of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "private/qindexreader_p.h" -#include "private/qqueryparser_p.h" -#include "private/qsearchable_p.h" -#include "qclucenefieldnames_p.h" -#include "qhelpenginecore.h" - -#include "qhelpsearchindexreader_clucene_p.h" - -#include -#include -#include -#include -#include -#include -#include -#include - -QT_BEGIN_NAMESPACE - -namespace fulltextsearch { -namespace clucene { - -QHelpSearchIndexReaderClucene::QHelpSearchIndexReaderClucene() - : QHelpSearchIndexReader() -{ - // nothing todo -} - -QHelpSearchIndexReaderClucene::~QHelpSearchIndexReaderClucene() -{ -} - - -void QHelpSearchIndexReaderClucene::run() -{ - mutex.lock(); - - if (m_cancel) { - mutex.unlock(); - return; - } - - const QString collectionFile(this->m_collectionFile); - const QList &queryList = this->m_query; - const QString indexPath(m_indexFilesFolder); - - mutex.unlock(); - - QHelpEngineCore engine(collectionFile, 0); - if (!engine.setupData()) - return; - - QFileInfo fInfo(indexPath); - if (fInfo.exists() && !fInfo.isWritable()) { - qWarning("Full Text Search, could not read index (missing permissions)."); - return; - } - - if(QCLuceneIndexReader::indexExists(indexPath)) { - mutex.lock(); - if (m_cancel) { - mutex.unlock(); - return; - } - mutex.unlock(); - - emit searchingStarted(); - - try { - QCLuceneBooleanQuery booleanQueryTitle; - QCLuceneBooleanQuery booleanQueryContent; - QCLuceneStandardAnalyzer analyzer; - const QStringList& attribList = - engine.filterAttributes(engine.currentFilter()); - bool titleQueryIsValid = buildQuery(queryList, TitleTokenizedField, - attribList, booleanQueryTitle, analyzer); - bool contentQueryIsValid = buildQuery(queryList, ContentField, - attribList, booleanQueryContent, analyzer); - if (!titleQueryIsValid && !contentQueryIsValid) { - emit searchingFinished(0); - return; - } - - QCLuceneIndexSearcher indexSearcher(indexPath); - - // QCLuceneHits object must be allocated on the heap, because - // there is no default constructor. - QSharedPointer titleHits; - QSharedPointer contentHits; - if (titleQueryIsValid) { - titleHits = QSharedPointer(new QCLuceneHits( - indexSearcher.search(booleanQueryTitle))); - } - if (contentQueryIsValid) { - contentHits = QSharedPointer(new QCLuceneHits( - indexSearcher.search(booleanQueryContent))); - } - bool boost = true; - if ((titleHits.isNull() || titleHits->length() == 0) - && (contentHits.isNull() || contentHits->length() == 0)) { - booleanQueryTitle = QCLuceneBooleanQuery(); - booleanQueryContent = QCLuceneBooleanQuery(); - titleQueryIsValid = - buildTryHarderQuery(queryList, TitleTokenizedField, - attribList, booleanQueryTitle, analyzer); - contentQueryIsValid = - buildTryHarderQuery(queryList, ContentField, attribList, - booleanQueryContent, analyzer); - if (!titleQueryIsValid && !contentQueryIsValid) { - emit searchingFinished(0); - return; - } - if (titleQueryIsValid) { - titleHits = QSharedPointer(new QCLuceneHits( - indexSearcher.search(booleanQueryTitle))); - } - if (contentQueryIsValid) { - contentHits = QSharedPointer(new QCLuceneHits( - indexSearcher.search(booleanQueryContent))); - } - boost = false; - } - QList > cluceneHitsList; - if (!titleHits.isNull()) - cluceneHitsList.append(titleHits); - if (!contentHits.isNull()) - cluceneHitsList.append(contentHits); - - QSet pathSet; - QCLuceneDocument document; - const QStringList namespaceList = engine.registeredDocumentations(); - - foreach (const QSharedPointer &hits, cluceneHitsList) { - for (qint32 i = 0; i < hits->length(); i++) { - document = hits->document(i); - const QString path = document.get(PathField); - if (!pathSet.contains(path) && namespaceList.contains( - document.get(NamespaceField), Qt::CaseInsensitive)) { - pathSet.insert(path); - hitList.append(qMakePair(path, document.get(TitleField))); - } - document.clear(); - - mutex.lock(); - if (m_cancel) { - mutex.unlock(); - emit searchingFinished(0); - return; - } - mutex.unlock(); - } - } - - indexSearcher.close(); - const int count = hitList.count(); - if ((count > 0) && boost) - boostSearchHits(engine, hitList, queryList); - emit searchingFinished(hitList.count()); - } catch(...) { - mutex.lock(); - hitList.clear(); - mutex.unlock(); - emit searchingFinished(0); - } - } -} - -bool QHelpSearchIndexReaderClucene::buildQuery( - const QList &queries, const QString &fieldName, - const QStringList &filterAttributes, QCLuceneBooleanQuery &booleanQuery, - QCLuceneAnalyzer &analyzer) -{ - bool queryIsValid = false; - foreach (const QHelpSearchQuery &query, queries) { - if (fieldName != ContentField && isNegativeQuery(query)) { - queryIsValid = false; - break; - } - switch (query.fieldName) { - case QHelpSearchQuery::FUZZY: - if (addFuzzyQuery(query, fieldName, booleanQuery, analyzer)) - queryIsValid = true; - break; - case QHelpSearchQuery::WITHOUT: - if (fieldName != ContentField) - return false; - if (addWithoutQuery(query, fieldName, booleanQuery)) - queryIsValid = true; - break; - case QHelpSearchQuery::PHRASE: - if (addPhraseQuery(query, fieldName, booleanQuery)) - queryIsValid = true; - break; - case QHelpSearchQuery::ALL: - if (addAllQuery(query, fieldName, booleanQuery)) - queryIsValid = true; - break; - case QHelpSearchQuery::DEFAULT: - if (addDefaultQuery(query, fieldName, true, booleanQuery, analyzer)) - queryIsValid = true; - break; - case QHelpSearchQuery::ATLEAST: - if (addAtLeastQuery(query, fieldName, booleanQuery, analyzer)) - queryIsValid = true; - break; - default: - Q_ASSERT(!"Invalid field name"); - } - } - - if (queryIsValid && !filterAttributes.isEmpty()) { - queryIsValid = - addAttributesQuery(filterAttributes, booleanQuery, analyzer); - } - - return queryIsValid; -} - -bool QHelpSearchIndexReaderClucene::buildTryHarderQuery( - const QList &queries, const QString &fieldName, - const QStringList &filterAttributes, QCLuceneBooleanQuery &booleanQuery, - QCLuceneAnalyzer &analyzer) -{ - if (queries.isEmpty()) - return false; - const QHelpSearchQuery &query = queries.front(); - if (query.fieldName != QHelpSearchQuery::DEFAULT) - return false; - if (isNegativeQuery(query)) - return false; - if (!addDefaultQuery(query, fieldName, !filterAttributes.isEmpty(), booleanQuery, analyzer)) - return false; - if (filterAttributes.isEmpty()) - return true; - return addAttributesQuery(filterAttributes, booleanQuery, analyzer); -} - -bool QHelpSearchIndexReaderClucene::isNegativeQuery(const QHelpSearchQuery &query) const -{ - const QString &search = query.wordList.join(QLatin1Char(' ')); - return search.contains(QLatin1Char('!')) || search.contains(QLatin1Char('-')) - || search.contains(QLatin1String(" NOT ")); -} - -bool QHelpSearchIndexReaderClucene::addFuzzyQuery(const QHelpSearchQuery &query, - const QString &fieldName, QCLuceneBooleanQuery &booleanQuery, - QCLuceneAnalyzer &analyzer) -{ - bool queryIsValid = false; - const QLatin1String fuzzy("~"); - foreach (const QString &term, query.wordList) { - if (!term.isEmpty()) { - QCLuceneQuery *lQuery = - QCLuceneQueryParser::parse(term + fuzzy, fieldName, analyzer); - if (lQuery != 0) { - booleanQuery.add(lQuery, true, false, false); - queryIsValid = true; - } - } - } - return queryIsValid; -} - -bool QHelpSearchIndexReaderClucene::addWithoutQuery(const QHelpSearchQuery &query, - const QString &fieldName, QCLuceneBooleanQuery &booleanQuery) -{ - bool queryIsValid = false; - const QStringList &stopWords = QCLuceneStopAnalyzer().englishStopWords(); - foreach (const QString &term, query.wordList) { - if (stopWords.contains(term, Qt::CaseInsensitive)) - continue; - QCLuceneQuery *lQuery = new QCLuceneTermQuery(QCLuceneTerm( - fieldName, term.toLower())); - booleanQuery.add(lQuery, true, false, true); - queryIsValid = true; - } - return queryIsValid; -} - -bool QHelpSearchIndexReaderClucene::addPhraseQuery(const QHelpSearchQuery &query, - const QString &fieldName, QCLuceneBooleanQuery &booleanQuery) -{ - const QString phrase = query.wordList.at(0).toLower(); - QStringList terms = phrase.split(QLatin1String(" ")); - foreach (const QString &word, QCLuceneStopAnalyzer().englishStopWords()) - terms.removeAll(word); - - if (terms.isEmpty()) - return false; - - if (terms.count() == 1) { - QCLuceneQuery *term = new QCLuceneTermQuery(QCLuceneTerm(fieldName, terms[0].toLower())); - booleanQuery.add(term, true, true, false); - return true; - } - - QCLucenePhraseQuery *phraseQuery = new QCLucenePhraseQuery(); - foreach (const QString &term, terms) - phraseQuery->addTerm(QCLuceneTerm(fieldName, term.toLower())); - booleanQuery.add(phraseQuery, true, true, false); - return true; -} - -bool QHelpSearchIndexReaderClucene::addAllQuery(const QHelpSearchQuery &query, - const QString &fieldName, QCLuceneBooleanQuery &booleanQuery) -{ - bool queryIsValid = false; - const QStringList &stopWords = QCLuceneStopAnalyzer().englishStopWords(); - foreach (const QString &term, query.wordList) { - if (stopWords.contains(term, Qt::CaseInsensitive)) - continue; - QCLuceneQuery *lQuery = new QCLuceneTermQuery(QCLuceneTerm( - fieldName, term.toLower())); - booleanQuery.add(lQuery, true, true, false); - queryIsValid = true; - } - return queryIsValid; -} - -bool QHelpSearchIndexReaderClucene::addDefaultQuery(const QHelpSearchQuery &query, - const QString &fieldName, bool allTermsRequired, - QCLuceneBooleanQuery &booleanQuery, - QCLuceneAnalyzer &analyzer) -{ - bool queryIsValid = false; - foreach (const QString &term, query.wordList) { - QCLuceneQuery *lQuery = - QCLuceneQueryParser::parse(term.toLower(), fieldName, analyzer); - if (lQuery) { - booleanQuery.add(lQuery, true, allTermsRequired, false); - queryIsValid = true; - } - } - return queryIsValid; -} - -bool QHelpSearchIndexReaderClucene::addAtLeastQuery( - const QHelpSearchQuery &query, const QString &fieldName, - QCLuceneBooleanQuery &booleanQuery, QCLuceneAnalyzer &analyzer) -{ - bool queryIsValid = false; - foreach (const QString &term, query.wordList) { - if (!term.isEmpty()) { - QCLuceneQuery *lQuery = - QCLuceneQueryParser::parse(term, fieldName, analyzer); - if (lQuery) { - booleanQuery.add(lQuery, true, false, false); - queryIsValid = true; - } - } - } - return queryIsValid; -} - -bool QHelpSearchIndexReaderClucene::addAttributesQuery( - const QStringList &filterAttributes, QCLuceneBooleanQuery &booleanQuery, - QCLuceneAnalyzer &analyzer) -{ - QCLuceneQuery* lQuery = QCLuceneQueryParser::parse(QLatin1String("+") - + filterAttributes.join(QLatin1String(" +")), AttributeField, analyzer); - if (!lQuery) - return false; - booleanQuery.add(lQuery, true, true, false); - return true; -} - -void QHelpSearchIndexReaderClucene::boostSearchHits(const QHelpEngineCore &engine, - QList &hitList, const QList &queryList) -{ - foreach (const QHelpSearchQuery &query, queryList) { - if (query.fieldName != QHelpSearchQuery::DEFAULT) - continue; - - QString joinedQuery = query.wordList.join(QLatin1String(" ")); - - QCLuceneStandardAnalyzer analyzer; - QCLuceneQuery *parsedQuery = QCLuceneQueryParser::parse( - joinedQuery, ContentField, analyzer); - - if (parsedQuery) { - joinedQuery = parsedQuery->toString(); - delete parsedQuery; - } - - const QString contentString(ContentField + QLatin1String(":")); - int length = contentString.length(); - int index = joinedQuery.indexOf(contentString); - - QString term; - int nextIndex = 0; - QStringList searchTerms; - while (index != -1) { - nextIndex = joinedQuery.indexOf(contentString, index + 1); - term = joinedQuery.mid(index + length, nextIndex - (length + index)).simplified(); - if (term.startsWith(QLatin1String("\"")) - && term.endsWith(QLatin1String("\""))) { - searchTerms.append(term.remove(QLatin1String("\""))); - } else { - searchTerms += term.split(QLatin1Char(' ')); - } - index = nextIndex; - } - searchTerms.removeDuplicates(); - - int count = qMin(75, hitList.count()); - QMap hitMap; - for (int i = 0; i < count; ++i) { - const QHelpSearchEngine::SearchHit &hit = hitList.at(i); - QString data = QString::fromUtf8(engine.fileData(hit.first)); - - int counter = 0; - foreach (const QString &term, searchTerms) - counter += data.count(term, Qt::CaseInsensitive); - hitMap.insertMulti(counter, hit); - } - - QList boostedList; - QMap::const_iterator it = hitMap.constEnd(); - do { - --it; - boostedList.append(it.value()); - } while (it != hitMap.constBegin()); - boostedList += hitList.mid(count, hitList.count()); - mutex.lock(); - hitList = boostedList; - mutex.unlock(); - } -} - -} // namespace clucene -} // namespace fulltextsearch - -QT_END_NAMESPACE diff -Nru qttools-opensource-src-5.7.1/src/assistant/help/qhelpsearchindexreader_clucene_p.h qttools-opensource-src-5.9.1/src/assistant/help/qhelpsearchindexreader_clucene_p.h --- qttools-opensource-src-5.7.1/src/assistant/help/qhelpsearchindexreader_clucene_p.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/help/qhelpsearchindexreader_clucene_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,112 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the Qt Assistant of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QHELPSEARCHINDEXREADERCLUCENE_H -#define QHELPSEARCHINDEXREADERCLUCENE_H - -// -// W A R N I N G -// ------------- -// -// This file is not part of the Qt API. It exists for the convenience -// of the help generator tools. This header file may change from version -// to version without notice, or even be removed. -// -// We mean it. -// - -#include -#include -#include - -#include "private/qanalyzer_p.h" -#include "private/qquery_p.h" -#include "qhelpsearchindexreader_p.h" - -QT_BEGIN_NAMESPACE - -namespace fulltextsearch { -namespace clucene { - -class QHelpSearchIndexReaderClucene : public QHelpSearchIndexReader -{ - Q_OBJECT - -public: - QHelpSearchIndexReaderClucene(); - ~QHelpSearchIndexReaderClucene(); - -private: - void run(); - void boostSearchHits(const QHelpEngineCore &engine, QList &hitList, - const QList &queryList); - bool buildQuery(const QList &queries, - const QString &fieldName, - const QStringList &filterAttributes, - QCLuceneBooleanQuery &booleanQuery, - QCLuceneAnalyzer &analyzer); - bool buildTryHarderQuery(const QList &queries, - const QString &fieldName, - const QStringList &filterAttributes, - QCLuceneBooleanQuery &booleanQuery, - QCLuceneAnalyzer &analyzer); - bool addFuzzyQuery(const QHelpSearchQuery &query, const QString &fieldName, - QCLuceneBooleanQuery &booleanQuery, QCLuceneAnalyzer &analyzer); - bool addWithoutQuery(const QHelpSearchQuery &query, const QString &fieldName, - QCLuceneBooleanQuery &booleanQuery); - bool addPhraseQuery(const QHelpSearchQuery &query, const QString &fieldName, - QCLuceneBooleanQuery &booleanQuery); - bool addAllQuery(const QHelpSearchQuery &query, const QString &fieldName, - QCLuceneBooleanQuery &booleanQuery); - bool addDefaultQuery(const QHelpSearchQuery &query, const QString &fieldName, - bool allTermsRequired, QCLuceneBooleanQuery &booleanQuery, - QCLuceneAnalyzer &analyzer); - bool addAtLeastQuery(const QHelpSearchQuery &query, const QString &fieldName, - QCLuceneBooleanQuery &booleanQuery, QCLuceneAnalyzer &analyzer); - bool addAttributesQuery(const QStringList &filterAttributes, - QCLuceneBooleanQuery &booleanQuery, QCLuceneAnalyzer &analyzer); - bool isNegativeQuery(const QHelpSearchQuery &query) const; -}; - -} // namespace clucene -} // namespace fulltextsearch - -QT_END_NAMESPACE - -#endif // QHELPSEARCHINDEXREADERCLUCENE_H diff -Nru qttools-opensource-src-5.7.1/src/assistant/help/qhelpsearchindexreader.cpp qttools-opensource-src-5.9.1/src/assistant/help/qhelpsearchindexreader.cpp --- qttools-opensource-src-5.7.1/src/assistant/help/qhelpsearchindexreader.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/help/qhelpsearchindexreader.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -43,57 +43,43 @@ namespace fulltextsearch { -QHelpSearchIndexReader::QHelpSearchIndexReader() - : QThread() - , m_cancel(false) -{ - // nothing todo -} - QHelpSearchIndexReader::~QHelpSearchIndexReader() { - mutex.lock(); - this->m_cancel = true; - mutex.unlock(); - + cancelSearching(); wait(); } void QHelpSearchIndexReader::cancelSearching() { - mutex.lock(); - this->m_cancel = true; - mutex.unlock(); + QMutexLocker lock(&m_mutex); + m_cancel = true; } void QHelpSearchIndexReader::search(const QString &collectionFile, const QString &indexFilesFolder, - const QList &queryList) + const QString &searchInput) { wait(); - this->hitList.clear(); - this->m_cancel = false; - this->m_query = queryList; - this->m_collectionFile = collectionFile; - this->m_indexFilesFolder = indexFilesFolder; + m_searchResults.clear(); + m_cancel = false; + m_searchInput = searchInput; + m_collectionFile = collectionFile; + m_indexFilesFolder = indexFilesFolder; start(QThread::NormalPriority); } -int QHelpSearchIndexReader::hitCount() const +int QHelpSearchIndexReader::searchResultCount() const { - QMutexLocker lock(&mutex); - return hitList.count(); + QMutexLocker lock(&m_mutex); + return m_searchResults.count(); } -QList QHelpSearchIndexReader::hits(int start, +QVector QHelpSearchIndexReader::searchResults(int start, int end) const { - QList hits; - QMutexLocker lock(&mutex); - for (int i = start; i < end && i < hitList.count(); ++i) - hits.append(hitList.at(i)); - return hits; + QMutexLocker lock(&m_mutex); + return m_searchResults.mid(start, end - start); } diff -Nru qttools-opensource-src-5.7.1/src/assistant/help/qhelpsearchindexreader_default.cpp qttools-opensource-src-5.9.1/src/assistant/help/qhelpsearchindexreader_default.cpp --- qttools-opensource-src-5.7.1/src/assistant/help/qhelpsearchindexreader_default.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/help/qhelpsearchindexreader_default.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -40,570 +40,209 @@ #include "qhelpenginecore.h" #include "qhelpsearchindexreader_default_p.h" -#include -#include -#include -#include -#include -#include -#include - -#include +#include +#include +#include QT_BEGIN_NAMESPACE namespace fulltextsearch { -namespace std { - -namespace { - QStringList split( const QString &str ) - { - QStringList lst; - int j = 0; - int i = str.indexOf(QLatin1Char('*'), j ); - - if (str.startsWith(QLatin1String("*"))) - lst << QLatin1String("*"); - - while ( i != -1 ) { - if ( i > j && i <= (int)str.length() ) { - lst << str.mid( j, i - j ); - lst << QLatin1String("*"); - } - j = i + 1; - i = str.indexOf(QLatin1Char('*'), j ); - } - - int l = str.length() - 1; - if ( str.mid( j, l - j + 1 ).length() > 0 ) - lst << str.mid( j, l - j + 1 ); - - return lst; - } -} - - -Reader::Reader() - : indexPath(QString()) - , indexFile(QString()) - , documentFile(QString()) -{ - termList.clear(); - indexTable.clear(); - searchIndexTable.clear(); -} - -Reader::~Reader() -{ - reset(); - searchIndexTable.clear(); -} - -bool Reader::readIndex() -{ - if (indexTable.contains(indexFile)) - return true; - - QFile idxFile(indexFile); - if (!idxFile.open(QFile::ReadOnly)) - return false; - - QString key; - int numOfDocs; - EntryTable entryTable; - QVector docs; - QDataStream dictStream(&idxFile); - while (!dictStream.atEnd()) { - dictStream >> key; - dictStream >> numOfDocs; - docs.resize(numOfDocs); - dictStream >> docs; - entryTable.insert(key, new Entry(docs)); - } - idxFile.close(); - - if (entryTable.isEmpty()) - return false; - - QFile docFile(documentFile); - if (!docFile.open(QFile::ReadOnly)) - return false; - - QString title, url; - DocumentList documentList; - QDataStream docStream(&docFile); - while (!docStream.atEnd()) { - docStream >> title; - docStream >> url; - documentList.append(QStringList(title) << url); - } - docFile.close(); - - if (documentList.isEmpty()) { - cleanupIndex(entryTable); - return false; - } - - indexTable.insert(indexFile, Index(entryTable, documentList)); - return true; -} - -bool Reader::initCheck() const -{ - return !searchIndexTable.isEmpty(); -} +namespace qt { void Reader::setIndexPath(const QString &path) { - indexPath = path; -} - -void Reader::filterFilesForAttributes(const QStringList &attributes) -{ - searchIndexTable.clear(); - for(IndexTable::ConstIterator it = indexTable.begin(); it != indexTable.end(); ++it) { - const QString fileName = it.key(); - bool containsAll = true; - QStringList split = fileName.split(QLatin1String("@")); - foreach (const QString &attribute, attributes) { - if (!split.contains(attribute, Qt::CaseInsensitive)) { - containsAll = false; - break; - } - } - - if (containsAll) - searchIndexTable.insert(fileName, it.value()); - } + m_indexPath = path; + m_namespaces.clear(); } -void Reader::setIndexFile(const QString &namespaceName, const QString &attributes) +void Reader::addNamespace(const QString &namespaceName, const QStringList &attributes) { - QString extension = namespaceName + QLatin1String("@") + attributes; - indexFile = indexPath + QLatin1String("/indexdb40.") + extension; - documentFile = indexPath + QLatin1String("/indexdoc40.") + extension; + m_namespaces.insert(namespaceName, attributes); } -bool Reader::splitSearchTerm(const QString &searchTerm, QStringList *terms, - QStringList *termSeq, QStringList *seqWords) -{ - QString term = searchTerm; - - term = term.simplified(); - term = term.replace(QLatin1String("\'"), QLatin1String("\"")); - term = term.replace(QLatin1String("`"), QLatin1String("\"")); - term = term.replace(QLatin1String("-"), QLatin1String(" ")); - term = term.replace(QRegExp(QLatin1String("\\s[\\S]?\\s")), QLatin1String(" ")); - - *terms = term.split(QLatin1Char(' ')); - QStringList::iterator it = terms->begin(); - for (; it != terms->end(); ++it) { - (*it) = (*it).simplified(); - (*it) = (*it).toLower(); - (*it) = (*it).replace(QLatin1String("\""), QLatin1String("")); - } - - if (term.contains(QLatin1Char('\"'))) { - if ((term.count(QLatin1Char('\"')))%2 == 0) { - int beg = 0; - int end = 0; - QString s; - beg = term.indexOf(QLatin1Char('\"'), beg); - while (beg != -1) { - beg++; - end = term.indexOf(QLatin1Char('\"'), beg); - s = term.mid(beg, end - beg); - s = s.toLower(); - s = s.simplified(); - if (s.contains(QLatin1Char('*'))) { - qWarning("Full Text Search, using a wildcard within phrases is not allowed."); - return false; +static QString namespacePlaceholders(const QMultiMap &namespaces) +{ + QString placeholders; + const auto &namespaceList = namespaces.uniqueKeys(); + bool firstNS = true; + for (const QString &ns : namespaceList) { + if (firstNS) + firstNS = false; + else + placeholders += QLatin1String(" OR "); + placeholders += QLatin1String("(namespace = ?"); + + const QList &attributeSets = namespaces.values(ns); + bool firstAS = true; + for (const QStringList &attributeSet : attributeSets) { + if (!attributeSet.isEmpty()) { + if (firstAS) { + firstAS = false; + placeholders += QLatin1String(" AND ("); + } else { + placeholders += QLatin1String(" OR "); } - *seqWords += s.split(QLatin1Char(' ')); - *termSeq << s; - beg = term.indexOf(QLatin1Char('\"'), end + 1); + placeholders += QLatin1String("attributes = ?"); } - } else { - qWarning("Full Text Search, the closing quotation mark is missing."); - return false; } + if (!firstAS) + placeholders += QLatin1Char(')'); // close "AND (" + placeholders += QLatin1Char(')'); } - - return true; + return placeholders; } -void Reader::searchInIndex(const QStringList &terms) +static void bindNamespacesAndAttributes(QSqlQuery *query, const QMultiMap &namespaces) { - foreach (const QString &term, terms) { - QVector documents; - - for(IndexTable::ConstIterator it = searchIndexTable.begin(); - it != searchIndexTable.end(); ++it) { - EntryTable entryTable = it.value().first; - DocumentList documentList = it.value().second; - - if (term.contains(QLatin1Char('*'))) - documents = setupDummyTerm(getWildcardTerms(term, entryTable), entryTable); - else if (entryTable.value(term)) - documents = entryTable.value(term)->documents; - else - continue; - - if (!documents.isEmpty()) { - DocumentInfo info; - QString title, url; - QVector documentsInfo; - foreach(const Document &doc, documents) { - info.docNumber = doc.docNumber; - info.frequency = doc.frequency; - info.documentUrl = documentList.at(doc.docNumber).at(1); - info.documentTitle = documentList.at(doc.docNumber).at(0); - documentsInfo.append(info); - } + QString placeholders; + const auto &namespaceList = namespaces.uniqueKeys(); + for (const QString &ns : namespaceList) { + query->addBindValue(ns); - bool found = false; - for(QList::Iterator tit = termList.begin(); - tit != termList.end(); ++tit) { - TermInfo *t = &(*tit); - if(t->term == term) { - t->documents += documentsInfo; - t->frequency += documentsInfo.count(); - found = true; break; - } - } - if (!found) - termList.append(TermInfo(term, documentsInfo.count(), documentsInfo)); - } + const QList &attributeSets = namespaces.values(ns); + for (const QStringList &attributeSet : attributeSets) { + if (!attributeSet.isEmpty()) + query->addBindValue(attributeSet.join(QLatin1Char('|'))); } } - ::std::sort(termList.begin(), termList.end()); } -QVector Reader::hits() +QVector Reader::queryTable(const QSqlDatabase &db, + const QString &tableName, + const QString &searchInput) const { - QVector documents; - if (!termList.count()) - return documents; - - documents = termList.takeFirst().documents; - for(QList::Iterator it = termList.begin(); it != termList.end(); ++it) { - TermInfo *t = &(*it); - QVector docs = t->documents; - for(QVector::Iterator minDoc_it = documents.begin(); - minDoc_it != documents.end(); ) { - bool found = false; - for (QVector::ConstIterator doc_it = docs.constBegin(); - doc_it != docs.constEnd(); ++doc_it ) { - if ( (*minDoc_it).docNumber == (*doc_it).docNumber ) { - (*minDoc_it).frequency += (*doc_it).frequency; - found = true; - break; - } - } - if (!found) - minDoc_it = documents.erase(minDoc_it); - else - ++minDoc_it; - } + const QString &nsPlaceholders = namespacePlaceholders(m_namespaces); + QSqlQuery query(db); + query.prepare(QLatin1String("SELECT url, title, snippet(") + tableName + + QLatin1String(", -1, '', '', '...', '10') FROM ") + tableName + + QLatin1String(" WHERE (") + nsPlaceholders + + QLatin1String(") AND ") + tableName + + QLatin1String(" MATCH ? ORDER BY rank")); + bindNamespacesAndAttributes(&query, m_namespaces); + query.addBindValue(searchInput); + query.exec(); + + QVector results; + + while (query.next()) { + const QString &url = query.value(QLatin1String("url")).toString(); + const QString &title = query.value(QLatin1String("title")).toString(); + const QString &snippet = query.value(2).toString(); + results.append(QHelpSearchResult(url, title, snippet)); } - ::std::sort(documents.begin(), documents.end()); - return documents; + return results; } -bool Reader::searchForPattern(const QStringList &patterns, const QStringList &words, - const QByteArray &data) +void Reader::searchInDB(const QString &searchInput) { - if (data.isEmpty()) - return false; + const QString &uniqueId = QHelpGlobal::uniquifyConnectionName(QLatin1String("QHelpReader"), this); + { + QSqlDatabase db = QSqlDatabase::addDatabase(QLatin1String("QSQLITE"), uniqueId); + db.setConnectOptions(QLatin1String("QSQLITE_OPEN_READONLY")); + db.setDatabaseName(m_indexPath + QLatin1String("/fts")); + if (db.open()) { + const QVector titleResults = queryTable(db, + QLatin1String("titles"), searchInput); + const QVector contentResults = queryTable(db, + QLatin1String("contents"), searchInput); - for(QHash::ConstIterator mit = - miniIndex.begin(); mit != miniIndex.end(); ++mit) { - delete mit.value(); - } - miniIndex.clear(); + // merge results form title and contents searches + m_searchResults = QVector(); - wordNum = 3; - QStringList::ConstIterator cIt = words.begin(); - for ( ; cIt != words.end(); ++cIt ) - miniIndex.insert(*cIt, new PosEntry(0)); - - QTextStream s(data); - QString text = s.readAll(); - bool valid = true; - const QChar *buf = text.unicode(); - QChar str[64]; - QChar c = buf[0]; - int j = 0; - int i = 0; - while ( j < text.length() ) { - if ( c == QLatin1Char('<') || c == QLatin1Char('&') ) { - valid = false; - if ( i > 1 ) - buildMiniIndex( QString(str,i) ); - i = 0; - c = buf[++j]; - continue; - } - if ( ( c == QLatin1Char('>') || c == QLatin1Char(';') ) && !valid ) { - valid = true; - c = buf[++j]; - continue; - } - if ( !valid ) { - c = buf[++j]; - continue; - } - if ( ( c.isLetterOrNumber() || c == QLatin1Char('_') ) && i < 63 ) { - str[i] = c.toLower(); - ++i; - } else { - if ( i > 1 ) - buildMiniIndex( QString(str,i) ); - i = 0; - } - c = buf[++j]; - } - if ( i > 1 ) - buildMiniIndex( QString(str,i) ); + QSet urls; - QStringList::ConstIterator patIt = patterns.begin(); - QStringList wordLst; - QList a, b; - QList::iterator aIt; - for ( ; patIt != patterns.end(); ++patIt ) { - wordLst = (*patIt).split(QLatin1Char(' ')); - a = miniIndex[ wordLst[0] ]->positions; - for ( int j = 1; j < (int)wordLst.count(); ++j ) { - b = miniIndex[ wordLst[j] ]->positions; - aIt = a.begin(); - while ( aIt != a.end() ) { - if ( b.contains( *aIt + 1 )) { - (*aIt)++; - ++aIt; - } else { - aIt = a.erase( aIt ); + for (const QHelpSearchResult &result : titleResults) { + const QUrl &url = result.url(); + if (!urls.contains(url)) { + urls.insert(url); + m_searchResults.append(result); } } - } - } - if ( a.count() ) - return true; - return false; -} -QVector Reader::setupDummyTerm(const QStringList &terms, - const EntryTable &entryTable) -{ - QList termList; - for (QStringList::ConstIterator it = terms.begin(); it != terms.end(); ++it) { - if (entryTable.value(*it)) { - Entry *e = entryTable.value(*it); - termList.append(Term(*it, e->documents.count(), e->documents ) ); - } - } - QVector maxList(0); - if ( !termList.count() ) - return maxList; - ::std::sort(termList.begin(), termList.end()); - - maxList = termList.takeLast().documents; - for(QList::Iterator it = termList.begin(); it != termList.end(); ++it) { - Term *t = &(*it); - QVector docs = t->documents; - for (QVector::iterator docIt = docs.begin(); docIt != docs.end(); ++docIt ) { - if ( maxList.indexOf( *docIt ) == -1 ) - maxList.append( *docIt ); - } - } - return maxList; -} - -QStringList Reader::getWildcardTerms(const QString &term, - const EntryTable &entryTable) -{ - QStringList lst; - QStringList terms = split(term); - QStringList::Iterator iter; - - for(EntryTable::ConstIterator it = entryTable.begin(); - it != entryTable.end(); ++it) { - int index = 0; - bool found = false; - QString text( it.key() ); - for ( iter = terms.begin(); iter != terms.end(); ++iter ) { - if ( *iter == QLatin1String("*") ) { - found = true; - continue; - } - if ( iter == terms.begin() && (*iter)[0] != text[0] ) { - found = false; - break; - } - index = text.indexOf( *iter, index ); - if ( *iter == terms.last() && index != (int)text.length()-1 ) { - index = text.lastIndexOf( *iter ); - if ( index != (int)text.length() - (int)(*iter).length() ) { - found = false; - break; + for (const QHelpSearchResult &result : contentResults) { + const QUrl &url = result.url(); + if (!urls.contains(url)) { + urls.insert(url); + m_searchResults.append(result); } } - if ( index != -1 ) { - found = true; - index += (*iter).length(); - continue; - } else { - found = false; - break; - } } - if (found) - lst << text; } - - return lst; -} - -void Reader::buildMiniIndex(const QString &string) -{ - if (miniIndex[string]) - miniIndex[string]->positions.append(wordNum); - ++wordNum; + QSqlDatabase::removeDatabase(uniqueId); } -void Reader::reset() +QVector Reader::searchResults() const { - for(IndexTable::Iterator it = indexTable.begin(); - it != indexTable.end(); ++it) { - cleanupIndex(it.value().first); - it.value().second.clear(); - } + return m_searchResults; } -void Reader::cleanupIndex(EntryTable &entryTable) +static bool attributesMatchFilter(const QStringList &attributes, + const QStringList &filter) { - for(EntryTable::ConstIterator it = - entryTable.begin(); it != entryTable.end(); ++it) { - delete it.value(); + for (const QString &attribute : filter) { + if (!attributes.contains(attribute, Qt::CaseInsensitive)) + return false; } - entryTable.clear(); -} - - -QHelpSearchIndexReaderDefault::QHelpSearchIndexReaderDefault() - : QHelpSearchIndexReader() -{ - // nothing todo -} - -QHelpSearchIndexReaderDefault::~QHelpSearchIndexReaderDefault() -{ + return true; } void QHelpSearchIndexReaderDefault::run() { - mutex.lock(); + QMutexLocker lock(&m_mutex); - if (m_cancel) { - mutex.unlock(); + if (m_cancel) return; - } - const QList &queryList = this->m_query; - const QLatin1String key("DefaultSearchNamespaces"); - const QString collectionFile(this->m_collectionFile); + const QString searchInput = m_searchInput; + const QString collectionFile = m_collectionFile; const QString indexPath = m_indexFilesFolder; - mutex.unlock(); + lock.unlock(); - QString queryTerm; - foreach (const QHelpSearchQuery &query, queryList) { - if (query.fieldName == QHelpSearchQuery::DEFAULT) { - queryTerm = query.wordList.at(0); - break; - } - } - - if (queryTerm.isEmpty()) + if (searchInput.isEmpty()) return; QHelpEngineCore engine(collectionFile, 0); if (!engine.setupData()) return; - const QStringList registeredDocs = engine.registeredDocumentations(); - const QStringList indexedNamespaces = engine.customValue(key).toString(). - split(QLatin1String("|"), QString::SkipEmptyParts); + const QStringList ®isteredDocs = engine.registeredDocumentations(); emit searchingStarted(); + const QStringList ¤tFilter = engine.filterAttributes(engine.currentFilter()); + // setup the reader m_reader.setIndexPath(indexPath); - foreach(const QString &namespaceName, registeredDocs) { - mutex.lock(); - if (m_cancel) { - mutex.unlock(); - searchingFinished(0); // TODO: check this ??? - return; - } - mutex.unlock(); - - const QList attributeSets = + for (const QString &namespaceName : registeredDocs) { + const QList &attributeSets = engine.filterAttributeSets(namespaceName); - foreach (const QStringList &attributes, attributeSets) { - // read all index files - m_reader.setIndexFile(namespaceName, attributes.join(QLatin1String("@"))); - if (!m_reader.readIndex()) { - qWarning("Full Text Search, could not read file for namespace: %s.", - namespaceName.toUtf8().constData()); + for (const QStringList &attributes : attributeSets) { + if (attributesMatchFilter(attributes, currentFilter)) { + m_reader.addNamespace(namespaceName, attributes); } } } - // get the current filter attributes and minimize the index files table - m_reader.filterFilesForAttributes(engine.filterAttributes(engine.currentFilter())); - hitList.clear(); - QStringList terms, termSeq, seqWords; - if (m_reader.initCheck() && // check if we could read anything - m_reader.splitSearchTerm(queryTerm, &terms, &termSeq, &seqWords) ) { - - // search for term(s) - m_reader.searchInIndex(terms); // TODO: should this be interruptible as well ??? - - QVector hits = m_reader.hits(); - if (!hits.isEmpty()) { - if (termSeq.isEmpty()) { - foreach (const DocumentInfo &docInfo, hits) { - mutex.lock(); - if (m_cancel) { - mutex.unlock(); - searchingFinished(0); // TODO: check this, speed issue while locking??? - return; - } - mutex.unlock(); - hitList.append(qMakePair(docInfo.documentTitle, docInfo.documentUrl)); - } - } else { - foreach (const DocumentInfo &docInfo, hits) { - mutex.lock(); - if (m_cancel) { - mutex.unlock(); - searchingFinished(0); // TODO: check this, speed issue while locking??? - return; - } - mutex.unlock(); - - if (m_reader.searchForPattern(termSeq, seqWords, engine.fileData(docInfo.documentUrl))) // TODO: should this be interruptible as well ??? - hitList.append(qMakePair(docInfo.documentTitle, docInfo.documentUrl)); - } - } - } + lock.relock(); + if (m_cancel) { + emit searchingFinished(0); // TODO: check this, speed issue while locking??? + return; } + lock.unlock(); + + m_searchResults.clear(); + m_reader.searchInDB(searchInput); // TODO: should this be interruptible as well ??? + + lock.relock(); + m_searchResults = m_reader.searchResults(); + lock.unlock(); - emit searchingFinished(hitList.count()); + emit searchingFinished(m_searchResults.count()); } } // namespace std diff -Nru qttools-opensource-src-5.7.1/src/assistant/help/qhelpsearchindexreader_default_p.h qttools-opensource-src-5.9.1/src/assistant/help/qhelpsearchindexreader_default_p.h --- qttools-opensource-src-5.7.1/src/assistant/help/qhelpsearchindexreader_default_p.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/help/qhelpsearchindexreader_default_p.h 2017-06-23 12:03:39.000000000 +0000 @@ -51,58 +51,32 @@ // We mean it. // -#include "qhelpsearchindex_default_p.h" #include "qhelpsearchindexreader_p.h" -#include -#include +QT_FORWARD_DECLARE_CLASS(QSqlDatabase) QT_BEGIN_NAMESPACE namespace fulltextsearch { -namespace std { +namespace qt { class Reader { - typedef QList DocumentList; - typedef QHash EntryTable; - typedef QPair Index; - typedef QHash IndexTable; - public: - Reader(); - ~Reader(); - - bool readIndex(); - bool initCheck() const; void setIndexPath(const QString &path); - void filterFilesForAttributes(const QStringList &attributes); - void setIndexFile(const QString &namespaceName, const QString &attributes); - bool splitSearchTerm(const QString &searchTerm, QStringList *terms, - QStringList *termSeq, QStringList *seqWords); - - void searchInIndex(const QStringList &terms); - QVector hits(); - bool searchForPattern(const QStringList &patterns, - const QStringList &words, const QByteArray &data); + void addNamespace(const QString &namespaceName, const QStringList &attributes); -private: - QVector setupDummyTerm(const QStringList &terms, const EntryTable &entryTable); - QStringList getWildcardTerms(const QString &term, const EntryTable &entryTable); - void buildMiniIndex(const QString &string); - void reset(); - void cleanupIndex(EntryTable &entryTable); + void searchInDB(const QString &term); + QVector searchResults() const; private: - uint wordNum; - QString indexPath; - QString indexFile; - QString documentFile; - - IndexTable indexTable; - QList termList; - IndexTable searchIndexTable; - QHash miniIndex; + QVector queryTable(const QSqlDatabase &db, + const QString &tableName, + const QString &searchInput) const; + + QString m_indexPath; + QMultiMap m_namespaces; + QVector m_searchResults; }; @@ -110,12 +84,8 @@ { Q_OBJECT -public: - QHelpSearchIndexReaderDefault(); - ~QHelpSearchIndexReaderDefault(); - private: - void run(); + void run() override; private: Reader m_reader; diff -Nru qttools-opensource-src-5.7.1/src/assistant/help/qhelpsearchindexreader_p.h qttools-opensource-src-5.9.1/src/assistant/help/qhelpsearchindexreader_p.h --- qttools-opensource-src-5.7.1/src/assistant/help/qhelpsearchindexreader_p.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/help/qhelpsearchindexreader_p.h 2017-06-23 12:03:39.000000000 +0000 @@ -55,10 +55,8 @@ #include #include -#include -#include #include -#include +#include QT_BEGIN_NAMESPACE @@ -71,30 +69,29 @@ Q_OBJECT public: - QHelpSearchIndexReader(); ~QHelpSearchIndexReader(); void cancelSearching(); void search(const QString &collectionFile, - const QString &indexFilesFolder, - const QList &queryList); - int hitCount() const; - QList hits(int start, int end) const; + const QString &indexFilesFolder, + const QString &searchInput); + int searchResultCount() const; + QVector searchResults(int start, int end) const; signals: void searchingStarted(); - void searchingFinished(int hits); + void searchingFinished(int searchResultCount); protected: - mutable QMutex mutex; - QList hitList; - bool m_cancel; + mutable QMutex m_mutex; + QVector m_searchResults; + bool m_cancel = false; QString m_collectionFile; - QList m_query; + QString m_searchInput; QString m_indexFilesFolder; private: - virtual void run()=0; + void run() override = 0; }; } // namespace fulltextsearch diff -Nru qttools-opensource-src-5.7.1/src/assistant/help/qhelpsearchindexwriter_clucene.cpp qttools-opensource-src-5.9.1/src/assistant/help/qhelpsearchindexwriter_clucene.cpp --- qttools-opensource-src-5.7.1/src/assistant/help/qhelpsearchindexwriter_clucene.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/help/qhelpsearchindexwriter_clucene.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,874 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the Qt Assistant of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qclucenefieldnames_p.h" -#include "qhelpenginecore.h" -#include "qhelp_global.h" -#include "private/qhits_p.h" -#include "private/qquery_p.h" -#include "private/qanalyzer_p.h" -#include "private/qdocument_p.h" -#include "private/qsearchable_p.h" -#include "private/qindexreader_p.h" -#include "private/qindexwriter_p.h" -#include "qhelpsearchindexwriter_clucene_p.h" - -#include -#include -#include -#include -#include -#include - -#include -#include - -#include - -QT_BEGIN_NAMESPACE - -namespace fulltextsearch { -namespace clucene { - -// taken from qtexthtmlparser -static const struct QTextHtmlEntity -{ - const char *name; - quint16 code; -} entities[] = { - { "AElig", 0x00c6 }, - { "AMP", 38 }, - { "Aacute", 0x00c1 }, - { "Acirc", 0x00c2 }, - { "Agrave", 0x00c0 }, - { "Alpha", 0x0391 }, - { "Aring", 0x00c5 }, - { "Atilde", 0x00c3 }, - { "Auml", 0x00c4 }, - { "Beta", 0x0392 }, - { "Ccedil", 0x00c7 }, - { "Chi", 0x03a7 }, - { "Dagger", 0x2021 }, - { "Delta", 0x0394 }, - { "ETH", 0x00d0 }, - { "Eacute", 0x00c9 }, - { "Ecirc", 0x00ca }, - { "Egrave", 0x00c8 }, - { "Epsilon", 0x0395 }, - { "Eta", 0x0397 }, - { "Euml", 0x00cb }, - { "GT", 62 }, - { "Gamma", 0x0393 }, - { "Iacute", 0x00cd }, - { "Icirc", 0x00ce }, - { "Igrave", 0x00cc }, - { "Iota", 0x0399 }, - { "Iuml", 0x00cf }, - { "Kappa", 0x039a }, - { "LT", 60 }, - { "Lambda", 0x039b }, - { "Mu", 0x039c }, - { "Ntilde", 0x00d1 }, - { "Nu", 0x039d }, - { "OElig", 0x0152 }, - { "Oacute", 0x00d3 }, - { "Ocirc", 0x00d4 }, - { "Ograve", 0x00d2 }, - { "Omega", 0x03a9 }, - { "Omicron", 0x039f }, - { "Oslash", 0x00d8 }, - { "Otilde", 0x00d5 }, - { "Ouml", 0x00d6 }, - { "Phi", 0x03a6 }, - { "Pi", 0x03a0 }, - { "Prime", 0x2033 }, - { "Psi", 0x03a8 }, - { "QUOT", 34 }, - { "Rho", 0x03a1 }, - { "Scaron", 0x0160 }, - { "Sigma", 0x03a3 }, - { "THORN", 0x00de }, - { "Tau", 0x03a4 }, - { "Theta", 0x0398 }, - { "Uacute", 0x00da }, - { "Ucirc", 0x00db }, - { "Ugrave", 0x00d9 }, - { "Upsilon", 0x03a5 }, - { "Uuml", 0x00dc }, - { "Xi", 0x039e }, - { "Yacute", 0x00dd }, - { "Yuml", 0x0178 }, - { "Zeta", 0x0396 }, - { "aacute", 0x00e1 }, - { "acirc", 0x00e2 }, - { "acute", 0x00b4 }, - { "aelig", 0x00e6 }, - { "agrave", 0x00e0 }, - { "alefsym", 0x2135 }, - { "alpha", 0x03b1 }, - { "amp", 38 }, - { "and", 0x22a5 }, - { "ang", 0x2220 }, - { "apos", 0x0027 }, - { "aring", 0x00e5 }, - { "asymp", 0x2248 }, - { "atilde", 0x00e3 }, - { "auml", 0x00e4 }, - { "bdquo", 0x201e }, - { "beta", 0x03b2 }, - { "brvbar", 0x00a6 }, - { "bull", 0x2022 }, - { "cap", 0x2229 }, - { "ccedil", 0x00e7 }, - { "cedil", 0x00b8 }, - { "cent", 0x00a2 }, - { "chi", 0x03c7 }, - { "circ", 0x02c6 }, - { "clubs", 0x2663 }, - { "cong", 0x2245 }, - { "copy", 0x00a9 }, - { "crarr", 0x21b5 }, - { "cup", 0x222a }, - { "curren", 0x00a4 }, - { "dArr", 0x21d3 }, - { "dagger", 0x2020 }, - { "darr", 0x2193 }, - { "deg", 0x00b0 }, - { "delta", 0x03b4 }, - { "diams", 0x2666 }, - { "divide", 0x00f7 }, - { "eacute", 0x00e9 }, - { "ecirc", 0x00ea }, - { "egrave", 0x00e8 }, - { "empty", 0x2205 }, - { "emsp", 0x2003 }, - { "ensp", 0x2002 }, - { "epsilon", 0x03b5 }, - { "equiv", 0x2261 }, - { "eta", 0x03b7 }, - { "eth", 0x00f0 }, - { "euml", 0x00eb }, - { "euro", 0x20ac }, - { "exist", 0x2203 }, - { "fnof", 0x0192 }, - { "forall", 0x2200 }, - { "frac12", 0x00bd }, - { "frac14", 0x00bc }, - { "frac34", 0x00be }, - { "frasl", 0x2044 }, - { "gamma", 0x03b3 }, - { "ge", 0x2265 }, - { "gt", 62 }, - { "hArr", 0x21d4 }, - { "harr", 0x2194 }, - { "hearts", 0x2665 }, - { "hellip", 0x2026 }, - { "iacute", 0x00ed }, - { "icirc", 0x00ee }, - { "iexcl", 0x00a1 }, - { "igrave", 0x00ec }, - { "image", 0x2111 }, - { "infin", 0x221e }, - { "int", 0x222b }, - { "iota", 0x03b9 }, - { "iquest", 0x00bf }, - { "isin", 0x2208 }, - { "iuml", 0x00ef }, - { "kappa", 0x03ba }, - { "lArr", 0x21d0 }, - { "lambda", 0x03bb }, - { "lang", 0x2329 }, - { "laquo", 0x00ab }, - { "larr", 0x2190 }, - { "lceil", 0x2308 }, - { "ldquo", 0x201c }, - { "le", 0x2264 }, - { "lfloor", 0x230a }, - { "lowast", 0x2217 }, - { "loz", 0x25ca }, - { "lrm", 0x200e }, - { "lsaquo", 0x2039 }, - { "lsquo", 0x2018 }, - { "lt", 60 }, - { "macr", 0x00af }, - { "mdash", 0x2014 }, - { "micro", 0x00b5 }, - { "middot", 0x00b7 }, - { "minus", 0x2212 }, - { "mu", 0x03bc }, - { "nabla", 0x2207 }, - { "nbsp", 0x00a0 }, - { "ndash", 0x2013 }, - { "ne", 0x2260 }, - { "ni", 0x220b }, - { "not", 0x00ac }, - { "notin", 0x2209 }, - { "nsub", 0x2284 }, - { "ntilde", 0x00f1 }, - { "nu", 0x03bd }, - { "oacute", 0x00f3 }, - { "ocirc", 0x00f4 }, - { "oelig", 0x0153 }, - { "ograve", 0x00f2 }, - { "oline", 0x203e }, - { "omega", 0x03c9 }, - { "omicron", 0x03bf }, - { "oplus", 0x2295 }, - { "or", 0x22a6 }, - { "ordf", 0x00aa }, - { "ordm", 0x00ba }, - { "oslash", 0x00f8 }, - { "otilde", 0x00f5 }, - { "otimes", 0x2297 }, - { "ouml", 0x00f6 }, - { "para", 0x00b6 }, - { "part", 0x2202 }, - { "percnt", 0x0025 }, - { "permil", 0x2030 }, - { "perp", 0x22a5 }, - { "phi", 0x03c6 }, - { "pi", 0x03c0 }, - { "piv", 0x03d6 }, - { "plusmn", 0x00b1 }, - { "pound", 0x00a3 }, - { "prime", 0x2032 }, - { "prod", 0x220f }, - { "prop", 0x221d }, - { "psi", 0x03c8 }, - { "quot", 34 }, - { "rArr", 0x21d2 }, - { "radic", 0x221a }, - { "rang", 0x232a }, - { "raquo", 0x00bb }, - { "rarr", 0x2192 }, - { "rceil", 0x2309 }, - { "rdquo", 0x201d }, - { "real", 0x211c }, - { "reg", 0x00ae }, - { "rfloor", 0x230b }, - { "rho", 0x03c1 }, - { "rlm", 0x200f }, - { "rsaquo", 0x203a }, - { "rsquo", 0x2019 }, - { "sbquo", 0x201a }, - { "scaron", 0x0161 }, - { "sdot", 0x22c5 }, - { "sect", 0x00a7 }, - { "shy", 0x00ad }, - { "sigma", 0x03c3 }, - { "sigmaf", 0x03c2 }, - { "sim", 0x223c }, - { "spades", 0x2660 }, - { "sub", 0x2282 }, - { "sube", 0x2286 }, - { "sum", 0x2211 }, - { "sup", 0x2283 }, - { "sup1", 0x00b9 }, - { "sup2", 0x00b2 }, - { "sup3", 0x00b3 }, - { "supe", 0x2287 }, - { "szlig", 0x00df }, - { "tau", 0x03c4 }, - { "there4", 0x2234 }, - { "theta", 0x03b8 }, - { "thetasym", 0x03d1 }, - { "thinsp", 0x2009 }, - { "thorn", 0x00fe }, - { "tilde", 0x02dc }, - { "times", 0x00d7 }, - { "trade", 0x2122 }, - { "uArr", 0x21d1 }, - { "uacute", 0x00fa }, - { "uarr", 0x2191 }, - { "ucirc", 0x00fb }, - { "ugrave", 0x00f9 }, - { "uml", 0x00a8 }, - { "upsih", 0x03d2 }, - { "upsilon", 0x03c5 }, - { "uuml", 0x00fc }, - { "weierp", 0x2118 }, - { "xi", 0x03be }, - { "yacute", 0x00fd }, - { "yen", 0x00a5 }, - { "yuml", 0x00ff }, - { "zeta", 0x03b6 }, - { "zwj", 0x200d }, - { "zwnj", 0x200c } -}; - -static bool operator<(const QTextHtmlEntity &entity, const QString &entityStr) -{ - return QLatin1String(entity.name) < entityStr; -} - -static QChar resolveEntity(const QString &entity) -{ - const QTextHtmlEntity *start = &entities[0]; - const QTextHtmlEntity *end = &entities[(sizeof(entities) / sizeof(entities[0]))]; - const QTextHtmlEntity *e = std::lower_bound(start, end, entity); - if (e == end) - return QChar(); - return e->code; -} - -static const uint latin1Extended[0xA0 - 0x80] = { - 0x20ac, // 0x80 - 0x0081, // 0x81 direct mapping - 0x201a, // 0x82 - 0x0192, // 0x83 - 0x201e, // 0x84 - 0x2026, // 0x85 - 0x2020, // 0x86 - 0x2021, // 0x87 - 0x02C6, // 0x88 - 0x2030, // 0x89 - 0x0160, // 0x8A - 0x2039, // 0x8B - 0x0152, // 0x8C - 0x008D, // 0x8D direct mapping - 0x017D, // 0x8E - 0x008F, // 0x8F directmapping - 0x0090, // 0x90 directmapping - 0x2018, // 0x91 - 0x2019, // 0x92 - 0x201C, // 0x93 - 0X201D, // 0x94 - 0x2022, // 0x95 - 0x2013, // 0x96 - 0x2014, // 0x97 - 0x02DC, // 0x98 - 0x2122, // 0x99 - 0x0161, // 0x9A - 0x203A, // 0x9B - 0x0153, // 0x9C - 0x009D, // 0x9D direct mapping - 0x017E, // 0x9E - 0x0178 // 0x9F -}; -// end taken from qtexthtmlparser - -class DocumentHelper -{ -public: - DocumentHelper(const QString &fileName, const QByteArray &data) - : fileName(fileName) , data(readData(data)) {} - ~DocumentHelper() {} - - bool addFieldsToDocument(QCLuceneDocument *document, - const QString &namespaceName, const QString &attributes = QString()) - { - if (!document) - return false; - - if(!data.isEmpty()) { - QString parsedData = parseData(); - QString parsedTitle = QHelpGlobal::documentTitle(data); - - if(!parsedData.isEmpty()) { - document->add(new QCLuceneField(ContentField, - parsedData,QCLuceneField::INDEX_TOKENIZED)); - document->add(new QCLuceneField(PathField, fileName, - QCLuceneField::STORE_YES | QCLuceneField::INDEX_UNTOKENIZED)); - document->add(new QCLuceneField(TitleField, parsedTitle, - QCLuceneField::STORE_YES | QCLuceneField::INDEX_UNTOKENIZED)); - document->add(new QCLuceneField(TitleTokenizedField, parsedTitle, - QCLuceneField::STORE_YES | QCLuceneField::INDEX_TOKENIZED)); - document->add(new QCLuceneField(NamespaceField, namespaceName, - QCLuceneField::STORE_YES | QCLuceneField::INDEX_UNTOKENIZED)); - document->add(new QCLuceneField(AttributeField, attributes, - QCLuceneField::STORE_YES | QCLuceneField::INDEX_TOKENIZED)); - return true; - } - } - - return false; - } - -private: - QString readData(const QByteArray &data) - { - QTextStream textStream(data); - const QByteArray &codec = QHelpGlobal::codecFromData(data).toLatin1(); - textStream.setCodec(QTextCodec::codecForName(codec.constData())); - - QString stream = textStream.readAll(); - if (stream.isNull() || stream.isEmpty()) - return QString(); - - return stream; - } - - QString parseData() const - { - const int length = data.length(); - const QChar *buf = data.unicode(); - - QString parsedContent; - parsedContent.reserve(length); - - bool valid = true; - int j = 0, count = 0; - - QChar c; - while (j < length) { - c = buf[j++]; - if (c == QLatin1Char('<') || c == QLatin1Char('&')) { - if (count > 1 && c != QLatin1Char('&')) - parsedContent.append(QLatin1Char(' ')); - else if (c == QLatin1Char('&')) { - // Note: this will modify the counter j, in case we sucessful parsed the entity - // we will have modified the counter to stay 1 before the closing ';', so - // the following if condition will be met with if (c == QLatin1Char(';')) - parsedContent.append(parseEntity(length, buf, j)); - } - - count = 0; - valid = false; - continue; - } - if ((c == QLatin1Char('>') || c == QLatin1Char(';')) && !valid) { - valid = true; - continue; - } - if (!valid) - continue; - - if (c.isLetterOrNumber() || c.isPrint()) { - ++count; - parsedContent.append(c.toLower()); - } else { - if (count > 1) - parsedContent.append(QLatin1Char(' ')); - count = 0; - } - } - - return parsedContent; - } - - // taken from qtexthtmlparser - // parses an entity after "&", and returns it - QString parseEntity(int len, const QChar *buf, int &pos) const - { - int recover = pos; - QString entity; - while (pos < len) { - QChar c = buf[pos++]; - if (c.isSpace() || pos - recover > 9) { - goto error; - } - if (c == QLatin1Char(';')) { - pos--; - break; - } - entity += c; - } - { - QChar resolved = resolveEntity(entity); - if (!resolved.isNull()) - return QString(resolved); - } - if (entity.length() > 1 && entity.at(0) == QLatin1Char('#')) { - entity.remove(0, 1); // removing leading # - - int base = 10; - bool ok = false; - - if (entity.at(0).toLower() == QLatin1Char('x')) { // hex entity? - entity.remove(0, 1); - base = 16; - } - - uint uc = entity.toUInt(&ok, base); - if (ok) { - if (uc >= 0x80 && uc < 0x80 + (sizeof(latin1Extended) / sizeof(latin1Extended[0]))) - uc = latin1Extended[uc - 0x80]; // windows latin 1 extended - QString str; - if (uc > 0xffff) { - // surrogate pair - uc -= 0x10000; - ushort high = uc/0x400 + 0xd800; - ushort low = uc%0x400 + 0xdc00; - str.append(QChar(high)); - str.append(QChar(low)); - } else { - str.append(QChar(uc)); - } - return str; - } - } - error: - pos = recover; - return QLatin1String(" "); - } - // end taken from qtexthtmlparser - -private: - QString fileName; - QString data; -}; - - -QHelpSearchIndexWriter::QHelpSearchIndexWriter() - : QThread(0) - , m_cancel(false) -{ - // nothing todo -} - -QHelpSearchIndexWriter::~QHelpSearchIndexWriter() -{ - mutex.lock(); - this->m_cancel = true; - waitCondition.wakeOne(); - mutex.unlock(); - - wait(); -} - -void QHelpSearchIndexWriter::cancelIndexing() -{ - mutex.lock(); - this->m_cancel = true; - mutex.unlock(); -} - -void QHelpSearchIndexWriter::updateIndex(const QString &collectionFile, - const QString &indexFilesFolder, bool reindex) -{ - wait(); - mutex.lock(); - this->m_cancel = false; - this->m_reindex = reindex; - this->m_collectionFile = collectionFile; - this->m_indexFilesFolder = indexFilesFolder; - mutex.unlock(); - - start(QThread::LowestPriority); -} - -void QHelpSearchIndexWriter::optimizeIndex() -{ - try { - if (QCLuceneIndexReader::indexExists(m_indexFilesFolder)) { - if (QCLuceneIndexReader::isLocked(m_indexFilesFolder)) - return; - - QCLuceneStandardAnalyzer analyzer; - QCLuceneIndexWriter writer(m_indexFilesFolder, analyzer, false); - writer.optimize(); - writer.close(); - } - } catch (...) { - qWarning("Full Text Search, could not optimize index."); - return; - } -} - -void QHelpSearchIndexWriter::run() -{ - try { - QMutexLocker mutexLocker(&mutex); - - if (m_cancel) - return; - - const bool reindex = this->m_reindex; - const QString collectionFile(this->m_collectionFile); - - mutexLocker.unlock(); - - QHelpEngineCore engine(collectionFile, 0); - if (!engine.setupData()) - return; - - const QLatin1String key("CluceneIndexedNamespaces"); - if (reindex) - engine.setCustomValue(key, QLatin1String("")); - - QMap indexMap; - const QLatin1String oldKey("CluceneSearchNamespaces"); - if (!engine.customValue(oldKey, QString()).isNull()) { - // old style qhc file < 4.4.2, need to convert... - const QStringList indexedNamespaces - = engine.customValue(oldKey).toString() - .split(QLatin1String("|"), QString::SkipEmptyParts); - foreach (const QString &nameSpace, indexedNamespaces) - indexMap.insert(nameSpace, QDateTime()); - engine.removeCustomValue(oldKey); - } else { - QDataStream dataStream(engine.customValue(key).toByteArray()); - dataStream >> indexMap; - } - - QString indexPath = m_indexFilesFolder; - - QFileInfo fInfo(indexPath); - if (fInfo.exists() && !fInfo.isWritable()) { - qWarning("Full Text Search, could not create index (missing permissions for '%s').", - qPrintable(indexPath)); - return; - } - - emit indexingStarted(); - - QCLuceneIndexWriter *writer = 0; - QCLuceneStandardAnalyzer analyzer; - const QStringList registeredDocs = engine.registeredDocumentations(); - - QLocalSocket localSocket; - localSocket.connectToServer(QString(QLatin1String("QtAssistant%1")) - .arg(QLatin1String(QT_VERSION_STR))); - - QLocalServer localServer; - bool otherInstancesRunning = true; - if (!localSocket.waitForConnected()) { - otherInstancesRunning = false; - localServer.listen(QString(QLatin1String("QtAssistant%1")) - .arg(QLatin1String(QT_VERSION_STR))); - } - - // check if it's locked, and if the other instance is running - if (!otherInstancesRunning && QCLuceneIndexReader::isLocked(indexPath)) - QCLuceneIndexReader::unlock(indexPath); - - if (QCLuceneIndexReader::isLocked(indexPath)) { - // poll unless indexing finished to fake progress - while (QCLuceneIndexReader::isLocked(indexPath)) { - mutexLocker.relock(); - if (m_cancel) - break; - mutexLocker.unlock(); - this->sleep(1); - } - emit indexingFinished(); - return; - } - - if (QCLuceneIndexReader::indexExists(indexPath) && !reindex) { - foreach(const QString &namespaceName, registeredDocs) { - mutexLocker.relock(); - if (m_cancel) { - emit indexingFinished(); - return; - } - mutexLocker.unlock(); - - if (!indexMap.contains(namespaceName)) { - // make sure we remove some partly indexed stuff - removeDocuments(indexPath, namespaceName); - } else { - QString path = engine.documentationFileName(namespaceName); - if (indexMap.value(namespaceName) - < QFileInfo(path).lastModified()) { - // make sure we remove some outdated indexed stuff - indexMap.remove(namespaceName); - removeDocuments(indexPath, namespaceName); - } - - if (indexMap.contains(namespaceName)) { - // make sure we really have content indexed for namespace - QCLuceneTermQuery query(QCLuceneTerm(NamespaceField, namespaceName)); - QCLuceneIndexSearcher indexSearcher(indexPath); - QCLuceneHits hits = indexSearcher.search(query); - if (hits.length() <= 0) - indexMap.remove(namespaceName); - } - } - } - writer = new QCLuceneIndexWriter(indexPath, analyzer, false); - } else { - indexMap.clear(); - writer = new QCLuceneIndexWriter(indexPath, analyzer, true); - } - - writer->setMergeFactor(100); - writer->setMinMergeDocs(1000); - writer->setMaxFieldLength(QCLuceneIndexWriter::DEFAULT_MAX_FIELD_LENGTH); - - QStringList namespaces; - foreach(const QString &namespaceName, registeredDocs) { - mutexLocker.relock(); - if (m_cancel) { - closeIndexWriter(writer); - emit indexingFinished(); - return; - } - mutexLocker.unlock(); - - namespaces.append(namespaceName); - if (indexMap.contains(namespaceName)) - continue; - - const QList attributeSets = - engine.filterAttributeSets(namespaceName); - - if (attributeSets.isEmpty()) { - const QList docFiles = indexableFiles(&engine, namespaceName, - QStringList()); - if (!addDocuments(docFiles, engine, QStringList(), namespaceName, - writer, analyzer)) - break; - } else { - bool bail = false; - foreach (const QStringList &attributes, attributeSets) { - const QList docFiles = indexableFiles(&engine, - namespaceName, attributes); - if (!addDocuments(docFiles, engine, attributes, namespaceName, - writer, analyzer)) { - bail = true; - break; - } - } - if (bail) - break; - } - - mutexLocker.relock(); - if (!m_cancel) { - QString path(engine.documentationFileName(namespaceName)); - indexMap.insert(namespaceName, QFileInfo(path).lastModified()); - writeIndexMap(engine, indexMap); - } - mutexLocker.unlock(); - } - - closeIndexWriter(writer); - - mutexLocker.relock(); - if (!m_cancel) { - mutexLocker.unlock(); - - QStringList indexedNamespaces = indexMap.keys(); - foreach(const QString &namespaceName, indexedNamespaces) { - mutexLocker.relock(); - if (m_cancel) - break; - mutexLocker.unlock(); - - if (!namespaces.contains(namespaceName)) { - indexMap.remove(namespaceName); - writeIndexMap(engine, indexMap); - removeDocuments(indexPath, namespaceName); - } - } - } - } catch (...) { - qWarning("%s: Failed because of CLucene exception.", Q_FUNC_INFO); - } - emit indexingFinished(); -} - -bool QHelpSearchIndexWriter::addDocuments(const QList docFiles, - const QHelpEngineCore &engine, const QStringList &attributes, - const QString &namespaceName, QCLuceneIndexWriter *writer, - QCLuceneAnalyzer &analyzer) -{ - QMutexLocker locker(&mutex); - const QString attrList = attributes.join(QLatin1String(" ")); - - locker.unlock(); - foreach(const QUrl &url, docFiles) { - QCLuceneDocument document; - DocumentHelper helper(url.toString(), engine.fileData(url)); - if (helper.addFieldsToDocument(&document, namespaceName, attrList)) { - try { - writer->addDocument(document, analyzer); - } catch (...) { - qWarning("Full Text Search, could not properly add documents."); - return false; - } - } - locker.relock(); - if (m_cancel) - return false; - locker.unlock(); - } - return true; -} - -void QHelpSearchIndexWriter::removeDocuments(const QString &indexPath, - const QString &namespaceName) -{ - if (namespaceName.isEmpty() || QCLuceneIndexReader::isLocked(indexPath)) - return; - - QCLuceneIndexReader reader = QCLuceneIndexReader::open(indexPath); - reader.deleteDocuments(QCLuceneTerm(NamespaceField, namespaceName)); - - reader.close(); -} - -bool QHelpSearchIndexWriter::writeIndexMap(QHelpEngineCore &engine, - const QMap &indexMap) -{ - QByteArray bArray; - - QDataStream data(&bArray, QIODevice::ReadWrite); - data << indexMap; - - return engine.setCustomValue(QLatin1String("CluceneIndexedNamespaces"), - bArray); -} - -QList QHelpSearchIndexWriter::indexableFiles(QHelpEngineCore *helpEngine, - const QString &namespaceName, const QStringList &attributes) const -{ - QList docFiles = helpEngine->files(namespaceName, attributes, - QLatin1String("html")); - docFiles += helpEngine->files(namespaceName, attributes, QLatin1String("htm")); - docFiles += helpEngine->files(namespaceName, attributes, QLatin1String("txt")); - - return docFiles; -} - -void QHelpSearchIndexWriter::closeIndexWriter(QCLuceneIndexWriter *writer) -{ - try { - writer->close(); - delete writer; - } catch (...) { - qWarning("Full Text Search, could not properly close index writer."); - } -} - -} // namespace clucene -} // namespace fulltextsearch - -QT_END_NAMESPACE diff -Nru qttools-opensource-src-5.7.1/src/assistant/help/qhelpsearchindexwriter_clucene_p.h qttools-opensource-src-5.9.1/src/assistant/help/qhelpsearchindexwriter_clucene_p.h --- qttools-opensource-src-5.7.1/src/assistant/help/qhelpsearchindexwriter_clucene_p.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/help/qhelpsearchindexwriter_clucene_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,122 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the Qt Assistant of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QHELPSEARCHINDEXWRITERCLUCENE_H -#define QHELPSEARCHINDEXWRITERCLUCENE_H - -// -// W A R N I N G -// ------------- -// -// This file is not part of the Qt API. It exists for the convenience -// of the help generator tools. This header file may change from version -// to version without notice, or even be removed. -// -// We mean it. -// - -#include "qhelpenginecore.h" -#include "private/qanalyzer_p.h" - -#include -#include -#include -#include -#include -#include -#include -#include - -QT_BEGIN_NAMESPACE - -class QCLuceneIndexWriter; - -namespace fulltextsearch { -namespace clucene { - -class QHelpSearchIndexWriter : public QThread -{ - Q_OBJECT - -public: - QHelpSearchIndexWriter(); - ~QHelpSearchIndexWriter(); - - void cancelIndexing(); - void updateIndex(const QString &collectionFile, - const QString &indexFilesFolder, bool reindex); - void optimizeIndex(); - -signals: - void indexingStarted(); - void indexingFinished(); - -private: - void run(); - - bool addDocuments(const QList docFiles, const QHelpEngineCore &engine, - const QStringList &attributes, const QString &namespaceName, - QCLuceneIndexWriter *writer, QCLuceneAnalyzer &analyzer); - void removeDocuments(const QString &indexPath, const QString &namespaceName); - - bool writeIndexMap(QHelpEngineCore& engine, - const QMap& indexMap); - - QList indexableFiles(QHelpEngineCore *helpEngine, - const QString &namespaceName, const QStringList &attributes) const; - - void closeIndexWriter(QCLuceneIndexWriter *writer); - -private: - QMutex mutex; - QWaitCondition waitCondition; - - bool m_cancel; - bool m_reindex; - QString m_collectionFile; - QString m_indexFilesFolder; -}; - -} // namespace clucene -} // namespace fulltextsearch - - -QT_END_NAMESPACE - -#endif // QHELPSEARCHINDEXWRITERCLUCENE_H diff -Nru qttools-opensource-src-5.7.1/src/assistant/help/qhelpsearchindexwriter_default.cpp qttools-opensource-src-5.9.1/src/assistant/help/qhelpsearchindexwriter_default.cpp --- qttools-opensource-src-5.7.1/src/assistant/help/qhelpsearchindexwriter_default.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/help/qhelpsearchindexwriter_default.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -41,140 +41,280 @@ #include "qhelp_global.h" #include "qhelpenginecore.h" +#include +#include #include +#include +#include #include #include -#include -#include #include -#include -#include -#include +#include +#include +#include +#include + +#include QT_BEGIN_NAMESPACE namespace fulltextsearch { -namespace std { +namespace qt { + +const char FTS_DB_NAME[] = "fts"; Writer::Writer(const QString &path) - : indexPath(path) - , indexFile(QString()) - , documentFile(QString()) + : m_dbDir(path) { - // nothing todo + clearLegacyIndex(); + QDir().mkpath(m_dbDir); + m_uniqueId = QHelpGlobal::uniquifyConnectionName(QLatin1String("QHelpWriter"), this); + m_db = new QSqlDatabase(); + *m_db = QSqlDatabase::addDatabase(QLatin1String("QSQLITE"), m_uniqueId); + const QString dbPath = m_dbDir + QLatin1Char('/') + QLatin1String(FTS_DB_NAME); + m_db->setDatabaseName(dbPath); + if (!m_db->open()) { + const QString &error = QHelpSearchIndexWriter::tr("Cannot open database \"%1\" using connection \"%2\": %3") + .arg(dbPath, m_uniqueId, m_db->lastError().text()); + qWarning("%s", qUtf8Printable(error)); + delete m_db; + m_db = nullptr; + QSqlDatabase::removeDatabase(m_uniqueId); + m_uniqueId = QString(); + } else { + startTransaction(); + } } -Writer::~Writer() +bool Writer::tryInit(bool reindex) { - reset(); + if (!m_db) + return true; + + QSqlQuery query(*m_db); + // HACK: we try to perform any modifying command just to check if + // we don't get SQLITE_BUSY code (SQLITE_BUSY is defined to 5 in sqlite driver) + if (!query.exec(QLatin1String("CREATE TABLE foo ();"))) { + if (query.lastError().nativeErrorCode() == QLatin1String("5")) // db is locked + return false; + } + // HACK: clear what we have created + query.exec(QLatin1String("DROP TABLE foo;")); + + init(reindex); + return true; } -void Writer::reset() +bool Writer::hasDB() { - for(QHash::ConstIterator it = - index.begin(); it != index.end(); ++it) { - delete it.value(); - } + if (!m_db) + return false; + + QSqlQuery query(*m_db); - index.clear(); - documentList.clear(); + query.prepare(QLatin1String("SELECT id FROM info LIMIT 1")); + query.exec(); + + return query.next(); } -bool Writer::writeIndex() const +void Writer::clearLegacyIndex() { - bool status; - QFile idxFile(indexFile); - if (!(status = idxFile.open(QFile::WriteOnly))) - return status; - - QDataStream indexStream(&idxFile); - for(QHash::ConstIterator it = - index.begin(); it != index.end(); ++it) { - indexStream << it.key(); - indexStream << it.value()->documents.count(); - indexStream << it.value()->documents; + // Clear old legacy clucene index. + // More important in case of Creator, since + // the index folder is common for all Creator versions + QDir dir(m_dbDir); + if (!dir.exists()) + return; + + const QStringList &list = dir.entryList(QDir::Files | QDir::Hidden); + if (!list.contains(QLatin1String(FTS_DB_NAME))) { + for (const QString &item : list) + dir.remove(item); } - idxFile.close(); +} + +void Writer::init(bool reindex) +{ + if (!m_db) + return; - QFile docFile(documentFile); - if (!(status = docFile.open(QFile::WriteOnly))) - return status; - - QDataStream docStream(&docFile); - foreach(const QStringList &list, documentList) { - docStream << list.at(0); - docStream << list.at(1); + QSqlQuery query(*m_db); + + if (reindex && hasDB()) { + m_needOptimize = true; + + query.exec(QLatin1String("DROP TABLE titles;")); + query.exec(QLatin1String("DROP TABLE contents;")); + query.exec(QLatin1String("DROP TABLE info;")); } - docFile.close(); - return status; + query.exec(QLatin1String("CREATE TABLE info (id INTEGER PRIMARY KEY, namespace, attributes, url, title, data);")); + + query.exec(QLatin1String("CREATE VIRTUAL TABLE titles USING fts5(" + "namespace UNINDEXED, attributes UNINDEXED, " + "url UNINDEXED, title, " + "tokenize = 'porter unicode61', content = 'info', content_rowid='id');")); + query.exec(QLatin1String("CREATE TRIGGER titles_insert AFTER INSERT ON info BEGIN " + "INSERT INTO titles(rowid, namespace, attributes, url, title) " + "VALUES(new.id, new.namespace, new.attributes, new.url, new.title); " + "END;")); + query.exec(QLatin1String("CREATE TRIGGER titles_delete AFTER DELETE ON info BEGIN " + "INSERT INTO titles(titles, rowid, namespace, attributes, url, title) " + "VALUES('delete', old.id, old.namespace, old.attributes, old.url, old.title); " + "END;")); + query.exec(QLatin1String("CREATE TRIGGER titles_update AFTER UPDATE ON info BEGIN " + "INSERT INTO titles(titles, rowid, namespace, attributes, url, title) " + "VALUES('delete', old.id, old.namespace, old.attributes, old.url, old.title); " + "INSERT INTO titles(rowid, namespace, attributes, url, title) " + "VALUES(new.id, new.namespace, new.attributes, new.url, new.title); " + "END;")); + + query.exec(QLatin1String("CREATE VIRTUAL TABLE contents USING fts5(" + "namespace UNINDEXED, attributes UNINDEXED, " + "url UNINDEXED, title, data, " + "tokenize = 'porter unicode61', content = 'info', content_rowid='id');")); + query.exec(QLatin1String("CREATE TRIGGER contents_insert AFTER INSERT ON info BEGIN " + "INSERT INTO contents(rowid, namespace, attributes, url, title, data) " + "VALUES(new.id, new.namespace, new.attributes, new.url, new.title, new.data); " + "END;")); + query.exec(QLatin1String("CREATE TRIGGER contents_delete AFTER DELETE ON info BEGIN " + "INSERT INTO contents(contents, rowid, namespace, attributes, url, title, data) " + "VALUES('delete', old.id, old.namespace, old.attributes, old.url, old.title, old.data); " + "END;")); + query.exec(QLatin1String("CREATE TRIGGER contents_update AFTER UPDATE ON info BEGIN " + "INSERT INTO contents(contents, rowid, namespace, attributes, url, title, data) " + "VALUES('delete', old.id, old.namespace, old.attributes, old.url, old.title, old.data); " + "INSERT INTO contents(rowid, namespace, attributes, url, title, data) " + "VALUES(new.id, new.namespace, new.attributes, new.url, new.title, new.data); " + "END;")); } -void Writer::removeIndex() const +Writer::~Writer() { - QFile idxFile(indexFile); - if (idxFile.exists()) - idxFile.remove(); + if (m_db) { + m_db->close(); + delete m_db; + } - QFile docFile(documentFile); - if (docFile.exists()) - docFile.remove(); + if (!m_uniqueId.isEmpty()) + QSqlDatabase::removeDatabase(m_uniqueId); } -void Writer::setIndexFile(const QString &namespaceName, const QString &attributes) +void Writer::flush() { - QString extension = namespaceName + QLatin1String("@") + attributes; - indexFile = indexPath + QLatin1String("/indexdb40.") + extension; - documentFile = indexPath + QLatin1String("/indexdoc40.") + extension; + if (!m_db) + return; + + QSqlQuery query(*m_db); + + query.prepare(QLatin1String("INSERT INTO info (namespace, attributes, url, title, data) VALUES (?, ?, ?, ?, ?)")); + query.addBindValue(m_namespaces); + query.addBindValue(m_attributes); + query.addBindValue(m_urls); + query.addBindValue(m_titles); + query.addBindValue(m_contents); + query.execBatch(); + + m_namespaces = QVariantList(); + m_attributes = QVariantList(); + m_urls = QVariantList(); + m_titles = QVariantList(); + m_contents = QVariantList(); } -void Writer::insertInIndex(const QString &string, int docNum) +void Writer::removeNamespace(const QString &namespaceName) { - if (string == QLatin1String("amp") || string == QLatin1String("nbsp")) + if (!m_db) return; - Entry *entry = 0; - if (index.count()) - entry = index[string]; - - if (entry) { - if (entry->documents.last().docNumber != docNum) - entry->documents.append(Document(docNum, 1)); - else - entry->documents.last().frequency++; - } else { - index.insert(string, new Entry(docNum)); - } + if (!hasNamespace(namespaceName)) + return; // no data to delete + + m_needOptimize = true; + + QSqlQuery query(*m_db); + + query.prepare(QLatin1String("DELETE FROM info WHERE namespace = ?")); + query.addBindValue(namespaceName); + query.exec(); } -void Writer::insertInDocumentList(const QString &title, const QString &url) +bool Writer::hasNamespace(const QString &namespaceName) { - documentList.append(QStringList(title) << url); + if (!m_db) + return false; + + QSqlQuery query(*m_db); + + query.prepare(QLatin1String("SELECT id FROM info WHERE namespace = ? LIMIT 1")); + query.addBindValue(namespaceName); + query.exec(); + + return query.next(); } +void Writer::insertDoc(const QString &namespaceName, + const QString &attributes, + const QString &url, + const QString &title, + const QString &contents) +{ + m_namespaces.append(namespaceName); + m_attributes.append(attributes); + m_urls.append(url); + m_titles.append(title); + m_contents.append(contents); +} + +void Writer::startTransaction() +{ + if (!m_db) + return; + + m_needOptimize = false; + if (m_db && m_db->driver()->hasFeature(QSqlDriver::Transactions)) + m_db->transaction(); +} + +void Writer::endTransaction() +{ + if (!m_db) + return; + + QSqlQuery query(*m_db); + + if (m_needOptimize) { + query.exec(QLatin1String("INSERT INTO titles(titles) VALUES('rebuild')")); + query.exec(QLatin1String("INSERT INTO contents(contents) VALUES('rebuild')")); + } + + if (m_db && m_db->driver()->hasFeature(QSqlDriver::Transactions)) + m_db->commit(); + + if (m_needOptimize) + query.exec(QLatin1String("VACUUM")); +} QHelpSearchIndexWriter::QHelpSearchIndexWriter() : QThread() , m_cancel(false) { - // nothing todo } QHelpSearchIndexWriter::~QHelpSearchIndexWriter() { - mutex.lock(); + m_mutex.lock(); this->m_cancel = true; - waitCondition.wakeOne(); - mutex.unlock(); + m_mutex.unlock(); wait(); } void QHelpSearchIndexWriter::cancelIndexing() { - mutex.lock(); - this->m_cancel = true; - mutex.unlock(); + QMutexLocker lock(&m_mutex); + m_cancel = true; } void QHelpSearchIndexWriter::updateIndex(const QString &collectionFile, @@ -182,200 +322,205 @@ bool reindex) { wait(); - QMutexLocker lock(&mutex); + QMutexLocker lock(&m_mutex); - this->m_cancel = false; - this->m_reindex = reindex; - this->m_collectionFile = collectionFile; - this->m_indexFilesFolder = indexFilesFolder; + m_cancel = false; + m_reindex = reindex; + m_collectionFile = collectionFile; + m_indexFilesFolder = indexFilesFolder; + + lock.unlock(); start(QThread::LowestPriority); } +static const char IndexedNamespacesKey[] = "FTS5IndexedNamespaces"; + +static QMap readIndexMap(const QHelpEngineCore &engine) +{ + QMap indexMap; + QDataStream dataStream(engine.customValue( + QLatin1String(IndexedNamespacesKey)).toByteArray()); + dataStream >> indexMap; + return indexMap; +} + +static bool writeIndexMap(QHelpEngineCore *engine, + const QMap &indexMap) +{ + QByteArray data; + + QDataStream dataStream(&data, QIODevice::ReadWrite); + dataStream << indexMap; + + return engine->setCustomValue( + QLatin1String(IndexedNamespacesKey), data); +} + +static bool clearIndexMap(QHelpEngineCore *engine) +{ + return engine->removeCustomValue(QLatin1String(IndexedNamespacesKey)); +} + +static QList indexableFiles(QHelpEngineCore *helpEngine, + const QString &namespaceName, const QStringList &attributes) +{ + return helpEngine->files(namespaceName, attributes, QLatin1String("html")) + + helpEngine->files(namespaceName, attributes, QLatin1String("htm")) + + helpEngine->files(namespaceName, attributes, QLatin1String("txt")); +} + void QHelpSearchIndexWriter::run() { - mutex.lock(); + QMutexLocker lock(&m_mutex); - if (m_cancel) { - mutex.unlock(); + if (m_cancel) return; - } - const bool reindex(this->m_reindex); - const QLatin1String key("DefaultSearchNamespaces"); - const QString collectionFile(this->m_collectionFile); - const QString indexPath = m_indexFilesFolder; + const bool reindex(m_reindex); + const QString collectionFile(m_collectionFile); + const QString indexPath(m_indexFilesFolder); - mutex.unlock(); + lock.unlock(); QHelpEngineCore engine(collectionFile, 0); if (!engine.setupData()) return; - if (reindex) - engine.setCustomValue(key, QLatin1String("")); +// QFileInfo fInfo(indexPath); +// if (fInfo.exists() && !fInfo.isWritable()) { +// qWarning("Full Text Search, could not create index (missing permissions for '%s').", +// qPrintable(indexPath)); +// return; +// } - const QStringList registeredDocs = engine.registeredDocumentations(); - const QStringList indexedNamespaces = engine.customValue(key).toString(). - split(QLatin1String("|"), QString::SkipEmptyParts); + if (reindex) + clearIndexMap(&engine); emit indexingStarted(); - QStringList namespaces; Writer writer(indexPath); - foreach(const QString &namespaceName, registeredDocs) { - mutex.lock(); + + while (!writer.tryInit(reindex)) + sleep(1); + + const QStringList ®isteredDocs = engine.registeredDocumentations(); + QMap indexMap = readIndexMap(engine); + + if (!reindex) { + for (const QString &namespaceName : registeredDocs) { + if (indexMap.contains(namespaceName)) { + const QString path = engine.documentationFileName(namespaceName); + if (indexMap.value(namespaceName) < QFileInfo(path).lastModified()) { + // Remove some outdated indexed stuff + indexMap.remove(namespaceName); + writer.removeNamespace(namespaceName); + } else if (!writer.hasNamespace(namespaceName)) { + // No data in fts db for namespace. + // The namespace could have been removed from fts db + // or the whole fts db have been removed + // without removing it from indexMap. + indexMap.remove(namespaceName); + } + } else { + // Needed in case namespaceName was removed from indexMap + // without removing it from fts db. + // May happen when e.g. qch file was removed manually + // without removing fts db. + writer.removeNamespace(namespaceName); + } + // TODO: we may also detect if there are any other data + // and remove it + } + } else { + indexMap.clear(); + } + + for (const QString &namespaceName : indexMap.keys()) { + if (!registeredDocs.contains(namespaceName)) { + indexMap.remove(namespaceName); + writer.removeNamespace(namespaceName); + } + } + + for (const QString &namespaceName : registeredDocs) { + lock.relock(); if (m_cancel) { - mutex.unlock(); + // store what we have done so far + writeIndexMap(&engine, indexMap); + writer.endTransaction(); + emit indexingFinished(); return; } - mutex.unlock(); + lock.unlock(); // if indexed, continue - namespaces.append(namespaceName); - if (indexedNamespaces.contains(namespaceName)) + if (indexMap.contains(namespaceName)) continue; - const QList attributeSets = + const QList &attributeSets = engine.filterAttributeSets(namespaceName); - foreach (const QStringList &attributes, attributeSets) { - // cleanup maybe old or unfinished files - writer.setIndexFile(namespaceName, attributes.join(QLatin1String("@"))); - writer.removeIndex(); - + for (const QStringList &attributes : attributeSets) { + const QString &attributesString = attributes.join(QLatin1Char('|')); QSet documentsSet; - const QList docFiles = engine.files(namespaceName, attributes); - foreach(QUrl url, docFiles) { - if (m_cancel) - return; - + const QList &docFiles = indexableFiles(&engine, namespaceName, attributes); + for (QUrl url : docFiles) { // get rid of duplicated files if (url.hasFragment()) url.setFragment(QString()); - QString s = url.toString(); + const QString &s = url.toString(); if (s.endsWith(QLatin1String(".html")) || s.endsWith(QLatin1String(".htm")) || s.endsWith(QLatin1String(".txt"))) documentsSet.insert(s); } - int docNum = 0; const QStringList documentsList(documentsSet.toList()); - foreach(const QString &url, documentsList) { - if (m_cancel) + for (const QString &url : documentsList) { + lock.relock(); + if (m_cancel) { + // store what we have done so far + writeIndexMap(&engine, indexMap); + writer.endTransaction(); + emit indexingFinished(); return; + } + lock.unlock(); - QByteArray data(engine.fileData(url)); + const QByteArray data(engine.fileData(url)); if (data.isEmpty()) continue; QTextStream s(data); - QString en = QHelpGlobal::codecFromData(data); + const QString &en = QHelpGlobal::codecFromData(data); s.setCodec(QTextCodec::codecForName(en.toLatin1().constData())); - QString text = s.readAll(); - if (text.isNull()) + const QString &text = s.readAll(); + if (text.isEmpty()) continue; - QString title = QHelpGlobal::documentTitle(text); - - int j = 0; - int i = 0; - bool valid = true; - const QChar *buf = text.unicode(); - QChar str[64]; - QChar c = buf[0]; - - while ( j < text.length() ) { - if (m_cancel) - return; - - if ( c == QLatin1Char('<') || c == QLatin1Char('&') ) { - valid = false; - if ( i > 1 ) - writer.insertInIndex(QString(str,i), docNum); - i = 0; - c = buf[++j]; - continue; - } - if ( ( c == QLatin1Char('>') || c == QLatin1Char(';') ) && !valid ) { - valid = true; - c = buf[++j]; - continue; - } - if ( !valid ) { - c = buf[++j]; - continue; - } - if ( ( c.isLetterOrNumber() || c == QLatin1Char('_') ) && i < 63 ) { - str[i] = c.toLower(); - ++i; - } else { - if ( i > 1 ) - writer.insertInIndex(QString(str,i), docNum); - i = 0; - } - c = buf[++j]; - } - if ( i > 1 ) - writer.insertInIndex(QString(str,i), docNum); + QTextDocument doc; + doc.setHtml(text); - docNum++; - writer.insertInDocumentList(title, url); - } + const QString &title = doc.metaInformation(QTextDocument::DocumentTitle).toHtmlEscaped(); + const QString &contents = doc.toPlainText().toHtmlEscaped(); - if (writer.writeIndex()) { - engine.setCustomValue(key, addNamespace( - engine.customValue(key).toString(), namespaceName)); + writer.insertDoc(namespaceName, attributesString, url, title, contents); } - - writer.reset(); } + writer.flush(); + const QString &path = engine.documentationFileName(namespaceName); + indexMap.insert(namespaceName, QFileInfo(path).lastModified()); } - QStringListIterator qsli(indexedNamespaces); - while (qsli.hasNext()) { - const QString namespaceName = qsli.next(); - if (namespaces.contains(namespaceName)) - continue; - - const QList attributeSets = - engine.filterAttributeSets(namespaceName); - - foreach (const QStringList &attributes, attributeSets) { - writer.setIndexFile(namespaceName, attributes.join(QLatin1String("@"))); - writer.removeIndex(); - } - - engine.setCustomValue(key, removeNamespace( - engine.customValue(key).toString(), namespaceName)); - } + writeIndexMap(&engine, indexMap); + writer.endTransaction(); emit indexingFinished(); } -QString QHelpSearchIndexWriter::addNamespace(const QString namespaces, - const QString &namespaceName) -{ - QString value = namespaces; - if (!value.contains(namespaceName)) - value.append(namespaceName).append(QLatin1String("|")); - - return value; -} - -QString QHelpSearchIndexWriter::removeNamespace(const QString namespaces, - const QString &namespaceName) -{ - QString value = namespaces; - if (value.contains(namespaceName)) - value.remove(namespaceName + QLatin1String("|")); - - return value; -} - } // namespace std } // namespace fulltextsearch diff -Nru qttools-opensource-src-5.7.1/src/assistant/help/qhelpsearchindexwriter_default_p.h qttools-opensource-src-5.9.1/src/assistant/help/qhelpsearchindexwriter_default_p.h --- qttools-opensource-src-5.7.1/src/assistant/help/qhelpsearchindexwriter_default_p.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/help/qhelpsearchindexwriter_default_p.h 2017-06-23 12:03:39.000000000 +0000 @@ -51,20 +51,15 @@ // We mean it. // -#include "qhelpsearchindex_default_p.h" - -#include #include -#include -#include #include -#include -#include + +QT_FORWARD_DECLARE_CLASS(QSqlDatabase) QT_BEGIN_NAMESPACE namespace fulltextsearch { -namespace std { +namespace qt { class Writer { @@ -72,20 +67,33 @@ Writer(const QString &path); ~Writer(); - void reset(); - bool writeIndex() const; - void removeIndex() const; - void setIndexFile(const QString &namespaceName, const QString &attributes); - void insertInIndex(const QString &string, int docNum); - void insertInDocumentList(const QString &title, const QString &url); + bool tryInit(bool reindex); + void flush(); + void removeNamespace(const QString &namespaceName); + bool hasNamespace(const QString &namespaceName); + void insertDoc(const QString &namespaceName, + const QString &attributes, + const QString &url, + const QString &title, + const QString &contents); + void startTransaction(); + void endTransaction(); private: - QString indexPath; - QString indexFile; - QString documentFile; - - QHash index; - QList documentList; + void init(bool reindex); + bool hasDB(); + void clearLegacyIndex(); + + const QString m_dbDir; + QString m_uniqueId; + + bool m_needOptimize = false; + QSqlDatabase *m_db = nullptr; + QVariantList m_namespaces; + QVariantList m_attributes; + QVariantList m_urls; + QVariantList m_titles; + QVariantList m_contents; }; @@ -106,13 +114,10 @@ void indexingFinished(); private: - void run(); - QString addNamespace(const QString namespaces, const QString &namespaceName); - QString removeNamespace(const QString namespaces, const QString &namespaceName); + void run() override; private: - QMutex mutex; - QWaitCondition waitCondition; + QMutex m_mutex; bool m_cancel; bool m_reindex; diff -Nru qttools-opensource-src-5.7.1/src/assistant/help/qhelpsearchquerywidget.cpp qttools-opensource-src-5.9.1/src/assistant/help/qhelpsearchquerywidget.cpp --- qttools-opensource-src-5.7.1/src/assistant/help/qhelpsearchquerywidget.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/help/qhelpsearchquerywidget.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -61,7 +61,7 @@ private: struct QueryHistory { explicit QueryHistory() : curQuery(-1) {} - QList > queries; + QStringList queries; int curQuery; }; @@ -71,12 +71,12 @@ explicit CompleterModel(QObject *parent) : QAbstractListModel(parent) {} - int rowCount(const QModelIndex &parent = QModelIndex()) const + int rowCount(const QModelIndex &parent = QModelIndex()) const override { return parent.isValid() ? 0 : termList.size(); } - QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const + QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override { if (!index.isValid() || index.row() >= termList.count()|| (role != Qt::EditRole && role != Qt::DisplayRole)) @@ -99,19 +99,8 @@ QHelpSearchQueryWidgetPrivate() : QObject() - , compactMode(false) - , simpleSearch(true) - , searchCompleter(new CompleterModel(this), this) - { - searchButton = 0; - advancedSearchWidget = 0; - showHideAdvancedSearchButton = 0; - defaultQuery = 0; - exactQuery = 0; - similarQuery = 0; - withoutQuery = 0; - allQuery = 0; - atLeastQuery = 0; + , m_searchCompleter(new CompleterModel(this), this) + { } ~QHelpSearchQueryWidgetPrivate() @@ -121,182 +110,58 @@ void retranslate() { - simpleSearchLabel->setText(QHelpSearchQueryWidget::tr("Search for:")); - prevQueryButton->setToolTip(QHelpSearchQueryWidget::tr("Previous search")); - nextQueryButton->setToolTip(QHelpSearchQueryWidget::tr("Next search")); - searchButton->setText(QHelpSearchQueryWidget::tr("Search")); -#ifdef QT_CLUCENE_SUPPORT - advancedSearchLabel->setText(QHelpSearchQueryWidget::tr("Advanced search")); - similarLabel->setText(QHelpSearchQueryWidget::tr("words similar to:")); - withoutLabel->setText(QHelpSearchQueryWidget::tr("without the words:")); - exactLabel->setText(QHelpSearchQueryWidget::tr("with exact phrase:")); - allLabel->setText(QHelpSearchQueryWidget::tr("with all of the words:")); - atLeastLabel->setText(QHelpSearchQueryWidget::tr("with at least one of the words:")); -#endif - } - - QList escapeQueries(const QList &queries) - { - static QStringList charsToEscapeList; - if (charsToEscapeList.isEmpty()) { - charsToEscapeList << QLatin1String("\\") << QLatin1String("+") << QLatin1String("-") - << QLatin1String("!") << QLatin1String("(") << QLatin1String(")") << QLatin1String(":") - << QLatin1String("^") << QLatin1String("[") << QLatin1String("]") << QLatin1String("{") - << QLatin1String("}") << QLatin1String("~"); - } - - static QString escapeChar(QLatin1String("\\")); - static QRegExp regExp(QLatin1String("[\\+\\-\\!\\(\\)\\^\\[\\]\\{\\}~:]")); - - QList escapedQueries; - foreach (const QHelpSearchQuery &query, queries) { - QHelpSearchQuery escapedQuery; - escapedQuery.fieldName = query.fieldName; - foreach (QString word, query.wordList) { - if (word.contains(regExp)) { - foreach (const QString &charToEscape, charsToEscapeList) - word.replace(charToEscape, escapeChar + charToEscape); - } - escapedQuery.wordList.append(word); - } - escapedQueries.append(escapedQuery); - } - return escapedQueries; - } - - QStringList buildTermList(const QString query) - { - bool s = false; - QString phrase; - QStringList wordList; - QString searchTerm = query; - - for (int i = 0; i < searchTerm.length(); ++i) { - if (searchTerm[i] == QLatin1Char('\"') && !s) { - s = true; - phrase = searchTerm[i]; - continue; - } - if (searchTerm[i] != QLatin1Char('\"') && s) - phrase += searchTerm[i]; - if (searchTerm[i] == QLatin1Char('\"') && s) { - s = false; - phrase += searchTerm[i]; - wordList.append(phrase); - searchTerm.remove(phrase); - } - } - if (s) - searchTerm.replace(phrase, phrase.mid(1)); - - QRegExp exp(QLatin1String("\\s+")); - wordList += searchTerm.split(exp, QString::SkipEmptyParts); - return wordList; + m_searchLabel->setText(QHelpSearchQueryWidget::tr("Search for:")); + m_prevQueryButton->setToolTip(QHelpSearchQueryWidget::tr("Previous search")); + m_nextQueryButton->setToolTip(QHelpSearchQueryWidget::tr("Next search")); + m_searchButton->setText(QHelpSearchQueryWidget::tr("Search")); } - void saveQuery(const QList &query, QueryHistory &queryHist) + void saveQuery(const QString &query) { // We only add the query to the list if it is different from the last one. - bool insert = false; - if (queryHist.queries.empty()) - insert = true; - else { - const QList &lastQuery = queryHist.queries.last(); - if (lastQuery.size() != query.size()) { - insert = true; - } else { - for (int i = 0; i < query.size(); ++i) { - if (query.at(i).fieldName != lastQuery.at(i).fieldName - || query.at(i).wordList != lastQuery.at(i).wordList) { - insert = true; - break; - } - } - } - } - if (insert) { - queryHist.queries.append(query); - foreach (const QHelpSearchQuery &queryPart, query) { - static_cast(searchCompleter.model())-> - addTerm(queryPart.wordList.join(QLatin1Char(' '))); - } - } + if (!m_queries.queries.isEmpty() && m_queries.queries.last() == query) + return; + + m_queries.queries.append(query); + static_cast(m_searchCompleter.model())->addTerm(query); } void nextOrPrevQuery(int maxOrMinIndex, int addend, QToolButton *thisButton, QToolButton *otherButton) { - QueryHistory *queryHist; - QList lineEdits; - if (simpleSearch) { - queryHist = &simpleQueries; - lineEdits << defaultQuery; - } else { - queryHist = &complexQueries; - lineEdits << allQuery << atLeastQuery << similarQuery - << withoutQuery << exactQuery; - } - foreach (QLineEdit *lineEdit, lineEdits) - lineEdit->clear(); + m_lineEdit->clear(); // Otherwise, the respective button would be disabled. - Q_ASSERT(queryHist->curQuery != maxOrMinIndex); + Q_ASSERT(m_queries.curQuery != maxOrMinIndex); - queryHist->curQuery += addend; - const QList &query = - queryHist->queries.at(queryHist->curQuery); - foreach (const QHelpSearchQuery &queryPart, query) { - if (QLineEdit *lineEdit = lineEditFor(queryPart.fieldName)) - lineEdit->setText(queryPart.wordList.join(QLatin1Char(' '))); - } + m_queries.curQuery = qBound(0, m_queries.curQuery + addend, m_queries.queries.count() - 1); + const QString &query = m_queries.queries.at(m_queries.curQuery); + m_lineEdit->setText(query); - if (queryHist->curQuery == maxOrMinIndex) + if (m_queries.curQuery == maxOrMinIndex) thisButton->setEnabled(false); otherButton->setEnabled(true); } - QLineEdit* lineEditFor(const QHelpSearchQuery::FieldName &fieldName) const - { - switch (fieldName) { - case QHelpSearchQuery::DEFAULT: - return defaultQuery; - case QHelpSearchQuery::ALL: - return allQuery; - case QHelpSearchQuery::ATLEAST: - return atLeastQuery; - case QHelpSearchQuery::FUZZY: - return similarQuery; - case QHelpSearchQuery::WITHOUT: - return withoutQuery; - case QHelpSearchQuery::PHRASE: - return exactQuery; - default: - Q_ASSERT(0); - } - return 0; - } - void enableOrDisableToolButtons() { - const QueryHistory &queryHist = simpleSearch ? simpleQueries - : complexQueries; - prevQueryButton->setEnabled(queryHist.curQuery > 0); - nextQueryButton->setEnabled(queryHist.curQuery - < queryHist.queries.size() - 1); + m_prevQueryButton->setEnabled(m_queries.curQuery > 0); + m_nextQueryButton->setEnabled(m_queries.curQuery + < m_queries.queries.size() - 1); } private slots: - bool eventFilter(QObject *ob, QEvent *event) + bool eventFilter(QObject *ob, QEvent *event) override { if (event->type() == QEvent::KeyPress) { QKeyEvent *const keyEvent = static_cast(event); if (keyEvent->key() == Qt::Key_Down) { - if (simpleQueries.curQuery + 1 < simpleQueries.queries.size()) + if (m_queries.curQuery + 1 < m_queries.queries.size()) nextQuery(); return true; } if (keyEvent->key() == Qt::Key_Up) { - if (simpleQueries.curQuery > 0) + if (m_queries.curQuery > 0) prevQuery(); return true; } @@ -305,123 +170,37 @@ return QObject::eventFilter(ob, event); } - void showHideAdvancedSearch() - { - if (simpleSearch) { - advancedSearchWidget->show(); - showHideAdvancedSearchButton->setText((QLatin1String("-"))); - } else { - advancedSearchWidget->hide(); - showHideAdvancedSearchButton->setText((QLatin1String("+"))); - } - - simpleSearch = !simpleSearch; - defaultQuery->setEnabled(simpleSearch); - enableOrDisableToolButtons(); - } - void searchRequested() { - QList queryList; -#if !defined(QT_CLUCENE_SUPPORT) - queryList.append(QHelpSearchQuery(QHelpSearchQuery::DEFAULT, - QStringList(defaultQuery->text()))); -#else - if (defaultQuery->isEnabled()) { - queryList.append(QHelpSearchQuery(QHelpSearchQuery::DEFAULT, - buildTermList(defaultQuery->text()))); - } else { - QRegExp exp(QLatin1String("\\s+")); - QStringList lst = similarQuery->text().split(exp, - QString::SkipEmptyParts); - if (!lst.isEmpty()) { - QStringList fuzzy; - foreach (const QString &term, lst) - fuzzy += buildTermList(term); - queryList.append(QHelpSearchQuery(QHelpSearchQuery::FUZZY, - fuzzy)); - } - - lst = withoutQuery->text().split(exp, QString::SkipEmptyParts); - if (!lst.isEmpty()) { - QStringList without; - foreach (const QString &term, lst) - without.append(term); - queryList.append(QHelpSearchQuery(QHelpSearchQuery::WITHOUT, - without)); - } - - if (!exactQuery->text().isEmpty()) { - QString phrase = exactQuery->text().remove(QLatin1Char('\"')); - phrase = phrase.simplified(); - queryList.append(QHelpSearchQuery(QHelpSearchQuery::PHRASE, - QStringList(phrase))); - } - - lst = allQuery->text().split(exp, QString::SkipEmptyParts); - if (!lst.isEmpty()) { - QStringList all; - foreach (const QString &term, lst) - all.append(term); - queryList.append(QHelpSearchQuery(QHelpSearchQuery::ALL, all)); - } - - lst = atLeastQuery->text().split(exp, QString::SkipEmptyParts); - if (!lst.isEmpty()) { - QStringList atLeast; - foreach (const QString &term, lst) - atLeast += buildTermList(term); - queryList.append(QHelpSearchQuery(QHelpSearchQuery::ATLEAST, - atLeast)); - } - } -#endif - QueryHistory &queryHist = simpleSearch ? simpleQueries : complexQueries; - saveQuery(queryList, queryHist); - queryHist.curQuery = queryHist.queries.size() - 1; - if (queryHist.curQuery > 0) - prevQueryButton->setEnabled(true); - nextQueryButton->setEnabled(false); + saveQuery(m_lineEdit->text()); + m_queries.curQuery = m_queries.queries.size() - 1; + if (m_queries.curQuery > 0) + m_prevQueryButton->setEnabled(true); + m_nextQueryButton->setEnabled(false); } void nextQuery() { - nextOrPrevQuery((simpleSearch ? simpleQueries - : complexQueries).queries.size() - 1, 1, nextQueryButton, - prevQueryButton); + nextOrPrevQuery(m_queries.queries.size() - 1, 1, m_nextQueryButton, + m_prevQueryButton); } void prevQuery() { - nextOrPrevQuery(0, -1, prevQueryButton, nextQueryButton); + nextOrPrevQuery(0, -1, m_prevQueryButton, m_nextQueryButton); } private: friend class QHelpSearchQueryWidget; - bool compactMode; - bool simpleSearch; - QLabel *simpleSearchLabel; - QLabel *advancedSearchLabel; - QLabel *similarLabel; - QLabel *withoutLabel; - QLabel *exactLabel; - QLabel *allLabel; - QLabel *atLeastLabel; - QPushButton *searchButton; - QWidget* advancedSearchWidget; - QToolButton *showHideAdvancedSearchButton; - QLineEdit *defaultQuery; - QLineEdit *exactQuery; - QLineEdit *similarQuery; - QLineEdit *withoutQuery; - QLineEdit *allQuery; - QLineEdit *atLeastQuery; - QToolButton *nextQueryButton; - QToolButton *prevQueryButton; - QueryHistory simpleQueries; - QueryHistory complexQueries; - QCompleter searchCompleter; + bool m_compactMode = false; + QLabel *m_searchLabel = nullptr; + QPushButton *m_searchButton = nullptr; + QLineEdit *m_lineEdit = nullptr; + QToolButton *m_nextQueryButton = nullptr; + QToolButton *m_prevQueryButton = nullptr; + QueryHistory m_queries; + QCompleter m_searchCompleter; }; #include "qhelpsearchquerywidget.moc" @@ -441,8 +220,7 @@ This signal is emitted when a the user has the search button invoked. After receiving the signal you can ask the QHelpSearchQueryWidget for the - build list of QHelpSearchQuery's that you may pass to the QHelpSearchEngine's - search() function. + search input that you may pass to the QHelpSearchEngine::search() function. */ /*! @@ -457,98 +235,37 @@ vLayout->setMargin(0); QHBoxLayout* hBoxLayout = new QHBoxLayout(); - d->simpleSearchLabel = new QLabel(this); - d->defaultQuery = new QLineEdit(this); - d->defaultQuery->setCompleter(&d->searchCompleter); - d->defaultQuery->installEventFilter(d); - d->prevQueryButton = new QToolButton(this); - d->prevQueryButton->setArrowType(Qt::LeftArrow); - d->prevQueryButton->setEnabled(false); - d->nextQueryButton = new QToolButton(this); - d->nextQueryButton->setArrowType(Qt::RightArrow); - d->nextQueryButton->setEnabled(false); - d->searchButton = new QPushButton(this); - hBoxLayout->addWidget(d->simpleSearchLabel); - hBoxLayout->addWidget(d->defaultQuery); - hBoxLayout->addWidget(d->prevQueryButton); - hBoxLayout->addWidget(d->nextQueryButton); - hBoxLayout->addWidget(d->searchButton); + d->m_searchLabel = new QLabel(this); + d->m_lineEdit = new QLineEdit(this); + d->m_lineEdit->setCompleter(&d->m_searchCompleter); + d->m_lineEdit->installEventFilter(d); + d->m_prevQueryButton = new QToolButton(this); + d->m_prevQueryButton->setArrowType(Qt::LeftArrow); + d->m_prevQueryButton->setEnabled(false); + d->m_nextQueryButton = new QToolButton(this); + d->m_nextQueryButton->setArrowType(Qt::RightArrow); + d->m_nextQueryButton->setEnabled(false); + d->m_searchButton = new QPushButton(this); + hBoxLayout->addWidget(d->m_searchLabel); + hBoxLayout->addWidget(d->m_lineEdit); + hBoxLayout->addWidget(d->m_prevQueryButton); + hBoxLayout->addWidget(d->m_nextQueryButton); + hBoxLayout->addWidget(d->m_searchButton); vLayout->addLayout(hBoxLayout); - connect(d->prevQueryButton, SIGNAL(clicked()), d, SLOT(prevQuery())); - connect(d->nextQueryButton, SIGNAL(clicked()), d, SLOT(nextQuery())); - connect(d->searchButton, SIGNAL(clicked()), this, SIGNAL(search())); - connect(d->defaultQuery, SIGNAL(returnPressed()), this, SIGNAL(search())); - -#if defined(QT_CLUCENE_SUPPORT) - hBoxLayout = new QHBoxLayout(); - d->showHideAdvancedSearchButton = new QToolButton(this); - d->showHideAdvancedSearchButton->setText(QLatin1String("+")); - d->showHideAdvancedSearchButton->setMinimumSize(25, 20); - - d->advancedSearchLabel = new QLabel(this); - QSizePolicy sizePolicy(QSizePolicy::Maximum, QSizePolicy::Preferred); - sizePolicy.setHeightForWidth(d->advancedSearchLabel->sizePolicy().hasHeightForWidth()); - d->advancedSearchLabel->setSizePolicy(sizePolicy); - - QFrame* hLine = new QFrame(this); - hLine->setFrameStyle(QFrame::HLine); - hBoxLayout->addWidget(d->showHideAdvancedSearchButton); - hBoxLayout->addWidget(d->advancedSearchLabel); - hBoxLayout->addWidget(hLine); - - vLayout->addLayout(hBoxLayout); - - // setup advanced search layout - d->advancedSearchWidget = new QWidget(this); - QGridLayout *gLayout = new QGridLayout(d->advancedSearchWidget); - gLayout->setMargin(0); - - d->similarLabel = new QLabel(this); - gLayout->addWidget(d->similarLabel, 0, 0); - d->similarQuery = new QLineEdit(this); - d->similarQuery->setCompleter(&d->searchCompleter); - gLayout->addWidget(d->similarQuery, 0, 1); - - d->withoutLabel = new QLabel(this); - gLayout->addWidget(d->withoutLabel, 1, 0); - d->withoutQuery = new QLineEdit(this); - d->withoutQuery->setCompleter(&d->searchCompleter); - gLayout->addWidget(d->withoutQuery, 1, 1); - - d->exactLabel = new QLabel(this); - gLayout->addWidget(d->exactLabel, 2, 0); - d->exactQuery = new QLineEdit(this); - d->exactQuery->setCompleter(&d->searchCompleter); - gLayout->addWidget(d->exactQuery, 2, 1); - - d->allLabel = new QLabel(this); - gLayout->addWidget(d->allLabel, 3, 0); - d->allQuery = new QLineEdit(this); - d->allQuery->setCompleter(&d->searchCompleter); - gLayout->addWidget(d->allQuery, 3, 1); - - d->atLeastLabel = new QLabel(this); - gLayout->addWidget(d->atLeastLabel, 4, 0); - d->atLeastQuery = new QLineEdit(this); - d->atLeastQuery->setCompleter(&d->searchCompleter); - gLayout->addWidget(d->atLeastQuery, 4, 1); - - vLayout->addWidget(d->advancedSearchWidget); - d->advancedSearchWidget->hide(); + connect(d->m_prevQueryButton, &QAbstractButton::clicked, + d, &QHelpSearchQueryWidgetPrivate::prevQuery); + connect(d->m_nextQueryButton, &QAbstractButton::clicked, + d, &QHelpSearchQueryWidgetPrivate::nextQuery); + connect(d->m_searchButton, &QAbstractButton::clicked, + this, &QHelpSearchQueryWidget::search); + connect(d->m_lineEdit, &QLineEdit::returnPressed, + this, &QHelpSearchQueryWidget::search); d->retranslate(); - - connect(d->exactQuery, SIGNAL(returnPressed()), this, SIGNAL(search())); - connect(d->similarQuery, SIGNAL(returnPressed()), this, SIGNAL(search())); - connect(d->withoutQuery, SIGNAL(returnPressed()), this, SIGNAL(search())); - connect(d->allQuery, SIGNAL(returnPressed()), this, SIGNAL(search())); - connect(d->atLeastQuery, SIGNAL(returnPressed()), this, SIGNAL(search())); - connect(d->showHideAdvancedSearchButton, SIGNAL(clicked()), - d, SLOT(showHideAdvancedSearch())); -#endif - connect(this, SIGNAL(search()), d, SLOT(searchRequested())); + connect(this, &QHelpSearchQueryWidget::search, + d, &QHelpSearchQueryWidgetPrivate::searchRequested); setCompactMode(true); } @@ -565,8 +282,7 @@ */ void QHelpSearchQueryWidget::expandExtendedSearch() { - if (d->simpleSearch) - d->showHideAdvancedSearch(); + // TODO: no extended search anymore, deprecate it? } /*! @@ -575,57 +291,76 @@ */ void QHelpSearchQueryWidget::collapseExtendedSearch() { - if (!d->simpleSearch) - d->showHideAdvancedSearch(); + // TODO: no extended search anymore, deprecate it? } /*! - Returns a list of queries to use in combination with the search engines - search(QList &queryList) function. + \obsolete + + Use searchInput() instead. */ QList QHelpSearchQueryWidget::query() const { - const QHelpSearchQueryWidgetPrivate::QueryHistory &queryHist = - d->simpleSearch ? d->simpleQueries : d->complexQueries; - if (queryHist.queries.isEmpty()) - return QList(); - return d->escapeQueries(queryHist.queries.last()); + return QList() << QHelpSearchQuery(QHelpSearchQuery::DEFAULT, + searchInput().split(QChar::Space, QString::SkipEmptyParts)); } /*! - Sets the QHelpSearchQueryWidget input fields to the values specified by - \a queryList search field name. Please note that one has to call the search - engine's search(QList &queryList) function to perform the - actual search. + \obsolete + + Use setSearchInput() instead. */ void QHelpSearchQueryWidget::setQuery(const QList &queryList) { - QList lineEdits; - lineEdits << d->defaultQuery << d->allQuery << d->atLeastQuery - << d->similarQuery << d->withoutQuery << d->exactQuery; - foreach (QLineEdit *lineEdit, lineEdits) - lineEdit->clear(); - - const QLatin1String space(" "); - foreach (const QHelpSearchQuery &q, queryList) { - if (QLineEdit *lineEdit = d->lineEditFor(q.fieldName)) - lineEdit->setText(lineEdit->text() + q.wordList.join(space) + space); - } + if (queryList.isEmpty()) + return; + + setSearchInput(queryList.first().wordList.join(QChar::Space)); +} + +/*! + \since 5.9 + + Returns a search phrase to use in combination with the + QHelpSearchEngine::search(const QString &searchInput) function. +*/ +QString QHelpSearchQueryWidget::searchInput() const +{ + if (d->m_queries.queries.isEmpty()) + return QString(); + return d->m_queries.queries.last(); +} + +/*! + \since 5.9 + + Sets the QHelpSearchQueryWidget input field to the value specified by + \a searchInput. + + \note The QHelpSearchEngine::search(const QString &searchInput) function has + to be called to perform the actual search. +*/ +void QHelpSearchQueryWidget::setSearchInput(const QString &searchInput) +{ + d->m_lineEdit->clear(); + + d->m_lineEdit->setText(searchInput); + d->searchRequested(); } bool QHelpSearchQueryWidget::isCompactMode() const { - return d->compactMode; + return d->m_compactMode; } void QHelpSearchQueryWidget::setCompactMode(bool on) { - if (d->compactMode != on) { - d->compactMode = on; - d->prevQueryButton->setVisible(!on); - d->nextQueryButton->setVisible(!on); - d->simpleSearchLabel->setVisible(!on); + if (d->m_compactMode != on) { + d->m_compactMode = on; + d->m_prevQueryButton->setVisible(!on); + d->m_nextQueryButton->setVisible(!on); + d->m_searchLabel->setVisible(!on); } } @@ -635,8 +370,8 @@ void QHelpSearchQueryWidget::focusInEvent(QFocusEvent *focusEvent) { if (focusEvent->reason() != Qt::MouseFocusReason) { - d->defaultQuery->selectAll(); - d->defaultQuery->setFocus(); + d->m_lineEdit->selectAll(); + d->m_lineEdit->setFocus(); } } diff -Nru qttools-opensource-src-5.7.1/src/assistant/help/qhelpsearchquerywidget.h qttools-opensource-src-5.9.1/src/assistant/help/qhelpsearchquerywidget.h --- qttools-opensource-src-5.7.1/src/assistant/help/qhelpsearchquerywidget.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/help/qhelpsearchquerywidget.h 2017-06-23 12:03:39.000000000 +0000 @@ -66,8 +66,13 @@ void expandExtendedSearch(); void collapseExtendedSearch(); - QList query() const; - void setQuery(const QList &queryList); +#if QT_DEPRECATED_SINCE(5, 9) + QT_DEPRECATED QList query() const; + QT_DEPRECATED void setQuery(const QList &queryList); +#endif + + QString searchInput() const; + void setSearchInput(const QString &searchInput); bool isCompactMode() const; Q_SLOT void setCompactMode(bool on); @@ -76,8 +81,8 @@ void search(); private: - virtual void focusInEvent(QFocusEvent *focusEvent); - virtual void changeEvent(QEvent *event); + void focusInEvent(QFocusEvent *focusEvent) override; + void changeEvent(QEvent *event) override; private: QHelpSearchQueryWidgetPrivate *d; diff -Nru qttools-opensource-src-5.7.1/src/assistant/help/qhelpsearchresultwidget.cpp qttools-opensource-src-5.9.1/src/assistant/help/qhelpsearchresultwidget.cpp --- qttools-opensource-src-5.7.1/src/assistant/help/qhelpsearchresultwidget.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/help/qhelpsearchresultwidget.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -56,71 +56,41 @@ QT_BEGIN_NAMESPACE -class QDefaultResultWidget : public QTreeWidget +class QResultWidget : public QTextBrowser { Q_OBJECT public: - QDefaultResultWidget(QWidget *parent = 0) - : QTreeWidget(parent) - { - header()->hide(); - connect(this, SIGNAL(itemActivated(QTreeWidgetItem*,int)), - this, SLOT(itemActivated(QTreeWidgetItem*,int))); - } - - void showResultPage(const QList hits) - { - foreach (const QHelpSearchEngine::SearchHit &hit, hits) - new QTreeWidgetItem(this, QStringList(hit.first) << hit.second); - } - -signals: - void requestShowLink(const QUrl &url); - -private slots: - void itemActivated(QTreeWidgetItem *item, int /* column */) - { - if (item) { - QString data = item->data(1, Qt::DisplayRole).toString(); - emit requestShowLink(data); - } - } -}; - - -class QCLuceneResultWidget : public QTextBrowser -{ - Q_OBJECT - -public: - QCLuceneResultWidget(QWidget *parent = 0) + QResultWidget(QWidget *parent = 0) : QTextBrowser(parent) { - connect(this, SIGNAL(anchorClicked(QUrl)), - this, SIGNAL(requestShowLink(QUrl))); + connect(this, &QTextBrowser::anchorClicked, + this, &QResultWidget::requestShowLink); setContextMenuPolicy(Qt::NoContextMenu); } - void showResultPage(const QList hits, bool isIndexing) + void showResultPage(const QVector results, bool isIndexing) { - QString htmlFile = QString(QLatin1String("%1")) - .arg(tr("Search Results")); + QString htmlFile = QString(QLatin1String("%1" + "")).arg(tr("Search Results")); - int count = hits.count(); + const int count = results.count(); if (count != 0) { if (isIndexing) - htmlFile += QString(QLatin1String("
" + htmlFile += QString(QLatin1String("
" "%1 " "%2

")).arg(tr("Note:")) .arg(tr("The search results may not be complete since the " "documentation is still being indexed.")); - foreach (const QHelpSearchEngine::SearchHit &hit, hits) { - htmlFile += QString(QLatin1String("
%2
%1

")) - .arg(hit.first).arg(hit.second); + for (const QHelpSearchResult &result : results) { + htmlFile += QString(QLatin1String("
%2" + "
%3

")) + .arg(result.url().toString(), result.title(), + result.snippet()); } } else { htmlFile += QLatin1String("


") @@ -142,7 +112,7 @@ void requestShowLink(const QUrl &url); private slots: - void setSource(const QUrl & /* name */) {} + void setSource(const QUrl & /* name */) override {} }; @@ -151,93 +121,39 @@ Q_OBJECT private slots: - void setResults(int hitsCount) - { - if (!searchEngine.isNull()) { -#if defined(QT_CLUCENE_SUPPORT) - showFirstResultPage(); - updateNextButtonState(((hitsCount > 20) ? true : false)); -#else - resultTreeWidget->clear(); - resultTreeWidget->showResultPage(searchEngine->hits(0, hitsCount)); -#endif - } - } - - void showNextResultPage() + void showFirstResultPage() { - if (!searchEngine.isNull() - && resultLastToShow < searchEngine->hitCount()) { - resultLastToShow += 20; - resultFirstToShow += 20; - - resultTextBrowser->showResultPage(searchEngine->hits(resultFirstToShow, - resultLastToShow), isIndexing); - if (resultLastToShow >= searchEngine->hitCount()) - updateNextButtonState(false); - } + if (!searchEngine.isNull()) + resultFirstToShow = 0; updateHitRange(); } void showLastResultPage() { - if (!searchEngine.isNull()) { - resultLastToShow = searchEngine->hitCount(); - resultFirstToShow = resultLastToShow - (resultLastToShow % 20); - - if (resultFirstToShow == resultLastToShow) - resultFirstToShow -= 20; - - resultTextBrowser->showResultPage(searchEngine->hits(resultFirstToShow, - resultLastToShow), isIndexing); - updateNextButtonState(false); - } + if (!searchEngine.isNull()) + resultFirstToShow = (searchEngine->searchResultCount() - 1) / ResultsRange * ResultsRange; updateHitRange(); } - void showFirstResultPage() + void showPreviousResultPage() { if (!searchEngine.isNull()) { - resultLastToShow = 20; - resultFirstToShow = 0; - - resultTextBrowser->showResultPage(searchEngine->hits(resultFirstToShow, - resultLastToShow), isIndexing); - updatePrevButtonState(false); + resultFirstToShow -= ResultsRange; + if (resultFirstToShow < 0) + resultFirstToShow = 0; } updateHitRange(); } - void showPreviousResultPage() + void showNextResultPage() { - if (!searchEngine.isNull()) { - int count = resultLastToShow % 20; - if (count == 0 || resultLastToShow != searchEngine->hitCount()) - count = 20; - - resultLastToShow -= count; - resultFirstToShow = resultLastToShow -20; - - resultTextBrowser->showResultPage(searchEngine->hits(resultFirstToShow, - resultLastToShow), isIndexing); - if (resultFirstToShow == 0) - updatePrevButtonState(false); + if (!searchEngine.isNull() + && resultFirstToShow + ResultsRange < searchEngine->searchResultCount()) { + resultFirstToShow += ResultsRange; } updateHitRange(); } - void updatePrevButtonState(bool state = true) - { - firstResultPage->setEnabled(state); - previousResultPage->setEnabled(state); - } - - void updateNextButtonState(bool state = true) - { - nextResultPage->setEnabled(state); - lastResultPage->setEnabled(state); - } - void indexingStarted() { isIndexing = true; @@ -252,24 +168,11 @@ QHelpSearchResultWidgetPrivate(QHelpSearchEngine *engine) : QObject() , searchEngine(engine) - , isIndexing(false) { - resultTreeWidget = 0; - resultTextBrowser = 0; - - resultLastToShow = 20; - resultFirstToShow = 0; - - firstResultPage = 0; - previousResultPage = 0; - hitsLabel = 0; - nextResultPage = 0; - lastResultPage = 0; - - connect(searchEngine, SIGNAL(indexingStarted()), - this, SLOT(indexingStarted())); - connect(searchEngine, SIGNAL(indexingFinished()), - this, SLOT(indexingFinished())); + connect(searchEngine.data(), &QHelpSearchEngine::indexingStarted, + this, &QHelpSearchResultWidgetPrivate::indexingStarted); + connect(searchEngine.data(), &QHelpSearchEngine::indexingFinished, + this, &QHelpSearchResultWidgetPrivate::indexingFinished); } ~QHelpSearchResultWidgetPrivate() @@ -296,13 +199,20 @@ int count = 0; if (!searchEngine.isNull()) { - count = searchEngine->hitCount(); + count = searchEngine->searchResultCount(); if (count > 0) { - first = resultFirstToShow +1; - last = resultLastToShow > count ? count : resultLastToShow; + last = qMin(resultFirstToShow + ResultsRange, count); + first = resultFirstToShow + 1; } + resultTextBrowser->showResultPage(searchEngine->searchResults(resultFirstToShow, + last), isIndexing); } + hitsLabel->setText(QHelpSearchResultWidget::tr("%1 - %2 of %n Hits", 0, count).arg(first).arg(last)); + firstResultPage->setEnabled(resultFirstToShow); + previousResultPage->setEnabled(resultFirstToShow); + lastResultPage->setEnabled(count - last); + nextResultPage->setEnabled(count - last); } private: @@ -310,18 +220,18 @@ QPointer searchEngine; - QDefaultResultWidget *resultTreeWidget; - QCLuceneResultWidget *resultTextBrowser; + QResultWidget *resultTextBrowser = nullptr; + + static const int ResultsRange = 20; + + int resultFirstToShow = 0; + bool isIndexing = false; - int resultLastToShow; - int resultFirstToShow; - bool isIndexing; - - QToolButton *firstResultPage; - QToolButton *previousResultPage; - QLabel *hitsLabel; - QToolButton *nextResultPage; - QToolButton *lastResultPage; + QToolButton *firstResultPage = nullptr; + QToolButton *previousResultPage = nullptr; + QLabel *hitsLabel = nullptr; + QToolButton *nextResultPage = nullptr; + QToolButton *lastResultPage = nullptr; }; #include "qhelpsearchresultwidget.moc" @@ -331,9 +241,8 @@ \class QHelpSearchResultWidget \since 4.4 \inmodule QtHelp - \brief The QHelpSearchResultWidget class provides either a tree - widget or a text browser depending on the used search engine to display - the hits found by the search. + \brief The QHelpSearchResultWidget class provides a text browser to display + search results. */ /*! @@ -351,7 +260,6 @@ vLayout->setMargin(0); vLayout->setSpacing(0); -#if defined(QT_CLUCENE_SUPPORT) QHBoxLayout *hBoxLayout = new QHBoxLayout(); #ifndef Q_OS_MAC hBoxLayout->setMargin(0); @@ -364,7 +272,6 @@ QString::fromUtf8(":/qt-project.org/assistant/images/1leftarrow.png"))); d->hitsLabel = new QLabel(tr("0 - 0 of 0 Hits"), this); - d->hitsLabel->setEnabled(false); hBoxLayout->addWidget(d->hitsLabel); d->hitsLabel->setAlignment(Qt::AlignCenter); d->hitsLabel->setMinimumSize(QSize(150, d->hitsLabel->height())); @@ -380,30 +287,23 @@ vLayout->addLayout(hBoxLayout); - d->resultTextBrowser = new QCLuceneResultWidget(this); + d->resultTextBrowser = new QResultWidget(this); vLayout->addWidget(d->resultTextBrowser); - connect(d->resultTextBrowser, SIGNAL(requestShowLink(QUrl)), this, - SIGNAL(requestShowLink(QUrl))); + connect(d->resultTextBrowser, &QResultWidget::requestShowLink, + this, &QHelpSearchResultWidget::requestShowLink); - connect(d->nextResultPage, SIGNAL(clicked()), d, SLOT(showNextResultPage())); - connect(d->lastResultPage, SIGNAL(clicked()), d, SLOT(showLastResultPage())); - connect(d->firstResultPage, SIGNAL(clicked()), d, SLOT(showFirstResultPage())); - connect(d->previousResultPage, SIGNAL(clicked()), d, SLOT(showPreviousResultPage())); - - connect(d->firstResultPage, SIGNAL(clicked()), d, SLOT(updateNextButtonState())); - connect(d->previousResultPage, SIGNAL(clicked()), d, SLOT(updateNextButtonState())); - connect(d->nextResultPage, SIGNAL(clicked()), d, SLOT(updatePrevButtonState())); - connect(d->lastResultPage, SIGNAL(clicked()), d, SLOT(updatePrevButtonState())); - -#else - d->resultTreeWidget = new QDefaultResultWidget(this); - vLayout->addWidget(d->resultTreeWidget); - connect(d->resultTreeWidget, SIGNAL(requestShowLink(QUrl)), this, - SIGNAL(requestShowLink(QUrl))); -#endif + connect(d->nextResultPage, &QAbstractButton::clicked, + d, &QHelpSearchResultWidgetPrivate::showNextResultPage); + connect(d->lastResultPage, &QAbstractButton::clicked, + d, &QHelpSearchResultWidgetPrivate::showLastResultPage); + connect(d->firstResultPage, &QAbstractButton::clicked, + d, &QHelpSearchResultWidgetPrivate::showFirstResultPage); + connect(d->previousResultPage, &QAbstractButton::clicked, + d, &QHelpSearchResultWidgetPrivate::showPreviousResultPage); - connect(engine, SIGNAL(searchingFinished(int)), d, SLOT(setResults(int))); + connect(engine, &QHelpSearchEngine::searchingFinished, + d, &QHelpSearchResultWidgetPrivate::showFirstResultPage); } /*! \reimp @@ -411,7 +311,7 @@ void QHelpSearchResultWidget::changeEvent(QEvent *event) { if (event->type() == QEvent::LanguageChange) - d->setResults(d->searchEngine->hitCount()); + d->updateHitRange(); } /*! @@ -428,18 +328,9 @@ */ QUrl QHelpSearchResultWidget::linkAt(const QPoint &point) { - QUrl url; -#if defined(QT_CLUCENE_SUPPORT) if (d->resultTextBrowser) - url = d->resultTextBrowser->anchorAt(point); -#else - if (d->resultTreeWidget) { - QTreeWidgetItem *item = d->resultTreeWidget->itemAt(point); - if (item) - url = item->data(1, Qt::DisplayRole).toString(); - } -#endif - return url; + return d->resultTextBrowser->anchorAt(point); + return QUrl(); } QT_END_NAMESPACE diff -Nru qttools-opensource-src-5.7.1/src/assistant/help/qhelpsearchresultwidget.h qttools-opensource-src-5.9.1/src/assistant/help/qhelpsearchresultwidget.h --- qttools-opensource-src-5.7.1/src/assistant/help/qhelpsearchresultwidget.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/help/qhelpsearchresultwidget.h 2017-06-23 12:03:39.000000000 +0000 @@ -51,7 +51,6 @@ QT_BEGIN_NAMESPACE - class QHelpSearchResultWidgetPrivate; class QHELP_EXPORT QHelpSearchResultWidget : public QWidget @@ -70,7 +69,7 @@ QHelpSearchResultWidgetPrivate *d; QHelpSearchResultWidget(QHelpSearchEngine *engine); - virtual void changeEvent(QEvent *event); + void changeEvent(QEvent *event) override; }; QT_END_NAMESPACE diff -Nru qttools-opensource-src-5.7.1/src/assistant/qcollectiongenerator/main.cpp qttools-opensource-src-5.9.1/src/assistant/qcollectiongenerator/main.cpp --- qttools-opensource-src-5.7.1/src/assistant/qcollectiongenerator/main.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/qcollectiongenerator/main.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -42,6 +42,7 @@ #include #include #include +#include #include #include @@ -436,8 +437,8 @@ return -1; } - QMap::const_iterator it = config.filesToGenerate().constBegin(); - while (it != config.filesToGenerate().constEnd()) { + const QMap &filesToGenerate = config.filesToGenerate(); + for (auto it = filesToGenerate.cbegin(), end = filesToGenerate.cend(); it != end; ++it) { fputs(qPrintable(QCG::tr("Generating help for %1...\n").arg(it.key())), stdout); QHelpProjectData helpData; if (!helpData.readData(absoluteFileName(basePath, it.key()))) { @@ -450,7 +451,6 @@ fprintf(stderr, "%s\n", qPrintable(helpGenerator.error())); return -1; } - ++it; } fputs(qPrintable(QCG::tr("Creating collection file...\n")), stdout); @@ -470,7 +470,7 @@ return -1; } - foreach (const QString &file, config.filesToRegister()) { + for (const QString &file : config.filesToRegister()) { if (!helpEngine.registerDocumentation(absoluteFileName(basePath, file))) { fprintf(stderr, "%s\n", qPrintable(helpEngine.error())); return -1; @@ -528,12 +528,9 @@ if (config.aboutMenuTexts().count()) { QByteArray ba; QDataStream s(&ba, QIODevice::WriteOnly); - QMap::const_iterator it = config.aboutMenuTexts().constBegin(); - while (it != config.aboutMenuTexts().constEnd()) { - s << it.key(); - s << it.value(); - ++it; - } + const QMap &aboutMenuTexts = config.aboutMenuTexts(); + for (auto it = aboutMenuTexts.cbegin(), end = aboutMenuTexts.cend(); it != end; ++it) + s << it.key() << it.value(); CollectionConfiguration::setAboutMenuTexts(helpEngine, ba); } @@ -549,7 +546,6 @@ if (config.aboutTextFiles().count()) { QByteArray ba; QDataStream s(&ba, QIODevice::WriteOnly); - QMap::const_iterator it = config.aboutTextFiles().constBegin(); QMap imgData; QRegExp srcRegExp(QLatin1String("src=(\"(.+)\"|([^\"\\s]+)).*>")); @@ -557,7 +553,8 @@ QRegExp imgRegExp(QLatin1String("(]+>)")); imgRegExp.setMinimal(true); - while (it != config.aboutTextFiles().constEnd()) { + const QMap &aboutMenuTexts = config.aboutTextFiles(); + for (auto it = aboutMenuTexts.cbegin(), end = aboutMenuTexts.cend(); it != end; ++it) { s << it.key(); QFileInfo fi(absoluteFileName(basePath, it.value())); QFile f(fi.absoluteFilePath()); @@ -589,7 +586,6 @@ } } } - ++it; } CollectionConfiguration::setAboutTexts(helpEngine, ba); if (imgData.count()) { diff -Nru qttools-opensource-src-5.7.1/src/assistant/qcollectiongenerator/qcollectiongenerator.pro qttools-opensource-src-5.9.1/src/assistant/qcollectiongenerator/qcollectiongenerator.pro --- qttools-opensource-src-5.7.1/src/assistant/qcollectiongenerator/qcollectiongenerator.pro 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/qcollectiongenerator/qcollectiongenerator.pro 2017-06-23 12:03:39.000000000 +0000 @@ -5,5 +5,6 @@ ../shared/collectionconfiguration.cpp HEADERS += ../shared/helpgenerator.h \ ../shared/collectionconfiguration.h +QTPLUGIN.platforms = qminimal load(qt_tool) diff -Nru qttools-opensource-src-5.7.1/src/assistant/qhelpconverter/conversionwizard.cpp qttools-opensource-src-5.9.1/src/assistant/qhelpconverter/conversionwizard.cpp --- qttools-opensource-src-5.7.1/src/assistant/qhelpconverter/conversionwizard.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/qhelpconverter/conversionwizard.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -86,15 +86,16 @@ setPage(Finish_Page, m_finishPage); m_finishPage->setMaximumHeight(240); - connect(this, SIGNAL(currentIdChanged(int)), - this, SLOT(pageChanged(int))); + connect(this, &QWizard::currentIdChanged, + this, &ConversionWizard::pageChanged); m_helpWindow = 0; qApp->installEventFilter(this); QAbstractButton *btn = button(QWizard::HelpButton); btn->setCheckable(true); - connect(btn, SIGNAL(toggled(bool)), this, SLOT(showHelp(bool))); + connect(btn, &QAbstractButton::toggled, + this, &ConversionWizard::showHelp); } void ConversionWizard::setAdpFileName(const QString &fileName) @@ -129,12 +130,12 @@ m_files.clear(); QFileInfo fi(field(QLatin1String("adpFileName")).toString()); QDir rootDir = fi.absolutePath(); - foreach (const QString &p, m_pathPage->paths()) { + for (const QString &p : m_pathPage->paths()) { QDir dir(p); QString rel = rootDir.relativeFilePath(dir.absolutePath()); if (!rel.isEmpty()) rel.append(QLatin1Char('/')); - foreach (const QString &f, dir.entryList(m_pathPage->filters())) + for (const QString &f : dir.entryList(m_pathPage->filters())) m_files.append(rel + f); } m_filesPage->setFilesToRemove(getUnreferencedFiles(m_files)); @@ -143,7 +144,7 @@ m_outputPage->setCollectionComponentEnabled( !m_adpReader.properties().isEmpty()); } else if (id == Finish_Page) { - QTimer::singleShot(300, this, SLOT(convert())); + QTimer::singleShot(300, this, &ConversionWizard::convert); } } @@ -193,8 +194,8 @@ QStringList ConversionWizard::getUnreferencedFiles(const QStringList &files) { QStringList lst; - QSet adpFiles = m_adpReader.files(); - foreach (const QString &s, files) { + const QSet &adpFiles = m_adpReader.files(); + for (const QString &s : files) { if (!adpFiles.contains(s)) lst.append(s); } @@ -214,7 +215,7 @@ qhpWriter.setFilterAttributes(m_filterPage->filterAttributes()); qhpWriter.setCustomFilters(m_filterPage->customFilters()); - foreach (const QString &f, m_filesPage->filesToRemove()) + for (const QString &f : m_filesPage->filesToRemove()) m_files.removeAll(f); qhpWriter.setFiles(m_files); @@ -239,8 +240,8 @@ qhcpWriter.setProperties(m_adpReader.properties()); qhcpWriter.setTitlePath(QLatin1String("qthelp://") + field(QLatin1String("namespaceName")).toString() - + QLatin1String("/") - +field(QLatin1String("virtualFolder")).toString()); + + QLatin1Char('/') + + field(QLatin1String("virtualFolder")).toString()); qhcpWriter.writeFile(fi.absolutePath() + QDir::separator() + field(QLatin1String("CollectionFileName")).toString()); } diff -Nru qttools-opensource-src-5.7.1/src/assistant/qhelpconverter/conversionwizard.h qttools-opensource-src-5.9.1/src/assistant/qhelpconverter/conversionwizard.h --- qttools-opensource-src-5.7.1/src/assistant/qhelpconverter/conversionwizard.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/qhelpconverter/conversionwizard.h 2017-06-23 12:03:39.000000000 +0000 @@ -61,9 +61,9 @@ enum Pages {Input_Page, General_Page, Filter_Page, Identifier_Page, Path_Page, Files_Page, Output_Page, Finish_Page}; - void initializePage(int id); + void initializePage(int id) override; QStringList getUnreferencedFiles(const QStringList &files); - bool eventFilter(QObject *obj, QEvent *e); + bool eventFilter(QObject *obj, QEvent *e) override; AdpReader m_adpReader; InputPage *m_inputPage; diff -Nru qttools-opensource-src-5.7.1/src/assistant/qhelpconverter/filespage.cpp qttools-opensource-src-5.9.1/src/assistant/qhelpconverter/filespage.cpp --- qttools-opensource-src-5.7.1/src/assistant/qhelpconverter/filespage.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/qhelpconverter/filespage.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -41,10 +41,10 @@ m_ui.setupUi(this); m_ui.fileListWidget->setSelectionMode(QAbstractItemView::ExtendedSelection); m_ui.fileListWidget->installEventFilter(this); - connect(m_ui.removeButton, SIGNAL(clicked()), - this, SLOT(removeFile())); - connect(m_ui.removeAllButton, SIGNAL(clicked()), - this, SLOT(removeAllFiles())); + connect(m_ui.removeButton, &QAbstractButton::clicked, + this, &FilesPage::removeFile); + connect(m_ui.removeAllButton, &QAbstractButton::clicked, + this, &FilesPage::removeAllFiles); m_ui.fileLabel->setText(tr("

Warning: " "When removing images or stylesheets, be aware that those files " @@ -68,7 +68,7 @@ { int row = m_ui.fileListWidget->currentRow() - m_ui.fileListWidget->selectedItems().count() + 1; - foreach (const QListWidgetItem *item, m_ui.fileListWidget->selectedItems()) { + for (const QListWidgetItem *item : m_ui.fileListWidget->selectedItems()) { m_filesToRemove.append(item->text()); delete item; } diff -Nru qttools-opensource-src-5.7.1/src/assistant/qhelpconverter/filespage.h qttools-opensource-src-5.9.1/src/assistant/qhelpconverter/filespage.h --- qttools-opensource-src-5.7.1/src/assistant/qhelpconverter/filespage.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/qhelpconverter/filespage.h 2017-06-23 12:03:39.000000000 +0000 @@ -48,7 +48,7 @@ void removeAllFiles(); private: - bool eventFilter(QObject *obj, QEvent *event); + bool eventFilter(QObject *obj, QEvent *event) override; Ui::FilesPage m_ui; QStringList m_files; diff -Nru qttools-opensource-src-5.7.1/src/assistant/qhelpconverter/filterpage.cpp qttools-opensource-src-5.9.1/src/assistant/qhelpconverter/filterpage.cpp --- qttools-opensource-src-5.7.1/src/assistant/qhelpconverter/filterpage.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/qhelpconverter/filterpage.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -46,16 +46,16 @@ m_ui.customFilterWidget->headerItem()->setText(1, tr("Filter Attributes")); m_ui.customFilterWidget->setRootIsDecorated(false); m_ui.removeButton->setDisabled(true); - connect(m_ui.addButton, SIGNAL(clicked()), - this, SLOT(addFilter())); - connect(m_ui.removeButton, SIGNAL(clicked()), - this, SLOT(removeFilter())); + connect(m_ui.addButton, &QAbstractButton::clicked, + this, &FilterPage::addFilter); + connect(m_ui.removeButton, &QAbstractButton::clicked, + this, &FilterPage::removeFilter); } bool FilterPage::validatePage() { m_filterAttributes.clear(); - foreach (const QString &f, m_ui.filterLineEdit->text().split(QLatin1Char(','))) { + for (const QString &f : m_ui.filterLineEdit->text().split(QLatin1Char(','))) { if (!f.trimmed().isEmpty()) m_filterAttributes.append(f.trimmed()); } @@ -66,7 +66,7 @@ QString str; CustomFilter customFilter; QTreeWidgetItem *item = 0; - for (int i=0; itopLevelItemCount(); ++i) { + for (int i = 0; i < m_ui.customFilterWidget->topLevelItemCount(); ++i) { item = m_ui.customFilterWidget->topLevelItem(i); str = item->text(0); if (str.isEmpty() || names.contains(str)) { @@ -80,7 +80,7 @@ str.clear(); QStringList lst; - foreach (const QString &s, item->text(1).split(QLatin1Char(','))) { + for (const QString &s : item->text(1).split(QLatin1Char(','))) { const QString st = s.trimmed(); if (!st.isEmpty()) { str += QLatin1Char(',') + st; @@ -115,7 +115,7 @@ QTreeWidgetItem *item = new QTreeWidgetItem(m_ui.customFilterWidget); item->setFlags(Qt::ItemIsEnabled|Qt::ItemIsEditable|Qt::ItemIsSelectable); item->setText(0, tr("unfiltered", "list of available documentation")); - item->setText(1, QLatin1String("")); + item->setText(1, QString()); m_ui.customFilterWidget->editItem(item, 0); m_ui.removeButton->setDisabled(false); } diff -Nru qttools-opensource-src-5.7.1/src/assistant/qhelpconverter/filterpage.h qttools-opensource-src-5.9.1/src/assistant/qhelpconverter/filterpage.h --- qttools-opensource-src-5.7.1/src/assistant/qhelpconverter/filterpage.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/qhelpconverter/filterpage.h 2017-06-23 12:03:39.000000000 +0000 @@ -54,7 +54,7 @@ void removeFilter(); private: - bool validatePage(); + bool validatePage() override; Ui::FilterPage m_ui; QStringList m_filterAttributes; diff -Nru qttools-opensource-src-5.7.1/src/assistant/qhelpconverter/generalpage.cpp qttools-opensource-src-5.9.1/src/assistant/qhelpconverter/generalpage.cpp --- qttools-opensource-src-5.7.1/src/assistant/qhelpconverter/generalpage.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/qhelpconverter/generalpage.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -39,10 +39,10 @@ "folder for the documentation.")); m_ui.setupUi(this); - connect(m_ui.namespaceLineEdit, SIGNAL(textChanged(QString)), - this, SIGNAL(completeChanged())); - connect(m_ui.folderLineEdit, SIGNAL(textChanged(QString)), - this, SIGNAL(completeChanged())); + connect(m_ui.namespaceLineEdit, &QLineEdit::textChanged, + this, &QWizardPage::completeChanged); + connect(m_ui.folderLineEdit, &QLineEdit::textChanged, + this, &QWizardPage::completeChanged); m_ui.namespaceLineEdit->setText(QLatin1String("mycompany.com")); m_ui.folderLineEdit->setText(QLatin1String("product_1.0")); diff -Nru qttools-opensource-src-5.7.1/src/assistant/qhelpconverter/generalpage.h qttools-opensource-src-5.9.1/src/assistant/qhelpconverter/generalpage.h --- qttools-opensource-src-5.7.1/src/assistant/qhelpconverter/generalpage.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/qhelpconverter/generalpage.h 2017-06-23 12:03:39.000000000 +0000 @@ -42,8 +42,8 @@ GeneralPage(QWidget *parent = 0); private: - bool validatePage(); - bool isComplete() const; + bool validatePage() override; + bool isComplete() const override; Ui::GeneralPage m_ui; }; diff -Nru qttools-opensource-src-5.7.1/src/assistant/qhelpconverter/identifierpage.cpp qttools-opensource-src-5.9.1/src/assistant/qhelpconverter/identifierpage.cpp --- qttools-opensource-src-5.7.1/src/assistant/qhelpconverter/identifierpage.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/qhelpconverter/identifierpage.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -39,8 +39,8 @@ m_ui.setupUi(this); - connect(m_ui.identifierCheckBox, SIGNAL(toggled(bool)), - this, SLOT(setupButtons(bool))); + connect(m_ui.identifierCheckBox, &QAbstractButton::toggled, + this, &IdentifierPage::setupButtons); registerField(QLatin1String("createIdentifier"), m_ui.identifierCheckBox); registerField(QLatin1String("globalPrefix"), m_ui.prefixLineEdit); diff -Nru qttools-opensource-src-5.7.1/src/assistant/qhelpconverter/inputpage.cpp qttools-opensource-src-5.9.1/src/assistant/qhelpconverter/inputpage.cpp --- qttools-opensource-src-5.7.1/src/assistant/qhelpconverter/inputpage.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/qhelpconverter/inputpage.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -52,8 +52,8 @@ "collection format.")); m_ui.setupUi(this); - connect(m_ui.browseButton, SIGNAL(clicked()), - this, SLOT(getFileName())); + connect(m_ui.browseButton, &QAbstractButton::clicked, + this, &InputPage::getFileName); registerField(QLatin1String("adpFileName"), m_ui.fileLineEdit); } diff -Nru qttools-opensource-src-5.7.1/src/assistant/qhelpconverter/inputpage.h qttools-opensource-src-5.9.1/src/assistant/qhelpconverter/inputpage.h --- qttools-opensource-src-5.7.1/src/assistant/qhelpconverter/inputpage.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/qhelpconverter/inputpage.h 2017-06-23 12:03:39.000000000 +0000 @@ -47,7 +47,7 @@ void getFileName(); private: - bool validatePage(); + bool validatePage() override; Ui::InputPage m_ui; AdpReader *m_adpReader; diff -Nru qttools-opensource-src-5.7.1/src/assistant/qhelpconverter/outputpage.cpp qttools-opensource-src-5.9.1/src/assistant/qhelpconverter/outputpage.cpp --- qttools-opensource-src-5.7.1/src/assistant/qhelpconverter/outputpage.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/qhelpconverter/outputpage.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -42,10 +42,10 @@ setButtonText(QWizard::NextButton, tr("Convert...")); m_ui.setupUi(this); - connect(m_ui.projectLineEdit, SIGNAL(textChanged(QString)), - this, SIGNAL(completeChanged())); - connect(m_ui.collectionLineEdit, SIGNAL(textChanged(QString)), - this, SIGNAL(completeChanged())); + connect(m_ui.projectLineEdit, &QLineEdit::textChanged, + this, &QWizardPage::completeChanged); + connect(m_ui.collectionLineEdit, &QLineEdit::textChanged, + this, &QWizardPage::completeChanged); registerField(QLatin1String("ProjectFileName"), m_ui.projectLineEdit); diff -Nru qttools-opensource-src-5.7.1/src/assistant/qhelpconverter/outputpage.h qttools-opensource-src-5.9.1/src/assistant/qhelpconverter/outputpage.h --- qttools-opensource-src-5.7.1/src/assistant/qhelpconverter/outputpage.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/qhelpconverter/outputpage.h 2017-06-23 12:03:39.000000000 +0000 @@ -44,8 +44,8 @@ void setCollectionComponentEnabled(bool enabled); private: - bool isComplete() const; - bool validatePage(); + bool isComplete() const override; + bool validatePage() override; bool checkFile(const QString &fileName, const QString &title); diff -Nru qttools-opensource-src-5.7.1/src/assistant/qhelpconverter/pathpage.cpp qttools-opensource-src-5.9.1/src/assistant/qhelpconverter/pathpage.cpp --- qttools-opensource-src-5.7.1/src/assistant/qhelpconverter/pathpage.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/qhelpconverter/pathpage.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -41,10 +41,10 @@ "matched by the file filter will be included.")); m_ui.setupUi(this); - connect(m_ui.addButton, SIGNAL(clicked()), - this, SLOT(addPath())); - connect(m_ui.removeButton, SIGNAL(clicked()), - this, SLOT(removePath())); + connect(m_ui.addButton, &QAbstractButton::clicked, + this, &PathPage::addPath); + connect(m_ui.removeButton, &QAbstractButton::clicked, + this, &PathPage::removePath); m_ui.filterLineEdit->setText(QLatin1String("*.html, *.htm, *.png, *.jpg, *.css")); @@ -65,7 +65,7 @@ QStringList PathPage::paths() const { QStringList lst; - for (int i = 0; icount(); ++i) + for (int i = 0; i < m_ui.pathListWidget->count(); ++i) lst.append(m_ui.pathListWidget->item(i)->text()); return lst; } @@ -73,7 +73,7 @@ QStringList PathPage::filters() const { QStringList lst; - foreach (const QString &s, m_ui.filterLineEdit->text().split(QLatin1Char(','))) { + for (const QString &s : m_ui.filterLineEdit->text().split(QLatin1Char(','))) { lst.append(s.trimmed()); } return lst; diff -Nru qttools-opensource-src-5.7.1/src/assistant/qhelpconverter/qhpwriter.cpp qttools-opensource-src-5.9.1/src/assistant/qhelpconverter/qhpwriter.cpp --- qttools-opensource-src-5.7.1/src/assistant/qhelpconverter/qhpwriter.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/qhelpconverter/qhpwriter.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -93,10 +93,10 @@ if (!m_customFilters.count()) return; - foreach (const CustomFilter &f, m_customFilters) { + for (const CustomFilter &f : qAsConst(m_customFilters)) { writeStartElement(QLatin1String("customFilter")); writeAttribute(QLatin1String("name"), f.name); - foreach (const QString &a, f.filterAttributes) + for (const QString &a : f.filterAttributes) writeTextElement(QLatin1String("filterAttribute"), a); writeEndElement(); } @@ -105,7 +105,7 @@ void QhpWriter::writeFilterSection() { writeStartElement(QLatin1String("filterSection")); - foreach (const QString &a, m_filterAttributes) + for (const QString &a : qAsConst(m_filterAttributes)) writeTextElement(QLatin1String("filterAttribute"), a); writeToc(); @@ -116,13 +116,13 @@ void QhpWriter::writeToc() { - QList lst = m_adpReader->contents(); - if (lst.isEmpty()) + const QList &list = m_adpReader->contents(); + if (list.isEmpty()) return; int depth = -1; writeStartElement(QLatin1String("toc")); - foreach (const ContentItem &i, lst) { + for (const ContentItem &i : list) { while (depth-- >= i.depth) writeEndElement(); writeStartElement(QLatin1String("section")); @@ -136,18 +136,18 @@ void QhpWriter::writeKeywords() { - QList lst = m_adpReader->keywords(); - if (lst.isEmpty()) + const QList &list = m_adpReader->keywords(); + if (list.isEmpty()) return; writeStartElement(QLatin1String("keywords")); - foreach (const KeywordItem &i, lst) { + for (const KeywordItem &i : list) { writeEmptyElement(QLatin1String("keyword")); writeAttribute(QLatin1String("name"), i.keyword); writeAttribute(QLatin1String("ref"), i.reference); if (m_prefix == FilePrefix) { QString str = i.reference.mid( - i.reference.lastIndexOf(QLatin1Char('/'))+1); + i.reference.lastIndexOf(QLatin1Char('/')) + 1); str = str.left(str.lastIndexOf(QLatin1Char('.'))); writeAttribute(QLatin1String("id"), str + QLatin1String("::") + i.keyword); } else if (m_prefix == GlobalPrefix) { @@ -163,7 +163,7 @@ return; writeStartElement(QLatin1String("files")); - foreach (const QString &f, m_files) + for (const QString &f : qAsConst(m_files)) writeTextElement(QLatin1String("file"), f); writeEndElement(); } diff -Nru qttools-opensource-src-5.7.1/src/assistant/shared/helpgenerator.cpp qttools-opensource-src-5.9.1/src/assistant/shared/helpgenerator.cpp --- qttools-opensource-src-5.7.1/src/assistant/shared/helpgenerator.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/assistant/shared/helpgenerator.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -48,11 +48,11 @@ { generator = new QHelpGenerator(this); if (!silent) { - connect(generator, SIGNAL(statusChanged(QString)), - this, SLOT(printStatus(QString))); + connect(generator, &QHelpGenerator::statusChanged, + this, &HelpGenerator::printStatus); } - connect(generator, SIGNAL(warning(QString)), - this, SLOT(printWarning(QString))); + connect(generator, &QHelpGenerator::warning, + this, &HelpGenerator::printWarning); } bool HelpGenerator::generate(QHelpDataInterface *helpData, diff -Nru qttools-opensource-src-5.7.1/src/designer/data/generate_header.xsl qttools-opensource-src-5.9.1/src/designer/data/generate_header.xsl --- qttools-opensource-src-5.7.1/src/designer/data/generate_header.xsl 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/designer/data/generate_header.xsl 2017-06-23 12:03:39.000000000 +0000 @@ -238,7 +238,9 @@ class QDESIGNER_UILIB_EXPORT - {&endl; + {&endl; Q_DISABLE_COPY( + + )&endl; public:&endl; @@ -314,16 +316,6 @@ - &endl; - - - (const - - &other);&endl; - void operator = (const - - &other);&endl; - };&endl;&endl; @@ -333,32 +325,38 @@ /**************************************************************************** ** -** Copyright (C) 2015 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ ** ** This file is part of the tools applications of the Qt Toolkit. ** -** $QT_BEGIN_LICENSE:LGPL21$ +** $QT_BEGIN_LICENSE:LGPL$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. ** ** GNU Lesser General Public License Usage ** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 or version 3 as published by the Free -** Software Foundation and appearing in the file LICENSE.LGPLv21 and -** LICENSE.LGPLv3 included in the packaging of this file. Please review the -** following information to ensure the GNU Lesser General Public License -** requirements will be met: https://www.gnu.org/licenses/lgpl.html and -** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** As a special exception, The Qt Company gives you certain additional -** rights. These rights are described in The Qt Company LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. ** ** $QT_END_LICENSE$ ** diff -Nru qttools-opensource-src-5.7.1/src/designer/data/generate_impl.xsl qttools-opensource-src-5.9.1/src/designer/data/generate_impl.xsl --- qttools-opensource-src-5.7.1/src/designer/data/generate_impl.xsl 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/designer/data/generate_impl.xsl 2017-06-23 12:03:39.000000000 +0000 @@ -912,32 +912,38 @@ /**************************************************************************** ** -** Copyright (C) 2015 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ ** ** This file is part of the tools applications of the Qt Toolkit. ** -** $QT_BEGIN_LICENSE:LGPL21$ +** $QT_BEGIN_LICENSE:LGPL$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. ** ** GNU Lesser General Public License Usage ** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 or version 3 as published by the Free -** Software Foundation and appearing in the file LICENSE.LGPLv21 and -** LICENSE.LGPLv3 included in the packaging of this file. Please review the -** following information to ensure the GNU Lesser General Public License -** requirements will be met: https://www.gnu.org/licenses/lgpl.html and -** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** As a special exception, The Qt Company gives you certain additional -** rights. These rights are described in The Qt Company LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. ** ** $QT_END_LICENSE$ ** diff -Nru qttools-opensource-src-5.7.1/src/designer/src/components/buddyeditor/buddyeditor.cpp qttools-opensource-src-5.9.1/src/designer/src/components/buddyeditor/buddyeditor.cpp --- qttools-opensource-src-5.7.1/src/designer/src/components/buddyeditor/buddyeditor.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/designer/src/components/buddyeditor/buddyeditor.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -46,6 +46,8 @@ #include #include +#include + QT_BEGIN_NAMESPACE static const char *buddyPropertyC = "buddy"; @@ -143,32 +145,23 @@ m_updating = true; QList newList; const LabelList label_list = background()->findChildren(); - foreach (QLabel *label, label_list) { + for (QLabel *label : label_list) { const QString buddy_name = buddy(label, m_formWindow->core()); if (buddy_name.isEmpty()) continue; - const QList targets = background()->findChildren(buddy_name); + const QWidgetList targets = background()->findChildren(buddy_name); if (targets.isEmpty()) continue; - QWidget *target = 0; - - QListIterator it(targets); - while (it.hasNext()) { - QWidget *widget = it.next(); - if (widget && !widget->isHidden()) { - target = widget; - break; - } - } - - if (target == 0) + const auto wit = std::find_if(targets.cbegin(), targets.cend(), + [] (const QWidget *w) { return !w->isHidden(); }); + if (wit == targets.cend()) continue; Connection *con = new Connection(this); con->setEndPoint(EndPoint::Source, label, widgetRect(label).center()); - con->setEndPoint(EndPoint::Target, target, widgetRect(target).center()); + con->setEndPoint(EndPoint::Target, *wit, widgetRect(*wit).center()); newList.append(con); } @@ -179,29 +172,21 @@ Connection *con = connection(i); QObject *source = con->object(EndPoint::Source); QObject *target = con->object(EndPoint::Target); - bool found = false; - QListIterator it(newList); - while (it.hasNext()) { - Connection *newConn = it.next(); - if (newConn->object(EndPoint::Source) == source && newConn->object(EndPoint::Target) == target) { - found = true; - break; - } - } + const bool found = + std::any_of(newList.cbegin(), newList.cend(), + [source, target] (const Connection *nc) + { return nc->object(EndPoint::Source) == source && nc->object(EndPoint::Target) == target; }); if (found == false) toRemove.append(con); } if (!toRemove.isEmpty()) { DeleteConnectionsCommand command(this, toRemove); command.redo(); - foreach (Connection *con, toRemove) + for (Connection *con : qAsConst(toRemove)) delete takeConnection(con); } - QListIterator it(newList); - while (it.hasNext()) { - Connection *newConn = it.next(); - + for (Connection *newConn : qAsConst(newList)) { bool found = false; const int c = connectionCount(); for (int i = 0; i < c; i++) { @@ -228,7 +213,7 @@ ConnectionEdit::setBackground(background); const LabelList label_list = background->findChildren(); - foreach (QLabel *label, label_list) { + for (QLabel *label : label_list) { const QString buddy_name = buddy(label, m_formWindow->core()); if (buddy_name.isEmpty()) continue; @@ -290,9 +275,9 @@ child_list.prepend(widget); ConnectionSet remove_set; - foreach (QWidget *w, child_list) { + for (QWidget *w : qAsConst(child_list)) { const ConnectionList &cl = connectionList(); - foreach (Connection *con, cl) { + for (Connection *con : cl) { if (con->widget(EndPoint::Source) == w || con->widget(EndPoint::Target) == w) remove_set.insert(con, con); } @@ -300,7 +285,7 @@ if (!remove_set.isEmpty()) { undoStack()->beginMacro(tr("Remove buddies")); - foreach (Connection *con, remove_set) { + for (Connection *con : qAsConst(remove_set)) { setSelected(con, false); con->update(); QWidget *source = con->widget(EndPoint::Source); @@ -324,7 +309,7 @@ return; undoStack()->beginMacro(tr("Remove %n buddies", 0, selectedConnections.size())); - foreach (Connection *con, selectedConnections) { + for (Connection *con : selectedConnections) { setSelected(con, false); con->update(); QWidget *source = con->widget(EndPoint::Source); @@ -349,7 +334,7 @@ // Find already used buddies QWidgetList usedBuddies; const ConnectionList &beforeConnections = connectionList(); - foreach (const Connection *c, beforeConnections) + for (const Connection *c : beforeConnections) usedBuddies.push_back(c->widget(EndPoint::Target)); // Find potential new buddies, keep lists in sync QWidgetList buddies; @@ -380,7 +365,7 @@ undoStack()->endMacro(); // Now select all new ones const ConnectionList &connections = connectionList(); - foreach (Connection *con, connections) + for (Connection *con : connections) setSelected(con, buddies.contains(con->widget(EndPoint::Target))); } diff -Nru qttools-opensource-src-5.7.1/src/designer/src/components/formeditor/formeditor_optionspage.cpp qttools-opensource-src-5.9.1/src/designer/src/components/formeditor/formeditor_optionspage.cpp --- qttools-opensource-src-5.7.1/src/designer/src/components/formeditor/formeditor_optionspage.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/designer/src/components/formeditor/formeditor_optionspage.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -35,6 +35,7 @@ #include "previewconfigurationwidget_p.h" #include "shared_settings_p.h" #include "zoomwidget_p.h" +#include // SDK #include @@ -128,10 +129,28 @@ m_defaultGridConf->setTitle(QCoreApplication::translate("FormEditorOptionsPage", "Default Grid")); m_defaultGridConf->setGrid(settings.defaultGrid()); + const QString namingTitle = + QCoreApplication::translate("FormEditorOptionsPage", "Object Naming Convention"); + QGroupBox *namingGroupBox = new QGroupBox(namingTitle); + const QString namingToolTip = + QCoreApplication::translate("FormEditorOptionsPage", + "Naming convention used for generating action object names from their text"); + namingGroupBox->setToolTip(namingToolTip); + QHBoxLayout *namingHLayout = new QHBoxLayout(namingGroupBox); + m_namingComboBox = new QComboBox; + m_namingComboBox->setToolTip(namingToolTip); + QStringList items; // matching ActionEditor::NamingMode + items << QCoreApplication::translate("FormEditorOptionsPage", "Camel Case") + << QCoreApplication::translate("FormEditorOptionsPage", "Underscore"); + m_namingComboBox->addItems(items); + m_namingComboBox->setCurrentIndex(settings.objectNamingMode()); + namingHLayout->addWidget(m_namingComboBox.data()); + QVBoxLayout *optionsVLayout = new QVBoxLayout(); optionsVLayout->addWidget(m_defaultGridConf); optionsVLayout->addWidget(m_previewConf); optionsVLayout->addWidget(m_zoomSettingsWidget); + optionsVLayout->addWidget(namingGroupBox); optionsVLayout->addStretch(1); // Outer layout to give it horizontal stretch @@ -167,6 +186,13 @@ if (m_zoomSettingsWidget) m_zoomSettingsWidget->toSettings(settings); + + if (m_namingComboBox) { + const ObjectNamingMode namingMode + = static_cast(m_namingComboBox->currentIndex()); + settings.setObjectNamingMode(namingMode); + ActionEditor::setObjectNamingMode(namingMode); + } } void FormEditorOptionsPage::finish() diff -Nru qttools-opensource-src-5.7.1/src/designer/src/components/formeditor/formeditor_optionspage.h qttools-opensource-src-5.9.1/src/designer/src/components/formeditor/formeditor_optionspage.h --- qttools-opensource-src-5.7.1/src/designer/src/components/formeditor/formeditor_optionspage.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/designer/src/components/formeditor/formeditor_optionspage.h 2017-06-23 12:03:39.000000000 +0000 @@ -34,6 +34,7 @@ QT_BEGIN_NAMESPACE +class QComboBox; class QDesignerFormEditorInterface; namespace qdesigner_internal { @@ -57,6 +58,7 @@ QPointer m_previewConf; QPointer m_defaultGridConf; QPointer m_zoomSettingsWidget; + QPointer m_namingComboBox; }; } // namespace qdesigner_internal diff -Nru qttools-opensource-src-5.7.1/src/designer/src/components/formeditor/formeditor.pri qttools-opensource-src-5.9.1/src/designer/src/components/formeditor/formeditor.pri --- qttools-opensource-src-5.7.1/src/designer/src/components/formeditor/formeditor.pri 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/designer/src/components/formeditor/formeditor.pri 2017-06-23 12:03:39.000000000 +0000 @@ -8,7 +8,6 @@ $$PWD/templateoptionspage.ui HEADERS += $$PWD/qdesigner_resource.h \ - $$PWD/qdesignerundostack.h \ $$PWD/formwindow.h \ $$PWD/formwindow_widgetstack.h \ $$PWD/formwindow_dnditem.h \ @@ -38,7 +37,6 @@ $$PWD/templateoptionspage.h SOURCES += $$PWD/qdesigner_resource.cpp \ - $$PWD/qdesignerundostack.cpp \ $$PWD/formwindow.cpp \ $$PWD/formwindow_widgetstack.cpp \ $$PWD/formwindow_dnditem.cpp \ diff -Nru qttools-opensource-src-5.7.1/src/designer/src/components/formeditor/formeditor.qrc qttools-opensource-src-5.9.1/src/designer/src/components/formeditor/formeditor.qrc --- qttools-opensource-src-5.7.1/src/designer/src/components/formeditor/formeditor.qrc 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/designer/src/components/formeditor/formeditor.qrc 2017-06-23 12:03:39.000000000 +0000 @@ -61,7 +61,10 @@ images/mac/forward.png images/mac/down.png images/mac/up.png - images/qtlogo.png + images/qtlogo16x16.png + images/qtlogo24x24.png + images/qtlogo32x32.png + images/qtlogo64x64.png images/qt3logo.png images/resetproperty.png images/cleartext.png diff -Nru qttools-opensource-src-5.7.1/src/designer/src/components/formeditor/formwindow.cpp qttools-opensource-src-5.9.1/src/designer/src/components/formeditor/formwindow.cpp --- qttools-opensource-src-5.7.1/src/designer/src/components/formeditor/formwindow.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/designer/src/components/formeditor/formwindow.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -320,8 +320,8 @@ core()->formWindowManager()->removeFormWindow(this); core()->metaDataBase()->remove(this); - QWidgetList l = widgets(); - foreach (QWidget *w, l) + const QWidgetList &l = widgets(); + for (QWidget *w : l) core()->metaDataBase()->remove(w); m_widgetStack = 0; @@ -329,6 +329,10 @@ if (resourceSet()) core()->resourceModel()->removeResourceSet(resourceSet()); delete m_selection; + + if (FormWindowManager *manager = qobject_cast (core()->formWindowManager())) + manager->undoGroup()->removeStack(&m_undoStack); + m_undoStack.disconnect(); } QDesignerFormEditorInterface *FormWindow::core() const @@ -373,7 +377,7 @@ #ifndef QT_NO_CURSOR start->setCursor(c); const QWidgetList widgets = start->findChildren(); - foreach (QWidget *widget, widgets) { + for (QWidget *widget : widgets) { if (!qobject_cast(widget)) { widget->setCursor(c); } @@ -384,7 +388,7 @@ void FormWindow::init() { if (FormWindowManager *manager = qobject_cast (core()->formWindowManager())) { - manager->undoGroup()->addStack(m_undoStack.qundoStack()); + manager->undoGroup()->addStack(&m_undoStack); } m_blockSelectionChanged = false; @@ -417,9 +421,11 @@ m_mainContainer = 0; m_currentWidget = 0; - connect(&m_undoStack, &QDesignerUndoStack::changed, + connect(&m_undoStack, &QUndoStack::indexChanged, this, &QDesignerFormWindowInterface::changed); - connect(&m_undoStack, &QDesignerUndoStack::changed, + connect(&m_undoStack, &QUndoStack::cleanChanged, + this, &FormWindow::slotCleanChanged); + connect(this, &QDesignerFormWindowInterface::changed, this, &FormWindow::checkSelection); core()->metaDataBase()->add(this); @@ -684,7 +690,7 @@ QSet widget_set; - foreach (QWidget *child, sel) { // Move parent layout or container? + for (QWidget *child : qAsConst(sel)) { // Move parent layout or container? QWidget *current = child; bool done = false; @@ -720,7 +726,7 @@ const QPoint globalPos = mapToGlobal(m_startPos); const QDesignerDnDItemInterface::DropType dropType = (mouseFlags(e->modifiers()) & CopyDragModifier) ? QDesignerDnDItemInterface::CopyDrop : QDesignerDnDItemInterface::MoveDrop; - foreach (QWidget *widget, sel) { + for (QWidget *widget : qAsConst(sel)) { item_list.append(new FormWindowDnDItem(dropType, this, widget, globalPos)); if (dropType == QDesignerDnDItemInterface::MoveDrop) { m_selection->hide(widget); @@ -732,7 +738,7 @@ if (!sel.empty()) // reshow selection? if (QDesignerMimeData::execDrag(item_list, core()->topLevel()) == Qt::IgnoreAction && dropType == QDesignerDnDItemInterface::MoveDrop) - foreach (QWidget *widget, sel) + for (QWidget *widget : qAsConst(sel)) m_selection->show(widget); m_startPos = QPoint(); @@ -1288,9 +1294,7 @@ depth = widgetDepth(container); } - QListIterator it(m_widgets); - while (it.hasNext()) { - QWidget *wit = it.next(); + for (QWidget *wit : qAsConst(m_widgets)) { if (qobject_cast(wit) || qobject_cast(wit)) continue; if (!wit->isVisibleTo(this)) @@ -1334,10 +1338,8 @@ { bool selectionChanged = false; const QWidgetList l = mainContainer()->findChildren(); - QListIterator it(l); const QRect selRect(mapToGlobal(m_currRect.topLeft()), m_currRect.size()); - while (it.hasNext()) { - QWidget *w = it.next(); + for (QWidget *w : l) { if (w->isVisibleTo(this) && isManaged(w)) { const QPoint p = w->mapToGlobal(QPoint(0,0)); const QRect r(p, w->size()); @@ -1510,7 +1512,7 @@ void ArrowKeyPropertyCommand::init(QWidgetList &l, const ArrowKeyOperation &op) { QObjectList ol; - foreach(QWidget *w, l) + for (QWidget *w : qAsConst(l)) ol.push_back(w); SetPropertyCommand::init(ol, QStringLiteral("geometry"), QVariant::fromValue(op)); @@ -1585,7 +1587,7 @@ void FormWindow::selectAll() { bool selectionChanged = false; - foreach (QWidget *widget, m_widgets) { + for (QWidget *widget : qAsConst(m_widgets)) { if (widget->isVisibleTo(this) && trySelectWidget(widget, true)) selectionChanged = true; } @@ -1861,7 +1863,7 @@ if (widgetCount) { positionPastedWidgetsAtMousePosition(this, m_contextMenuPosition, pasteContainer, clipboard.m_widgets); - foreach (QWidget *w, clipboard.m_widgets) { + for (QWidget *w : clipboard.m_widgets) { InsertWidgetCommand *cmd = new InsertWidgetCommand(this); cmd->init(w); m_undoStack.push(cmd); @@ -1870,7 +1872,7 @@ } if (actionCount) - foreach (QAction *a, clipboard.m_actions) { + for (QAction *a : clipboard.m_actions) { ensureUniqueObjectName(a); AddActionCommand *cmd = new AddActionCommand(this); cmd->init(a); @@ -2028,7 +2030,7 @@ return; beginCommand(tr("Raise widgets")); - foreach (QWidget *widget, widgets) { + for (QWidget *widget : qAsConst(widgets)) { RaiseWidgetCommand *cmd = new RaiseWidgetCommand(this); cmd->init(widget); m_undoStack.push(cmd); @@ -2045,7 +2047,7 @@ return; beginCommand(tr("Lower widgets")); - foreach (QWidget *widget, widgets) { + for (QWidget *widget : qAsConst(widgets)) { LowerWidgetCommand *cmd = new LowerWidgetCommand(this); cmd->init(widget); m_undoStack.push(cmd); @@ -2209,7 +2211,7 @@ const QWidgetList l = widgets(widget); - foreach (QWidget *child, l) { + for (QWidget *child : l) { if (isManaged(child) && !LayoutInfo::isWidgetLaidout(core(), child) && child->isVisibleTo(const_cast(this))) return true; } @@ -2224,6 +2226,12 @@ selectSingleWidget(w); } +void FormWindow::slotCleanChanged(bool clean) +{ + if (!clean) + emit changed(); +} + static inline QString objectNameOf(const QWidget *w) { if (const QLayoutWidget *lw = qobject_cast(w)) { @@ -2439,12 +2447,15 @@ bool FormWindow::isDirty() const { - return m_undoStack.isDirty(); + return !m_undoStack.isClean(); } void FormWindow::setDirty(bool dirty) { - m_undoStack.setDirty(dirty); + if (dirty) + m_undoStack.resetClean(); + else + m_undoStack.setClean(); } QWidget *FormWindow::containerAt(const QPoint &pos) @@ -2613,7 +2624,8 @@ { m_checkSelectionTimer->stop(); - foreach (QWidget *widget, selectedWidgets()) { + const QWidgetList &sel = selectedWidgets(); + for (QWidget *widget : sel) { updateSelection(widget); if (LayoutInfo::layoutType(core(), widget) != LayoutInfo::NoLayout) @@ -2852,7 +2864,7 @@ QPoint offset; QDesignerDnDItemInterface *current = 0; QDesignerFormWindowCursorInterface *c = cursor(); - foreach (QDesignerDnDItemInterface *item, item_list) { + for (QDesignerDnDItemInterface *item : qAsConst(item_list)) { QWidget *w = item->widget(); if (!current) current = item; @@ -2867,7 +2879,7 @@ offset = designerGrid().snapPoint(topLeft) - topLeft; } - foreach (QDesignerDnDItemInterface *item, item_list) { + for (QDesignerDnDItemInterface *item : qAsConst(item_list)) { DomUI *dom_ui = item->domUi(); QRect geometry = item->decoration()->geometry(); Q_ASSERT(dom_ui != 0); @@ -2979,7 +2991,7 @@ QUndoStack *FormWindow::commandHistory() const { - return const_cast(m_undoStack).qundoStack(); + return &const_cast(m_undoStack); } } // namespace diff -Nru qttools-opensource-src-5.7.1/src/designer/src/components/formeditor/formwindow.h qttools-opensource-src-5.9.1/src/designer/src/components/formeditor/formwindow.h --- qttools-opensource-src-5.7.1/src/designer/src/components/formeditor/formwindow.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/designer/src/components/formeditor/formwindow.h 2017-06-23 12:03:39.000000000 +0000 @@ -30,10 +30,10 @@ #define FORMWINDOW_H #include "formeditor_global.h" -#include "qdesignerundostack.h" #include // Qt +#include #include #include #include @@ -230,6 +230,7 @@ void checkSelection(); void checkSelectionNow(); void slotSelectWidget(QAction *); + void slotCleanChanged(bool); private: enum MouseState { @@ -325,7 +326,7 @@ QPoint m_startPos; - QDesignerUndoStack m_undoStack; + QUndoStack m_undoStack; QString m_fileName; diff -Nru qttools-opensource-src-5.7.1/src/designer/src/components/formeditor/formwindowmanager.cpp qttools-opensource-src-5.9.1/src/designer/src/components/formeditor/formwindowmanager.cpp --- qttools-opensource-src-5.7.1/src/designer/src/components/formeditor/formwindowmanager.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/designer/src/components/formeditor/formwindowmanager.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -228,13 +228,14 @@ return true; } } - // don't break... + Q_FALLTHROUGH(); // don't break... + // Embedded Design: Drop on different form: Make sure the right form // window/device is active before having the widget created by the factory case QEvent::Drop: if (activeFormWindow() != fw) setActiveFormWindow(fw); - // don't break... + Q_FALLTHROUGH(); // don't break... default: { if (fw->handleEvent(widget, managedWidget, e)) { return true; @@ -590,15 +591,13 @@ if (debugFWM) { qDebug() << "slotActionBreakLayoutActivated: " << layouts.size(); - foreach (QWidget *w, layouts) { + for (const QWidget *w : layouts) qDebug() << w; - } } m_activeFormWindow->beginCommand(tr("Break Layout")); - foreach (QWidget *layout, layouts) { + for (QWidget *layout : layouts) m_activeFormWindow->breakLayout(layout); - } m_activeFormWindow->endCommand(); } @@ -632,7 +631,7 @@ } // Always count the main container as unlaid-out - foreach (QWidget *widget, selectedWidgets) { + for (QWidget *widget : qAsConst(selectedWidgets)) { bool unlaidout = LayoutInfo::layoutType(core(), widget->parentWidget()) == LayoutInfo::NoLayout; bool isMainContainer = m_activeFormWindow->isMainContainer(widget); diff -Nru qttools-opensource-src-5.7.1/src/designer/src/components/formeditor/formwindowsettings.cpp qttools-opensource-src-5.9.1/src/designer/src/components/formeditor/formwindowsettings.cpp --- qttools-opensource-src-5.7.1/src/designer/src/components/formeditor/formwindowsettings.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/designer/src/components/formeditor/formwindowsettings.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -43,18 +43,16 @@ // Data structure containing form dialog data providing comparison struct FormWindowData { - FormWindowData(); - bool equals(const FormWindowData&) const; void fromFormWindow(FormWindowBase* fw); void applyToFormWindow(FormWindowBase* fw) const; - bool layoutDefaultEnabled; - int defaultMargin; - int defaultSpacing; + bool layoutDefaultEnabled{false}; + int defaultMargin{0}; + int defaultSpacing{0}; - bool layoutFunctionsEnabled; + bool layoutFunctionsEnabled{false}; QString marginFunction; QString spacingFunction; @@ -64,7 +62,7 @@ QStringList includeHints; - bool hasFormGrid; + bool hasFormGrid{false}; Grid grid; }; @@ -81,15 +79,6 @@ return str; } -FormWindowData::FormWindowData() : - layoutDefaultEnabled(false), - defaultMargin(0), - defaultSpacing(0), - layoutFunctionsEnabled(false), - hasFormGrid(false) -{ -} - bool FormWindowData::equals(const FormWindowData &rhs) const { return layoutDefaultEnabled == rhs.layoutDefaultEnabled && @@ -247,7 +236,7 @@ if (data.includeHints.empty()) { m_ui->includeHintsTextEdit->clear(); } else { - m_ui->includeHintsTextEdit->setText(data.includeHints.join(QStringLiteral("\n"))); + m_ui->includeHintsTextEdit->setText(data.includeHints.join(QLatin1Char('\n'))); } m_ui->gridPanel->setChecked(data.hasFormGrid); diff -Nru qttools-opensource-src-5.7.1/src/designer/src/components/formeditor/formwindow_widgetstack.cpp qttools-opensource-src-5.9.1/src/designer/src/components/formeditor/formwindow_widgetstack.cpp --- qttools-opensource-src-5.7.1/src/designer/src/components/formeditor/formwindow_widgetstack.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/designer/src/components/formeditor/formwindow_widgetstack.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -113,7 +113,7 @@ return; } - foreach (QDesignerFormWindowToolInterface *t, m_tools) { + for (QDesignerFormWindowToolInterface *t : qAsConst(m_tools)) { if (action == t->action()) { tool = t; break; Binary files /tmp/tmpVyXDno/3zqOqCMQMn/qttools-opensource-src-5.7.1/src/designer/src/components/formeditor/images/qtlogo16x16.png and /tmp/tmpVyXDno/YZGoeGyi7H/qttools-opensource-src-5.9.1/src/designer/src/components/formeditor/images/qtlogo16x16.png differ Binary files /tmp/tmpVyXDno/3zqOqCMQMn/qttools-opensource-src-5.7.1/src/designer/src/components/formeditor/images/qtlogo24x24.png and /tmp/tmpVyXDno/YZGoeGyi7H/qttools-opensource-src-5.9.1/src/designer/src/components/formeditor/images/qtlogo24x24.png differ Binary files /tmp/tmpVyXDno/3zqOqCMQMn/qttools-opensource-src-5.7.1/src/designer/src/components/formeditor/images/qtlogo32x32.png and /tmp/tmpVyXDno/YZGoeGyi7H/qttools-opensource-src-5.9.1/src/designer/src/components/formeditor/images/qtlogo32x32.png differ Binary files /tmp/tmpVyXDno/3zqOqCMQMn/qttools-opensource-src-5.7.1/src/designer/src/components/formeditor/images/qtlogo64x64.png and /tmp/tmpVyXDno/YZGoeGyi7H/qttools-opensource-src-5.9.1/src/designer/src/components/formeditor/images/qtlogo64x64.png differ Binary files /tmp/tmpVyXDno/3zqOqCMQMn/qttools-opensource-src-5.7.1/src/designer/src/components/formeditor/images/qtlogo.png and /tmp/tmpVyXDno/YZGoeGyi7H/qttools-opensource-src-5.9.1/src/designer/src/components/formeditor/images/qtlogo.png differ diff -Nru qttools-opensource-src-5.7.1/src/designer/src/components/formeditor/itemview_propertysheet.cpp qttools-opensource-src-5.9.1/src/designer/src/components/formeditor/itemview_propertysheet.cpp --- qttools-opensource-src-5.7.1/src/designer/src/components/formeditor/itemview_propertysheet.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/designer/src/components/formeditor/itemview_propertysheet.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -39,12 +39,12 @@ namespace qdesigner_internal { struct Property { - Property() : m_sheet(0),m_id(-1) {} + Property() = default; Property(QDesignerPropertySheetExtension *sheet, int id) : m_sheet(sheet), m_id(id) {} - QDesignerPropertySheetExtension *m_sheet; - int m_id; + QDesignerPropertySheetExtension *m_sheet{nullptr}; + int m_id{-1}; }; typedef QMap FakePropertyMap; @@ -168,7 +168,8 @@ QDesignerPropertySheetExtension *headerSheet = d->m_propertySheet.value(hv); Q_ASSERT(headerSheet); const QString headerGroupS = QLatin1String(headerGroup); - foreach (const QString &realPropertyName, d->realPropertyNames()) { + const QStringList &realPropertyNames = d->realPropertyNames(); + for (const QString &realPropertyName : realPropertyNames) { const int headerIndex = headerSheet->indexOf(realPropertyName); Q_ASSERT(headerIndex != -1); const QVariant defaultValue = realPropertyName == QLatin1String(visibleProperty) ? diff -Nru qttools-opensource-src-5.7.1/src/designer/src/components/formeditor/layout_propertysheet.cpp qttools-opensource-src-5.9.1/src/designer/src/components/formeditor/layout_propertysheet.cpp --- qttools-opensource-src-5.7.1/src/designer/src/components/formeditor/layout_propertysheet.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/designer/src/components/formeditor/layout_propertysheet.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -374,6 +374,7 @@ return grid->verticalSpacing(); if (const QFormLayout *form = qobject_cast(m_layout)) return form->verticalSpacing(); + break; case LayoutPropertyBoxStretch: if (const QBoxLayout *box = qobject_cast(m_layout)) return QVariant(QByteArray(QFormBuilderExtra::boxLayoutStretch(box).toUtf8())); diff -Nru qttools-opensource-src-5.7.1/src/designer/src/components/formeditor/qdesigner_resource.cpp qttools-opensource-src-5.9.1/src/designer/src/components/formeditor/qdesigner_resource.cpp --- qttools-opensource-src-5.7.1/src/designer/src/components/formeditor/qdesigner_resource.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/designer/src/components/formeditor/qdesigner_resource.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -100,6 +100,9 @@ #include #include +#include +#include + Q_DECLARE_METATYPE(QWidgetList) QT_BEGIN_NAMESPACE @@ -270,9 +273,8 @@ DomResourceIcon *ri = new DomResourceIcon; if (!theme.isEmpty()) ri->setAttributeTheme(theme); - QMapIterator, PropertySheetPixmapValue> itPix(pixmaps); - while (itPix.hasNext()) { - const QIcon::Mode mode = itPix.next().key().first; + for (auto itPix = pixmaps.cbegin(), end = pixmaps.cend(); itPix != end; ++itPix) { + const QIcon::Mode mode = itPix.key().first; const QIcon::State state = itPix.key().second; DomResourcePixmap *rp = new DomResourcePixmap; const PropertySheetPixmapValue pix = itPix.value(); @@ -519,7 +521,8 @@ const QString local = QStringLiteral("local"); const QString global = QStringLiteral("global"); QList ui_includes; - foreach (QString includeHint, m_formWindow->includeHints()) { + const QStringList &includeHints = m_formWindow->includeHints(); + for (QString includeHint : includeHints) { if (includeHint.isEmpty()) continue; DomInclude *incl = new DomInclude; @@ -653,7 +656,8 @@ if (DomIncludes *includes = ui->elementIncludes()) { const QString global = QStringLiteral("global"); QStringList includeHints; - foreach (DomInclude *incl, includes->elementInclude()) { + const QList &elementInclude = includes->elementInclude(); + for (DomInclude *incl : elementInclude) { QString text = incl->text(); if (text.isEmpty()) @@ -708,11 +712,12 @@ const QList properties = ui->elementWidget()->elementProperty(); if (!properties.empty()) { const QString geometry = QStringLiteral("geometry"); - foreach (const DomProperty *p, properties) + for (const DomProperty *p : properties) { if (p->attributeName() == geometry) { hasExplicitGeometry = true; break; } + } } if (hasExplicitGeometry) { // Geometry was specified explicitly: Verify that smartMinSize is respected @@ -785,7 +790,7 @@ menuBar->interactive(false); } - foreach (DomActionRef *ui_action_ref, actionRefs) { + for (DomActionRef *ui_action_ref : actionRefs) { const QString name = ui_action_ref->attributeName(); if (name == QStringLiteral("separator")) { QAction *sep = new QAction(w); @@ -1126,8 +1131,8 @@ w->setAttributeName(widget->objectName()); w->setAttributeClass(widgetInfo->name()); - QList prop_list = w->elementProperty(); - foreach (DomProperty *prop, prop_list) { + const QList &prop_list = w->elementProperty(); + for (DomProperty *prop : prop_list) { if (prop->attributeName() == QStringLiteral("geometry")) { if (DomRect *rect = prop->elementRect()) { rect->setElementX(widget->x()); @@ -1220,7 +1225,8 @@ Q_ASSERT(item); QStringList tabStops; - foreach (QWidget *widget, item->tabOrder()) { + const QWidgetList &tabOrder = item->tabOrder(); + for (QWidget *widget : tabOrder) { if (m_formWindow->mainContainer()->isAncestorOf(widget)) tabStops.append(widget->objectName()); } @@ -1240,7 +1246,8 @@ return; QList tabOrder; - foreach (const QString &widgetName, tabStops->elementTabStop()) { + const QStringList &elementTabStop = tabStops->elementTabStop(); + for (const QString &widgetName : elementTabStop) { if (QWidget *w = widget->findChild(widgetName)) { tabOrder.append(w); } @@ -1684,9 +1691,10 @@ // actions if (!selection.m_actions.empty()) { QList domActions; - foreach(QAction* action, selection.m_actions) + for (QAction* action : qAsConst(selection.m_actions)) { if (DomAction *domAction = createDom(action)) domActions += domAction; + } if (!domActions.empty()) { ui_widget-> setElementAction(domActions); hasItems = true; @@ -1724,7 +1732,7 @@ const QList domWidgets = topLevel->elementWidget(); if (!domWidgets.empty()) { const QPoint offset = m_formWindow->grid(); - foreach (DomWidget* domWidget, domWidgets) { + for (DomWidget* domWidget : domWidgets) { if (QWidget *w = create(domWidget, widgetParent)) { w->move(w->pos() + offset); // ### change the init properties of w @@ -1733,10 +1741,10 @@ } } const QList domActions = topLevel->elementAction(); - if (!domActions.empty()) - foreach (DomAction *domAction, domActions) - if (QAction *a = create(domAction, actionParent)) - rc.m_actions .append(a); + for (DomAction *domAction : domActions) { + if (QAction *a = create(domAction, actionParent)) + rc.m_actions .append(a); + } m_isMainWidget = saved; @@ -1804,7 +1812,9 @@ OrderedDBIndexDomCustomWidgetMap orderedMap; const QString global = QStringLiteral("global"); - foreach (QDesignerWidgetDataBaseItemInterface *item, m_usedCustomWidgets.keys()) { + + for (auto it = m_usedCustomWidgets.cbegin(), end = m_usedCustomWidgets.cend(); it != end; ++it) { + QDesignerWidgetDataBaseItemInterface *item = it.key(); const QString name = item->name(); DomCustomWidget *custom_widget = new DomCustomWidget; @@ -2001,13 +2011,10 @@ { QStringList newPaths = paths; #ifdef OLD_RESOURCE_FORMAT - QStringList loadedPaths = m_resourceBuilder->loadedQrcFiles(); - QStringListIterator it(loadedPaths); - while (it.hasNext()) { - const QString path = it.next(); - if (!newPaths.contains(path)) - newPaths << path; - } + const QStringList loadedPaths = m_resourceBuilder->loadedQrcFiles(); + std::remove_copy_if(loadedPaths.cbegin(), loadedPaths.cend(), + std::back_inserter(newPaths), + [&newPaths] (const QString &path) { return newPaths.contains(path); }); #endif return newPaths; } @@ -2018,7 +2025,7 @@ QStringList paths; if (resources != 0) { const QList dom_include = resources->elementInclude(); - foreach (DomResource *res, dom_include) { + for (DomResource *res : dom_include) { QString path = QDir::cleanPath(m_formWindow->absoluteDir().absoluteFilePath(res->attributeLocation())); while (!QFile::exists(path)) { QWidget *dialogParent = m_formWindow->core()->topLevel(); @@ -2052,14 +2059,10 @@ QtResourceSet *resourceSet = m_formWindow->resourceSet(); if (resourceSet) { - QStringList oldPaths = resourceSet->activeResourceFilePaths(); - QStringList newPaths = oldPaths; - QStringListIterator it(paths); - while (it.hasNext()) { - const QString path = it.next(); - if (!newPaths.contains(path)) - newPaths << path; - } + QStringList newPaths = resourceSet->activeResourceFilePaths(); + std::remove_copy_if(paths.cbegin(), paths.cend(), + std::back_inserter(newPaths), + [&newPaths] (const QString &path) { return newPaths.contains(path); }); resourceSet->activateResourceFilePaths(newPaths); } else { resourceSet = m_formWindow->core()->resourceModel()->addResourceSet(paths); @@ -2091,7 +2094,7 @@ QList dom_include; if (resourceSet) { const QStringList activePaths = resourceSet->activeResourceFilePaths(); - foreach (const QString &path, activePaths) { + for (const QString &path : activePaths) { if (qrcPaths.contains(path)) { DomResource *dom_res = new DomResource; QString conv_path = path; diff -Nru qttools-opensource-src-5.7.1/src/designer/src/components/formeditor/qdesignerundostack.cpp qttools-opensource-src-5.9.1/src/designer/src/components/formeditor/qdesignerundostack.cpp --- qttools-opensource-src-5.7.1/src/designer/src/components/formeditor/qdesignerundostack.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/designer/src/components/formeditor/qdesignerundostack.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,105 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the Qt Designer of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:GPL-EXCEPT$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3 as published by the Free Software -** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qdesignerundostack.h" - -#include -#include - -QT_BEGIN_NAMESPACE - -namespace qdesigner_internal { - -QDesignerUndoStack::QDesignerUndoStack(QObject *parent) : - QObject(parent), - m_undoStack(new QUndoStack), - m_fakeDirty(false) -{ - connect(m_undoStack, &QUndoStack::indexChanged, this, &QDesignerUndoStack::changed); -} - -QDesignerUndoStack::~QDesignerUndoStack() -{ // QUndoStack is managed by the QUndoGroup -} - -void QDesignerUndoStack::clear() -{ - m_fakeDirty = false; - m_undoStack->clear(); -} - -void QDesignerUndoStack::push(QUndoCommand * cmd) -{ - m_undoStack->push(cmd); -} - -void QDesignerUndoStack::beginMacro(const QString &text) -{ - m_undoStack->beginMacro(text); -} - -void QDesignerUndoStack::endMacro() -{ - m_undoStack->endMacro(); -} - -int QDesignerUndoStack::index() const -{ - return m_undoStack->index(); -} - -const QUndoStack *QDesignerUndoStack::qundoStack() const -{ - return m_undoStack; -} -QUndoStack *QDesignerUndoStack::qundoStack() -{ - return m_undoStack; -} - -bool QDesignerUndoStack::isDirty() const -{ - return m_fakeDirty || !m_undoStack->isClean(); -} - -void QDesignerUndoStack::setDirty(bool v) -{ - if (isDirty() == v) - return; - if (v) { - m_fakeDirty = true; - emit changed(); - } else { - m_fakeDirty = false; - m_undoStack->setClean(); - } -} - -} // namespace qdesigner_internal - -QT_END_NAMESPACE diff -Nru qttools-opensource-src-5.7.1/src/designer/src/components/formeditor/qdesignerundostack.h qttools-opensource-src-5.9.1/src/designer/src/components/formeditor/qdesignerundostack.h --- qttools-opensource-src-5.7.1/src/designer/src/components/formeditor/qdesignerundostack.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/designer/src/components/formeditor/qdesignerundostack.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,78 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the Qt Designer of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:GPL-EXCEPT$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3 as published by the Free Software -** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QDESIGNERUNDOSTACK_H -#define QDESIGNERUNDOSTACK_H - -#include - -QT_BEGIN_NAMESPACE -class QUndoStack; -class QUndoCommand; - -namespace qdesigner_internal { - -/* QDesignerUndoStack: A QUndoStack extended by a way of setting it to - * "dirty" indepently of commands (by modifications without commands - * such as resizing). Accomplished via bool m_fakeDirty flag. The - * lifecycle of the QUndoStack is managed by the QUndoGroup. */ -class QDesignerUndoStack : public QObject -{ - Q_DISABLE_COPY(QDesignerUndoStack) - Q_OBJECT -public: - explicit QDesignerUndoStack(QObject *parent = 0); - virtual ~QDesignerUndoStack(); - - void clear(); - void push(QUndoCommand * cmd); - void beginMacro(const QString &text); - void endMacro(); - int index() const; - - const QUndoStack *qundoStack() const; - QUndoStack *qundoStack(); - - bool isDirty() const; - -signals: - void changed(); - -public slots: - void setDirty(bool); - -private: - QUndoStack *m_undoStack; - bool m_fakeDirty; -}; - -} // namespace qdesigner_internal - -QT_END_NAMESPACE - -#endif // QDESIGNERUNDOSTACK_H diff -Nru qttools-opensource-src-5.7.1/src/designer/src/components/formeditor/qmainwindow_container.cpp qttools-opensource-src-5.9.1/src/designer/src/components/formeditor/qmainwindow_container.cpp --- qttools-opensource-src-5.7.1/src/designer/src/components/formeditor/qmainwindow_container.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/designer/src/components/formeditor/qmainwindow_container.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -93,10 +93,9 @@ candidates.append(mw->layout()); candidates += mw->layout()->findChildren(); } - foreach (QLayout *l, candidates) { - if (l->indexOf(me) != -1) { + for (QLayout *l : qAsConst(candidates)) { + if (l->indexOf(me) != -1) return mw->dockWidgetArea(me); - } } } return Qt::LeftDockWidgetArea; diff -Nru qttools-opensource-src-5.7.1/src/designer/src/components/formeditor/tool_widgeteditor.cpp qttools-opensource-src-5.9.1/src/designer/src/components/formeditor/tool_widgeteditor.cpp --- qttools-opensource-src-5.7.1/src/designer/src/components/formeditor/tool_widgeteditor.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/designer/src/components/formeditor/tool_widgeteditor.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -226,7 +226,7 @@ const QList item_list = mimeData->items(); - foreach (QDesignerDnDItemInterface *item, item_list) { + for (QDesignerDnDItemInterface *item : item_list) { if (item->decoration() && item->decoration()->property("_q_dockDrag").toBool()) m_specialDockDrag = true; @@ -335,8 +335,8 @@ if (m_formWindow == 0) return; - QList sel = m_formWindow->selectedWidgets(); - foreach (QWidget *w, sel) + const QList &sel = m_formWindow->selectedWidgets(); + for (QWidget *w : sel) m_formWindow->raiseSelection(w); } diff -Nru qttools-opensource-src-5.7.1/src/designer/src/components/objectinspector/objectinspector.cpp qttools-opensource-src-5.9.1/src/designer/src/components/objectinspector/objectinspector.cpp --- qttools-opensource-src-5.7.1/src/designer/src/components/objectinspector/objectinspector.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/designer/src/components/objectinspector/objectinspector.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -664,7 +664,7 @@ return; // sort objects - foreach (const QModelIndex &index, currentSelectedIndexes) + for (const QModelIndex &index : currentSelectedIndexes) if (QObject *object = m_model->objectAt(index)) switch (selectionType(m_formWindow, object)) { case NoSelection: diff -Nru qttools-opensource-src-5.7.1/src/designer/src/components/objectinspector/objectinspectormodel.cpp qttools-opensource-src-5.9.1/src/designer/src/components/objectinspector/objectinspectormodel.cpp --- qttools-opensource-src-5.7.1/src/designer/src/components/objectinspector/objectinspectormodel.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/designer/src/components/objectinspector/objectinspectormodel.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -466,7 +466,7 @@ if (!changedObjects.contains(o)) { changedObjects.insert(o); const QModelIndexList indexes = m_objectIndexMultiMap.values(o); - foreach (const QModelIndex &index, indexes) + for (const QModelIndex &index : indexes) entry.setItemsDisplayData(rowAt(index), m_icons, changedMask); } } diff -Nru qttools-opensource-src-5.7.1/src/designer/src/components/propertyeditor/designerpropertymanager.cpp qttools-opensource-src-5.9.1/src/designer/src/components/propertyeditor/designerpropertymanager.cpp --- qttools-opensource-src-5.7.1/src/designer/src/components/propertyeditor/designerpropertymanager.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/designer/src/components/propertyeditor/designerpropertymanager.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -1244,9 +1244,8 @@ return; PropertyToPropertyListMap::iterator pfit = m_propertyToFlags.find(property); - QListIterator itProp(pfit.value()); - while (itProp.hasNext()) { - if (QtProperty *prop = itProp.next()) { + for (QtProperty *prop : qAsConst(pfit.value())) { + if (prop) { delete prop; m_flagToProperty.remove(prop); } @@ -1255,9 +1254,7 @@ QList values; - QListIterator > itFlag(flags); - while (itFlag.hasNext()) { - const QPair pair = itFlag.next(); + for (const QPair &pair : flags) { const QString flagName = pair.first; QtProperty *prop = addProperty(QVariant::Bool); prop->setPropertyName(flagName); @@ -1382,9 +1379,8 @@ qdesigner_internal::PropertySheetIconValue icon = m_iconValues.value(property); if (icon.paths().isEmpty()) { QMap, QtProperty *> subIconProperties = m_propertyToIconSubProperties.value(property); - QMapIterator, QtProperty *> itSub(subIconProperties); - while (itSub.hasNext()) { - QPair pair = itSub.next().key(); + for (auto itSub = subIconProperties.cbegin(), end = subIconProperties.cend(); itSub != end; ++itSub) { + QPair pair = itSub.key(); QtProperty *subProp = itSub.value(); setAttribute(subProp, QLatin1String(defaultResourceAttributeC), defaultIcon.pixmap(16, 16, pair.first, pair.second)); @@ -1547,7 +1543,7 @@ if (vType == QVariant::StringList || vType == designerStringListTypeId()) { QVariant v = value(property); const QStringList list = v.type() == QVariant::StringList ? v.toStringList() : qvariant_cast(v).value(); - return list.join(QStringLiteral("; ")); + return list.join(QLatin1String("; ")); } if (vType == designerKeySequenceTypeId()) { return qvariant_cast(value(property)).value().toString(QKeySequence::NativeText); @@ -1565,9 +1561,8 @@ void DesignerPropertyManager::reloadResourceProperties() { DesignerIconCache *iconCache = 0; - QMapIterator itIcon(m_iconValues); - while (itIcon.hasNext()) { - QtProperty *property = itIcon.next().key(); + for (auto itIcon = m_iconValues.cbegin(), end = m_iconValues.cend(); itIcon!= end; ++itIcon) { + QtProperty *property = itIcon.key(); PropertySheetIconValue icon = itIcon.value(); QIcon defaultIcon = m_defaultIcons.value(property); @@ -1584,9 +1579,8 @@ QMap, PropertySheetPixmapValue> iconPaths = icon.paths(); QMap, QtProperty *> subProperties = m_propertyToIconSubProperties.value(property); - QMapIterator, QtProperty *> itSub(subProperties); - while (itSub.hasNext()) { - const QPair pair = itSub.next().key(); + for (auto itSub = subProperties.cbegin(), end = subProperties.cend(); itSub != end; ++itSub) { + const QPair pair = itSub.key(); QtVariantProperty *subProperty = variantProperty(itSub.value()); subProperty->setAttribute(QLatin1String(defaultResourceAttributeC), defaultIcon.pixmap(16, 16, pair.first, pair.second)); @@ -1595,9 +1589,8 @@ emit propertyChanged(property); emit QtVariantPropertyManager::valueChanged(property, QVariant::fromValue(itIcon.value())); } - QMapIterator itPix(m_pixmapValues); - while (itPix.hasNext()) { - QtProperty *property = itPix.next().key(); + for (auto itPix = m_pixmapValues.cbegin(), end = m_pixmapValues.cend(); itPix != end; ++itPix) { + QtProperty *property = itPix.key(); emit propertyChanged(property); emit QtVariantPropertyManager::valueChanged(property, QVariant::fromValue(itPix.value())); } @@ -1832,9 +1825,8 @@ QMap, PropertySheetPixmapValue> iconPaths = icon.paths(); QMap, QtProperty *> subProperties = m_propertyToIconSubProperties.value(property); - QMapIterator, QtProperty *> itSub(subProperties); - while (itSub.hasNext()) { - const QPair pair = itSub.next().key(); + for (auto itSub = subProperties.cbegin(), end = subProperties.cend(); itSub != end; ++itSub) { + const QPair pair = itSub.key(); QtVariantProperty *subProperty = variantProperty(itSub.value()); bool hasPath = iconPaths.contains(pair); subProperty->setModified(hasPath); @@ -2080,9 +2072,8 @@ { m_resetMap.remove(property); - QListIterator itProp(m_propertyToFlags[property]); - while (itProp.hasNext()) { - QtProperty *prop = itProp.next(); + const auto propList = m_propertyToFlags.value(property); + for (QtProperty *prop : propList) { if (prop) { delete prop; m_flagToProperty.remove(prop); @@ -2126,9 +2117,8 @@ m_defaultPixmaps.remove(property); QMap, QtProperty *> iconSubProperties = m_propertyToIconSubProperties.value(property); - QMapIterator, QtProperty *> itIcon(iconSubProperties); - while (itIcon.hasNext()) { - QtProperty *subIcon = itIcon.next().value(); + for (auto itIcon = iconSubProperties.cbegin(), end = iconSubProperties.cend(); itIcon != end; ++itIcon) { + QtProperty *subIcon = itIcon.value(); delete subIcon; m_iconSubPropertyToState.remove(subIcon); m_iconSubPropertyToProperty.remove(subIcon); @@ -2201,16 +2191,10 @@ DesignerPixmapCache *cache = 0; if (fwb) cache = fwb->pixmapCache(); - QMapIterator itPixmapEditor(m_editorToPixmapProperty); - while (itPixmapEditor.hasNext()) { - PixmapEditor *pe = itPixmapEditor.next().key(); - pe->setPixmapCache(cache); - } - QMapIterator itIconEditor(m_editorToIconProperty); - while (itIconEditor.hasNext()) { - PixmapEditor *pe = itIconEditor.next().key(); - pe->setPixmapCache(cache); - } + for (auto it = m_editorToPixmapProperty.cbegin(), end = m_editorToPixmapProperty.cend(); it != end; ++it) + it.key()->setPixmapCache(cache); + for (auto it = m_editorToIconProperty.cbegin(), end = m_editorToIconProperty.cend(); it != end; ++it) + it.key()->setPixmapCache(cache); } void DesignerEditorFactory::connectPropertyManager(QtVariantPropertyManager *manager) @@ -2287,12 +2271,9 @@ defaultPixmap = qvariant_cast(manager->attributeValue(property, QLatin1String(defaultResourceAttributeC))).pixmap(16, 16); else if (m_fwb) defaultPixmap = m_fwb->iconCache()->icon(qvariant_cast(manager->value(property))).pixmap(16, 16); - QList editors = m_iconPropertyToEditors.value(property); - QListIterator it(editors); - while (it.hasNext()) { - PixmapEditor *editor = it.next(); + const QList editors = m_iconPropertyToEditors.value(property); + for (PixmapEditor *editor : editors) editor->setDefaultPixmap(defaultPixmap); - } } } @@ -2526,15 +2507,16 @@ return false; if (!editorToProperty) return false; - QMapIterator it(*editorToProperty); - while (it.hasNext()) { - Editor editor = it.next().key(); + for (auto e2pIt = editorToProperty->begin(), end = editorToProperty->end(); e2pIt != end; ++e2pIt) { + Editor editor = e2pIt.key(); if (editor == object) { - QtProperty *prop = it.value(); - (*propertyToEditors)[prop].removeAll(editor); - if ((*propertyToEditors)[prop].count() == 0) - propertyToEditors->remove(prop); - editorToProperty->remove(editor); + const auto p2eIt = propertyToEditors->find(e2pIt.value()); + if (p2eIt != propertyToEditors->end()) { + p2eIt.value().removeAll(editor); + if (p2eIt.value().isEmpty()) + propertyToEditors->erase(p2eIt); + } + editorToProperty->erase(e2pIt); return true; } } @@ -2573,9 +2555,8 @@ { if (!editor) return false; - QMapIterator it(editorToProperty); - while (it.hasNext()) { - if (it.next().key() == editor) { + for (auto it = editorToProperty.cbegin(), end = editorToProperty.cend(); it != end; ++it) { + if (it.key() == editor) { QtProperty *prop = it.value(); QtVariantPropertyManager *manager = factory->propertyManager(prop); *changingPropertyValue = true; @@ -2719,10 +2700,8 @@ ResetDecorator::~ResetDecorator() { - QList editors = m_resetWidgetToProperty.keys(); - QListIterator it(editors); - while (it.hasNext()) - delete it.next(); + const QList editors = m_resetWidgetToProperty.keys(); + qDeleteAll(editors); } void ResetDecorator::connectPropertyManager(QtAbstractPropertyManager *manager) diff -Nru qttools-opensource-src-5.7.1/src/designer/src/components/propertyeditor/designerpropertymanager.h qttools-opensource-src-5.9.1/src/designer/src/components/propertyeditor/designerpropertymanager.h --- qttools-opensource-src-5.7.1/src/designer/src/components/propertyeditor/designerpropertymanager.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/designer/src/components/propertyeditor/designerpropertymanager.h 2017-06-23 12:03:39.000000000 +0000 @@ -171,8 +171,7 @@ int bitCount(int mask) const; struct FlagData { - FlagData() : val(0) {} - uint val; + uint val{0}; DesignerFlagList flags; QList values; }; diff -Nru qttools-opensource-src-5.7.1/src/designer/src/components/propertyeditor/paletteeditor.cpp qttools-opensource-src-5.9.1/src/designer/src/components/propertyeditor/paletteeditor.cpp --- qttools-opensource-src-5.7.1/src/designer/src/components/propertyeditor/paletteeditor.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/designer/src/components/propertyeditor/paletteeditor.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -86,7 +86,7 @@ { m_editPalette = palette; const uint mask = palette.resolve(); - for (int i = 0; i < (int)QPalette::NColorRoles; i++) { + for (int i = 0; i < static_cast(QPalette::NColorRoles); ++i) { if (!(mask & (1 << i))) { m_editPalette.setBrush(QPalette::Active, static_cast(i), m_parentPalette.brush(QPalette::Active, static_cast(i))); @@ -205,7 +205,7 @@ PaletteEditor dlg(core, parent); QPalette parentPalette(parentPal); uint mask = init.resolve(); - for (int i = 0; i < (int)QPalette::NColorRoles; i++) { + for (int i = 0; i < static_cast(QPalette::NColorRoles); ++i) { if (!(mask & (1 << i))) { parentPalette.setBrush(QPalette::Active, static_cast(i), init.brush(QPalette::Active, static_cast(i))); diff -Nru qttools-opensource-src-5.7.1/src/designer/src/components/propertyeditor/propertyeditor.cpp qttools-opensource-src-5.9.1/src/designer/src/components/propertyeditor/propertyeditor.cpp --- qttools-opensource-src-5.7.1/src/designer/src/components/propertyeditor/propertyeditor.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/designer/src/components/propertyeditor/propertyeditor.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -70,9 +70,7 @@ #include static const char *SettingsGroupC = "PropertyEditor"; -#if QT_VERSION >= 0x040500 static const char *ViewKeyC = "View"; -#endif static const char *ColorKeyC = "Colored"; static const char *SortedKeyC = "Sorted"; static const char *ExpansionKeyC = "ExpandedItems"; @@ -293,11 +291,9 @@ configureMenu->addAction(m_sortingAction); configureMenu->addAction(m_coloringAction); -#if QT_VERSION >= 0x04FF00 configureMenu->addSeparator(); configureMenu->addAction(m_treeAction); configureMenu->addAction(m_buttonAction); -#endif // Assemble toolbar QToolBar *toolBar = new QToolBar; toolBar->addWidget(m_filterWidget); @@ -353,9 +349,7 @@ // retrieve initial settings QDesignerSettingsInterface *settings = m_core->settingsManager(); settings->beginGroup(QLatin1String(SettingsGroupC)); -#if QT_VERSION >= 0x040500 const SettingsView view = settings->value(QLatin1String(ViewKeyC), TreeView).toInt() == TreeView ? TreeView : ButtonView; -#endif // Coloring not available unless treeview and not sorted m_sorting = settings->value(QLatin1String(SortedKeyC), false).toBool(); m_coloring = settings->value(QLatin1String(ColorKeyC), true).toBool(); @@ -366,7 +360,6 @@ m_sortingAction->setChecked(m_sorting); m_coloringAction->setChecked(m_coloring); m_treeBrowser->setSplitterPosition(splitterPosition); -#if QT_VERSION >= 0x040500 switch (view) { case TreeView: m_currentBrowser = m_treeBrowser; @@ -379,7 +372,6 @@ m_buttonAction->setChecked(true); break; } -#endif // Restore expansionState from QVariant map if (!expansionState.empty()) { const QVariantMap::const_iterator cend = expansionState.constEnd(); @@ -399,9 +391,7 @@ { QDesignerSettingsInterface *settings = m_core->settingsManager(); settings->beginGroup(QLatin1String(SettingsGroupC)); -#if QT_VERSION >= 0x040500 settings->setValue(QLatin1String(ViewKeyC), QVariant(m_treeAction->isChecked() ? TreeView : ButtonView)); -#endif settings->setValue(QLatin1String(ColorKeyC), QVariant(m_coloring)); settings->setValue(QLatin1String(SortedKeyC), QVariant(m_sorting)); // Save last expansionState as QVariant map @@ -455,9 +445,7 @@ void PropertyEditor::storePropertiesExpansionState(const QList &items) { const QChar bar = QLatin1Char('|'); - QListIterator itProperty(items); - while (itProperty.hasNext()) { - QtBrowserItem *propertyItem = itProperty.next(); + for (QtBrowserItem *propertyItem : items) { if (!propertyItem->children().empty()) { QtProperty *property = propertyItem->property(); const QString propertyName = property->propertyName(); @@ -478,9 +466,7 @@ if (m_sorting) { storePropertiesExpansionState(items); } else { - QListIterator itGroup(items); - while (itGroup.hasNext()) { - QtBrowserItem *item = itGroup.next(); + for (QtBrowserItem *item : items) { const QString groupName = item->property()->propertyName(); QList propertyItems = item->children(); if (!propertyItems.empty()) @@ -494,19 +480,16 @@ void PropertyEditor::collapseAll() { - QList items = m_currentBrowser->topLevelItems(); - QListIterator itGroup(items); - while (itGroup.hasNext()) - setExpanded(itGroup.next(), false); + const QList items = m_currentBrowser->topLevelItems(); + for (QtBrowserItem *group : items) + setExpanded(group, false); } void PropertyEditor::applyPropertiesExpansionState(const QList &items) { const QChar bar = QLatin1Char('|'); - QListIterator itProperty(items); - while (itProperty.hasNext()) { + for (QtBrowserItem *propertyItem : items) { const QMap::const_iterator excend = m_expansionState.constEnd(); - QtBrowserItem *propertyItem = itProperty.next(); QtProperty *property = propertyItem->property(); const QString propertyName = property->propertyName(); const QMap::const_iterator itGroup = m_propertyToGroup.constFind(property); @@ -529,10 +512,8 @@ if (m_sorting) { applyPropertiesExpansionState(items); } else { - QListIterator itTopLevel(items); const QMap::const_iterator excend = m_expansionState.constEnd(); - while (itTopLevel.hasNext()) { - QtBrowserItem *item = itTopLevel.next(); + for (QtBrowserItem *item : items) { const QString groupName = item->property()->propertyName(); const QMap::const_iterator git = m_expansionState.constFind(groupName); if (git != excend) @@ -549,9 +530,7 @@ { int showCount = 0; const bool matchAll = m_filterPattern.isEmpty(); - QListIterator itProperty(items); - while (itProperty.hasNext()) { - QtBrowserItem *propertyItem = itProperty.next(); + for (QtBrowserItem *propertyItem : items) { QtProperty *property = propertyItem->property(); const QString propertyName = property->propertyName(); const bool showProperty = matchAll || propertyName.contains(m_filterPattern, Qt::CaseInsensitive); @@ -568,11 +547,8 @@ if (m_sorting) { applyPropertiesFilter(items); } else { - QListIterator itTopLevel(items); - while (itTopLevel.hasNext()) { - QtBrowserItem *item = itTopLevel.next(); + for (QtBrowserItem *item : items) setItemVisible(item, applyPropertiesFilter(item->children())); - } } } @@ -631,15 +607,10 @@ void PropertyEditor::fillView() { if (m_sorting) { - QMapIterator itProperty(m_nameToProperty); - while (itProperty.hasNext()) { - QtVariantProperty *property = itProperty.next().value(); - m_currentBrowser->addProperty(property); - } + for (auto itProperty = m_nameToProperty.cbegin(), end = m_nameToProperty.cend(); itProperty != end; ++itProperty) + m_currentBrowser->addProperty(itProperty.value()); } else { - QListIterator itGroup(m_groups); - while (itGroup.hasNext()) { - QtProperty *group = itGroup.next(); + for (QtProperty *group : qAsConst(m_groups)) { QtBrowserItem *item = m_currentBrowser->addProperty(group); if (m_currentBrowser == m_treeBrowser) m_treeBrowser->setBackgroundColor(item, propertyColor(group)); @@ -703,12 +674,9 @@ void PropertyEditor::updateColors() { if (m_treeBrowser && m_currentBrowser == m_treeBrowser) { - QList items = m_treeBrowser->topLevelItems(); - QListIterator itItem(items); - while (itItem.hasNext()) { - QtBrowserItem *item = itItem.next(); + const QList items = m_treeBrowser->topLevelItems(); + for (QtBrowserItem *item : items) m_treeBrowser->setBackgroundColor(item, propertyColor(item->property())); - } } } @@ -984,10 +952,7 @@ } } - QMapIterator itRemove(toRemove); - while (itRemove.hasNext()) { - itRemove.next(); - + for (auto itRemove = toRemove.cbegin(), end = toRemove.cend(); itRemove != end; ++itRemove) { QtVariantProperty *property = itRemove.value(); m_nameToProperty.remove(itRemove.key()); m_propertyToGroup.remove(property); @@ -1031,19 +996,13 @@ newProperty = true; if (type == DesignerPropertyManager::enumTypeId()) { const PropertySheetEnumValue e = qvariant_cast(value); - QStringList names; - QStringListIterator it(e.metaEnum.keys()); - while (it.hasNext()) - names.append(it.next()); m_updatingBrowser = true; - property->setAttribute(m_strings.m_enumNamesAttribute, names); + property->setAttribute(m_strings.m_enumNamesAttribute, e.metaEnum.keys()); m_updatingBrowser = false; } else if (type == DesignerPropertyManager::designerFlagTypeId()) { const PropertySheetFlagValue f = qvariant_cast(value); QList > flags; - QStringListIterator it(f.metaFlags.keys()); - while (it.hasNext()) { - const QString name = it.next(); + for (const QString &name : f.metaFlags.keys()) { const uint val = f.metaFlags.keyToValue(name); flags.append(qMakePair(name, val)); } @@ -1139,8 +1098,8 @@ property->setModified(m_propertySheet->isChanged(i)); if (propertyName == QStringLiteral("geometry") && type == QVariant::Rect) { - QList subProperties = property->subProperties(); - foreach (QtProperty *subProperty, subProperties) { + const QList &subProperties = property->subProperties(); + for (QtProperty *subProperty : subProperties) { const QString subPropertyName = subProperty->propertyName(); if (subPropertyName == QStringLiteral("X") || subPropertyName == QStringLiteral("Y")) subProperty->setEnabled(!isMainContainer); @@ -1152,9 +1111,8 @@ } } QMap groups = m_nameToGroup; - QMapIterator itGroup(groups); - while (itGroup.hasNext()) { - QtVariantProperty *groupProperty = itGroup.next().value(); + for (auto itGroup = groups.cbegin(), end = groups.cend(); itGroup != end; ++itGroup) { + QtVariantProperty *groupProperty = itGroup.value(); if (groupProperty->subProperties().empty()) { if (groupProperty == m_dynamicGroup) m_dynamicGroup = 0; diff -Nru qttools-opensource-src-5.7.1/src/designer/src/components/signalsloteditor/signalsloteditor.cpp qttools-opensource-src-5.9.1/src/designer/src/components/signalsloteditor/signalsloteditor.cpp --- qttools-opensource-src-5.7.1/src/designer/src/components/signalsloteditor/signalsloteditor.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/designer/src/components/signalsloteditor/signalsloteditor.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -374,7 +374,7 @@ setBackground(parent); clear(); const QList list = connections->elementConnection(); - foreach (const DomConnection *dom_con, list) { + for (const DomConnection *dom_con : list) { QObject *source = objectByName(parent, dom_con->elementSender()); if (source == 0) { qDebug("SignalSlotEditor::fromUi(): no source widget called \"%s\"", @@ -391,8 +391,8 @@ QPoint sp = QPoint(20, 20), tp = QPoint(20, 20); const DomConnectionHints *dom_hints = dom_con->elementHints(); if (dom_hints != 0) { - QList list = dom_hints->elementHint(); - foreach (DomConnectionHint *hint, list) { + const QList &hints = dom_hints->elementHint(); + for (DomConnectionHint *hint : hints) { QString attr_type = hint->attributeType(); QPoint p = QPoint(hint->elementX(), hint->elementY()); if (attr_type == QStringLiteral("sourcelabel")) diff -Nru qttools-opensource-src-5.7.1/src/designer/src/components/signalsloteditor/signalsloteditorwindow.cpp qttools-opensource-src-5.9.1/src/designer/src/components/signalsloteditor/signalsloteditorwindow.cpp --- qttools-opensource-src-5.7.1/src/designer/src/components/signalsloteditor/signalsloteditorwindow.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/designer/src/components/signalsloteditor/signalsloteditorwindow.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -624,12 +624,12 @@ switch (index.column()) { case 0: case 2: { // object names - QStringList obj_name_list = objectNameList(m_form); + const QStringList &obj_name_list = objectNameList(m_form); QMap markedNameList; markedNameList.insert(tr(""), false); inline_editor->addTextList(markedNameList); markedNameList.clear(); - foreach (const QString &name, obj_name_list) + for (const QString &name : obj_name_list) markedNameList.insert(name, false); inline_editor->addTextList(markedNameList); } @@ -643,12 +643,12 @@ const qdesigner_internal::ClassesMemberFunctions class_list = qdesigner_internal::reverseClassesMemberFunctions(obj_name, type, peer, m_form); inline_editor->addText(type == qdesigner_internal::SignalMember ? tr("") : tr("")); - foreach (const qdesigner_internal::ClassMemberFunctions &classInfo, class_list) { + for (const qdesigner_internal::ClassMemberFunctions &classInfo : class_list) { if (classInfo.m_className.isEmpty() || classInfo.m_memberList.isEmpty()) continue; // Mark deprecated members by passing bool=true. QMap markedMemberList; - foreach (const QString &member, classInfo.m_memberList) + for (const QString &member : qAsConst(classInfo.m_memberList)) markedMemberList.insert(member, false); inline_editor->addTitle(classInfo.m_className); inline_editor->addTextList(markedMemberList); diff -Nru qttools-opensource-src-5.7.1/src/designer/src/components/signalsloteditor/signalslot_utils.cpp qttools-opensource-src-5.9.1/src/designer/src/components/signalsloteditor/signalslot_utils.cpp --- qttools-opensource-src-5.7.1/src/designer/src/components/signalsloteditor/signalslot_utils.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/designer/src/components/signalsloteditor/signalslot_utils.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -94,7 +94,7 @@ const QStringList wdbFakeMethods = member_type == qdesigner_internal::SlotMember ? wdbItem->fakeSlots() : wdbItem->fakeSignals(); if (!wdbFakeMethods.empty()) - foreach (const QString &fakeMethod, wdbFakeMethods) + for (const QString &fakeMethod : wdbFakeMethods) if (predicate(fakeMethod)) { *it = ClassNameSignaturePair(className, fakeMethod); ++it; @@ -107,7 +107,7 @@ if (const qdesigner_internal::MetaDataBaseItem *mdbItem = metaDataBase->metaDataBaseItem(object)) { const QStringList mdbFakeMethods = member_type == qdesigner_internal::SlotMember ? mdbItem->fakeSlots() : mdbItem->fakeSignals(); if (!mdbFakeMethods.empty()) - foreach (const QString &fakeMethod, mdbFakeMethods) + for (const QString &fakeMethod : mdbFakeMethods) if (predicate(fakeMethod)) { *it = ClassNameSignaturePair(className, fakeMethod); ++it; @@ -166,7 +166,6 @@ ReverseClassesMemberIterator(qdesigner_internal::ClassesMemberFunctions *result); ReverseClassesMemberIterator &operator*() { return *this; } - ReverseClassesMemberIterator &operator++(int) { return *this; } ReverseClassesMemberIterator &operator++() { return *this; } void operator=(const ClassNameSignaturePair &classNameSignature); @@ -200,7 +199,6 @@ SignatureIterator(QMap *result) : m_result(result) {} SignatureIterator &operator*() { return *this; } - SignatureIterator &operator++(int) { return *this; } SignatureIterator &operator++() { return *this; } void operator=(const ClassNameSignaturePair &classNameSignature) { m_result->insert(classNameSignature.second, classNameSignature.first); diff -Nru qttools-opensource-src-5.7.1/src/designer/src/components/taskmenu/itemlisteditor.cpp qttools-opensource-src-5.9.1/src/designer/src/components/taskmenu/itemlisteditor.cpp --- qttools-opensource-src-5.7.1/src/designer/src/components/taskmenu/itemlisteditor.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/designer/src/components/taskmenu/itemlisteditor.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -76,7 +76,7 @@ m_editorFactory = new DesignerEditorFactory(form->core(), this); m_editorFactory->setSpacing(0); m_propertyBrowser = new ItemPropertyBrowser; - m_propertyBrowser->setFactoryForManager((QtVariantPropertyManager *)m_propertyManager, + m_propertyBrowser->setFactoryForManager(static_cast(m_propertyManager), m_editorFactory); connect(m_editorFactory, &DesignerEditorFactory::resetProperty, @@ -168,7 +168,7 @@ // Subproperty return; - if ((role == ItemFlagsShadowRole && prop->value().toInt() == (int)QListWidgetItem().flags()) + if ((role == ItemFlagsShadowRole && prop->value().toInt() == int(QListWidgetItem().flags())) || (role == Qt::DecorationPropertyRole && !qvariant_cast(prop->value()).mask()) || (role == Qt::FontRole && !qvariant_cast(prop->value()).resolve())) { prop->setModified(false); @@ -214,9 +214,9 @@ QtVariantProperty *prop = m_propertyManager->variantProperty(property); int role = m_propertyToRole.value(prop); if (role == ItemFlagsShadowRole) - prop->setValue(QVariant::fromValue((int)QListWidgetItem().flags())); + prop->setValue(QVariant::fromValue(int(QListWidgetItem().flags()))); else - prop->setValue(QVariant(prop->valueType(), (void *)0)); + prop->setValue(QVariant(prop->valueType(), nullptr)); prop->setModified(false); setItemData(role, QVariant()); @@ -241,14 +241,14 @@ void AbstractItemEditor::updateBrowser() { BoolBlocker block(m_updatingBrowser); - foreach (QtVariantProperty *prop, m_properties) { + for (QtVariantProperty *prop : qAsConst(m_properties)) { int role = m_propertyToRole.value(prop); QVariant val = getItemData(role); if (!val.isValid()) { if (role == ItemFlagsShadowRole) - val = QVariant::fromValue((int)QListWidgetItem().flags()); + val = QVariant::fromValue(int(QListWidgetItem().flags())); else - val = QVariant((int)prop->value().userType(), (void *)0); + val = QVariant(int(prop->value().userType()), nullptr); prop->setModified(false); } else { prop->setModified(true); @@ -256,9 +256,10 @@ prop->setValue(val); } - if (m_propertyBrowser->topLevelItems().isEmpty()) - foreach (QtVariantProperty *prop, m_rootProperties) + if (m_propertyBrowser->topLevelItems().isEmpty()) { + for (QtVariantProperty *prop : qAsConst(m_rootProperties)) m_propertyBrowser->addProperty(prop); + } } void AbstractItemEditor::injectPropertyBrowser(QWidget *parent, QWidget *widget) diff -Nru qttools-opensource-src-5.7.1/src/designer/src/components/taskmenu/treewidgeteditor.cpp qttools-opensource-src-5.9.1/src/designer/src/components/taskmenu/treewidgeteditor.cpp --- qttools-opensource-src-5.7.1/src/designer/src/components/taskmenu/treewidgeteditor.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/designer/src/components/taskmenu/treewidgeteditor.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -138,7 +138,7 @@ { setupProperties(propDefs); QtVariantProperty *groupProp = m_propertyManager->addProperty(QtVariantPropertyManager::groupTypeId(), title); - foreach (QtVariantProperty *prop, m_rootProperties) + for (QtVariantProperty *prop : qAsConst(m_rootProperties)) groupProp->addSubProperty(prop); m_rootProperties.clear(); return groupProp; diff -Nru qttools-opensource-src-5.7.1/src/designer/src/components/widgetbox/widgetboxcategorylistview.cpp qttools-opensource-src-5.9.1/src/designer/src/components/widgetbox/widgetboxcategorylistview.cpp --- qttools-opensource-src-5.7.1/src/designer/src/components/widgetbox/widgetboxcategorylistview.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/designer/src/components/widgetbox/widgetboxcategorylistview.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -74,7 +74,7 @@ // Entry of the model list struct WidgetBoxCategoryEntry { - WidgetBoxCategoryEntry(); + WidgetBoxCategoryEntry() = default; explicit WidgetBoxCategoryEntry(const QDesignerWidgetBoxInterface::Widget &widget, const QString &filter, const QIcon &icon, @@ -85,15 +85,9 @@ QString whatsThis; QString filter; QIcon icon; - bool editable; + bool editable{false}; }; - -WidgetBoxCategoryEntry::WidgetBoxCategoryEntry() : - editable(false) -{ -} - WidgetBoxCategoryEntry::WidgetBoxCategoryEntry(const QDesignerWidgetBoxInterface::Widget &w, const QString &filterIn, const QIcon &i, bool e) : diff -Nru qttools-opensource-src-5.7.1/src/designer/src/components/widgetbox/widgetbox_dnditem.cpp qttools-opensource-src-5.9.1/src/designer/src/components/widgetbox/widgetbox_dnditem.cpp --- qttools-opensource-src-5.7.1/src/designer/src/components/widgetbox/widgetbox_dnditem.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/designer/src/components/widgetbox/widgetbox_dnditem.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -125,7 +125,7 @@ { const QList prop_list = dw->elementProperty(); const QString geometry = QStringLiteral("geometry"); - foreach (DomProperty *prop, prop_list) { + for (DomProperty *prop : prop_list) { if (prop->attributeName() != geometry) continue; DomRect *dr = prop->elementRect(); @@ -142,14 +142,17 @@ if (size.isValid()) return size; - foreach (const DomWidget *child, dw->elementWidget()) { + const QList &elementWidgets = dw->elementWidget(); + for (const DomWidget *child : elementWidgets) { size = geometryProp(child); if (size.isValid()) return size; } - foreach (const DomLayout *dl, dw->elementLayout()) { - foreach (DomLayoutItem *item, dl->elementItem()) { + const QList elementLayouts = dw->elementLayout(); + for (const DomLayout *dl : elementLayouts) { + const QList &elementItems = dl->elementItem(); + for (DomLayoutItem *item : elementItems) { const DomWidget *child = item->elementWidget(); if (child == 0) continue; diff -Nru qttools-opensource-src-5.7.1/src/designer/src/components/widgetbox/widgetboxtreewidget.cpp qttools-opensource-src-5.9.1/src/designer/src/components/widgetbox/widgetboxtreewidget.cpp --- qttools-opensource-src-5.7.1/src/designer/src/components/widgetbox/widgetboxtreewidget.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/designer/src/components/widgetbox/widgetboxtreewidget.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -67,7 +67,6 @@ static const char *customValueC = "custom"; static const char *iconPrefixC = "__qt_icon__"; static const char *scratchPadValueC = "scratchpad"; -static const char *qtLogoC = "qtlogo.png"; static const char *invisibleNameC = "[invisible]"; enum TopLevelRole { NORMAL_ITEM, SCRATCHPAD_ITEM, CUSTOM_ITEM }; @@ -110,7 +109,7 @@ QIcon WidgetBoxTreeWidget::iconForWidget(QString iconName) const { if (iconName.isEmpty()) - iconName = QLatin1String(qtLogoC); + return qdesigner_internal::qtLogoIcon(); if (iconName.startsWith(QLatin1String(iconPrefixC))) { const IconCache::const_iterator it = m_pluginIcons.constFind(iconName); @@ -315,7 +314,7 @@ return false; } - foreach(const Category &cat, cat_list) + for (const Category &cat : qAsConst(cat_list)) addCategory(cat); addCustomCategories(false); @@ -549,7 +548,7 @@ writer.writeStartElement(widgetbox); - foreach (const Category &cat, cat_list) { + for (const Category &cat : cat_list) { writer.writeStartElement(category); writer.writeAttribute(name, cat.name()); if (cat.type() == Category::Scratchpad) @@ -584,7 +583,7 @@ static int findCategory(const QString &name, const WidgetBoxTreeWidget::CategoryList &list) { int idx = 0; - foreach (const WidgetBoxTreeWidget::Category &cat, list) { + for (const WidgetBoxTreeWidget::Category &cat : list) { if (cat.name() == name) return idx; ++idx; @@ -616,7 +615,7 @@ const QString invisible = QLatin1String(invisibleNameC); const QString iconPrefix = QLatin1String(iconPrefixC); - foreach(QDesignerCustomWidgetInterface *c, customWidgets) { + for (QDesignerCustomWidgetInterface *c : customWidgets) { const QString dom_xml = c->domXml(); if (dom_xml.isEmpty()) continue; @@ -647,8 +646,6 @@ icon_name = iconPrefix; icon_name += pluginName; m_pluginIcons.insert(icon_name, icon); - } else { - icon_name = QLatin1String(qtLogoC); } cat.addWidget(Widget(displayName, dom_xml, icon_name, Widget::Custom)); @@ -911,7 +908,7 @@ WidgetBoxCategoryListView *categoryView = 0; bool added = false; - foreach (QDesignerDnDItemInterface *item, item_list) { + for (QDesignerDnDItemInterface *item : item_list) { QWidget *w = item->widget(); if (w == 0) continue; diff -Nru qttools-opensource-src-5.7.1/src/designer/src/designer/designer.pro qttools-opensource-src-5.9.1/src/designer/src/designer/designer.pro --- qttools-opensource-src-5.7.1/src/designer/src/designer/designer.pro 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/designer/src/designer/designer.pro 2017-06-23 12:03:39.000000000 +0000 @@ -59,8 +59,14 @@ preferencesdialog.ui \ qdesigner_appearanceoptions.ui +QMAKE_TARGET_PRODUCT = Qt Designer +QMAKE_TARGET_DESCRIPTION = Tool for designing and building graphical user interfaces with Qt Widgets + win32 { - RC_FILE = designer.rc + RC_ICONS = designer.ico + VERSION = $${QT_VERSION}.0 +} else { + VERSION = $${QT_VERSION} } mac { diff -Nru qttools-opensource-src-5.7.1/src/designer/src/designer/designer.rc qttools-opensource-src-5.9.1/src/designer/src/designer/designer.rc --- qttools-opensource-src-5.7.1/src/designer/src/designer/designer.rc 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/designer/src/designer/designer.rc 1970-01-01 00:00:00.000000000 +0000 @@ -1,32 +0,0 @@ -#include "winver.h" - -IDI_ICON1 ICON DISCARDABLE "designer.ico" - -VS_VERSION_INFO VERSIONINFO - FILEVERSION 1,0,0,0 - PRODUCTVERSION 1,0,0,0 - FILEFLAGS 0x0L - FILEFLAGSMASK 0x3fL - FILEOS 0x00040004L - FILETYPE 0x1L - FILESUBTYPE 0x0L -BEGIN - BLOCK "StringFileInfo" - BEGIN - BLOCK "000004b0" - BEGIN - VALUE "CompanyName", "Digia Plc and/or its subsidiary(-ies)" - VALUE "FileDescription", "Qt Designer" - VALUE "FileVersion", "1.0.0.0" - VALUE "LegalCopyright", "Copyright (C) 2015 The Qt Company Ltd." - VALUE "InternalName", "designer" - VALUE "OriginalFilename", "designer.exe" - VALUE "ProductName", "Qt Designer" - VALUE "ProductVersion", "1.0.0.0" - END - END - BLOCK "VarFileInfo" - BEGIN - VALUE "Translation", 0x0, 1200 - END -END diff -Nru qttools-opensource-src-5.7.1/src/designer/src/designer/doc/src/designer-manual.qdoc qttools-opensource-src-5.9.1/src/designer/src/designer/doc/src/designer-manual.qdoc --- qttools-opensource-src-5.7.1/src/designer/src/designer/doc/src/designer-manual.qdoc 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/designer/src/designer/doc/src/designer-manual.qdoc 2017-06-23 12:03:39.000000000 +0000 @@ -84,18 +84,6 @@ \li \l{Qt Designer's UI File Format} \endlist \endlist - - \section1 Legal Notices - - Some source code in \QD is licensed under specific highly permissive - licenses from the original authors. The Qt team gratefully acknowledges - these contributions to \QD and all uses of \QD should also acknowledge - these contributions and quote the following license statements in an - appendix to the documentation. - - \list - \li \l{Qt Designer License Information} - \endlist */ @@ -2811,31 +2799,3 @@ \quotefile ../../../../data/ui4.xsd */ - - -/*! - \page designer-license-information.html - \title Qt Designer License Information - \contentspage {Qt Designer Manual}{Contents} - - \brief License information for contributions to specific parts of the Qt - Designer source code. - - \section1 Implementation of the Recursive Shadow Casting Algorithm in Qt Designer - - \legalese - Copyright (C) 2015 The Qt Company Ltd. \BR - Copyright (C) 2005 Bjoern Bergstroem - - Permission is hereby granted, free of charge, to any person obtaining - a copy of this software and associated documentation files (the - "Software"), to deal in the Software without restriction, including - without limitation the rights to use, modify, market, reproduce, - grant sublicenses and distribute subject to the following conditions: - The above copyright notice and this permission notice shall be - included in all copies or substantial portions of the Software. These - files are provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE - WARRANTY OF DESIGN, MERCHANTIBILITY AND FITNESS FOR A PARTICULAR - PURPOSE. - \endlegalese -*/ diff -Nru qttools-opensource-src-5.7.1/src/designer/src/designer/Info_mac.plist qttools-opensource-src-5.9.1/src/designer/src/designer/Info_mac.plist --- qttools-opensource-src-5.7.1/src/designer/src/designer/Info_mac.plist 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/designer/src/designer/Info_mac.plist 2017-06-23 12:03:39.000000000 +0000 @@ -1,6 +1,6 @@ - - + + NSPrincipalClass NSApplication @@ -8,30 +8,28 @@ @ICON@ CFBundlePackageType APPL - CFBundleGetInfoString - Created by Qt/QMake CFBundleIdentifier - com.trolltech.Designer + org.qt-project.Designer CFBundleSignature ttxt CFBundleExecutable @EXECUTABLE@ CFBundleDocumentTypes - - - CFBundleTypeExtensions - - ui - + + + CFBundleTypeExtensions + + ui + CFBundleTypeIconFile uifile.icns - CFBundleTypeRole - Editor - LSIsAppleDefaultForType - - - - NOTE - Qt/Designer by Digia Plc and/or its subsidiary(-ies) + CFBundleTypeRole + Editor + LSIsAppleDefaultForType + + + + NSHumanReadableCopyright + (C) 2017 The Qt Company Ltd diff -Nru qttools-opensource-src-5.7.1/src/designer/src/designer/mainwindow.cpp qttools-opensource-src-5.9.1/src/designer/src/designer/mainwindow.cpp --- qttools-opensource-src-5.7.1/src/designer/src/designer/mainwindow.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/designer/src/designer/mainwindow.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -60,9 +60,7 @@ static void addActionsToToolBar(const ActionList &actions, QToolBar *t) { - const ActionList::const_iterator cend = actions.constEnd(); - for (ActionList::const_iterator it = actions.constBegin(); it != cend; ++it) { - QAction *action = *it; + for (QAction *action : actions) { if (action->property(QDesignerActions::defaultToolbarPropertyName).toBool()) t->addAction(action); } @@ -197,9 +195,8 @@ static void addActionsToToolBarManager(const ActionList &al, const QString &title, QtToolBarManager *tbm) { - const ActionList::const_iterator cend = al.constEnd(); - for (ActionList::const_iterator it = al.constBegin(); it != cend; ++it) - tbm->addAction(*it, title); + for (QAction *action : al) + tbm->addAction(action, title); } ToolBarManager::ToolBarManager(QMainWindow *configureableMainWindow, @@ -222,7 +219,7 @@ m_manager->setMainWindow(configureableMainWindow); - foreach(QToolBar *tb, m_toolbars) { + for (QToolBar *tb : qAsConst(m_toolbars)) { const QString title = tb->windowTitle(); m_manager->addToolBar(tb, title); addActionsToToolBarManager(tb->actions(), title, m_manager); @@ -239,26 +236,15 @@ addActionsToToolBarManager(previewActions, tr("Style"), m_manager); const QString dockTitle = tr("Dock views"); - foreach (QDesignerToolWindow *tw, toolWindows) { + for (QDesignerToolWindow *tw : toolWindows) { if (QAction *action = tw->action()) m_manager->addAction(action, dockTitle); } - QString category(tr("File")); - foreach(QAction *action, actions->fileActions()->actions()) - m_manager->addAction(action, category); - - category = tr("Edit"); - foreach(QAction *action, actions->editActions()->actions()) - m_manager->addAction(action, category); - - category = tr("Tools"); - foreach(QAction *action, actions->toolActions()->actions()) - m_manager->addAction(action, category); - - category = tr("Form"); - foreach(QAction *action, actions->formActions()->actions()) - m_manager->addAction(action, category); + addActionsToToolBarManager(actions->fileActions()->actions(), tr("File"), m_manager); + addActionsToToolBarManager(actions->editActions()->actions(), tr("Edit"), m_manager); + addActionsToToolBarManager(actions->toolActions()->actions(), tr("Tools"), m_manager); + addActionsToToolBarManager(actions->formActions()->actions(), tr("Form"), m_manager); m_manager->addAction(m_configureAction, tr("Toolbars")); updateToolBarMenu(); @@ -277,7 +263,7 @@ qStableSort(m_toolbars.begin(), m_toolbars.end(), toolBarTitleLessThan); // add to menu m_toolBarMenu->clear(); - foreach (QToolBar *tb, m_toolbars) + for (QToolBar *tb : qAsConst(m_toolbars)) m_toolBarMenu->addAction(tb->toggleViewAction()); m_toolBarMenu->addAction(m_configureAction); } @@ -312,7 +298,7 @@ setWindowTitle(mainWindowTitle()); const QList toolbars = createToolBars(wb->actionManager(), false); - foreach (QToolBar *tb, toolbars) + for (QToolBar *tb : toolbars) addToolBar(tb); DockedMdiArea *dma = new DockedMdiArea(wb->actionManager()->uiExtension()); connect(dma, &DockedMdiArea::fileDropped, @@ -367,7 +353,7 @@ DockedMainWindow::DockWidgetList DockedMainWindow::addToolWindows(const DesignerToolWindowList &tls) { DockWidgetList rc; - foreach (QDesignerToolWindow *tw, tls) { + for (QDesignerToolWindow *tw : tls) { QDockWidget *dockWidget = new QDockWidget; dockWidget->setObjectName(tw->objectName() + QStringLiteral("_dock")); dockWidget->setWindowTitle(tw->windowTitle()); diff -Nru qttools-opensource-src-5.7.1/src/designer/src/designer/preferencesdialog.cpp qttools-opensource-src-5.9.1/src/designer/src/designer/preferencesdialog.cpp --- qttools-opensource-src-5.7.1/src/designer/src/designer/preferencesdialog.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/designer/src/designer/preferencesdialog.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -49,7 +49,7 @@ m_optionsPages = core->optionsPages(); m_ui->m_optionTabWidget->clear(); - foreach (QDesignerOptionsPageInterface *optionsPage, m_optionsPages) { + for (QDesignerOptionsPageInterface *optionsPage : qAsConst(m_optionsPages)) { QWidget *page = optionsPage->createPage(this); m_ui->m_optionTabWidget->addTab(page, optionsPage->name()); if (QDesignerAppearanceOptionsWidget *appearanceWidget = qobject_cast(page)) @@ -74,7 +74,7 @@ void PreferencesDialog::slotApply() { - foreach (QDesignerOptionsPageInterface *optionsPage, m_optionsPages) + for (QDesignerOptionsPageInterface *optionsPage : qAsConst(m_optionsPages)) optionsPage->apply(); } @@ -99,7 +99,7 @@ void PreferencesDialog::closeOptionPages() { - foreach (QDesignerOptionsPageInterface *optionsPage, m_optionsPages) + for (QDesignerOptionsPageInterface *optionsPage : qAsConst(m_optionsPages)) optionsPage->finish(); } diff -Nru qttools-opensource-src-5.7.1/src/designer/src/designer/qdesigner_actions.cpp qttools-opensource-src-5.9.1/src/designer/src/designer/qdesigner_actions.cpp --- qttools-opensource-src-5.7.1/src/designer/src/designer/qdesigner_actions.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/designer/src/designer/qdesigner_actions.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -113,6 +113,12 @@ return rc; } +static void fixActionContext(const QList &actions) +{ + for (QAction *a : actions) + a->setShortcutContext(Qt::ApplicationShortcut); +} + static inline QString savedMessage(const QString &fileName) { return QDesignerActions::tr("Saved %1.").arg(fileName); @@ -328,9 +334,7 @@ m_editWidgetsAction->setCheckable(true); QList shortcuts; shortcuts.append(QKeySequence(Qt::Key_F3)); -#if QT_VERSION >= 0x040900 // "ESC" switching to edit mode: Activate once item delegates handle shortcut overrides for ESC. shortcuts.append(QKeySequence(Qt::Key_Escape)); -#endif m_editWidgetsAction->setShortcuts(shortcuts); QIcon fallback(m_core->resourceLocation() + QStringLiteral("/widgettool.png")); m_editWidgetsAction->setIcon(QIcon::fromTheme("designer-edit-widget", fallback)); @@ -343,9 +347,9 @@ connect(formWindowManager, &QDesignerFormWindowManager::activeFormWindowChanged, this, &QDesignerActions::activeFormWindowChanged); - QList builtinPlugins = QPluginLoader::staticInstances(); - builtinPlugins += m_core->pluginManager()->instances(); - foreach (QObject *plugin, builtinPlugins) { + const QObjectList builtinPlugins = QPluginLoader::staticInstances() + + m_core->pluginManager()->instances(); + for (QObject *plugin : builtinPlugins) { if (QDesignerFormEditorPluginInterface *formEditorPlugin = qobject_cast(plugin)) { if (QAction *action = formEditorPlugin->action()) { m_toolActions->addAction(action); @@ -419,7 +423,13 @@ // // connections // - fixActionContext(); + fixActionContext(m_fileActions->actions()); + fixActionContext(m_editActions->actions()); + fixActionContext(m_toolActions->actions()); + fixActionContext(m_formActions->actions()); + fixActionContext(m_windowActions->actions()); + fixActionContext(m_helpActions->actions()); + activeFormWindowChanged(core()->formWindowManager()->activeFormWindow()); m_backupTimer->start(180000); // 3min @@ -595,7 +605,7 @@ return false; bool atLeastOne = false; - foreach (const QString &fileName, fileNames) { + for (const QString &fileName : fileNames) { if (readInForm(fileName) && !atLeastOne) atLeastOne = true; } @@ -731,21 +741,6 @@ QMessageBox::warning(fw, tr("Code generation failed"), errorMessage); } -void QDesignerActions::fixActionContext() -{ - QList actions; - actions += m_fileActions->actions(); - actions += m_editActions->actions(); - actions += m_toolActions->actions(); - actions += m_formActions->actions(); - actions += m_windowActions->actions(); - actions += m_helpActions->actions(); - - foreach (QAction *a, actions) { - a->setShortcutContext(Qt::ApplicationShortcut); - } -} - bool QDesignerActions::readInForm(const QString &fileName) { QString fn = fileName; @@ -846,7 +841,7 @@ if (check) { const QStringList problems = fw->checkContents(); if (!problems.isEmpty()) - QMessageBox::information(fw->window(), tr("Qt Designer"), problems.join(QStringLiteral("
"))); + QMessageBox::information(fw->window(), tr("Qt Designer"), problems.join(QLatin1String("
"))); } QString contents = fw->contents(); @@ -1142,15 +1137,10 @@ } if(!tmpFiles.isEmpty()) { const QStringList backupFiles = backupDir.entryList(QDir::Files); - if(!backupFiles.isEmpty()) { - QStringListIterator it(backupFiles); - while (it.hasNext()) - backupDir.remove(it.next()); - } + for (const QString &backupFile : backupFiles) + backupDir.remove(backupFile); - QStringListIterator it(tmpFiles); - while (it.hasNext()) { - const QString tmpName = it.next(); + for (const QString &tmpName : qAsConst(tmpFiles)) { QString name(tmpName); name.replace(m_backupTmpPath, m_backupPath); QFile tmpFile(tmpName); diff -Nru qttools-opensource-src-5.7.1/src/designer/src/designer/qdesigner_actions.h qttools-opensource-src-5.9.1/src/designer/src/designer/qdesigner_actions.h --- qttools-opensource-src-5.7.1/src/designer/src/designer/qdesigner_actions.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/designer/src/designer/qdesigner_actions.h 2017-06-23 12:03:39.000000000 +0000 @@ -143,7 +143,6 @@ private: QAction *createRecentFilesMenu(); bool saveFormAs(QDesignerFormWindowInterface *fw); - void fixActionContext(); void updateRecentFileActions(); void addRecentFile(const QString &fileName); void showHelp(const QString &help); diff -Nru qttools-opensource-src-5.7.1/src/designer/src/designer/qdesigner_appearanceoptions.cpp qttools-opensource-src-5.9.1/src/designer/src/designer/qdesigner_appearanceoptions.cpp --- qttools-opensource-src-5.7.1/src/designer/src/designer/qdesigner_appearanceoptions.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/designer/src/designer/qdesigner_appearanceoptions.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -39,11 +39,6 @@ QT_BEGIN_NAMESPACE // ---------------- AppearanceOptions -AppearanceOptions::AppearanceOptions() : - uiMode(DockedMode) -{ -} - bool AppearanceOptions::equals(const AppearanceOptions &rhs) const { return uiMode == rhs.uiMode && toolWindowFontSettings == rhs.toolWindowFontSettings; diff -Nru qttools-opensource-src-5.7.1/src/designer/src/designer/qdesigner_appearanceoptions.h qttools-opensource-src-5.9.1/src/designer/src/designer/qdesigner_appearanceoptions.h --- qttools-opensource-src-5.7.1/src/designer/src/designer/qdesigner_appearanceoptions.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/designer/src/designer/qdesigner_appearanceoptions.h 2017-06-23 12:03:39.000000000 +0000 @@ -49,12 +49,11 @@ /* AppearanceOptions data */ struct AppearanceOptions { - AppearanceOptions(); bool equals(const AppearanceOptions&) const; void toSettings(QDesignerSettings &) const; void fromSettings(const QDesignerSettings &); - UIMode uiMode; + UIMode uiMode{DockedMode}; ToolWindowFontSettings toolWindowFontSettings; }; diff -Nru qttools-opensource-src-5.7.1/src/designer/src/designer/qdesigner.cpp qttools-opensource-src-5.9.1/src/designer/src/designer/qdesigner.cpp --- qttools-opensource-src-5.7.1/src/designer/src/designer/qdesigner.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/designer/src/designer/qdesigner.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -162,15 +162,11 @@ struct Options { - Options() - : resourceDir(QLibraryInfo::location(QLibraryInfo::TranslationsPath)) - , server(false), clientPort(0), enableInternalDynamicProperties(false) {} - QStringList files; - QString resourceDir; - bool server; - quint16 clientPort; - bool enableInternalDynamicProperties; + QString resourceDir{QLibraryInfo::location(QLibraryInfo::TranslationsPath)}; + bool server{false}; + quint16 clientPort{0}; + bool enableInternalDynamicProperties{false}; }; static inline QDesigner::ParseArgumentsResult diff -Nru qttools-opensource-src-5.7.1/src/designer/src/designer/qdesigner_server.cpp qttools-opensource-src-5.9.1/src/designer/src/designer/qdesigner_server.cpp --- qttools-opensource-src-5.7.1/src/designer/src/designer/qdesigner_server.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/designer/src/designer/qdesigner_server.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -47,9 +47,7 @@ { m_socket = 0; m_server = new QTcpServer(this); - m_server->listen(QHostAddress::LocalHost, 0); - if (m_server->isListening()) - { + if (m_server->listen(QHostAddress::LocalHost, 0)) { connect(m_server, &QTcpServer::newConnection, this, &QDesignerServer::handleNewConnection); } @@ -70,8 +68,7 @@ sSocket->connectToHost(QHostAddress::LocalHost, port); if(sSocket->waitForConnected(3000)) { - foreach(const QString &file, files) - { + for (const QString &file : files) { QFileInfo fi(file); sSocket->write(fi.absoluteFilePath().toUtf8() + '\n'); } diff -Nru qttools-opensource-src-5.7.1/src/designer/src/designer/qdesigner_toolwindow.cpp qttools-opensource-src-5.9.1/src/designer/src/designer/qdesigner_toolwindow.cpp --- qttools-opensource-src-5.7.1/src/designer/src/designer/qdesigner_toolwindow.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/designer/src/designer/qdesigner_toolwindow.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -48,12 +48,6 @@ QT_BEGIN_NAMESPACE // ---------------- QDesignerToolWindowFontSettings -ToolWindowFontSettings::ToolWindowFontSettings() : - m_writingSystem(QFontDatabase::Any), - m_useFont(false) -{ -} - bool ToolWindowFontSettings::equals(const ToolWindowFontSettings &rhs) const { return m_useFont == rhs.m_useFont && diff -Nru qttools-opensource-src-5.7.1/src/designer/src/designer/qdesigner_toolwindow.h qttools-opensource-src-5.9.1/src/designer/src/designer/qdesigner_toolwindow.h --- qttools-opensource-src-5.7.1/src/designer/src/designer/qdesigner_toolwindow.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/designer/src/designer/qdesigner_toolwindow.h 2017-06-23 12:03:39.000000000 +0000 @@ -38,12 +38,11 @@ QT_BEGIN_NAMESPACE struct ToolWindowFontSettings { - ToolWindowFontSettings(); bool equals(const ToolWindowFontSettings &) const; QFont m_font; - QFontDatabase::WritingSystem m_writingSystem; - bool m_useFont; + QFontDatabase::WritingSystem m_writingSystem{QFontDatabase::Any}; + bool m_useFont{false}; }; inline bool operator==(const ToolWindowFontSettings &tw1, const ToolWindowFontSettings &tw2) diff -Nru qttools-opensource-src-5.7.1/src/designer/src/designer/qdesigner_workbench.cpp qttools-opensource-src-5.9.1/src/designer/src/designer/qdesigner_workbench.cpp --- qttools-opensource-src-5.7.1/src/designer/src/designer/qdesigner_workbench.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/designer/src/designer/qdesigner_workbench.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -270,21 +270,18 @@ break; case TopLevelMode: { const QPoint desktopOffset = QApplication::desktop()->availableGeometry().topLeft(); - foreach (QDesignerToolWindow *tw, m_toolWindows) + for (QDesignerToolWindow *tw : qAsConst(m_toolWindows)) m_Positions.insert(tw, Position(tw, desktopOffset)); - foreach (QDesignerFormWindow *fw, m_formWindows) { + for (QDesignerFormWindow *fw : qAsConst(m_formWindows)) m_Positions.insert(fw, Position(fw, desktopOffset)); - } } break; case DockedMode: { const QPoint mdiAreaOffset = m_dockedMainWindow->mdiArea()->pos(); - foreach (QDesignerToolWindow *tw, m_toolWindows) { + for (QDesignerToolWindow *tw : qAsConst(m_toolWindows)) m_Positions.insert(tw, Position(dockWidgetOf(tw))); - } - foreach (QDesignerFormWindow *fw, m_formWindows) { + for (QDesignerFormWindow *fw : qAsConst(m_formWindows)) m_Positions.insert(fw, Position(mdiSubWindowOf(fw), mdiAreaOffset)); - } } break; } @@ -374,12 +371,12 @@ m_mode = NeutralMode; - foreach (QDesignerToolWindow *tw, m_toolWindows) { + for (QDesignerToolWindow *tw : qAsConst(m_toolWindows)) { tw->setCloseEventPolicy(MainWindowBase::AcceptCloseEvents); tw->setParent(0); } - foreach (QDesignerFormWindow *fw, m_formWindows) { + for (QDesignerFormWindow *fw : qAsConst(m_formWindows)) { fw->setParent(0); fw->setMaximumSize(QWIDGETSIZE_MAX, QWIDGETSIZE_MAX); } @@ -432,7 +429,7 @@ #endif qDesigner->setMainWindow(m_dockedMainWindow); - foreach (QDesignerFormWindow *fw, m_formWindows) { + for (QDesignerFormWindow *fw : qAsConst(m_formWindows)) { QMdiSubWindow *subwin = m_dockedMainWindow->createMdiSubWindow(fw, magicalWindowFlags(fw), m_actionManager->closeFormAction()->shortcut()); subwin->hide(); @@ -452,7 +449,7 @@ { const QPoint mdiAreaOffset = m_dockedMainWindow->mdiArea()->pos(); - foreach (QDesignerFormWindow *fw, m_formWindows) { + for (QDesignerFormWindow *fw : qAsConst(m_formWindows)) { const PositionMap::const_iterator pit = m_Positions.constFind(fw); if (pit != m_Positions.constEnd()) pit->applyTo(mdiSubWindowOf(fw), mdiAreaOffset); @@ -506,7 +503,7 @@ widgetBoxWrapper->restoreState(settings.mainWindowState(m_mode), MainWindowBase::settingsVersion()); bool found_visible_window = false; - foreach (QDesignerToolWindow *tw, m_toolWindows) { + for (QDesignerToolWindow *tw : qAsConst(m_toolWindows)) { tw->setParent(magicalParent(tw), magicalWindowFlags(tw)); settings.restoreGeometry(tw, tw->geometryHint()); tw->action()->setChecked(tw->isVisible()); @@ -518,7 +515,7 @@ m_actionManager->setBringAllToFrontVisible(true); - foreach (QDesignerFormWindow *fw, m_formWindows) { + for (QDesignerFormWindow *fw : qAsConst(m_formWindows)) { fw->setParent(magicalParent(fw), magicalWindowFlags(fw)); fw->setAttribute(Qt::WA_DeleteOnClose, true); const PositionMap::const_iterator pit = m_Positions.constFind(fw); @@ -628,7 +625,7 @@ QList plugins = QPluginLoader::staticInstances(); plugins += core()->pluginManager()->instances(); - foreach (QObject *plugin, plugins) { + for (QObject *plugin : qAsConst(plugins)) { if (QDesignerFormEditorPluginInterface *formEditorPlugin = qobject_cast(plugin)) { if (!formEditorPlugin->isInitialized()) formEditorPlugin->initialize(core()); @@ -653,7 +650,7 @@ case TopLevelMode: settings.setToolBarsState(m_mode, m_topLevelData.toolbarManager->saveState(MainWindowBase::settingsVersion())); settings.setMainWindowState(m_mode, widgetBoxToolWindow()->saveState(MainWindowBase::settingsVersion())); - foreach (const QDesignerToolWindow *tw, m_toolWindows) + for (const QDesignerToolWindow *tw : m_toolWindows) settings.saveGeometryFor(tw); break; case NeutralMode: @@ -683,7 +680,7 @@ QDesignerFormWindow *QDesignerWorkbench::findFormWindow(QWidget *widget) const { - foreach (QDesignerFormWindow *formWindow, m_formWindows) { + for (QDesignerFormWindow *formWindow : m_formWindows) { if (formWindow->editor() == widget) return formWindow; } @@ -695,7 +692,7 @@ { m_state = StateClosing; QList dirtyForms; - foreach (QDesignerFormWindow *w, m_formWindows) { + for (QDesignerFormWindow *w : qAsConst(m_formWindows)) { if (w->editor()->isDirty()) dirtyForms << w; } @@ -722,7 +719,7 @@ m_state = StateUp; return false; case QMessageBox::Save: - foreach (QDesignerFormWindow *fw, dirtyForms) { + for (QDesignerFormWindow *fw : qAsConst(dirtyForms)) { fw->show(); fw->raise(); if (!fw->close()) { @@ -732,7 +729,7 @@ } break; case QMessageBox::Discard: - foreach (QDesignerFormWindow *fw, dirtyForms) { + for (QDesignerFormWindow *fw : qAsConst(dirtyForms)) { fw->editor()->setDirty(false); fw->setWindowModified(false); } @@ -741,7 +738,7 @@ } } - foreach (QDesignerFormWindow *fw, m_formWindows) + for (QDesignerFormWindow *fw : qAsConst(m_formWindows)) fw->close(); saveSettings(); @@ -799,7 +796,7 @@ void QDesignerWorkbench::closeAllToolWindows() { - foreach (QDesignerToolWindow *tw, m_toolWindows) + for (QDesignerToolWindow *tw : qAsConst(m_toolWindows)) tw->hide(); } @@ -818,10 +815,7 @@ return false; const QString modifiedPlaceHolder = QStringLiteral("[*]"); - QMapIterator it(backupFileMap); - while(it.hasNext()) { - it.next(); - + for (auto it = backupFileMap.cbegin(), end = backupFileMap.cend(); it != end; ++it) { QString fileName = it.key(); fileName.remove(modifiedPlaceHolder); @@ -856,9 +850,9 @@ { if (m_mode != TopLevelMode) return; - foreach(QDesignerToolWindow *tw, m_toolWindows) + for (QDesignerToolWindow *tw : qAsConst(m_toolWindows)) raiseWindow(tw); - foreach(QDesignerFormWindow *dfw, m_formWindows) + for (QDesignerFormWindow *dfw : qAsConst(m_formWindows)) raiseWindow(dfw); } @@ -1095,7 +1089,7 @@ if (font == m_toolWindows.front()->font()) return; - foreach(QDesignerToolWindow *tw, m_toolWindows) + for (QDesignerToolWindow *tw : qAsConst(m_toolWindows)) tw->setFont(font); } diff -Nru qttools-opensource-src-5.7.1/src/designer/src/designer/versiondialog.cpp qttools-opensource-src-5.9.1/src/designer/src/designer/versiondialog.cpp --- qttools-opensource-src-5.7.1/src/designer/src/designer/versiondialog.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/designer/src/designer/versiondialog.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -100,14 +100,14 @@ if (!secondStage) { m_path.lineTo(me->pos()); bool gotIt = true; - foreach(const QPoint &pt, hitPoints) { + for (const QPoint &pt : qAsConst(hitPoints)) { if (!m_path.contains(pt)) { gotIt = false; break; } } if (gotIt) { - foreach(const QPoint &pt, missPoints) { + for (const QPoint &pt : qAsConst(missPoints)) { if (m_path.contains(pt)) { gotIt = false; break; @@ -160,7 +160,7 @@ lbl->setText(tr("%1" "
Copyright (C) %2 The Qt Company Ltd." - ).arg(version, QStringLiteral("2016"))); + ).arg(version, QStringLiteral("2017"))); lbl->setWordWrap(true); lbl->setOpenExternalLinks(true); diff -Nru qttools-opensource-src-5.7.1/src/designer/src/lib/extension/default_extensionfactory.cpp qttools-opensource-src-5.9.1/src/designer/src/lib/extension/default_extensionfactory.cpp --- qttools-opensource-src-5.7.1/src/designer/src/lib/extension/default_extensionfactory.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/designer/src/lib/extension/default_extensionfactory.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -125,14 +125,11 @@ void QExtensionFactory::objectDestroyed(QObject *object) { - QMutableMapIterator< IdObjectKey, QObject*> it(m_extensions); - while (it.hasNext()) { - it.next(); - - QObject *o = it.key().second; - if (o == object || object == it.value()) { - it.remove(); - } + for (auto it = m_extensions.begin(); it != m_extensions.end(); ) { + if (it.key().second == object || object == it.value()) + it = m_extensions.erase(it); + else + ++it; } m_extended.remove(object); diff -Nru qttools-opensource-src-5.7.1/src/designer/src/lib/sdk/abstractformeditor.cpp qttools-opensource-src-5.9.1/src/designer/src/lib/sdk/abstractformeditor.cpp --- qttools-opensource-src-5.7.1/src/designer/src/lib/sdk/abstractformeditor.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/designer/src/lib/sdk/abstractformeditor.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -43,6 +43,7 @@ #include #include +#include #include #include #include @@ -514,6 +515,7 @@ // initializations. const qdesigner_internal::QDesignerSharedSettings settings(this); qdesigner_internal::FormWindowBase::setDefaultDesignerGrid(settings.defaultGrid()); + qdesigner_internal::ActionEditor::setObjectNamingMode(settings.objectNamingMode()); } /*! diff -Nru qttools-opensource-src-5.7.1/src/designer/src/lib/shared/actioneditor.cpp qttools-opensource-src-5.9.1/src/designer/src/lib/shared/actioneditor.cpp --- qttools-opensource-src-5.7.1/src/designer/src/lib/shared/actioneditor.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/designer/src/lib/shared/actioneditor.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -64,7 +64,7 @@ #include #include -#include +#include #include #include @@ -101,6 +101,8 @@ }; //-------- ActionEditor +ObjectNamingMode ActionEditor::m_objectNamingMode = Underscore; // fixme Qt 6: CamelCase + ActionEditor::ActionEditor(QDesignerFormEditorInterface *core, QWidget *parent, Qt::WindowFlags flags) : QDesignerActionEditorInterface(parent, flags), m_core(core), @@ -285,7 +287,7 @@ if (m_formWindow != 0) { const ActionList actionList = m_formWindow->mainContainer()->findChildren(); - foreach (QAction *action, actionList) + for (QAction *action : actionList) disconnect(action, &QAction::changed, this, &ActionEditor::slotActionChanged); } @@ -310,7 +312,7 @@ m_filterWidget->setEnabled(true); const ActionList actionList = formWindow->mainContainer()->findChildren(); - foreach (QAction *action, actionList) + for (QAction *action : actionList) if (!action->isSeparator() && core()->metaDataBase()->item(action) != 0) { // Show unless it has a menu. However, listen for change on menu actions also as it might be removed if (!action->menu()) @@ -603,7 +605,7 @@ const QString description = actions.size() == 1 ? tr("Remove action '%1'").arg(actions.front()->objectName()) : tr("Remove actions"); fw->beginCommand(description); - foreach(QAction *action, actions) { + for (QAction *action : actions) { RemoveActionCommand *cmd = new RemoveActionCommand(fw); cmd->init(action); fw->commandHistory()->push(cmd); @@ -648,21 +650,61 @@ deleteActions(fw, selection); } +// UnderScore: "Open file" -> actionOpen_file +static QString underscore(QString text) +{ + const QString underscore = QString(QLatin1Char('_')); + static const QRegularExpression nonAsciiPattern(QStringLiteral("[^a-zA-Z_0-9]")); + Q_ASSERT(nonAsciiPattern.isValid()); + text.replace(nonAsciiPattern, underscore); + static const QRegularExpression multipleSpacePattern(QStringLiteral("__*")); + Q_ASSERT(multipleSpacePattern.isValid()); + text.replace(multipleSpacePattern, underscore); + if (text.endsWith(underscore.at(0))) + text.chop(1); + return text; +} + +// CamelCase: "Open file" -> actionOpenFile, ignoring non-ASCII letters. + +enum CharacterCategory { OtherCharacter, DigitOrAsciiLetter, NonAsciiLetter }; + +static inline CharacterCategory category(QChar c) +{ + if (c.isDigit()) + return DigitOrAsciiLetter; + if (c.isLetter()) { + const ushort uc = c.unicode(); + return (uc >= 'a' && uc <= 'z') || (uc >= 'A' && uc <= 'Z') + ? DigitOrAsciiLetter : NonAsciiLetter; + } + return OtherCharacter; +} + +static QString camelCase(const QString &text) +{ + QString result; + result.reserve(text.size()); + bool lastCharAccepted = false; + for (QChar c : text) { + const CharacterCategory cat = category(c); + if (cat != NonAsciiLetter) { + const bool acceptable = cat == DigitOrAsciiLetter; + if (acceptable) + result.append(lastCharAccepted ? c : c.toUpper()); // New word starts + lastCharAccepted = acceptable; + } + } + return result; +} + QString ActionEditor::actionTextToName(const QString &text, const QString &prefix) { QString name = text; if (name.isEmpty()) return QString(); + return prefix + (m_objectNamingMode == CamelCase ? camelCase(text) : underscore(text)); - name[0] = name.at(0).toUpper(); - name.prepend(prefix); - const QString underscore = QString(QLatin1Char('_')); - name.replace(QRegExp(QString(QStringLiteral("[^a-zA-Z_0-9]"))), underscore); - name.replace(QRegExp(QStringLiteral("__*")), underscore); - if (name.endsWith(underscore.at(0))) - name.truncate(name.size() - 1); - - return name; } void ActionEditor::resourceImageDropped(const QString &path, QAction *action) @@ -786,7 +828,7 @@ const QWidgetList associatedWidgets = ActionModel::associatedWidgets(action); if (!associatedWidgets.empty()) { QMenu *associatedWidgetsSubMenu = menu.addMenu(tr("Used In")); - foreach (QWidget *w, associatedWidgets) { + for (QWidget *w : associatedWidgets) { associatedWidgetsSubMenu->addAction(w->objectName(), this, [this, w] { this->slotSelectAssociatedWidget(w); }); } diff -Nru qttools-opensource-src-5.7.1/src/designer/src/lib/shared/actioneditor_p.h qttools-opensource-src-5.9.1/src/designer/src/lib/shared/actioneditor_p.h --- qttools-opensource-src-5.7.1/src/designer/src/lib/shared/actioneditor_p.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/designer/src/lib/shared/actioneditor_p.h 2017-06-23 12:03:39.000000000 +0000 @@ -41,6 +41,7 @@ #define ACTIONEDITOR_H #include "shared_global_p.h" +#include "shared_enums_p.h" #include #include @@ -82,7 +83,11 @@ void manageAction(QAction *action) Q_DECL_OVERRIDE; void unmanageAction(QAction *action) Q_DECL_OVERRIDE; - static QString actionTextToName(const QString &text, const QString &prefix = QLatin1String("action")); + static ObjectNamingMode objectNamingMode() { return m_objectNamingMode; } + static void setObjectNamingMode(ObjectNamingMode n) { m_objectNamingMode = n; } + + static QString actionTextToName(const QString &text, + const QString &prefix = QLatin1String("action")); // Utility to create a configure button with menu for usage on toolbars static QToolButton *createConfigureMenuButton(const QString &t, QMenu **ptrToMenu); @@ -127,6 +132,8 @@ void updateViewModeActions(); + static ObjectNamingMode m_objectNamingMode; + QDesignerFormEditorInterface *m_core; QPointer m_formWindow; QListWidget *m_actionGroups; diff -Nru qttools-opensource-src-5.7.1/src/designer/src/lib/shared/actionrepository.cpp qttools-opensource-src-5.9.1/src/designer/src/lib/shared/actionrepository.cpp --- qttools-opensource-src-5.7.1/src/designer/src/lib/shared/actionrepository.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/designer/src/lib/shared/actionrepository.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -230,7 +230,7 @@ ActionRepositoryMimeData::ActionList actionList; QSet actions; - foreach (const QModelIndex &index, indexes) + for (const QModelIndex &index : indexes) if (QStandardItem *item = itemFromIndex(index)) if (QAction *action = actionOfItem(item)) actions.insert(action); @@ -493,10 +493,10 @@ addWidget(m_actionListView); addWidget(m_actionTreeView); // Wire signals - connect(m_actionTreeView, SIGNAL(actionContextMenuRequested(QContextMenuEvent*,QAction*)), - this, SIGNAL(contextMenuRequested(QContextMenuEvent*,QAction*))); - connect(m_actionListView, SIGNAL(actionContextMenuRequested(QContextMenuEvent*,QAction*)), - this, SIGNAL(contextMenuRequested(QContextMenuEvent*,QAction*))); + connect(m_actionTreeView, &ActionTreeView::actionContextMenuRequested, + this, &ActionView::contextMenuRequested); + connect(m_actionListView, &ActionListView::actionContextMenuRequested, + this, &ActionView::contextMenuRequested); // make it possible for vs integration to reimplement edit action dialog // [which it shouldn't do actually] @@ -514,8 +514,8 @@ // sync selection models QItemSelectionModel *selectionModel = m_actionTreeView->selectionModel(); m_actionListView->setSelectionModel(selectionModel); - connect(selectionModel, SIGNAL(selectionChanged(QItemSelection,QItemSelection)), - this, SIGNAL(selectionChanged(QItemSelection,QItemSelection))); + connect(selectionModel, &QItemSelectionModel::selectionChanged, + this, &ActionView::selectionChanged); } int ActionView::viewMode() const @@ -592,9 +592,11 @@ ActionView::ActionList ActionView::selectedActions() const { ActionList rc; - foreach (const QModelIndex &index, selection().indexes()) + const QModelIndexList &indexes = selection().indexes(); + for (const QModelIndex &index : indexes) { if (index.column() == 0) rc += actionOfItem(m_model->itemFromIndex(index)); + } return rc; } // ---------- ActionRepositoryMimeData @@ -623,9 +625,11 @@ if (!icon.isNull()) return icon.pixmap(QSize(22, 22)); - foreach (QWidget *w, action->associatedWidgets()) + const QWidgetList &associatedWidgets = action->associatedWidgets(); + for (QWidget *w : associatedWidgets) { if (QToolButton *tb = qobject_cast(w)) return tb->grab(QRect(0, 0, -1, -1)); + } // Create a QToolButton QToolButton *tb = new QToolButton; diff -Nru qttools-opensource-src-5.7.1/src/designer/src/lib/shared/connectionedit.cpp qttools-opensource-src-5.9.1/src/designer/src/lib/shared/connectionedit.cpp --- qttools-opensource-src-5.7.1/src/designer/src/lib/shared/connectionedit.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/designer/src/lib/shared/connectionedit.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -205,7 +205,7 @@ void DeleteConnectionsCommand::redo() { - foreach (Connection *con, m_con_list) { + for (Connection *con : qAsConst(m_con_list)) { const int idx = edit()->indexOfConnection(con); emit edit()->aboutToRemoveConnection(con); Q_ASSERT(edit()->m_con_list.contains(con)); @@ -219,7 +219,7 @@ void DeleteConnectionsCommand::undo() { - foreach (Connection *con, m_con_list) { + for (Connection *con : qAsConst(m_con_list)) { Q_ASSERT(!edit()->m_con_list.contains(con)); emit edit()->aboutToAddConnection(edit()->m_con_list.size()); edit()->m_con_list.append(con); @@ -987,7 +987,7 @@ if (!m_enable_update_background) return; - foreach(Connection *c, m_con_list) + for (Connection *c : qAsConst(m_con_list)) c->updateVisibility(); updateLines(); @@ -1065,7 +1065,7 @@ WidgetSet heavy_highlight_set, light_highlight_set; - foreach (Connection *con, m_con_list) { + for (Connection *con : qAsConst(m_con_list)) { if (!con->isVisible()) continue; @@ -1083,7 +1083,7 @@ c.setAlpha(BG_ALPHA); p.setBrush(c); - foreach (QWidget *w, heavy_highlight_set) { + for (QWidget *w : qAsConst(heavy_highlight_set)) { p.drawRect(fixRect(widgetRect(w))); light_highlight_set.remove(w); } @@ -1093,23 +1093,22 @@ c.setAlpha(BG_ALPHA); p.setBrush(c); - foreach (QWidget *w, light_highlight_set) + for (QWidget *w : qAsConst(light_highlight_set)) p.drawRect(fixRect(widgetRect(w))); p.setBrush(palette().color(QPalette::Base)); p.setPen(palette().color(QPalette::Text)); - foreach (Connection *con, m_con_list) { - if (!con->isVisible()) - continue; - - paintLabel(&p, EndPoint::Source, con); - paintLabel(&p, EndPoint::Target, con); + for (Connection *con : qAsConst(m_con_list)) { + if (con->isVisible()) { + paintLabel(&p, EndPoint::Source, con); + paintLabel(&p, EndPoint::Target, con); + } } p.setPen(m_active_color); p.setBrush(m_active_color); - foreach (Connection *con, m_con_list) { + for (Connection *con : qAsConst(m_con_list)) { if (!selected(con) || !con->isVisible()) continue; @@ -1428,7 +1427,7 @@ void ConnectionEdit::selectNone() { - foreach (Connection *con, m_sel_con_set) + for (Connection *con : qAsConst(m_sel_con_set)) con->update(); m_sel_con_set.clear(); @@ -1438,13 +1437,13 @@ { if (m_sel_con_set.size() == m_con_list.size()) return; - foreach (Connection *con, m_con_list) + for (Connection *con : qAsConst(m_con_list)) setSelected(con, true); } Connection *ConnectionEdit::connectionAt(const QPoint &pos) const { - foreach (Connection *con, m_con_list) { + for (Connection *con : m_con_list) { if (con->contains(pos)) return con; } @@ -1453,7 +1452,7 @@ CETypes::EndPoint ConnectionEdit::endPointAt(const QPoint &pos) const { - foreach (Connection *con, m_con_list) { + for (Connection *con : m_con_list) { if (!selected(con)) continue; const QRect sr = con->endPointRect(EndPoint::Source); @@ -1516,7 +1515,7 @@ void ConnectionEdit::updateLines() { - foreach (Connection *con, m_con_list) + for (Connection *con : qAsConst(m_con_list)) con->checkWidgets(); } diff -Nru qttools-opensource-src-5.7.1/src/designer/src/lib/shared/formlayoutmenu.cpp qttools-opensource-src-5.9.1/src/designer/src/lib/shared/formlayoutmenu.cpp --- qttools-opensource-src-5.7.1/src/designer/src/lib/shared/formlayoutmenu.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/designer/src/lib/shared/formlayoutmenu.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -68,13 +68,11 @@ // Struct that describes a row of controls (descriptive label and control) to // be added to a form layout. struct FormLayoutRow { - FormLayoutRow() : buddy(false) {} - QString labelName; QString labelText; QString fieldClassName; QString fieldName; - bool buddy; + bool buddy{false}; }; // A Dialog to edit a FormLayoutRow. Lets the user input a label text, label diff -Nru qttools-opensource-src-5.7.1/src/designer/src/lib/shared/formwindowbase.cpp qttools-opensource-src-5.9.1/src/designer/src/lib/shared/formwindowbase.cpp --- qttools-opensource-src-5.7.1/src/designer/src/lib/shared/formwindowbase.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/designer/src/lib/shared/formwindowbase.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -446,7 +446,7 @@ tr("Delete '%1'").arg(widget_list.front()->objectName()) : tr("Delete"); commandHistory()->beginMacro(description); - foreach (QWidget *w, widget_list) { + for (QWidget *w : qAsConst(widget_list)) { emit widgetRemoved(w); DeleteWidgetCommand *cmd = new DeleteWidgetCommand(this); cmd->init(w); @@ -533,7 +533,8 @@ // Test for non-laid toplevel spacers, which will not be saved // as not to throw off uic. QStringList problems; - foreach (const Spacer *spacer, mainContainer()->findChildren()) { + const auto &spacers = mainContainer()->findChildren(); + for (const Spacer *spacer : spacers) { if (spacer->parentWidget() && !spacer->parentWidget()->layout()) { problems.push_back(tr("

This file contains top level spacers.
" "They will not be saved.

" diff -Nru qttools-opensource-src-5.7.1/src/designer/src/lib/shared/iconloader.cpp qttools-opensource-src-5.9.1/src/designer/src/lib/shared/iconloader.cpp --- qttools-opensource-src-5.7.1/src/designer/src/lib/shared/iconloader.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/designer/src/lib/shared/iconloader.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -38,7 +38,7 @@ QDESIGNER_SHARED_EXPORT QIcon createIconSet(const QString &name) { - QStringList candidates = QStringList() + const QStringList candidates = QStringList() << (QString::fromUtf8(":/qt-project.org/formeditor/images/") + name) #ifdef Q_OS_MACOS << (QString::fromUtf8(":/qt-project.org/formeditor/images/mac/") + name) @@ -47,7 +47,7 @@ #endif << (QString::fromUtf8(":/qt-project.org/formeditor/images/designer_") + name); - foreach (const QString &f, candidates) { + for (const QString &f : candidates) { if (QFile::exists(f)) return QIcon(f); } @@ -60,6 +60,27 @@ return QIcon(QStringLiteral(":/qt-project.org/formeditor/images/emptyicon.png")); } +static QIcon buildIcon(const QString &prefix, const int *sizes, size_t sizeCount) +{ + QIcon result; + for (size_t i = 0; i < sizeCount; ++i) { + const QString size = QString::number(sizes[i]); + const QPixmap pixmap(prefix + size + QLatin1Char('x') + size + QStringLiteral(".png")); + Q_ASSERT(!pixmap.size().isEmpty()); + result.addPixmap(pixmap); + } + return result; +} + +QDESIGNER_SHARED_EXPORT QIcon qtLogoIcon() +{ + static const int sizes[] = {16, 24, 32, 64}; + static const QIcon result = + buildIcon(QStringLiteral(":/qt-project.org/formeditor/images/qtlogo"), + sizes, sizeof(sizes) / sizeof(sizes[0])); + return result; +} + } // namespace qdesigner_internal QT_END_NAMESPACE diff -Nru qttools-opensource-src-5.7.1/src/designer/src/lib/shared/iconloader_p.h qttools-opensource-src-5.9.1/src/designer/src/lib/shared/iconloader_p.h --- qttools-opensource-src-5.7.1/src/designer/src/lib/shared/iconloader_p.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/designer/src/lib/shared/iconloader_p.h 2017-06-23 12:03:39.000000000 +0000 @@ -51,6 +51,7 @@ QDESIGNER_SHARED_EXPORT QIcon createIconSet(const QString &name); QDESIGNER_SHARED_EXPORT QIcon emptyIcon(); +QDESIGNER_SHARED_EXPORT QIcon qtLogoIcon(); } // namespace qdesigner_internal diff -Nru qttools-opensource-src-5.7.1/src/designer/src/lib/shared/iconselector.cpp qttools-opensource-src-5.9.1/src/designer/src/lib/shared/iconselector.cpp --- qttools-opensource-src-5.7.1/src/designer/src/lib/shared/iconselector.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/designer/src/lib/shared/iconselector.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -229,9 +229,8 @@ icon = m_iconCache->icon(m_icon); QMap, PropertySheetPixmapValue> paths = m_icon.paths(); - QMapIterator, int> itIndex(m_stateToIndex); - while (itIndex.hasNext()) { - const QPair state = itIndex.next().key(); + for (auto itIndex = m_stateToIndex.cbegin(), end = m_stateToIndex.cend(); itIndex != end; ++itIndex) { + const QPair state = itIndex.key(); const PropertySheetPixmapValue pixmap = paths.value(state); const int index = itIndex.value(); @@ -461,9 +460,7 @@ int index = 0; QStringList items; - QListIterator, QString> > itName(d_ptr->m_stateToName); - while (itName.hasNext()) { - QPair, QString> item = itName.next(); + for (const auto &item : qAsConst(d_ptr->m_stateToName)) { const QPair state = item.first; const QString name = item.second; @@ -576,14 +573,14 @@ d->m_themeLineEdit = new QLineEdit; d->m_themeLineEdit->setValidator(new BlankSuppressingValidator(d->m_themeLineEdit)); - connect(d->m_themeLineEdit, SIGNAL(textChanged(QString)), this, SLOT(slotChanged(QString))); - connect(d->m_themeLineEdit, SIGNAL(textEdited(QString)), this, SIGNAL(edited(QString))); + connect(d->m_themeLineEdit, &QLineEdit::textChanged, this, &IconThemeEditor::slotChanged); + connect(d->m_themeLineEdit, &QLineEdit::textEdited, this, &IconThemeEditor::edited); mainHLayout->addWidget(d->m_themeLineEdit); if (wantResetButton) { QToolButton *themeResetButton = new QToolButton; themeResetButton->setIcon(createIconSet(QStringLiteral("resetproperty.png"))); - connect(themeResetButton, SIGNAL(clicked()), this, SLOT(reset())); + connect(themeResetButton, &QAbstractButton::clicked, this, &IconThemeEditor::reset); mainHLayout->addWidget(themeResetButton); } diff -Nru qttools-opensource-src-5.7.1/src/designer/src/lib/shared/layout.cpp qttools-opensource-src-5.9.1/src/designer/src/lib/shared/layout.cpp --- qttools-opensource-src-5.7.1/src/designer/src/lib/shared/layout.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/designer/src/lib/shared/layout.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -143,7 +143,7 @@ // Widgets which are already laid out are thrown away here too QMultiMap lists; - foreach (QWidget *w, m_widgets) { + for (QWidget *w : qAsConst(m_widgets)) { QWidget *p = w->parentWidget(); if (p && LayoutInfo::layoutType(m_formWindow->core(), p) != LayoutInfo::NoLayout @@ -154,12 +154,10 @@ } QWidgetList lastList; - QWidgetList parents = lists.keys(); - foreach (QWidget *p, parents) { - QWidgetList children = lists.values(p); - - if (children.count() > lastList.count()) - lastList = children; + const QWidgetList &parents = lists.keys(); + for (QWidget *p : parents) { + if (lists.count(p) > lastList.count()) + lastList = lists.values(p); } @@ -189,7 +187,7 @@ // be placed and connect to widgetDestroyed() signals of the // widgets to get informed if one gets deleted to be able to // handle that and do not crash in this case - foreach (QWidget *w, m_widgets) { + for (QWidget *w : qAsConst(m_widgets)) { connect(w, &QObject::destroyed, this, &Layout::widgetDestroyed); m_startPoint = QPoint(qMin(m_startPoint.x(), w->x()), qMin(m_startPoint.y(), w->y())); const QRect rc(w->geometry()); @@ -214,9 +212,8 @@ bool Layout::prepareLayout(bool &needMove, bool &needReparent) { - foreach (QWidget *widget, m_widgets) { + for (QWidget *widget : qAsConst(m_widgets)) widget->raise(); - } needMove = !m_layoutBase; needReparent = needMove || (m_reparentLayoutWidget && qobject_cast(m_layoutBase)) || qobject_cast(m_layoutBase); @@ -328,10 +325,7 @@ m_formWindow->selectWidget(m_layoutBase, false); QDesignerWidgetFactoryInterface *widgetFactory = m_formWindow->core()->widgetFactory(); - QHashIterator it(m_geometries); - while (it.hasNext()) { - it.next(); - + for (auto it = m_geometries.cbegin(), end = m_geometries.cend(); it != end; ++it) { if (!it.key()) continue; @@ -378,7 +372,7 @@ * to grow (expanding widgets like QTextEdit), in which the geometry is * preserved. Note that historically, geometries were re-applied * only after breaking splitters. */ - foreach (QWidget *w, m_widgets) { + for (QWidget *w : qAsConst(m_widgets)) { const QRect geom = w->geometry(); const QSize sizeHint = w->sizeHint(); const bool restoreGeometry = sizeHint.isEmpty() || sizeHint.width() > geom.width() || sizeHint.height() > geom.height(); @@ -395,10 +389,7 @@ m_layoutBase != m_formWindow->mainContainer()); const bool add = m_geometries.isEmpty(); - QMapIterator it(rects); - while (it.hasNext()) { - it.next(); - + for (auto it = rects.cbegin(), end = rects.cend(); it != end; ++it) { QWidget *w = it.key(); if (needReparent) { w->setParent(m_layoutBase->parentWidget(), 0); @@ -606,17 +597,13 @@ void setCells(const QRect &c, QWidget* w); - bool empty() const { return m_nrows * m_ncols; } + bool empty() const { return !m_nrows || !m_ncols; } int numRows() const { return m_nrows; } int numCols() const { return m_ncols; } void simplify(); bool locateWidget(QWidget* w, int& row, int& col, int& rowspan, int& colspan) const; - QDebug debug(QDebug str) const; - friend inline QDebug operator<<(QDebug str, const Grid &g) - { return g.debug(str); } - private: void setCell(int row, int col, QWidget* w) { m_cells[ row * m_ncols + col] = w; } void shrink(); @@ -668,26 +655,6 @@ } } -QDebug Grid::debug(QDebug str) const -{ - str << m_nrows << 'x' << m_ncols << '\n'; - QSet widgets; - const int cellCount = m_nrows * m_ncols; - int row, col, rowspan, colspan; - for (int c = 0; c < cellCount; c++) - if (QWidget *w = m_cells[c]) - if (!widgets.contains(w)) { - widgets.insert(w); - locateWidget(w, row, col, rowspan, colspan); - str << w << " at " << row << col << rowspan << 'x' << colspan << '\n'; - } - for (int r = 0; r < m_nrows; r++) - for (int c = 0; c < m_ncols; c++) - str << "At " << r << c << cell(r, c) << '\n'; - - return str; -} - void Grid::setCells(const QRect &c, QWidget* w) { const int bottom = c.top() + c.height(); @@ -976,8 +943,10 @@ for (WidgetSet::const_iterator it = widgets.constBegin(); it != cend ; ++it) { QWidget *w = *it; int row, col, rowspan, colspan; - if (!locateWidget(w, row, col, rowspan, colspan)) + if (!locateWidget(w, row, col, rowspan, colspan)) { qDebug("ooops, widget '%s' does not fit in layout", w->objectName().toUtf8().constData()); + row = col = rowspan = colspan = 0; + } const int maxColSpan = col == 0 ? 2 : 1; const int newColSpan = qMin(colspan, maxColSpan); const int newRowSpan = qMin(rowspan, maxRowSpan); @@ -1120,7 +1089,7 @@ GridLikeLayout *layout = static_cast(createLayout(LayoutType)); - if (m_grid.empty()) + if (!m_grid.empty()) sort(); QDesignerWidgetItemInstaller wii; // Make sure we use QDesignerWidgetItem. diff -Nru qttools-opensource-src-5.7.1/src/designer/src/lib/shared/newactiondialog.cpp qttools-opensource-src-5.9.1/src/designer/src/lib/shared/newactiondialog.cpp --- qttools-opensource-src-5.7.1/src/designer/src/lib/shared/newactiondialog.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/designer/src/lib/shared/newactiondialog.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -43,13 +43,6 @@ QT_BEGIN_NAMESPACE namespace qdesigner_internal { -// -------------------- ActionData - -ActionData::ActionData() : - checkable(false) -{ -} - // Returns a combination of ChangeMask flags unsigned ActionData::compare(const ActionData &rhs) const { diff -Nru qttools-opensource-src-5.7.1/src/designer/src/lib/shared/newactiondialog_p.h qttools-opensource-src-5.9.1/src/designer/src/lib/shared/newactiondialog_p.h --- qttools-opensource-src-5.7.1/src/designer/src/lib/shared/newactiondialog_p.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/designer/src/lib/shared/newactiondialog_p.h 2017-06-23 12:03:39.000000000 +0000 @@ -62,7 +62,6 @@ IconChanged = 0x8, CheckableChanged = 0x10, KeysequenceChanged = 0x20 }; - ActionData(); // Returns a combination of ChangeMask flags unsigned compare(const ActionData &rhs) const; @@ -70,7 +69,7 @@ QString name; QString toolTip; PropertySheetIconValue icon; - bool checkable; + bool checkable{false}; PropertySheetKeySequenceValue keysequence; }; diff -Nru qttools-opensource-src-5.7.1/src/designer/src/lib/shared/plugindialog.cpp qttools-opensource-src-5.9.1/src/designer/src/lib/shared/plugindialog.cpp --- qttools-opensource-src-5.7.1/src/designer/src/lib/shared/plugindialog.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/designer/src/lib/shared/plugindialog.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -29,6 +29,7 @@ #include "plugindialog_p.h" #include "pluginmanager_p.h" +#include "iconloader_p.h" #include #include @@ -92,7 +93,7 @@ QTreeWidgetItem *topLevelItem = setTopLevelItem(tr("Loaded Plugins")); QFont boldFont = topLevelItem->font(0); - foreach (const QString &fileName, fileNames) { + for (const QString &fileName : fileNames) { QPluginLoader loader(fileName); const QFileInfo fileInfo(fileName); @@ -100,7 +101,8 @@ if (QObject *plugin = loader.instance()) { if (const QDesignerCustomWidgetCollectionInterface *c = qobject_cast(plugin)) { - foreach (const QDesignerCustomWidgetInterface *p, c->customWidgets()) + const QList &collCustomWidgets = c->customWidgets(); + for (const QDesignerCustomWidgetInterface *p : collCustomWidgets) setItem(pluginItem, p->name(), p->toolTip(), p->whatsThis(), p->icon()); } else { if (const QDesignerCustomWidgetInterface *p = qobject_cast(plugin)) @@ -114,7 +116,7 @@ if (!notLoadedPlugins.isEmpty()) { QTreeWidgetItem *topLevelItem = setTopLevelItem(tr("Failed Plugins")); const QFont boldFont = topLevelItem->font(0); - foreach (const QString &plugin, notLoadedPlugins) { + for (const QString &plugin : notLoadedPlugins) { const QString failureReason = pluginManager->failureReason(plugin); QTreeWidgetItem *pluginItem = setPluginItem(topLevelItem, plugin, boldFont); setItem(pluginItem, failureReason, failureReason, QString(), QIcon()); @@ -129,14 +131,6 @@ } } -QIcon PluginDialog::pluginIcon(const QIcon &icon) -{ - if (icon.isNull()) - return QIcon(QStringLiteral(":/qt-project.org/formeditor/images/qtlogo.png")); - - return icon; -} - QTreeWidgetItem* PluginDialog::setTopLevelItem(const QString &itemName) { QTreeWidgetItem *topLevelItem = new QTreeWidgetItem(ui.treeWidget); @@ -170,7 +164,7 @@ item->setText(0, name); item->setToolTip(0, toolTip); item->setWhatsThis(0, whatsThis); - item->setIcon(0, pluginIcon(icon)); + item->setIcon(0, icon.isNull() ? qtLogoIcon() : icon); } void PluginDialog::updateCustomWidgetPlugins() diff -Nru qttools-opensource-src-5.7.1/src/designer/src/lib/shared/plugindialog_p.h qttools-opensource-src-5.9.1/src/designer/src/lib/shared/plugindialog_p.h --- qttools-opensource-src-5.7.1/src/designer/src/lib/shared/plugindialog_p.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/designer/src/lib/shared/plugindialog_p.h 2017-06-23 12:03:39.000000000 +0000 @@ -59,7 +59,6 @@ private: void populateTreeWidget(); - QIcon pluginIcon(const QIcon &icon); QTreeWidgetItem* setTopLevelItem(const QString &itemName); QTreeWidgetItem* setPluginItem(QTreeWidgetItem *topLevelItem, const QString &itemName, const QFont &font); diff -Nru qttools-opensource-src-5.7.1/src/designer/src/lib/shared/pluginmanager.cpp qttools-opensource-src-5.9.1/src/designer/src/lib/shared/pluginmanager.cpp --- qttools-opensource-src-5.7.1/src/designer/src/lib/shared/pluginmanager.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/designer/src/lib/shared/pluginmanager.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -101,7 +101,7 @@ const QStringList path_list = QCoreApplication::libraryPaths(); const QString designer = QStringLiteral("designer"); - foreach (const QString &path, path_list) { + for (const QString &path : path_list) { QString libPath = path; libPath += QDir::separator(); libPath += designer; @@ -546,7 +546,8 @@ return; } if (const QDesignerCustomWidgetCollectionInterface *coll = qobject_cast(o)) { - foreach(QDesignerCustomWidgetInterface *c, coll->customWidgets()) + const QList &collCustomWidgets = coll->customWidgets(); + for (QDesignerCustomWidgetInterface *c : collCustomWidgets) addCustomWidget(c, pluginPath, designerLanguage); } } @@ -663,7 +664,7 @@ if (debugPluginManager) qDebug() << Q_FUNC_INFO; m_d->m_registeredPlugins.clear(); - foreach (const QString &path, m_d->m_pluginPaths) + for (const QString &path : qAsConst(m_d->m_pluginPaths)) registerPath(path); } @@ -673,7 +674,7 @@ qDebug() << Q_FUNC_INFO; const int before = m_d->m_registeredPlugins.size(); - foreach (const QString &path, m_d->m_pluginPaths) + for (const QString &path : qAsConst(m_d->m_pluginPaths)) registerPath(path); const bool newPluginsFound = m_d->m_registeredPlugins.size() > before; // We force a re-initialize as Jambi collection might return @@ -688,9 +689,8 @@ { if (debugPluginManager) qDebug() << Q_FUNC_INFO << path; - QStringList candidates = findPlugins(path); - - foreach (const QString &plugin, candidates) + const QStringList &candidates = findPlugins(path); + for (const QString &plugin : candidates) registerPlugin(plugin); } @@ -742,12 +742,13 @@ const QObjectList staticPluginObjects = QPluginLoader::staticInstances(); if (!staticPluginObjects.empty()) { const QString staticPluginPath = QCoreApplication::applicationFilePath(); - foreach(QObject *o, staticPluginObjects) + for (QObject *o : staticPluginObjects) m_d->addCustomWidgets(o, staticPluginPath, designerLanguage); } - foreach (const QString &plugin, m_d->m_registeredPlugins) + for (const QString &plugin : qAsConst(m_d->m_registeredPlugins)) { if (QObject *o = instance(plugin)) m_d->addCustomWidgets(o, plugin, designerLanguage); + } m_d->m_initialized = true; } @@ -777,10 +778,10 @@ QObjectList QDesignerPluginManager::instances() const { - QStringList plugins = registeredPlugins(); + const QStringList &plugins = registeredPlugins(); QObjectList lst; - foreach (const QString &plugin, plugins) { + for (const QString &plugin : plugins) { if (QObject *o = instance(plugin)) lst.append(o); } diff -Nru qttools-opensource-src-5.7.1/src/designer/src/lib/shared/promotionmodel.cpp qttools-opensource-src-5.9.1/src/designer/src/lib/shared/promotionmodel.cpp --- qttools-opensource-src-5.7.1/src/designer/src/lib/shared/promotionmodel.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/designer/src/lib/shared/promotionmodel.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -65,17 +65,16 @@ } // Create an editable model row for a promoted class. - StandardItemList promotedModelRow(const QDesignerWidgetDataBaseInterface *widgetDataBase, + StandardItemList promotedModelRow(QDesignerWidgetDataBaseItemInterface *baseItem, QDesignerWidgetDataBaseItemInterface *dbItem, - bool referenced = false) { - - const int index = widgetDataBase->indexOf(dbItem); + bool referenced) + { + qdesigner_internal::PromotionModel::ModelData data; + data.baseItem = baseItem; + data.promotedItem = dbItem; + data.referenced = referenced; - // Associate user data: database index and enabled flag - QVariantList userDataList; - userDataList.push_back(QVariant(index)); - userDataList.push_back(QVariant(referenced)); - const QVariant userData(userDataList); + const QVariant userData = qVariantFromValue(data); StandardItemList rc = modelRow(); // name @@ -135,7 +134,6 @@ const QSet usedPromotedClasses = m_core->promotion()->referencedPromotedClassNames(); - QDesignerWidgetDataBaseInterface *widgetDataBase = m_core->widgetDataBase(); QDesignerWidgetDataBaseItemInterface *baseClass = 0; QStandardItem *baseItem = 0; @@ -150,15 +148,15 @@ } Q_ASSERT(baseItem); // Append derived - baseItem->appendRow(promotedModelRow(widgetDataBase, it->promotedItem, usedPromotedClasses.contains(it->promotedItem->name()))); + baseItem->appendRow(promotedModelRow(it->baseItem, it->promotedItem, usedPromotedClasses.contains(it->promotedItem->name()))); } } void PromotionModel::slotItemChanged(QStandardItem * changedItem) { // Retrieve DB item - bool referenced; - QDesignerWidgetDataBaseItemInterface *dbItem = databaseItem(changedItem, &referenced); - Q_ASSERT(dbItem); + const ModelData data = modelData(changedItem); + Q_ASSERT(data.isValid()); + QDesignerWidgetDataBaseItemInterface *dbItem = data.promotedItem; // Change header or type switch (changedItem->column()) { case ClassNameColumn: @@ -176,26 +174,15 @@ } } - QDesignerWidgetDataBaseItemInterface *PromotionModel::databaseItemAt(const QModelIndex &index, bool *referenced) const { - if (const QStandardItem *item = itemFromIndex (index)) - return databaseItem(item, referenced); - - *referenced = false; - return 0; + PromotionModel::ModelData PromotionModel::modelData(const QStandardItem *item) const + { + const QVariant userData = item->data(); + return userData.canConvert() ? userData.value() : ModelData(); } - QDesignerWidgetDataBaseItemInterface *PromotionModel::databaseItem(const QStandardItem * item, bool *referenced) const { - // Decode user data associated with item. - const QVariant data = item->data(); - if (data.type() != QVariant::List) { - *referenced = false; - return 0; - } - - const QVariantList dataList = data.toList(); - const int index = dataList[0].toInt(); - *referenced = dataList[1].toBool(); - return m_core->widgetDataBase()->item(index); + PromotionModel::ModelData PromotionModel::modelData(const QModelIndex &index) const + { + return index.isValid() ? modelData(itemFromIndex(index)) : ModelData(); } QModelIndex PromotionModel::indexOfClass(const QString &className) const { diff -Nru qttools-opensource-src-5.7.1/src/designer/src/lib/shared/promotionmodel_p.h qttools-opensource-src-5.9.1/src/designer/src/lib/shared/promotionmodel_p.h --- qttools-opensource-src-5.7.1/src/designer/src/lib/shared/promotionmodel_p.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/designer/src/lib/shared/promotionmodel_p.h 2017-06-23 12:03:39.000000000 +0000 @@ -41,6 +41,7 @@ #define PROMOTIONMODEL_H #include +#include #include QT_BEGIN_NAMESPACE @@ -55,12 +56,20 @@ Q_OBJECT public: + struct ModelData { + bool isValid() const { return promotedItem != nullptr; } + + QDesignerWidgetDataBaseItemInterface *baseItem{nullptr}; + QDesignerWidgetDataBaseItemInterface *promotedItem{nullptr}; + bool referenced{false}; + }; + explicit PromotionModel(QDesignerFormEditorInterface *core); void updateFromWidgetDatabase(); - // Return item at model index or 0. - QDesignerWidgetDataBaseItemInterface *databaseItemAt(const QModelIndex &, bool *referenced) const; + ModelData modelData(const QModelIndex &index) const; + ModelData modelData(const QStandardItem *item) const; QModelIndex indexOfClass(const QString &className) const; @@ -73,8 +82,6 @@ private: void initializeHeaders(); - // Retrieve data base item of item or return 0. - QDesignerWidgetDataBaseItemInterface *databaseItem(const QStandardItem * item, bool *referenced) const; QDesignerFormEditorInterface *m_core; }; @@ -82,4 +89,6 @@ QT_END_NAMESPACE +Q_DECLARE_METATYPE(qdesigner_internal::PromotionModel::ModelData) + #endif // PROMOTIONMODEL_H diff -Nru qttools-opensource-src-5.7.1/src/designer/src/lib/shared/qdesigner_command.cpp qttools-opensource-src-5.9.1/src/designer/src/lib/shared/qdesigner_command.cpp --- qttools-opensource-src-5.7.1/src/designer/src/lib/shared/qdesigner_command.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/designer/src/lib/shared/qdesigner_command.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -630,7 +630,7 @@ void PromoteToCustomWidgetCommand::redo() { - foreach (QWidget *w, m_widgets) { + for (QWidget *w : qAsConst(m_widgets)) { if (w) promoteWidget(core(), w, m_customClassName); } @@ -649,7 +649,7 @@ void PromoteToCustomWidgetCommand::undo() { - foreach (QWidget *w, m_widgets) { + for (QWidget *w : qAsConst(m_widgets)) { if (w) demoteWidget(core(), w); } @@ -864,7 +864,7 @@ m_layout->breakLayout(); delete deco; // release the extension - foreach (QWidget *widget, m_widgets) { + for (QWidget *widget : qAsConst(m_widgets)) { widget->resize(widget->size().expandedTo(QSize(16, 16))); } // Update unless we are in an intermediate state of morphing layout @@ -2172,7 +2172,7 @@ template static void copyRolesFromItem(ItemData *id, const T *item, bool editor) { - static const int defaultFlags = T().flags(); + static const Qt::ItemFlags defaultFlags = T().flags(); for (int i = 0; itemRoles[i] != -1; i++) copyRoleFromItem(id, itemRoles[i], item); @@ -2180,7 +2180,7 @@ if (editor) copyRoleFromItem(id, ItemFlagsShadowRole, item); else if (item->flags() != defaultFlags) - id->m_properties.insert(ItemFlagsShadowRole, QVariant::fromValue((int)item->flags())); + id->m_properties.insert(ItemFlagsShadowRole, QVariant::fromValue(int(item->flags()))); } template @@ -2297,7 +2297,7 @@ { QTreeWidgetItem *item = new QTreeWidgetItem; int i = 0; - foreach (const ItemData &id, m_items) + for (const ItemData &id : m_items) id.fillTreeItemColumn(item, i++, iconCache); return item; } @@ -2315,7 +2315,7 @@ listWidget->clear(); int i = 0; - foreach (const ItemData &entry, m_items) { + for (const ItemData &entry : m_items) { if (!entry.isValid()) new QListWidgetItem(TableWidgetContents::defaultHeaderText(i), listWidget); else @@ -2348,7 +2348,7 @@ { comboBox->clear(); - foreach (const ItemData &hash, m_items) { + for (const ItemData &hash : m_items) { QIcon icon; if (iconCache) icon = iconCache->icon(qvariant_cast( @@ -2389,7 +2389,7 @@ bool TableWidgetContents::nonEmpty(const QTableWidgetItem *item, int headerColumn) { - static int defaultFlags = QTableWidgetItem().flags(); + static const Qt::ItemFlags defaultFlags = QTableWidgetItem().flags(); if (item->flags() != defaultFlags) return true; @@ -2448,14 +2448,14 @@ // horiz header int col = 0; - foreach (const ItemData &id, m_horizontalHeader.m_items) { + for (const ItemData &id : m_horizontalHeader.m_items) { if (id.isValid()) tableWidget->setHorizontalHeaderItem(col, id.createTableItem(iconCache, editor)); col++; } // vertical header int row = 0; - foreach (const ItemData &id, m_verticalHeader.m_items) { + for (const ItemData &id : m_verticalHeader.m_items) { if (id.isValid()) tableWidget->setVerticalHeaderItem(row, id.createTableItem(iconCache, editor)); row++; @@ -2510,13 +2510,13 @@ TreeWidgetContents::ItemContents::ItemContents(const QTreeWidgetItem *item, bool editor) : ListContents(item) { - static const int defaultFlags = QTreeWidgetItem().flags(); + static const Qt::ItemFlags defaultFlags = QTreeWidgetItem().flags(); if (editor) { QVariant v = item->data(0, ItemFlagsShadowRole); m_itemFlags = v.isValid() ? v.toInt() : -1; } else { - m_itemFlags = (item->flags() != defaultFlags) ? (int)item->flags() : -1; + m_itemFlags = (item->flags() != defaultFlags) ? int(item->flags()) : -1; } for (int i = 0; i < item->childCount(); i++) @@ -2537,7 +2537,7 @@ item->setFlags((Qt::ItemFlags)m_itemFlags); } - foreach (const ItemContents &ic, m_children) + for (const ItemContents &ic : m_children) item->addChild(ic.createTreeItem(iconCache, editor)); return item; @@ -2571,7 +2571,7 @@ treeWidget->setColumnCount(m_headerItem.m_items.count()); treeWidget->setHeaderItem(m_headerItem.createTreeItem(iconCache)); - foreach (const ItemContents &ic, m_rootItems) + for (const ItemContents &ic : m_rootItems) treeWidget->addTopLevelItem(ic.createTreeItem(iconCache, editor)); treeWidget->expandAll(); } @@ -2694,7 +2694,8 @@ { RemoveActionCommand::ActionData result; // We only want menus and toolbars, no toolbuttons. - foreach (QWidget *widget, action->associatedWidgets()) + const QWidgetList &associatedWidgets = action->associatedWidgets(); + for (QWidget *widget : associatedWidgets) { if (qobject_cast(widget) || qobject_cast(widget)) { const QList actionList = widget->actions(); const int size = actionList.size(); @@ -2708,6 +2709,7 @@ } } } + } return result; } @@ -2722,7 +2724,7 @@ void RemoveActionCommand::redo() { QDesignerFormWindowInterface *fw = formWindow(); - foreach (const ActionDataItem &item, m_actionData) { + for (const ActionDataItem &item : qAsConst(m_actionData)) { item.widget->removeAction(m_action); } // Notify components (for example, signal slot editor) @@ -2739,9 +2741,8 @@ { core()->actionEditor()->setFormWindow(formWindow()); core()->actionEditor()->manageAction(m_action); - foreach (const ActionDataItem &item, m_actionData) { + for (const ActionDataItem &item : qAsConst(m_actionData)) item.widget->insertAction(item.before, m_action); - } if (!m_actionData.empty()) core()->objectInspector()->setFormWindow(formWindow()); } diff -Nru qttools-opensource-src-5.7.1/src/designer/src/lib/shared/qdesigner_dnditem.cpp qttools-opensource-src-5.9.1/src/designer/src/lib/shared/qdesigner_dnditem.cpp --- qttools-opensource-src-5.7.1/src/designer/src/lib/shared/qdesigner_dnditem.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/designer/src/lib/shared/qdesigner_dnditem.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -222,9 +222,10 @@ const Qt::DropAction executedAction = drag->exec(Qt::CopyAction|Qt::MoveAction, mimeData->proposedDropAction()); - if (executedAction == Qt::IgnoreAction && !reshowWidgets.empty()) - foreach (QWidget *w, reshowWidgets) + if (executedAction == Qt::IgnoreAction) { + for (QWidget *w : qAsConst(reshowWidgets)) w->show(); + } return executedAction; } @@ -251,10 +252,9 @@ if (QWidget *w = (*it)->widget()) if (FormWindowBase *fb = qobject_cast((*it)->source())) formWidgetMap.insert(fb, w); - if (formWidgetMap.empty()) - return; - foreach (FormWindowBase * fb, formWidgetMap.keys()) + const QList &formWindows = formWidgetMap.uniqueKeys(); + for (FormWindowBase *fb : formWindows) fb->deleteWidgetList(formWidgetMap.values(fb)); } diff -Nru qttools-opensource-src-5.7.1/src/designer/src/lib/shared/qdesigner_formbuilder.cpp qttools-opensource-src-5.9.1/src/designer/src/lib/shared/qdesigner_formbuilder.cpp --- qttools-opensource-src-5.7.1/src/designer/src/lib/shared/qdesigner_formbuilder.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/designer/src/lib/shared/qdesigner_formbuilder.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -301,7 +301,7 @@ QStringList paths; if (resources != 0) { const QList dom_include = resources->elementInclude(); - foreach (DomResource *res, dom_include) { + for (DomResource *res : dom_include) { QString path = QDir::cleanPath(workingDirectory().absoluteFilePath(res->attributeLocation())); paths << path; } diff -Nru qttools-opensource-src-5.7.1/src/designer/src/lib/shared/qdesigner_membersheet.cpp qttools-opensource-src-5.9.1/src/designer/src/lib/shared/qdesigner_membersheet.cpp --- qttools-opensource-src-5.7.1/src/designer/src/lib/shared/qdesigner_membersheet.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/designer/src/lib/shared/qdesigner_membersheet.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -69,10 +69,8 @@ class Info { public: - inline Info() : visible(true) {} - QString group; - bool visible; + bool visible{true}; }; typedef QHash InfoHash; diff -Nru qttools-opensource-src-5.7.1/src/designer/src/lib/shared/qdesigner_menubar.cpp qttools-opensource-src-5.9.1/src/designer/src/lib/shared/qdesigner_menubar.cpp --- qttools-opensource-src-5.7.1/src/designer/src/lib/shared/qdesigner_menubar.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/designer/src/lib/shared/qdesigner_menubar.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -117,7 +117,8 @@ QPainter p(this); - foreach (QAction *a, actions()) { + const auto &actionList = actions(); + for (QAction *a : actionList) { if (qobject_cast(a)) { const QRect g = actionGeometry(a); QLinearGradient lg(g.left(), g.top(), g.left(), g.bottom()); @@ -541,7 +542,7 @@ case QEvent::MouseButtonRelease: case QEvent::MouseButtonDblClick: dispatch = (object != m_editor); - // no break + Q_FALLTHROUGH(); // no break case QEvent::Enter: case QEvent::Leave: diff -Nru qttools-opensource-src-5.7.1/src/designer/src/lib/shared/qdesigner_menu.cpp qttools-opensource-src-5.9.1/src/designer/src/lib/shared/qdesigner_menu.cpp --- qttools-opensource-src-5.7.1/src/designer/src/lib/shared/qdesigner_menu.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/designer/src/lib/shared/qdesigner_menu.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -569,7 +569,8 @@ QAction *current = currentAction(); - foreach (QAction *a, actions()) { + const QList &actionList = actions(); + for (QAction *a : actionList) { const QRect g = actionGeometry(a); if (qobject_cast(a)) { @@ -616,13 +617,9 @@ QDesignerMenu *QDesignerMenu::findActivatedMenu() const { - QList candidates; - candidates.append(const_cast(this)); - candidates += findChildren(); - - foreach (QDesignerMenu *m, candidates) { - if (m == qApp->activeWindow()) - return m; + if (QDesignerMenu *activeDesignerMenu = qobject_cast(QApplication::activeWindow())) { + if (activeDesignerMenu == this || findChildren().contains(activeDesignerMenu)) + return activeDesignerMenu; } return 0; @@ -658,12 +655,12 @@ QApplication::activePopupWidget()->close(); } - // fall through + Q_FALLTHROUGH(); // fall through case QEvent::KeyPress: case QEvent::KeyRelease: case QEvent::MouseMove: dispatch = (object != m_editor); - // no break + Q_FALLTHROUGH(); // no break case QEvent::Enter: case QEvent::Leave: @@ -855,9 +852,9 @@ w = w->parentWidget(); if (w) { - foreach (QMenu *subMenu, w->findChildren()) { + const QList &menus = w->findChildren(); + for (QMenu *subMenu : menus) subMenu->hide(); - } } m_lastSubMenuIndex = -1; @@ -1031,7 +1028,8 @@ bool QDesignerMenu::canCreateSubMenu(QAction *action) const // ### improve it's a bit too slow { - foreach (const QWidget *aw, action->associatedWidgets()) + const QWidgetList &associatedWidgets = action->associatedWidgets(); + for (const QWidget *aw : associatedWidgets) { if (aw != this) { if (const QMenu *m = qobject_cast(aw)) { if (m->actions().contains(action)) @@ -1042,6 +1040,7 @@ return false; // sorry } } + } return true; } @@ -1310,9 +1309,9 @@ void QDesignerMenu::hideSubMenu() { m_lastSubMenuIndex = -1; - foreach (QMenu *subMenu, findChildren()) { + const QList &menus = findChildren(); + for (QMenu *subMenu : menus) subMenu->hide(); - } } void QDesignerMenu::deleteAction() diff -Nru qttools-opensource-src-5.7.1/src/designer/src/lib/shared/qdesigner_objectinspector.cpp qttools-opensource-src-5.9.1/src/designer/src/lib/shared/qdesigner_objectinspector.cpp --- qttools-opensource-src-5.7.1/src/designer/src/lib/shared/qdesigner_objectinspector.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/designer/src/lib/shared/qdesigner_objectinspector.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -56,9 +56,9 @@ QObjectList Selection::selection() const { QObjectList rc(objects); - foreach (QObject* o, managed) + for (QObject *o : managed) rc.push_back(o); - foreach (QObject* o, unmanaged) + for (QObject *o : unmanaged) rc.push_back(o); return rc; } diff -Nru qttools-opensource-src-5.7.1/src/designer/src/lib/shared/qdesigner_promotion.cpp qttools-opensource-src-5.9.1/src/designer/src/lib/shared/qdesigner_promotion.cpp --- qttools-opensource-src-5.7.1/src/designer/src/lib/shared/qdesigner_promotion.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/designer/src/lib/shared/qdesigner_promotion.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -116,6 +116,13 @@ } } +static void markFormsDirty(const QDesignerFormEditorInterface *core) +{ + const QDesignerFormWindowManagerInterface *fwm = core->formWindowManager(); + for (int f = 0, count = fwm->formWindowCount(); f < count; ++f) + fwm->formWindow(f)->setDirty(true); +} + namespace qdesigner_internal { QDesignerPromotion::QDesignerPromotion(QDesignerFormEditorInterface *core) : @@ -153,6 +160,7 @@ promotedItem->setExtends(baseClass); promotedItem->setIncludeFile(includeFile); widgetDataBase->append(promotedItem); + markFormsDirty(m_core); return true; } @@ -303,6 +311,7 @@ } } widgetDataBase->remove(index); + markFormsDirty(m_core); return true; } @@ -332,7 +341,8 @@ // Change the name in the data base and change all referencing objects in the meta database dbItem->setName(newClassName); bool foundReferences = false; - foreach (QObject* object, metaDataBase->objects()) { + const QObjectList &dbObjects = metaDataBase->objects(); + for (QObject* object : dbObjects) { MetaDataBaseItem *item = metaDataBase->metaDataBaseItem(object); Q_ASSERT(item); if (item->customClassName() == oldclassName) { @@ -344,6 +354,7 @@ if (foundReferences) refreshObjectInspector(); + markFormsDirty(m_core); return true; } @@ -358,8 +369,10 @@ QDesignerWidgetDataBaseItemInterface *dbItem = promotedWidgetDataBaseItem(widgetDataBase, className, errorMessage); if (!dbItem) return false; - - dbItem->setIncludeFile(includeFile); + if (dbItem->includeFile() != includeFile) { + dbItem->setIncludeFile(includeFile); + markFormsDirty(m_core); + } return true; } diff -Nru qttools-opensource-src-5.7.1/src/designer/src/lib/shared/qdesigner_promotiondialog.cpp qttools-opensource-src-5.9.1/src/designer/src/lib/shared/qdesigner_promotiondialog.cpp --- qttools-opensource-src-5.7.1/src/designer/src/lib/shared/qdesigner_promotiondialog.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/designer/src/lib/shared/qdesigner_promotiondialog.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -355,12 +355,11 @@ const QModelIndexList indexes = selected.indexes(); if (indexes.empty()) return 0; - - bool referenced; - QDesignerWidgetDataBaseItemInterface *dbItem = m_model->databaseItemAt(indexes.front(), &referenced); + const PromotionModel::ModelData data = m_model->modelData(indexes.constFirst()); + QDesignerWidgetDataBaseItemInterface *dbItem = data.promotedItem; if (dbItem) { - if (referenced) + if (data.referenced) flags |= Referenced; // In choose mode, can we promote to the class? if (m_mode == ModeEditChooseClass && dbItem && dbItem->isPromoted() && dbItem->extends() == m_promotableWidgetClassName) diff -Nru qttools-opensource-src-5.7.1/src/designer/src/lib/shared/qdesigner_propertycommand.cpp qttools-opensource-src-5.9.1/src/designer/src/lib/shared/qdesigner_propertycommand.cpp --- qttools-opensource-src-5.7.1/src/designer/src/lib/shared/qdesigner_propertycommand.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/designer/src/lib/shared/qdesigner_propertycommand.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -1005,7 +1005,7 @@ if (!add(referenceObject, apropertyName)) return false; } - foreach (QObject *o, list) { + for (QObject *o : list) { if (o != referenceObject) add(o, apropertyName); } @@ -1380,9 +1380,7 @@ m_value = value; - QListIterator it(selection); - while (it.hasNext()) { - QObject *obj = it.next(); + for (QObject *obj : selection) { if (m_selection.contains(obj)) continue; dynamicSheet = qt_extension(core->extensionManager(), obj); @@ -1398,9 +1396,7 @@ void AddDynamicPropertyCommand::redo() { QDesignerFormEditorInterface *core = formWindow()->core(); - QListIterator it(m_selection); - while (it.hasNext()) { - QObject *obj = it.next(); + for (QObject *obj : qAsConst(m_selection)) { QDesignerDynamicPropertySheetExtension *dynamicSheet = qt_extension(core->extensionManager(), obj); dynamicSheet->addDynamicProperty(m_propertyName, m_value); if (QDesignerPropertyEditorInterface *propertyEditor = formWindow()->core()->propertyEditor()) { @@ -1413,9 +1409,7 @@ void AddDynamicPropertyCommand::undo() { QDesignerFormEditorInterface *core = formWindow()->core(); - QListIterator it(m_selection); - while (it.hasNext()) { - QObject *obj = it.next(); + for (QObject *obj : qAsConst(m_selection)) { QDesignerPropertySheetExtension *sheet = qt_extension(core->extensionManager(), obj); QDesignerDynamicPropertySheetExtension *dynamicSheet = qt_extension(core->extensionManager(), obj); dynamicSheet->removeDynamicProperty(sheet->indexOf(m_propertyName)); @@ -1463,9 +1457,7 @@ m_objectToValueAndChanged[current] = qMakePair(propertySheet->property(index), propertySheet->isChanged(index)); - QListIterator it(selection); - while (it.hasNext()) { - QObject *obj = it.next(); + for (QObject *obj : selection) { if (m_objectToValueAndChanged.contains(obj)) continue; diff -Nru qttools-opensource-src-5.7.1/src/designer/src/lib/shared/qdesigner_taskmenu.cpp qttools-opensource-src-5.9.1/src/designer/src/lib/shared/qdesigner_taskmenu.cpp --- qttools-opensource-src-5.7.1/src/designer/src/lib/shared/qdesigner_taskmenu.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/designer/src/lib/shared/qdesigner_taskmenu.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -75,30 +75,6 @@ QT_BEGIN_NAMESPACE -static QMenuBar *findMenuBar(const QWidget *widget) -{ - const QList children = widget->children(); - foreach (QObject *obj, widget->children()) { - if (QMenuBar *mb = qobject_cast(obj)) { - return mb; - } - } - - return 0; -} - -static QStatusBar *findStatusBar(const QWidget *widget) -{ - const QList children = widget->children(); - foreach (QObject *obj, widget->children()) { - if (QStatusBar *sb = qobject_cast(obj)) { - return sb; - } - } - - return 0; -} - static inline QAction *createSeparatorHelper(QObject *parent) { QAction *rc = new QAction(parent); rc->setSeparator(true); @@ -471,7 +447,7 @@ } DeleteStatusBarCommand *cmd = new DeleteStatusBarCommand(fw); - cmd->init(findStatusBar(mw)); + cmd->init(mw->findChild(QString(), Qt::FindDirectChildrenOnly)); fw->commandHistory()->push(cmd); } } @@ -487,16 +463,16 @@ if (const QMainWindow *mw = qobject_cast(formWindow->mainContainer())) { if (isMainContainer || mw->centralWidget() == widget()) { - if (!findMenuBar(mw)) { + if (mw->findChild(QString(), Qt::FindDirectChildrenOnly) == nullptr) actions.append(d->m_addMenuBar); - } actions.append(d->m_addToolBar); // ### create the status bar - if (!findStatusBar(mw)) - actions.append(d->m_addStatusBar); - else + if (mw->findChild(QString(), Qt::FindDirectChildrenOnly)) actions.append(d->m_removeStatusBar); + else + actions.append(d->m_addStatusBar); + actions.append(d->m_separator); } } @@ -677,7 +653,7 @@ qdesigner_internal::MetaDataBaseItem *item = metaDataBase->metaDataBaseItem(object); Q_ASSERT(item); const QStringList fakeSignals = item->fakeSignals(); - foreach (const QString &fakeSignal, fakeSignals) + for (const QString &fakeSignal : fakeSignals) classToSignalList[item->customClassName()][fakeSignal] = QStringList(); } @@ -689,7 +665,7 @@ if (index >= 0) { WidgetDataBaseItem* item = static_cast(db->item(index)); const QStringList fakeSignals = item->fakeSignals(); - foreach (const QString &fakeSignal, fakeSignals) + for (const QString &fakeSignal : fakeSignals) classToSignalList[promotedClassName][fakeSignal] = QStringList(); } } @@ -731,14 +707,17 @@ dialogUi.signalList->resizeColumnToContents(0); - if (selectSignalDialog.exec() == QDialog::Accepted) { - QTreeWidgetItem *selectedItem = dialogUi.signalList->selectedItems().first(); - const QString signalSignature = selectedItem->text(0); - const QStringList parameterNames = qvariant_cast(selectedItem->data(0, Qt::UserRole)); + if (selectSignalDialog.exec() != QDialog::Accepted) + return; + const QList &selectedItems = dialogUi.signalList->selectedItems(); + if (selectedItems.isEmpty()) + return; + const QTreeWidgetItem *selectedItem = selectedItems.constFirst(); + const QString signalSignature = selectedItem->text(0); + const QStringList parameterNames = qvariant_cast(selectedItem->data(0, Qt::UserRole)); - // TODO: Check whether signal is connected to slot - core->integration()->emitNavigateToSlot(objectName, signalSignature, parameterNames); - } + // TODO: Check whether signal is connected to slot + core->integration()->emitNavigateToSlot(objectName, signalSignature, parameterNames); } // Add a command that takes over the value of the current geometry as diff -Nru qttools-opensource-src-5.7.1/src/designer/src/lib/shared/qdesigner_utils.cpp qttools-opensource-src-5.9.1/src/designer/src/lib/shared/qdesigner_utils.cpp --- qttools-opensource-src-5.7.1/src/designer/src/lib/shared/qdesigner_utils.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/designer/src/lib/shared/qdesigner_utils.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -247,10 +247,8 @@ metaEnum(me) { } - PropertySheetEnumValue::PropertySheetEnumValue() : - value(0) - { - } + + PropertySheetEnumValue::PropertySheetEnumValue() = default; // ---------------- PropertySheetFlagValue PropertySheetFlagValue::PropertySheetFlagValue(int v, const DesignerMetaFlags &mf) : @@ -259,10 +257,7 @@ { } - PropertySheetFlagValue::PropertySheetFlagValue() : - value(0) - { - } + PropertySheetFlagValue::PropertySheetFlagValue() = default; // ---------------- PropertySheetPixmapValue PropertySheetPixmapValue::PropertySheetPixmapValue(const QString &path) : m_path(path) @@ -341,11 +336,13 @@ { if (const int themeCmp = m_data->m_theme.compare(other.m_data->m_theme)) return themeCmp < 0; - QMapIterator itThis(m_data->m_paths); - QMapIterator itOther(other.m_data->m_paths); - while (itThis.hasNext() && itOther.hasNext()) { - const ModeStateKey thisPair = itThis.next().key(); - const ModeStateKey otherPair = itOther.next().key(); + auto itThis = m_data->m_paths.cbegin(); + auto itThisEnd = m_data->m_paths.cend(); + auto itOther = other.m_data->m_paths.cbegin(); + auto itOtherEnd = other.m_data->m_paths.cend(); + while (itThis != itThisEnd && itOther != itOtherEnd) { + const ModeStateKey thisPair = itThis.key(); + const ModeStateKey otherPair = itOther.key(); if (thisPair < otherPair) return true; else if (otherPair < thisPair) @@ -355,8 +352,10 @@ return true; if (crc > 0) return false; + ++itThis; + ++itOther; } - if (itOther.hasNext()) + if (itOther != itOtherEnd) return true; return false; } diff -Nru qttools-opensource-src-5.7.1/src/designer/src/lib/shared/qdesigner_utils_p.h qttools-opensource-src-5.9.1/src/designer/src/lib/shared/qdesigner_utils_p.h --- qttools-opensource-src-5.7.1/src/designer/src/lib/shared/qdesigner_utils_p.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/designer/src/lib/shared/qdesigner_utils_p.h 2017-06-23 12:03:39.000000000 +0000 @@ -199,7 +199,7 @@ PropertySheetEnumValue(int v, const DesignerMetaEnum &me); PropertySheetEnumValue(); - int value; + int value{0}; DesignerMetaEnum metaEnum; }; @@ -210,7 +210,7 @@ PropertySheetFlagValue(int v, const DesignerMetaFlags &mf); PropertySheetFlagValue(); - int value; + int value{0}; DesignerMetaFlags metaFlags; }; diff -Nru qttools-opensource-src-5.7.1/src/designer/src/lib/shared/qlayout_widget.cpp qttools-opensource-src-5.9.1/src/designer/src/lib/shared/qlayout_widget.cpp --- qttools-opensource-src-5.7.1/src/designer/src/lib/shared/qlayout_widget.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/designer/src/lib/shared/qlayout_widget.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -99,15 +99,6 @@ { qdesigner_internal::getFormLayoutItemPosition(formLayout, index, row, column, rowspan, colspan); } - -QRect gridItemInfo(const QFormLayout *form, int index) -{ - int row; - int column; - int colspan; - qdesigner_internal::getFormLayoutItemPosition(form, index, &row, &column, 0, &colspan); - return QRect(column, row, colspan, 1); -} } // namespace anonymous QT_BEGIN_NAMESPACE @@ -150,7 +141,6 @@ } static inline QDebug operator<<(QDebug str, const QGridLayout &gl) { return debugGridLikeLayout(str, gl); } -static inline QDebug operator<<(QDebug str, const QFormLayout &fl) { return debugGridLikeLayout(str, fl); } static inline bool isEmptyFormLayoutRow(const QFormLayout *fl, int row) { diff -Nru qttools-opensource-src-5.7.1/src/designer/src/lib/shared/qsimpleresource.cpp qttools-opensource-src-5.9.1/src/designer/src/lib/shared/qsimpleresource.cpp --- qttools-opensource-src-5.7.1/src/designer/src/lib/shared/qsimpleresource.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/designer/src/lib/shared/qsimpleresource.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -157,13 +157,15 @@ return false; bool rc = false; - foreach (const QString &fakeSlot, domSlots->elementSlot()) + const QStringList &elementSlots = domSlots->elementSlot(); + for (const QString &fakeSlot : elementSlots) if (fakeSlots.indexOf(fakeSlot) == -1) { fakeSlots += fakeSlot; rc = true; } - foreach (const QString &fakeSignal, domSlots->elementSignal()) + const QStringList &elementSignals = domSlots->elementSignal(); + for (const QString &fakeSignal : elementSignals) if (fakeSignals.indexOf(fakeSignal) == -1) { fakeSignals += fakeSignal; rc = true; diff -Nru qttools-opensource-src-5.7.1/src/designer/src/lib/shared/qtresourceeditordialog.cpp qttools-opensource-src-5.9.1/src/designer/src/lib/shared/qtresourceeditordialog.cpp --- qttools-opensource-src-5.7.1/src/designer/src/lib/shared/qtresourceeditordialog.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/designer/src/lib/shared/qtresourceeditordialog.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -193,9 +193,8 @@ if (!prefixData.language.isEmpty()) prefixElem.setAttribute(QLatin1String(rccLangAttribute), prefixData.language); - QListIterator itFile(prefixData.resourceFileList); - while (itFile.hasNext()) { - QDomElement fileElem = saveResourceFileData(doc, itFile.next()); + for (const QtResourceFileData &rfd : prefixData.resourceFileList) { + QDomElement fileElem = saveResourceFileData(doc, rfd); prefixElem.appendChild(fileElem); } @@ -206,9 +205,8 @@ { QDomDocument doc; QDomElement docElem = doc.createElement(QLatin1String(rccRootTag)); - QListIterator itPrefix(qrcFileData.resourceList); - while (itPrefix.hasNext()) { - QDomElement prefixElem = saveResourcePrefixData(doc, itPrefix.next()); + for (const QtResourcePrefixData &prefixData : qrcFileData.resourceList) { + QDomElement prefixElem = saveResourcePrefixData(doc, prefixData); docElem.appendChild(prefixElem); } @@ -386,15 +384,10 @@ QtQrcFile *qrcFile = insertQrcFile(qrcFileData.qrcPath, beforeQrcFile); if (!qrcFile) return 0; - QListIterator itPrefix(qrcFileData.resourceList); - while (itPrefix.hasNext()) { - const QtResourcePrefixData &prefixData = itPrefix.next(); + for (const QtResourcePrefixData &prefixData : qrcFileData.resourceList) { QtResourcePrefix *resourcePrefix = insertResourcePrefix(qrcFile, prefixData.prefix, prefixData.language, 0); - QListIterator itFile(prefixData.resourceFileList); - while (itFile.hasNext()) { - const QtResourceFileData &fileData = itFile.next(); + for (const QtResourceFileData &fileData : prefixData.resourceFileList) insertResourceFile(resourcePrefix, fileData.path, fileData.alias, 0); - } } setInitialState(qrcFile, qrcFileData); return qrcFile; @@ -412,17 +405,11 @@ QList resourceList; - QList resourcePrefixes = qrcFile->resourcePrefixList(); - QListIterator itPrefix(resourcePrefixes); - while (itPrefix.hasNext()) { + const QList resourcePrefixes = qrcFile->resourcePrefixList(); + for (const QtResourcePrefix *prefix : resourcePrefixes) { QList resourceFileList; - - QtResourcePrefix *prefix = itPrefix.next(); - - QList resourceFiles = prefix->resourceFiles(); - QListIterator itFile(resourceFiles); - while (itFile.hasNext()) { - QtResourceFile *file = itFile.next(); + const QList resourceFiles = prefix->resourceFiles(); + for (QtResourceFile *file : resourceFiles) { QtResourceFileData fileData; fileData.path = file->path(); fileData.alias = file->alias(); @@ -521,10 +508,9 @@ void QtQrcManager::clear() { - QList oldQrcFiles = qrcFiles(); - QListIterator it(oldQrcFiles); - while (it.hasNext()) - removeQrcFile(it.next()); + const QList oldQrcFiles = qrcFiles(); + for (QtQrcFile *qf : oldQrcFiles) + removeQrcFile(qf); } QtQrcFile *QtQrcManager::insertQrcFile(const QString &path, QtQrcFile *beforeQrcFile, bool newFile) @@ -589,10 +575,9 @@ if (idx < 0) return; - QList resourcePrefixes = qrcFile->resourcePrefixList(); - QListIterator it(resourcePrefixes); - while (it.hasNext()) - removeResourcePrefix(it.next()); + const QList resourcePrefixes = qrcFile->resourcePrefixList(); + for (QtResourcePrefix *rp : resourcePrefixes) + removeResourcePrefix(rp); emit qrcFileRemoved(qrcFile); @@ -693,10 +678,9 @@ const int idx = qrcFile->m_resourcePrefixes.indexOf(resourcePrefix); - QList resourceFiles = resourcePrefix->resourceFiles(); - QListIterator it(resourceFiles); - while (it.hasNext()) - removeResourceFile(it.next()); + const QList resourceFiles = resourcePrefix->resourceFiles(); + for (QtResourceFile *rf : resourceFiles) + removeResourceFile(rf); emit resourcePrefixRemoved(resourcePrefix); @@ -1237,13 +1221,11 @@ if (m_currentQrcFile) { QMap currentPrefixList = m_resourcePrefixToPrefixItem; - QMapIterator itPrefix(currentPrefixList); - while (itPrefix.hasNext()) { - QtResourcePrefix *resourcePrefix = itPrefix.next().key(); - QList currentResourceFiles = resourcePrefix->resourceFiles(); - QListIterator itFile(currentResourceFiles); - while (itFile.hasNext()) - slotResourceFileRemoved(itFile.next()); + for (auto it = currentPrefixList.cbegin(), end = currentPrefixList.cend(); it != end; ++it) { + QtResourcePrefix *resourcePrefix = it.key(); + const QList currentResourceFiles = resourcePrefix->resourceFiles(); + for (QtResourceFile *rf : currentResourceFiles) + slotResourceFileRemoved(rf); slotResourcePrefixRemoved(resourcePrefix); } } @@ -1252,17 +1234,14 @@ slotCurrentTreeViewItemChanged(QModelIndex()); QStandardItem *firstPrefix = 0; // select first prefix if (m_currentQrcFile) { - QList newPrefixList = m_currentQrcFile->resourcePrefixList(); - QListIterator itPrefix(newPrefixList); - while (itPrefix.hasNext()) { - QtResourcePrefix *resourcePrefix = itPrefix.next(); + const QList newPrefixList = m_currentQrcFile->resourcePrefixList(); + for (QtResourcePrefix *resourcePrefix : newPrefixList) { if (QStandardItem *newPrefixItem = insertResourcePrefix(resourcePrefix)) if (!firstPrefix) firstPrefix = newPrefixItem; - QList newResourceFiles = resourcePrefix->resourceFiles(); - QListIterator itFile(newResourceFiles); - while (itFile.hasNext()) - slotResourceFileInserted(itFile.next()); + const QList newResourceFiles = resourcePrefix->resourceFiles(); + for (QtResourceFile *rf : newResourceFiles) + slotResourceFileInserted(rf); } } m_ui.resourceTreeView->setCurrentIndex(firstPrefix ? m_treeModel->indexFromItem(firstPrefix) : QModelIndex()); @@ -1605,9 +1584,7 @@ const QFileInfo fi(m_currentQrcFile->path()); const QString destDir = fi.absolutePath(); const QDir dir(fi.absolutePath()); - QStringListIterator itResourcePath(resourcePaths); - while (itResourcePath.hasNext()) { - QString resourcePath = itResourcePath.next(); + for (QString resourcePath : resourcePaths) { QString relativePath = dir.relativeFilePath(resourcePath); if (relativePath.startsWith(QStringLiteral(".."))) { QMessageBox msgBox(QMessageBox::Warning, @@ -1717,10 +1694,8 @@ QtResourcePrefix *newResourcePrefix = m_qrcManager->insertResourcePrefix(m_currentQrcFile, currentResourcePrefix->prefix(), currentResourcePrefix->language(), m_qrcManager->nextResourcePrefix(currentResourcePrefix)); if (newResourcePrefix) { - QList files = currentResourcePrefix->resourceFiles(); - QListIterator itFile(files); - while (itFile.hasNext()) { - QtResourceFile *resourceFile = itFile.next(); + const QList files = currentResourcePrefix->resourceFiles(); + for (QtResourceFile *resourceFile : files) { QString path = resourceFile->path(); QFileInfo fi(path); QDir dir(fi.dir()); @@ -2025,7 +2000,8 @@ d_ptr->m_ui.resourceTreeView->setModel(d_ptr->m_treeModel); d_ptr->m_ui.resourceTreeView->setContextMenuPolicy(Qt::CustomContextMenu); d_ptr->m_treeSelection = d_ptr->m_ui.resourceTreeView->selectionModel(); - connect(d_ptr->m_ui.resourceTreeView->header(), SIGNAL(sectionDoubleClicked(int)), d_ptr->m_ui.resourceTreeView, SLOT(resizeColumnToContents(int))); + connect(d_ptr->m_ui.resourceTreeView->header(), &QHeaderView::sectionDoubleClicked, + d_ptr->m_ui.resourceTreeView, &QTreeView::resizeColumnToContents); d_ptr->m_ui.resourceTreeView->setTextElideMode(Qt::ElideLeft); connect(d_ptr->m_ui.resourceTreeView, SIGNAL(customContextMenuRequested(QPoint)), @@ -2082,10 +2058,8 @@ // enable qrcBox - QStringList paths = resourceSet->activeResourceFilePaths(); - QStringListIterator it(paths); - while (it.hasNext()) { - const QString path = it.next(); + const QStringList paths = resourceSet->activeResourceFilePaths(); + for (const QString &path : paths) { QtQrcFileData qrcFileData; d_ptr->loadQrcFile(path, &qrcFileData); d_ptr->m_initialState << qrcFileData; @@ -2149,10 +2123,8 @@ QStringList newQrcPaths; QList currentState; - QList qrcFiles = d_ptr->m_qrcManager->qrcFiles(); - QListIterator itQrc(qrcFiles); - while (itQrc.hasNext()) { - QtQrcFile *qrcFile = itQrc.next(); + const QList qrcFiles = d_ptr->m_qrcManager->qrcFiles(); + for (QtQrcFile *qrcFile : qrcFiles) { QtQrcFileData qrcFileData; d_ptr->m_qrcManager->exportQrcFile(qrcFile, &qrcFileData); currentState << qrcFileData; diff -Nru qttools-opensource-src-5.7.1/src/designer/src/lib/shared/qtresourcemodel.cpp qttools-opensource-src-5.9.1/src/designer/src/lib/shared/qtresourcemodel.cpp --- qttools-opensource-src-5.7.1/src/designer/src/lib/shared/qtresourcemodel.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/designer/src/lib/shared/qtresourcemodel.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -204,10 +204,8 @@ return; // unregister old paths (all because the order of registration is important), later it can be optimized a bit - QStringList toRegister = resourceSet->activeResourceFilePaths(); - QStringListIterator itRegister(toRegister); - while (itRegister.hasNext()) { - const QString path = itRegister.next(); + const QStringList toRegister = resourceSet->activeResourceFilePaths(); + for (const QString &path : toRegister) { if (debugResourceModel) qDebug() << "registerResourceSet " << path; const PathDataMap::const_iterator itRcc = m_pathToData.constFind(path); @@ -217,10 +215,8 @@ if (!QResource::registerResource(reinterpret_cast(data->constData()))) { qWarning() << "** WARNING: Failed to register " << path << " (QResource failure)."; } else { - QStringList contents = m_pathToContents.value(path); - QStringListIterator itContents(contents); - while (itContents.hasNext()) { - const QString filePath = itContents.next(); + const QStringList contents = m_pathToContents.value(path); + for (const QString &filePath : contents) { if (!m_fileToQrc.contains(filePath)) // the first loaded resource has higher priority in qt resource system m_fileToQrc.insert(filePath, path); } @@ -236,10 +232,8 @@ return; // unregister old paths (all because the order of registration is importans), later it can be optimized a bit - QStringList toUnregister = resourceSet->activeResourceFilePaths(); - QStringListIterator itUnregister(toUnregister); - while (itUnregister.hasNext()) { - const QString path = itUnregister.next(); + const QStringList toUnregister = resourceSet->activeResourceFilePaths(); + for (const QString &path : toUnregister) { if (debugResourceModel) qDebug() << "unregisterResourceSet " << path; const PathDataMap::const_iterator itRcc = m_pathToData.constFind(path); @@ -275,9 +269,7 @@ PathDataMap newPathToData = m_pathToData; - QStringListIterator itPath(newPaths); - while (itPath.hasNext()) { - const QString path = itPath.next(); + for (const QString &path : newPaths) { if (resourceSet && !m_pathToResourceSet[path].contains(resourceSet)) m_pathToResourceSet[path].append(resourceSet); const QMap::iterator itMod = m_pathToModified.find(path); @@ -297,10 +289,8 @@ newResourceSetChanged = true; const QMap >::iterator itReload = m_pathToResourceSet.find(path); if (itReload != m_pathToResourceSet.end()) { - QList resources = itReload.value(); - QListIterator itRes(resources); - while (itRes.hasNext()) { - QtResourceSet *res = itRes.next(); + const QList resources = itReload.value(); + for (QtResourceSet *res : resources) { if (res != resourceSet) { m_resourceSetToReload[res] = true; } @@ -310,13 +300,11 @@ } } - QList oldData = m_pathToData.values(); - QList newData = newPathToData.values(); + const QList oldData = m_pathToData.values(); + const QList newData = newPathToData.values(); QList toDelete; - QListIterator itOld(oldData); - if (itOld.hasNext()) { - const QByteArray *array = itOld.next(); + for (const QByteArray *array : oldData) { if (array && !newData.contains(array)) toDelete.append(array); } @@ -355,7 +343,7 @@ } if (!newResourceSetChanged && !needReregister && (m_currentResourceSet == resourceSet)) { - foreach (const QByteArray *data, toDelete) + for (const QByteArray *data : qAsConst(toDelete)) deleteResource(data); return; // nothing changed @@ -364,7 +352,7 @@ if (needReregister) unregisterResourceSet(m_currentResourceSet); - foreach (const QByteArray *data, toDelete) + for (const QByteArray *data : qAsConst(toDelete)) deleteResource(data); m_pathToData = newPathToData; @@ -388,12 +376,10 @@ void QtResourceModelPrivate::removeOldPaths(QtResourceSet *resourceSet, const QStringList &newPaths) { - QStringList oldPaths = m_resourceSetToPaths.value(resourceSet); + const QStringList oldPaths = m_resourceSetToPaths.value(resourceSet); if (oldPaths != newPaths) { // remove old - QStringListIterator itOldPaths(oldPaths); - while (itOldPaths.hasNext()) { - QString oldPath = itOldPaths.next(); + for (const QString &oldPath : oldPaths) { if (!newPaths.contains(oldPath)) { const QMap >::iterator itRemove = m_pathToResourceSet.find(oldPath); if (itRemove != m_pathToResourceSet.end()) { @@ -474,10 +460,9 @@ QtResourceModel::~QtResourceModel() { blockSignals(true); - QList resourceList = resourceSets(); - QListIterator it(resourceList); - while (it.hasNext()) - removeResourceSet(it.next()); + const QList resourceList = resourceSets(); + for (QtResourceSet *rs : resourceList) + removeResourceSet(rs); blockSignals(false); } @@ -505,10 +490,9 @@ if (it == d_ptr->m_pathToResourceSet.constEnd()) return; - QList resourceList = it.value(); - QListIterator itReload(resourceList); - while (itReload.hasNext()) - d_ptr->m_resourceSetToReload.insert(itReload.next(), true); + const QList resourceList = it.value(); + for (QtResourceSet *rs : resourceList) + d_ptr->m_resourceSetToReload.insert(rs, true); } QList QtResourceModel::resourceSets() const @@ -532,11 +516,8 @@ d_ptr->m_resourceSetToPaths.insert(newResource, paths); d_ptr->m_resourceSetToReload.insert(newResource, false); d_ptr->m_newlyCreated.insert(newResource, true); - QStringListIterator it(paths); - while (it.hasNext()) { - const QString path = it.next(); + for (const QString &path : paths) d_ptr->m_pathToResourceSet[path].append(newResource); - } return newResource; } @@ -600,9 +581,8 @@ d_ptr->m_fileWatcherEnabled = enable; - QMapIterator it(d_ptr->m_fileWatchedMap); - if (it.hasNext()) - d_ptr->setWatcherEnabled(it.next().key(), d_ptr->m_fileWatcherEnabled); + if (!d_ptr->m_fileWatchedMap.isEmpty()) + d_ptr->setWatcherEnabled(d_ptr->m_fileWatchedMap.firstKey(), d_ptr->m_fileWatcherEnabled); } bool QtResourceModel::isWatcherEnabled() const diff -Nru qttools-opensource-src-5.7.1/src/designer/src/lib/shared/qtresourceview.cpp qttools-opensource-src-5.9.1/src/designer/src/lib/shared/qtresourceview.cpp --- qttools-opensource-src-5.7.1/src/designer/src/lib/shared/qtresourceview.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/designer/src/lib/shared/qtresourceview.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -59,6 +59,8 @@ #include #include +#include + QT_BEGIN_NAMESPACE static const char *elementResourceData = "resource"; @@ -260,20 +262,14 @@ void QtResourceViewPrivate::storeExpansionState() { - QMapIterator it(m_pathToItem); - while (it.hasNext()) { - it.next(); - m_expansionState[it.key()] = it.value()->isExpanded(); - } + for (auto it = m_pathToItem.cbegin(), end = m_pathToItem.cend(); it != end; ++it) + m_expansionState.insert(it.key(), it.value()->isExpanded()); } void QtResourceViewPrivate::applyExpansionState() { - QMapIterator it(m_pathToItem); - while (it.hasNext()) { - it.next(); + for (auto it = m_pathToItem.cbegin(), end = m_pathToItem.cend(); it != end; ++it) it.value()->setExpanded(m_expansionState.value(it.key(), true)); - } } QPixmap QtResourceViewPrivate::makeThumbnail(const QPixmap &pix) const @@ -375,10 +371,8 @@ const QString root(QStringLiteral(":/")); QMap contents = m_resourceModel->contents(); - QMapIterator itContents(contents); - while (itContents.hasNext()) { - const QString filePath = itContents.next().key(); - const QFileInfo fi(filePath); + for (auto it = contents.cbegin(), end = contents.cend(); it != end; ++it) { + const QFileInfo fi(it.key()); QString dirPath = fi.absolutePath(); m_pathToContents[dirPath].append(fi.fileName()); while (!m_pathToParentPath.contains(dirPath) && dirPath != root) { // create all parent paths @@ -396,10 +390,9 @@ QPair pathToParentItem = pathToParentItemQueue.dequeue(); const QString path = pathToParentItem.first; QTreeWidgetItem *item = createPath(path, pathToParentItem.second); - QStringList subPaths = m_pathToSubPaths.value(path); - QStringListIterator itSubPaths(subPaths); - while (itSubPaths.hasNext()) - pathToParentItemQueue.enqueue(qMakePair(itSubPaths.next(), item)); + const QStringList subPaths = m_pathToSubPaths.value(path); + for (const QString &subPath : subPaths) + pathToParentItemQueue.enqueue(qMakePair(subPath, item)); } } @@ -422,16 +415,13 @@ while (!pathQueue.isEmpty()) { const QString path = pathQueue.dequeue(); - QStringList fileNames = m_pathToContents.value(path); - QStringListIterator it(fileNames); bool hasContents = matchAll; if (!matchAll) { // the case filter is not empty - we check if the path contains anything - while (it.hasNext()) { - QString fileName = it.next(); - hasContents = fileName.contains(m_filterPattern, Qt::CaseInsensitive); - if (hasContents) // the path contains at least one resource which matches the filter - break; - } + // the path contains at least one resource which matches the filter + const QStringList fileNames = m_pathToContents.value(path); + hasContents = + std::any_of(fileNames.cbegin(), fileNames.cend(), + [this] (const QString &f) { return f.contains(this->m_filterPattern, Qt::CaseInsensitive); }); } pathToMatchingContents[path] = hasContents; @@ -448,10 +438,9 @@ } } - QStringList subPaths = m_pathToSubPaths.value(path); // we do the same for children paths - QStringListIterator itSubPaths(subPaths); - while (itSubPaths.hasNext()) - pathQueue.enqueue(itSubPaths.next()); + const QStringList subPaths = m_pathToSubPaths.value(path); // we do the same for children paths + for (const QString &subPath : subPaths) + pathQueue.enqueue(subPath); } // we setup here new path and resource to be activated @@ -483,9 +472,8 @@ QFileInfo fi(currentResource); if (!fi.fileName().contains(m_filterPattern, Qt::CaseInsensitive)) { // the case when the current resource is filtered out const QStringList fileNames = m_pathToContents.value(newCurrentPath); - QStringListIterator it(fileNames); - while (it.hasNext()) { // we try to select the first matching resource from the newCurrentPath - QString fileName = it.next(); + // we try to select the first matching resource from the newCurrentPath + for (const QString &fileName : fileNames) { if (fileName.contains(m_filterPattern, Qt::CaseInsensitive)) { QDir dirPath(newCurrentPath); currentResource = dirPath.absoluteFilePath(fileName); // the new resource inside newCurrentPath will be activated @@ -507,11 +495,9 @@ m_listWidget->scrollToItem(currentResourceItem); } - QMapIterator it(pathToVisible); // hide all paths filtered out - while (it.hasNext()) { - const QString path = it.next().key(); - QTreeWidgetItem *item = m_pathToItem.value(path); - if (item) + // hide all paths filtered out + for (auto it = pathToVisible.cbegin(), end = pathToVisible.cend(); it != end; ++it) { + if (QTreeWidgetItem *item = m_pathToItem.value(it.key())) item->setHidden(!it.value()); } } @@ -542,10 +528,8 @@ const bool matchAll = m_filterPattern.isEmpty(); QDir dir(path); - QStringList fileNames = m_pathToContents.value(path); - QStringListIterator it(fileNames); - while (it.hasNext()) { - QString fileName = it.next(); + const QStringList fileNames = m_pathToContents.value(path); + for (const QString &fileName : fileNames) { const bool showProperty = matchAll || fileName.contains(m_filterPattern, Qt::CaseInsensitive); if (showProperty) { QString filePath = dir.absoluteFilePath(fileName); @@ -857,9 +841,9 @@ QVBoxLayout *layout = new QVBoxLayout(this); layout->addWidget(d_ptr->m_view); layout->addWidget(d_ptr->m_box); - connect(d_ptr->m_box, SIGNAL(accepted()), this, SLOT(accept())); - connect(d_ptr->m_box, SIGNAL(rejected()), this, SLOT(reject())); - connect(d_ptr->m_view, SIGNAL(resourceActivated(QString)), this, SLOT(accept())); + connect(d_ptr->m_box, &QDialogButtonBox::accepted, this, &QDialog::accept); + connect(d_ptr->m_box, &QDialogButtonBox::rejected, this, &QDialog::reject); + connect(d_ptr->m_view, &QtResourceView::resourceActivated, this, &QDialog::accept); connect(d_ptr->m_view, SIGNAL(resourceSelected(QString)), this, SLOT(slotResourceSelected(QString))); d_ptr->setOkButtonEnabled(false); d_ptr->m_view->setResourceModel(core->resourceModel()); diff -Nru qttools-opensource-src-5.7.1/src/designer/src/lib/shared/rcc.cpp qttools-opensource-src-5.9.1/src/designer/src/lib/shared/rcc.cpp --- qttools-opensource-src-5.7.1/src/designer/src/lib/shared/rcc.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/designer/src/lib/shared/rcc.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -38,6 +38,7 @@ #include #include #include +#include #include #include @@ -596,10 +597,11 @@ RCCFileInfo *s = new RCCFileInfo(file); s->m_parent = parent; if (parent->m_children.contains(filename)) { - foreach (const QString &fileName, m_fileNames) + for (const QString &fileName : qAsConst(m_fileNames)) { qWarning("%s: Warning: potential duplicate alias detected: '%s'", qPrintable(fileName), qPrintable(filename)); } + } parent->m_children.insertMulti(filename, s); return true; } diff -Nru qttools-opensource-src-5.7.1/src/designer/src/lib/shared/richtexteditor.cpp qttools-opensource-src-5.9.1/src/designer/src/lib/shared/richtexteditor.cpp --- qttools-opensource-src-5.7.1/src/designer/src/lib/shared/richtexteditor.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/designer/src/lib/shared/richtexteditor.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -333,7 +333,7 @@ { setText(tr("Text Color")); setColor(Qt::black); - connect(this, SIGNAL(triggered()), this, SLOT(chooseColor())); + connect(this, &QAction::triggered, this, &ColorAction::chooseColor); } void ColorAction::setColor(const QColor &color) @@ -431,7 +431,7 @@ // Font size combo box m_font_size_input->setEditable(false); const QList font_sizes = QFontDatabase::standardSizes(); - foreach (int font_size, font_sizes) + for (int font_size : font_sizes) m_font_size_input->addItem(QString::number(font_size)); connect(m_font_size_input, static_cast(&QComboBox::activated), diff -Nru qttools-opensource-src-5.7.1/src/designer/src/lib/shared/shared_enums_p.h qttools-opensource-src-5.9.1/src/designer/src/lib/shared/shared_enums_p.h --- qttools-opensource-src-5.7.1/src/designer/src/lib/shared/shared_enums_p.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/designer/src/lib/shared/shared_enums_p.h 2017-06-23 12:03:39.000000000 +0000 @@ -79,6 +79,7 @@ ItemFlagsShadowRole = 0x13370551 }; + enum ObjectNamingMode { CamelCase, Underscore }; } QT_END_NAMESPACE diff -Nru qttools-opensource-src-5.7.1/src/designer/src/lib/shared/shared.pri qttools-opensource-src-5.9.1/src/designer/src/lib/shared/shared.pri --- qttools-opensource-src-5.7.1/src/designer/src/lib/shared/shared.pri 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/designer/src/lib/shared/shared.pri 2017-06-23 12:03:39.000000000 +0000 @@ -186,3 +186,5 @@ $$PWD/rcc.cpp RESOURCES += $$PWD/shared.qrc + +TR_EXCLUDE += $$PWD/templates/* diff -Nru qttools-opensource-src-5.7.1/src/designer/src/lib/shared/shared_settings.cpp qttools-opensource-src-5.9.1/src/designer/src/lib/shared/shared_settings.cpp --- qttools-opensource-src-5.7.1/src/designer/src/lib/shared/shared_settings.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/designer/src/lib/shared/shared_settings.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -31,6 +31,8 @@ #include "previewmanager_p.h" #include "qdesigner_utils_p.h" +#include + #include #include @@ -54,6 +56,9 @@ static const char *formTemplatePathsKey = "FormTemplatePaths"; static const char *formTemplateKey = "FormTemplate"; static const char *newFormSizeKey = "NewFormSize"; +static inline QString namingModeKey() { return QStringLiteral("naming"); } +static inline QString underScoreNamingMode() { return QStringLiteral("underscore"); } +static inline QString camelCaseNamingMode() { return QStringLiteral("camelcase"); } using namespace qdesigner_internal; @@ -150,7 +155,7 @@ { // get template paths excluding internal ones QStringList rc = formTemplatePaths(); - foreach (const QString &internalTemplatePath, defaultFormTemplatePaths()) { + for (const QString &internalTemplatePath : defaultFormTemplatePaths()) { const int index = rc.indexOf(internalTemplatePath); if (index != -1) rc.removeAt(index); @@ -226,6 +231,20 @@ m_settings->setValue(QLatin1String(zoomKey), QVariant(z)); } +ObjectNamingMode QDesignerSharedSettings::objectNamingMode() const +{ + const QString value = m_settings->value(namingModeKey()).toString(); + return value == camelCaseNamingMode() + ? qdesigner_internal::CamelCase : qdesigner_internal::Underscore; +} + +void QDesignerSharedSettings::setObjectNamingMode(ObjectNamingMode n) +{ + const QString value = n == qdesigner_internal::CamelCase + ? camelCaseNamingMode() : underScoreNamingMode(); + m_settings->setValue(namingModeKey(), QVariant(value)); +} + bool QDesignerSharedSettings::zoomEnabled() const { return m_settings->value(QLatin1String(zoomEnabledKey), false).toBool(); diff -Nru qttools-opensource-src-5.7.1/src/designer/src/lib/shared/shared_settings_p.h qttools-opensource-src-5.9.1/src/designer/src/lib/shared/shared_settings_p.h --- qttools-opensource-src-5.7.1/src/designer/src/lib/shared/shared_settings_p.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/designer/src/lib/shared/shared_settings_p.h 2017-06-23 12:03:39.000000000 +0000 @@ -41,6 +41,7 @@ #define SHARED_SETTINGS_H #include "shared_global_p.h" +#include "shared_enums_p.h" #include "deviceprofile_p.h" #include @@ -103,6 +104,10 @@ int zoom() const; void setZoom(int z); + // Object naming convention (ActionEditor) + ObjectNamingMode objectNamingMode() const; + void setObjectNamingMode(ObjectNamingMode n); + // Embedded Design DeviceProfile currentDeviceProfile() const; void setCurrentDeviceProfileIndex(int i); diff -Nru qttools-opensource-src-5.7.1/src/designer/src/lib/shared/signalslotdialog.cpp qttools-opensource-src-5.9.1/src/designer/src/lib/shared/signalslotdialog.cpp --- qttools-opensource-src-5.7.1/src/designer/src/lib/shared/signalslotdialog.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/designer/src/lib/shared/signalslotdialog.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -312,11 +312,11 @@ m_model->clear(); QStandardItem *lastExisting = 0; - foreach(const QString &s, d.m_existingMethods) { + for (const QString &s : d.m_existingMethods) { lastExisting = createDisabledItem(s); m_model->appendRow(lastExisting); } - foreach(const QString &s, d.m_fakeMethods) + for (const QString &s : d.m_fakeMethods) m_model->appendRow(createEditableItem(s)); if (lastExisting) m_listView->scrollTo(m_model->indexFromItem(lastExisting)); diff -Nru qttools-opensource-src-5.7.1/src/designer/src/lib/shared/widgetdatabase.cpp qttools-opensource-src-5.9.1/src/designer/src/lib/shared/widgetdatabase.cpp --- qttools-opensource-src-5.7.1/src/designer/src/lib/shared/widgetdatabase.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/designer/src/lib/shared/widgetdatabase.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -367,7 +367,8 @@ // 2) create a list plugins ItemList pluginList; const QDesignerPluginManager *pm = m_core->pluginManager(); - foreach(QDesignerCustomWidgetInterface* c, pm->registeredCustomWidgets()) + const auto &customWidgets = pm->registeredCustomWidgets(); + for (QDesignerCustomWidgetInterface* c : customWidgets) pluginList += createCustomWidgetItem(c, pm->customWidgetData(c)); // 3) replace custom classes or add new ones, remove them from existingCustomClasses, diff -Nru qttools-opensource-src-5.7.1/src/designer/src/lib/shared/widgetfactory.cpp qttools-opensource-src-5.9.1/src/designer/src/lib/shared/widgetfactory.cpp --- qttools-opensource-src-5.7.1/src/designer/src/lib/shared/widgetfactory.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/designer/src/lib/shared/widgetfactory.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -215,12 +215,10 @@ { m_customFactory.clear(); - QDesignerPluginManager *pluginManager = m_core->pluginManager(); - - QList lst = pluginManager->registeredCustomWidgets(); - foreach (QDesignerCustomWidgetInterface *c, lst) { + const QList &lst = + m_core->pluginManager()->registeredCustomWidgets(); + for (QDesignerCustomWidgetInterface *c : lst) m_customFactory.insert(c->name(), c); - } } // Convencience to create non-widget objects. Returns 0 if unknown diff -Nru qttools-opensource-src-5.7.1/src/designer/src/lib/uilib/abstractformbuilder.cpp qttools-opensource-src-5.9.1/src/designer/src/lib/uilib/abstractformbuilder.cpp --- qttools-opensource-src-5.7.1/src/designer/src/lib/uilib/abstractformbuilder.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/designer/src/lib/uilib/abstractformbuilder.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -34,7 +34,7 @@ ** https://www.gnu.org/licenses/gpl-3.0.html. ** ** $QT_END_LICENSE$ -**sw +** ****************************************************************************/ #include "abstractformbuilder.h" @@ -88,6 +88,9 @@ #include +#include +#include + Q_DECLARE_METATYPE(QWidgetList) static const char *buttonGroupPropertyC = "buttonGroup"; @@ -167,7 +170,7 @@ // Return UI file version from attribute 'version="4.0"' static QPair uiVersion(const QString &attr) { - const QStringList versions = attr.split(QLatin1Char('.'), QString::SkipEmptyParts); + const QVector versions = attr.splitRef(QLatin1Char('.'), QString::SkipEmptyParts); if (versions.size() >= 2) { bool okMajor, okMinor; const int majorVersion = versions.at(0).toInt(&okMajor); @@ -336,18 +339,21 @@ applyProperties(w, ui_widget->elementProperty()); - foreach (DomAction *ui_action, ui_widget->elementAction()) { + const QList &elementAction = ui_widget->elementAction(); + for (DomAction *ui_action : elementAction) { QAction *child_action = create(ui_action, w); Q_UNUSED( child_action ); } - foreach (DomActionGroup *ui_action_group, ui_widget->elementActionGroup()) { + const QList &elementActionGroup = ui_widget->elementActionGroup(); + for (DomActionGroup *ui_action_group : elementActionGroup) { QActionGroup *child_action_group = create(ui_action_group, w); Q_UNUSED( child_action_group ); } QWidgetList children; - foreach (DomWidget *ui_child, ui_widget->elementWidget()) { + const QList &elementWidget = ui_widget->elementWidget(); + for (DomWidget *ui_child : elementWidget) { if (QWidget *child = create(ui_child, w)) { children += child; } else { @@ -356,7 +362,8 @@ } } - foreach (DomLayout *ui_lay, ui_widget->elementLayout()) { + const QList &elementLayout = ui_widget->elementLayout(); + for (DomLayout *ui_lay : elementLayout) { QLayout *child_lay = create(ui_lay, 0, w); Q_UNUSED( child_lay ); } @@ -364,7 +371,7 @@ const QList addActions = ui_widget->elementAddAction(); if (!addActions.empty()) { const QFormBuilderStrings &strings = QFormBuilderStrings::instance(); - foreach (DomActionRef *ui_action_ref, addActions) { + for (DomActionRef *ui_action_ref : addActions) { const QString name = ui_action_ref->attributeName(); if (name == strings.separator) { QAction *sep = new QAction(w); @@ -391,7 +398,7 @@ const QStringList zOrderNames = ui_widget->elementZOrder(); if (!zOrderNames.isEmpty()) { QList zOrder = qvariant_cast(w->property("_q_zOrder")); - foreach (const QString &widgetName, zOrderNames) { + for (const QString &widgetName : zOrderNames) { if (QWidget *child = w->findChild(widgetName)) { if (child->parentWidget() == w) { zOrder.removeAll(child); @@ -431,12 +438,14 @@ d->m_actionGroups.insert(ui_action_group->attributeName(), a); applyProperties(a, ui_action_group->elementProperty()); - foreach (DomAction *ui_action, ui_action_group->elementAction()) { + const QList &elementAction = ui_action_group->elementAction(); + for (DomAction *ui_action : elementAction) { QAction *child_action = create(ui_action, a); Q_UNUSED( child_action ); } - foreach (DomActionGroup *g, ui_action_group->elementActionGroup()) { + const QList &elementActionGroup = ui_action_group->elementActionGroup(); + for (DomActionGroup *g : elementActionGroup) { QActionGroup *child_action_group = create(g, parent); Q_UNUSED( child_action_group ); } @@ -672,13 +681,14 @@ if (mar == INT_MIN || spac == INT_MIN) { QList properties = ui_layout->elementProperty(); - QMutableListIterator it(properties); - while (it.hasNext()) { - DomProperty *prop = it.next(); - if ((mar == INT_MIN && prop->attributeName() == strings.marginProperty) || - (spac == INT_MIN && prop->attributeName() == strings.spacingProperty)) { - it.remove(); + for (auto it = properties.begin(); it != properties.end(); ) { + DomProperty *prop = *it; + if ((mar == INT_MIN && prop->attributeName() == strings.marginProperty) + || (spac == INT_MIN && prop->attributeName() == strings.spacingProperty)) { delete prop; + it = properties.erase(it); + } else { + ++it; } } ui_layout->setElementProperty(properties); @@ -774,7 +784,8 @@ applyProperties(layout, ui_layout->elementProperty()); - foreach (DomLayoutItem *ui_item, ui_layout->elementItem()) { + const QList &elementItem = ui_layout->elementItem(); + for (DomLayoutItem *ui_item : elementItem) { if (QLayoutItem *item = create(ui_item, layout, parentWidget)) { addItem(ui_item, item, layout); } @@ -856,7 +867,8 @@ { Qt::Alignment rc = 0; if (!in.isEmpty()) { - foreach (const QString &f, in.split(QLatin1Char('|'))) { + const QVector flags = in.splitRef(QLatin1Char('|')); + for (const QStringRef &f : flags) { if (f == QStringLiteral("Qt::AlignLeft")) { rc |= Qt::AlignLeft; } else if (f == QStringLiteral("Qt::AlignRight")) { @@ -942,7 +954,7 @@ const QList spacerProperties = ui_spacer->elementProperty(); if (!spacerProperties.empty()) { const QFormBuilderStrings &strings = QFormBuilderStrings::instance(); - foreach (DomProperty *p, spacerProperties) { + for (DomProperty *p : spacerProperties) { const QVariant v = toVariant(&QAbstractFormBuilderGadget::staticMetaObject, p); // ### remove me if (v.isNull()) continue; @@ -1121,9 +1133,7 @@ gr->setCoordinateMode(coord); const QList stops = gradient->elementGradientStop(); - QListIterator it(stops); - while (it.hasNext()) { - const DomGradientStop *stop = it.next(); + for (const DomGradientStop *stop : stops) { const DomColor *color = stop->elementColor(); gr->setColorAt(stop->attributePosition(), QColor::fromRgb(color->elementRed(), color->elementGreen(), color->elementBlue(), color->attributeAlpha())); @@ -1168,10 +1178,8 @@ gradient->setAttributeSpread(QLatin1String(gradientSpread_enum.valueToKey(gr->spread()))); gradient->setAttributeCoordinateMode(QLatin1String(gradientCoordinate_enum.valueToKey(gr->coordinateMode()))); QList stops; - QGradientStops st = gr->stops(); - QVectorIterator > it(st); - while (it.hasNext()) { - const QPair pair = it.next(); + const QGradientStops st = gr->stops(); + for (const QGradientStop &pair : st) { DomGradientStop *stop = new DomGradientStop(); stop->setAttributePosition(pair.first); DomColor *color = new DomColor(); @@ -1371,7 +1379,7 @@ QList childObjects = widget->children(); const QList list = qvariant_cast(widget->property("_q_widgetOrder")); - foreach (QWidget *w, list) { + for (QWidget *w : list) { if (childObjects.contains(w)) { children.append(w); childObjects.removeAll(w); @@ -1382,26 +1390,24 @@ const QList zOrder = qvariant_cast(widget->property("_q_zOrder")); if (list != zOrder) { QStringList zOrderList; - QListIterator itZOrder(zOrder); - while (itZOrder.hasNext()) - zOrderList.append(itZOrder.next()->objectName()); + zOrderList.reserve(zOrder.size()); + std::transform(zOrder.cbegin(), zOrder.cend(), + std::back_inserter(zOrderList), + [] (const QWidget *w) { return w->objectName(); }); ui_widget->setElementZOrder(zOrderList); } } - foreach (QObject *obj, children) { + for (QObject *obj : qAsConst(children)) { if (QWidget *childWidget = qobject_cast(obj)) { if (d->m_laidout.contains(childWidget) || recursive == false) continue; if (QMenu *menu = qobject_cast(childWidget)) { - QList actions = menu->parentWidget()->actions(); - QListIterator it(actions); - bool found = false; - while (it.hasNext()) { - if (it.next()->menu() == menu) - found = true; - } + const QList actions = menu->parentWidget()->actions(); + const bool found = + std::any_of(actions.cbegin(), actions.cend(), + [menu] (const QAction *a) { return a->menu() == menu; }); if (!found) continue; } @@ -1427,7 +1433,8 @@ // add-action QList ui_action_refs; - foreach (QAction *action, widget->actions()) { + const QList &actions = widget->actions(); + for (QAction *action : actions) { if (DomActionRef *ui_action_ref = createActionRefDom(action)) { ui_action_refs.append(ui_action_ref); } @@ -1579,7 +1586,7 @@ } QList ui_items; - foreach (const FormBuilderSaveLayoutEntry &item, newList) { + for (const FormBuilderSaveLayoutEntry &item : qAsConst(newList)) { if (DomLayoutItem *ui_item = createDom(item.item, lay, ui_parentWidget)) { if (item.row >= 0) ui_item->setAttributeRow(item.row); @@ -1732,7 +1739,7 @@ { DomPropertyHash map; - foreach (DomProperty *p, properties) + for (DomProperty *p : properties) map.insert(p->attributeName(), p); return map; @@ -1874,11 +1881,11 @@ DomProperty *p; QVariant v; - foreach (const QFormBuilderStrings::TextRoleNName &it, strings.itemTextRoles) + for (const QFormBuilderStrings::TextRoleNName &it : strings.itemTextRoles) if ((p = formBuilder->saveText(it.second, item->data(it.first.second)))) properties->append(p); - foreach (const QFormBuilderStrings::RoleNName &it, strings.itemRoles) + for (const QFormBuilderStrings::RoleNName &it : strings.itemRoles) if ((v = item->data(it.first)).isValid() && (p = variantToDomProperty(abstractFormBuilder, static_cast(&QAbstractFormBuilderGadget::staticMetaObject), @@ -1907,7 +1914,7 @@ DomProperty *p; QVariant v; - foreach (const QFormBuilderStrings::TextRoleNName &it, strings.itemTextRoles) + for (const QFormBuilderStrings::TextRoleNName &it : strings.itemTextRoles) if ((p = properties.value(it.second))) { v = formBuilder->textBuilder()->loadText(p); QVariant nativeValue = formBuilder->textBuilder()->toNativeValue(v); @@ -1915,7 +1922,7 @@ item->setData(it.first.second, v); } - foreach (const QFormBuilderStrings::RoleNName &it, strings.itemRoles) + for (const QFormBuilderStrings::RoleNName &it : strings.itemRoles) if ((p = properties.value(it.second)) && (v = formBuilder->toVariant(&QAbstractFormBuilderGadget::staticMetaObject, p)).isValid()) item->setData(it.first, v); @@ -1959,7 +1966,7 @@ QList properties; - foreach (const QFormBuilderStrings::TextRoleNName &it, strings.itemTextRoles) { + for (const QFormBuilderStrings::TextRoleNName &it : strings.itemTextRoles) { p = saveText(it.second, treeWidget->headerItem()->data(c, it.first.second)); // Prevent uic 4.4.X from crashing if it cannot find a column text if (!p && it.first.first == Qt::EditRole && it.second == QStringLiteral("text")) { @@ -1974,7 +1981,7 @@ properties.append(p); } - foreach (const QFormBuilderStrings::RoleNName &it, strings.itemRoles) + for (const QFormBuilderStrings::RoleNName &it : strings.itemRoles) if ((v = treeWidget->headerItem()->data(c, it.first)).isValid() && (p = variantToDomProperty(this, &QAbstractFormBuilderGadget::staticMetaObject, it.second, v))) properties.append(p); @@ -1992,7 +1999,7 @@ QQueue > pendingQueue; for (int i = 0; i < treeWidget->topLevelItemCount(); i++) - pendingQueue.enqueue(qMakePair(treeWidget->topLevelItem(i), (DomItem *)0)); + pendingQueue.enqueue(qMakePair(treeWidget->topLevelItem(i), nullptr)); while (!pendingQueue.isEmpty()) { const QPair pair = pendingQueue.dequeue(); @@ -2003,11 +2010,11 @@ QList properties; for (int c = 0; c < treeWidget->columnCount(); c++) { - foreach (const QFormBuilderStrings::TextRoleNName &it, strings.itemTextRoles) + for (const QFormBuilderStrings::TextRoleNName &it : strings.itemTextRoles) if ((p = saveText(it.second, item->data(c, it.first.second)))) properties.append(p); - foreach (const QFormBuilderStrings::RoleNName &it, strings.itemRoles) + for (const QFormBuilderStrings::RoleNName &it : strings.itemRoles) if ((v = item->data(c, it.first)).isValid() && (p = variantToDomProperty(this, &QAbstractFormBuilderGadget::staticMetaObject, it.second, v))) properties.append(p); @@ -2168,7 +2175,7 @@ // // Special handling for qtableview/qtreeview fake header attributes // - static QStringList realPropertyNames = + static const QStringList realPropertyNames = (QStringList() << QStringLiteral("visible") << QStringLiteral("cascadingSectionResizes") << QStringLiteral("defaultSectionSize") @@ -2179,12 +2186,12 @@ if (const QTreeView *treeView = qobject_cast(itemView)) { QList viewProperties = ui_widget->elementAttribute(); - QList headerProperties = computeProperties(treeView->header()); - foreach (const QString &realPropertyName, realPropertyNames) { + const QList &headerProperties = computeProperties(treeView->header()); + for (const QString &realPropertyName : realPropertyNames) { const QString upperPropertyName = realPropertyName.at(0).toUpper() + realPropertyName.mid(1); const QString fakePropertyName = QStringLiteral("header") + upperPropertyName; - foreach (DomProperty *property, headerProperties) { + for (DomProperty *property : headerProperties) { if (property->attributeName() == realPropertyName) { property->setAttributeName(fakePropertyName); viewProperties << property; @@ -2193,22 +2200,22 @@ } ui_widget->setElementAttribute(viewProperties); } else if (const QTableView *tableView = qobject_cast(itemView)) { - static QStringList headerPrefixes = + static const QStringList headerPrefixes = (QStringList() << QStringLiteral("horizontalHeader") << QStringLiteral("verticalHeader")); QList viewProperties = ui_widget->elementAttribute(); - foreach (const QString &headerPrefix, headerPrefixes) { + for (const QString &headerPrefix : headerPrefixes) { QList headerProperties; if (headerPrefix == QStringLiteral("horizontalHeader")) headerProperties = computeProperties(tableView->horizontalHeader()); else headerProperties = computeProperties(tableView->verticalHeader()); - foreach (const QString &realPropertyName, realPropertyNames) { + for (const QString &realPropertyName : realPropertyNames) { const QString upperPropertyName = realPropertyName.at(0).toUpper() + realPropertyName.mid(1); const QString fakePropertyName = headerPrefix + upperPropertyName; - foreach (DomProperty *property, headerProperties) { + for (DomProperty *property : qAsConst(headerProperties)) { if (property->attributeName() == realPropertyName) { property->setAttributeName(fakePropertyName); viewProperties << property; @@ -2291,7 +2298,8 @@ Q_UNUSED(parentWidget); const QFormBuilderStrings &strings = QFormBuilderStrings::instance(); - foreach (DomItem *ui_item, ui_widget->elementItem()) { + const QList &elementItem = ui_widget->elementItem(); + for (DomItem *ui_item : elementItem) { const DomPropertyHash properties = propertyMap(ui_item->elementProperty()); QListWidgetItem *item = new QListWidgetItem(listWidget); loadItemPropsNFlags(this, item, properties); @@ -2321,12 +2329,12 @@ DomProperty *p; QVariant v; - foreach (const QFormBuilderStrings::RoleNName &it, strings.itemRoles) + for (const QFormBuilderStrings::RoleNName &it : strings.itemRoles) if ((p = properties.value(it.second)) && (v = toVariant(&QAbstractFormBuilderGadget::staticMetaObject, p)).isValid()) treeWidget->headerItem()->setData(i, it.first, v); - foreach (const QFormBuilderStrings::TextRoleNName &it, strings.itemTextRoles) + for (const QFormBuilderStrings::TextRoleNName &it : strings.itemTextRoles) if ((p = properties.value(it.second))) { v = textBuilder()->loadText(p); QVariant nativeValue = textBuilder()->toNativeValue(v); @@ -2343,8 +2351,9 @@ } QQueue > pendingQueue; - foreach (DomItem *ui_item, ui_widget->elementItem()) - pendingQueue.enqueue(qMakePair(ui_item, (QTreeWidgetItem *)0)); + const QList &widgetElementItem = ui_widget->elementItem(); + for (DomItem *ui_item : widgetElementItem) + pendingQueue.enqueue(qMakePair(ui_item, nullptr)); while (!pendingQueue.isEmpty()) { const QPair pair = pendingQueue.dequeue(); @@ -2360,7 +2369,7 @@ const QList properties = domItem->elementProperty(); int col = -1; - foreach (DomProperty *property, properties) { + for (DomProperty *property : properties) { if (property->attributeName() == strings.flagsAttribute && !property->elementSet().isEmpty()) { currentItem->setFlags(enumKeysToValue(itemFlags_enum, property->elementSet().toLatin1())); } else if (property->attributeName() == strings.textAttribute && property->elementString()) { @@ -2398,7 +2407,8 @@ } } - foreach (DomItem *childItem, domItem->elementItem()) + const QList &elementItem = domItem->elementItem(); + for (DomItem *childItem : elementItem) pendingQueue.enqueue(qMakePair(childItem, currentItem)); } @@ -2439,7 +2449,8 @@ } } - foreach (DomItem *ui_item, ui_widget->elementItem()) { + const QList &elementItem = ui_widget->elementItem(); + for (DomItem *ui_item : elementItem) { if (ui_item->hasAttributeRow() && ui_item->hasAttributeColumn()) { const DomPropertyHash properties = propertyMap(ui_item->elementProperty()); QTableWidgetItem *item = new QTableWidgetItem; @@ -2456,7 +2467,8 @@ { Q_UNUSED(parentWidget); const QFormBuilderStrings &strings = QFormBuilderStrings::instance(); - foreach (DomItem *ui_item, ui_widget->elementItem()) { + const QList &elementItem = ui_widget->elementItem(); + for (DomItem *ui_item : elementItem) { const DomPropertyHash properties = propertyMap(ui_item->elementProperty()); QString text; QIcon icon; @@ -2543,7 +2555,7 @@ // // Special handling for qtableview/qtreeview fake header attributes // - static QStringList realPropertyNames = + static const QStringList realPropertyNames = (QStringList() << QStringLiteral("visible") << QStringLiteral("cascadingSectionResizes") << QStringLiteral("defaultSectionSize") @@ -2553,13 +2565,13 @@ << QStringLiteral("stretchLastSection")); if (QTreeView *treeView = qobject_cast(itemView)) { - QList allAttributes = ui_widget->elementAttribute(); + const QList &allAttributes = ui_widget->elementAttribute(); QList headerProperties; - foreach (const QString &realPropertyName, realPropertyNames) { + for (const QString &realPropertyName : realPropertyNames) { const QString upperPropertyName = realPropertyName.at(0).toUpper() + realPropertyName.mid(1); const QString fakePropertyName = QStringLiteral("header") + upperPropertyName; - foreach (DomProperty *attr, allAttributes) { + for (DomProperty *attr : allAttributes) { if (attr->attributeName() == fakePropertyName) { attr->setAttributeName(realPropertyName); headerProperties << attr; @@ -2568,18 +2580,18 @@ } applyProperties(treeView->header(), headerProperties); } else if (QTableView *tableView = qobject_cast(itemView)) { - static QStringList headerPrefixes = + static const QStringList headerPrefixes = (QStringList() << QStringLiteral("horizontalHeader") << QStringLiteral("verticalHeader")); - QList allAttributes = ui_widget->elementAttribute(); - foreach (const QString &headerPrefix, headerPrefixes) { + const QList allAttributes = ui_widget->elementAttribute(); + for (const QString &headerPrefix : headerPrefixes) { QList headerProperties; - foreach (const QString &realPropertyName, realPropertyNames) { + for (const QString &realPropertyName : realPropertyNames) { const QString upperPropertyName = realPropertyName.at(0).toUpper() + realPropertyName.mid(1); const QString fakePropertyName = headerPrefix + upperPropertyName; - foreach (DomProperty *attr, allAttributes) { + for (DomProperty *attr : allAttributes) { if (attr->attributeName() == fakePropertyName) { attr->setAttributeName(realPropertyName); headerProperties << attr; @@ -2715,7 +2727,8 @@ QList ui_actions; - foreach (QAction *action, actionGroup->actions()) { + const QList &actions = actionGroup->actions(); + for (QAction *action : actions) { if (DomAction *ui_action = createDom(action)) { ui_actions.append(ui_action); } diff -Nru qttools-opensource-src-5.7.1/src/designer/src/lib/uilib/formbuilder.cpp qttools-opensource-src-5.9.1/src/designer/src/lib/uilib/formbuilder.cpp --- qttools-opensource-src-5.7.1/src/designer/src/lib/uilib/formbuilder.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/designer/src/lib/uilib/formbuilder.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -459,7 +459,8 @@ } // step 2) try with a collection of plugins if (QDesignerCustomWidgetCollectionInterface *c = qobject_cast(o)) { - foreach (QDesignerCustomWidgetInterface *iface, c->customWidgets()) + const auto &collectionCustomWidgets = c->customWidgets(); + for (QDesignerCustomWidgetInterface *iface : collectionCustomWidgets) customWidgets->insert(iface->name(), iface); } } @@ -471,11 +472,12 @@ { d->m_customWidgets.clear(); - foreach (const QString &path, d->m_pluginPaths) { +#if QT_CONFIG(library) + for (const QString &path : qAsConst(d->m_pluginPaths)) { const QDir dir(path); const QStringList candidates = dir.entryList(QDir::Files); - foreach (const QString &plugin, candidates) { + for (const QString &plugin : candidates) { if (!QLibrary::isLibrary(plugin)) continue; @@ -488,11 +490,12 @@ insertPlugins(loader.instance(), &d->m_customWidgets); } } +#endif // QT_CONFIG(library) + // Check statically linked plugins const QObjectList staticPlugins = QPluginLoader::staticInstances(); - if (!staticPlugins.empty()) - foreach (QObject *o, staticPlugins) - insertPlugins(o, &d->m_customWidgets); + for (QObject *o : staticPlugins) + insertPlugins(o, &d->m_customWidgets); } /*! diff -Nru qttools-opensource-src-5.7.1/src/designer/src/lib/uilib/formbuilderextra.cpp qttools-opensource-src-5.9.1/src/designer/src/lib/uilib/formbuilderextra.cpp --- qttools-opensource-src-5.7.1/src/designer/src/lib/uilib/formbuilderextra.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/designer/src/lib/uilib/formbuilderextra.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -300,7 +300,7 @@ clearPerCellValue(l, count, setter, defaultValue); return true; } - const QStringList list = s.split(QLatin1Char(',')); + const QVector list = s.splitRef(QLatin1Char(',')); if (list.empty()) { clearPerCellValue(l, count, setter, defaultValue); return true; @@ -477,7 +477,7 @@ itemRoles.append(qMakePair(Qt::ForegroundRole, QString::fromLatin1("foreground"))); itemRoles.append(qMakePair(Qt::CheckStateRole, QString::fromLatin1("checkState"))); - foreach (const RoleNName &it, itemRoles) + for (const RoleNName &it : qAsConst(itemRoles)) treeItemRoleHash.insert(it.second, it.first); itemTextRoles.append(qMakePair(qMakePair(Qt::EditRole, Qt::DisplayPropertyRole), diff -Nru qttools-opensource-src-5.7.1/src/designer/src/lib/uilib/ui4_p.h qttools-opensource-src-5.9.1/src/designer/src/lib/uilib/ui4_p.h --- qttools-opensource-src-5.7.1/src/designer/src/lib/uilib/ui4_p.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/designer/src/lib/uilib/ui4_p.h 2017-06-23 12:03:39.000000000 +0000 @@ -158,6 +158,7 @@ */ class QDESIGNER_UILIB_EXPORT DomUI { + Q_DISABLE_COPY(DomUI) public: DomUI(); ~DomUI(); @@ -349,12 +350,10 @@ Slots = 32768, ButtonGroups = 65536 }; - - DomUI(const DomUI &other); - void operator = (const DomUI&other); }; class QDESIGNER_UILIB_EXPORT DomIncludes { + Q_DISABLE_COPY(DomIncludes) public: DomIncludes(); ~DomIncludes(); @@ -380,12 +379,10 @@ enum Child { Include = 1 }; - - DomIncludes(const DomIncludes &other); - void operator = (const DomIncludes&other); }; class QDESIGNER_UILIB_EXPORT DomInclude { + Q_DISABLE_COPY(DomInclude) public: DomInclude(); ~DomInclude(); @@ -420,12 +417,10 @@ // child element data uint m_children; - - DomInclude(const DomInclude &other); - void operator = (const DomInclude&other); }; class QDESIGNER_UILIB_EXPORT DomResources { + Q_DISABLE_COPY(DomResources) public: DomResources(); ~DomResources(); @@ -459,12 +454,10 @@ enum Child { Include = 1 }; - - DomResources(const DomResources &other); - void operator = (const DomResources&other); }; class QDESIGNER_UILIB_EXPORT DomResource { + Q_DISABLE_COPY(DomResource) public: DomResource(); ~DomResource(); @@ -491,12 +484,10 @@ // child element data uint m_children; - - DomResource(const DomResource &other); - void operator = (const DomResource&other); }; class QDESIGNER_UILIB_EXPORT DomActionGroup { + Q_DISABLE_COPY(DomActionGroup) public: DomActionGroup(); ~DomActionGroup(); @@ -545,12 +536,10 @@ Property = 4, Attribute = 8 }; - - DomActionGroup(const DomActionGroup &other); - void operator = (const DomActionGroup&other); }; class QDESIGNER_UILIB_EXPORT DomAction { + Q_DISABLE_COPY(DomAction) public: DomAction(); ~DomAction(); @@ -597,12 +586,10 @@ Property = 1, Attribute = 2 }; - - DomAction(const DomAction &other); - void operator = (const DomAction&other); }; class QDESIGNER_UILIB_EXPORT DomActionRef { + Q_DISABLE_COPY(DomActionRef) public: DomActionRef(); ~DomActionRef(); @@ -629,12 +616,10 @@ // child element data uint m_children; - - DomActionRef(const DomActionRef &other); - void operator = (const DomActionRef&other); }; class QDESIGNER_UILIB_EXPORT DomButtonGroup { + Q_DISABLE_COPY(DomButtonGroup) public: DomButtonGroup(); ~DomButtonGroup(); @@ -673,12 +658,10 @@ Property = 1, Attribute = 2 }; - - DomButtonGroup(const DomButtonGroup &other); - void operator = (const DomButtonGroup&other); }; class QDESIGNER_UILIB_EXPORT DomButtonGroups { + Q_DISABLE_COPY(DomButtonGroups) public: DomButtonGroups(); ~DomButtonGroups(); @@ -704,12 +687,10 @@ enum Child { ButtonGroup = 1 }; - - DomButtonGroups(const DomButtonGroups &other); - void operator = (const DomButtonGroups&other); }; class QDESIGNER_UILIB_EXPORT DomImages { + Q_DISABLE_COPY(DomImages) public: DomImages(); ~DomImages(); @@ -735,12 +716,10 @@ enum Child { Image = 1 }; - - DomImages(const DomImages &other); - void operator = (const DomImages&other); }; class QDESIGNER_UILIB_EXPORT DomImage { + Q_DISABLE_COPY(DomImage) public: DomImage(); ~DomImage(); @@ -777,12 +756,10 @@ enum Child { Data = 1 }; - - DomImage(const DomImage &other); - void operator = (const DomImage&other); }; class QDESIGNER_UILIB_EXPORT DomImageData { + Q_DISABLE_COPY(DomImageData) public: DomImageData(); ~DomImageData(); @@ -817,12 +794,10 @@ // child element data uint m_children; - - DomImageData(const DomImageData &other); - void operator = (const DomImageData&other); }; class QDESIGNER_UILIB_EXPORT DomCustomWidgets { + Q_DISABLE_COPY(DomCustomWidgets) public: DomCustomWidgets(); ~DomCustomWidgets(); @@ -848,12 +823,10 @@ enum Child { CustomWidget = 1 }; - - DomCustomWidgets(const DomCustomWidgets &other); - void operator = (const DomCustomWidgets&other); }; class QDESIGNER_UILIB_EXPORT DomHeader { + Q_DISABLE_COPY(DomHeader) public: DomHeader(); ~DomHeader(); @@ -880,12 +853,10 @@ // child element data uint m_children; - - DomHeader(const DomHeader &other); - void operator = (const DomHeader&other); }; class QDESIGNER_UILIB_EXPORT DomCustomWidget { + Q_DISABLE_COPY(DomCustomWidget) public: DomCustomWidget(); ~DomCustomWidget(); @@ -997,12 +968,10 @@ Slots = 1024, Propertyspecifications = 2048 }; - - DomCustomWidget(const DomCustomWidget &other); - void operator = (const DomCustomWidget&other); }; class QDESIGNER_UILIB_EXPORT DomProperties { + Q_DISABLE_COPY(DomProperties) public: DomProperties(); ~DomProperties(); @@ -1028,12 +997,10 @@ enum Child { Property = 1 }; - - DomProperties(const DomProperties &other); - void operator = (const DomProperties&other); }; class QDESIGNER_UILIB_EXPORT DomPropertyData { + Q_DISABLE_COPY(DomPropertyData) public: DomPropertyData(); ~DomPropertyData(); @@ -1060,12 +1027,10 @@ // child element data uint m_children; - - DomPropertyData(const DomPropertyData &other); - void operator = (const DomPropertyData&other); }; class QDESIGNER_UILIB_EXPORT DomSizePolicyData { + Q_DISABLE_COPY(DomSizePolicyData) public: DomSizePolicyData(); ~DomSizePolicyData(); @@ -1100,12 +1065,10 @@ HorData = 1, VerData = 2 }; - - DomSizePolicyData(const DomSizePolicyData &other); - void operator = (const DomSizePolicyData&other); }; class QDESIGNER_UILIB_EXPORT DomLayoutDefault { + Q_DISABLE_COPY(DomLayoutDefault) public: DomLayoutDefault(); ~DomLayoutDefault(); @@ -1140,12 +1103,10 @@ // child element data uint m_children; - - DomLayoutDefault(const DomLayoutDefault &other); - void operator = (const DomLayoutDefault&other); }; class QDESIGNER_UILIB_EXPORT DomLayoutFunction { + Q_DISABLE_COPY(DomLayoutFunction) public: DomLayoutFunction(); ~DomLayoutFunction(); @@ -1180,12 +1141,10 @@ // child element data uint m_children; - - DomLayoutFunction(const DomLayoutFunction &other); - void operator = (const DomLayoutFunction&other); }; class QDESIGNER_UILIB_EXPORT DomTabStops { + Q_DISABLE_COPY(DomTabStops) public: DomTabStops(); ~DomTabStops(); @@ -1211,12 +1170,10 @@ enum Child { TabStop = 1 }; - - DomTabStops(const DomTabStops &other); - void operator = (const DomTabStops&other); }; class QDESIGNER_UILIB_EXPORT DomLayout { + Q_DISABLE_COPY(DomLayout) public: DomLayout(); ~DomLayout(); @@ -1308,12 +1265,10 @@ Attribute = 2, Item = 4 }; - - DomLayout(const DomLayout &other); - void operator = (const DomLayout&other); }; class QDESIGNER_UILIB_EXPORT DomLayoutItem { + Q_DISABLE_COPY(DomLayoutItem) public: DomLayoutItem(); ~DomLayoutItem(); @@ -1390,12 +1345,10 @@ DomWidget* m_widget; DomLayout* m_layout; DomSpacer* m_spacer; - - DomLayoutItem(const DomLayoutItem &other); - void operator = (const DomLayoutItem&other); }; class QDESIGNER_UILIB_EXPORT DomRow { + Q_DISABLE_COPY(DomRow) public: DomRow(); ~DomRow(); @@ -1421,12 +1374,10 @@ enum Child { Property = 1 }; - - DomRow(const DomRow &other); - void operator = (const DomRow&other); }; class QDESIGNER_UILIB_EXPORT DomColumn { + Q_DISABLE_COPY(DomColumn) public: DomColumn(); ~DomColumn(); @@ -1452,12 +1403,10 @@ enum Child { Property = 1 }; - - DomColumn(const DomColumn &other); - void operator = (const DomColumn&other); }; class QDESIGNER_UILIB_EXPORT DomItem { + Q_DISABLE_COPY(DomItem) public: DomItem(); ~DomItem(); @@ -1504,12 +1453,10 @@ Property = 1, Item = 2 }; - - DomItem(const DomItem &other); - void operator = (const DomItem&other); }; class QDESIGNER_UILIB_EXPORT DomWidget { + Q_DISABLE_COPY(DomWidget) public: DomWidget(); ~DomWidget(); @@ -1624,12 +1571,10 @@ AddAction = 4096, ZOrder = 8192 }; - - DomWidget(const DomWidget &other); - void operator = (const DomWidget&other); }; class QDESIGNER_UILIB_EXPORT DomSpacer { + Q_DISABLE_COPY(DomSpacer) public: DomSpacer(); ~DomSpacer(); @@ -1663,12 +1608,10 @@ enum Child { Property = 1 }; - - DomSpacer(const DomSpacer &other); - void operator = (const DomSpacer&other); }; class QDESIGNER_UILIB_EXPORT DomColor { + Q_DISABLE_COPY(DomColor) public: DomColor(); ~DomColor(); @@ -1718,12 +1661,10 @@ Green = 2, Blue = 4 }; - - DomColor(const DomColor &other); - void operator = (const DomColor&other); }; class QDESIGNER_UILIB_EXPORT DomGradientStop { + Q_DISABLE_COPY(DomGradientStop) public: DomGradientStop(); ~DomGradientStop(); @@ -1760,12 +1701,10 @@ enum Child { Color = 1 }; - - DomGradientStop(const DomGradientStop &other); - void operator = (const DomGradientStop&other); }; class QDESIGNER_UILIB_EXPORT DomGradient { + Q_DISABLE_COPY(DomGradient) public: DomGradient(); ~DomGradient(); @@ -1895,12 +1834,10 @@ enum Child { GradientStop = 1 }; - - DomGradient(const DomGradient &other); - void operator = (const DomGradient&other); }; class QDESIGNER_UILIB_EXPORT DomBrush { + Q_DISABLE_COPY(DomBrush) public: DomBrush(); ~DomBrush(); @@ -1945,12 +1882,10 @@ DomColor* m_color; DomProperty* m_texture; DomGradient* m_gradient; - - DomBrush(const DomBrush &other); - void operator = (const DomBrush&other); }; class QDESIGNER_UILIB_EXPORT DomColorRole { + Q_DISABLE_COPY(DomColorRole) public: DomColorRole(); ~DomColorRole(); @@ -1987,12 +1922,10 @@ enum Child { Brush = 1 }; - - DomColorRole(const DomColorRole &other); - void operator = (const DomColorRole&other); }; class QDESIGNER_UILIB_EXPORT DomColorGroup { + Q_DISABLE_COPY(DomColorGroup) public: DomColorGroup(); ~DomColorGroup(); @@ -2023,12 +1956,10 @@ ColorRole = 1, Color = 2 }; - - DomColorGroup(const DomColorGroup &other); - void operator = (const DomColorGroup&other); }; class QDESIGNER_UILIB_EXPORT DomPalette { + Q_DISABLE_COPY(DomPalette) public: DomPalette(); ~DomPalette(); @@ -2073,12 +2004,10 @@ Inactive = 2, Disabled = 4 }; - - DomPalette(const DomPalette &other); - void operator = (const DomPalette&other); }; class QDESIGNER_UILIB_EXPORT DomFont { + Q_DISABLE_COPY(DomFont) public: DomFont(); ~DomFont(); @@ -2169,12 +2098,10 @@ StyleStrategy = 256, Kerning = 512 }; - - DomFont(const DomFont &other); - void operator = (const DomFont&other); }; class QDESIGNER_UILIB_EXPORT DomPoint { + Q_DISABLE_COPY(DomPoint) public: DomPoint(); ~DomPoint(); @@ -2209,12 +2136,10 @@ X = 1, Y = 2 }; - - DomPoint(const DomPoint &other); - void operator = (const DomPoint&other); }; class QDESIGNER_UILIB_EXPORT DomRect { + Q_DISABLE_COPY(DomRect) public: DomRect(); ~DomRect(); @@ -2263,12 +2188,10 @@ Width = 4, Height = 8 }; - - DomRect(const DomRect &other); - void operator = (const DomRect&other); }; class QDESIGNER_UILIB_EXPORT DomLocale { + Q_DISABLE_COPY(DomLocale) public: DomLocale(); ~DomLocale(); @@ -2303,12 +2226,10 @@ // child element data uint m_children; - - DomLocale(const DomLocale &other); - void operator = (const DomLocale&other); }; class QDESIGNER_UILIB_EXPORT DomSizePolicy { + Q_DISABLE_COPY(DomSizePolicy) public: DomSizePolicy(); ~DomSizePolicy(); @@ -2373,12 +2294,10 @@ HorStretch = 4, VerStretch = 8 }; - - DomSizePolicy(const DomSizePolicy &other); - void operator = (const DomSizePolicy&other); }; class QDESIGNER_UILIB_EXPORT DomSize { + Q_DISABLE_COPY(DomSize) public: DomSize(); ~DomSize(); @@ -2413,12 +2332,10 @@ Width = 1, Height = 2 }; - - DomSize(const DomSize &other); - void operator = (const DomSize&other); }; class QDESIGNER_UILIB_EXPORT DomDate { + Q_DISABLE_COPY(DomDate) public: DomDate(); ~DomDate(); @@ -2460,12 +2377,10 @@ Month = 2, Day = 4 }; - - DomDate(const DomDate &other); - void operator = (const DomDate&other); }; class QDESIGNER_UILIB_EXPORT DomTime { + Q_DISABLE_COPY(DomTime) public: DomTime(); ~DomTime(); @@ -2507,12 +2422,10 @@ Minute = 2, Second = 4 }; - - DomTime(const DomTime &other); - void operator = (const DomTime&other); }; class QDESIGNER_UILIB_EXPORT DomDateTime { + Q_DISABLE_COPY(DomDateTime) public: DomDateTime(); ~DomDateTime(); @@ -2575,12 +2488,10 @@ Month = 16, Day = 32 }; - - DomDateTime(const DomDateTime &other); - void operator = (const DomDateTime&other); }; class QDESIGNER_UILIB_EXPORT DomStringList { + Q_DISABLE_COPY(DomStringList) public: DomStringList(); ~DomStringList(); @@ -2630,12 +2541,10 @@ enum Child { String = 1 }; - - DomStringList(const DomStringList &other); - void operator = (const DomStringList&other); }; class QDESIGNER_UILIB_EXPORT DomResourcePixmap { + Q_DISABLE_COPY(DomResourcePixmap) public: DomResourcePixmap(); ~DomResourcePixmap(); @@ -2670,12 +2579,10 @@ // child element data uint m_children; - - DomResourcePixmap(const DomResourcePixmap &other); - void operator = (const DomResourcePixmap&other); }; class QDESIGNER_UILIB_EXPORT DomResourceIcon { + Q_DISABLE_COPY(DomResourceIcon) public: DomResourceIcon(); ~DomResourceIcon(); @@ -2776,12 +2683,10 @@ SelectedOff = 64, SelectedOn = 128 }; - - DomResourceIcon(const DomResourceIcon &other); - void operator = (const DomResourceIcon&other); }; class QDESIGNER_UILIB_EXPORT DomString { + Q_DISABLE_COPY(DomString) public: DomString(); ~DomString(); @@ -2824,12 +2729,10 @@ // child element data uint m_children; - - DomString(const DomString &other); - void operator = (const DomString&other); }; class QDESIGNER_UILIB_EXPORT DomPointF { + Q_DISABLE_COPY(DomPointF) public: DomPointF(); ~DomPointF(); @@ -2864,12 +2767,10 @@ X = 1, Y = 2 }; - - DomPointF(const DomPointF &other); - void operator = (const DomPointF&other); }; class QDESIGNER_UILIB_EXPORT DomRectF { + Q_DISABLE_COPY(DomRectF) public: DomRectF(); ~DomRectF(); @@ -2918,12 +2819,10 @@ Width = 4, Height = 8 }; - - DomRectF(const DomRectF &other); - void operator = (const DomRectF&other); }; class QDESIGNER_UILIB_EXPORT DomSizeF { + Q_DISABLE_COPY(DomSizeF) public: DomSizeF(); ~DomSizeF(); @@ -2958,12 +2857,10 @@ Width = 1, Height = 2 }; - - DomSizeF(const DomSizeF &other); - void operator = (const DomSizeF&other); }; class QDESIGNER_UILIB_EXPORT DomChar { + Q_DISABLE_COPY(DomChar) public: DomChar(); ~DomChar(); @@ -2991,12 +2888,10 @@ enum Child { Unicode = 1 }; - - DomChar(const DomChar &other); - void operator = (const DomChar&other); }; class QDESIGNER_UILIB_EXPORT DomUrl { + Q_DISABLE_COPY(DomUrl) public: DomUrl(); ~DomUrl(); @@ -3025,12 +2920,10 @@ enum Child { String = 1 }; - - DomUrl(const DomUrl &other); - void operator = (const DomUrl&other); }; class QDESIGNER_UILIB_EXPORT DomProperty { + Q_DISABLE_COPY(DomProperty) public: DomProperty(); ~DomProperty(); @@ -3221,12 +3114,10 @@ uint m_UInt; qulonglong m_uLongLong; DomBrush* m_brush; - - DomProperty(const DomProperty &other); - void operator = (const DomProperty&other); }; class QDESIGNER_UILIB_EXPORT DomConnections { + Q_DISABLE_COPY(DomConnections) public: DomConnections(); ~DomConnections(); @@ -3252,12 +3143,10 @@ enum Child { Connection = 1 }; - - DomConnections(const DomConnections &other); - void operator = (const DomConnections&other); }; class QDESIGNER_UILIB_EXPORT DomConnection { + Q_DISABLE_COPY(DomConnection) public: DomConnection(); ~DomConnection(); @@ -3314,12 +3203,10 @@ Slot = 8, Hints = 16 }; - - DomConnection(const DomConnection &other); - void operator = (const DomConnection&other); }; class QDESIGNER_UILIB_EXPORT DomConnectionHints { + Q_DISABLE_COPY(DomConnectionHints) public: DomConnectionHints(); ~DomConnectionHints(); @@ -3345,12 +3232,10 @@ enum Child { Hint = 1 }; - - DomConnectionHints(const DomConnectionHints &other); - void operator = (const DomConnectionHints&other); }; class QDESIGNER_UILIB_EXPORT DomConnectionHint { + Q_DISABLE_COPY(DomConnectionHint) public: DomConnectionHint(); ~DomConnectionHint(); @@ -3393,12 +3278,10 @@ X = 1, Y = 2 }; - - DomConnectionHint(const DomConnectionHint &other); - void operator = (const DomConnectionHint&other); }; class QDESIGNER_UILIB_EXPORT DomScript { + Q_DISABLE_COPY(DomScript) public: DomScript(); ~DomScript(); @@ -3433,12 +3316,10 @@ // child element data uint m_children; - - DomScript(const DomScript &other); - void operator = (const DomScript&other); }; class QDESIGNER_UILIB_EXPORT DomWidgetData { + Q_DISABLE_COPY(DomWidgetData) public: DomWidgetData(); ~DomWidgetData(); @@ -3464,12 +3345,10 @@ enum Child { Property = 1 }; - - DomWidgetData(const DomWidgetData &other); - void operator = (const DomWidgetData&other); }; class QDESIGNER_UILIB_EXPORT DomDesignerData { + Q_DISABLE_COPY(DomDesignerData) public: DomDesignerData(); ~DomDesignerData(); @@ -3495,12 +3374,10 @@ enum Child { Property = 1 }; - - DomDesignerData(const DomDesignerData &other); - void operator = (const DomDesignerData&other); }; class QDESIGNER_UILIB_EXPORT DomSlots { + Q_DISABLE_COPY(DomSlots) public: DomSlots(); ~DomSlots(); @@ -3531,12 +3408,10 @@ Signal = 1, Slot = 2 }; - - DomSlots(const DomSlots &other); - void operator = (const DomSlots&other); }; class QDESIGNER_UILIB_EXPORT DomPropertySpecifications { + Q_DISABLE_COPY(DomPropertySpecifications) public: DomPropertySpecifications(); ~DomPropertySpecifications(); @@ -3567,12 +3442,10 @@ Tooltip = 1, Stringpropertyspecification = 2 }; - - DomPropertySpecifications(const DomPropertySpecifications &other); - void operator = (const DomPropertySpecifications&other); }; class QDESIGNER_UILIB_EXPORT DomPropertyToolTip { + Q_DISABLE_COPY(DomPropertyToolTip) public: DomPropertyToolTip(); ~DomPropertyToolTip(); @@ -3599,12 +3472,10 @@ // child element data uint m_children; - - DomPropertyToolTip(const DomPropertyToolTip &other); - void operator = (const DomPropertyToolTip&other); }; class QDESIGNER_UILIB_EXPORT DomStringPropertySpecification { + Q_DISABLE_COPY(DomStringPropertySpecification) public: DomStringPropertySpecification(); ~DomStringPropertySpecification(); @@ -3647,9 +3518,6 @@ // child element data uint m_children; - - DomStringPropertySpecification(const DomStringPropertySpecification &other); - void operator = (const DomStringPropertySpecification&other); }; diff -Nru qttools-opensource-src-5.7.1/src/designer/src/plugins/tools/view3d/view3d.cpp qttools-opensource-src-5.9.1/src/designer/src/plugins/tools/view3d/view3d.cpp --- qttools-opensource-src-5.7.1/src/designer/src/plugins/tools/view3d/view3d.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/designer/src/plugins/tools/view3d/view3d.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -188,8 +188,8 @@ { makeCurrent(); glDeleteLists(m_form_list_id, 1); - foreach (GLuint id, m_texture_map) - glDeleteTextures(1, &id); + for (TextureMap::iterator it = m_texture_map.begin(), end = m_texture_map.end(); it != end; ++it) + glDeleteTextures(1, &(it.value())); m_texture_map.clear(); m_widget_name_map.clear(); m_next_widget_name = 0; @@ -378,8 +378,8 @@ if (!skipWidget(core, widget)) func(depth++, widget); - QObjectList child_obj_list = widget->children(); - foreach (QObject *child_obj, child_obj_list) { + const QObjectList child_obj_list = widget->children(); + for (QObject *child_obj : child_obj_list) { QWidget *child = qobject_cast(child_obj); if (child != 0) walkWidgetTree(core, depth, child, func); diff -Nru qttools-opensource-src-5.7.1/src/designer/src/uitools/quiloader.cpp qttools-opensource-src-5.9.1/src/designer/src/uitools/quiloader.cpp --- qttools-opensource-src-5.7.1/src/designer/src/uitools/quiloader.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/designer/src/uitools/quiloader.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -5,7 +5,7 @@ ** ** This file is part of the Qt Designer of the Qt Toolkit. ** -** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** $QT_BEGIN_LICENSE:LGPL$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the @@ -14,13 +14,24 @@ ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** ** GNU General Public License Usage ** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3 as published by the Free Software -** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 ** included in the packaging of this file. Please review the following ** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. ** ** $QT_END_LICENSE$ ** @@ -214,7 +225,8 @@ virtual bool eventFilter(QObject *o, QEvent *event) { if (event->type() == QEvent::LanguageChange) { - foreach (const QByteArray &prop, o->dynamicPropertyNames()) { + const QList &dynamicPropertyNames = o->dynamicPropertyNames(); + for (const QByteArray &prop : dynamicPropertyNames) { if (prop.startsWith(PROP_GENERIC_PREFIX)) { const QByteArray propName = prop.mid(sizeof(PROP_GENERIC_PREFIX) - 1); const QUiTranslatableStringValue tsv = @@ -418,7 +430,7 @@ // (as they are "shadowed" by the property sheets in designer). So do the initial // translation here. bool anyTrs = false; - foreach (const DomProperty *p, properties) { + for (const DomProperty *p : properties) { QUiTranslatableStringValue strVal; const QString text = convertTranslatable(p, m_class, &strVal); if (text.isEmpty()) @@ -634,8 +646,10 @@ #endif // QT_NO_DATASTREAM d->builder.loader = this; +#if QT_CONFIG(library) QStringList paths; - foreach (const QString &path, QApplication::libraryPaths()) { + const QStringList &libraryPaths = QApplication::libraryPaths(); + for (const QString &path : libraryPaths) { QString libPath = path; libPath += QDir::separator(); libPath += QStringLiteral("designer"); @@ -643,6 +657,7 @@ } d->builder.setPluginPath(paths); +#endif // QT_CONFIG(library) } /*! @@ -789,9 +804,9 @@ d->setupWidgetMap(); widget_map available = *g_widgets(); - foreach (QDesignerCustomWidgetInterface *plugin, d->builder.customWidgets()) { + const auto &customWidgets = d->builder.customWidgets(); + for (QDesignerCustomWidgetInterface *plugin : customWidgets) available.insert(plugin->name(), true); - } return available.keys(); } diff -Nru qttools-opensource-src-5.7.1/src/designer/src/uitools/quiloader.h qttools-opensource-src-5.9.1/src/designer/src/uitools/quiloader.h --- qttools-opensource-src-5.7.1/src/designer/src/uitools/quiloader.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/designer/src/uitools/quiloader.h 2017-06-23 12:03:39.000000000 +0000 @@ -5,7 +5,7 @@ ** ** This file is part of the Qt Designer of the Qt Toolkit. ** -** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** $QT_BEGIN_LICENSE:LGPL$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the @@ -14,13 +14,24 @@ ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** ** GNU General Public License Usage ** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3 as published by the Free Software -** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 ** included in the packaging of this file. Please review the following ** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. ** ** $QT_END_LICENSE$ ** diff -Nru qttools-opensource-src-5.7.1/src/kmap2qmap/kmap2qmap.pro qttools-opensource-src-5.9.1/src/kmap2qmap/kmap2qmap.pro --- qttools-opensource-src-5.7.1/src/kmap2qmap/kmap2qmap.pro 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/kmap2qmap/kmap2qmap.pro 2017-06-23 12:03:39.000000000 +0000 @@ -1,4 +1,4 @@ -QT = core platformsupport-private +QT = core input_support-private CONFIG += console SOURCES += main.cpp diff -Nru qttools-opensource-src-5.7.1/src/kmap2qmap/main.cpp qttools-opensource-src-5.9.1/src/kmap2qmap/main.cpp --- qttools-opensource-src-5.7.1/src/kmap2qmap/main.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/kmap2qmap/main.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -38,7 +38,7 @@ #include #include -#include +#include using namespace std; @@ -603,7 +603,8 @@ keymaps.clear(); if (tokens.count() > 1) { - foreach (const QByteArray §ion, tokens[1].split(',')) { + const QByteArrayList tokenList = tokens[1].split(','); + for (const QByteArray §ion : tokenList) { int dashpos = section.indexOf('-'); //qWarning("Section %s", section.constData()); @@ -645,7 +646,7 @@ searchpath << d; searchpath << QDir::current(); - foreach (const QDir &path, searchpath) { + for (const QDir &path : qAsConst(searchpath)) { QFile f2(path.filePath(incname)); //qWarning(" -- trying to include %s", qPrintable(f2.fileName())); if (f2.open(QIODevice::ReadOnly)) { diff -Nru qttools-opensource-src-5.7.1/src/linguist/lconvert/main.cpp qttools-opensource-src-5.9.1/src/linguist/lconvert/main.cpp --- qttools-opensource-src-5.7.1/src/linguist/lconvert/main.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/linguist/lconvert/main.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -50,7 +50,7 @@ QString loaders; QString line(QLatin1String(" %1 - %2\n")); foreach (Translator::FileFormat format, Translator::registeredFileFormats()) - loaders += line.arg(format.extension, -5).arg(format.description); + loaders += line.arg(format.extension, -5).arg(format.description()); std::cout << qPrintable(LC::tr("\nUsage:\n" " lconvert [options] [...]\n\n" diff -Nru qttools-opensource-src-5.7.1/src/linguist/linguist/doc/src/linguist-manual.qdoc qttools-opensource-src-5.9.1/src/linguist/linguist/doc/src/linguist-manual.qdoc --- qttools-opensource-src-5.7.1/src/linguist/linguist/doc/src/linguist-manual.qdoc 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/linguist/linguist/doc/src/linguist-manual.qdoc 2017-06-23 12:03:39.000000000 +0000 @@ -847,7 +847,8 @@ The \c lupdate tool extracts user interface strings from your application. It reads the application .pro file to identify which source files contain text to be translated. This means your source files must be listed - in the \c SOURCES or \c HEADERS entry in the .pro file. If your files are + in the \c SOURCES or \c HEADERS entry in the .pro file, or in resource + files listed in the \c RESOURCE entry. If your files are not listed, the text in them will not be found. An example of a complete \c .pro file with four translation source @@ -870,37 +871,6 @@ \snippet doc_src_linguist-manual.cpp 3 - \section2 Use a Conditional to Hide QML Source From the Compiler - - The SOURCES variable is intended for C++ source files. If you list QML - or JavaScript source files there, the compiler tries to build them as though - they are C++ files. As a workaround, you can use an \c lupdate_only{...} - conditional statement so the \c lupdate tool sees the .qml files but the C++ - compiler ignores them. - - For example, the following .pro file snippet specifies two .qml files in - the application: - - \code - lupdate_only { - SOURCES = main.qml \ - MainPage.qml - } - \endcode - - You can also specify the .qml source files with a wildcard match. The - search is not recursive so you need to specify each directory where there - are user interface strings in the source code: - - \code - lupdate_only { - SOURCES = *.qml \ - *.js \ - content/*.qml \ - content/*.js - } - \endcode - \section1 Internationalizing Applications Design your application so that it can be adapted to various languages and diff -Nru qttools-opensource-src-5.7.1/src/linguist/linguist/errorsview.cpp qttools-opensource-src-5.9.1/src/linguist/linguist/errorsview.cpp --- qttools-opensource-src-5.7.1/src/linguist/linguist/errorsview.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/linguist/linguist/errorsview.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -65,7 +65,10 @@ case MissingAccelerator: addError(model, tr("Accelerator possibly missing in translation.")); break; - case PunctuationDiffer: + case SurroundingWhitespaceDiffers: + addError(model, tr("Translation does not have same leading and trailing whitespace as the source text.")); + break; + case PunctuationDiffers: addError(model, tr("Translation does not end with the same punctuation as the source text.")); break; case IgnoredPhrasebook: diff -Nru qttools-opensource-src-5.7.1/src/linguist/linguist/errorsview.h qttools-opensource-src-5.9.1/src/linguist/linguist/errorsview.h --- qttools-opensource-src-5.7.1/src/linguist/linguist/errorsview.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/linguist/linguist/errorsview.h 2017-06-23 12:03:39.000000000 +0000 @@ -44,7 +44,8 @@ enum ErrorType { SuperfluousAccelerator, MissingAccelerator, - PunctuationDiffer, + SurroundingWhitespaceDiffers, + PunctuationDiffers, IgnoredPhrasebook, PlaceMarkersDiffer, NumerusMarkerMissing Binary files /tmp/tmpVyXDno/3zqOqCMQMn/qttools-opensource-src-5.7.1/src/linguist/linguist/images/mac/surroundingwhitespace.png and /tmp/tmpVyXDno/YZGoeGyi7H/qttools-opensource-src-5.9.1/src/linguist/linguist/images/mac/surroundingwhitespace.png differ Binary files /tmp/tmpVyXDno/3zqOqCMQMn/qttools-opensource-src-5.7.1/src/linguist/linguist/images/win/surroundingwhitespace.png and /tmp/tmpVyXDno/YZGoeGyi7H/qttools-opensource-src-5.9.1/src/linguist/linguist/images/win/surroundingwhitespace.png differ diff -Nru qttools-opensource-src-5.7.1/src/linguist/linguist/Info_mac.plist qttools-opensource-src-5.9.1/src/linguist/linguist/Info_mac.plist --- qttools-opensource-src-5.7.1/src/linguist/linguist/Info_mac.plist 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/linguist/linguist/Info_mac.plist 2017-06-23 12:03:39.000000000 +0000 @@ -1,80 +1,79 @@ - - + + - NSPrincipalClass - NSApplication + NSPrincipalClass + NSApplication CFBundleIconFile linguist.icns CFBundleIdentifier - com.trolltech.Linguist + org.qt-project.Linguist CFBundlePackageType APPL - CFBundleGetInfoString - Created by Qt/QMake CFBundleSignature ???? CFBundleExecutable Linguist - - CFBundleDocumentTypes - - - CFBundleTypeRole - Editor - CFBundleTypeIconFile - linguist.icns - CFBundleTypeExtensions - - qph - - CFBundleTypeName - Qt Linguist 'Phrase Book' - LSHandlerRank - Default - - - CFBundleTypeRole - Editor - CFBundleTypeIconFile - linguist.icns - CFBundleTypeExtensions - - ts - - CFBundleTypeName - Qt Translation Source - LSHandlerRank - Default - - - CFBundleTypeRole - Editor - CFBundleTypeIconFile - linguist.icns - CFBundleTypeExtensions - - po - - CFBundleTypeName - GNU Gettext Localization File - LSHandlerRank - Default - - - CFBundleTypeRole - Editor - CFBundleTypeIconFile - linguist.icns - CFBundleTypeExtensions - - xlf - - CFBundleTypeName - XLIFF Localization File - LSHandlerRank - Default - - + CFBundleDocumentTypes + + + CFBundleTypeRole + Editor + CFBundleTypeIconFile + linguist.icns + CFBundleTypeExtensions + + qph + + CFBundleTypeName + Qt Linguist 'Phrase Book' + LSHandlerRank + Default + + + CFBundleTypeRole + Editor + CFBundleTypeIconFile + linguist.icns + CFBundleTypeExtensions + + ts + + CFBundleTypeName + Qt Translation Source + LSHandlerRank + Default + + + CFBundleTypeRole + Editor + CFBundleTypeIconFile + linguist.icns + CFBundleTypeExtensions + + po + + CFBundleTypeName + GNU Gettext Localization File + LSHandlerRank + Default + + + CFBundleTypeRole + Editor + CFBundleTypeIconFile + linguist.icns + CFBundleTypeExtensions + + xlf + + CFBundleTypeName + XLIFF Localization File + LSHandlerRank + Default + + + NSHumanReadableCopyright + (C) 2017 The Qt Company Ltd diff -Nru qttools-opensource-src-5.7.1/src/linguist/linguist/linguist.pro qttools-opensource-src-5.9.1/src/linguist/linguist/linguist.pro --- qttools-opensource-src-5.7.1/src/linguist/linguist/linguist.pro 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/linguist/linguist/linguist.pro 2017-06-23 12:03:39.000000000 +0000 @@ -1,5 +1,4 @@ -QT += core-private widgets xml uitools-private -qtHaveModule(printsupport): QT += printsupport +QT += core-private widgets xml uitools-private printsupport DEFINES += QT_NO_CAST_FROM_ASCII QT_NO_CAST_TO_ASCII @@ -59,7 +58,16 @@ contains(QT_PRODUCT, OpenSource.*):DEFINES *= QT_OPENSOURCE DEFINES += QT_KEYWORDS TARGET = linguist -win32:RC_FILE = linguist.rc + +QMAKE_TARGET_PRODUCT = Qt Linguist +QMAKE_TARGET_DESCRIPTION = Tool for adding translations to Qt applications + +win32 { + RC_ICONS = linguist.ico + VERSION = $${QT_VERSION}.0 +} else { + VERSION = $${QT_VERSION} +} mac { static:CONFIG -= global_init_link_order ICON = linguist.icns diff -Nru qttools-opensource-src-5.7.1/src/linguist/linguist/linguist.qrc qttools-opensource-src-5.9.1/src/linguist/linguist/linguist.qrc --- qttools-opensource-src-5.7.1/src/linguist/linguist/linguist.qrc 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/linguist/linguist/linguist.qrc 2017-06-23 12:03:39.000000000 +0000 @@ -15,6 +15,7 @@ images/mac/prev.png images/mac/prevunfinished.png images/mac/print.png + images/mac/surroundingwhitespace.png images/mac/punctuation.png images/mac/redo.png images/mac/searchfind.png @@ -47,6 +48,7 @@ images/win/prev.png images/win/prevunfinished.png images/win/print.png + images/win/surroundingwhitespace.png images/win/punctuation.png images/win/redo.png images/win/searchfind.png diff -Nru qttools-opensource-src-5.7.1/src/linguist/linguist/linguist.rc qttools-opensource-src-5.9.1/src/linguist/linguist/linguist.rc --- qttools-opensource-src-5.7.1/src/linguist/linguist/linguist.rc 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/linguist/linguist/linguist.rc 1970-01-01 00:00:00.000000000 +0000 @@ -1,32 +0,0 @@ -#include "winver.h" - -IDI_ICON1 ICON DISCARDABLE "linguist.ico" - -VS_VERSION_INFO VERSIONINFO - FILEVERSION 1,0,0,0 - PRODUCTVERSION 1,0,0,0 - FILEFLAGS 0x0L - FILEFLAGSMASK 0x3fL - FILEOS 0x00040004L - FILETYPE 0x1L - FILESUBTYPE 0x0L -BEGIN - BLOCK "StringFileInfo" - BEGIN - BLOCK "000004b0" - BEGIN - VALUE "CompanyName", "Digia Plc and/or its subsidiary(-ies)" - VALUE "FileDescription", "Qt Linguist" - VALUE "FileVersion", "1.0.0.0" - VALUE "LegalCopyright", "Copyright (C) 2015 The Qt Company Ltd." - VALUE "InternalName", "linguist" - VALUE "OriginalFilename", "linguist.exe" - VALUE "ProductName", "Qt Linguist" - VALUE "ProductVersion", "1.0.0.0" - END - END - BLOCK "VarFileInfo" - BEGIN - VALUE "Translation", 0x0, 1200 - END -END diff -Nru qttools-opensource-src-5.7.1/src/linguist/linguist/mainwindow.cpp qttools-opensource-src-5.9.1/src/linguist/linguist/mainwindow.cpp --- qttools-opensource-src-5.7.1/src/linguist/linguist/mainwindow.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/linguist/linguist/mainwindow.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -102,6 +102,28 @@ || fileName.endsWith(QLatin1String(".jui")); } +static QString leadingWhitespace(const QString &str) +{ + int i = 0; + for (; i < str.size(); i++) { + if (!str[i].isSpace()) { + break; + } + } + return str.left(i); +} + +static QString trailingWhitespace(const QString &str) +{ + int i = str.size(); + while (--i >= 0) { + if (!str[i].isSpace()) { + break; + } + } + return str.mid(i + 1); +} + static Ending ending(QString str, QLocale::Language lang) { str = str.simplified(); @@ -743,11 +765,11 @@ QString filter; foreach (const Translator::FileFormat &format, Translator::registeredFileFormats()) { if (format.fileType == Translator::FileFormat::TranslationSource && format.priority >= 0) { - filter.append(pattern.arg(format.description).arg(format.extension)); + filter.append(pattern.arg(format.description(), format.extension)); allExtensions.append(QLatin1String("*.") + format.extension); } } - QString allFilter = QObject::tr("Translation files (%1);;").arg(allExtensions.join(QLatin1String(" "))); + QString allFilter = QObject::tr("Translation files (%1);;").arg(allExtensions.join(QLatin1Char(' '))); if (allFirst) filter.prepend(allFilter); else @@ -910,7 +932,7 @@ } if (m->message().isPlural() && m_dataModel->language(k) != QLocale::C) { QStringList transls = m->translations(); - pout.addBox(40, transls.join(QLatin1String("\n"))); + pout.addBox(40, transls.join(QLatin1Char('\n'))); } else { pout.addBox(40, m->translation()); } @@ -1333,7 +1355,7 @@ "

Qt Linguist is a tool for adding translations to Qt " "applications.

" "

Copyright (C) %2 The Qt Company Ltd." - ).arg(version, QStringLiteral("2016"))); + ).arg(version, QStringLiteral("2017"))); box.setWindowTitle(QApplication::translate("AboutDialog", "Qt Linguist")); box.setIcon(QMessageBox::NoIcon); @@ -1422,6 +1444,7 @@ m_ui.actionCloseAll->setEnabled(enable); m_ui.actionPrint->setEnabled(enable); m_ui.actionAccelerators->setEnabled(enable); + m_ui.actionSurroundingWhitespace->setEnabled(enable); m_ui.actionEndingPunctuation->setEnabled(enable); m_ui.actionPhraseMatches->setEnabled(enable); m_ui.actionPlaceMarkerMatches->setEnabled(enable); @@ -1815,6 +1838,7 @@ m_ui.actionNext->setIcon(QIcon(prefix + QStringLiteral("/next.png"))); m_ui.actionNextUnfinished->setIcon(QIcon(prefix + QStringLiteral("/nextunfinished.png"))); m_ui.actionPhraseMatches->setIcon(QIcon(prefix + QStringLiteral("/phrase.png"))); + m_ui.actionSurroundingWhitespace->setIcon(QIcon(prefix + QStringLiteral("/surroundingwhitespace.png"))); m_ui.actionEndingPunctuation->setIcon(QIcon(prefix + QStringLiteral("/punctuation.png"))); m_ui.actionPrev->setIcon(QIcon(prefix + QStringLiteral("/prev.png"))); m_ui.actionPrevUnfinished->setIcon(QIcon(prefix + QStringLiteral("/prevunfinished.png"))); @@ -1886,6 +1910,7 @@ // Validation menu connect(m_ui.actionAccelerators, SIGNAL(triggered()), this, SLOT(revalidate())); + connect(m_ui.actionSurroundingWhitespace, SIGNAL(triggered()), this, SLOT(revalidate())); connect(m_ui.actionEndingPunctuation, SIGNAL(triggered()), this, SLOT(revalidate())); connect(m_ui.actionPhraseMatches, SIGNAL(triggered()), this, SLOT(revalidate())); connect(m_ui.actionPlaceMarkerMatches, SIGNAL(triggered()), this, SLOT(revalidate())); @@ -2159,6 +2184,7 @@ translationst->addAction(m_ui.actionDoneAndNext); validationt->addAction(m_ui.actionAccelerators); + validationt->addAction(m_ui.actionSurroundingWhitespace); validationt->addAction(m_ui.actionEndingPunctuation); validationt->addAction(m_ui.actionPhraseMatches); validationt->addAction(m_ui.actionPlaceMarkerMatches); @@ -2437,6 +2463,19 @@ danger = true; } } + if (m_ui.actionSurroundingWhitespace->isChecked()) { + bool whitespaceok = true; + for (int i = 0; i < translations.count() && whitespaceok; ++i) { + whitespaceok &= (leadingWhitespace(source) == leadingWhitespace(translations[i])); + whitespaceok &= (trailingWhitespace(source) == trailingWhitespace(translations[i])); + } + + if (!whitespaceok) { + if (verbose) + m_errorsView->addError(mi, ErrorsView::SurroundingWhitespaceDiffers); + danger = true; + } + } if (m_ui.actionEndingPunctuation->isChecked()) { bool endingok = true; for (int i = 0; i < translations.count() && endingok; ++i) { @@ -2446,7 +2485,7 @@ if (!endingok) { if (verbose) - m_errorsView->addError(mi, ErrorsView::PunctuationDiffer); + m_errorsView->addError(mi, ErrorsView::PunctuationDiffers); danger = true; } } @@ -2557,6 +2596,8 @@ m_ui.actionAccelerators->setChecked( config.value(settingPath("Validators/Accelerator"), true).toBool()); + m_ui.actionSurroundingWhitespace->setChecked( + config.value(settingPath("Validators/SurroundingWhitespace"), true).toBool()); m_ui.actionEndingPunctuation->setChecked( config.value(settingPath("Validators/EndingPunctuation"), true).toBool()); m_ui.actionPhraseMatches->setChecked( @@ -2588,6 +2629,8 @@ saveGeometry()); config.setValue(settingPath("Validators/Accelerator"), m_ui.actionAccelerators->isChecked()); + config.setValue(settingPath("Validators/SurroundingWhitespace"), + m_ui.actionSurroundingWhitespace->isChecked()); config.setValue(settingPath("Validators/EndingPunctuation"), m_ui.actionEndingPunctuation->isChecked()); config.setValue(settingPath("Validators/PhraseMatch"), diff -Nru qttools-opensource-src-5.7.1/src/linguist/linguist/mainwindow.ui qttools-opensource-src-5.9.1/src/linguist/linguist/mainwindow.ui --- qttools-opensource-src-5.7.1/src/linguist/linguist/mainwindow.ui 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/linguist/linguist/mainwindow.ui 2017-06-23 12:03:39.000000000 +0000 @@ -82,6 +82,7 @@ V&alidation + @@ -507,6 +508,23 @@ QAction::NoRole + + + + + true + + + Surrounding &Whitespace. + + + Toggle the validity check of surrounding whitespace. + + + Toggle the validity check of surrounding whitespace. If the check fails, a message is shown in the warnings window. + + + QAction::NoRole diff -Nru qttools-opensource-src-5.7.1/src/linguist/linguist/recentfiles.h qttools-opensource-src-5.9.1/src/linguist/linguist/recentfiles.h --- qttools-opensource-src-5.7.1/src/linguist/linguist/recentfiles.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/linguist/linguist/recentfiles.h 2017-06-23 12:03:39.000000000 +0000 @@ -46,7 +46,7 @@ void addFiles(const QStringList &names); QString lastOpenedFile() const { if (m_strLists.isEmpty() || m_strLists.first().isEmpty()) - return QString::null; + return QString(); return m_strLists.at(0).at(0); } const QList& filesLists() const { return m_strLists; } diff -Nru qttools-opensource-src-5.7.1/src/linguist/lupdate/cpp.cpp qttools-opensource-src-5.9.1/src/linguist/lupdate/cpp.cpp --- qttools-opensource-src-5.7.1/src/linguist/lupdate/cpp.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/linguist/lupdate/cpp.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -33,6 +33,7 @@ #include #include #include +#include #include #include #include @@ -1493,13 +1494,17 @@ if (c == '\n') continue; - if (c == 'x') { + if (c == 'x' || c == 'u' || c == 'U') { + const bool unicode = (c != 'x'); QByteArray hex; while (i < in.length() && isxdigit((c = in[i]))) { hex += c; i++; } - out += hex.toUInt(0, 16); + if (unicode) + out += QString(QChar(hex.toUInt(nullptr, 16))).toUtf8(); + else + out += hex.toUInt(nullptr, 16); } else if (c >= '0' && c < '8') { QByteArray oct; int n = 0; diff -Nru qttools-opensource-src-5.7.1/src/linguist/lupdate/main.cpp qttools-opensource-src-5.9.1/src/linguist/lupdate/main.cpp --- qttools-opensource-src-5.7.1/src/linguist/lupdate/main.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/linguist/lupdate/main.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -40,10 +40,12 @@ #include #include #include +#include #include #include #include #include +#include #include @@ -227,7 +229,7 @@ " line, and prefixed with -I) from lst-file.\n" ).arg(m_defaultExtensions, trFunctionAliasManager.availableFunctionsWithAliases() - .join(QStringLiteral("\n ")))); + .join(QLatin1String("\n ")))); } static bool handleTrFunctionAliases(const QString &arg) @@ -390,6 +392,73 @@ static EvalHandler evalHandler; +static bool isSupportedExtension(const QString &ext) +{ + return ext == QLatin1String("qml") + || ext == QLatin1String("js") || ext == QLatin1String("qs") + || ext == QLatin1String("ui") || ext == QLatin1String("jui"); +} + +static QStringList getResources(const QString &resourceFile, QMakeVfs *vfs) +{ + Q_ASSERT(vfs); + if (!vfs->exists(resourceFile)) + return QStringList(); + QString content; + QString errStr; + if (!vfs->readFile(resourceFile, &content, &errStr)) { + printErr(LU::tr("lupdate error: Can not read %1: %2\n").arg(resourceFile, errStr)); + return QStringList(); + } + QStringList fileList; + QString dirPath = QFileInfo(resourceFile).path(); + QXmlStreamReader reader(content); + bool isFileTag = false; + QStringList tagStack; + tagStack << QLatin1String("RCC") << QLatin1String("qresource") << QLatin1String("file"); + int curDepth = 0; + while (!reader.atEnd()) { + QXmlStreamReader::TokenType t = reader.readNext(); + switch (t) { + case QXmlStreamReader::StartElement: + if (curDepth >= tagStack.count() || reader.name() != tagStack.at(curDepth)) { + printErr(LU::tr("unexpected <%1> tag\n").arg(reader.name().toString())); + continue; + } + if (++curDepth == tagStack.count()) + isFileTag = true; + break; + + case QXmlStreamReader::EndElement: + isFileTag = false; + if (curDepth == 0 || reader.name() != tagStack.at(curDepth - 1)) { + printErr(LU::tr("unexpected closing <%1> tag\n").arg(reader.name().toString())); + continue; + } + --curDepth; + break; + + case QXmlStreamReader::Characters: + if (isFileTag) { + QString fn = reader.text().toString(); + if (!QFileInfo(fn).isAbsolute()) + fn = dirPath + QLatin1Char('/') + fn; + QFileInfo cfi(fn); + if (isSupportedExtension(cfi.suffix())) + fileList << cfi.filePath(); + } + break; + + default: + break; + } + } + if (reader.error() != QXmlStreamReader::NoError) + printErr(LU::tr("lupdate error: %1:%2: %3\n") + .arg(resourceFile, QString::number(reader.lineNumber()), reader.errorString())); + return fileList; +} + static QStringList getSources(const char *var, const char *vvar, const QStringList &baseVPaths, const QString &projectDir, const ProFileEvaluator &visitor) { @@ -400,7 +469,7 @@ } static QStringList getSources(const ProFileEvaluator &visitor, const QString &projectDir, - const QStringList &excludes) + const QStringList &excludes, QMakeVfs *vfs) { QStringList baseVPaths; baseVPaths += visitor.absolutePathValues(QLatin1String("VPATH"), projectDir); @@ -415,6 +484,10 @@ sourceFiles += getSources("FORMS", "VPATH_FORMS", baseVPaths, projectDir, visitor); + QStringList resourceFiles = getSources("RESOURCES", "VPATH_RESOURCES", baseVPaths, projectDir, visitor); + foreach (const QString &resource, resourceFiles) + sourceFiles += getResources(resource, vfs); + QStringList installs = visitor.values(QLatin1String("INSTALLS")) + visitor.values(QLatin1String("DEPLOYMENT")); installs.removeDuplicates(); @@ -440,12 +513,8 @@ while (iterator.hasNext()) { iterator.next(); QFileInfo cfi = iterator.fileInfo(); - QString ext = cfi.suffix(); - if (ext == QLatin1String("qml") - || ext == QLatin1String("js") || ext == QLatin1String("qs") - || ext == QLatin1String("ui") || ext == QLatin1String("jui")) { + if (isSupportedExtension(cfi.suffix())) sourceFiles << cfi.filePath(); - } } } } @@ -607,7 +676,7 @@ cd.m_sourceIsUtf16 = options & SourceIsUtf16; cd.m_includePath = visitor.absolutePathValues(QLatin1String("INCLUDEPATH"), proPath); cd.m_excludes = getExcludes(visitor, proPath); - QStringList sourceFiles = getSources(visitor, proPath, cd.m_excludes); + QStringList sourceFiles = getSources(visitor, proPath, cd.m_excludes, vfs); QSet sourceDirs; sourceDirs.insert(proPath + QLatin1Char('/')); foreach (const QString &sf, sourceFiles) @@ -718,7 +787,7 @@ #endif // Q_OS_WIN32 #endif - m_defaultExtensions = QLatin1String("java,jui,ui,c,c++,cc,cpp,cxx,ch,h,h++,hh,hpp,hxx,js,qs,qml"); + m_defaultExtensions = QLatin1String("java,jui,ui,c,c++,cc,cpp,cxx,ch,h,h++,hh,hpp,hxx,js,qs,qml,qrc"); QStringList args = app.arguments(); QStringList tsFileNames; @@ -728,6 +797,7 @@ QMultiHash allCSources; QSet projectRoots; QStringList sourceFiles; + QStringList resourceFiles; QStringList includePath; QStringList alienFiles; QString targetLanguage; @@ -981,25 +1051,33 @@ int scanRootLen = dir.absolutePath().length(); foreach (const QFileInfo &fi, fileinfolist) { QString fn = QDir::cleanPath(fi.absoluteFilePath()); - sourceFiles << fn; + if (fn.endsWith(QLatin1String(".qrc"), Qt::CaseInsensitive)) { + resourceFiles << fn; + } else { + sourceFiles << fn; - if (!fn.endsWith(QLatin1String(".java")) - && !fn.endsWith(QLatin1String(".jui")) - && !fn.endsWith(QLatin1String(".ui")) - && !fn.endsWith(QLatin1String(".js")) - && !fn.endsWith(QLatin1String(".qs")) - && !fn.endsWith(QLatin1String(".qml"))) { - int offset = 0; - int depth = 0; - do { - offset = fn.lastIndexOf(QLatin1Char('/'), offset - 1); - QString ffn = fn.mid(offset + 1); - allCSources.insert(ffn, fn); - } while (++depth < 3 && offset > scanRootLen); + if (!fn.endsWith(QLatin1String(".java")) + && !fn.endsWith(QLatin1String(".jui")) + && !fn.endsWith(QLatin1String(".ui")) + && !fn.endsWith(QLatin1String(".js")) + && !fn.endsWith(QLatin1String(".qs")) + && !fn.endsWith(QLatin1String(".qml"))) { + int offset = 0; + int depth = 0; + do { + offset = fn.lastIndexOf(QLatin1Char('/'), offset - 1); + QString ffn = fn.mid(offset + 1); + allCSources.insert(ffn, fn); + } while (++depth < 3 && offset > scanRootLen); + } } } } else { - sourceFiles << QDir::cleanPath(fi.absoluteFilePath());; + QString fn = QDir::cleanPath(fi.absoluteFilePath()); + if (fn.endsWith(QLatin1String(".qrc"), Qt::CaseInsensitive)) + resourceFiles << fn; + else + sourceFiles << fn; projectRoots.insert(fi.absolutePath() + QLatin1Char('/')); } } @@ -1029,11 +1107,16 @@ cd.m_projectRoots = projectRoots; cd.m_includePath = includePath; cd.m_allCSources = allCSources; + if (!resourceFiles.isEmpty()) { + QMakeVfs vfs; + foreach (const QString &resource, resourceFiles) + sourceFiles << getResources(resource, &vfs); + } processSources(fetchedTor, sourceFiles, cd); updateTsFiles(fetchedTor, tsFileNames, alienFiles, sourceLanguage, targetLanguage, options, &fail); } else { - if (!sourceFiles.isEmpty() || !includePath.isEmpty()) { + if (!sourceFiles.isEmpty() || !resourceFiles.isEmpty() || !includePath.isEmpty()) { printErr(LU::tr("lupdate error:" " Both project and source files / include paths specified.\n")); return 1; diff -Nru qttools-opensource-src-5.7.1/src/linguist/qdoc.conf qttools-opensource-src-5.9.1/src/linguist/qdoc.conf --- qttools-opensource-src-5.7.1/src/linguist/qdoc.conf 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/linguist/qdoc.conf 1970-01-01 00:00:00.000000000 +0000 @@ -1,15 +0,0 @@ -SOURCEDIRS = $QTDIR/tools/linguist/doc -DOCDIRS = $QTDIR/tools/linguist/doc -EXAMPLEDIRS = $QTDIR/tools/linguist/tutorial -OUTPUTDIR = $QTDIR/tools/linguist/doc/html -BASE = file:$QTDIR/tools/linguist/doc/html/ -COMPANY = Digia Plc and/or its subsidiary(-ies) -PRODUCT = Qt Linguist -VERSIONSYM = QT_VERSION_STR -DEFINE = QT_QDOC QT_.*_SUPPORT _WS_.*_ -FALSE = 0 1 -INTERNAL = no -STYLE = "h3.fn,span.fn { margin-left: 1cm; text-indent: -1cm; } -a:link { color: #af4f00; text-decoration: none } -a:visited { color: #8f2f00; text-decoration: none } -body { background: #ffffff; color: black; }" diff -Nru qttools-opensource-src-5.7.1/src/linguist/shared/exclusive_builds.prf qttools-opensource-src-5.9.1/src/linguist/shared/exclusive_builds.prf --- qttools-opensource-src-5.7.1/src/linguist/shared/exclusive_builds.prf 1970-01-01 00:00:00.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/linguist/shared/exclusive_builds.prf 2017-06-23 12:03:39.000000000 +0000 @@ -0,0 +1,6 @@ +# Lupdate doesn't execute the build passes, so prevent that they are +# created in the first place. This tricks for example resources.prf +# into actually creating the QML resource file, so we can scan it. + +defineTest(addExclusiveBuilds) { +} diff -Nru qttools-opensource-src-5.7.1/src/linguist/shared/ioutils.cpp qttools-opensource-src-5.9.1/src/linguist/shared/ioutils.cpp --- qttools-opensource-src-5.7.1/src/linguist/shared/ioutils.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/linguist/shared/ioutils.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -30,6 +30,7 @@ #include #include +#include #ifdef Q_OS_WIN # include diff -Nru qttools-opensource-src-5.7.1/src/linguist/shared/numerus.cpp qttools-opensource-src-5.9.1/src/linguist/shared/numerus.cpp --- qttools-opensource-src-5.7.1/src/linguist/shared/numerus.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/linguist/shared/numerus.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -124,7 +124,6 @@ #define EOL QLocale::C static const QLocale::Language japaneseStyleLanguages[] = { - QLocale::Armenian, QLocale::Bislama, QLocale::Burmese, QLocale::Chinese, @@ -141,6 +140,7 @@ QLocale::Oromo, QLocale::Persian, QLocale::Sundanese, + QLocale::Tatar, QLocale::Thai, QLocale::Tibetan, QLocale::Turkish, @@ -227,7 +227,6 @@ QLocale::Swedish, QLocale::Tajik, QLocale::Tamil, - QLocale::Tatar, QLocale::Telugu, QLocale::Tongan, QLocale::Tsonga, @@ -246,6 +245,7 @@ }; static const QLocale::Language frenchStyleLanguages[] = { // keep synchronized with frenchStyleCountries + QLocale::Armenian, QLocale::Breton, QLocale::French, QLocale::Portuguese, @@ -298,6 +298,7 @@ // keep synchronized with frenchStyleLanguages QLocale::AnyCountry, QLocale::AnyCountry, + QLocale::AnyCountry, QLocale::Brazil, QLocale::AnyCountry, QLocale::AnyCountry, diff -Nru qttools-opensource-src-5.7.1/src/linguist/shared/po.cpp qttools-opensource-src-5.9.1/src/linguist/shared/po.cpp --- qttools-opensource-src-5.7.1/src/linguist/shared/po.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/linguist/shared/po.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -31,6 +31,7 @@ #include #include #include +#include #include #include #include @@ -791,7 +792,7 @@ .arg(ref.lineNumber()).arg(ref.fileName())); if (!xrefs.isEmpty()) refs << xrefs; - out << poWrappedEscapedLines(QLatin1String("#:"), true, refs.join(QLatin1String(" "))); + out << poWrappedEscapedLines(QLatin1String("#:"), true, refs.join(QLatin1Char(' '))); } bool noWrap = false; @@ -883,14 +884,14 @@ { Translator::FileFormat format; format.extension = QLatin1String("po"); - format.description = FMT::tr("GNU Gettext localization files"); + format.untranslatedDescription = QT_TRANSLATE_NOOP("FMT", "GNU Gettext localization files"); format.loader = &loadPO; format.saver = &savePO; format.fileType = Translator::FileFormat::TranslationSource; format.priority = 1; Translator::registerFileFormat(format); format.extension = QLatin1String("pot"); - format.description = FMT::tr("GNU Gettext localization template files"); + format.untranslatedDescription = QT_TRANSLATE_NOOP("FMT", "GNU Gettext localization template files"); format.loader = &loadPO; format.saver = &savePOT; format.fileType = Translator::FileFormat::TranslationSource; diff -Nru qttools-opensource-src-5.7.1/src/linguist/shared/proitems.cpp qttools-opensource-src-5.9.1/src/linguist/shared/proitems.cpp --- qttools-opensource-src-5.7.1/src/linguist/shared/proitems.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/linguist/shared/proitems.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -365,6 +365,11 @@ return res; } +QString ProStringList::join(const ProString &sep) const +{ + return ProStringList_join(*this, sep.constData(), sep.size()); +} + QString ProStringList::join(const QString &sep) const { return ProStringList_join(*this, sep.constData(), sep.size()); @@ -391,7 +396,7 @@ void ProStringList::removeEach(const ProStringList &value) { - foreach (const ProString &str, value) + for (const ProString &str : value) if (!str.isEmpty()) removeAll(str); } @@ -424,7 +429,7 @@ void ProStringList::insertUnique(const ProStringList &value) { - foreach (const ProString &str, value) + for (const ProString &str : value) if (!str.isEmpty() && !contains(str)) append(str); } @@ -432,7 +437,7 @@ ProStringList::ProStringList(const QStringList &list) { reserve(list.size()); - foreach (const QString &str, list) + for (const QString &str : list) *this << ProString(str); } @@ -440,8 +445,8 @@ { QStringList ret; ret.reserve(size()); - for (int i = 0; i < size(); i++) // foreach causes MSVC2010 ICE - ret << at(i).toQString(); + for (const auto &e : *this) + ret.append(e.toQString()); return ret; } @@ -452,6 +457,14 @@ return true; return false; } + +bool ProStringList::contains(const QStringRef &str, Qt::CaseSensitivity cs) const +{ + for (int i = 0; i < size(); i++) + if (!at(i).toQStringRef().compare(str, cs)) + return true; + return false; +} bool ProStringList::contains(const char *str, Qt::CaseSensitivity cs) const { diff -Nru qttools-opensource-src-5.7.1/src/linguist/shared/proitems.h qttools-opensource-src-5.9.1/src/linguist/shared/proitems.h --- qttools-opensource-src-5.7.1/src/linguist/shared/proitems.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/linguist/shared/proitems.h 2017-06-23 12:03:39.000000000 +0000 @@ -100,6 +100,7 @@ bool operator!=(const QString &other) const { return !(*this == other); } bool operator!=(QLatin1String other) const { return !(*this == other); } bool operator!=(const char *other) const { return !(*this == other); } + bool operator<(const ProString &other) const { return toQStringRef() < other.toQStringRef(); } bool isNull() const { return m_string.isNull(); } bool isEmpty() const { return !m_length; } int length() const { return m_length; } @@ -130,8 +131,9 @@ bool contains(const QString &s, Qt::CaseSensitivity cs = Qt::CaseSensitive) const { return indexOf(s, 0, cs) >= 0; } bool contains(const char *s, Qt::CaseSensitivity cs = Qt::CaseSensitive) const { return indexOf(QLatin1String(s), 0, cs) >= 0; } bool contains(QChar c, Qt::CaseSensitivity cs = Qt::CaseSensitive) const { return indexOf(c, 0, cs) >= 0; } - int toInt(bool *ok = 0, int base = 10) const { return toQString().toInt(ok, base); } // XXX optimize - short toShort(bool *ok = 0, int base = 10) const { return toQString().toShort(ok, base); } // XXX optimize + int toLongLong(bool *ok = 0, int base = 10) const { return toQStringRef().toLongLong(ok, base); } + int toInt(bool *ok = 0, int base = 10) const { return toQStringRef().toInt(ok, base); } + short toShort(bool *ok = 0, int base = 10) const { return toQStringRef().toShort(ok, base); } uint hash() const { return m_hash; } static uint hash(const QChar *p, int n); @@ -206,9 +208,13 @@ { return ProString(one) + two; } inline QString operator+(const ProString &one, const char *two) - { return one + ProString(two); } // XXX optimize + { QString ret = one.toQStringRef() + QLatin1String(two); ret.detach(); return ret; } inline QString operator+(const char *one, const ProString &two) - { return ProString(one) + two; } // XXX optimize + { QString ret = QLatin1String(one) + two.toQStringRef(); ret.detach(); return ret; } +inline QString operator+(const ProString &one, QChar two) + { return one.toQStringRef() + two; } +inline QString operator+(QChar one, const ProString &two) + { return one + two.toQStringRef(); } inline QString &operator+=(QString &that, const ProString &other) { return that += other.toQStringRef(); } @@ -232,6 +238,7 @@ int length() const { return size(); } + QString join(const ProString &sep) const; QString join(const QString &sep) const; QString join(QChar sep) const; @@ -245,6 +252,7 @@ void removeDuplicates(); bool contains(const ProString &str, Qt::CaseSensitivity cs = Qt::CaseSensitive) const; + bool contains(const QStringRef &str, Qt::CaseSensitivity cs = Qt::CaseSensitive) const; bool contains(const QString &str, Qt::CaseSensitivity cs = Qt::CaseSensitive) const { return contains(ProString(str), cs); } bool contains(const char *str, Qt::CaseSensitivity cs = Qt::CaseSensitive) const; @@ -364,6 +372,8 @@ public: ProFunctionDef(ProFile *pro, int offset) : m_pro(pro), m_offset(offset) { m_pro->ref(); } ProFunctionDef(const ProFunctionDef &o) : m_pro(o.m_pro), m_offset(o.m_offset) { m_pro->ref(); } + ProFunctionDef(ProFunctionDef &&other) Q_DECL_NOTHROW + : m_pro(other.m_pro), m_offset(other.m_offset) { other.m_pro = nullptr; } ~ProFunctionDef() { m_pro->deref(); } ProFunctionDef &operator=(const ProFunctionDef &o) { @@ -375,6 +385,18 @@ } return *this; } + ProFunctionDef &operator=(ProFunctionDef &&other) Q_DECL_NOTHROW + { + ProFunctionDef moved(std::move(other)); + swap(moved); + return *this; + } + void swap(ProFunctionDef &other) Q_DECL_NOTHROW + { + qSwap(m_pro, other.m_pro); + qSwap(m_offset, other.m_offset); + } + ProFile *pro() const { return m_pro; } const ushort *tokPtr() const { return m_pro->tokPtr() + m_offset; } private: diff -Nru qttools-opensource-src-5.7.1/src/linguist/shared/proparser.pri qttools-opensource-src-5.9.1/src/linguist/shared/proparser.pri --- qttools-opensource-src-5.7.1/src/linguist/shared/proparser.pri 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/linguist/shared/proparser.pri 2017-06-23 12:03:39.000000000 +0000 @@ -23,3 +23,6 @@ $$PWD/qmakeevaluator.cpp \ $$PWD/qmakebuiltins.cpp \ $$PWD/profileevaluator.cpp + +RESOURCES += $$PWD/proparser.qrc +DEFINES += QMAKE_BUILTIN_PRFS QMAKE_OVERRIDE_PRFS diff -Nru qttools-opensource-src-5.7.1/src/linguist/shared/proparser.qrc qttools-opensource-src-5.9.1/src/linguist/shared/proparser.qrc --- qttools-opensource-src-5.7.1/src/linguist/shared/proparser.qrc 1970-01-01 00:00:00.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/linguist/shared/proparser.qrc 2017-06-23 12:03:39.000000000 +0000 @@ -0,0 +1,5 @@ + + + exclusive_builds.prf + + diff -Nru qttools-opensource-src-5.7.1/src/linguist/shared/qmakebuiltins.cpp qttools-opensource-src-5.9.1/src/linguist/shared/qmakebuiltins.cpp --- qttools-opensource-src-5.7.1/src/linguist/shared/qmakebuiltins.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/linguist/shared/qmakebuiltins.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -52,6 +52,8 @@ # include #endif +#include + #ifdef Q_OS_UNIX #include #include @@ -84,9 +86,10 @@ #define fL1S(s) QString::fromLatin1(s) enum ExpandFunc { - E_INVALID = 0, E_MEMBER, E_FIRST, E_LAST, E_SIZE, E_CAT, E_FROMFILE, E_EVAL, E_LIST, - E_SPRINTF, E_FORMAT_NUMBER, E_JOIN, E_SPLIT, E_BASENAME, E_DIRNAME, E_SECTION, - E_FIND, E_SYSTEM, E_UNIQUE, E_REVERSE, E_QUOTE, E_ESCAPE_EXPAND, + E_INVALID = 0, E_MEMBER, E_STR_MEMBER, E_FIRST, E_TAKE_FIRST, E_LAST, E_TAKE_LAST, + E_SIZE, E_STR_SIZE, E_CAT, E_FROMFILE, E_EVAL, E_LIST, E_SPRINTF, E_FORMAT_NUMBER, + E_NUM_ADD, E_JOIN, E_SPLIT, E_BASENAME, E_DIRNAME, E_SECTION, + E_FIND, E_SYSTEM, E_UNIQUE, E_SORTED, E_REVERSE, E_QUOTE, E_ESCAPE_EXPAND, E_UPPER, E_LOWER, E_TITLE, E_FILES, E_PROMPT, E_RE_ESCAPE, E_VAL_ESCAPE, E_REPLACE, E_SORT_DEPENDS, E_RESOLVE_DEPENDS, E_ENUMERATE_VARS, E_SHADOWED, E_ABSOLUTE_PATH, E_RELATIVE_PATH, E_CLEAN_PATH, @@ -96,7 +99,7 @@ enum TestFunc { T_INVALID = 0, T_REQUIRES, T_GREATERTHAN, T_LESSTHAN, T_EQUALS, T_EXISTS, T_EXPORT, T_CLEAR, T_UNSET, T_EVAL, T_CONFIG, T_SYSTEM, - T_DEFINED, T_CONTAINS, T_INFILE, + T_DEFINED, T_DISCARD_FROM, T_CONTAINS, T_INFILE, T_COUNT, T_ISEMPTY, T_PARSE_JSON, T_INCLUDE, T_LOAD, T_DEBUG, T_LOG, T_MESSAGE, T_WARNING, T_ERROR, T_IF, T_MKPATH, T_WRITE_FILE, T_TOUCH, T_CACHE }; @@ -108,15 +111,20 @@ const ExpandFunc func; } expandInits[] = { { "member", E_MEMBER }, + { "str_member", E_STR_MEMBER }, { "first", E_FIRST }, + { "take_first", E_TAKE_FIRST }, { "last", E_LAST }, + { "take_last", E_TAKE_LAST }, { "size", E_SIZE }, + { "str_size", E_STR_SIZE }, { "cat", E_CAT }, { "fromfile", E_FROMFILE }, { "eval", E_EVAL }, { "list", E_LIST }, { "sprintf", E_SPRINTF }, { "format_number", E_FORMAT_NUMBER }, + { "num_add", E_NUM_ADD }, { "join", E_JOIN }, { "split", E_SPLIT }, { "basename", E_BASENAME }, @@ -125,6 +133,7 @@ { "find", E_FIND }, { "system", E_SYSTEM }, { "unique", E_UNIQUE }, + { "sorted", E_SORTED }, { "reverse", E_REVERSE }, { "quote", E_QUOTE }, { "escape_expand", E_ESCAPE_EXPAND }, @@ -149,6 +158,7 @@ { "shell_quote", E_SHELL_QUOTE }, { "getenv", E_GETENV }, }; + statics.expands.reserve((int)(sizeof(expandInits)/sizeof(expandInits[0]))); for (unsigned i = 0; i < sizeof(expandInits)/sizeof(expandInits[0]); ++i) statics.expands.insert(ProKey(expandInits[i].name), expandInits[i].func); @@ -170,6 +180,7 @@ { "if", T_IF }, { "isActiveConfig", T_CONFIG }, { "system", T_SYSTEM }, + { "discard_from", T_DISCARD_FROM }, { "defined", T_DEFINED }, { "contains", T_CONTAINS }, { "infile", T_INFILE }, @@ -190,16 +201,59 @@ { "touch", T_TOUCH }, { "cache", T_CACHE }, }; + statics.functions.reserve((int)(sizeof(testInits)/sizeof(testInits[0]))); for (unsigned i = 0; i < sizeof(testInits)/sizeof(testInits[0]); ++i) statics.functions.insert(ProKey(testInits[i].name), testInits[i].func); } -static bool isTrue(const ProString &_str, QString &tmp) +static bool isTrue(const ProString &str) { - const QString &str = _str.toQString(tmp); return !str.compare(statics.strtrue, Qt::CaseInsensitive) || str.toInt(); } +bool +QMakeEvaluator::getMemberArgs(const ProKey &func, int srclen, const ProStringList &args, + int *start, int *end) +{ + *start = 0, *end = 0; + if (args.count() >= 2) { + bool ok = true; + const ProString &start_str = args.at(1); + *start = start_str.toInt(&ok); + if (!ok) { + if (args.count() == 2) { + int dotdot = start_str.indexOf(statics.strDotDot); + if (dotdot != -1) { + *start = start_str.left(dotdot).toInt(&ok); + if (ok) + *end = start_str.mid(dotdot+2).toInt(&ok); + } + } + if (!ok) { + evalError(fL1S("%1() argument 2 (start) '%2' invalid.") + .arg(func.toQString(m_tmp1), start_str.toQString(m_tmp2))); + return false; + } + } else { + *end = *start; + if (args.count() == 3) + *end = args.at(2).toInt(&ok); + if (!ok) { + evalError(fL1S("%1() argument 3 (end) '%2' invalid.") + .arg(func.toQString(m_tmp1), args.at(2).toQString(m_tmp2))); + return false; + } + } + } + if (*start < 0) + *start += srclen; + if (*end < 0) + *end += srclen; + if (*start < 0 || *start >= srclen || *end < 0 || *end >= srclen) + return false; + return true; +} + #if defined(Q_OS_WIN) && defined(PROEVALUATOR_FULL) static QString windowsErrorCode() { @@ -270,7 +324,7 @@ break; case 32: quote = true; - // fallthrough + Q_FALLTHROUGH(); default: ret += c; break; @@ -297,19 +351,26 @@ static void addJsonArray(const QJsonArray &array, const QString &keyPrefix, ProValueMap *map) { QStringList keys; - for (int i = 0; i < array.count(); ++i) { - keys.append(QString::number(i)); - addJsonValue(array.at(i), keyPrefix + QString::number(i), map); + const int size = array.count(); + keys.reserve(size); + for (int i = 0; i < size; ++i) { + const QString number = QString::number(i); + keys.append(number); + addJsonValue(array.at(i), keyPrefix + number, map); } insertJsonKeyValue(keyPrefix + QLatin1String("_KEYS_"), keys, map); } static void addJsonObject(const QJsonObject &object, const QString &keyPrefix, ProValueMap *map) { - foreach (const QString &key, object.keys()) - addJsonValue(object.value(key), keyPrefix + key, map); - - insertJsonKeyValue(keyPrefix + QLatin1String("_KEYS_"), object.keys(), map); + QStringList keys; + keys.reserve(object.size()); + for (auto it = object.begin(), end = object.end(); it != end; ++it) { + const QString key = it.key(); + keys.append(key); + addJsonValue(it.value(), keyPrefix + key, map); + } + insertJsonKeyValue(keyPrefix + QLatin1String("_KEYS_"), keys, map); } static void addJsonValue(const QJsonValue &value, const QString &keyPrefix, ProValueMap *map) @@ -335,11 +396,16 @@ } } -static QMakeEvaluator::VisitReturn parseJsonInto(const QByteArray &json, const QString &into, ProValueMap *value) +QMakeEvaluator::VisitReturn QMakeEvaluator::parseJsonInto(const QByteArray &json, const QString &into, ProValueMap *value) { - QJsonDocument document = QJsonDocument::fromJson(json); - if (document.isNull()) + QJsonParseError error; + QJsonDocument document = QJsonDocument::fromJson(json, &error); + if (document.isNull()) { + if (error.error != QJsonParseError::NoError) + evalError(fL1S("Error parsing json at offset %1: %2") + .arg(error.offset).arg(error.errorString())); return QMakeEvaluator::ReturnFalse; + } QString currentKey = into + QLatin1Char('.'); @@ -387,12 +453,13 @@ } #endif -QByteArray QMakeEvaluator::getCommandOutput(const QString &args) const +QByteArray QMakeEvaluator::getCommandOutput(const QString &args, int *exitCode) const { QByteArray out; #ifndef QT_BOOTSTRAPPED QProcess proc; runProcess(&proc, args); + *exitCode = (proc.exitStatus() == QProcess::NormalExit) ? proc.exitCode() : -1; QByteArray errout = proc.readAllStandardError(); # ifdef PROEVALUATOR_FULL // FIXME: Qt really should have the option to set forwarding per channel @@ -422,7 +489,12 @@ break; out += QByteArray(buff, read_in); } - QT_PCLOSE(proc); + int ec = QT_PCLOSE(proc); +# ifdef Q_OS_WIN + *exitCode = ec >= 0 ? ec : -1; +# else + *exitCode = WIFEXITED(ec) ? WEXITSTATUS(ec) : -1; +# endif } # ifdef Q_OS_WIN out.replace("\r\n", "\n"); @@ -437,16 +509,16 @@ QHash > &dependencies, ProValueMap &dependees, QMultiMap &rootSet) const { - foreach (const ProString &item, deps) + for (const ProString &item : deps) if (!dependencies.contains(item.toKey())) { QSet &dset = dependencies[item.toKey()]; // Always create entry ProStringList depends; - foreach (const ProString &suffix, suffixes) + for (const ProString &suffix : suffixes) depends += values(ProKey(prefix + item + suffix)); if (depends.isEmpty()) { rootSet.insert(first(ProKey(prefix + item + priosfx)).toInt(), item); } else { - foreach (const ProString &dep, depends) { + for (const ProString &dep : qAsConst(depends)) { dset.insert(dep.toKey()); dependees[dep.toKey()] << item; } @@ -478,9 +550,9 @@ } else { var = args[0]; sep = args.at(1).toQString(); - beg = args.at(2).toQString(m_tmp2).toInt(); + beg = args.at(2).toInt(); if (args.count() == 4) - end = args.at(3).toQString(m_tmp2).toInt(); + end = args.at(3).toInt(); } } else { if (args.count() != 1) { @@ -496,14 +568,15 @@ } } if (!var.isEmpty()) { + const auto strings = values(map(var)); if (regexp) { QRegExp sepRx(sep); - foreach (const ProString &str, values(map(var))) { + for (const ProString &str : strings) { const QString &rstr = str.toQString(m_tmp1).section(sepRx, beg, end); ret << (rstr.isSharedWith(m_tmp1) ? str : ProString(rstr).setSource(str)); } } else { - foreach (const ProString &str, values(map(var))) { + for (const ProString &str : strings) { const QString &rstr = str.toQString(m_tmp1).section(sep, beg, end); ret << (rstr.isSharedWith(m_tmp1) ? str : ProString(rstr).setSource(str)); } @@ -532,38 +605,38 @@ bool leftalign = false; enum { DefaultSign, PadSign, AlwaysSign } sign = DefaultSign; if (args.count() >= 2) { - foreach (const ProString &opt, split_value_list(args.at(1).toQString(m_tmp2))) { - opt.toQString(m_tmp3); - if (m_tmp3.startsWith(QLatin1String("ibase="))) { - ibase = m_tmp3.mid(6).toInt(); - } else if (m_tmp3.startsWith(QLatin1String("obase="))) { - obase = m_tmp3.mid(6).toInt(); - } else if (m_tmp3.startsWith(QLatin1String("width="))) { - width = m_tmp3.mid(6).toInt(); - } else if (m_tmp3 == QLatin1String("zeropad")) { + const auto opts = split_value_list(args.at(1).toQStringRef()); + for (const ProString &opt : opts) { + if (opt.startsWith(QLatin1String("ibase="))) { + ibase = opt.mid(6).toInt(); + } else if (opt.startsWith(QLatin1String("obase="))) { + obase = opt.mid(6).toInt(); + } else if (opt.startsWith(QLatin1String("width="))) { + width = opt.mid(6).toInt(); + } else if (opt == QLatin1String("zeropad")) { zeropad = true; - } else if (m_tmp3 == QLatin1String("padsign")) { + } else if (opt == QLatin1String("padsign")) { sign = PadSign; - } else if (m_tmp3 == QLatin1String("alwayssign")) { + } else if (opt == QLatin1String("alwayssign")) { sign = AlwaysSign; - } else if (m_tmp3 == QLatin1String("leftalign")) { + } else if (opt == QLatin1String("leftalign")) { leftalign = true; } else { - evalError(fL1S("format_number(): invalid format option %1.").arg(m_tmp3)); + evalError(fL1S("format_number(): invalid format option %1.") + .arg(opt.toQString(m_tmp3))); goto formfail; } } } - args.at(0).toQString(m_tmp3); - if (m_tmp3.contains(QLatin1Char('.'))) { + if (args.at(0).contains(QLatin1Char('.'))) { evalError(fL1S("format_number(): floats are currently not supported.")); break; } bool ok; - qlonglong num = m_tmp3.toLongLong(&ok, ibase); + qlonglong num = args.at(0).toLongLong(&ok, ibase); if (!ok) { evalError(fL1S("format_number(): malformed number %2 for base %1.") - .arg(ibase).arg(m_tmp3)); + .arg(ibase).arg(args.at(0).toQString(m_tmp3))); break; } QString outstr; @@ -591,14 +664,36 @@ } formfail: break; + case E_NUM_ADD: + if (args.count() < 1 || args.at(0).isEmpty()) { + evalError(fL1S("num_add(num, ...) requires at least one argument.")); + } else { + qlonglong sum = 0; + for (const ProString &arg : qAsConst(args)) { + if (arg.contains(QLatin1Char('.'))) { + evalError(fL1S("num_add(): floats are currently not supported.")); + goto nafail; + } + bool ok; + qlonglong num = arg.toLongLong(&ok); + if (!ok) { + evalError(fL1S("num_add(): malformed number %1.") + .arg(arg.toQString(m_tmp3))); + goto nafail; + } + sum += num; + } + ret += ProString(QString::number(sum)); + } + nafail: + break; case E_JOIN: { if (args.count() < 1 || args.count() > 4) { evalError(fL1S("join(var, glue, before, after) requires one to four arguments.")); } else { - QString glue; - ProString before, after; + ProString glue, before, after; if (args.count() >= 2) - glue = args.at(1).toQString(m_tmp1); + glue = args.at(1); if (args.count() >= 3) before = args[2]; if (args.count() == 4) @@ -606,7 +701,7 @@ const ProStringList &var = values(map(args.at(0))); if (!var.isEmpty()) { const ProFile *src = currentProFile(); - foreach (const ProString &v, var) + for (const ProString &v : var) if (const ProFile *s = v.sourceFile()) { src = s; break; @@ -621,56 +716,49 @@ evalError(fL1S("split(var, sep) requires one or two arguments.")); } else { const QString &sep = (args.count() == 2) ? args.at(1).toQString(m_tmp1) : statics.field_sep; - foreach (const ProString &var, values(map(args.at(0)))) - foreach (const QString &splt, var.toQString(m_tmp2).split(sep)) + const auto vars = values(map(args.at(0))); + for (const ProString &var : vars) { + const auto splits = var.toQString(m_tmp2).split(sep); + for (const QString &splt : splits) ret << (splt.isSharedWith(m_tmp2) ? var : ProString(splt).setSource(var)); + } } break; case E_MEMBER: if (args.count() < 1 || args.count() > 3) { evalError(fL1S("member(var, start, end) requires one to three arguments.")); } else { - bool ok = true; - const ProStringList &var = values(map(args.at(0))); - int start = 0, end = 0; - if (args.count() >= 2) { - const QString &start_str = args.at(1).toQString(m_tmp1); - start = start_str.toInt(&ok); - if (!ok) { - if (args.count() == 2) { - int dotdot = start_str.indexOf(statics.strDotDot); - if (dotdot != -1) { - start = start_str.left(dotdot).toInt(&ok); - if (ok) - end = start_str.mid(dotdot+2).toInt(&ok); - } - } - if (!ok) - evalError(fL1S("member() argument 2 (start) '%2' invalid.") - .arg(start_str)); + const ProStringList &src = values(map(args.at(0))); + int start, end; + if (getMemberArgs(func, src.size(), args, &start, &end)) { + ret.reserve(qAbs(end - start) + 1); + if (start < end) { + for (int i = start; i <= end && src.size() >= i; i++) + ret += src.at(i); } else { - end = start; - if (args.count() == 3) - end = args.at(2).toQString(m_tmp1).toInt(&ok); - if (!ok) - evalError(fL1S("member() argument 3 (end) '%2' invalid.") - .arg(args.at(2).toQString(m_tmp1))); + for (int i = start; i >= end && src.size() >= i && i >= 0; i--) + ret += src.at(i); } } - if (ok) { - if (start < 0) - start += var.count(); - if (end < 0) - end += var.count(); - if (start < 0 || start >= var.count() || end < 0 || end >= var.count()) { - //nothing - } else if (start < end) { - for (int i = start; i <= end && var.count() >= i; i++) - ret.append(var[i]); + } + break; + case E_STR_MEMBER: + if (args.count() < 1 || args.count() > 3) { + evalError(fL1S("str_member(str, start, end) requires one to three arguments.")); + } else { + const ProString &src = args.at(0); + int start, end; + if (getMemberArgs(func, src.size(), args, &start, &end)) { + QString res; + res.reserve(qAbs(end - start) + 1); + if (start < end) { + for (int i = start; i <= end && src.size() >= i; i++) + res += src.at(i); } else { - for (int i = start; i >= end && var.count() >= i && i >= 0; i--) - ret += var[i]; + for (int i = start; i >= end && src.size() >= i && i >= 0; i--) + res += src.at(i); } + ret += ProString(res); } } break; @@ -688,12 +776,32 @@ } } break; + case E_TAKE_FIRST: + case E_TAKE_LAST: + if (args.count() != 1) { + evalError(fL1S("%1(var) requires one argument.").arg(func.toQString(m_tmp1))); + } else { + ProStringList &var = valuesRef(map(args.at(0))); + if (!var.isEmpty()) { + if (func_t == E_TAKE_FIRST) + ret.append(var.takeFirst()); + else + ret.append(var.takeLast()); + } + } + break; case E_SIZE: if (args.count() != 1) evalError(fL1S("size(var) requires one argument.")); else ret.append(ProString(QString::number(values(map(args.at(0))).size()))); break; + case E_STR_SIZE: + if (args.count() != 1) + evalError(fL1S("str_size(str) requires one argument.")); + else + ret.append(ProString(QString::number(args.at(0).size()))); + break; case E_CAT: if (args.count() < 1 || args.count() > 2) { evalError(fL1S("cat(file, singleline=true) requires one or two arguments.")); @@ -704,12 +812,11 @@ bool lines = false; bool singleLine = true; if (args.count() > 1) { - args.at(1).toQString(m_tmp2); - if (!m_tmp2.compare(QLatin1String("false"), Qt::CaseInsensitive)) + if (!args.at(1).compare(QLatin1String("false"), Qt::CaseInsensitive)) singleLine = false; - else if (!m_tmp2.compare(QLatin1String("blob"), Qt::CaseInsensitive)) + else if (!args.at(1).compare(QLatin1String("blob"), Qt::CaseInsensitive)) blob = true; - else if (!m_tmp2.compare(QLatin1String("lines"), Qt::CaseInsensitive)) + else if (!args.at(1).compare(QLatin1String("lines"), Qt::CaseInsensitive)) lines = true; } @@ -723,7 +830,8 @@ if (lines) { ret += ProString(stream.readLine()); } else { - ret += split_value_list(stream.readLine().trimmed()); + const QString &line = stream.readLine(); + ret += split_value_list(QStringRef(&line).trimmed()); if (!singleLine) ret += ProString("\n"); } @@ -754,8 +862,8 @@ tmp.sprintf(".QMAKE_INTERNAL_TMP_variableName_%d", m_listCount++); ret = ProStringList(ProString(tmp)); ProStringList lst; - foreach (const ProString &arg, args) - lst += split_value_list(arg.toQString(m_tmp1), arg.sourceFile()); // Relies on deep copy + for (const ProString &arg : args) + lst += split_value_list(arg.toQStringRef(), arg.sourceFile()); // Relies on deep copy m_valuemapStack.top()[ret.at(0).toKey()] = lst; break; } case E_FIND: @@ -764,7 +872,8 @@ } else { QRegExp regx(args.at(1).toQString()); int t = 0; - foreach (const ProString &val, values(map(args.at(0)))) { + const auto vals = values(map(args.at(0))); + for (const ProString &val : vals) { if (regx.indexIn(val.toQString(m_tmp[t])) != -1) ret += val; t ^= 1; @@ -773,22 +882,26 @@ break; case E_SYSTEM: if (!m_skipLevel) { - if (args.count() < 1 || args.count() > 2) { - evalError(fL1S("system(execute) requires one or two arguments.")); + if (args.count() < 1 || args.count() > 3) { + evalError(fL1S("system(command, [mode], [stsvar]) requires one to three arguments.")); } else { bool blob = false; bool lines = false; bool singleLine = true; if (args.count() > 1) { - args.at(1).toQString(m_tmp2); - if (!m_tmp2.compare(QLatin1String("false"), Qt::CaseInsensitive)) + if (!args.at(1).compare(QLatin1String("false"), Qt::CaseInsensitive)) singleLine = false; - else if (!m_tmp2.compare(QLatin1String("blob"), Qt::CaseInsensitive)) + else if (!args.at(1).compare(QLatin1String("blob"), Qt::CaseInsensitive)) blob = true; - else if (!m_tmp2.compare(QLatin1String("lines"), Qt::CaseInsensitive)) + else if (!args.at(1).compare(QLatin1String("lines"), Qt::CaseInsensitive)) lines = true; } - QByteArray bytes = getCommandOutput(args.at(0).toQString(m_tmp2)); + int exitCode; + QByteArray bytes = getCommandOutput(args.at(0).toQString(m_tmp2), &exitCode); + if (args.count() > 2 && !args.at(2).isEmpty()) { + m_valuemapStack.top()[args.at(2).toKey()] = + ProStringList(ProString(QString::number(exitCode))); + } if (lines) { QTextStream stream(bytes); while (!stream.atEnd()) @@ -801,7 +914,7 @@ output.replace(QLatin1Char('\t'), QLatin1Char(' ')); if (singleLine) output.replace(QLatin1Char('\n'), QLatin1Char(' ')); - ret += split_value_list(output); + ret += split_value_list(QStringRef(&output)); } } } @@ -815,6 +928,14 @@ ret.removeDuplicates(); } break; + case E_SORTED: + if (args.count() != 1) { + evalError(fL1S("sorted(var) requires one argument.")); + } else { + ret = values(map(args.at(0))); + std::sort(ret.begin(), ret.end()); + } + break; case E_REVERSE: if (args.count() != 1) { evalError(fL1S("reverse(var) requires one argument.")); @@ -873,7 +994,7 @@ } else { const ProStringList &vals = values(args.at(0).toKey()); ret.reserve(vals.size()); - foreach (const ProString &str, vals) + for (const ProString &str : vals) ret += ProString(quoteValue(str)); } break; @@ -898,7 +1019,7 @@ } else { bool recursive = false; if (args.count() == 2) - recursive = isTrue(args.at(1), m_tmp2); + recursive = isTrue(args.at(1)); QStringList dirs; QString r = m_option->expandEnvVars(args.at(0).toQString(m_tmp1)) .replace(QLatin1Char('\\'), QLatin1Char('/')); @@ -950,7 +1071,8 @@ QFile qfile; if (qfile.open(stdin, QIODevice::ReadOnly)) { QTextStream t(&qfile); - ret = split_value_list(t.readLine()); + const QString &line = t.readLine(); + ret = split_value_list(QStringRef(&line)); } } break; } @@ -961,7 +1083,8 @@ } else { const QRegExp before(args.at(1).toQString()); const QString &after(args.at(2).toQString(m_tmp2)); - foreach (const ProString &val, values(map(args.at(0)))) { + const auto vals = values(map(args.at(0))); + for (const ProString &val : vals) { QString rstr = val.toQString(m_tmp1); QString copy = rstr; // Force a detach on modify rstr.replace(before, after); @@ -983,7 +1106,7 @@ ProString priosfx = args.count() < 4 ? ProString(".priority") : args.at(3); populateDeps(orgList, prefix, args.count() < 3 ? ProStringList(ProString(".depends")) - : split_value_list(args.at(2).toQString(m_tmp2)), + : split_value_list(args.at(2).toQStringRef()), priosfx, dependencies, dependees, rootSet); while (!rootSet.isEmpty()) { QMultiMap::iterator it = rootSet.begin(); @@ -991,7 +1114,7 @@ rootSet.erase(it); if ((func_t == E_RESOLVE_DEPENDS) || orgList.contains(item)) ret.prepend(item); - foreach (const ProString &dep, dependees[item.toKey()]) { + for (const ProString &dep : qAsConst(dependees[item.toKey()])) { QSet &dset = dependencies[dep.toKey()]; dset.remove(item.toKey()); if (dset.isEmpty()) @@ -1002,11 +1125,11 @@ break; case E_ENUMERATE_VARS: { QSet keys; - foreach (const ProValueMap &vmap, m_valuemapStack) + for (const ProValueMap &vmap : qAsConst(m_valuemapStack)) for (ProValueMap::ConstIterator it = vmap.constBegin(); it != vmap.constEnd(); ++it) keys.insert(it.key()); ret.reserve(keys.size()); - foreach (const ProString &key, keys) + for (const ProString &key : qAsConst(keys)) ret << key; break; } case E_SHADOWED: @@ -1174,6 +1297,38 @@ } return ReturnTrue; } + case T_DISCARD_FROM: { + if (args.count() != 1 || args.at(0).isEmpty()) { + evalError(fL1S("discard_from(file) requires one argument.")); + return ReturnFalse; + } + if (m_valuemapStack.count() != 1) { + evalError(fL1S("discard_from() cannot be called from functions.")); + return ReturnFalse; + } + QString fn = resolvePath(args.at(0).toQString(m_tmp1)); + ProFile *pro = m_parser->parsedProFile(fn, QMakeParser::ParseOnlyCached); + if (!pro) + return ReturnFalse; + ProValueMap &vmap = m_valuemapStack.first(); + for (auto vit = vmap.begin(); vit != vmap.end(); ) { + if (!vit->isEmpty()) { + auto isFrom = [pro](const ProString &s) { + return s.sourceFile() == pro; + }; + vit->erase(std::remove_if(vit->begin(), vit->end(), isFrom), vit->end()); + if (vit->isEmpty()) { + // When an initially non-empty variable becomes entirely empty, + // undefine it altogether. + vit = vmap.erase(vit); + continue; + } + } + ++vit; + } + pro->deref(); + return ReturnTrue; + } case T_INFILE: if (args.count() < 2 || args.count() > 3) { evalError(fL1S("infile(file, var, [values]) requires two or three arguments.")); @@ -1194,7 +1349,8 @@ regx.setPattern(copy); } int t = 0; - foreach (const ProString &s, vars.value(map(args.at(1)))) { + const auto strings = vars.value(map(args.at(1))); + for (const ProString &s : strings) { if ((!regx.isEmpty() && regx.exactMatch(s.toQString(m_tmp[t]))) || s == qry) return ReturnTrue; t ^= 1; @@ -1209,7 +1365,8 @@ return ReturnFalse; // Another qmake breakage case T_EVAL: { VisitReturn ret = ReturnFalse; - ProFile *pro = m_parser->parsedProBlock(args.join(statics.field_sep), + QString contents = args.join(statics.field_sep); + ProFile *pro = m_parser->parsedProBlock(QStringRef(&contents), m_current.pro->fileName(), m_current.line); if (m_cumulative || pro->isOk()) { m_locationStack.push(m_current); @@ -1225,7 +1382,7 @@ evalError(fL1S("if(condition) requires one argument.")); return ReturnFalse; } - return evaluateConditional(args.at(0).toQString(), + return evaluateConditional(args.at(0).toQStringRef(), m_current.pro->fileName(), m_current.line); } case T_CONFIG: { @@ -1234,7 +1391,7 @@ return ReturnFalse; } if (args.count() == 1) - return returnBool(isActiveConfig(args.at(0).toQString(m_tmp2))); + return returnBool(isActiveConfig(args.at(0).toQStringRef())); const QStringList &mutuals = args.at(1).toQString(m_tmp2).split(QLatin1Char('|')); const ProStringList &configs = values(statics.strCONFIG); @@ -1289,7 +1446,7 @@ return ReturnFalse; } int cnt = values(map(args.at(0))).count(); - int val = args.at(1).toQString(m_tmp1).toInt(); + int val = args.at(1).toInt(); if (args.count() == 3) { const ProString &comp = args.at(2); if (comp == QLatin1String(">") || comp == QLatin1String("greaterThan")) { @@ -1317,8 +1474,8 @@ .arg(function.toQString(m_tmp1))); return ReturnFalse; } - const QString &rhs(args.at(1).toQString(m_tmp1)), - &lhs(values(map(args.at(0))).join(statics.field_sep)); + const ProString &rhs = args.at(1); + const QString &lhs = values(map(args.at(0))).join(statics.field_sep); bool ok; int rhs_int = rhs.toInt(&ok); if (ok) { // do integer compare @@ -1330,8 +1487,8 @@ } } if (func_t == T_GREATERTHAN) - return returnBool(lhs > rhs); - return returnBool(lhs < rhs); + return returnBool(lhs > rhs.toQStringRef()); + return returnBool(lhs < rhs.toQStringRef()); } case T_EQUALS: if (args.count() != 2) { @@ -1399,8 +1556,9 @@ if (m_cumulative) flags = LoadSilent; if (args.count() >= 2) { - parseInto = args.at(1).toQString(m_tmp2); - if (args.count() >= 3 && isTrue(args.at(2), m_tmp3)) + if (!args.at(1).isEmpty()) + parseInto = args.at(1) + QLatin1Char('.'); + if (args.count() >= 3 && isTrue(args.at(2))) flags = LoadSilent; } QString fn = resolvePath(m_option->expandEnvVars(args.at(0).toQString(m_tmp1))); @@ -1416,17 +1574,15 @@ it = m_valuemapStack.top().constBegin(), end = m_valuemapStack.top().constEnd(); it != end; ++it) { - const QString &ky = it.key().toQString(m_tmp1); - if (!(ky.startsWith(parseInto) && - (ky.length() == parseInto.length() - || ky.at(parseInto.length()) == QLatin1Char('.')))) + const ProString &ky = it.key(); + if (!ky.startsWith(parseInto)) newMap[it.key()] = it.value(); } for (ProValueMap::ConstIterator it = symbols.constBegin(); it != symbols.constEnd(); ++it) { const QString &ky = it.key().toQString(m_tmp1); if (!ky.startsWith(QLatin1Char('.'))) - newMap.insert(ProKey(parseInto + QLatin1Char('.') + ky), it.value()); + newMap.insert(ProKey(parseInto + ky), it.value()); } m_valuemapStack.top() = newMap; } @@ -1438,7 +1594,7 @@ case T_LOAD: { bool ignore_error = false; if (args.count() == 2) { - ignore_error = isTrue(args.at(1), m_tmp2); + ignore_error = isTrue(args.at(1)); } else if (args.count() != 1) { evalError(fL1S("load(feature) requires one or two arguments.")); return ReturnFalse; @@ -1478,7 +1634,7 @@ #ifdef PROEVALUATOR_FULL fputs(msg.toLatin1().constData(), stderr); #endif - } else { + } else if (!msg.isEmpty() || func_t != T_ERROR) { m_handler->fileMessage( (func_t == T_ERROR ? QMakeHandler::ErrorMessage : func_t == T_WARNING ? QMakeHandler::WarningMessage : @@ -1572,7 +1728,8 @@ if (!vals.isEmpty()) contents = vals.join(QLatin1Char('\n')) + QLatin1Char('\n'); if (args.count() >= 3) { - foreach (const ProString &opt, split_value_list(args.at(2).toQString(m_tmp2))) { + const auto opts = split_value_list(args.at(2).toQStringRef()); + for (const ProString &opt : opts) { opt.toQString(m_tmp3); if (m_tmp3 == QLatin1String("append")) { mode = QIODevice::Append; @@ -1644,7 +1801,8 @@ enum { CacheSet, CacheAdd, CacheSub } mode = CacheSet; ProKey srcvar; if (args.count() >= 2) { - foreach (const ProString &opt, split_value_list(args.at(1).toQString(m_tmp2))) { + const auto opts = split_value_list(args.at(1).toQStringRef()); + for (const ProString &opt : opts) { opt.toQString(m_tmp3); if (m_tmp3 == QLatin1String("transient")) { persist = false; @@ -1762,7 +1920,7 @@ varstr += QLatin1Char(' '); varstr += quoteValue(diffval.at(0)); } else if (!diffval.isEmpty()) { - foreach (const ProString &vval, diffval) { + for (const ProString &vval : diffval) { varstr += QLatin1String(" \\\n "); varstr += quoteValue(vval); } diff -Nru qttools-opensource-src-5.7.1/src/linguist/shared/qmakeevaluator.cpp qttools-opensource-src-5.9.1/src/linguist/shared/qmakeevaluator.cpp --- qttools-opensource-src-5.7.1/src/linguist/shared/qmakeevaluator.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/linguist/shared/qmakeevaluator.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -186,6 +186,7 @@ { "IN_PWD", "PWD" }, { "DEPLOYMENT", "INSTALLS" } }; + statics.varMap.reserve((int)(sizeof(mapInits)/sizeof(mapInits[0]))); for (unsigned i = 0; i < sizeof(mapInits)/sizeof(mapInits[0]); ++i) statics.varMap.insert(ProKey(mapInits[i].oldname), ProKey(mapInits[i].newname)); } @@ -269,7 +270,7 @@ // FIXME: this should not build new strings for direct sections. // Note that the E_SPRINTF and E_LIST implementations rely on the deep copy. -ProStringList QMakeEvaluator::split_value_list(const QString &vals, const ProFile *source) +ProStringList QMakeEvaluator::split_value_list(const QStringRef &vals, const ProFile *source) { QString build; ProStringList ret; @@ -317,7 +318,7 @@ --x; } } - // fallthrough + Q_FALLTHROUGH(); default: hadWord = true; break; @@ -628,7 +629,7 @@ evalError(fL1S("Conditional must expand to exactly one word.")); okey = false; } else { - okey = isActiveConfig(curr.at(0).toQString(m_tmp2), true); + okey = isActiveConfig(curr.at(0).toQStringRef(), true); traceMsg("condition %s is %s", dbgStr(curr.at(0)), dbgBool(okey)); okey ^= invert; } @@ -763,12 +764,14 @@ if (ok) { int end = itl.mid(dotdot+2).toInt(&ok); if (ok) { - if (m_cumulative && qAbs(end - start) > 100) { + const int absDiff = qAbs(end - start); + if (m_cumulative && absDiff > 100) { // Such a loop is unlikely to contribute something useful to the // file collection, and may cause considerable delay. traceMsg("skipping excessive loop in cumulative mode"); return ReturnFalse; } + list.reserve(absDiff + 1); if (start < end) { for (int i = start; i <= end; i++) list << ProString(QString::number(i)); @@ -987,7 +990,8 @@ QString vcBinDir = vcInstallDir; if (vcBinDir.endsWith(QLatin1Char('\\'))) vcBinDir.chop(1); - foreach (const QString &dir, pathVar.split(QLatin1Char(';'))) { + const auto dirs = pathVar.split(QLatin1Char(';')); + for (const QString &dir : dirs) { if (!dir.startsWith(vcBinDir, Qt::CaseInsensitive)) continue; const ProString arch = msvcBinDirToQMakeArch(dir.mid(vcBinDir.length() + 1)); @@ -1009,6 +1013,8 @@ vars[ProKey("QMAKE_QMAKE")] << ProString(m_option->qmake_abslocation); if (!m_option->qmake_args.isEmpty()) vars[ProKey("QMAKE_ARGS")] = ProStringList(m_option->qmake_args); + if (!m_option->qtconf.isEmpty()) + vars[ProKey("QMAKE_QTCONF")] = ProString(m_option->qtconf); vars[ProKey("QMAKE_HOST.cpu_count")] = ProString(QString::number(idealThreadCount())); #if defined(Q_OS_WIN32) vars[ProKey("QMAKE_HOST.os")] << ProString("Windows"); @@ -1018,21 +1024,8 @@ if (GetComputerName(name, &name_length)) vars[ProKey("QMAKE_HOST.name")] << ProString(QString::fromWCharArray(name)); - QSysInfo::WinVersion ver = QSysInfo::WindowsVersion; - vars[ProKey("QMAKE_HOST.version")] << ProString(QString::number(ver)); - ProString verStr; - switch (ver) { - case QSysInfo::WV_Me: verStr = ProString("WinMe"); break; - case QSysInfo::WV_95: verStr = ProString("Win95"); break; - case QSysInfo::WV_98: verStr = ProString("Win98"); break; - case QSysInfo::WV_NT: verStr = ProString("WinNT"); break; - case QSysInfo::WV_2000: verStr = ProString("Win2000"); break; - case QSysInfo::WV_2003: verStr = ProString("Win2003"); break; - case QSysInfo::WV_XP: verStr = ProString("WinXP"); break; - case QSysInfo::WV_VISTA: verStr = ProString("WinVista"); break; - default: verStr = ProString("Unknown"); break; - } - vars[ProKey("QMAKE_HOST.version_string")] << verStr; + vars[ProKey("QMAKE_HOST.version")] << ProString(QSysInfo::kernelVersion()); + vars[ProKey("QMAKE_HOST.version_string")] << ProString(QSysInfo::productVersion()); SYSTEM_INFO info; GetSystemInfo(&info); @@ -1229,7 +1222,7 @@ qmakespec = m_hostBuild ? QLatin1String("default-host") : QLatin1String("default"); #endif if (IoUtils::isRelativePath(qmakespec)) { - foreach (const QString &root, m_mkspecPaths) { + for (const QString &root : qAsConst(m_mkspecPaths)) { QString mkspec = root + QLatin1Char('/') + qmakespec; if (IoUtils::exists(mkspec)) { qmakespec = mkspec; @@ -1285,7 +1278,7 @@ void QMakeEvaluator::evaluateCommand(const QString &cmds, const QString &where) { if (!cmds.isEmpty()) { - ProFile *pro = m_parser->parsedProBlock(cmds, where, -1); + ProFile *pro = m_parser->parsedProBlock(QStringRef(&cmds), where, -1); if (pro->isOk()) { m_locationStack.push(m_current); visitProBlock(pro, pro->tokPtr()); @@ -1459,10 +1452,11 @@ QStringList ret; const QString concat = QLatin1String("/mkspecs"); - foreach (const QString &it, m_option->getPathListEnv(QLatin1String("QMAKEPATH"))) + const auto paths = m_option->getPathListEnv(QLatin1String("QMAKEPATH")); + for (const QString &it : paths) ret << it + concat; - foreach (const QString &it, m_qmakepath) + for (const QString &it : qAsConst(m_qmakepath)) ret << it + concat; if (!m_buildRoot.isEmpty()) @@ -1484,11 +1478,8 @@ QStringList feature_roots; - foreach (const QString &f, m_option->getPathListEnv(QLatin1String("QMAKEFEATURES"))) - feature_roots += f; - + feature_roots += m_option->getPathListEnv(QLatin1String("QMAKEFEATURES")); feature_roots += m_qmakefeatures; - feature_roots += m_option->splitPathList( m_option->propertyValue(ProKey("QMAKEFEATURES")).toQString(m_mtmp)); @@ -1502,10 +1493,11 @@ feature_bases << m_sourceRoot; } - foreach (const QString &item, m_option->getPathListEnv(QLatin1String("QMAKEPATH"))) + const auto items = m_option->getPathListEnv(QLatin1String("QMAKEPATH")); + for (const QString &item : items) feature_bases << (item + mkspecs_concat); - foreach (const QString &item, m_qmakepath) + for (const QString &item : qAsConst(m_qmakepath)) feature_bases << (item + mkspecs_concat); if (!m_qmakespec.isEmpty()) { @@ -1527,8 +1519,9 @@ feature_bases << (m_option->propertyValue(ProKey("QT_HOST_DATA/get")) + mkspecs_concat); feature_bases << (m_option->propertyValue(ProKey("QT_HOST_DATA/src")) + mkspecs_concat); - foreach (const QString &fb, feature_bases) { - foreach (const ProString &sfx, values(ProKey("QMAKE_PLATFORM"))) + for (const QString &fb : qAsConst(feature_bases)) { + const auto sfxs = values(ProKey("QMAKE_PLATFORM")); + for (const ProString &sfx : sfxs) feature_roots << (fb + features_concat + sfx + QLatin1Char('/')); feature_roots << (fb + features_concat); } @@ -1540,7 +1533,7 @@ feature_roots.removeDuplicates(); QStringList ret; - foreach (const QString &root, feature_roots) + for (const QString &root : qAsConst(feature_roots)) if (IoUtils::exists(root)) ret << root; m_featureRoots = new QMakeFeatureRoots(ret); @@ -1579,7 +1572,7 @@ return QString(); } -bool QMakeEvaluator::isActiveConfig(const QString &config, bool regex) +bool QMakeEvaluator::isActiveConfig(const QStringRef &config, bool regex) { // magic types for easy flipping if (config == statics.strtrue) @@ -1591,7 +1584,7 @@ return m_hostBuild; if (regex && (config.contains(QLatin1Char('*')) || config.contains(QLatin1Char('?')))) { - QString cfg = config; + QString cfg = config.toString(); cfg.detach(); // Keep m_tmp out of QRegExp's cache QRegExp re(cfg, Qt::CaseSensitive, QRegExp::Wildcard); @@ -1601,7 +1594,8 @@ // CONFIG variable int t = 0; - foreach (const ProString &configValue, values(statics.strCONFIG)) { + const auto configValues = values(statics.strCONFIG); + for (const ProString &configValue : configValues) { if (re.exactMatch(configValue.toQString(m_tmp[t]))) return true; t ^= 1; @@ -1612,7 +1606,7 @@ return true; // CONFIG variable - if (values(statics.strCONFIG).contains(ProString(config))) + if (values(statics.strCONFIG).contains(config)) return true; } @@ -1636,7 +1630,7 @@ tokPtr++; continue; } - // fallthrough + Q_FALLTHROUGH(); default: Q_ASSERT_X(false, "expandVariableReferences", "Unrecognized token"); break; @@ -1776,7 +1770,7 @@ } QMakeEvaluator::VisitReturn QMakeEvaluator::evaluateConditional( - const QString &cond, const QString &where, int line) + const QStringRef &cond, const QString &where, int line) { VisitReturn ret = ReturnFalse; ProFile *pro = m_parser->parsedProBlock(cond, where, line, QMakeParser::TestGrammar); @@ -1793,8 +1787,8 @@ QMakeEvaluator::VisitReturn QMakeEvaluator::checkRequirements(const ProStringList &deps) { ProStringList &failed = valuesRef(ProKey("QMAKE_FAILED_REQUIREMENTS")); - foreach (const ProString &dep, deps) { - VisitReturn vr = evaluateConditional(dep.toQString(), m_current.pro->fileName(), m_current.line); + for (const ProString &dep : deps) { + VisitReturn vr = evaluateConditional(dep.toQStringRef(), m_current.pro->fileName(), m_current.line); if (vr == ReturnError) return ReturnError; if (vr != ReturnTrue) @@ -1917,9 +1911,9 @@ { if (fileName.isEmpty()) return ReturnFalse; - QMakeEvaluator *ref = this; + const QMakeEvaluator *ref = this; do { - foreach (const ProFile *pf, ref->m_profileStack) + for (const ProFile *pf : ref->m_profileStack) if (pf->fileName() == fileName) { evalError(fL1S("Circular inclusion of %1.").arg(fileName)); return ReturnFalse; @@ -1947,23 +1941,34 @@ // needs to be determined. Failed lookups are represented via non-null empty strings. QString *fnp = &m_featureRoots->cache[qMakePair(fn, currFn)]; if (fnp->isNull()) { - int start_root = 0; - const QStringList &paths = m_featureRoots->paths; - if (!currFn.isEmpty()) { - QStringRef currPath = IoUtils::pathName(currFn); - for (int root = 0; root < paths.size(); ++root) - if (currPath == paths.at(root)) { - start_root = root + 1; - break; - } - } - for (int root = start_root; root < paths.size(); ++root) { - QString fname = paths.at(root) + fn; - if (IoUtils::exists(fname)) { - fn = fname; +#ifdef QMAKE_OVERRIDE_PRFS + { + QString ovrfn(QLatin1String(":/qmake/override_features/") + fn); + if (QFileInfo::exists(ovrfn)) { + fn = ovrfn; goto cool; } } +#endif + { + int start_root = 0; + const QStringList &paths = m_featureRoots->paths; + if (!currFn.isEmpty()) { + QStringRef currPath = IoUtils::pathName(currFn); + for (int root = 0; root < paths.size(); ++root) + if (currPath == paths.at(root)) { + start_root = root + 1; + break; + } + } + for (int root = start_root; root < paths.size(); ++root) { + QString fname = paths.at(root) + fn; + if (IoUtils::exists(fname)) { + fn = fname; + goto cool; + } + } + } #ifdef QMAKE_BUILTIN_PRFS fn.prepend(QLatin1String(":/qmake/features/")); if (QFileInfo::exists(fn)) @@ -2020,7 +2025,8 @@ *values = visitor.m_valuemapStack.top(); ProKey qiif("QMAKE_INTERNAL_INCLUDED_FILES"); ProStringList &iif = m_valuemapStack.first()[qiif]; - foreach (const ProString &ifn, values->value(qiif)) + const auto ifns = values->value(qiif); + for (const ProString &ifn : ifns) if (!iif.contains(ifn)) iif << ifn; return ReturnTrue; @@ -2101,7 +2107,7 @@ break; case 32: quote = true; - // fallthrough + Q_FALLTHROUGH(); default: ret += c; break; @@ -2119,7 +2125,7 @@ { QString ret; - foreach (const ProString &str, vals) { + for (const ProString &str : vals) { if (!ret.isEmpty()) { if (commas) ret += QLatin1Char(','); @@ -2134,7 +2140,7 @@ { QString ret; - foreach (const ProStringList &list, lists) { + for (const ProStringList &list : lists) { if (!ret.isEmpty()) ret += QLatin1String(", "); ret += formatValueList(list); diff -Nru qttools-opensource-src-5.7.1/src/linguist/shared/qmakeevaluator.h qttools-opensource-src-5.9.1/src/linguist/shared/qmakeevaluator.h --- qttools-opensource-src-5.7.1/src/linguist/shared/qmakeevaluator.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/linguist/shared/qmakeevaluator.h 2017-06-23 12:03:39.000000000 +0000 @@ -176,7 +176,7 @@ void setTemplate(); - ProStringList split_value_list(const QString &vals, const ProFile *source = 0); + ProStringList split_value_list(const QStringRef &vals, const ProFile *source = 0); VisitReturn expandVariableReferences(const ushort *&tokPtr, int sizeHint, ProStringList *ret, bool joined); QString currentFileName() const; @@ -215,7 +215,7 @@ ProStringList evaluateBuiltinExpand(int func_t, const ProKey &function, const ProStringList &args); VisitReturn evaluateBuiltinConditional(int func_t, const ProKey &function, const ProStringList &args); - VisitReturn evaluateConditional(const QString &cond, const QString &where, int line = -1); + VisitReturn evaluateConditional(const QStringRef &cond, const QString &where, int line = -1); #ifdef PROEVALUATOR_FULL VisitReturn checkRequirements(const ProStringList &deps); #endif @@ -223,7 +223,7 @@ void updateMkspecPaths(); void updateFeaturePaths(); - bool isActiveConfig(const QString &config, bool regex = false); + bool isActiveConfig(const QStringRef &config, bool regex = false); void populateDeps( const ProStringList &deps, const ProString &prefix, const ProStringList &suffixes, @@ -231,12 +231,16 @@ QHash > &dependencies, ProValueMap &dependees, QMultiMap &rootSet) const; + bool getMemberArgs(const ProKey &name, int srclen, const ProStringList &args, + int *start, int *end); + VisitReturn parseJsonInto(const QByteArray &json, const QString &into, ProValueMap *value); + VisitReturn writeFile(const QString &ctx, const QString &fn, QIODevice::OpenMode mode, bool exe, const QString &contents); #ifndef QT_BOOTSTRAPPED void runProcess(QProcess *proc, const QString &command) const; #endif - QByteArray getCommandOutput(const QString &args) const; + QByteArray getCommandOutput(const QString &args, int *exitCode) const; QMakeEvaluator *m_caller; #ifdef PROEVALUATOR_CUMULATIVE diff -Nru qttools-opensource-src-5.7.1/src/linguist/shared/qmakeglobals.cpp qttools-opensource-src-5.9.1/src/linguist/shared/qmakeglobals.cpp --- qttools-opensource-src-5.7.1/src/linguist/shared/qmakeglobals.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/linguist/shared/qmakeglobals.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -106,7 +106,7 @@ QMakeGlobals::ArgumentReturn QMakeGlobals::addCommandLineArguments( QMakeCmdLineParserState &state, QStringList &args, int *pos) { - enum { ArgNone, ArgConfig, ArgSpec, ArgXSpec, ArgTmpl, ArgTmplPfx, ArgCache } argState = ArgNone; + enum { ArgNone, ArgConfig, ArgSpec, ArgXSpec, ArgTmpl, ArgTmplPfx, ArgCache, ArgQtConf } argState = ArgNone; for (; *pos < args.count(); (*pos)++) { QString arg = args.at(*pos); switch (argState) { @@ -131,8 +131,16 @@ case ArgCache: cachefile = args[*pos] = QDir::cleanPath(QDir(state.pwd).absoluteFilePath(arg)); break; + case ArgQtConf: + qtconf = args[*pos] = QDir::cleanPath(QDir(state.pwd).absoluteFilePath(arg)); + break; default: if (arg.startsWith(QLatin1Char('-'))) { + if (arg == QLatin1String("--")) { + state.extraargs = args.mid(*pos + 1); + *pos = args.size(); + return ArgumentsOk; + } if (arg == QLatin1String("-after")) state.after = true; else if (arg == QLatin1String("-config")) @@ -141,6 +149,8 @@ do_cache = false; else if (arg == QLatin1String("-cache")) argState = ArgCache; + else if (arg == QLatin1String("-qtconf")) + argState = ArgQtConf; else if (arg == QLatin1String("-platform") || arg == QLatin1String("-spec")) argState = ArgSpec; else if (arg == QLatin1String("-xplatform") || arg == QLatin1String("-xspec")) @@ -176,6 +186,12 @@ { if (!state.preconfigs.isEmpty()) state.precmds << (fL1S("CONFIG += ") + state.preconfigs.join(QLatin1Char(' '))); + if (!state.extraargs.isEmpty()) { + QString extra = fL1S("QMAKE_EXTRA_ARGS ="); + for (const QString &ea : qAsConst(state.extraargs)) + extra += QLatin1Char(' ') + QMakeEvaluator::quoteValue(ProString(ea)); + state.precmds << extra; + } precmds = state.precmds.join(QLatin1Char('\n')); if (!state.postconfigs.isEmpty()) state.postcmds << (fL1S("CONFIG += ") + state.postconfigs.join(QLatin1Char(' '))); @@ -245,9 +261,9 @@ QStringList ret; if (!val.isEmpty()) { QDir bdir; - QStringList vals = val.split(dirlist_sep); + const QStringList vals = val.split(dirlist_sep); ret.reserve(vals.length()); - foreach (const QString &it, vals) + for (const QString &it : vals) ret << QDir::cleanPath(bdir.absoluteFilePath(it)); } return ret; @@ -311,7 +327,8 @@ QT_PCLOSE(proc); } #endif - foreach (QByteArray line, data.split('\n')) { + const auto lines = data.split('\n'); + for (QByteArray line : lines) { int off = line.indexOf(':'); if (off < 0) // huh? continue; diff -Nru qttools-opensource-src-5.7.1/src/linguist/shared/qmakeglobals.h qttools-opensource-src-5.9.1/src/linguist/shared/qmakeglobals.h --- qttools-opensource-src-5.7.1/src/linguist/shared/qmakeglobals.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/linguist/shared/qmakeglobals.h 2017-06-23 12:03:39.000000000 +0000 @@ -85,7 +85,7 @@ public: QMakeCmdLineParserState(const QString &_pwd) : pwd(_pwd), after(false) {} QString pwd; - QStringList precmds, preconfigs, postcmds, postconfigs; + QStringList precmds, preconfigs, postcmds, postconfigs, extraargs; bool after; void flush() { after = false; } @@ -107,6 +107,7 @@ QString qmake_abslocation; QStringList qmake_args; + QString qtconf; QString qmakespec, xqmakespec; QString user_template, user_template_prefix; QString precmds, postcmds; diff -Nru qttools-opensource-src-5.7.1/src/linguist/shared/qmakeparser.cpp qttools-opensource-src-5.9.1/src/linguist/shared/qmakeparser.cpp --- qttools-opensource-src-5.7.1/src/linguist/shared/qmakeparser.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/linguist/shared/qmakeparser.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -47,7 +47,7 @@ ProFileCache::~ProFileCache() { - foreach (const Entry &ent, parsed_files) + for (const Entry &ent : qAsConst(parsed_files)) if (ent.pro) ent.pro->deref(); } @@ -165,7 +165,7 @@ ProFile *QMakeParser::parsedProFile(const QString &fileName, ParseFlags flags) { ProFile *pro; - if ((flags & ParseUseCache) && m_cache) { + if ((flags & (ParseUseCache|ParseOnlyCached)) && m_cache) { ProFileCache::Entry *ent; #ifdef PROPARSER_THREAD_SAFE QMutexLocker locker(&m_cache->mutex); @@ -187,7 +187,7 @@ #endif if ((pro = ent->pro)) pro->ref(); - } else { + } else if (!(flags & ParseOnlyCached)) { ent = &m_cache->parsed_files[fileName]; #ifdef PROPARSER_THREAD_SAFE ent->locker = new ProFileCache::Entry::Locker; @@ -212,19 +212,23 @@ ent->locker = 0; } #endif + } else { + pro = 0; } - } else { + } else if (!(flags & ParseOnlyCached)) { pro = new ProFile(fileName); if (!read(pro, flags)) { delete pro; pro = 0; } + } else { + pro = 0; } return pro; } ProFile *QMakeParser::parsedProBlock( - const QString &contents, const QString &name, int line, SubGrammar grammar) + const QStringRef &contents, const QString &name, int line, SubGrammar grammar) { ProFile *pro = new ProFile(name); read(pro, contents, line, grammar); @@ -247,7 +251,7 @@ fL1S("Cannot read %1: %2").arg(pro->fileName(), errStr)); return false; } - read(pro, content, 1, FullGrammar); + read(pro, QStringRef(&content), 1, FullGrammar); return true; } @@ -289,7 +293,7 @@ buf[-2] = (ushort)(hash >> 16); } -void QMakeParser::read(ProFile *pro, const QString &in, int line, SubGrammar grammar) +void QMakeParser::read(ProFile *pro, const QStringRef &in, int line, SubGrammar grammar) { m_proFile = pro; m_lineNo = line; @@ -337,8 +341,8 @@ QStack xprStack; xprStack.reserve(10); - // We rely on QStrings being null-terminated, so don't maintain a global end pointer. const ushort *cur = (const ushort *)in.unicode(); + const ushort *inend = cur + in.length(); m_canElse = false; freshLine: m_state = StNew; @@ -421,7 +425,7 @@ int indent; if (context == CtxPureValue) { - end = (const ushort *)in.unicode() + in.length(); + end = inend; cptr = 0; lineCont = false; indent = 0; // just gcc being stupid @@ -433,24 +437,30 @@ // First, skip leading whitespace for (indent = 0; ; ++cur, ++indent) { + if (cur == inend) { + cur = 0; + goto flushLine; + } c = *cur; if (c == '\n') { ++cur; goto flushLine; - } else if (!c) { - cur = 0; - goto flushLine; - } else if (c != ' ' && c != '\t' && c != '\r') { - break; } + if (c != ' ' && c != '\t' && c != '\r') + break; } // Then strip comments. Yep - no escaping is possible. for (cptr = cur;; ++cptr) { + if (cptr == inend) { + end = cptr; + break; + } c = *cptr; if (c == '#') { - for (end = cptr; (c = *++cptr);) { - if (c == '\n') { + end = cptr; + while (++cptr < inend) { + if (*cptr == '\n') { ++cptr; break; } @@ -463,10 +473,6 @@ } break; } - if (!c) { - end = cptr; - break; - } if (c == '\n') { end = cptr++; break; @@ -1218,7 +1224,7 @@ bool QMakeParser::resolveVariable(ushort *xprPtr, int tlen, int needSep, ushort **ptr, ushort **buf, QString *xprBuff, ushort **tokPtr, QString *tokBuff, - const ushort *cur, const QString &in) + const ushort *cur, const QStringRef &in) { QString out; m_tmp.setRawData((const QChar *)xprPtr, tlen); diff -Nru qttools-opensource-src-5.7.1/src/linguist/shared/qmakeparser.h qttools-opensource-src-5.9.1/src/linguist/shared/qmakeparser.h --- qttools-opensource-src-5.7.1/src/linguist/shared/qmakeparser.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/linguist/shared/qmakeparser.h 2017-06-23 12:03:39.000000000 +0000 @@ -78,7 +78,8 @@ enum ParseFlag { ParseDefault = 0, ParseUseCache = 1, - ParseReportMissing = 2 + ParseOnlyCached = 2, + ParseReportMissing = 4 }; Q_DECLARE_FLAGS(ParseFlags, ParseFlag) @@ -87,7 +88,7 @@ enum SubGrammar { FullGrammar, TestGrammar, ValueGrammar }; // fileName is expected to be absolute and cleanPath()ed. ProFile *parsedProFile(const QString &fileName, ParseFlags flags = ParseDefault); - ProFile *parsedProBlock(const QString &contents, const QString &name, int line = 0, + ProFile *parsedProBlock(const QStringRef &contents, const QString &name, int line = 0, SubGrammar grammar = FullGrammar); void discardFileFromCache(const QString &fileName); @@ -130,7 +131,7 @@ }; bool read(ProFile *pro, ParseFlags flags); - void read(ProFile *pro, const QString &content, int line, SubGrammar grammar); + void read(ProFile *pro, const QStringRef &content, int line, SubGrammar grammar); ALWAYS_INLINE void putTok(ushort *&tokPtr, ushort tok); ALWAYS_INLINE void putBlockLen(ushort *&tokPtr, uint len); @@ -141,7 +142,7 @@ ALWAYS_INLINE bool resolveVariable(ushort *xprPtr, int tlen, int needSep, ushort **ptr, ushort **buf, QString *xprBuff, ushort **tokPtr, QString *tokBuff, - const ushort *cur, const QString &in); + const ushort *cur, const QStringRef &in); void finalizeCond(ushort *&tokPtr, ushort *uc, ushort *ptr, int wordCount); void finalizeCall(ushort *&tokPtr, ushort *uc, ushort *ptr, int argc); void warnOperator(const char *msg); diff -Nru qttools-opensource-src-5.7.1/src/linguist/shared/qm.cpp qttools-opensource-src-5.9.1/src/linguist/shared/qm.cpp --- qttools-opensource-src-5.7.1/src/linguist/shared/qm.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/linguist/shared/qm.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -721,7 +721,7 @@ Translator::FileFormat format; format.extension = QLatin1String("qm"); - format.description = FMT::tr("Compiled Qt translations"); + format.untranslatedDescription = QT_TRANSLATE_NOOP("FMT", "Compiled Qt translations"); format.fileType = Translator::FileFormat::TranslationBinary; format.priority = 0; format.loader = &loadQM; diff -Nru qttools-opensource-src-5.7.1/src/linguist/shared/qph.cpp qttools-opensource-src-5.9.1/src/linguist/shared/qph.cpp --- qttools-opensource-src-5.7.1/src/linguist/shared/qph.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/linguist/shared/qph.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -160,7 +160,7 @@ foreach (const TranslatorMessage &msg, translator.messages()) { t << "\n"; t << " " << protect(msg.sourceText()) << "\n"; - QString str = msg.translations().join(QLatin1String("@")); + QString str = msg.translations().join(QLatin1Char('@')); str.replace(QChar(Translator::BinaryVariantSeparator), QChar(Translator::TextVariantSeparator)); t << " " << protect(str) @@ -178,7 +178,7 @@ Translator::FileFormat format; format.extension = QLatin1String("qph"); - format.description = FMT::tr("Qt Linguist 'Phrase Book'"); + format.untranslatedDescription = QT_TRANSLATE_NOOP("FMT", "Qt Linguist 'Phrase Book'"); format.fileType = Translator::FileFormat::TranslationSource; format.priority = 0; format.loader = &loadQPH; diff -Nru qttools-opensource-src-5.7.1/src/linguist/shared/translator.cpp qttools-opensource-src-5.9.1/src/linguist/shared/translator.cpp --- qttools-opensource-src-5.7.1/src/linguist/shared/translator.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/linguist/shared/translator.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -35,18 +35,15 @@ #include #ifdef Q_OS_WIN // required for _setmode, to avoid _O_TEXT streams... -# ifdef Q_OS_WINCE -# include -# else # include // for _setmode # include // for _O_BINARY -# endif #endif #include #include #include #include +#include #include #include @@ -279,11 +276,7 @@ if (filename.isEmpty() || filename == QLatin1String("-")) { #ifdef Q_OS_WIN // QFile is broken for text files -# ifdef Q_OS_WINCE - ::_setmode(stdin, _O_BINARY); -# else ::_setmode(0, _O_BINARY); -# endif #endif if (!file.open(stdin, QIODevice::ReadOnly)) { cd.appendError(QString::fromLatin1("Cannot open stdin!? (%1)") @@ -323,11 +316,7 @@ if (filename.isEmpty() || filename == QLatin1String("-")) { #ifdef Q_OS_WIN // QFile is broken for text files -# ifdef Q_OS_WINCE - ::_setmode(stdout, _O_BINARY); -# else ::_setmode(1, _O_BINARY); -# endif #endif if (!file.open(stdout, QIODevice::WriteOnly)) { cd.appendError(QString::fromLatin1("Cannot open stdout!? (%1)") diff -Nru qttools-opensource-src-5.7.1/src/linguist/shared/translator.h qttools-opensource-src-5.9.1/src/linguist/shared/translator.h --- qttools-opensource-src-5.7.1/src/linguist/shared/translator.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/linguist/shared/translator.h 2017-06-23 12:03:39.000000000 +0000 @@ -70,7 +70,7 @@ bool sortContexts() const { return m_sortContexts; } void appendError(const QString &error) { m_errors.append(error); } - QString error() const { return m_errors.isEmpty() ? QString() : m_errors.join(QLatin1String("\n")) + QLatin1Char('\n'); } + QString error() const { return m_errors.isEmpty() ? QString() : m_errors.join(QLatin1Char('\n')) + QLatin1Char('\n'); } QStringList errors() const { return m_errors; } void clearErrors() { m_errors.clear(); } @@ -180,9 +180,11 @@ typedef bool (*SaveFunction)(const Translator &, QIODevice &out, ConversionData &data); typedef bool (*LoadFunction)(Translator &, QIODevice &in, ConversionData &data); struct FileFormat { - FileFormat() : loader(0), saver(0), priority(-1) {} + FileFormat() : untranslatedDescription(nullptr), loader(0), saver(0), priority(-1) {} QString extension; // such as "ts", "xlf", ... - QString description; // human-readable description + const char *untranslatedDescription; + // human-readable description + QString description() const { return FMT::tr(untranslatedDescription); } LoadFunction loader; SaveFunction saver; enum FileType { TranslationSource, TranslationBinary } fileType; diff -Nru qttools-opensource-src-5.7.1/src/linguist/shared/ts.cpp qttools-opensource-src-5.9.1/src/linguist/shared/ts.cpp --- qttools-opensource-src-5.7.1/src/linguist/shared/ts.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/linguist/shared/ts.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -30,6 +30,7 @@ #include #include +#include #include #include @@ -541,7 +542,7 @@ t << "\n"; } - QRegExp drops(cd.dropTags().join(QLatin1String("|"))); + QRegExp drops(cd.dropTags().join(QLatin1Char('|'))); writeExtras(t, " ", translator.extras(), drops); @@ -687,7 +688,7 @@ format.extension = QLatin1String("ts"); format.fileType = Translator::FileFormat::TranslationSource; format.priority = 0; - format.description = FMT::tr("Qt translation sources"); + format.untranslatedDescription = QT_TRANSLATE_NOOP("FMT", "Qt translation sources"); format.loader = &loadTS; format.saver = &saveTS; Translator::registerFileFormat(format); diff -Nru qttools-opensource-src-5.7.1/src/linguist/shared/xliff.cpp qttools-opensource-src-5.9.1/src/linguist/shared/xliff.cpp --- qttools-opensource-src-5.7.1/src/linguist/shared/xliff.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/linguist/shared/xliff.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -30,6 +30,7 @@ #include #include +#include #include #include #include @@ -759,7 +760,7 @@ QStringList dtgs = cd.dropTags(); dtgs << QLatin1String("po-(old_)?msgid_plural"); - QRegExp drops(dtgs.join(QLatin1String("|"))); + QRegExp drops(dtgs.join(QLatin1Char('|'))); QHash > > messageOrder; QHash > contextOrder; @@ -833,7 +834,7 @@ { Translator::FileFormat format; format.extension = QLatin1String("xlf"); - format.description = FMT::tr("XLIFF localization files"); + format.untranslatedDescription = QT_TRANSLATE_NOOP("FMT", "XLIFF localization files"); format.fileType = Translator::FileFormat::TranslationSource; format.priority = 1; format.loader = &loadXLIFF; diff -Nru qttools-opensource-src-5.7.1/src/macdeployqt/shared/shared.cpp qttools-opensource-src-5.9.1/src/macdeployqt/shared/shared.cpp --- qttools-opensource-src-5.7.1/src/macdeployqt/shared/shared.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/macdeployqt/shared/shared.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -297,15 +297,15 @@ foreach (QString path, librarySearchPath) { if (!path.endsWith("/")) path += '/'; - QString nameInPath = path + parts.join("/"); + QString nameInPath = path + parts.join(QLatin1Char('/')); if (QFile::exists(nameInPath)) { - info.frameworkDirectory = path + partsCopy.join("/"); + info.frameworkDirectory = path + partsCopy.join(QLatin1Char('/')); break; } } if (currentPart.contains(".framework")) { if (info.frameworkDirectory.isEmpty()) - info.frameworkDirectory = "/Library/Frameworks/" + partsCopy.join("/"); + info.frameworkDirectory = "/Library/Frameworks/" + partsCopy.join(QLatin1Char('/')); if (!info.frameworkDirectory.endsWith("/")) info.frameworkDirectory += "/"; state = FrameworkName; @@ -313,7 +313,7 @@ continue; } else if (currentPart.contains(".dylib")) { if (info.frameworkDirectory.isEmpty()) - info.frameworkDirectory = "/usr/lib/" + partsCopy.join("/"); + info.frameworkDirectory = "/usr/lib/" + partsCopy.join(QLatin1Char('/')); if (!info.frameworkDirectory.endsWith("/")) info.frameworkDirectory += "/"; state = DylibName; @@ -996,6 +996,22 @@ } } +QString getLibInfix(const QStringList &deployedFrameworks) +{ + QString libInfix; + foreach (const QString &framework, deployedFrameworks) { + if (framework.startsWith(QStringLiteral("QtCore"))) { + Q_ASSERT(framework.length() >= 16); + // 16 == "QtCore" + ".framework" + const int lengthOfLibInfix = framework.length() - 16; + if (lengthOfLibInfix) + libInfix = framework.mid(6, lengthOfLibInfix); + break; + } + } + return libInfix; +} + void deployPlugins(const ApplicationBundleInfo &appBundleInfo, const QString &pluginSourcePath, const QString pluginDestinationPath, DeploymentInfo deploymentInfo, bool useDebugLibs) { @@ -1013,8 +1029,11 @@ // Cocoa print support pluginList.append("printsupport/libcocoaprintersupport.dylib"); + // Check if Qt was configured with -libinfix + const QString libInfixWithFramework = getLibInfix(deploymentInfo.deployedFrameworks) + QStringLiteral(".framework"); + // Network - if (deploymentInfo.deployedFrameworks.contains(QStringLiteral("QtNetwork.framework"))) { + if (deploymentInfo.deployedFrameworks.contains(QStringLiteral("QtNetwork") + libInfixWithFramework)) { QStringList bearerPlugins = QDir(pluginSourcePath + QStringLiteral("/bearer")).entryList(QStringList() << QStringLiteral("*.dylib")); foreach (const QString &plugin, bearerPlugins) { if (!plugin.endsWith(QStringLiteral("_debug.dylib"))) @@ -1026,15 +1045,22 @@ QStringList imagePlugins = QDir(pluginSourcePath + QStringLiteral("/imageformats")).entryList(QStringList() << QStringLiteral("*.dylib")); foreach (const QString &plugin, imagePlugins) { if (plugin.contains(QStringLiteral("qsvg"))) { - if (deploymentInfo.deployedFrameworks.contains(QStringLiteral("QtSvg.framework"))) + if (deploymentInfo.deployedFrameworks.contains(QStringLiteral("QtSvg") + libInfixWithFramework)) pluginList.append(QStringLiteral("imageformats/") + plugin); } else if (!plugin.endsWith(QStringLiteral("_debug.dylib"))) { pluginList.append(QStringLiteral("imageformats/") + plugin); } } + QStringList iconEngines = QDir(pluginSourcePath + QStringLiteral("/iconengines")).entryList(QStringList() << QStringLiteral("*.dylib")); + foreach (const QString &plugin, iconEngines) { + if (!plugin.endsWith(QStringLiteral("_debug.dylib"))) { + pluginList.append(QStringLiteral("iconengines/") + plugin); + } + } + // Sql plugins if QtSql.framework is in use - if (deploymentInfo.deployedFrameworks.contains(QStringLiteral("QtSql.framework"))) { + if (deploymentInfo.deployedFrameworks.contains(QStringLiteral("QtSql") + libInfixWithFramework)) { QStringList sqlPlugins = QDir(pluginSourcePath + QStringLiteral("/sqldrivers")).entryList(QStringList() << QStringLiteral("*.dylib")); foreach (const QString &plugin, sqlPlugins) { if (plugin.endsWith(QStringLiteral("_debug.dylib"))) @@ -1054,7 +1080,7 @@ } // multimedia plugins if QtMultimedia.framework is in use - if (deploymentInfo.deployedFrameworks.contains(QStringLiteral("QtMultimedia.framework"))) { + if (deploymentInfo.deployedFrameworks.contains(QStringLiteral("QtMultimedia") + libInfixWithFramework)) { QStringList plugins = QDir(pluginSourcePath + QStringLiteral("/mediaservice")).entryList(QStringList() << QStringLiteral("*.dylib")); foreach (const QString &plugin, plugins) { if (!plugin.endsWith(QStringLiteral("_debug.dylib"))) @@ -1252,7 +1278,12 @@ // 2) QtQuick.Controls is used // The intended failure mode is that libwidgetsplugin.dylib will be present // in the app bundle but not used at run-time. - if (deploymentInfo.deployedFrameworks.contains("QtWidgets.framework") && qtQuickContolsInUse) { + + // Check if Qt was configured with -libinfix + const QString libInfixWithFramework = getLibInfix(deploymentInfo.deployedFrameworks) + QStringLiteral(".framework"); + + if (deploymentInfo.deployedFrameworks.contains(QStringLiteral("QtWidgets") + libInfixWithFramework) + && qtQuickContolsInUse) { LogNormal() << "Deploying QML import QtQuick.PrivateWidgets"; QString name = "QtQuick/PrivateWidgets"; QString path = qmlImportsPath + QLatin1Char('/') + name; @@ -1356,13 +1387,6 @@ QStringList frameworkPaths = findAppFrameworkPaths(appBundlePath); foreach (const QString &frameworkPath, frameworkPaths) { - // Add all files for a framework as a catch all. - QStringList bundleFiles = findAppBundleFiles(frameworkPath, getAbsoltuePath); - foreach (const QString &binary, bundleFiles) { - pendingBinaries.push(binary); - pendingBinariesSet.insert(binary); - } - // Prioritise first to sign any additional inner bundles found in the Helpers folder (e.g // used by QtWebEngine). QDirIterator helpersIterator(frameworkPath, QStringList() << QString::fromLatin1("Helpers"), QDir::Dirs | QDir::NoSymLinks, QDirIterator::Subdirectories); @@ -1382,7 +1406,7 @@ while (librariesIterator.hasNext()) { librariesIterator.next(); QString librariesPath = librariesIterator.filePath(); - bundleFiles = findAppBundleFiles(librariesPath, getAbsoltuePath); + QStringList bundleFiles = findAppBundleFiles(librariesPath, getAbsoltuePath); foreach (const QString &binary, bundleFiles) { pendingBinaries.push(binary); pendingBinariesSet.insert(binary); diff -Nru qttools-opensource-src-5.7.1/src/makeqpf/mainwindow.cpp qttools-opensource-src-5.9.1/src/makeqpf/mainwindow.cpp --- qttools-opensource-src-5.7.1/src/makeqpf/mainwindow.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/makeqpf/mainwindow.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -220,7 +220,7 @@ QList sortedCoverage = QList::fromSet(coverage); qSort(sortedCoverage); // play simple :) - foreach (QChar ch, sortedCoverage) { + for (QChar ch : qAsConst(sortedCoverage)) { QPF::CharacterRange r; r.start = ch.unicode(); r.end = r.start + 1; diff -Nru qttools-opensource-src-5.7.1/src/makeqpf/qpf2.cpp qttools-opensource-src-5.9.1/src/makeqpf/qpf2.cpp --- qttools-opensource-src-5.7.1/src/makeqpf/qpf2.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/makeqpf/qpf2.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -505,7 +505,7 @@ QGlyphLayoutArray<10> layout; - foreach (CharacterRange range, ranges) { + for (CharacterRange range : ranges) { if (debugVerbosity > 2) qDebug() << "rendering range from" << range.start << "to" << range.end; for (uint uc = range.start; uc < range.end; ++uc) { diff -Nru qttools-opensource-src-5.7.1/src/pixeltool/Info_mac.plist qttools-opensource-src-5.9.1/src/pixeltool/Info_mac.plist --- qttools-opensource-src-5.7.1/src/pixeltool/Info_mac.plist 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/pixeltool/Info_mac.plist 2017-06-23 12:03:39.000000000 +0000 @@ -1,20 +1,20 @@ - - + + - NSPrincipalClass - NSApplication + NSPrincipalClass + NSApplication CFBundleIconFile @ICON@ CFBundlePackageType APPL - CFBundleGetInfoString - Created by Qt/QMake CFBundleSignature ???? CFBundleIdentifier - com.trolltech.pixeltool + org.qt-project.pixeltool CFBundleExecutable @EXECUTABLE@ + NSHumanReadableCopyright + (C) 2017 The Qt Company Ltd diff -Nru qttools-opensource-src-5.7.1/src/pixeltool/qpixeltool.cpp qttools-opensource-src-5.9.1/src/pixeltool/qpixeltool.cpp --- qttools-opensource-src-5.7.1/src/pixeltool/qpixeltool.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/pixeltool/qpixeltool.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -44,13 +44,28 @@ #include #include #include +#include #include +#include +#include #include #include QT_BEGIN_NAMESPACE +static QPoint initialPos(const QSettings &settings, const QSize &initialSize) +{ + const QDesktopWidget *desktopWidget = QApplication::desktop(); + const QPoint defaultPos = desktopWidget->availableGeometry().topLeft(); + const QPoint savedPos = + settings.value(QLatin1String("position"), QVariant(defaultPos)).toPoint(); + const int savedScreen = desktopWidget->screenNumber(savedPos); + return savedScreen >= 0 + && desktopWidget->availableGeometry(savedScreen).intersects(QRect(savedPos, initialSize)) + ? savedPos : defaultPos; +} + QPixelTool::QPixelTool(QWidget *parent) : QWidget(parent) , m_freeze(false) @@ -70,7 +85,7 @@ m_zoom = settings.value(QLatin1String("zoom"), 4).toInt(); m_initialSize = settings.value(QLatin1String("initialSize"), QSize(250, 200)).toSize(); - move(settings.value(QLatin1String("position")).toPoint()); + move(initialPos(settings, m_initialSize)); setMouseTracking(true); setAttribute(Qt::WA_NoBackground); @@ -251,6 +266,9 @@ case Qt::Key_Control: grabKeyboard(); break; + case Qt::Key_F1: + aboutPixelTool(); + break; } } @@ -367,6 +385,7 @@ menu.addSeparator(); menu.addAction(QLatin1String("About Qt"), qApp, &QApplication::aboutQt); + menu.addAction(QLatin1String("About Qt Pixeltool"), this, &QPixelTool::aboutPixelTool); menu.exec(mapToGlobal(e->pos())); @@ -426,11 +445,14 @@ int x = mousePos.x() - w/2; int y = mousePos.y() - h/2; + const QBrush darkBrush = palette().color(QPalette::Dark); const QDesktopWidget *desktopWidget = QApplication::desktop(); - - QScreen *screen = QGuiApplication::screens().at(desktopWidget->screenNumber(this)); - m_buffer = screen->grabWindow(desktopWidget->winId(), x, y, w, h); - + if (QScreen *screen = QGuiApplication::screens().value(desktopWidget->screenNumber(this), Q_NULLPTR)) { + m_buffer = screen->grabWindow(desktopWidget->winId(), x, y, w, h); + } else { + m_buffer = QPixmap(w, h); + m_buffer.fill(darkBrush.color()); + } QRegion geom(x, y, w, h); QRect screenRect; for (int i = 0; i < desktopWidget->numScreens(); ++i) @@ -441,7 +463,7 @@ QPainter p(&m_buffer); p.translate(-x, -y); p.setPen(Qt::NoPen); - p.setBrush(palette().color(QPalette::Dark)); + p.setBrush(darkBrush); p.drawRects(rects); } @@ -529,7 +551,8 @@ fileDialog.setAcceptMode(QFileDialog::AcceptSave); fileDialog.setDirectory(QStandardPaths::writableLocation(QStandardPaths::PicturesLocation)); QStringList mimeTypes; - foreach (const QByteArray &mimeTypeB, QImageWriter::supportedMimeTypes()) + const QByteArrayList supportedMimeTypes = QImageWriter::supportedMimeTypes(); + for (const QByteArray &mimeTypeB : supportedMimeTypes) mimeTypes.append(QString::fromLatin1(mimeTypeB)); fileDialog.setMimeTypeFilters(mimeTypes); const QString pngType = QLatin1String("image/png"); @@ -547,4 +570,41 @@ m_freeze = oldFreeze; } +QTextStream &operator<<(QTextStream &str, const QScreen *screen) +{ + const QRect geometry = screen->geometry(); + str << '"' << screen->name() << "\" " << geometry.width() + << 'x' << geometry.height() << forcesign << geometry.x() << geometry.y() + << noforcesign << ", " << qRound(screen->logicalDotsPerInch()) << "DPI" + << ", Depth: " << screen->depth() << ", " << screen->refreshRate() << "Hz"; + const qreal dpr = screen->devicePixelRatio(); + if (!qFuzzyCompare(dpr, qreal(1))) + str << ", DPR: " << dpr; + return str; +} + +QString QPixelTool::aboutText() const +{ + const QList screens = QGuiApplication::screens(); + const QScreen *windowScreen = windowHandle()->screen(); + + QString result; + QTextStream str(&result); + str << "

Qt Pixeltool

Qt " << QT_VERSION_STR + << "

Copyright (C) 2017 The Qt Company Ltd.

Screens

    "; + for (const QScreen *screen : screens) + str << "
  • " << (screen == windowScreen ? "* " : " ") << screen << "
  • "; + str << "
      "; + return result; +} + +void QPixelTool::aboutPixelTool() +{ + QMessageBox aboutBox(QMessageBox::Information, tr("About Qt Pixeltool"), aboutText(), + QMessageBox::Close, this); + aboutBox.setWindowFlags(aboutBox.windowFlags() & ~Qt::WindowContextHelpButtonHint); + aboutBox.setTextInteractionFlags(Qt::TextBrowserInteraction); + aboutBox.exec(); +} + QT_END_NAMESPACE diff -Nru qttools-opensource-src-5.7.1/src/pixeltool/qpixeltool.h qttools-opensource-src-5.9.1/src/pixeltool/qpixeltool.h --- qttools-opensource-src-5.7.1/src/pixeltool/qpixeltool.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/pixeltool/qpixeltool.h 2017-06-23 12:03:39.000000000 +0000 @@ -59,6 +59,7 @@ void decreaseGridSize() { setGridSize(m_gridSize - 1); } void increaseZoom() { setZoom(m_zoom + 1); } void decreaseZoom() { setZoom(m_zoom - 1); } + void aboutPixelTool(); protected: void timerEvent(QTimerEvent *event) Q_DECL_OVERRIDE; @@ -75,6 +76,7 @@ void grabScreen(); void startZoomVisibleTimer(); void startGridSizeVisibleTimer(); + QString aboutText() const; bool m_freeze; bool m_displayZoom; diff -Nru qttools-opensource-src-5.7.1/src/qconfig/feature.cpp qttools-opensource-src-5.9.1/src/qconfig/feature.cpp --- qttools-opensource-src-5.7.1/src/qconfig/feature.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/qconfig/feature.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,227 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the tools applications of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:GPL-EXCEPT$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3 as published by the Free Software -** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "feature.h" -#include -#include -#include -#include -#include -#include - -QT_BEGIN_NAMESPACE - -QMap Feature::instances; - -Feature* Feature::getInstance(const QString &key) -{ - QString ukey = key.toUpper(); - if (!instances.contains(ukey)) - instances[ukey] = new Feature(ukey); - return instances[ukey]; -} - -Feature::~Feature() -{ - delete d; -} - -void Feature::clear() -{ - foreach (Feature *f, instances.values()) - delete f; - instances.clear(); -} - -static QString listToHtml(const QString &title, const QStringList &list) -{ - if (list.isEmpty()) - return QString(); - - QString str; - QTextStream stream(&str); - - stream << "

      " << title << ":

      "; - stream << "
        "; - foreach (QString l, list) - stream << "
      • " << l << "
      • "; - stream << "
      "; - - return str; -} - -static QString listToHtml(const QString &title, const QList &list) -{ - QStringList stringlist; - foreach (Feature *f, list) { - QString s("[%3] %2"); - s = s.arg(f->key()).arg(f->key()); - s = s.arg(f->selectable() && f->enabled() ? "On" : "Off"); - stringlist << s; - } - return listToHtml(title, stringlist); -} - -static QString linkify(const QString &src) -{ - static QRegExp classRegexp("\\b(Q[\\w]+)"); - QString docRoot = QLibraryInfo::location(QLibraryInfo::DocumentationPath); - QString result = src; - int pos = 0; - while ((pos = classRegexp.indexIn(result, pos)) != -1) { - QString className = classRegexp.cap(1); - QString file = docRoot + "/html/" + className.toLower() + ".html"; - QFileInfo info(file); - if (info.isFile()) { - QString link = QString("%2") - .arg(file).arg(className); - result.replace(pos, className.length(), link); - pos += link.length(); - } else { - pos += className.length(); - } - } - - return result; -} - -QString Feature::toHtml() const -{ - QString str; - QTextStream stream(&str); - - const QString linkColor = QApplication::palette().color(QPalette::Link).name(); - stream << "

      " - << key() << "

      " - << "

      " << title() << "

      "; - if (!description().isEmpty()) - stream << "

      " << description() << "

      "; - stream << listToHtml("Section", QStringList(section())) - << listToHtml("Requires", dependencies()) - << listToHtml("Required for", supports()) - << listToHtml("See also", relations()); - - return linkify(str); -} - -Feature::Feature(const QString &key) : d(new FeaturePrivate(key)) {} - -void Feature::setTitle(const QString &title) -{ - d->title = title; -} - -void Feature::setSection(const QString §ion) -{ - d->section = section; -} - -void Feature::setDescription(const QString &description) -{ - d->description = description; -} - -void Feature::addRelation(const QString &key) -{ - d->relations.insert(getInstance(key)); -} - -void Feature::setRelations(const QStringList &keys) -{ - foreach(QString key, keys) - if (key != "???") - addRelation(key); -} - -QList Feature::relations() const -{ - return d->relations.toList(); -} - -void Feature::addDependency(const QString &key) -{ - Feature *f = getInstance(key); - d->dependencies.insert(f); - f->d->supports.insert(this); -} - -void Feature::setDependencies(const QStringList &keys) -{ - foreach(QString key, keys) - addDependency(key); -} - -QList Feature::dependencies() const -{ - return d->dependencies.toList(); -} - -QList Feature::supports() const -{ - return d->supports.toList(); -} - -/* - Returns a html formatted detailed description of this Feature. -*/ -QString Feature::getDocumentation() const -{ - return QString() + "

      " + d->title + "

      "; - -} - -void Feature::setEnabled(bool on) -{ - if (on == d->enabled) - return; - - d->enabled = on; - foreach (Feature *f, supports()) - f->updateSelectable(); - emit changed(); -} - -/* - Update whether this feature should be selectable. - A feature is selectable if all its dependencies are enabled. -*/ -void Feature::updateSelectable() -{ - bool selectable = true; - foreach (Feature *f, dependencies()) - if (!f->selectable() || !f->enabled()) - selectable = false; - if (selectable != d->selectable) { - d->selectable = selectable; - foreach (Feature *f, supports()) - f->updateSelectable(); - emit changed(); - } -} - -QT_END_NAMESPACE diff -Nru qttools-opensource-src-5.7.1/src/qconfig/feature.h qttools-opensource-src-5.9.1/src/qconfig/feature.h --- qttools-opensource-src-5.7.1/src/qconfig/feature.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/qconfig/feature.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,112 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the tools applications of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:GPL-EXCEPT$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3 as published by the Free Software -** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef FEATURE_H -#define FEATURE_H - -#include -#include -#include -#include -#include - -QT_BEGIN_NAMESPACE - -class Feature; - -class FeaturePrivate -{ -public: - FeaturePrivate(const QString &k) - : key(k), enabled(true), selectable(true) {}; - - const QString key; - QString section; - QString title; - QString description; - QSet dependencies; - QSet supports; // features who depends on this one - QSet relations; - bool enabled; - bool selectable; -}; - -class Feature : public QObject -{ - Q_OBJECT - -public: - static Feature* getInstance(const QString &key); - static void clear(); - -public: - QString key() const { return d->key; } - - void setTitle(const QString &title); - QString title() const { return d->title; } - - void setSection(const QString §ion); - QString section() const { return d->section; } - - void setDescription(const QString &description); - QString description() const { return d->description; }; - - void addRelation(const QString &key); - void setRelations(const QStringList &keys); - QList relations() const; - - void addDependency(const QString &dependency); - void setDependencies(const QStringList &dependencies); - QList dependencies() const; - - QList supports() const; - QString getDocumentation() const; - - void setEnabled(bool on); - bool enabled() const { return d->enabled; }; - - bool selectable() const { return d->selectable; } - - QString toHtml() const; - - ~Feature(); - -signals: - void changed(); - -private: - Feature(const QString &key); - void updateSelectable(); - - static QMap instances; - FeaturePrivate *d; -}; - -QT_END_NAMESPACE - -#endif // FEATURE_H diff -Nru qttools-opensource-src-5.7.1/src/qconfig/featuretreemodel.cpp qttools-opensource-src-5.9.1/src/qconfig/featuretreemodel.cpp --- qttools-opensource-src-5.7.1/src/qconfig/featuretreemodel.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/qconfig/featuretreemodel.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,438 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the tools applications of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:GPL-EXCEPT$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3 as published by the Free Software -** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "featuretreemodel.h" -#include "feature.h" -#include -#include -#include -#include - -QT_BEGIN_NAMESPACE - -class Node -{ -public: - Node(Feature *f, Node *p = 0) : feature(f), parent(p) {} - ~Node(); - Node* find(const Feature *child) const; - bool contains(const Feature *child) const { return find(child) != 0; } - bool insert(Node *n); - - Feature *feature; - Node *parent; - QList children; // maybe convert to Map to get keys sorted -}; - -Node::~Node() -{ - while (!children.isEmpty()) - delete children.takeFirst(); -} - -Node* Node::find(const Feature *f) const -{ - if (this->feature == f) - return const_cast(this); - - foreach (Node *n, children) - if (Node *m = n->find(f)) - return m; - - return 0; -} - -static bool nodePtrLessThan(const Node *n1, const Node *n2) -{ - return (n1->feature->key() < n2->feature->key()); -} - -/* - Try insert \a n into the tree with this node as root. - n is inserted as a child if it has a dependency to this node. - Returns true if child is inserted into the tree, false otherwise. -*/ -bool Node::insert(Node *n) -{ - Feature *f = const_cast(n->feature); - if (feature->supports().contains(f)) { - children.append(n); - qSort(children.begin(), children.end(), nodePtrLessThan); - n->parent = this; - return true; - } - foreach (Node *child, children) - if (child->insert(n)) - return true; - return false; -} - -static bool isSection(const QModelIndex &index) -{ - return index.isValid() && (index.internalId() == 0); -} - -FeatureTreeModel::FeatureTreeModel(QObject *parent) - : QAbstractItemModel(parent) -{ -} - -FeatureTreeModel::~FeatureTreeModel() -{ - foreach (QString section, sections.keys()) - while (!sections[section].isEmpty()) - delete sections[section].takeFirst(); -} - -/* - Returns true if the model already contains \a in \a section, false otherwise. -*/ -bool FeatureTreeModel::contains(const QString §ion, const Feature *f) const -{ - return (find(section, f) != 0); -} - -Node* FeatureTreeModel::find(const QString §ion, const Feature *f) const -{ - QList roots = sections[section]; - foreach (Node *root, roots) - if (Node *n = root->find(f)) - return n; - return 0; -} - -/* - Add new \a feature to the tree. - When all feature is added, buildTree() must be called to build the - dependency tree. -*/ -void FeatureTreeModel::addFeature(Feature *feature) -{ - const QString section = feature->section(); - Q_ASSERT(!contains(section, feature)); - - connect(feature, SIGNAL(changed()), this, SLOT(featureChanged())); - - Node *node = new Node(feature, 0); - - // try insert any toplevel nodes as child of this one - foreach (Node *n, sections[section]) - if (node->insert(n)) - sections[section].removeAll(n); - - // try insert this node as a child of any existing node - foreach (Node *n, sections[section]) - if (n->insert(node)) { - emit layoutChanged(); - return; - } - - // not a child, insert as a toplevel node - sections[section].append(node); - qSort(sections[section].begin(), sections[section].end(), nodePtrLessThan); - emit layoutChanged(); -} - -QModelIndex FeatureTreeModel::createIndex(int row, int column, - const QModelIndex &parent, - const Node *node) const -{ - QModelIndex index = QAbstractItemModel::createIndex(row, column, - (void*)node); - if (parent.isValid()) - parentMap[index] = parent; - if (node) - featureIndexMap[node->feature] = index; - return index; -} - -QModelIndex FeatureTreeModel::index(int row, int column, - const QModelIndex &parent) const -{ - if (!parent.isValid()) { // index is a section - if (row < sections.size() && column == 0) - return QAbstractItemModel::createIndex(row, column); - return QModelIndex(); - } - - if (isSection(parent)) { // index is a toplevel feature - const int parentRow = parent.row(); - if (parentRow < sections.size()) { - QString section = sections.keys().at(parentRow); - QList nodes = sections[section]; - if (row < nodes.size() && column < 2) - return createIndex(row, column, parent, nodes.at(row)); - } - return QModelIndex(); - } - - // parent is a feature - Node *parentNode = static_cast(parent.internalPointer()); - QList children = parentNode->children; - if (row < children.size() && column < 2) - return createIndex(row, column, parent, children.at(row)); - - return QModelIndex(); -} - -QModelIndex FeatureTreeModel::index(const QModelIndex &parent, - const Feature *feature) const -{ - const int rows = rowCount(parent); - for (int i = 0; i < rows; ++i) { - QModelIndex child = index(i, 0, parent); - Node *node = static_cast(child.internalPointer()); - if (node && node->feature == feature) - return child; - QModelIndex childSearch = index(child, feature); - if (childSearch.isValid()) - return childSearch; - } - return QModelIndex(); -} - -QModelIndex FeatureTreeModel::index(const Feature *feature) const -{ - if (featureIndexMap.contains(feature)) - return featureIndexMap.value(feature); - - // exhaustive search - int sectionRow = sections.keys().indexOf(feature->section()); - QModelIndex sectionIndex = index(sectionRow, 0, QModelIndex()); - - return index(sectionIndex, feature); -} - -QModelIndex FeatureTreeModel::parent(const QModelIndex &index) const -{ - if (!index.isValid()) - return QModelIndex(); - - if (parentMap.contains(index)) - return parentMap.value(index); - return QModelIndex(); -} - -int FeatureTreeModel::rowCount(const QModelIndex &parent) const -{ - if (!parent.isValid()) - return sections.size(); - - if (isSection(parent)) { - const QString section = sections.keys().at(parent.row()); - return sections[section].size(); - } - - const Node *node = static_cast(parent.internalPointer()); - return node->children.size(); -} - -int FeatureTreeModel::columnCount(const QModelIndex &parent) const -{ -#if 0 - if (!parent.isValid()) - return 0; - - if (isSection(parent)) - return 1; -#endif - Q_UNUSED(parent); - return 2; // Feature: [key, name] -} - -QVariant FeatureTreeModel::data(const QModelIndex &index, int role) const -{ - if (!index.isValid()) - return QVariant(); - - const Node *node = static_cast(index.internalPointer()); - - switch (role) { - case Qt::DisplayRole: { - if (node == 0) // index is a section - return sections.keys().at(index.row()); - if (index.column() == 0) - return node->feature->key(); - Q_ASSERT(index.column() == 1); - return node->feature->title(); - } - case Qt::CheckStateRole: { - if (node && index.column() == 0) - return (node->feature->enabled() ? - Qt::Checked : Qt::Unchecked); - break; - } - case Qt::TextColorRole: { - if (node && index.column() == 0) // feature key - if (node->feature->selectable()) - return QApplication::palette().color(QPalette::Link); - break; - } - case Qt::TextAlignmentRole: - case Qt::BackgroundColorRole: - case Qt::FontRole: - case Qt::ToolTipRole: // TODO - case Qt::StatusTipRole: // TODO - case Qt::WhatsThisRole: // TODO - case Qt::DecorationRole: - case Qt::EditRole: - default: - break; - } - return QVariant(); -} - -bool FeatureTreeModel::setData(const QModelIndex &index, - const QVariant &value, int role) -{ - if (!index.isValid()) - return false; - - Node *node = static_cast(index.internalPointer()); - if (!node) - return false; - - if (role == Qt::CheckStateRole) { - Qt::CheckState state = static_cast(value.toInt()); - if (state == Qt::Checked) - node->feature->setEnabled(true); - else if (state == Qt::Unchecked) - node->feature->setEnabled(false); - emit dataChanged(index, index); - return true; - } - return false; -} - -Qt::ItemFlags FeatureTreeModel::flags(const QModelIndex &index) const -{ - if (!index.isValid() || index.internalPointer() == 0) - return Qt::ItemIsEnabled | Qt::ItemIsSelectable; - - const Node *node = static_cast(index.internalPointer()); - const Feature *feature = node->feature; - Qt::ItemFlags flags = Qt::ItemIsUserCheckable | Qt::ItemIsSelectable; - - if (feature->selectable()) - flags |= Qt::ItemIsEnabled; - - return flags; -} - -QVariant FeatureTreeModel::headerData(int section, Qt::Orientation orientation, - int role) const -{ - if (orientation == Qt::Horizontal && role == Qt::DisplayRole) { - if (section == 0) - return QString("Id"); - else if (section == 1) - return QString("Name"); - } - - return QVariant(); -} - -Feature* FeatureTreeModel::getFeature(const QModelIndex &index) const -{ - if (!index.isValid()) - return 0; - if (isSection(index)) - return 0; - Node *node = static_cast(index.internalPointer()); - return const_cast(node->feature); -} - -void FeatureTreeModel::featureChanged() -{ - Feature *feature = qobject_cast(sender()); - if (feature) { - QModelIndex featureIndex = index(feature); - emit dataChanged(featureIndex, featureIndex); - } else { - emit layoutChanged(); - } -} - -void FeatureTreeModel::readConfig(QTextStream &stream) -{ - static QRegExp regexp("\\s*#\\s*define\\s+QT_NO_(\\S+)\\s*"); - - while (!stream.atEnd()) { - QString line = stream.readLine(); - if (regexp.exactMatch(line)) { - Feature *f = Feature::getInstance(regexp.cap(1)); - f->setEnabled(false); - } - } -} -/* - Search for all disabled child features of \a parent. - Returns a list of feature keys for the disabled items. -*/ -QStringList FeatureTreeModel::findDisabled(const QModelIndex &parent) const -{ - QStringList stringList; - - const int rows = rowCount(parent); - for (int i = 0; i < rows; ++i) { - QModelIndex child = index(i, 0, parent); - Node *node = static_cast(child.internalPointer()); - if (node && node->feature && !node->feature->enabled()) - stringList << node->feature->key(); - stringList << findDisabled(child); - } - return stringList; -} - -void FeatureTreeModel::writeConfig(QTextStream &stream) const -{ - const int sectionCount = rowCount(QModelIndex()); - - for (int i = 0; i < sectionCount; ++i) { - QModelIndex section = index(i, 0, QModelIndex()); - QStringList disabled = findDisabled(section); - if (disabled.size() > 0) { - stream << '\n' << "/* " << sections.keys().at(i) << " */" << '\n'; - foreach (QString feature, disabled) - stream << "#ifndef QT_NO_" << feature << '\n' - << "# define QT_NO_" << feature << '\n' - << "#endif" << '\n'; - } - } -} - -void FeatureTreeModel::clear() -{ - Feature::clear(); - sections.clear(); - parentMap.clear(); - featureIndexMap.clear(); - emit layoutChanged(); -} - -QT_END_NAMESPACE diff -Nru qttools-opensource-src-5.7.1/src/qconfig/featuretreemodel.h qttools-opensource-src-5.9.1/src/qconfig/featuretreemodel.h --- qttools-opensource-src-5.7.1/src/qconfig/featuretreemodel.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/qconfig/featuretreemodel.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,91 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the tools applications of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:GPL-EXCEPT$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3 as published by the Free Software -** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef FEATURETREEMODEL_H -#define FEATURETREEMODEL_H - -#include -#include -#include -#include - -QT_BEGIN_NAMESPACE - -class Feature; -class Node; - -uint qHash(const QModelIndex&); - -class FeatureTreeModel : public QAbstractItemModel -{ - Q_OBJECT - -public: - FeatureTreeModel(QObject *parent = 0); - ~FeatureTreeModel(); - - void clear(); - - QVariant data(const QModelIndex &index, int role) const; - bool setData(const QModelIndex &index, const QVariant &value, int role); - Qt::ItemFlags flags(const QModelIndex &index) const; - QVariant headerData(int section, Qt::Orientation orientation, - int role = Qt::DisplayRole) const; - QModelIndex index(int row, int column, - const QModelIndex &parent = QModelIndex()) const; - QModelIndex index(const Feature *feature) const; - QModelIndex parent(const QModelIndex &index) const; - int rowCount(const QModelIndex &parent = QModelIndex()) const; - int columnCount(const QModelIndex &parent = QModelIndex()) const; - - void addFeature(Feature *feature); - Feature* getFeature(const QModelIndex &index) const; - - void readConfig(QTextStream &stream); - void writeConfig(QTextStream &stream) const; - -public slots: - void featureChanged(); - -private: - QModelIndex createIndex(int row, int column, - const QModelIndex &parent, - const Node *feature) const; - QModelIndex index(const QModelIndex &parent, const Feature *feature) const; - bool contains(const QString §ion, const Feature *f) const; - Node* find(const QString §ion, const Feature *f) const; - QStringList findDisabled(const QModelIndex &parent) const; - - QMap > sections; - mutable QHash parentMap; - mutable QHash featureIndexMap; -}; - -QT_END_NAMESPACE - -#endif // FEATURETREEMODEL_H diff -Nru qttools-opensource-src-5.7.1/src/qconfig/graphics.h qttools-opensource-src-5.9.1/src/qconfig/graphics.h --- qttools-opensource-src-5.7.1/src/qconfig/graphics.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/qconfig/graphics.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,182 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the tools applications of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:GPL-EXCEPT$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3 as published by the Free Software -** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef GRAPHICS_H -#define GRAPHICS_H - -static const char *logo_xpm[] = { -/* width height ncolors chars_per_pixel */ -"50 50 17 1", -/* colors */ -" c #000000", -". c #495808", -"X c #2A3304", -"o c #242B04", -"O c #030401", -"+ c #9EC011", -"@ c #93B310", -"# c #748E0C", -"$ c #A2C511", -"% c #8BA90E", -"& c #99BA10", -"* c #060701", -"= c #181D02", -"- c #212804", -"; c #61770A", -": c #0B0D01", -"/ c None", -/* pixels */ -"/$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$/", -"$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$", -"$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$", -"$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$", -"$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$", -"$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$", -"$$$$$$$$$$$$$$$$$$$$$$$+++$$$$$$$$$$$$$$$$$$$$$$$$", -"$$$$$$$$$$$$$$$$$$$@;.o=::=o.;@$$$$$$$$$$$$$$$$$$$", -"$$$$$$$$$$$$$$$$+#X* **X#+$$$$$$$$$$$$$$$$", -"$$$$$$$$$$$$$$$#oO* O **o#+$$$$$$$$$$$$$$", -"$$$$$$$$$$$$$&.* OO O*.&$$$$$$$$$$$$$", -"$$$$$$$$$$$$@XOO * OO X&$$$$$$$$$$$$", -"$$$$$$$$$$$@XO OO O **:::OOO OOO X@$$$$$$$$$$$", -"$$$$$$$$$$&XO O-;#@++@%.oOO X&$$$$$$$$$$", -"$$$$$$$$$$.O : *-#+$$$$$$$$+#- : O O*.$$$$$$$$$$", -"$$$$$$$$$#*OO O*.&$$$$$$$$$$$$+.OOOO **#$$$$$$$$$", -"$$$$$$$$+-OO O *;$$$$$$$$$$$&$$$$;* o+$$$$$$$$", -"$$$$$$$$#O* O .+$$$$$$$$$$@X;$$$+.O *#$$$$$$$$", -"$$$$$$$$X* -&$$$$$$$$$$@- :;$$$&- OX$$$$$$$$", -"$$$$$$$@*O *O#$$$$$$$$$$@oOO**;$$$# O*%$$$$$$$", -"$$$$$$$; -+$$$$$$$$$@o O OO ;+$$-O *;$$$$$$$", -"$$$$$$$. ;$$$$$$$$$@-OO OO X&$$;O .$$$$$$$", -"$$$$$$$o *#$$$$$$$$@o O O O-@$$$#O *o$$$$$$$", -"$$$$$$+= *@$$$$$$$@o* OO -@$$$$&: =$$$$$$$", -"$$$$$$+: :+$$$$$$@- *-@$$$$$$: :+$$$$$$", -"$$$$$$+: :+$$$$$@o* O *-@$$$$$$: :+$$$$$$", -"$$$$$$$= :@$$$$@o*OOO -@$$$$@: =+$$$$$$", -"$$$$$$$- O%$$$@o* O O O O-@$$$#* OX$$$$$$$", -"$$$$$$$. O *O;$$&o O*O* *O -@$$; O.$$$$$$$", -"$$$$$$$;* Oo+$$;O*O:OO-- Oo@+= *;$$$$$$$", -"$$$$$$$@* O O#$$$;*OOOo@@-O Oo;O* **@$$$$$$$", -"$$$$$$$$X* OOO-+$$$;O o@$$@- O O OX$$$$$$$$", -"$$$$$$$$#* * O.$$$$;X@$$$$@-O O O#$$$$$$$$", -"$$$$$$$$+oO O OO.+$$+&$$$$$$@-O o+$$$$$$$$", -"$$$$$$$$$#* **.&$$$$$$$$$$@o OO:#$$$$$$$$$", -"$$$$$$$$$+. O* O-#+$$$$$$$$+;O OOO:@$$$$$$$$$", -"$$$$$$$$$$&X *O -;#@++@#;=O O -@$$$$$$$$", -"$$$$$$$$$$$&X O O*O::::O OO Oo@$$$$$$$", -"$$$$$$$$$$$$@XOO OO O*X+$$$$$$", -"$$$$$$$$$$$$$&.* ** O :: *:#$$$$$$$", -"$$$$$$$$$$$$$$$#o*OO O Oo#@-OOO=#$$$$$$$$", -"$$$$$$$$$$$$$$$$+#X:* * O**X#+$$@-*:#$$$$$$$$$", -"$$$$$$$$$$$$$$$$$$$%;.o=::=o.#@$$$$$$@X#$$$$$$$$$$", -"$$$$$$$$$$$$$$$$$$$$$$$$+++$$$$$$$$$$$+$$$$$$$$$$$", -"$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$", -"$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$", -"$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$", -"$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$", -"$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$", -"/$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$/", -}; - -static const char *expanded_xpm[] = { -"32 32 3 1", -" c None", -"# c #000000", -"a c #0000c0", -" ## ", -" ## ", -" #############aaaaaaaaaaaaa ", -" ## # ", -" ## # ", -" ## # ", -" ## # ", -" ## # ", -" ## # ", -" ## #aaaaaaaaaaaaa ", -" ## ", -" ## ", -" ## ", -" ## ", -" ## ", -" #############aaaaaaaaaaaaa ", -" ## # ", -" ## # ", -" ## # ", -" ## # ", -" ## # ", -" ## #aaaaaaaaaaaaa ", -" ## ", -" ## ", -" ## ", -" ## ", -" ## ", -" #############aaaaaaaaaaaaa ", -" ## # ", -" ## # ", -" ## # ", -" ## # "}; - -static const char *collapsed_xpm[] = { -"32 32 3 1", -" c None", -"# c #000000", -"a c #0000c0", -" ## ", -" ## ", -" ##aaaaaaaaaaaaaaaaaa ", -" ## ", -" ## ", -" ## ", -" ## ", -" ## ", -" ## ", -" ## ", -" ##aaaaaaaaaaaaaaaaaa ", -" ## ", -" ## ", -" ## ", -" ## ", -" ## ", -" ## ", -" ## ", -" ##aaaaaaaaaaaaaaaaaa ", -" ## ", -" ## ", -" ## ", -" ## ", -" ## ", -" ## ", -" ## ", -" ##aaaaaaaaaaaaaaaaaa ", -" ## ", -" ## ", -" ## ", -" ## ", -" ## "}; - -#endif // GRAPHICS_H diff -Nru qttools-opensource-src-5.7.1/src/qconfig/main.cpp qttools-opensource-src-5.9.1/src/qconfig/main.cpp --- qttools-opensource-src-5.7.1/src/qconfig/main.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/qconfig/main.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,545 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the tools applications of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:GPL-EXCEPT$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3 as published by the Free Software -** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "graphics.h" -#include "feature.h" -#include "featuretreemodel.h" - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -QT_BEGIN_NAMESPACE - -static QString defaultPath; - -class FeatureTextBrowser : public QTextBrowser { - Q_OBJECT -public: - FeatureTextBrowser(QWidget *parent) : QTextBrowser(parent) { - QString docRoot; - docRoot = QLibraryInfo::location(QLibraryInfo::DocumentationPath) - + "/html"; - setSearchPaths(searchPaths() << docRoot); - } - -signals: - void featureClicked(const QString &feature); - -public slots: - void setSource(const QUrl &url) - { - if (url.scheme() == "feature") - emit featureClicked(url.authority()); - else - QTextBrowser::setSource(url); - } -}; - -class Main : public QMainWindow { - Q_OBJECT -public: - Main(); - ~Main(); - void loadFeatures(const QString& filename); - void loadConfig(const QString& filename); - -public slots: - void modelChanged(); - void showInfo(const QModelIndex &index); - void showInfo(const QString &feature); - void openConfig(); - void saveConfig(); - void expandView(); - void collapseView(); - void about(); - void aboutQt(); - void quit(); - void clear(); - void enableAll(); - void disableAll(); - -private: - QTextBrowser *textBrowser; - QTreeView *featureTree; - FeatureTreeModel *featureModel; - - void init(); - void updateStatus(int numFeatures = -1); - void completelyExpandIndex(const QModelIndex &parent); -}; - -template -void foreachIndex_helper(const QModelIndex &parent, Func func) -{ - const QAbstractItemModel *model = parent.model(); - const int rows = model->rowCount(parent); - for (int i = 0; i < rows; ++i) { - const QModelIndex child = model->index(i, 0, parent); - func(child); - foreachIndex_helper(child, func); - } -} - -template -void foreachIndex(const QAbstractItemModel *model, Func func) -{ - const int rows = model->rowCount(QModelIndex()); - for (int i = 0; i < rows; ++i) { - const QModelIndex child = model->index(i, 0, QModelIndex()); - func(child); - foreachIndex_helper(child, func); - } -} - -struct CheckStateSetter { - - CheckStateSetter(Qt::CheckState state, QAbstractItemModel *m) - : checkState(state), model(m) {} - - void operator()(const QModelIndex &index) { - model->setData(index, checkState, Qt::CheckStateRole); - } - - Qt::CheckState checkState; - QAbstractItemModel *model; -}; - -void Main::disableAll() -{ - QAbstractItemModel *model = featureTree->model(); - foreachIndex(model, CheckStateSetter(Qt::Unchecked, model)); -} - -void Main::enableAll() -{ - QAbstractItemModel *model = featureTree->model(); - foreachIndex(model, CheckStateSetter(Qt::Checked, model)); -} - -Main::Main() -{ - setWindowIcon(QIcon(QPixmap(logo_xpm))); - - QSplitter *splitter = new QSplitter(this); - - featureModel = new FeatureTreeModel(this); - featureTree = new QTreeView(splitter); - splitter->addWidget(featureTree); - featureTree->setRootIsDecorated(true); - featureTree->setModel(featureModel); - featureTree->show(); - - textBrowser = new FeatureTextBrowser(splitter); - textBrowser->setFrameStyle(QFrame::WinPanel|QFrame::Sunken); - splitter->addWidget(textBrowser); - textBrowser->show(); - - connect(textBrowser, SIGNAL(featureClicked(QString)), - this, SLOT(showInfo(QString))); - connect(featureTree, SIGNAL(activated(QModelIndex)), - this, SLOT(showInfo(QModelIndex))); - connect(featureModel, SIGNAL(dataChanged(QModelIndex,QModelIndex)), - this, SLOT(modelChanged())); - connect(featureTree, SIGNAL(clicked(QModelIndex)), - this, SLOT(showInfo(QModelIndex))); - - setCentralWidget(splitter); - - QMenu *file = menuBar()->addMenu("&File"); - file->addAction("&Open...", this, SLOT(openConfig()), - Qt::CTRL + Qt::Key_O); - file->addAction("&Save As...", this, SLOT(saveConfig()), - Qt::CTRL + Qt::Key_S); - file->addSeparator(); - file->addAction("&Reset", this, SLOT(clear())); - file->addSeparator(); - file->addAction("E&xit", this, SLOT(quit()), Qt::CTRL + Qt::Key_Q); - - QMenu *edit = menuBar()->addMenu("&Tools"); - edit->addAction("&Enable all features", this, SLOT(enableAll())); - edit->addAction("&Disable all features", this, SLOT(disableAll())); - - menuBar()->addSeparator(); - - QMenu *help = menuBar()->addMenu("&Help"); - help->addAction("&About", this, SLOT(about())); - help->addAction("About &Qt", this, SLOT(aboutQt())); - - QToolBar *tb = new QToolBar("Expand/Collapse features"); - QToolButton *button; - - button = new QToolButton(tb); - button->setIcon(QIcon(QPixmap(collapsed_xpm))); - button->setText("Collapse"); - button->setToolTip("Collapse"); - connect(button, SIGNAL(clicked()), this, SLOT(collapseView())); - tb->addWidget(button); - - button = new QToolButton(tb); - button->setIcon(QIcon(QPixmap(expanded_xpm))); - button->setText("Expand"); - button->setToolTip("Expand"); - connect(button, SIGNAL(clicked()), this, SLOT(expandView())); - tb->addWidget(button); - addToolBar(tb); - - init(); -} - -Main::~Main() -{ - delete textBrowser; - delete featureModel; - delete featureTree; -} - -void Main::clear() -{ - QSettings settings; - settings.clear(); - featureModel->clear(); - featureTree->reset(); - init(); -} - -void Main::quit() -{ - if (isWindowModified()) { - int button = QMessageBox::question(this, "Quit Program", - "You have unsaved changes.\n" - "Do you want to quit anyway?", - QMessageBox::Yes, - QMessageBox::No); - if (static_cast(button) != QMessageBox::Yes) - return; - } - QApplication::instance()->quit(); -} - -/* - Recursively expand expand \a parent and all of its children. -*/ -void Main::completelyExpandIndex(const QModelIndex &parent) -{ - featureTree->setExpanded(parent, true); - - const QAbstractItemModel *model = featureTree->model(); - const int rows = model->rowCount(parent); - for (int i = 0; i < rows; ++i) - completelyExpandIndex(model->index(i, 0, parent)); -} - -void Main::expandView() -{ - completelyExpandIndex(QModelIndex()); -} - -void Main::collapseView() -{ - const QAbstractItemModel *model = featureTree->model(); - const int rows = model->rowCount(QModelIndex()); - for (int i = 0; i < rows; ++i) { - QModelIndex index = model->index(i, 0, QModelIndex()); - featureTree->setExpanded(index, false); - } -} - -void Main::updateStatus(int numFeatures) -{ - QSettings settings; - QString featureFile = settings.value("featureFile").toString(); - QString configFile = settings.value("lastConfig").toString(); - QString message("Using features from %1"); - - if (numFeatures >= 0) { - QString s("%1 features loaded from %2"); - statusBar()->showMessage(s.arg(numFeatures).arg(featureFile)); - } - QString appName = QApplication::applicationName(); - if (configFile.isEmpty()) - configFile = "New File"; - setWindowTitle(appName + " - " + configFile + "[*]"); -} - -void Main::modelChanged() -{ - setWindowModified(true); -} - -void Main::init() -{ - QSettings settings; - QString features = settings.value("featureFile").toString(); - - if (features.isEmpty() || !QFileInfo(features).isFile()) { - features = QFileDialog::getOpenFileName(this, - "Open a feature file", - defaultPath, - "Qt Features (qfeatures.txt)"); - } - settings.setValue("featureFile", features); - loadFeatures(features); - - expandView(); - collapseView(); - - QString confFile = settings.value("lastConfig").toString(); - if (confFile.isEmpty()) - return; - loadConfig(confFile); -} - -void Main::openConfig() -{ - QSettings settings; - QString configDir; - - QString prevFile = settings.value("lastConfig").toString(); - if (!prevFile.isEmpty()) - configDir = QFileInfo(prevFile).path(); - - if (configDir.isEmpty()) - configDir = defaultPath; - - QString configFile; - configFile = QFileDialog::getOpenFileName(this, - "Open a configuration file", - configDir, - "Header files (*.h)"); - enableAll(); - if (!configFile.isEmpty()) - loadConfig(configFile); - settings.setValue("lastConfig", QFileInfo(configFile).absoluteFilePath()); -} - -void Main::saveConfig() -{ - QSettings settings; - QString configDir; - - QString prevFile = settings.value("lastConfig").toString(); - if (!prevFile.isEmpty()) - configDir = QFileInfo(prevFile).path(); - - if (configDir.isEmpty()) - configDir = defaultPath; - - QString configFile; - configFile = QFileDialog::getSaveFileName(this, - "Save configuration file", - configDir, - "Header files (*.h)"); - if (configFile.isEmpty()) - return; - - QFile file(configFile); - if (!file.open(QIODevice::WriteOnly)) { - QMessageBox::warning(this,"Warning", - "Cannot write to file " + configFile); - return; - } - - QTextStream stream(&file); - FeatureTreeModel *model; - model = static_cast(featureTree->model()); - model->writeConfig(stream); - - settings.setValue("lastConfig", QFileInfo(configFile).absoluteFilePath()); - setWindowModified(false); - updateStatus(); -} - -void Main::loadConfig(const QString &filename) -{ - if (!QFileInfo(filename).isFile()) - return; - - QFile file(filename); - if (!file.open(QIODevice::ReadOnly)) { - QMessageBox::warning(this,"Warning", "Cannot open file " + filename); - return; - } - - QTextStream stream(&file); - FeatureTreeModel *model; - model = static_cast(featureTree->model()); - model->readConfig(stream); - - QSettings settings; - settings.setValue("lastConfig", QFileInfo(filename).absoluteFilePath()); - setWindowModified(false); - updateStatus(); -} - -void Main::loadFeatures(const QString &filename) -{ - Feature::clear(); - - QFile file(filename); - if (!file.open(QIODevice::ReadOnly)) { - QMessageBox::warning(this,"Warning", "Cannot open file " + filename); - return; - } - - Feature *feature = 0; - int numFeatures = 0; - updateStatus(numFeatures); - QTextStream s(&file); - for (QString line = s.readLine(); !s.atEnd(); line = s.readLine()) { - line = line.simplified(); - if (line.isEmpty()) - continue; - if (line.startsWith('#')) - continue; - - int colon = line.indexOf(':'); - if (colon < 0) { // assume description - QString description = feature->description().simplified(); - description += " " + line; - feature->setDescription(description); - continue; - } - - QString tag = line.left(colon); - QString value = line.mid(colon+1).simplified(); - if (tag == "Feature") { - if (feature) - featureModel->addFeature(feature); - feature = Feature::getInstance(value); - updateStatus(++numFeatures); - } else if (tag == "Requires") { - Q_ASSERT(feature); - feature->setDependencies(value.split(' ', QString::SkipEmptyParts)); - } else if (tag == "Name") { - Q_ASSERT(feature); - feature->setTitle(value); - } else if (tag == "Section") { - Q_ASSERT(feature); - feature->setSection(value); - } else if (tag == "SeeAlso") { - Q_ASSERT(feature); - feature->setRelations(value.split(' ', QString::SkipEmptyParts)); - } else if (tag == "Description") { - Q_ASSERT(feature); - feature->setDescription(value); - } - } - if (feature) - featureModel->addFeature(feature); - - featureTree->resizeColumnToContents(0); - - QSettings settings; - settings.setValue("featureFile", QFileInfo(filename).absoluteFilePath()); - - updateStatus(); -} - -void Main::showInfo(const QModelIndex &index) -{ - FeatureTreeModel *model; - model = static_cast(featureTree->model()); - - if (const Feature *feature = model->getFeature(index)) - textBrowser->setHtml(feature->toHtml()); - - // Ensure index is visible - QModelIndex parent = model->parent(index); - while (parent.isValid()) { - featureTree->setExpanded(parent, true); - parent = model->parent(parent); - } - - featureTree->scrollTo(index); - featureTree->setCurrentIndex(index); -} - -void Main::showInfo(const QString &feature) -{ - const Feature *f = Feature::getInstance(feature); - FeatureTreeModel *model; - model = static_cast(featureTree->model()); - showInfo(model->index(f)); -} - -void Main::about() -{ - QMessageBox::about(this, "About qconfig", - "

      Qtopia Core build configuration

      " - "

      " - "

      Version 2.0

      " - "

      Copyright (C) 2016 The Qt Company Ltd.

      " - "

      " - ); -} - -void Main::aboutQt() -{ - QMessageBox::aboutQt( this, tr("qconfig") ); -} - -QT_END_NAMESPACE - -int main(int argc, char** argv) -{ - QT_USE_NAMESPACE - QApplication app(argc,argv); - app.setOrganizationDomain("qt-project.org"); - app.setOrganizationName("QtProject"); - app.setApplicationName("QConfig"); - Main m; - - defaultPath = QLibraryInfo::location(QLibraryInfo::PrefixPath) - + "/src/corelib/global"; - - for (int i = 1; i < argc; ++i) { - QString arg = argv[i]; - if (arg == "-f" && i+1 < argc) - m.loadFeatures(argv[++i]); - else if (arg == "-c" && i+1 < argc) - m.loadConfig(argv[++i]); - } - m.resize(m.sizeHint() + QSize(500,300)); - m.show(); - return app.exec(); -} - -#include "main.moc" diff -Nru qttools-opensource-src-5.7.1/src/qconfig/qconfig.pro qttools-opensource-src-5.9.1/src/qconfig/qconfig.pro --- qttools-opensource-src-5.7.1/src/qconfig/qconfig.pro 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/qconfig/qconfig.pro 1970-01-01 00:00:00.000000000 +0000 @@ -1,6 +0,0 @@ -QT += widgets - -HEADERS = feature.h featuretreemodel.h graphics.h -SOURCES = main.cpp feature.cpp featuretreemodel.cpp - -load(qt_app) diff -Nru qttools-opensource-src-5.7.1/src/qdbus/qdbus/qdbus.cpp qttools-opensource-src-5.9.1/src/qdbus/qdbus/qdbus.cpp --- qttools-opensource-src-5.7.1/src/qdbus/qdbus/qdbus.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/qdbus/qdbus/qdbus.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -30,6 +30,7 @@ #include #include +#include #include #include #include @@ -77,10 +78,12 @@ } if (v.userType() == QVariant::StringList) { - foreach (QString s, v.toStringList()) + const QStringList sl = v.toStringList(); + for (const QString &s : sl) printf("%s\n", qPrintable(s)); } else if (v.userType() == QVariant::List) { - foreach (const QVariant &var, v.toList()) + const QVariantList vl = v.toList(); + for (const QVariant &var : vl) printArg(var); } else if (v.userType() == QVariant::Map) { const QVariantMap map = v.toMap(); @@ -394,7 +397,8 @@ return 1; } - foreach (QVariant v, reply.arguments()) + const QVariantList replyArguments = reply.arguments(); + for (const QVariant &v : replyArguments) printArg(v); return 0; @@ -408,7 +412,7 @@ QStringList names = bus->registeredServiceNames(); names.sort(); - foreach (const QString &name, names) + for (const QString &name : qAsConst(names)) if (pattern.exactMatch(name)) printf("%s\n", qPrintable(name)); @@ -420,7 +424,7 @@ const QStringList services = bus->registeredServiceNames(); QMap servicesWithAliases; - foreach (QString serviceName, services) { + for (const QString &serviceName : services) { QDBusReply reply = bus->serviceOwner(serviceName); QString owner = reply; if (owner.isEmpty()) diff -Nru qttools-opensource-src-5.7.1/src/qdbus/qdbus.pro qttools-opensource-src-5.9.1/src/qdbus/qdbus.pro --- qttools-opensource-src-5.7.1/src/qdbus/qdbus.pro 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/qdbus/qdbus.pro 2017-06-23 12:03:39.000000000 +0000 @@ -1,3 +1,4 @@ TEMPLATE = subdirs -SUBDIRS = qdbus +QT_FOR_CONFIG += xml +qtConfig(dom): SUBDIRS = qdbus qtHaveModule(widgets): SUBDIRS += qdbusviewer diff -Nru qttools-opensource-src-5.7.1/src/qdbus/qdbusviewer/Info_mac.plist qttools-opensource-src-5.9.1/src/qdbus/qdbusviewer/Info_mac.plist --- qttools-opensource-src-5.7.1/src/qdbus/qdbusviewer/Info_mac.plist 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/qdbus/qdbusviewer/Info_mac.plist 2017-06-23 12:03:39.000000000 +0000 @@ -1,20 +1,20 @@ - - + + - NSPrincipalClass - NSApplication + NSPrincipalClass + NSApplication CFBundleIconFile @ICON@ CFBundlePackageType APPL - CFBundleGetInfoString - Created by Qt/QMake CFBundleSignature ???? CFBundleIdentifier - com.trolltech.dbusviewer + org.qt-project.dbusviewer CFBundleExecutable @EXECUTABLE@ + NSHumanReadableCopyright + (C) 2017 The Qt Company Ltd diff -Nru qttools-opensource-src-5.7.1/src/qdbus/qdbusviewer/mainwindow.cpp qttools-opensource-src-5.9.1/src/qdbus/qdbusviewer/mainwindow.cpp --- qttools-opensource-src-5.7.1/src/qdbus/qdbusviewer/mainwindow.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/qdbus/qdbusviewer/mainwindow.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -90,7 +90,7 @@ "

      %1

      " "

      Version %2

      " "

      Copyright (C) %3 The Qt Company Ltd.

      ") - .arg(tr("D-Bus Viewer"), QLatin1String(QT_VERSION_STR), QStringLiteral("2016"))); + .arg(tr("D-Bus Viewer"), QLatin1String(QT_VERSION_STR), QStringLiteral("2017"))); box.setWindowTitle(tr("D-Bus Viewer")); box.exec(); } diff -Nru qttools-opensource-src-5.7.1/src/qdbus/qdbusviewer/qdbusviewer.cpp qttools-opensource-src-5.9.1/src/qdbus/qdbusviewer/qdbusviewer.cpp --- qttools-opensource-src-5.7.1/src/qdbus/qdbusviewer/qdbusviewer.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/qdbus/qdbusviewer/qdbusviewer.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -436,7 +436,7 @@ out += QLatin1String("  (no arguments)"); } else { out += QLatin1String("  Arguments: "); - foreach (QVariant arg, args) { + for (const QVariant &arg : qAsConst(args)) { QString str = QDBusUtil::argumentToString(arg).toHtmlEscaped(); // turn object paths into clickable links str.replace(objectPathRegExp, QLatin1String("[ObjectPath: \\1]")); diff -Nru qttools-opensource-src-5.7.1/src/qdbus/qdbusviewer/qdbusviewer.h qttools-opensource-src-5.9.1/src/qdbus/qdbusviewer/qdbusviewer.h --- qttools-opensource-src-5.7.1/src/qdbus/qdbusviewer/qdbusviewer.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/qdbus/qdbusviewer/qdbusviewer.h 2017-06-23 12:03:39.000000000 +0000 @@ -31,6 +31,7 @@ #include #include +#include class ServicesProxyModel; diff -Nru qttools-opensource-src-5.7.1/src/qdoc/config.cpp qttools-opensource-src-5.9.1/src/qdoc/config.cpp --- qttools-opensource-src-5.7.1/src/qdoc/config.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/qdoc/config.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -51,6 +51,7 @@ QString ConfigStrings::CODEPREFIX = QStringLiteral("codeprefix"); QString ConfigStrings::CODESUFFIX = QStringLiteral("codesuffix"); QString ConfigStrings::CPPCLASSESPAGE = QStringLiteral("cppclassespage"); +QString ConfigStrings::CPPCLASSESTITLE = QStringLiteral("cppclassestitle"); QString ConfigStrings::DEFINES = QStringLiteral("defines"); QString ConfigStrings::DEPENDS = QStringLiteral("depends"); QString ConfigStrings::DESCRIPTION = QStringLiteral("description"); @@ -117,6 +118,7 @@ QString ConfigStrings::IMAGEEXTENSIONS = QStringLiteral("imageextensions"); QString ConfigStrings::QMLONLY = QStringLiteral("qmlonly"); QString ConfigStrings::QMLTYPESPAGE = QStringLiteral("qmltypespage"); +QString ConfigStrings::QMLTYPESTITLE = QStringLiteral("qmltypestitle"); QString ConfigStrings::WRITEQAPAGES = QStringLiteral("writeqapages"); /*! @@ -385,12 +387,15 @@ Then it looks up the configuration variable \a var in the string map and returns the string that \a var maps to. + + If \a var is not contained in the location map it returns + \a defaultString. */ -QString Config::getString(const QString& var) const +QString Config::getString(const QString& var, const QString& defaultString) const { QList configVars = configVars_.values(var); - QString value; if (!configVars.empty()) { + QString value; int i = configVars.size() - 1; while (i >= 0) { const ConfigVar& cv = configVars[i]; @@ -407,8 +412,9 @@ } --i; } + return value; } - return value; + return defaultString; } /*! diff -Nru qttools-opensource-src-5.7.1/src/qdoc/config.h qttools-opensource-src-5.9.1/src/qdoc/config.h --- qttools-opensource-src-5.7.1/src/qdoc/config.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/qdoc/config.h 2017-06-23 12:03:39.000000000 +0000 @@ -87,7 +87,7 @@ int getInt(const QString& var) const; QString getOutputDir() const; QSet getOutputFormats() const; - QString getString(const QString& var) const; + QString getString(const QString& var, const QString& defaultString = QString()) const; QSet getStringSet(const QString& var) const; QStringList getStringList(const QString& var) const; QStringList getCanonicalPathList(const QString& var, bool validate = false) const; @@ -164,6 +164,7 @@ static QString CODEPREFIX; static QString CODESUFFIX; static QString CPPCLASSESPAGE; + static QString CPPCLASSESTITLE; static QString DEFINES; static QString DEPENDS; static QString DESCRIPTION; @@ -230,6 +231,7 @@ static QString IMAGEEXTENSIONS; static QString QMLONLY; static QString QMLTYPESPAGE; + static QString QMLTYPESTITLE; static QString WRITEQAPAGES; }; @@ -242,6 +244,7 @@ #define CONFIG_CODEPREFIX ConfigStrings::CODEPREFIX #define CONFIG_CODESUFFIX ConfigStrings::CODESUFFIX #define CONFIG_CPPCLASSESPAGE ConfigStrings::CPPCLASSESPAGE +#define CONFIG_CPPCLASSESTITLE ConfigStrings::CPPCLASSESTITLE #define CONFIG_DEFINES ConfigStrings::DEFINES #define CONFIG_DEPENDS ConfigStrings::DEPENDS #define CONFIG_DESCRIPTION ConfigStrings::DESCRIPTION @@ -308,6 +311,7 @@ #define CONFIG_IMAGEEXTENSIONS ConfigStrings::IMAGEEXTENSIONS #define CONFIG_QMLONLY ConfigStrings::QMLONLY #define CONFIG_QMLTYPESPAGE ConfigStrings::QMLTYPESPAGE +#define CONFIG_QMLTYPESTITLE ConfigStrings::QMLTYPESTITLE #define CONFIG_WRITEQAPAGES ConfigStrings::WRITEQAPAGES QT_END_NAMESPACE diff -Nru qttools-opensource-src-5.7.1/src/qdoc/cppcodemarker.cpp qttools-opensource-src-5.9.1/src/qdoc/cppcodemarker.cpp --- qttools-opensource-src-5.7.1/src/qdoc/cppcodemarker.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/qdoc/cppcodemarker.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -36,6 +36,7 @@ #include "text.h" #include "tree.h" #include +#include #include QT_BEGIN_NAMESPACE @@ -178,6 +179,8 @@ synopsis.prepend("virtual "); if (func->isFinal()) synopsis.append(" final"); + if (func->isOverride()) + synopsis.append(" override"); if (func->isPureVirtual()) synopsis.append(" = 0"); else if (func->isDeleted()) @@ -200,6 +203,8 @@ } else if (!func->isNonvirtual()) { if (func->isFinal()) bracketed += "final"; + if (func->isOverride()) + bracketed += "override"; if (func->isPureVirtual()) bracketed += "pure"; bracketed += "virtual"; diff -Nru qttools-opensource-src-5.7.1/src/qdoc/cppcodeparser.cpp qttools-opensource-src-5.9.1/src/qdoc/cppcodeparser.cpp --- qttools-opensource-src-5.7.1/src/qdoc/cppcodeparser.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/qdoc/cppcodeparser.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -436,7 +436,7 @@ if ((type == Node::Class) || (type == Node::Namespace)) { if (path.size() > 1) { path.pop_back(); - QString ns = path.join("::"); + QString ns = path.join(QLatin1String("::")); qdb_->insertOpenNamespace(ns); } } @@ -522,6 +522,8 @@ ptype = Node::FAQPage; else if (t == "ditamap") ptype = Node::DitaMapPage; + else if (t == "attribution") + ptype = Node::AttributionPage; } DocumentNode* dn = 0; if (ptype == Node::DitaMapPage) @@ -1312,8 +1314,8 @@ if (varComment.exactMatch(previousLexeme())) *var = varComment.cap(1); } - else if (qProp && (match(Tok_default) || match(Tok_final))) { - // Hack to make 'default' and 'final' work again in Q_PROPERTY + else if (qProp && (match(Tok_default) || match(Tok_final) || match(Tok_override))) { + // Hack to make 'default', 'final' and 'override' work again in Q_PROPERTY *var = previousLexeme(); } } @@ -1429,8 +1431,8 @@ matched_static = true; break; case Tok_QT_DEPRECATED: - // no break here. matched_QT_DEPRECATED = true; + Q_FALLTHROUGH(); // no break here. case Tok_QT_COMPAT: matched_compat = true; break; @@ -1585,6 +1587,7 @@ // look for const bool matchedConst = match(Tok_const); bool matchFinal = match(Tok_final); + bool matchOverride = match(Tok_override); bool isDeleted = false; bool isDefaulted = false; @@ -1704,6 +1707,7 @@ func->setIsDeleted(isDeleted); func->setIsDefaulted(isDefaulted); func->setFinal(matchFinal); + func->setOverride(matchOverride); if (isQPrivateSignal) func->setPrivateSignal(); } @@ -2071,7 +2075,7 @@ property->setDataType(dataType.toString()); while (tok != Tok_RightParen && tok != Tok_Eoi) { - if (!match(Tok_Ident) && !match(Tok_default) && !match(Tok_final)) + if (!match(Tok_Ident) && !match(Tok_default) && !match(Tok_final) && !match(Tok_override)) return false; QString key = previousLexeme(); QString value; diff -Nru qttools-opensource-src-5.7.1/src/qdoc/doc/qdoc-manual-cmdindex.qdoc qttools-opensource-src-5.9.1/src/qdoc/doc/qdoc-manual-cmdindex.qdoc --- qttools-opensource-src-5.7.1/src/qdoc/doc/qdoc-manual-cmdindex.qdoc 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/qdoc/doc/qdoc-manual-cmdindex.qdoc 2017-06-23 12:03:39.000000000 +0000 @@ -41,14 +41,15 @@ \li \l {abstract-command} {\\abstract} \li \l {annotatedlist-command} {\\annotatedlist} \li \l {b-command} {\\b} - \li \l {b-command} {\\bold} \span {class="newStuff"} {(deprecated, use \\b)} + \li \l {badcode-command} {\\badcode} + \li \l {b-command} {\\bold} (deprecated, use \\b) \li \l {brief-command} {\\brief} \li \l {c-command} {\\c} \li \l {caption-command} {\\caption} \li \l {chapter-command} {\\chapter} \li \l {class-command} {\\class} \li \l {code-command} {\\code} - \li \l {codeline-command} {\\codeline}, + \li \l {codeline-command} {\\codeline} \li \l {compat-command} {\\compat} \li \l {contentspage-command} {\\contentspage} \li \l {default-command} {\\default} @@ -66,7 +67,7 @@ \li \l {group-command} {\\group} \li \l {header-command} {\\header} \li \l {headerfile-command} {\\headerfile} - \li \l {e-command} {\\i} \span {class="newStuff"} {(deprecated, use \\e)} + \li \l {e-command} {\\i} (deprecated, use \\e) \li \l {if-command} {\\if} \li \l {image-command} {\\image} \li \l {include-command} {\\include} @@ -92,7 +93,7 @@ \li \l {noautolist-command} {\\noautolist} \li \l {nonreentrant-command} {\\nonreentrant} \li \l {note-command} {\\note} - \li \l {li-command} {\\o} \span {class="newStuff"} {(deprecated, use \\li)} + \li \l {li-command} {\\o} (deprecated, use \\li) \li \l {obsolete-command} {\\obsolete} \li \l {oldcode-command} {\\oldcode} @@ -107,11 +108,12 @@ \li \l {printto-command} {\\printto} \li \l {printuntil-command} {\\printuntil} \li \l {property-command} {\\property} + \li \l {qml-command} {\\qml} \li \l {qmlabstract-command} {\\qmlabstract} \li \l {qmlattachedproperty-command} {\\qmlattachedproperty} \li \l {qmlattachedsignal-command} {\\qmlattachedsignal} \li \l {qmlbasictype-command} {\\qmlbasictype} - \li \l {qmlclass-command} {\\qmlclass} \span {class="newStuff"} {(deprecated, use \\qmltype)} + \li \l {qmlclass-command} {\\qmlclass} (deprecated, use \\qmltype) \li \l {qmltype-command} {\\qmltype} \li \l {qmlmethod-command} {\\qmlmethod} \li \l {qmlproperty-command} {\\qmlproperty} @@ -134,7 +136,7 @@ \li \l {skipline-command} {\\skipline} \li \l {skipto-command} {\\skipto} \li \l {skipuntil-command} {\\skipuntil} - \li \l {snippet-command} {\\snippet}, + \li \l {snippet-command} {\\snippet} \li \l {span-command} {\\span} \li \l {startpage-command} {\\startpage} \li \l {sub-command} {\\sub} diff -Nru qttools-opensource-src-5.7.1/src/qdoc/doc/qdoc-manual-contextcmds.qdoc qttools-opensource-src-5.9.1/src/qdoc/doc/qdoc-manual-contextcmds.qdoc --- qttools-opensource-src-5.7.1/src/qdoc/doc/qdoc-manual-contextcmds.qdoc 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/qdoc/doc/qdoc-manual-contextcmds.qdoc 2017-06-23 12:03:39.000000000 +0000 @@ -319,7 +319,7 @@ The \\default command is for marking a QML property as the \l {default-properties} - {default property}. The word \span {class="newStuff"} {default} is shown in red in + {default property}. The word \c default is displayed in the documentation of the property. \code diff -Nru qttools-opensource-src-5.7.1/src/qdoc/doc/qdoc-manual-markupcmds.qdoc qttools-opensource-src-5.9.1/src/qdoc/doc/qdoc-manual-markupcmds.qdoc --- qttools-opensource-src-5.7.1/src/qdoc/doc/qdoc-manual-markupcmds.qdoc 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/qdoc/doc/qdoc-manual-markupcmds.qdoc 2017-06-23 12:03:39.000000000 +0000 @@ -39,8 +39,9 @@ \list \li \l {a-command} {\\a} \li \l {annotatedlist-command} {\\annotatedlist} - \li \l {b-command} {\\b} \span {class="newStuff"} - \li \l {b-command} {\\bold} {(deprecated, use \\b)} + \li \l {b-command} {\\b} + \li \l {badcode-command} {\\badcode} + \li \l {b-command} {\\bold} (deprecated, use \\b) \li \l {brief-command} {\\brief} \li \l {c-command} {\\c} \li \l {caption-command} {\\caption} @@ -49,13 +50,13 @@ \li \l {codeline-command} {\\codeline} \li \l {div-command} {\\div} \li \l {dots-command} {\\dots} - \li \l {e-command} {\\e} \span {class="newStuff"} + \li \l {e-command} {\\e} \li \l {else-command} {\\else} \li \l {endif-command} {\\endif} \li \l {footnote-command} {\\footnote} \li \l {generatelist-command} {\\generatelist} \li \l {header-command} {\\header} - \li \l {e-command} {\\i} \span {class="newStuff"} {(deprecated, use \\e)} + \li \l {e-command} {\\i} (deprecated, use \\e) \li \l {if-command} {\\if} \li \l {image-command} {\\image} \li \l {include-command} {\\include} @@ -64,12 +65,12 @@ \li \l {keyword-command} {\\keyword} \li \l {l-command} {\\l} \li \l {legalese-command} {\\legalese} - \li \l {li-command} {\\li} \span {class="newStuff"} + \li \l {li-command} {\\li} \li \l {list-command} {\\list} \li \l {meta-command} {\\meta} \li \l {noautolist-command} {\\noautolist} \li \l {newcode-command} {\\newcode} - \li \l {li-command} {\\o} \span {class="newStuff"} {(deprecated, use \\li)} + \li \l {li-command} {\\o} (deprecated, use \\li) \li \l {note-command} {\\note} \li \l {oldcode-command} {\\oldcode} \li \l {omit-command} {\\omit} @@ -77,6 +78,7 @@ \li \l {printline-command} {\\printline} \li \l {printto-command} {\\printto} \li \l {printuntil-command} {\\printuntil} + \li \l {qml-command}{\\qml} \li \l {quotation-command} {\\quotation} \li \l {quotefile-command} {\\quotefile} \li \l {quotefromfile-command} {\\quotefromfile} @@ -98,7 +100,7 @@ \li \l {tableofcontents-command} {\\tableofcontents} \li \l {target-command} {\\target} \li \l {tt-command} {\\tt} - \li \l {uicontrol-command} {\\uicontrol} {(new 25/3/2012)} + \li \l {uicontrol-command} {\\uicontrol} \li \l {underline-command} {\\underline} \li \l {raw-command} {\\unicode} \li \l {warning-command} {\\warning} @@ -483,7 +485,7 @@ \endquotation \target e-command - \section1 \\e (emphasis, italics) \span {class="newStuff"} {(new 5/3/2012)} + \section1 \\e (emphasis, italics) The \\e command renders its argument in a special font, normally italics. This command used to be called \\i, which is now deprecated. Use \e for italics. @@ -972,14 +974,18 @@ \note The \l {c-command} {\\c} command can be used for short code fragments within a sentence. The \\code command is for longer code snippets. It renders the code verbatim in a separate paragraph in - the code font. + a html
       element, and parses the enclosed snippet, creating links
      +    to any known types in the code.
      +
      +    For documenting command-line instructions, shell scripts, or any
      +    content that is not in a Qt language recognized by QDoc, use
      +    \l {badcode-command}{\\badcode} instead.
       
           When processing any of the \\code, \l {newcode-command} {\\newcode} or \l
           {oldcode-command} {\\oldcode} commands, QDoc removes all
           indentation that is common for the verbatim code blocks within a
           \c{/}\c{*!} ... \c{*}\c{/} comment before it adds the standard
      -    indentation. For that reason the recommended style is to use 8
      -    spaces for the verbatim code contained within these commands
      +    indentation.
       
           \note This doesn't apply to externally quoted code using the \l
           {quotefromfile-command} {\\quotefromfile} or \l
      @@ -1021,11 +1027,23 @@
           \l{07-0-qdoc-commands-includingexternalcode.html#codeline-command}
           {\\codeline} commands.
       
      -    See also \l {c-command} {\\c}, \l
      +    See also \l {c-command} {\\c}, \l {badcode-command} {\\badcode}, \l
           {07-0-qdoc-commands-includingexternalcode.html#quotefromfile-command}
           {\\quotefromfile}, \l{newcode-command} {\\newcode}, and \l {oldcode-command}
           {\\oldcode}.
       
      +    \target badcode-command
      +    \section1 \\badcode
      +
      +    Similar to \l {code-command}{\\code}, \\badcode and \\endcode commands
      +    enclose content that is rendered verbatim in a separate paragraph, but no
      +    parsing or automatic link creation is performed. Instead, the content is
      +    treated as plain text.
      +
      +    Substitute \\code with this command when documenting command-line
      +    instructions, shell scripts or any other content that is not in a Qt
      +    language, but should still be styled similarly to a \\code paragraph.
      +
           \target newcode-command
           \section1 \\newcode
       
      @@ -1085,13 +1103,12 @@
           \section1 \\qml
       
           The \\qml and \\endqml commands enclose a snippet of QML source
      -    code. Currently, QDoc handles \\qml and \\endqml in exactly the same
      -    way as \\code and \\endcode.
      +    code.
       
           \code
           / *!
               \qml
      -            import QtQuick 1.0
      +            import QtQuick 2.0
       
                   Row {
                       Rectangle {
      @@ -1112,7 +1129,7 @@
           QDoc renders this as:
       
           \qml
      -        import QtQuick 1.0
      +        import QtQuick 2.0
       
               Row {
                   Rectangle {
      @@ -3277,9 +3294,14 @@
       
          Elsewhere, the documentation identified as \e{\\legalese} command
          can be accumulated using \l {generatelist-command} {\\generatelist}
      -   with \c {legalese-command} as the argument. This is useful for
      -   generating an overview of the license agreements associated with
      -   the source code.
      +   with \c {legalese} as the argument. This is useful for generating
      +   an overview of the license agreements associated with the source
      +   code.
      +
      +   \note The output of the \c {\generatelist legalese} command includes
      +   the \\legalese texts in the current documentation project only. If
      +   the current documentation project depends on other modules, their
      +   license texts will not be listed.
       
           \target warning-command
           \section1 \\warning
      @@ -3408,6 +3430,18 @@
           navigation.landingpage configuration variable. The \e landingpage
           variable is used as a title for a header that precedes each table.
       
      +    \section2 \c annotatedattributions
      +
      +    The \c annotatedattributions argument provides a complete list of all
      +    attributions as a set of tables containing the titles of all the
      +    attributions, and a description of each attribution. Each title is a
      +    link to the attribution's page.
      +
      +    A separate table for each module (that has attributions)
      +    is generated, provided that the module has defined a
      +    navigation.landingpage configuration variable. The \e landingpage
      +    variable is used as a title for a header that precedes each table.
      +
           \target list example
           \section2 \c {classes }
       
      @@ -3536,38 +3570,9 @@
       
           \section2 \c legalese
       
      -    The \c legalese argument tells QDoc to generate a complete list of
      -    licenses in the documentation. Each license is identified using
      -    the \l {legalese-command} {\\legalese} command. This command is
      -    used to generate the \e {Qt license information}
      -    page this way:
      -
      -    \code
      -    / *!
      -        \page licenses.html
      -        \title Other Licenses Used in Qt
      -        \ingroup licensing
      -        \brief Information about other licenses used for Qt components and third-party code.
      -
      -        Qt contains some code that is not provided under the
      -        \l{GNU General Public License (GPL)},
      -        \l{GNU Lesser General Public License (LGPL)} or the
      -        \l{Qt Commercial Edition}{Qt Commercial License Agreement}, but rather under
      -        specific licenses from the original authors. Some pieces of code were developed
      -        by The Qt Company and others originated from third parties.
      -        This page lists the licenses used, names the authors, and links
      -        to the places where it is used.
      -
      -        The Qt Company gratefully acknowledges these and other contributions
      -        to Qt. We recommend that programs that use Qt also acknowledge
      -        these contributions, and quote these license statements in an
      -        appendix to the documentation.
      -
      -        See also: \l{Licenses for Fonts Used in Qt for Embedded Linux}
      -
      -        \generatelist legalese
      -    * /
      -    \endcode
      +    The \c legalese argument tells QDoc to generate a list of licenses in
      +    the current documentation project. Each license is identified using
      +    the \l {legalese-command} {\\legalese} command.
       
           \section2 \c overviews
       
      @@ -3586,6 +3591,11 @@
           * /
           \endcode
       
      +    \section2 \c attributions
      +
      +    The \c attributions argument is used to tell QDoc to generate a list
      +    of attributions in the documentation.
      +
           \section2 \c related
       
           The \c related argument is used in combination with the \l
      @@ -3894,7 +3904,7 @@
                  Qt Development Frameworks
                  Qt Project
                  
      -               
      +               
                      Qt Project
                  
                  
      @@ -3992,7 +4002,7 @@
                   \endraw
       
           \target raw-command
      -    \section1 \\raw \span {class="newStuff"} {(avoid)}
      +    \section1 \\raw (avoid)
       
           The \\raw command and the corresponding
           \\endraw command delimit a block of raw mark-up language code.
      diff -Nru qttools-opensource-src-5.7.1/src/qdoc/doc/qdoc-manual-qdocconf.qdoc qttools-opensource-src-5.9.1/src/qdoc/doc/qdoc-manual-qdocconf.qdoc
      --- qttools-opensource-src-5.7.1/src/qdoc/doc/qdoc-manual-qdocconf.qdoc	2016-11-03 08:31:16.000000000 +0000
      +++ qttools-opensource-src-5.9.1/src/qdoc/doc/qdoc-manual-qdocconf.qdoc	2017-06-23 12:03:39.000000000 +0000
      @@ -1700,7 +1700,7 @@
           dita.metadata.default.author      = Qt Development Frameworks
           dita.metadata.default.permissions = all
           dita.metadata.default.publisher   = Qt Project
      -    dita.metadata.default.copyryear = 2016
      +    dita.metadata.default.copyryear = 2017
           dita.metadata.default.copyrholder = Qt Project
           dita.metadata.default.audience = programmer
           \endcode
      diff -Nru qttools-opensource-src-5.7.1/src/qdoc/doc.cpp qttools-opensource-src-5.9.1/src/qdoc/doc.cpp
      --- qttools-opensource-src-5.7.1/src/qdoc/doc.cpp	2016-11-03 08:31:16.000000000 +0000
      +++ qttools-opensource-src-5.9.1/src/qdoc/doc.cpp	2017-06-23 12:03:39.000000000 +0000
      @@ -630,6 +630,7 @@
                           break;
                       case CMD_BOLD:
                           location().warning(tr("'\\bold' is deprecated. Use '\\b'"));
      +                    Q_FALLTHROUGH();
                       case CMD_B:
                           startFormat(ATOM_FORMATTING_BOLD, cmd);
                           break;
      @@ -883,6 +884,7 @@
                           break;
                       case CMD_I:
                           location().warning(tr("'\\i' is deprecated. Use '\\e' for italic or '\\li' for list item"));
      +                    Q_FALLTHROUGH();
                       case CMD_E:
                           startFormat(ATOM_FORMATTING_ITALIC, cmd);
                           break;
      @@ -1030,6 +1032,7 @@
                           break;
                       case CMD_O:
                           location().warning(tr("'\\o' is deprecated. Use '\\li'"));
      +                    Q_FALLTHROUGH();
                       case CMD_LI:
                           leavePara();
                           if (openedCommands.top() == CMD_LIST) {
      @@ -1492,7 +1495,7 @@
                               getRestOfLine();
                               break;
                           }
      -        // fall through
      +            Q_FALLTHROUGH(); // fall through
               }
               default:
               {
      @@ -2968,8 +2971,11 @@
                 should be rethought.
               */
               while (atom) {
      -            if (atom->type() == Atom::AutoLink || atom->type() == Atom::String) {
      +            if (atom->type() == Atom::AutoLink
      +                || atom->type() == Atom::String) {
                       briefStr += atom->string();
      +            } else if (atom->type() == Atom::C) {
      +                briefStr += Generator::plainCode(atom->string());
                   }
                   atom = atom->next();
               }
      diff -Nru qttools-opensource-src-5.7.1/src/qdoc/generator.cpp qttools-opensource-src-5.9.1/src/qdoc/generator.cpp
      --- qttools-opensource-src-5.7.1/src/qdoc/generator.cpp	2016-11-03 08:31:16.000000000 +0000
      +++ qttools-opensource-src-5.9.1/src/qdoc/generator.cpp	2017-06-23 12:03:39.000000000 +0000
      @@ -93,6 +93,12 @@
       bool Generator::useOutputSubdirs_ = true;
       QmlTypeNode* Generator::qmlTypeContext_ = 0;
       
      +static QRegExp tag("]*>");
      +static QLatin1String amp("&");
      +static QLatin1String gt(">");
      +static QLatin1String lt("<");
      +static QLatin1String quot(""");
      +
       void Generator::startDebugging(const QString& message)
       {
           debugging_ = true;
      @@ -121,12 +127,7 @@
         available to the generator subclasses.
        */
       Generator::Generator()
      -    : amp("&"),
      -      gt(">"),
      -      lt("<"),
      -      quot("""),
      -      tag("]*>"),
      -      inLink_(false),
      +    : inLink_(false),
             inContents_(false),
             inSectionHeading_(false),
             inTableHeader_(false),
      @@ -936,7 +937,7 @@
                                       }
                                   }
                               }
      -                        if (needWarning && !func->isReimplemented())
      +                        if (needWarning && !func->isReimplemented() && !func->isOverload())
                                   node->doc().location().warning(
                                               tr("Undocumented parameter '%1' in %2")
                                               .arg(*a).arg(node->plainFullName()));
      @@ -1086,10 +1087,7 @@
               index = 0;
               while (r != classe->baseClasses().constEnd()) {
                   if ((*r).node_) {
      -                text << Atom(Atom::LinkNode, CodeMarker::stringForNode((*r).node_))
      -                     << Atom(Atom::FormattingLeft, ATOM_FORMATTING_LINK)
      -                     << Atom(Atom::String, (*r).signature_)
      -                     << Atom(Atom::FormattingRight, ATOM_FORMATTING_LINK);
      +                appendFullName(text, (*r).node_, classe);
       
                       if ((*r).access_ == Node::Protected) {
                           text << " (protected)";
      diff -Nru qttools-opensource-src-5.7.1/src/qdoc/generator.h qttools-opensource-src-5.9.1/src/qdoc/generator.h
      --- qttools-opensource-src-5.7.1/src/qdoc/generator.h	2016-11-03 08:31:16.000000000 +0000
      +++ qttools-opensource-src-5.9.1/src/qdoc/generator.h	2017-06-23 12:03:39.000000000 +0000
      @@ -99,6 +99,7 @@
           static void setQmlTypeContext(QmlTypeNode* t) { qmlTypeContext_ = t; }
           static QmlTypeNode* qmlTypeContext() { return qmlTypeContext_; }
           static QString cleanRef(const QString& ref);
      +    static QString plainCode(const QString& markedCode);
       
       protected:
           virtual void beginSubPage(const Aggregate* node, const QString& fileName);
      @@ -170,7 +171,6 @@
                         QStringRef* contents,
                         QStringRef* par1 = 0,
                         bool debug = false);
      -    QString plainCode(const QString& markedCode);
           void setImageFileExtensions(const QStringList& extensions);
           void unknownAtom(const Atom *atom);
           int appendSortedQmlNames(Text& text, const Node* base, const NodeList& subs);
      @@ -231,12 +231,6 @@
       
           void generateReimplementedFrom(const FunctionNode *func, CodeMarker *marker);
       
      -    QString amp;
      -    QString gt;
      -    QString lt;
      -    QString quot;
      -    QRegExp tag;
      -
        protected:
           const Config* config_;
           QDocDatabase* qdb_;
      diff -Nru qttools-opensource-src-5.7.1/src/qdoc/htmlgenerator.cpp qttools-opensource-src-5.9.1/src/qdoc/htmlgenerator.cpp
      --- qttools-opensource-src-5.7.1/src/qdoc/htmlgenerator.cpp	2016-11-03 08:31:16.000000000 +0000
      +++ qttools-opensource-src-5.9.1/src/qdoc/htmlgenerator.cpp	2017-06-23 12:03:39.000000000 +0000
      @@ -256,10 +256,20 @@
                                           + Config::dot
                                           + CONFIG_CPPCLASSESPAGE);
       
      +    cppclassestitle = config.getString(CONFIG_NAVIGATION
      +                                       + Config::dot
      +                                       + CONFIG_CPPCLASSESTITLE,
      +                                       QLatin1String("C++ Classes"));
      +
           qmltypespage = config.getString(CONFIG_NAVIGATION
                                           + Config::dot
                                           + CONFIG_QMLTYPESPAGE);
       
      +    qmltypestitle = config.getString(CONFIG_NAVIGATION
      +                                     + Config::dot
      +                                     + CONFIG_QMLTYPESTITLE,
      +                                     QLatin1String("QML Types"));
      +
           buildversion = config.getString(CONFIG_BUILDVERSION);
       }
       
      @@ -513,48 +523,34 @@
           case Atom::BaseName:
               break;
           case Atom::BriefLeft:
      -        // Do not output the brief for QML nodes, doc nodes or collections
      -        // (groups, modules, qml module nodes)
      -        if (relative->isQmlType() ||
      -            relative->isDocumentNode() ||
      -            relative->isCollectionNode() ||
      -            relative->isJsType()) {
      +        if (!hasBrief(relative)) {
                   skipAhead = skipAtoms(atom, Atom::BriefRight);
                   break;
               }
      -
               out() << "

      "; if (relative->type() == Node::Property || relative->type() == Node::Variable) { - QString str; atom = atom->next(); - while (atom != 0 && atom->type() != Atom::BriefRight) { - if (atom->type() == Atom::String || - atom->type() == Atom::AutoLink) - str += atom->string(); - skipAhead++; - atom = atom->next(); - } - str[0] = str[0].toLower(); - if (str.endsWith(QLatin1Char('.'))) - str.truncate(str.length() - 1); - out() << "This "; - if (relative->type() == Node::Property) - out() << "property"; - else - out() << "variable"; - QStringList words = str.split(QLatin1Char(' ')); - if (!(words.first() == QLatin1String("contains") || words.first() == QLatin1String("specifies") - || words.first() == QLatin1String("describes") || words.first() == QLatin1String("defines") - || words.first() == QLatin1String("holds") || words.first() == QLatin1String("determines"))) - out() << " holds "; - else - out() << ' '; - out() << str << '.'; + if (atom != 0 && atom->type() == Atom::String) { + QString firstWord = atom->string().toLower().section(' ', 0, 0, QString::SectionSkipEmpty); + if (firstWord == QLatin1String("the") + || firstWord == QLatin1String("a") + || firstWord == QLatin1String("an") + || firstWord == QLatin1String("whether") + || firstWord == QLatin1String("which")) { + QString str = "This "; + if (relative->type() == Node::Property) + str += "property holds "; + else + str += "variable holds "; + str += atom->string().left(1).toLower() + atom->string().mid(1); + const_cast(atom)->setString(str); + } + } } break; case Atom::BriefRight: - if (!relative->isDocumentNode()) + if (hasBrief(relative)) out() << "

      \n"; break; case Atom::C: @@ -674,6 +670,9 @@ else if (atom->string() == QLatin1String("annotatedexamples")) { generateAnnotatedLists(relative, marker, qdb_->getExamples()); } + else if (atom->string() == QLatin1String("annotatedattributions")) { + generateAnnotatedLists(relative, marker, qdb_->getAttributions()); + } else if (atom->string() == QLatin1String("classes")) { generateCompactList(Generic, relative, qdb_->getCppClasses(), true, QStringLiteral("")); } @@ -694,6 +693,8 @@ genus = Node::QML; else if (atom->string().startsWith(QLatin1String("js"))) genus = Node::JS; + else if (atom->string().startsWith(QLatin1String("groups"))) + genus = Node::DOC; QDocDatabase* qdb = QDocDatabase::qdocDB(); const CollectionNode* cn = qdb->getCollectionNode(moduleName, genus); if (cn) { @@ -726,6 +727,9 @@ else if (atom->string() == QLatin1String("functionindex")) { generateFunctionIndex(relative); } + else if (atom->string() == QLatin1String("attributions")) { + generateAnnotatedList(relative, marker, qdb_->getAttributions()); + } else if (atom->string() == QLatin1String("legalese")) { generateLegaleseList(relative, marker); } @@ -1899,11 +1903,11 @@ << Atom(itemRight); if (node->isClass()) { - if (!cppclassespage.isEmpty()) + if (!cppclassespage.isEmpty() && !cppclassestitle.isEmpty()) navigationbar << Atom(itemLeft) << Atom(Atom::NavLink, cppclassespage) << Atom(Atom::FormattingLeft, ATOM_FORMATTING_LINK) - << Atom(Atom::String, QLatin1String("C++ Classes")) + << Atom(Atom::String, cppclassestitle) << Atom(Atom::FormattingRight, ATOM_FORMATTING_LINK) << Atom(itemRight); @@ -1914,11 +1918,11 @@ } else if (node->isQmlType() || node->isQmlBasicType() || node->isJsType() || node->isJsBasicType()) { - if (!qmltypespage.isEmpty()) + if (!qmltypespage.isEmpty() && !qmltypestitle.isEmpty()) navigationbar << Atom(itemLeft) << Atom(Atom::NavLink, qmltypespage) << Atom(Atom::FormattingLeft, ATOM_FORMATTING_LINK) - << Atom(Atom::String, QLatin1String("QML Types")) + << Atom(Atom::String, qmltypestitle) << Atom(Atom::FormattingRight, ATOM_FORMATTING_LINK) << Atom(itemRight) << Atom(itemLeft) @@ -2235,10 +2239,7 @@ index = 0; while (r != classe->baseClasses().constEnd()) { if ((*r).node_) { - text << Atom(Atom::LinkNode, CodeMarker::stringForNode((*r).node_)) - << Atom(Atom::FormattingLeft, ATOM_FORMATTING_LINK) - << Atom(Atom::String, (*r).signature_) - << Atom(Atom::FormattingRight, ATOM_FORMATTING_LINK); + appendFullName(text, (*r).node_, classe); if ((*r).access_ == Node::Protected) { text << " (protected)"; @@ -3533,7 +3534,7 @@ } else if (parseArg(src, headerTag, &i, srcSize, &arg, &par1)) { par1 = QStringRef(); - if (arg.at(0) == QChar('&')) + if (arg.startsWith(QLatin1Char('&'))) html += arg; else { const Node* n = qdb_->findNodeForInclude(QStringList(arg.toString())); diff -Nru qttools-opensource-src-5.7.1/src/qdoc/htmlgenerator.h qttools-opensource-src-5.9.1/src/qdoc/htmlgenerator.h --- qttools-opensource-src-5.7.1/src/qdoc/htmlgenerator.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/qdoc/htmlgenerator.h 2017-06-23 12:03:39.000000000 +0000 @@ -210,6 +210,7 @@ QString getLink(const Atom *atom, const Node *relative, const Node** node); QString getAutoLink(const Atom *atom, const Node *relative, const Node** node); + inline bool hasBrief(const Node *node); QString registerRef(const QString& ref); virtual QString fileBase(const Node *node) const Q_DECL_OVERRIDE; QString fileName(const Node *node); @@ -263,7 +264,9 @@ QString homepage; QString landingpage; QString cppclassespage; + QString cppclassestitle; QString qmltypespage; + QString qmltypestitle; QString buildversion; QString qflagsHref_; int tocDepth; @@ -273,6 +276,15 @@ static QString divNavTop; }; +// Do not display \brief for QML/JS types, document and collection nodes +inline bool HtmlGenerator::hasBrief(const Node *node) +{ + return !(node->isQmlType() + || node->isDocumentNode() + || node->isCollectionNode() + || node->isJsType()); +} + #define HTMLGENERATOR_ADDRESS "address" #define HTMLGENERATOR_FOOTER "footer" #define HTMLGENERATOR_GENERATEMACREFS "generatemacrefs" // ### document me diff -Nru qttools-opensource-src-5.7.1/src/qdoc/main.cpp qttools-opensource-src-5.9.1/src/qdoc/main.cpp --- qttools-opensource-src-5.7.1/src/qdoc/main.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/qdoc/main.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -27,6 +27,7 @@ ****************************************************************************/ #include +#include #include #include "codemarker.h" #include "codeparser.h" @@ -694,7 +695,6 @@ } } -extern Q_CORE_EXPORT QBasicAtomicInt qt_qhash_seed; QT_END_NAMESPACE int main(int argc, char **argv) @@ -703,7 +703,7 @@ // Initialize Qt: #ifndef QT_BOOTSTRAPPED - qt_qhash_seed.testAndSetRelaxed(-1, 0); // set the hash seed to 0 if it wasn't set yet + qSetGlobalQHashSeed(0); // set the hash seed to 0 if it wasn't set yet #endif QCoreApplication app(argc, argv); app.setApplicationVersion(QLatin1String(QT_VERSION_STR)); diff -Nru qttools-opensource-src-5.7.1/src/qdoc/node.cpp qttools-opensource-src-5.9.1/src/qdoc/node.cpp --- qttools-opensource-src-5.7.1/src/qdoc/node.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/qdoc/node.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -75,6 +75,39 @@ bool Node::nodeNameLessThan(const Node *n1, const Node *n2) { + if (n1->isDocumentNode() && n2->isDocumentNode()) { + const DocumentNode* f1 = static_cast(n1); + const DocumentNode* f2 = static_cast(n2); + if (f1->fullTitle() < f2->fullTitle()) + return true; + else if (f1->fullTitle() > f2->fullTitle()) + return false; + } + + if (n1->isCollectionNode() && n2->isCollectionNode()) { + const CollectionNode* f1 = static_cast(n1); + const CollectionNode* f2 = static_cast(n2); + if (f1->fullTitle() < f2->fullTitle()) + return true; + else if (f1->fullTitle() > f2->fullTitle()) + return false; + } + + if (n1->type() == Node::Function && n2->type() == Node::Function) { + const FunctionNode* f1 = static_cast(n1); + const FunctionNode* f2 = static_cast(n2); + + if (f1->isConst() < f2->isConst()) + return true; + else if (f1->isConst() > f2->isConst()) + return false; + + if (f1->signature(false) < f2->signature(false)) + return true; + else if (f1->signature(false) > f2->signature(false)) + return false; + } + if (n1->location().filePath() < n2->location().filePath()) return true; else if (n1->location().filePath() > n2->location().filePath()) @@ -95,38 +128,6 @@ else if (n1->access() > n2->access()) return false; - if (n1->type() == Node::Function && n2->type() == Node::Function) { - const FunctionNode* f1 = static_cast(n1); - const FunctionNode* f2 = static_cast(n2); - - if (f1->isConst() < f2->isConst()) - return true; - else if (f1->isConst() > f2->isConst()) - return false; - - if (f1->signature(false) < f2->signature(false)) - return true; - else if (f1->signature(false) > f2->signature(false)) - return false; - } - - if (n1->isDocumentNode() && n2->isDocumentNode()) { - const DocumentNode* f1 = static_cast(n1); - const DocumentNode* f2 = static_cast(n2); - if (f1->fullTitle() < f2->fullTitle()) - return true; - else if (f1->fullTitle() > f2->fullTitle()) - return false; - } - else if (n1->isCollectionNode() && n2->isCollectionNode()) { - const CollectionNode* f1 = static_cast(n1); - const CollectionNode* f2 = static_cast(n2); - if (f1->fullTitle() < f2->fullTitle()) - return true; - else if (f1->fullTitle() > f2->fullTitle()) - return false; - } - return false; } @@ -379,6 +380,8 @@ QString Node::pageTypeString(unsigned char t) { switch ((PageType)t) { + case Node::AttributionPage: + return "attribution"; case Node::ApiPage: return "api"; case Node::ArticlePage: @@ -1266,8 +1269,17 @@ ### hack for C++ to handle superfluous "Foo::" prefixes gracefully */ - if (t1 != t2 && t1 != (f2->parent()->name() + "::" + t2)) - return false; + if (t1 != t2 && t1 != (f2->parent()->name() + "::" + t2)) { + // Accept a difference in the template parametters of the type if one + // is omited (eg. "QAtomicInteger" == "QAtomicInteger") + auto ltLoc = t1.indexOf('<'); + auto gtLoc = t1.indexOf('>', ltLoc); + if (ltLoc < 0 || gtLoc < ltLoc) + return false; + t1.remove(ltLoc, gtLoc - ltLoc + 1); + if (t1 != t2) + return false; + } } ++p1; ++p2; @@ -2030,6 +2042,7 @@ isDeleted_(false), isDefaulted_(false), isFinal_(false), + isOverride_(false), reimplementedFrom_(0) { setGenus(Node::CPP); @@ -2056,6 +2069,7 @@ isDeleted_(false), isDefaulted_(false), isFinal_(false), + isOverride_(false), reimplementedFrom_(0) { setGenus(Node::QML); diff -Nru qttools-opensource-src-5.7.1/src/qdoc/node.h qttools-opensource-src-5.9.1/src/qdoc/node.h --- qttools-opensource-src-5.7.1/src/qdoc/node.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/qdoc/node.h 2017-06-23 12:03:39.000000000 +0000 @@ -92,6 +92,7 @@ enum DocSubtype { NoSubtype, + Attribution, Example, HeaderFile, File, @@ -133,6 +134,7 @@ enum PageType { NoPageType, + AttributionPage, ApiPage, ArticlePage, ExamplePage, @@ -983,6 +985,9 @@ void setFinal(bool b) { isFinal_ = b; } bool isFinal() const { return isFinal_; } + void setOverride(bool b) { isOverride_ = b; } + bool isOverride() const { return isOverride_; } + private: void addAssociatedProperty(PropertyNode* property); @@ -1002,6 +1007,7 @@ bool isDeleted_ : 1; bool isDefaulted_ : 1; bool isFinal_ : 1; + bool isOverride_ : 1; unsigned char overloadNumber_; QVector parameters_; const FunctionNode* reimplementedFrom_; diff -Nru qttools-opensource-src-5.7.1/src/qdoc/qdocdatabase.cpp qttools-opensource-src-5.9.1/src/qdoc/qdocdatabase.cpp --- qttools-opensource-src-5.7.1/src/qdoc/qdocdatabase.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/qdoc/qdocdatabase.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -842,6 +842,7 @@ findAllObsoleteThings(t->root()); findAllLegaleseTexts(t->root()); findAllSince(t->root()); + findAllAttributions(t->root()); t->setTreeHasBeenAnalyzed(); t = forest_.nextTree(); } @@ -955,6 +956,18 @@ } /*! + Construct the data structures for attributions, if they + have not already been constructed. Returns a reference to + the multimap of attribution nodes. + */ +NodeMultiMap& QDocDatabase::getAttributions() +{ + if (attributions_.isEmpty()) + processForest(&QDocDatabase::findAllAttributions); + return attributions_; +} + +/*! Construct the data structures for obsolete things, if they have not already been constructed. Returns a reference to the map of obsolete C++ clases. @@ -1051,6 +1064,25 @@ } } ++c; + } +} + +/*! + Finds all the attribution pages and collects them per module + */ +void QDocDatabase::findAllAttributions(Aggregate* node) +{ + NodeList::ConstIterator c = node->childNodes().constBegin(); + while (c != node->childNodes().constEnd()) { + if ((*c)->access() != Node::Private) { + if ((*c)->docSubtype() == Node::Page + && (*c)->pageType() == Node::AttributionPage) { + attributions_.insertMulti((*c)->tree()->indexTitle(), *c); + } else if ((*c)->isAggregate()) { + findAllAttributions(static_cast(*c)); + } + } + ++c; } } diff -Nru qttools-opensource-src-5.7.1/src/qdoc/qdocdatabase.h qttools-opensource-src-5.9.1/src/qdoc/qdocdatabase.h --- qttools-opensource-src-5.7.1/src/qdoc/qdocdatabase.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/qdoc/qdocdatabase.h 2017-06-23 12:03:39.000000000 +0000 @@ -266,6 +266,7 @@ private: void findAllClasses(Aggregate *node); void findAllFunctions(Aggregate *node); + void findAllAttributions(Aggregate *node); void findAllLegaleseTexts(Aggregate *node); void findAllNamespaces(Aggregate *node); void findAllObsoleteThings(Aggregate* node); @@ -284,6 +285,7 @@ NodeMultiMap& getQmlBasicTypes(); NodeMultiMap& getQmlTypes(); NodeMultiMap& getExamples(); + NodeMultiMap& getAttributions(); NodeMapMap& getFunctionIndex(); TextToNodeMap& getLegaleseTexts(); const NodeMap& getClassMap(const QString& key); @@ -453,6 +455,7 @@ NodeMultiMap qmlBasicTypes_; NodeMultiMap qmlTypes_; NodeMultiMap examples_; + NodeMultiMap attributions_; NodeMapMap newClassMaps_; NodeMapMap newQmlTypeMaps_; NodeMultiMapMap newSinceMaps_; diff -Nru qttools-opensource-src-5.7.1/src/qdoc/qdocindexfiles.cpp qttools-opensource-src-5.9.1/src/qdoc/qdocindexfiles.cpp --- qttools-opensource-src-5.7.1/src/qdoc/qdocindexfiles.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/qdoc/qdocindexfiles.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -398,7 +398,11 @@ Node::DocSubtype subtype; Node::PageType ptype = Node::NoPageType; QString attr = attributes.value(QLatin1String("subtype")).toString(); - if (attr == QLatin1String("example")) { + if (attr == QLatin1String("attribution")) { + subtype = Node::Page; + ptype = Node::AttributionPage; + } + else if (attr == QLatin1String("example")) { subtype = Node::Example; ptype = Node::ExamplePage; } @@ -489,6 +493,7 @@ functionNode->setIsDeleted(attributes.value(QLatin1String("delete")) == QLatin1String("true")); functionNode->setIsDefaulted(attributes.value(QLatin1String("default")) == QLatin1String("true")); functionNode->setFinal(attributes.value(QLatin1String("final")) == QLatin1String("true")); + functionNode->setOverride(attributes.value(QLatin1String("override")) == QLatin1String("true")); if (attributes.value(QLatin1String("overload")) == QLatin1String("true")) { functionNode->setOverloadFlag(true); functionNode->setOverloadNumber(attributes.value(QLatin1String("overload-number")).toUInt()); @@ -1070,7 +1075,11 @@ writer.writeAttribute("subtype", "file"); break; case Node::Page: - writer.writeAttribute("subtype", "page"); + if (docNode->pageType() == Node::AttributionPage) + writer.writeAttribute("subtype", "attribution"); + else + writer.writeAttribute("subtype", "page"); + writeModuleName = true; break; case Node::ExternalPage: @@ -1181,6 +1190,7 @@ writer.writeAttribute("delete", functionNode->isDeleted() ? "true" : "false"); writer.writeAttribute("default", functionNode->isDefaulted() ? "true" : "false"); writer.writeAttribute("final", functionNode->isFinal() ? "true" : "false"); + writer.writeAttribute("override", functionNode->isOverride() ? "true" : "false"); if (functionNode->isOverload()) writer.writeAttribute("overload-number", QString::number(functionNode->overloadNumber())); if (functionNode->relates()) { @@ -1192,7 +1202,7 @@ associatedProperties << pn->name(); } associatedProperties.sort(); - writer.writeAttribute("associated-property", associatedProperties.join(",")); + writer.writeAttribute("associated-property", associatedProperties.join(QLatin1Char(','))); } writer.writeAttribute("type", functionNode->returnType()); if (!brief.isEmpty()) @@ -1207,6 +1217,8 @@ signature += " const"; if (functionNode->isFinal()) signature += " final"; + if (functionNode->isOverride()) + signature += " override"; if (functionNode->isPureVirtual()) signature += " = 0"; else if (functionNode->isDeleted()) diff -Nru qttools-opensource-src-5.7.1/src/qdoc/qdoc.pro qttools-opensource-src-5.9.1/src/qdoc/qdoc.pro --- qttools-opensource-src-5.7.1/src/qdoc/qdoc.pro 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/qdoc/qdoc.pro 2017-06-23 12:03:39.000000000 +0000 @@ -1,6 +1,5 @@ !force_bootstrap { - load(qfeatures) - requires(!contains(QT_DISABLED_FEATURES, xmlstreamwriter)) + requires(qtConfig(xmlstreamwriter)) } option(host_build) diff -Nru qttools-opensource-src-5.7.1/src/qdoc/qdoctagfiles.cpp qttools-opensource-src-5.9.1/src/qdoc/qdoctagfiles.cpp --- qttools-opensource-src-5.7.1/src/qdoc/qdoctagfiles.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/qdoc/qdoctagfiles.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -275,6 +275,8 @@ signature += " const"; if (functionNode->isFinal()) signature += " final"; + if (functionNode->isOverride()) + signature += " override"; if (functionNode->isPureVirtual()) signature += " = 0"; else if (functionNode->isDeleted()) diff -Nru qttools-opensource-src-5.7.1/src/qdoc/qmlvisitor.cpp qttools-opensource-src-5.9.1/src/qdoc/qmlvisitor.cpp --- qttools-opensource-src-5.7.1/src/qdoc/qmlvisitor.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/qdoc/qmlvisitor.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -652,6 +652,30 @@ { } +template +QString qualifiedIdToString(T node); + +template <> +QString qualifiedIdToString(QStringRef node) +{ + return node.toString(); +} + +template <> +QString qualifiedIdToString(QQmlJS::AST::UiQualifiedId *node) +{ + QString s; + + for (QQmlJS::AST::UiQualifiedId *it = node; it; it = it->next) { + s.append(it->name); + + if (it->next) + s.append(QLatin1Char('.')); + } + + return s; +} + /*! Visits the public \a member declaration, which can be a signal or a property. It is a custom signal or property. @@ -674,8 +698,9 @@ QVector parameters; for (QQmlJS::AST::UiParameterList *it = member->parameters; it; it = it->next) { - if (!it->type.isEmpty() && !it->name.isEmpty()) - parameters.append(Parameter(it->type.toString(), QString(), it->name.toString())); + const QString type = qualifiedIdToString(it->type); + if (!type.isEmpty() && !it->name.isEmpty()) + parameters.append(Parameter(type, QString(), it->name.toString())); } qmlSignal->setParameters(parameters); @@ -686,7 +711,7 @@ } case QQmlJS::AST::UiPublicMember::Property: { - QString type = member->memberType.toString(); + QString type = qualifiedIdToString(member->memberType); QString name = member->name.toString(); if (current->isQmlType() || current->isJsType()) { QmlTypeNode *qmlType = static_cast(current); diff -Nru qttools-opensource-src-5.7.1/src/qdoc/tokenizer.cpp qttools-opensource-src-5.9.1/src/qdoc/tokenizer.cpp --- qttools-opensource-src-5.7.1/src/qdoc/tokenizer.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/qdoc/tokenizer.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -54,7 +54,7 @@ "private", "protected", "public", "short", "signals", "signed", "slots", "static", "struct", "template", "typedef", "typename", "union", "unsigned", "using", "virtual", "void", "volatile", - "__int64", "default", "delete", "final", + "__int64", "default", "delete", "final", "override", "Q_OBJECT", "Q_OVERRIDE", "Q_PROPERTY", diff -Nru qttools-opensource-src-5.7.1/src/qdoc/tokenizer.h qttools-opensource-src-5.9.1/src/qdoc/tokenizer.h --- qttools-opensource-src-5.7.1/src/qdoc/tokenizer.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/qdoc/tokenizer.h 2017-06-23 12:03:39.000000000 +0000 @@ -62,6 +62,7 @@ Tok_static, Tok_struct, Tok_template, Tok_typedef, Tok_typename, Tok_union, Tok_unsigned, Tok_using, Tok_virtual, Tok_void, Tok_volatile, Tok_int64, Tok_default, Tok_delete, Tok_final, + Tok_override, Tok_Q_OBJECT, Tok_Q_OVERRIDE, Tok_Q_PROPERTY, Tok_Q_PRIVATE_PROPERTY, Tok_Q_DECLARE_SEQUENTIAL_ITERATOR, Tok_Q_DECLARE_MUTABLE_SEQUENTIAL_ITERATOR, diff -Nru qttools-opensource-src-5.7.1/src/qdoc/tree.cpp qttools-opensource-src-5.9.1/src/qdoc/tree.cpp --- qttools-opensource-src-5.7.1/src/qdoc/tree.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/qdoc/tree.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -729,7 +729,7 @@ } } - node = findUnambiguousTarget(path.join(QStringLiteral("::")), genus, ref); + node = findUnambiguousTarget(path.join(QLatin1String("::")), genus, ref); if (node) { if (!target.isEmpty()) { ref = getRef(target, node); diff -Nru qttools-opensource-src-5.7.1/src/qtattributionsscanner/jsongenerator.cpp qttools-opensource-src-5.9.1/src/qtattributionsscanner/jsongenerator.cpp --- qttools-opensource-src-5.7.1/src/qtattributionsscanner/jsongenerator.cpp 1970-01-01 00:00:00.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/qtattributionsscanner/jsongenerator.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -0,0 +1,79 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the tools applications of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "jsongenerator.h" + +#include +#include +#include + +#include + +namespace JsonGenerator { + +static QJsonObject generate(Package package) +{ + QJsonObject obj; + + obj.insert(QStringLiteral("Id"), package.id); + obj.insert(QStringLiteral("Path"), package.path); + obj.insert(QStringLiteral("Files"), package.files.join(QLatin1Char(' '))); + obj.insert(QStringLiteral("QDocModule"), package.qdocModule); + obj.insert(QStringLiteral("Name"), package.name); + obj.insert(QStringLiteral("QtUsage"), package.qtUsage); + obj.insert(QStringLiteral("QtParts"), QJsonArray::fromStringList(package.qtParts)); + + obj.insert(QStringLiteral("Description"), package.description); + obj.insert(QStringLiteral("Homepage"), package.homepage); + obj.insert(QStringLiteral("Version"), package.version); + obj.insert(QStringLiteral("DownloadLocation"), package.downloadLocation); + + obj.insert(QStringLiteral("License"), package.license); + obj.insert(QStringLiteral("LicenseId"), package.licenseId); + obj.insert(QStringLiteral("LicenseFile"), package.licenseFile); + + obj.insert(QStringLiteral("Copyright"), package.copyright); + + return obj; +} + +void generate(QTextStream &out, const QVector &packages, LogLevel logLevel) +{ + if (logLevel == VerboseLog) + std::cerr << qPrintable(tr("Generating json...\n")); + + QJsonDocument document; + QJsonArray array; + for (const Package &package : packages) + array.append(generate(package)); + document.setArray(array); + + out << document.toJson(); +} + +} // namespace JsonGenerator diff -Nru qttools-opensource-src-5.7.1/src/qtattributionsscanner/jsongenerator.h qttools-opensource-src-5.9.1/src/qtattributionsscanner/jsongenerator.h --- qttools-opensource-src-5.7.1/src/qtattributionsscanner/jsongenerator.h 1970-01-01 00:00:00.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/qtattributionsscanner/jsongenerator.h 2017-06-23 12:03:39.000000000 +0000 @@ -0,0 +1,44 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the tools applications of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef JSONGENERATOR +#define JSONGENERATOR + +#include "logging.h" +#include "package.h" + +#include +#include + +namespace JsonGenerator { + +void generate(QTextStream &out, const QVector &packages, LogLevel logLevel); + +} // namespace JsonGenerator + +#endif // JSONGENERATOR diff -Nru qttools-opensource-src-5.7.1/src/qtattributionsscanner/logging.h qttools-opensource-src-5.9.1/src/qtattributionsscanner/logging.h --- qttools-opensource-src-5.7.1/src/qtattributionsscanner/logging.h 1970-01-01 00:00:00.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/qtattributionsscanner/logging.h 2017-06-23 12:03:39.000000000 +0000 @@ -0,0 +1,44 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the tools applications of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef LOGGING_H +#define LOGGING_H + +#include + +enum LogLevel { + VerboseLog, + NormalLog, + SilentLog +}; + +static QString tr(const char *key) { + return QCoreApplication::translate("qtattributionsscanner", key); +} + +#endif // LOGGING_H diff -Nru qttools-opensource-src-5.7.1/src/qtattributionsscanner/main.cpp qttools-opensource-src-5.9.1/src/qtattributionsscanner/main.cpp --- qttools-opensource-src-5.7.1/src/qtattributionsscanner/main.cpp 1970-01-01 00:00:00.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/qtattributionsscanner/main.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -0,0 +1,141 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the tools applications of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "jsongenerator.h" +#include "logging.h" +#include "packagefilter.h" +#include "qdocgenerator.h" +#include "scanner.h" + +#include +#include +#include +#include + +#include + + +int main(int argc, char *argv[]) +{ + QCoreApplication a(argc, argv); + a.setApplicationName(QStringLiteral("Qt Attributions Scanner")); + a.setApplicationVersion(QStringLiteral("1.0")); + + QCommandLineParser parser; + parser.setApplicationDescription(tr("Searches and processes qt_attribution.json files in Qt sources.")); + parser.addPositionalArgument(QStringLiteral("directory"), + tr("The directory to scan recursively.")); + parser.addHelpOption(); + parser.addVersionOption(); + + QCommandLineOption generatorOption(QStringLiteral("output-format"), + tr("Output format (\"qdoc\", \"json\")."), + QStringLiteral("generator"), + QStringLiteral("qdoc")); + QCommandLineOption filterOption(QStringLiteral("filter"), + tr("Filter packages according to (e.g. QDocModule=qtcore)"), + QStringLiteral("expression")); + QCommandLineOption outputOption({ QStringLiteral("o"), QStringLiteral("output") }, + tr("Write generated data to ."), + QStringLiteral("file")); + QCommandLineOption verboseOption(QStringLiteral("verbose"), + tr("Verbose output.")); + QCommandLineOption silentOption({ QStringLiteral("s"), QStringLiteral("silent") }, + tr("Minimal output.")); + + parser.addOption(generatorOption); + parser.addOption(filterOption); + parser.addOption(outputOption); + parser.addOption(verboseOption); + parser.addOption(silentOption); + + parser.process(a.arguments()); + + LogLevel logLevel = NormalLog; + if (parser.isSet(verboseOption) && parser.isSet(silentOption)) { + std::cerr << qPrintable(tr("--verbose and --silent cannot be set simultaneously.")) << std::endl; + parser.showHelp(1); + } + + if (parser.isSet(verboseOption)) + logLevel = VerboseLog; + else if (parser.isSet(silentOption)) + logLevel = SilentLog; + + if (parser.positionalArguments().size() != 1) + parser.showHelp(2); + + const QString directory = parser.positionalArguments().last(); + + if (logLevel == VerboseLog) + std::cerr << qPrintable(tr("Recursively scanning %1 for qt_attribution.json files...").arg( + QDir::toNativeSeparators(directory))) << std::endl; + + QVector packages = Scanner::scanDirectory(directory, logLevel); + + if (parser.isSet(filterOption)) { + PackageFilter filter(parser.value(filterOption)); + if (filter.type == PackageFilter::InvalidFilter) + return 4; + packages.erase(std::remove_if(packages.begin(), packages.end(), + [&filter](const Package &p) { return !filter(p); }), + packages.end()); + } + + if (logLevel == VerboseLog) + std::cerr << qPrintable(tr("%1 packages found.").arg(packages.size())) << std::endl; + + QTextStream out(stdout); + QFile outFile(parser.value(outputOption)); + if (!outFile.fileName().isEmpty()) { + if (!outFile.open(QFile::WriteOnly)) { + std::cerr << qPrintable(tr("Cannot open %1 for writing.").arg( + QDir::toNativeSeparators(outFile.fileName()))) + << std::endl; + return 5; + } + out.setDevice(&outFile); + } + + QString generator = parser.value(generatorOption); + if (generator == QLatin1String("qdoc")) { + // include top level module name in printed paths + QString baseDirectory = QDir(directory).absoluteFilePath(QStringLiteral("..")); + QDocGenerator::generate(out, packages, baseDirectory, logLevel); + } else if (generator == QLatin1String("json")) { + JsonGenerator::generate(out, packages, logLevel); + } else { + std::cerr << qPrintable(tr("Unknown output-format %1.").arg(generator)) << std::endl; + return 6; + } + + if (logLevel == VerboseLog) + std::cerr << qPrintable(tr("Processing is done.")) << std::endl; + + return 0; +} diff -Nru qttools-opensource-src-5.7.1/src/qtattributionsscanner/packagefilter.cpp qttools-opensource-src-5.9.1/src/qtattributionsscanner/packagefilter.cpp --- qttools-opensource-src-5.7.1/src/qtattributionsscanner/packagefilter.cpp 1970-01-01 00:00:00.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/qtattributionsscanner/packagefilter.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -0,0 +1,55 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the tools applications of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "logging.h" +#include "packagefilter.h" +#include + +PackageFilter::PackageFilter(const QString &expression) + : type(InvalidFilter) +{ + const QLatin1String filter("QDocModule="); + if (expression.startsWith(filter)) { + type = QDocModuleFilter; + this->expression = expression.mid(filter.size()); + } else { + std::cerr << qPrintable(tr("Invalid filter expression \"%1\"").arg(expression)) << std::endl; + std::cerr << qPrintable(tr("Currently only \"QDocModule=*\" is supported.")) << std::endl; + } +} + +bool PackageFilter::operator()(const Package &p) +{ + switch (type) { + case InvalidFilter: + return true; + case QDocModuleFilter: + return p.qdocModule == expression; + } + return false; +} diff -Nru qttools-opensource-src-5.7.1/src/qtattributionsscanner/packagefilter.h qttools-opensource-src-5.9.1/src/qtattributionsscanner/packagefilter.h --- qttools-opensource-src-5.7.1/src/qtattributionsscanner/packagefilter.h 1970-01-01 00:00:00.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/qtattributionsscanner/packagefilter.h 2017-06-23 12:03:39.000000000 +0000 @@ -0,0 +1,47 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the tools applications of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef PACKAGEFILTER_H +#define PACKAGEFILTER_H + +#include "package.h" + +struct PackageFilter +{ + PackageFilter(const QString &expression); + + bool operator()(const Package &p); + + enum { + InvalidFilter, + QDocModuleFilter + } type; + QString expression; +}; + +#endif // PACKAGEFILTER_H diff -Nru qttools-opensource-src-5.7.1/src/qtattributionsscanner/package.h qttools-opensource-src-5.9.1/src/qtattributionsscanner/package.h --- qttools-opensource-src-5.7.1/src/qtattributionsscanner/package.h 1970-01-01 00:00:00.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/qtattributionsscanner/package.h 2017-06-23 12:03:39.000000000 +0000 @@ -0,0 +1,58 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the tools applications of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef PACKAGE_H +#define PACKAGE_H + +#include +#include + +struct Package { + QString id; // Usually a lowercase, no-spaces version of the name. Mandatory. + QString path; // Source directory. Optional. + // Default is the directory of the qt_attribution.json file. + QStringList files; // Files in path. Optional. + QString name; // Descriptive name of the package. Will be used as the title. Mandatory. + QString qdocModule; // QDoc module where the documentation should be included. Mandatory. + QString qtUsage; // How the package is used in Qt. Any way to disable? Mandatory. + QStringList qtParts; // Possible values are "examples", "tests", "tools", or "libs". + // "libs" is the default. + + QString description; // A short description of what the package is and is used for. Optional. + QString homepage; // Homepage of the upstream project. Optional. + QString version; // Version used from the upstream project. Optional. + QString downloadLocation; // Link to exact upstream version. Optional. + + QString license; // The license under which the package is distributed. Mandatory. + QString licenseId; // see https://spdx.org/licenses/. Optional. + QString licenseFile; // path to file containing the license text. Optional. + + QString copyright; // A list of copyright owners. Mandatory. +}; + +#endif // PACKAGE_H diff -Nru qttools-opensource-src-5.7.1/src/qtattributionsscanner/qdocgenerator.cpp qttools-opensource-src-5.9.1/src/qtattributionsscanner/qdocgenerator.cpp --- qttools-opensource-src-5.7.1/src/qtattributionsscanner/qdocgenerator.cpp 1970-01-01 00:00:00.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/qtattributionsscanner/qdocgenerator.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -0,0 +1,164 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the tools applications of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qdocgenerator.h" + +#include + +#include + +namespace QDocGenerator { + +// See definition of idstring and licenseid in https://spdx.org/spdx-specification-21-web-version +static bool isSpdxLicenseId(const QString &str) { + if (str.isEmpty()) + return false; + for (auto iter(str.cbegin()); iter != str.cend(); ++iter) { + const QChar c = *iter; + if (!((c >= QLatin1Char('A') && c <= QLatin1Char('Z')) + || (c >= QLatin1Char('a') && c <= QLatin1Char('z')) + || (c >= QLatin1Char('0') && c <= QLatin1Char('9')) + || (c == QLatin1Char('-')) || (c == QLatin1Char('.')))) + return false; + } + return true; +} + +static QString languageJoin(const QStringList &list) +{ + QString result; + for (int i = 0; i < list.size(); ++i) { + QString delimiter = QStringLiteral(", "); + if (i == list.size() - 1) // last item + delimiter.clear(); + else if (list.size() == 2) + delimiter = QStringLiteral(" and "); + else if (list.size() > 2 && i == list.size() - 2) + delimiter = QStringLiteral(", and "); // oxford comma + result += list[i] + delimiter; + } + + return result; +} + +static void generate(QTextStream &out, const Package &package, const QDir &baseDir, + LogLevel logLevel) +{ + out << "/*!\n\n"; + out << "\\contentspage attributions.html\n"; + for (const QString &part: package.qtParts) + out << "\\ingroup attributions-" << part << "\n"; + + if (package.qtParts.contains(QLatin1String("libs"))) { + // show up in xxx-index.html page of module + out << "\\ingroup attributions-" << package.qdocModule << "\n"; + // include in '\generatelist annotatedattributions' + out << "\\page " << package.qdocModule << "-attribution-" << package.id + << ".html attribution\n"; + } else { + out << "\\page " << package.qdocModule << "-attribution-" << package.id + << ".html \n"; + } + + out << "\\target " << package.id << "\n\n"; + out << "\\title " << package.name << "\n"; + out << "\\brief " << package.license << "\n\n"; + + if (!package.description.isEmpty()) + out << package.description << "\n\n"; + + if (!package.qtUsage.isEmpty()) + out << package.qtUsage << "\n\n"; + + QStringList sourcePaths; + if (package.files.isEmpty()) { + sourcePaths << baseDir.relativeFilePath(package.path); + } else { + const QDir packageDir(package.path); + for (const QString &filePath: package.files) { + const QString absolutePath = packageDir.absoluteFilePath(filePath); + sourcePaths << baseDir.relativeFilePath(absolutePath); + } + } + + out << "The sources can be found in " << languageJoin(sourcePaths) << ".\n\n"; + + const bool hasPackageVersion = !package.version.isEmpty(); + const bool hasPackageDownloadLocation = !package.downloadLocation.isEmpty(); + if (!package.homepage.isEmpty()) { + out << "\\l{" << package.homepage << "}{Project Homepage}"; + if (hasPackageVersion) + out << ", "; + } + if (hasPackageVersion) { + out << "upstream version: "; + if (hasPackageDownloadLocation) + out << "\\l{" << package.downloadLocation << "}{"; + out << package.version; + if (hasPackageDownloadLocation) + out << "}"; + } + + out << "\n\n"; + + if (!package.copyright.isEmpty()) + out << "\n\\badcode\n" << package.copyright << "\n\\endcode\n\n"; + + if (isSpdxLicenseId(package.licenseId) && package.licenseId != QLatin1String("NONE")) + out << "\\l{https://spdx.org/licenses/" << package.licenseId << ".html}" + << "{" << package.license << "}.\n\n"; + else + out << package.license << ".\n\n"; + + if (!package.licenseFile.isEmpty()) { + QFile file(package.licenseFile); + if (!file.open(QIODevice::ReadOnly)) { + if (logLevel != SilentLog) + std::cerr << qPrintable(tr("Cannot open file %1.").arg( + QDir::toNativeSeparators(package.licenseFile))) << "\n"; + return; + } + out << "\\badcode\n"; + out << QString::fromUtf8(file.readAll()).trimmed(); + out << "\n\\endcode\n"; + } + out << "*/\n"; +} + +void generate(QTextStream &out, const QVector &packages, const QString &baseDirectory, + LogLevel logLevel) +{ + if (logLevel == VerboseLog) + std::cerr << qPrintable(tr("Generating qdoc file...")) << std::endl; + + QDir baseDir(baseDirectory); + for (const Package &package : packages) + generate(out, package, baseDir, logLevel); +} + +} // namespace QDocGenerator diff -Nru qttools-opensource-src-5.7.1/src/qtattributionsscanner/qdocgenerator.h qttools-opensource-src-5.9.1/src/qtattributionsscanner/qdocgenerator.h --- qttools-opensource-src-5.7.1/src/qtattributionsscanner/qdocgenerator.h 1970-01-01 00:00:00.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/qtattributionsscanner/qdocgenerator.h 2017-06-23 12:03:39.000000000 +0000 @@ -0,0 +1,45 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the tools applications of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QDOCGENERATOR_H +#define QDOCGENERATOR_H + +#include "logging.h" +#include "package.h" + +#include +#include + +namespace QDocGenerator { + +void generate(QTextStream &out, const QVector &packages, const QString &baseDirectory, + LogLevel logLevel); + +} // namespace QDocGenerator + +#endif // QDOCGENERATOR_H diff -Nru qttools-opensource-src-5.7.1/src/qtattributionsscanner/qtattributionsscanner.pro qttools-opensource-src-5.9.1/src/qtattributionsscanner/qtattributionsscanner.pro --- qttools-opensource-src-5.7.1/src/qtattributionsscanner/qtattributionsscanner.pro 1970-01-01 00:00:00.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/qtattributionsscanner/qtattributionsscanner.pro 2017-06-23 12:03:39.000000000 +0000 @@ -0,0 +1,21 @@ +option(host_build) +CONFIG += console + +SOURCES += \ + jsongenerator.cpp \ + main.cpp \ + packagefilter.cpp \ + qdocgenerator.cpp \ + scanner.cpp + +HEADERS += \ + jsongenerator.h \ + logging.h \ + package.h \ + packagefilter.h \ + qdocgenerator.h \ + scanner.h + +DEFINES += QT_NO_CAST_FROM_ASCII QT_NO_CAST_TO_ASCII + +load(qt_tool) diff -Nru qttools-opensource-src-5.7.1/src/qtattributionsscanner/scanner.cpp qttools-opensource-src-5.9.1/src/qtattributionsscanner/scanner.cpp --- qttools-opensource-src-5.7.1/src/qtattributionsscanner/scanner.cpp 1970-01-01 00:00:00.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/qtattributionsscanner/scanner.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -0,0 +1,213 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the tools applications of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "scanner.h" +#include "logging.h" + +#include +#include +#include +#include +#include +#include +#include + +namespace Scanner { + +static void missingPropertyWarning(const QString &filePath, const QString &property) +{ + std::cerr << qPrintable(tr("File %1: Missing mandatory property '%2'.").arg( + QDir::toNativeSeparators(filePath), property)) << std::endl; +} + +static Package readPackage(const QJsonObject &object, const QString &filePath, LogLevel logLevel) +{ + Package p; + const QString directory = QFileInfo(filePath).absolutePath(); + p.path = directory; + + for (auto iter = object.constBegin(); iter != object.constEnd(); ++iter) { + const QString key = iter.key(); + + if (!iter.value().isString() && key != QLatin1String("QtParts")) { + if (logLevel != SilentLog) + std::cerr << qPrintable(tr("File %1: Expected JSON string as value of %2.").arg( + QDir::toNativeSeparators(filePath), key)) << std::endl; + continue; + } + const QString value = iter.value().toString(); + if (key == QLatin1String("Name")) { + p.name = value; + } else if (key == QLatin1String("Path")) { + p.path = QDir(directory).absoluteFilePath(value); + } else if (key == QLatin1String("Files")) { + p.files = value.split(QRegExp(QStringLiteral("\\s")), QString::SkipEmptyParts); + } else if (key == QLatin1String("Id")) { + p.id = value; + } else if (key == QLatin1String("Homepage")) { + p.homepage = value; + } else if (key == QLatin1String("Version")) { + p.version = value; + } else if (key == QLatin1String("DownloadLocation")) { + p.downloadLocation = value; + } else if (key == QLatin1String("License")) { + p.license = value; + } else if (key == QLatin1String("LicenseId")) { + p.licenseId = value; + } else if (key == QLatin1String("LicenseFile")) { + p.licenseFile = QDir(directory).absoluteFilePath(value); + } else if (key == QLatin1String("Copyright")) { + p.copyright = value; + } else if (key == QLatin1String("QDocModule")) { + p.qdocModule = value; + } else if (key == QLatin1String("Description")) { + p.description = value; + } else if (key == QLatin1String("QtUsage")) { + p.qtUsage = value; + } else if (key == QLatin1String("QtParts")) { + const QVariantList variantList = iter.value().toArray().toVariantList(); + for (const QVariant &v: variantList) { + if (v.type() != QVariant::String && logLevel != SilentLog) { + std::cerr << qPrintable(tr("File %1: Expected JSON string in array of %2.").arg( + QDir::toNativeSeparators(filePath), key)) + << std::endl; + } + p.qtParts.append(v.toString()); + } + } else { + if (logLevel != SilentLog) + std::cerr << qPrintable(tr("File %1: Unknown key %2.").arg( + QDir::toNativeSeparators(filePath), key)) << std::endl; + } + } + + // Validate + if (logLevel != SilentLog) { + if (p.name.isEmpty()) + missingPropertyWarning(filePath, QStringLiteral("Name")); + if (p.id.isEmpty()) + missingPropertyWarning(filePath, QStringLiteral("Id")); + if (p.qdocModule.isEmpty()) + missingPropertyWarning(filePath, QStringLiteral("QDocModule")); + if (p.qtUsage.isEmpty()) + missingPropertyWarning(filePath, QStringLiteral("QtUsage")); + if (p.license.isEmpty()) + missingPropertyWarning(filePath, QStringLiteral("License")); + if (p.copyright.isEmpty()) + missingPropertyWarning(filePath, QStringLiteral("Copyright")); + if (p.qtParts.isEmpty()) + p.qtParts << QStringLiteral("libs"); + + for (const QString &part : qAsConst(p.qtParts)) { + if (part != QLatin1String("examples") + && part != QLatin1String("tests") + && part != QLatin1String("tools") + && part != QLatin1String("libs") + && logLevel != SilentLog) { + std::cerr << qPrintable(tr("File %1: Property 'QtPart' contains unknown element " + "'%2'. Valid entries are 'examples', 'tests', 'tools' " + "and 'libs'.").arg( + QDir::toNativeSeparators(filePath), part)) + << std::endl; + } + } + } + return p; +} + +static QVector readFile(const QString &filePath, LogLevel logLevel) +{ + if (logLevel == VerboseLog) { + std::cerr << qPrintable(tr("Reading file %1...").arg( + QDir::toNativeSeparators(filePath))) << std::endl; + } + + QFile file(filePath); + if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) { + if (logLevel != SilentLog) + std::cerr << qPrintable(tr("Could not open file %1.").arg( + QDir::toNativeSeparators(file.fileName()))) << std::endl; + return QVector(); + } + + QJsonParseError jsonParseError; + const QJsonDocument document = QJsonDocument::fromJson(file.readAll(), &jsonParseError); + if (document.isNull()) { + if (logLevel != SilentLog) + std::cerr << qPrintable(tr("Could not parse file %1: %2").arg( + QDir::toNativeSeparators(file.fileName()), + jsonParseError.errorString())) + << std::endl; + return QVector(); + } + + QVector packages; + if (document.isObject()) { + packages << readPackage(document.object(), file.fileName(), logLevel); + } else if (document.isArray()) { + QJsonArray array = document.array(); + for (int i = 0, size = array.size(); i < size; ++i) { + QJsonValue value = array.at(i); + if (value.isObject()) { + packages << readPackage(value.toObject(), file.fileName(), logLevel); + } else { + if (logLevel != SilentLog) + std::cerr << qPrintable(tr("File %1: Expecting JSON object in array.").arg( + QDir::toNativeSeparators(file.fileName()))) + << std::endl; + } + } + } else { + if (logLevel != SilentLog) + std::cerr << qPrintable(tr("File %1: Expecting JSON object in array.").arg( + QDir::toNativeSeparators(file.fileName()))) << std::endl; + } + return packages; +} + +QVector scanDirectory(const QString &directory, LogLevel logLevel) +{ + QDir dir(directory); + QVector packages; + + dir.setNameFilters(QStringList() << QStringLiteral("qt_attribution.json")); + dir.setFilter(QDir::AllDirs | QDir::NoDotAndDotDot | QDir::Files); + + const QFileInfoList entries = dir.entryInfoList(); + for (const QFileInfo &info : entries) { + if (info.isDir()) { + packages += scanDirectory(info.filePath(), logLevel); + } else { + packages += readFile(info.filePath(), logLevel); + } + } + + return packages; +} + +} // namespace Scanner diff -Nru qttools-opensource-src-5.7.1/src/qtattributionsscanner/scanner.h qttools-opensource-src-5.9.1/src/qtattributionsscanner/scanner.h --- qttools-opensource-src-5.7.1/src/qtattributionsscanner/scanner.h 1970-01-01 00:00:00.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/qtattributionsscanner/scanner.h 2017-06-23 12:03:39.000000000 +0000 @@ -0,0 +1,45 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the tools applications of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef SCANNER_H +#define SCANNER_H + +#include "logging.h" +#include "package.h" + +#include +#include + +namespace Scanner { + +QVector readDirectory(const QString &packageDirectory, LogLevel logLevel); +QVector scanDirectory(const QString &directory, LogLevel logLevel); + +} + +#endif // SCANNER_H diff -Nru qttools-opensource-src-5.7.1/src/qtdiag/qtdiag.cpp qttools-opensource-src-5.9.1/src/qtdiag/qtdiag.cpp --- qttools-opensource-src-5.7.1/src/qtdiag/qtdiag.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/qtdiag/qtdiag.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -50,7 +50,9 @@ #include #include #include -#include +#if QT_CONFIG(processenvironment) +# include +#endif #include #include #include @@ -62,9 +64,14 @@ #include #include #include +#include #include #include +#ifdef QT_WIDGETS_LIB +# include +#endif + #include QT_BEGIN_NAMESPACE @@ -174,7 +181,7 @@ QList extensionList = context.extensions().toList(); std::sort(extensionList.begin(), extensionList.end()); str << " \nFound " << extensionList.size() << " extensions:\n"; - foreach (const QByteArray &extension, extensionList) + for (const QByteArray &extension : qAsConst(extensionList)) str << " " << extension << '\n'; } } else { @@ -347,7 +354,8 @@ #ifndef QT_NO_PROCESS const QProcessEnvironment systemEnvironment = QProcessEnvironment::systemEnvironment(); str << "\nEnvironment:\n"; - foreach (const QString &key, systemEnvironment.keys()) { + const QStringList keys = systemEnvironment.keys(); + for (const QString &key : keys) { if (key.startsWith(QLatin1Char('Q'))) str << " " << key << "=\"" << systemEnvironment.value(key) << "\"\n"; } @@ -396,7 +404,8 @@ DUMP_STANDARDPATH(str, AppConfigLocation) str << "\nFile selectors (increasing order of precedence):\n "; - foreach (const QString &s, QFileSelector().allSelectors()) + const QStringList allSelectors = QFileSelector().allSelectors(); + for (const QString &s : allSelectors) str << ' ' << s; str << "\n\nNetwork:\n "; @@ -465,16 +474,21 @@ const QPlatformTheme *platformTheme = QGuiApplicationPrivate::platformTheme(); str << "\nTheme:" - "\n Available : " << platformIntegration->themeNames() - << "\n Styles : " << platformTheme->themeHint(QPlatformTheme::StyleNames).toStringList(); + "\n Platforms requested : " << platformIntegration->themeNames() + << "\n available : " << QPlatformThemeFactory::keys() +#ifdef QT_WIDGETS_LIB + << "\n Styles requested : " << platformTheme->themeHint(QPlatformTheme::StyleNames).toStringList() + << "\n available : " << QStyleFactory::keys() +#endif + ; const QString iconTheme = platformTheme->themeHint(QPlatformTheme::SystemIconThemeName).toString(); if (!iconTheme.isEmpty()) { - str << "\n Icon theme : " << iconTheme + str << "\n Icon theme : " << iconTheme << ", " << platformTheme->themeHint(QPlatformTheme::SystemIconFallbackThemeName).toString() - << " from " << platformTheme->themeHint(QPlatformTheme::IconThemeSearchPaths).toStringList() << '\n'; + << " from " << platformTheme->themeHint(QPlatformTheme::IconThemeSearchPaths).toStringList(); } if (const QFont *systemFont = platformTheme->font()) - str << "\n System font : " << *systemFont<< '\n'; + str << "\n System font : " << *systemFont<< '\n'; if (platformTheme->usePlatformNativeDialog(QPlatformTheme::FileDialog)) str << " Native file dialog\n"; @@ -522,6 +536,9 @@ str << '#' << ' ' << s << " \"" << screen->name() << '"' << " Depth: " << screen->depth() << " Primary: " << (screen == QGuiApplication::primaryScreen() ? "yes" : "no") + << "\n Manufacturer: " << screen->manufacturer() + << "\n Model: " << screen->model() + << "\n Serial number: " << screen->serialNumber() << "\n Geometry: " << geometry; if (geometry != nativeGeometry) str << " (native: " << nativeGeometry << ')'; @@ -553,7 +570,7 @@ const QList touchDevices = QTouchDevice::devices(); if (!touchDevices.isEmpty()) { str << "Touch devices: " << touchDevices.size() << '\n'; - foreach (const QTouchDevice *device, touchDevices) { + for (const QTouchDevice *device : touchDevices) { str << " " << (device->type() == QTouchDevice::TouchScreen ? "TouchScreen" : "TouchPad") << " \"" << device->name() << "\", max " << device->maximumTouchPoints() << " touch points, capabilities:"; diff -Nru qttools-opensource-src-5.7.1/src/qtdiag/qtdiag.pro qttools-opensource-src-5.9.1/src/qtdiag/qtdiag.pro --- qttools-opensource-src-5.7.1/src/qtdiag/qtdiag.pro 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/qtdiag/qtdiag.pro 2017-06-23 12:03:39.000000000 +0000 @@ -1,8 +1,8 @@ -load(qt_app) - CONFIG += console QT += core-private gui-private +qtHaveModule(widgets): QT += widgets + qtHaveModule(network) { QT += network DEFINES += NETWORK_DIAG @@ -10,3 +10,5 @@ SOURCES += main.cpp qtdiag.cpp HEADERS += qtdiag.h + +load(qt_app) diff -Nru qttools-opensource-src-5.7.1/src/qtestlib/qtestlib.pro qttools-opensource-src-5.9.1/src/qtestlib/qtestlib.pro --- qttools-opensource-src-5.7.1/src/qtestlib/qtestlib.pro 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/qtestlib/qtestlib.pro 1970-01-01 00:00:00.000000000 +0000 @@ -1,3 +0,0 @@ -TEMPLATE = subdirs -wince*: contains(QT_CONFIG, cetest): SUBDIRS += wince -CONFIG += ordered diff -Nru qttools-opensource-src-5.7.1/src/qtestlib/wince/cetcpsync/cetcpsync.pro qttools-opensource-src-5.9.1/src/qtestlib/wince/cetcpsync/cetcpsync.pro --- qttools-opensource-src-5.7.1/src/qtestlib/wince/cetcpsync/cetcpsync.pro 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/qtestlib/wince/cetcpsync/cetcpsync.pro 1970-01-01 00:00:00.000000000 +0000 @@ -1,15 +0,0 @@ -CONFIG += console -QT += network -QT -= gui - -INCLUDEPATH += ../cetcpsyncserver - -SOURCES += main.cpp \ - remoteconnection.cpp \ - qtcesterconnection.cpp - -HEADERS += \ - remoteconnection.h \ - qtcesterconnection.h - -load(qt_app) diff -Nru qttools-opensource-src-5.7.1/src/qtestlib/wince/cetcpsync/main.cpp qttools-opensource-src-5.9.1/src/qtestlib/wince/cetcpsync/main.cpp --- qttools-opensource-src-5.7.1/src/qtestlib/wince/cetcpsync/main.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/qtestlib/wince/cetcpsync/main.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,189 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the tools applications of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ -#include -#include "qtcesterconnection.h" - -using namespace std; - -static void showUsage() -{ - cout << "cetcpsync is meant to be used by cetest internally." << endl - << "For usage instructions remoteconnection.h could be useful." << endl; -} - -const int debugLevel = 0; -void debugOutput(const QString& text, int level) -{ - if (level <= debugLevel) - cout << qPrintable(text) << endl; -} - -class Exception -{ -public: - Exception(const QString& msg = QString()) - : m_message(msg) - {} - - QString message() { return m_message; } - -protected: - QString m_message; -}; - -class TooFewParametersException : public Exception -{ -public: - TooFewParametersException(const QLatin1String& cmd, int expectedParameterCount) - { - m_message = QLatin1String("Command ") + cmd + QLatin1String(" needs at least "); - m_message.append(QString::number(expectedParameterCount)); - m_message.append(QLatin1String(" parameters.")); - } -}; - -static void fileTimeFromString(FILETIME& ft, const QString& str) -{ - int idx = str.indexOf("*"); - if (idx <= 0) - return; - ft.dwLowDateTime = str.left(idx).toULong(); - ft.dwHighDateTime = str.mid(idx+1).toULong(); -} - -static QString fileTimeToString(FILETIME& ft) -{ - return QString::number(ft.dwLowDateTime) + "*" + QString::number(ft.dwHighDateTime); -} - -static int execCommand(const QLatin1String& cmd, int argc, char* argv[]) -{ - int retval = 0; - bool success = true; - QtCesterConnection connection; - if (cmd == "copyFileToDevice") { - if (argc < 3) - throw TooFewParametersException(cmd, 3); - success = connection.copyFileToDevice(argv[0], argv[1], argv[2] == "true"); - } else if (cmd == "copyDirectoryToDevice") { - if (argc < 3) - throw TooFewParametersException(cmd, 3); - success = connection.copyDirectoryToDevice(argv[0], argv[1], argv[2] == "true"); - } else if (cmd == "copyFileFromDevice") { - if (argc < 3) - throw TooFewParametersException(cmd, 3); - success = connection.copyFileFromDevice(argv[0], argv[1], argv[2] == "true"); - } else if (cmd == "copyDirectoryFromDevice") { - if (argc < 3) - throw TooFewParametersException(cmd, 3); - success = connection.copyDirectoryFromDevice(argv[0], argv[1], argv[2] == "true"); - } else if (cmd == "timeStampForLocalFileTime") { - if (argc < 1) - throw TooFewParametersException(cmd, 1); - FILETIME ft; - fileTimeFromString(ft, argv[0]); - success = connection.timeStampForLocalFileTime(&ft); - if (success) - cout << qPrintable(fileTimeToString(ft)); - } else if (cmd == "fileCreationTime") { - if (argc < 1) - throw TooFewParametersException(cmd, 1); - FILETIME ft; - success = connection.fileCreationTime(argv[0], &ft); - if (success) - cout << qPrintable(fileTimeToString(ft)); - } else if (cmd == "copyFile") { - if (argc < 3) - throw TooFewParametersException(cmd, 3); - success = connection.copyFile(argv[0], argv[1], argv[2] == "true"); - } else if (cmd == "copyDirectory") { - if (argc < 3) - throw TooFewParametersException(cmd, 3); - success = connection.copyDirectory(argv[0], argv[1], argv[2] == "true"); - } else if (cmd == "deleteFile") { - if (argc < 1) - throw TooFewParametersException(cmd, 1); - success = connection.deleteFile(argv[0]); - } else if (cmd == "deleteDirectory") { - if (argc < 3) - throw TooFewParametersException(cmd, 3); - success = connection.deleteDirectory(argv[0], argv[1] == "true", argv[2] == "true"); - } else if (cmd == "moveFile") { - if (argc < 3) - throw TooFewParametersException(cmd, 3); - success = connection.moveFile(argv[0], argv[1], argv[2] == "true"); - } else if (cmd == "moveDirectory") { - if (argc < 3) - throw TooFewParametersException(cmd, 3); - success = connection.moveDirectory(argv[0], argv[1], argv[2] == "true"); - } else if (cmd == "createDirectory") { - if (argc < 2) - throw TooFewParametersException(cmd, 2); - success = connection.createDirectory(argv[0], argv[1] == "true"); - } else if (cmd == "execute") { - if (argc < 3) - throw TooFewParametersException(cmd, 3); - int timeout = QString(argv[2]).toInt(); - success = connection.execute(argv[0], argv[1], timeout, &retval); - } else if (cmd == "noop") { - // do nothing :) - success = true; - } else { - throw Exception("unknown command"); - } - - return success ? retval : 1; -} - -int main(int argc, char *argv[]) -{ - if (argc <= 1) { - showUsage(); - return 0; - } - - QLatin1String param(argv[1]); - int result = 1; - try { - result = execCommand(param, argc - 2, argv + 2); - } catch (Exception e) { - cerr << "Error: " << qPrintable(e.message()); - } - return result; -} diff -Nru qttools-opensource-src-5.7.1/src/qtestlib/wince/cetcpsync/qtcesterconnection.cpp qttools-opensource-src-5.9.1/src/qtestlib/wince/cetcpsync/qtcesterconnection.cpp --- qttools-opensource-src-5.7.1/src/qtestlib/wince/cetcpsync/qtcesterconnection.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/qtestlib/wince/cetcpsync/qtcesterconnection.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,550 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the tools applications of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ -#include "qtcesterconnection.h" -#include -#include -#include -#include -#include -#include - -extern void debugOutput(const QString& text, int level); - -#pragma warning(disable:4996) - -#define END_ERROR(s, a) \ - if(a) qDebug() << a; \ - _freeSocket(s); \ - return false; - -QtCesterConnection::QtCesterConnection() - : AbstractRemoteConnection() -{ -} - -QtCesterConnection::~QtCesterConnection() -{ -} - -bool QtCesterConnection::connect(QVariantList&) -{ - // We connect with each command, so this is always true - // The command itself will fail then - connected = true; - return true; -} - -void QtCesterConnection::disconnect() -{ - connected = false; -} - -bool QtCesterConnection::isConnected() const -{ - return connected; -} - -bool QtCesterConnection::copyFileToDevice(const QString &localSource, const QString &deviceDest, bool failIfExists) -{ - debugOutput( qPrintable(QString::fromLatin1("Copy File: %1 -> %2").arg(localSource).arg(deviceDest)),0); - QFile localFile(localSource); - QFileInfo info(localSource); - if (!localFile.exists() || !localFile.open(QIODevice::ReadOnly)) { - qDebug() << "Could not open File!"; - return false; - } - - QTcpSocket* socket = 0; - if (!_initCommand(socket, COMMAND_CREATE_FILE)) { - END_ERROR(socket, "Could not initialized command"); - } - - CreateFileOptions option; - strcpy(option.fileName, qPrintable(deviceDest)); -#ifdef Q_OS_WIN - // Copy FileTime for update verification - FILETIME creationTime, accessTime, writeTime; - HANDLE localHandle = CreateFile(localSource.utf16(), GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, 0); - if (localHandle != INVALID_HANDLE_VALUE) { - if (GetFileTime(localHandle, &creationTime, &accessTime, &writeTime)) { - LocalFileTimeToFileTime(&writeTime, &writeTime); - option.fileTime = writeTime; - } - CloseHandle(localHandle); - } - DWORD attributes = GetFileAttributes(localSource.utf16()); - if (attributes != -1 ) - option.fileAttributes = attributes; -#endif - option.fileSize = info.size(); - option.overwriteExisting = !failIfExists; - - if (!_sendData(socket, (char*) &option, sizeof(option))) { - END_ERROR(socket, "Could not send options..."); - } - - if (!_checkResult(socket)) { - END_ERROR(socket, "Server did not accept configuration"); - } - - int bytesWritten = 0; - const int bufferSize = 1024; - QByteArray data; - while (bytesWritten < option.fileSize) { - data = localFile.read(bufferSize); - bytesWritten += data.size(); -#ifdef Q_OS_WIN - wprintf( L"%s -> %s (%d / %d) %d %%\r", localSource.utf16() , deviceDest.utf16(), - bytesWritten , option.fileSize, (100*bytesWritten)/option.fileSize ); -#endif - if (!_sendData(socket, data.constData(), data.size())) { - END_ERROR(socket, "Error during file transfer"); - } - if (!_checkResult(socket)) { - END_ERROR(socket, "Got some strange result"); - } - } -#ifdef Q_OS_WIN - wprintf( L"\n"); // We should jump to next line... -#endif - if (bytesWritten != option.fileSize) { - END_ERROR(socket, "Did not send sufficient data"); - } - _freeSocket(socket); - return true; -} - -bool QtCesterConnection::copyDirectoryToDevice(const QString &localSource, const QString &deviceDest, bool recursive) -{ - QTcpSocket* socket = NULL; - QFileInfo info(localSource); - if (!info.exists() || !info.isDir()) { - END_ERROR(socket, "Input directory invalid"); - } - - createDirectory(deviceDest, true); - QDir dir(localSource); - QFileInfoList list = dir.entryInfoList(QDir::Files | QDir::Dirs | QDir::NoDotAndDotDot); - foreach(QFileInfo item, list) { - QString targetName = deviceDest + QLatin1String("\\") + item.fileName(); - if (item.isDir()) { - if (recursive) { - if (!copyDirectoryToDevice(item.absoluteFilePath() , targetName, recursive)) - return false; - } - } else { - if (!copyFileToDevice(item.absoluteFilePath(), targetName)) - return false; - } - } - return true; -} - -bool QtCesterConnection::copyFileFromDevice(const QString &deviceSource, const QString &localDest, bool failIfExists) -{ - QFile targetFile(localDest); - QTcpSocket* socket = 0; - if (targetFile.exists() && failIfExists) { - END_ERROR(socket, "Local file not supposed to be overwritten"); - } - - if (!targetFile.open(QIODevice::WriteOnly | QIODevice::Truncate)) { - END_ERROR(socket, "Could not open local file for writing"); - } - - if (!_initCommand(socket, COMMAND_READ_FILE)) { - END_ERROR(socket, "Could not establish connection"); - } - - ReadFileOptions option; - strcpy(option.fileName, qPrintable(deviceSource)); - if (!_sendData(socket, (char*) &option, sizeof(option))) { - END_ERROR(socket, "Could not send options"); - } - - QByteArray data; - if (!_receiveData(socket, data)) { - END_ERROR(socket, "Did not receive any data"); - } - - ReadFileReply* reply = (ReadFileReply*) data.data(); - if (!reply->fileValid) { - END_ERROR(socket, "Requested file invalid"); - } - - int fileSize = reply->fileSize; - int currentSize = 0; - // ### TODO: make a little bit more error-prone - do { - _sendData(socket, COMMAND_SUCCESS, strlen(COMMAND_SUCCESS)); - _receiveData(socket, data); - currentSize += data.size(); - targetFile.write(data); - } while(currentSize < fileSize); - - _freeSocket(socket); - targetFile.close(); - return true; -} - -bool QtCesterConnection::copyDirectoryFromDevice(const QString& /*deviceSource*/ - , const QString& /*localDest*/ - , bool /*recursive*/) -{ - qDebug() << "To be implemented!! Should not be needed for autotest system"; - exit(-1); - return false; -} - -bool QtCesterConnection::copyFile(const QString &srcFile, const QString &destFile, bool failIfExists) -{ - QTcpSocket* socket = 0; - if (!_initCommand(socket, COMMAND_COPY_FILE)) { - END_ERROR(socket, "Could not establish connection for copy"); - } - - CopyFileOptions option; - strcpy(option.from, qPrintable(srcFile)); - strcpy(option.to, qPrintable(destFile)); - option.overwriteExisting = !failIfExists; - if (!_sendData(socket, (char*) &option, sizeof(option))) { - END_ERROR(socket, "Could not send copy options"); - } - - if (!_checkResult(socket)) { - END_ERROR(socket, "Copy failed"); - } - - _freeSocket(socket); - return true; -} - -bool QtCesterConnection::copyDirectory(const QString &srcDirectory, const QString &destDirectory, - bool recursive) -{ - QTcpSocket* socket = 0; - if (!_initCommand(socket, COMMAND_COPY_DIRECTORY)) { - END_ERROR(socket, "Could not establish connection for dir copy"); - } - - CopyDirectoryOptions option; - strcpy(option.from, qPrintable(srcDirectory)); - strcpy(option.to, qPrintable(destDirectory)); - option.recursive = recursive; - if (!_sendData(socket, (char*) &option, sizeof(option))) { - END_ERROR(socket, "Could not send dir copy options"); - } - - if (!_checkResult(socket)) { - END_ERROR(socket, "Dir Copy failed"); - } - - _freeSocket(socket); - return true; -} - -bool QtCesterConnection::deleteFile(const QString &fileName) -{ - QTcpSocket* socket = 0; - if (!_initCommand(socket, COMMAND_DELETE_FILE)) { - END_ERROR(socket, "Could not establish connection for file deletion"); - } - - DeleteFileOptions option; - strcpy(option.fileName, qPrintable(fileName)); - if (!_sendData(socket, (char*) &option, sizeof(option))) { - END_ERROR(socket, "Could not send file options"); - } - - if (!_checkResult(socket)) { - //END_ERROR(socket, "File Deletion failed"); - // This is actually not an error so ignore it. - } - - _freeSocket(socket); - return true; -} - -bool QtCesterConnection::deleteDirectory(const QString &directory, bool recursive, bool failIfContentExists) -{ - QTcpSocket* socket = 0; - if (!_initCommand(socket, COMMAND_DELETE_DIRECTORY)) { - END_ERROR(socket, "Could not establish connection for dir deletion"); - } - - DeleteDirectoryOptions option; - strcpy(option.dirName, qPrintable(directory)); - option.recursive = recursive; - option.failIfContentExists = failIfContentExists; - if (!_sendData(socket, (char*) &option, sizeof(option))) { - END_ERROR(socket, "Could not send dir options"); - } - - if (!_checkResult(socket)) { - // we do not write an error as this will fail a lot on recursive. - END_ERROR(socket, 0); - } - - _freeSocket(socket); - return true; -} - -bool QtCesterConnection::execute(QString program, - QString arguments, - int timeout, - int *returnValue) -{ - QTcpSocket* socket = 0; - if (!_initCommand(socket, COMMAND_EXECUTE)) { - END_ERROR(socket, "Could not establish connection for dir deletion"); - } - - ExecuteOptions options; - strcpy(options.appName, qPrintable(program)); - QStringList argList = arguments.split(QLatin1Char(' ')); - options.argumentsCount = qMin(argList.size(), MAX_ARGUMENTS); - options.waitForFinished = true; - options.timeout = timeout; - if (!_sendData(socket, (char*) &options, sizeof(options))) { - END_ERROR(socket, "Could not send dir options"); - } - if (!_checkResult(socket)) { - END_ERROR(socket, "Did not receive an answer"); - } - - for (int i=0; i < options.argumentsCount; ++i) { - char someData[MAX_NAME_LENGTH]; - strcpy(someData, qPrintable(argList[i])); - if (!_sendData(socket, someData, MAX_NAME_LENGTH)) { - END_ERROR(socket, "Could not send argument"); - } - if (!_checkResult(socket)) { - END_ERROR(socket, "Failure in argument send"); - } - } - - // trigger the startup - if (!_sendData(socket, COMMAND_SUCCESS, strlen(COMMAND_SUCCESS))) { - END_ERROR(socket, "Could not trigger startup"); - } - - const int waitTime = 60 * 60 * 1000; - if (!socket->waitForReadyRead(waitTime)) { - END_ERROR(socket, "Process timed out"); - } - - QByteArray result = socket->readAll(); - if (result != COMMAND_SUCCESS) { - if (returnValue) - *returnValue = -1; // just some at least - END_ERROR(socket, "Application did not start or returned error"); - } - - if (returnValue) - *returnValue = 0; - _freeSocket(socket); - return true; -} - -bool QtCesterConnection::createDirectory(const QString &path, bool deleteBefore) -{ - if (deleteBefore) - deleteDirectory(path, true, true); - - QTcpSocket* socket = 0; - if (!_initCommand(socket, COMMAND_CREATE_DIRECTORY)) { - END_ERROR(socket, "Could not establish connection for dir creation"); - } - - CreateDirectoryOptions option; - strcpy(option.dirName, qPrintable(path)); - option.recursively = true; - if (!_sendData(socket, (char*) &option, sizeof(option))) { - END_ERROR(socket, "Could not send dir options"); - } - - if (!_checkResult(socket)) { - END_ERROR(socket, "Dir creation failed"); - } - - _freeSocket(socket); - return true; -} - -bool QtCesterConnection::timeStampForLocalFileTime(FILETIME* fTime) const -{ - if (!fTime) - return false; - - FILETIME copyTime = *fTime; - LocalFileTimeToFileTime(©Time, ©Time); - - QTcpSocket* socket = 0; - if (!_initCommand(socket, COMMAND_TIME_STAMP)) { - END_ERROR(socket, "Could not establish time stamp connection"); - } - - if (!_sendData(socket, (char*) ©Time, sizeof(copyTime))) { - END_ERROR(socket, "Could not send stamp time"); - } - - QByteArray data; - if (!_receiveData(socket, data)) { - END_ERROR(socket, "Did not receive time stamp or connection interrupted"); - } - - copyTime = *((FILETIME*)data.data()); - if (copyTime.dwLowDateTime == -1 && copyTime.dwHighDateTime == -1) { - END_ERROR(socket, "remote Time stamp failed!"); - } - - *fTime = copyTime; - _freeSocket(socket); - return true; -} - -bool QtCesterConnection::fileCreationTime(const QString &fileName, FILETIME* deviceCreationTime) const -{ - if (!deviceCreationTime) - return false; - - QTcpSocket* socket = 0; - if (!_initCommand(socket, COMMAND_FILE_TIME)) { - END_ERROR(socket, "Could not establish connection for file time access"); - } - - FileTimeOptions option; - strcpy(option.fileName, qPrintable(fileName)); - if (!_sendData(socket, (char*) &option, sizeof(option))) { - END_ERROR(socket, "Could not send file time name"); - } - - QByteArray data; - if (!_receiveData(socket, data)) { - END_ERROR(socket, "File Time request failed"); - } - - FILETIME* resultTime = (FILETIME*) data.data(); - if (resultTime->dwLowDateTime == -1 && resultTime->dwHighDateTime == -1) { - END_ERROR(socket, 0); - debugOutput("Could not access file time", 0); - } - - *deviceCreationTime = *resultTime; - _freeSocket(socket); - return true; -} - -bool QtCesterConnection::_createSocket(QTcpSocket*& result) const -{ - QTcpSocket* sock = new QTcpSocket(); - QByteArray ipAddress = qgetenv("DEVICE_IP"); - if (ipAddress.isEmpty()) { - qWarning("Error: You need to have DEVICE_IP set"); - exit(0); - } - sock->connectToHost(QHostAddress(QString(ipAddress)), 12145); - - if (!sock->waitForConnected()) { - qDebug() << "connection timeout..."; - result = NULL; - return false; - } - result = sock; - return true; -} - -void QtCesterConnection::_freeSocket(QTcpSocket*& sock) const -{ - if (!sock) - return; - if (sock->state() == QAbstractSocket::ConnectedState) { - sock->disconnectFromHost(); - // seems like no need to wait - //sock->waitForDisconnected(); - } - delete sock; - sock = NULL; -#ifdef Q_OS_WIN - Sleep(100); -#endif -} - -bool QtCesterConnection::_initCommand(QTcpSocket*& sock, const char* command) const -{ - QTcpSocket* socket = NULL; - if (!_createSocket(socket)) { - END_ERROR(socket, "Could not connect to server"); - } - - if (!_sendData(socket, command, strlen(command)) || - !_checkResult(socket)) { - END_ERROR(socket, "Cound not send command"); - } - sock = socket; - return true; -} - -bool QtCesterConnection::_sendData(QTcpSocket*& sock, const char* data, int dataSize) const -{ - int amount = sock->write(data, dataSize); - if (amount != dataSize) { - fprintf(stderr, "*******COULD NOT SEND ENOUGH DATA*************\n"); - } - return sock->waitForBytesWritten(); -} - -bool QtCesterConnection::_receiveData(QTcpSocket*& sock, QByteArray& data) const -{ - if (!sock->waitForReadyRead()) { - qDebug() << "did not receive any data"; - return false; - } - data = sock->readAll(); - return true; -} - -bool QtCesterConnection::_checkResult(QTcpSocket*& sock) const -{ - QByteArray response; - if (!_receiveData(sock, response) || response != COMMAND_SUCCESS) - return false; - return true; -} - diff -Nru qttools-opensource-src-5.7.1/src/qtestlib/wince/cetcpsync/qtcesterconnection.h qttools-opensource-src-5.9.1/src/qtestlib/wince/cetcpsync/qtcesterconnection.h --- qttools-opensource-src-5.7.1/src/qtestlib/wince/cetcpsync/qtcesterconnection.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/qtestlib/wince/cetcpsync/qtcesterconnection.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,84 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the tools applications of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ -#ifndef ACTIVESYNC_REMOTECONNECTION_H -#define ACTIVESYNC_REMOTECONNECTION_H - -#include "remoteconnection.h" - -class QTcpSocket; - -class QtCesterConnection : public AbstractRemoteConnection -{ -public: - QtCesterConnection(); - virtual ~QtCesterConnection(); - - bool connect(QVariantList &list = QVariantList()); - void disconnect(); - bool isConnected() const; - - // These functions are designed for transfer between desktop and device - // Caution: deviceDest path has to be device specific (eg. no drive letters for CE) - bool copyFileToDevice(const QString &localSource, const QString &deviceDest, bool failIfExists = false); - bool copyDirectoryToDevice(const QString &localSource, const QString &deviceDest, bool recursive = true); - bool copyFileFromDevice(const QString &deviceSource, const QString &localDest, bool failIfExists = false); - bool copyDirectoryFromDevice(const QString &deviceSource, const QString &localDest, bool recursive = true); - - bool timeStampForLocalFileTime(FILETIME*) const; - bool fileCreationTime(const QString &fileName, FILETIME*) const; - - // These functions only work on files existing on the device - bool copyFile(const QString&, const QString&, bool failIfExists = false); - bool copyDirectory(const QString&, const QString&, bool recursive = true); - bool deleteFile(const QString&); - bool deleteDirectory(const QString&, bool recursive = true, bool failIfContentExists = false); - bool createDirectory(const QString&, bool deleteBefore=false); - - bool execute(QString program, QString arguments = QString(), int timeout = -1, int *returnValue = NULL); -private: - bool _createSocket(QTcpSocket*&) const; - void _freeSocket(QTcpSocket*&) const; - bool _initCommand(QTcpSocket*&, const char*) const; - bool _sendData(QTcpSocket*&, const char* data, int dataSize) const; - bool _receiveData(QTcpSocket*&, QByteArray&) const; - bool _checkResult(QTcpSocket*&) const; - bool connected; -}; - -#endif diff -Nru qttools-opensource-src-5.7.1/src/qtestlib/wince/cetcpsync/remoteconnection.cpp qttools-opensource-src-5.9.1/src/qtestlib/wince/cetcpsync/remoteconnection.cpp --- qttools-opensource-src-5.7.1/src/qtestlib/wince/cetcpsync/remoteconnection.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/qtestlib/wince/cetcpsync/remoteconnection.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,63 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the tools applications of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ -#include "remoteconnection.h" - -AbstractRemoteConnection::AbstractRemoteConnection() -{ -} - -AbstractRemoteConnection::~AbstractRemoteConnection() -{ -} - -// Slow but should be ok... -bool AbstractRemoteConnection::moveFile(const QString &src, const QString &dest, bool FailIfExists) -{ - bool result = copyFile(src, dest, FailIfExists); - deleteFile(src); - return result; -} - -// Slow but should be ok... -bool AbstractRemoteConnection::moveDirectory(const QString &src, const QString &dest, bool recursive) -{ - bool result = copyDirectory(src, dest, true); - deleteDirectory(src, recursive); - return result; -} diff -Nru qttools-opensource-src-5.7.1/src/qtestlib/wince/cetcpsync/remoteconnection.h qttools-opensource-src-5.9.1/src/qtestlib/wince/cetcpsync/remoteconnection.h --- qttools-opensource-src-5.7.1/src/qtestlib/wince/cetcpsync/remoteconnection.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/qtestlib/wince/cetcpsync/remoteconnection.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,79 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the tools applications of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ -#ifndef REMOTECONNECTION_H -#define REMOTECONNECTION_H - -#include -#include -#include -class AbstractRemoteConnection -{ -public: - AbstractRemoteConnection(); - virtual ~AbstractRemoteConnection(); - - virtual bool connect(QVariantList&) = 0; - virtual void disconnect() = 0; - virtual bool isConnected() const = 0; - - // These functions are designed for transfer between desktop and device - // Caution: deviceDest path has to be device specific (eg. no drive letters for CE) - virtual bool copyFileToDevice(const QString &localSource, const QString &deviceDest, bool failIfExists = false) = 0; - virtual bool copyDirectoryToDevice(const QString &localSource, const QString &deviceDest, bool recursive = true) = 0; - virtual bool copyFileFromDevice(const QString &deviceSource, const QString &localDest, bool failIfExists = false) = 0; - virtual bool copyDirectoryFromDevice(const QString &deviceSource, const QString &localDest, bool recursive = true) = 0; - - // For "intelligent deployment" we need to investigate on filetimes on the device - virtual bool timeStampForLocalFileTime(FILETIME*) const = 0; - virtual bool fileCreationTime(const QString &fileName, FILETIME*) const = 0; - - // These functions only work on files existing on the device - virtual bool copyFile(const QString&, const QString&, bool failIfExists = false) = 0; - virtual bool copyDirectory(const QString&, const QString&, bool recursive = true) = 0; - virtual bool deleteFile(const QString&) = 0; - virtual bool deleteDirectory(const QString&, bool recursive = true, bool failIfContentExists = false) = 0; - bool moveFile(const QString&, const QString&, bool FailIfExists = false); - bool moveDirectory(const QString&, const QString&, bool recursive = true); - - virtual bool createDirectory(const QString&, bool deleteBefore=false) = 0; - - virtual bool execute(QString program, QString arguments = QString(), int timeout = -1, int *returnValue = NULL) = 0; -}; - -#endif diff -Nru qttools-opensource-src-5.7.1/src/qtestlib/wince/cetcpsyncserver/cetcpsyncserver.pro qttools-opensource-src-5.9.1/src/qtestlib/wince/cetcpsyncserver/cetcpsyncserver.pro --- qttools-opensource-src-5.7.1/src/qtestlib/wince/cetcpsyncserver/cetcpsyncserver.pro 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/qtestlib/wince/cetcpsyncserver/cetcpsyncserver.pro 1970-01-01 00:00:00.000000000 +0000 @@ -1,17 +0,0 @@ -TARGET = cetcpsyncsvr -QT -= gui -QT += network - -CONFIG += console - -HEADERS += \ - connectionmanager.h \ - commands.h \ - transfer_global.h - -SOURCES += \ - connectionmanager.cpp \ - commands.cpp \ - main.cpp - -load(qt_app) diff -Nru qttools-opensource-src-5.7.1/src/qtestlib/wince/cetcpsyncserver/commands.cpp qttools-opensource-src-5.9.1/src/qtestlib/wince/cetcpsyncserver/commands.cpp --- qttools-opensource-src-5.7.1/src/qtestlib/wince/cetcpsyncserver/commands.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/qtestlib/wince/cetcpsyncserver/commands.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,684 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the tools applications of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ -#include "commands.h" -#include -#include -#include -#include - -#ifdef Q_OS_WINCE -#include -#endif - -///////////////////////////////////////////////////// -// Abstract Command Implementation // -///////////////////////////////////////////////////// -AbstractCommand::AbstractCommand() -: m_socket(0) -{ -} - -AbstractCommand::~AbstractCommand() -{ -} - -void AbstractCommand::reportSuccess() -{ - m_socket->write(COMMAND_SUCCESS, strlen(COMMAND_SUCCESS)); - m_socket->waitForBytesWritten(); -} - -void AbstractCommand::reportError() -{ - m_socket->write(COMMAND_ERROR, strlen(COMMAND_ERROR)); - m_socket->waitForBytesWritten(); -} - -void AbstractCommand::dataReceived(QByteArray&) -{ - debugOutput(1, "AbstractCommand::dataReceived NOT SUPPOSED TO BE HERE"); -} - -void AbstractCommand::commandFinished() -{ - debugOutput(1, "AbstractCommand::commandFinished()NOT SUPPOSED TO BE HERE"); -} - -void AbstractCommand::setSocket(QTcpSocket* socket) -{ - debugOutput(0, "AbstractCommand::setSocket()"); - Q_ASSERT(socket); - m_socket = socket; - connect(m_socket, SIGNAL(readyRead()), this, SLOT(_readData())); - reportSuccess(); -} - -QTcpSocket* AbstractCommand::socket() -{ - return m_socket; -} - -void AbstractCommand::_readData() -{ - QByteArray arr = m_socket->readAll(); - dataReceived(arr); -} - -void AbstractCommand::_disconnect() -{ -} - -///////////////////////////////////////////////////// -// Create File Command Implementation // -///////////////////////////////////////////////////// -CreateFileCommand::CreateFileCommand() -: m_dataCount(0) -{ - debugOutput(0, "CreateFileCommand::CreateFileCommand"); - m_options.fileSize= -1; -} - -CreateFileCommand::~CreateFileCommand() -{ - debugOutput(0, "CreateFileCommand::~CreateFileCommand"); - if (m_file.isOpen()) { - fprintf(stderr, "****************FILE IS STILL OPENED AND HAVENT FINISHED WRITING**********************\n"); - fprintf(stderr, "Current: %d Expected: %d\n", m_dataCount , m_options.fileSize); - m_file.close(); - } -} - -void CreateFileCommand::dataReceived(QByteArray &data) -{ - bool successful = true; - // If we haven't received the options yet - if (m_options.fileSize == -1) { - CreateFileOptions* opt = (CreateFileOptions*) data.data(); - memcpy(&m_options , opt , sizeof(CreateFileOptions)); - - if (QFileInfo(QString::fromLatin1(m_options.fileName)).exists()) { - if (m_options.overwriteExisting) { -#ifdef Q_OS_WINCE - SetFileAttributes(QFileInfo(m_options.fileName).absoluteFilePath().utf16(), FILE_ATTRIBUTE_NORMAL); -#endif - QFile::remove(m_options.fileName); - } else - successful = false; - } - m_file.setFileName(QString::fromLatin1(m_options.fileName)); - if (!m_file.open(QIODevice::WriteOnly)) - successful = false; - else - debugOutput(3, QString::fromLatin1("Creating file: %1").arg(m_options.fileName)); - } else { // write buffer on disc - if (!m_file.isOpen()) - return; - m_file.write(data); - m_dataCount += data.size(); - if (m_dataCount >= m_options.fileSize) { - // We do not care about more data than announced - m_file.close(); - } - } - - if (successful) - reportSuccess(); - else - reportError(); -} - -void CreateFileCommand::commandFinished() -{ - debugOutput(0, "CreateFileCommand::commandFinished"); -#ifdef Q_OS_WIN - // We need to set the file attributes for intelligent time comparisons - QString tmpFile = QString::fromLatin1(m_options.fileName); - HANDLE handle = CreateFile(tmpFile.utf16(), GENERIC_WRITE, 0, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0); - if (handle != INVALID_HANDLE_VALUE) { - SetFileTime(handle, &(m_options.fileTime), NULL, NULL); - CloseHandle(handle); - } - SetFileAttributes(tmpFile.utf16(), m_options.fileAttributes); -#endif -} - -///////////////////////////////////////////////////// -// Create Directory Command Implementation // -///////////////////////////////////////////////////// -CreateDirectoryCommand::CreateDirectoryCommand() - : AbstractCommand() -{ - debugOutput(0, "CreateDirectoryCommand::CreateDirectoryCommand"); -} - -CreateDirectoryCommand::~CreateDirectoryCommand() -{ - debugOutput(0, "CreateDirectoryCommand::~CreateDirectoryCommand()"); -} - -void CreateDirectoryCommand::dataReceived(QByteArray &data) -{ - debugOutput(0, "CreateDirectoryCommand::dataReceived()"); - CreateDirectoryOptions* options = (CreateDirectoryOptions*) data.data(); - debugOutput(3, QString::fromLatin1("Creating directory: %1").arg(options->dirName)); - bool success = true; - QDir dir; - if (options->recursively) - success = dir.mkpath(options->dirName); - else - success = dir.mkdir(options->dirName); - - if (success) - reportSuccess(); - else - reportError(); -} - -void CreateDirectoryCommand::commandFinished() -{ - debugOutput(0, "CreateDirectoryCommand::commandFinished()"); -} - -///////////////////////////////////////////////////// -// Copy File Command Implementation // -///////////////////////////////////////////////////// -CopyFileCommand::CopyFileCommand() - : AbstractCommand() -{ - debugOutput(0, "CopyFileCommand::CopyFileCommand()"); -} - -CopyFileCommand::~CopyFileCommand() -{ - debugOutput(0, "CopyFileCommand::~CopyFileCommand()"); -} - -void CopyFileCommand::dataReceived(QByteArray &data) -{ - debugOutput(0, "CopyFileCommand::dataReceived()"); - CopyFileOptions* options = (CopyFileOptions*) data.data(); - debugOutput(3, QString::fromLatin1("Copy File: %1 -> %2").arg(options->from).arg(options->to)); - bool success = true; - if (QFileInfo(options->to).exists()) { - if (options->overwriteExisting) - QFile::remove(options->to); - else - success = false; - } - if (success) - if (!QFile::copy(options->from , options->to)) - success = false; - - if (success) - reportSuccess(); - else - reportError(); -} - -void CopyFileCommand::commandFinished() -{ - debugOutput(0, "CopyFileCommand::commandFinished()"); -} - -///////////////////////////////////////////////////// -// Copy Directory Command Implementation // -///////////////////////////////////////////////////// -CopyDirectoryCommand::CopyDirectoryCommand() - : AbstractCommand() -{ - debugOutput(0, "CopyDirectoryCommand::CopyDirectoryCommand()"); -} - -CopyDirectoryCommand::~CopyDirectoryCommand() -{ - debugOutput(0, "CopyDirectoryCommand::~CopyDirectoryCommand()"); -} - -void CopyDirectoryCommand::dataReceived(QByteArray &data) -{ - debugOutput(0, "CopyDirectoryCommand::dataReceived()"); - CopyDirectoryOptions* options = (CopyDirectoryOptions*) data.data(); - debugOutput(3, QString::fromLatin1("Copy Directory: %1 %2").arg(options->from).arg(options->to)); - if (copyDir(QLatin1String(options->from) , QLatin1String(options->to) , options->recursive)) - reportSuccess(); - else - reportError(); -} - -void CopyDirectoryCommand::commandFinished() -{ - debugOutput(0, "CopyDirectoryCommand::commandFinished()"); -} - -bool CopyDirectoryCommand::copyDir(const QString &from, const QString &to, bool recursive) -{ - QDir().mkpath(to); - QDir sourceDir(from); - QDir destDir(to); - QStringList entries = sourceDir.entryList(QDir::Dirs | QDir::Files | QDir::NoDotAndDotDot); - foreach (QString item , entries) { - QString itemFrom = sourceDir.absoluteFilePath(item); - QString itemTo = destDir.absoluteFilePath(item); - if (QFileInfo(item).isDir()) { - if (recursive && !copyDir(itemFrom, itemTo, recursive)) - return false; - } else { - if (!QFile::copy(itemFrom, itemTo)) - return false; - } - } - return true; -} - -///////////////////////////////////////////////////// -// Delete File Command Implementation // -///////////////////////////////////////////////////// -DeleteFileCommand::DeleteFileCommand() - : AbstractCommand() -{ - debugOutput(0, "DeleteFileCommand::DeleteFileCommand()"); -} - -DeleteFileCommand::~DeleteFileCommand() -{ - debugOutput(0, "DeleteFileCommand::~DeleteFileCommand()"); -} - -void DeleteFileCommand::dataReceived(QByteArray &data) -{ - debugOutput(0, "DeleteFileCommand::dataReceived()"); - DeleteFileOptions* options = (DeleteFileOptions*) data.data(); - debugOutput(3, QString::fromLatin1("Delete File: %1").arg(options->fileName)); - bool success = true; - QFile file(options->fileName); - if (file.exists()) { -#ifdef Q_OS_WINCE - SetFileAttributes(QFileInfo(options->fileName).absoluteFilePath().utf16(), FILE_ATTRIBUTE_NORMAL); -#endif - success = file.remove(); - } else - success = false; - - if (success) - reportSuccess(); - else - reportError(); -} - -void DeleteFileCommand::commandFinished() -{ - debugOutput(0, "DeleteFileCommand::commandFinished()"); -} - -///////////////////////////////////////////////////// -// Delete Directory Command Implementation // -///////////////////////////////////////////////////// -DeleteDirectoryCommand::DeleteDirectoryCommand() - : AbstractCommand() -{ - debugOutput(0, "DeleteDirectoryCommand::DeleteDirectoryCommand()"); -} - -DeleteDirectoryCommand::~DeleteDirectoryCommand() -{ - debugOutput(0, "DeleteDirectoryCommand::~DeleteDirectoryCommand()"); -} - -void DeleteDirectoryCommand::dataReceived(QByteArray &data) -{ - debugOutput(0, "DeleteDirectoryCommand::dataReceived()"); - DeleteDirectoryOptions* options = (DeleteDirectoryOptions*) data.data(); - debugOutput(3, QString::fromLatin1("Delete directory: %1").arg(options->dirName)); - if (deleteDirectory(QLatin1String(options->dirName), options->recursive, options->failIfContentExists)) - reportSuccess(); - else - reportError(); -} - -void DeleteDirectoryCommand::commandFinished() -{ - debugOutput(0, "DeleteDirectoryCommand::commandFinished()"); -} - -bool DeleteDirectoryCommand::deleteDirectory(const QString &dirName, bool recursive, bool failIfContentExists) -{ - QDir dir(dirName); - if (!dir.exists()) - return false; - - QStringList itemList = dir.entryList(QDir::Files | QDir::Dirs | QDir::NoDotAndDotDot); - if (itemList.size() > 0 && failIfContentExists) - return false; - - foreach (QString item, itemList) { - QString itemName = dir.absoluteFilePath(item); - if (QFileInfo(itemName).isDir()) { - if (recursive && !deleteDirectory(itemName, recursive, failIfContentExists)) - return false; - } else { - if (!dir.remove(item)) - return false; - } - } - QString lastName = dir.dirName(); - dir.cdUp(); - dir.rmpath(lastName); - return true; -} - -///////////////////////////////////////////////////// -// Execute Command Implementation // -///////////////////////////////////////////////////// -ExecuteCommand::ExecuteCommand() - : AbstractCommand() - , m_argumentCount(0) - , m_timeout(-1) -{ - debugOutput(0, "ExecuteCommand::ExecuteCommand()"); -} - -ExecuteCommand::~ExecuteCommand() -{ - debugOutput(0, "ExecuteCommand::~ExecuteCommand()"); -} - -void ExecuteCommand::dataReceived(QByteArray &data) -{ - debugOutput(0, "ExecuteCommand::dataReceived()"); - - if (m_argumentCount == 0) { - ExecuteOptions* options = (ExecuteOptions*) data.data(); - if (!QFileInfo(options->appName).exists()) { - debugOutput(1, "Error execute: application does not exist"); - reportError(); - return; - } - - m_program = QLatin1String(options->appName); - m_argumentCount = options->argumentsCount; - m_waitFinished = options->waitForFinished; - m_timeout = options->timeout; - if (m_argumentCount == 0) - m_argumentCount = -1; // to trigger startup on next receive - reportSuccess(); - } else if (m_arguments.size() < m_argumentCount) { - m_arguments += data; - reportSuccess(); - } else { // do the execution - if (data == COMMAND_SUCCESS) - _doExecute(); - } -} - -void ExecuteCommand::_doExecute() -{ - debugOutput(0, "ExecuteCommand::_doExecute()"); - debugOutput(3, QString::fromLatin1("Execute: %1 %2").arg(m_program).arg(m_arguments.join(" "))); - if (m_waitFinished) { - QProcess process; - process.start(m_program, m_arguments); - if (process.waitForFinished(m_timeout) == false || process.exitCode() < 0) - reportError(); - else - reportSuccess(); - } else { - if (QProcess::startDetached(m_program, m_arguments)) - reportSuccess(); - else - reportError(); - } -} -void ExecuteCommand::commandFinished() -{ - debugOutput(0,"ExecuteCommand::commandFinished()"); -} - -///////////////////////////////////////////////////// -// Read File Implementation // -///////////////////////////////////////////////////// -ReadFileCommand::ReadFileCommand() - : AbstractCommand() - , m_currentPos(0) -{ - debugOutput(0, "ReadFileCommand::ReadFileCommand()"); - m_fileName.clear(); -} - -ReadFileCommand::~ReadFileCommand() -{ - debugOutput(0, "ReadFileCommand::~ReadFileCommand()"); - if (m_file.isOpen()) - m_file.close(); -} - -void ReadFileCommand::dataReceived(QByteArray &data) -{ - debugOutput(0, "ReadFileCommand::dataReceived()"); - if (m_fileName.isEmpty()) { - ReadFileOptions* option = (ReadFileOptions*) data.data(); - m_fileName = QLatin1String(option->fileName); - QFileInfo info(m_fileName); - m_file.setFileName(m_fileName); - ReadFileReply reply; - if (!info.exists() || !info.isFile() || !m_file.open(QIODevice::ReadOnly)) - reply.fileValid = false; - else - reply.fileValid = true; - reply.fileSize = info.size(); - m_fileSize = reply.fileSize; - socket()->write((char*) &reply, sizeof(reply)); - debugOutput(3, QString::fromLatin1("Reading file: %1").arg(m_fileName)); - } else { - QTcpSocket* sock = socket(); // design failure??? - if (data != COMMAND_SUCCESS || m_currentPos >= m_fileSize) { - sock->disconnectFromHost(); - return; - } - const int bufferSize = 1024; - QByteArray buffer = m_file.read(bufferSize); - m_currentPos += buffer.size(); - sock->write(buffer); - sock->waitForBytesWritten(); - } -} - -void ReadFileCommand::commandFinished() -{ - debugOutput(0, "ReadFileCommand::commandFinished()"); -} - -///////////////////////////////////////////////////// -// Read Directory Implementation // -///////////////////////////////////////////////////// -ReadDirectoryCommand::ReadDirectoryCommand() - : AbstractCommand() - , m_iterator(0) -{ - debugOutput(0, "ReadDirectoryCommand::ReadDirectoryCommand"); - m_dirName.clear(); -} - -ReadDirectoryCommand::~ReadDirectoryCommand() -{ - debugOutput(0, "ReadDirectoryCommand::~ReadDirectoryCommand()"); - delete m_iterator; -} - -void ReadDirectoryCommand::dataReceived(QByteArray &data) -{ - debugOutput(0, "ReadDirectoryCommand::dataReceived()"); - QTcpSocket* sock = socket(); - if (m_dirName.isEmpty()) { - ReadDirectoryOptions* option = (ReadDirectoryOptions*) data.data(); - QFileInfo info(QLatin1String(option->dirName)); - debugOutput(3, QString::fromLatin1("Reading Directory entries: %1").arg(option->dirName)); - ReadDirectoryReply reply; - if (!info.exists() || !info.isDir()) { - reply.itemCount = -1; - reply.entryValid = false; - } else { - m_dirName = QLatin1String(option->dirName); - m_dir.setPath(m_dirName); - m_iterator = new QDirIterator(m_dir); - reply.itemCount = m_dir.entryList(QDir::Files | QDir::Dirs | QDir::NoDotAndDotDot).size(); - reply.entryValid = true; - } - sock->write((char*) &reply, sizeof(reply)); - sock->waitForBytesWritten(); - } else { - if (data != COMMAND_SUCCESS) { - qDebug() << "Something went wrong in the meantime"; - return; - } - ReadDirectoryItem reply; - if (m_iterator->hasNext()) { - m_iterator->next(); - QFileInfo info = m_iterator->fileInfo(); - strcpy(reply.name, qPrintable(info.absoluteFilePath())); - reply.isDirectory = info.isDir(); - if (!reply.isDirectory) - reply.size = info.size(); - } - reply.hasMore = m_iterator->hasNext(); - sock->write((char*) &reply, sizeof(reply)); - sock->waitForBytesWritten(); - } -} - -void ReadDirectoryCommand::commandFinished() -{ - debugOutput(0, "ReadDirectoryCommand::commandFinished()"); -} - -///////////////////////////////////////////////////// -// File Time Implementation // -///////////////////////////////////////////////////// -FileTimeCommand::FileTimeCommand() - : AbstractCommand() -{ - debugOutput(0, "FileTimeCommand::FileTimeCommand()"); -} - -FileTimeCommand::~FileTimeCommand() -{ - debugOutput(0, "FileTimeCommand::~FileTimeCommand()"); -} - -void FileTimeCommand::dataReceived(QByteArray &data) -{ - debugOutput(0, "FileTimeCommand::dataReceived()"); - FileTimeOptions* option = (FileTimeOptions*) data.data(); - - FILETIME resultTime; - resultTime.dwLowDateTime = -1; - resultTime.dwHighDateTime = -1; - -#ifdef Q_OS_WIN - QString fileName = QLatin1String(option->fileName); - HANDLE deviceHandle = CreateFile(fileName.utf16(), GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, 0); - debugOutput(3, QString::fromLatin1("Asking FileTime: %1").arg(fileName)); - if (deviceHandle != INVALID_HANDLE_VALUE) { - FILETIME deviceCreationTime; - if (GetFileTime(deviceHandle, &deviceCreationTime, NULL, NULL)) { - resultTime = deviceCreationTime; - } - CloseHandle(deviceHandle); - } -#endif - QTcpSocket* sock = socket(); - sock->write((char*) &resultTime, sizeof(resultTime)); - sock->waitForBytesWritten(); -} - -void FileTimeCommand::commandFinished() -{ - debugOutput(0, "FileTimeCommand::commandFinished()"); -} - -///////////////////////////////////////////////////// -// Time Stamp Implementation // -///////////////////////////////////////////////////// -TimeStampCommand::TimeStampCommand() - : AbstractCommand() -{ - debugOutput(0, "TimeStampCommand::TimeStampCommand()"); -} - -TimeStampCommand::~TimeStampCommand() -{ - debugOutput(0, "TimeStampCommand::~TimeStampCommand()"); -} - -void TimeStampCommand::dataReceived(QByteArray &data) -{ - debugOutput(0, "TimeStampCommand::dataReceived()"); - FILETIME resultTime; - resultTime.dwLowDateTime = -1; - resultTime.dwHighDateTime = -1; - -#ifdef Q_OS_WIN - FILETIME stampTime = *((FILETIME*)data.data()); - - QString tmpFile = QString::fromLatin1("\\qt_tmp_ftime_convert"); - HANDLE remoteHandle = CreateFile(tmpFile.utf16(), GENERIC_WRITE, 0, 0, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0); - if (remoteHandle != INVALID_HANDLE_VALUE) { - if (!SetFileTime(remoteHandle, &stampTime, NULL, NULL)) { - CloseHandle(remoteHandle); - } else { - CloseHandle(remoteHandle); - remoteHandle = CreateFile(tmpFile.utf16(), GENERIC_READ, FILE_SHARE_READ, 0, OPEN_EXISTING, 0, 0); - if (remoteHandle != INVALID_HANDLE_VALUE) { - if (GetFileTime(remoteHandle, &stampTime, NULL, NULL)) - resultTime = stampTime; - CloseHandle(remoteHandle); - DeleteFile(tmpFile.utf16()); - } - } - } - debugOutput(3, QString::fromLatin1("Asking TimeStamp")); -#endif - QTcpSocket* sock = socket(); - sock->write((char*) &resultTime, sizeof(resultTime)); - sock->waitForBytesWritten(); -} - -void TimeStampCommand::commandFinished() -{ - debugOutput(0, "TimeStampCommand::commandFinished()"); -} diff -Nru qttools-opensource-src-5.7.1/src/qtestlib/wince/cetcpsyncserver/commands.h qttools-opensource-src-5.9.1/src/qtestlib/wince/cetcpsyncserver/commands.h --- qttools-opensource-src-5.7.1/src/qtestlib/wince/cetcpsyncserver/commands.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/qtestlib/wince/cetcpsyncserver/commands.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,290 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the tools applications of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ -#ifndef COMMANDS_INCL -#define COMMANDS_INCL - -#include "transfer_global.h" - -#include -#include -#include -#include -#include -#include - -// debug output -#define DEBUG_LEVEL 2 -inline void debugOutput(int level, const char* text) -{ - if (level >= DEBUG_LEVEL) - qDebug() << text; -} - -inline void debugOutput(int level, const QString &text) -{ - if (level >= DEBUG_LEVEL) - qDebug() << text; -} -// Basic abtract command class -class AbstractCommand : public QObject -{ - Q_OBJECT -public: - AbstractCommand(); - virtual ~AbstractCommand(); - - void setSocket(QTcpSocket*); - QTcpSocket* socket(); - - void reportSuccess(); - void reportError(); - -public slots: - virtual void dataReceived(QByteArray&); - virtual void commandFinished(); - -private slots: - void _readData(); - void _disconnect(); - -private: - QTcpSocket* m_socket; -}; - -// File Creation class -class CreateFileCommand : public AbstractCommand -{ - Q_OBJECT -public: - CreateFileCommand(); - ~CreateFileCommand(); - -public slots: - void dataReceived(QByteArray&); - void commandFinished(); - -private: - CreateFileOptions m_options; - QFile m_file; - int m_dataCount; -}; - -inline AbstractCommand* instCreateFile() { return new CreateFileCommand(); } - -// Directory Creation class -class CreateDirectoryCommand : public AbstractCommand -{ - Q_OBJECT -public: - CreateDirectoryCommand(); - ~CreateDirectoryCommand(); - -public slots: - void dataReceived(QByteArray&); - void commandFinished(); -}; -inline AbstractCommand* instCreateDirectory() { return new CreateDirectoryCommand(); } - -// File copy class -class CopyFileCommand : public AbstractCommand -{ - Q_OBJECT -public: - CopyFileCommand(); - ~CopyFileCommand(); - -public slots: - void dataReceived(QByteArray&); - void commandFinished(); -}; -inline AbstractCommand* instCopyFile() { return new CopyFileCommand(); } - -// Copy directory class -class CopyDirectoryCommand : public AbstractCommand -{ - Q_OBJECT -public: - CopyDirectoryCommand(); - ~CopyDirectoryCommand(); - -public slots: - void dataReceived(QByteArray&); - void commandFinished(); -private: - bool copyDir(const QString &from, const QString &to, bool recursive); -}; -inline AbstractCommand* instCopyDirectory() { return new CopyDirectoryCommand(); } - -// Delete File class -class DeleteFileCommand : public AbstractCommand -{ - Q_OBJECT -public: - DeleteFileCommand(); - ~DeleteFileCommand(); -public slots: - void dataReceived(QByteArray&); - void commandFinished(); -}; -inline AbstractCommand* instDeleteFile() { return new DeleteFileCommand(); } - -// Delete Directory class -class DeleteDirectoryCommand : public AbstractCommand -{ - Q_OBJECT -public: - DeleteDirectoryCommand(); - ~DeleteDirectoryCommand(); -public slots: - void dataReceived(QByteArray&); - void commandFinished(); -private: - bool deleteDirectory(const QString &dirName, bool recursive, bool failIfContentExists); -}; -inline AbstractCommand* instDeleteDirectory() { return new DeleteDirectoryCommand(); } - -// Execute application class -class ExecuteCommand : public AbstractCommand -{ - Q_OBJECT -public: - ExecuteCommand(); - ~ExecuteCommand(); -public slots: - void dataReceived(QByteArray&); - void commandFinished(); -private: - void _doExecute(); - QString m_program; - QStringList m_arguments; - int m_argumentCount; - bool m_waitFinished; - int m_timeout; -}; -inline AbstractCommand* instExecution() { return new ExecuteCommand(); } - -// Read File class -class ReadFileCommand : public AbstractCommand -{ - Q_OBJECT -public: - ReadFileCommand(); - ~ReadFileCommand(); -public slots: - void dataReceived(QByteArray&); - void commandFinished(); -private: - QString m_fileName; - QFile m_file; - qint64 m_currentPos; - qint64 m_fileSize; -}; -inline AbstractCommand* instReadFile() { return new ReadFileCommand(); } - -// Read Directory class -class ReadDirectoryCommand : public AbstractCommand -{ - Q_OBJECT -public: - ReadDirectoryCommand(); - ~ReadDirectoryCommand(); -public slots: - void dataReceived(QByteArray&); - void commandFinished(); -private: - QString m_dirName; - QDir m_dir; - QDirIterator* m_iterator; -}; -inline AbstractCommand* instReadDirectory() { return new ReadDirectoryCommand(); } - -// Read File Time class -class FileTimeCommand : public AbstractCommand -{ - Q_OBJECT -public: - FileTimeCommand(); - ~FileTimeCommand(); -public slots: - void dataReceived(QByteArray&); - void commandFinished(); -}; -inline AbstractCommand* instFileTime() { return new FileTimeCommand(); } - -// Time stamp class -class TimeStampCommand : public AbstractCommand -{ - Q_OBJECT -public: - TimeStampCommand(); - ~TimeStampCommand(); -public slots: - void dataReceived(QByteArray&); - void commandFinished(); -}; -inline AbstractCommand* instTimeStamp() { return new TimeStampCommand(); } - -// Access part -typedef AbstractCommand* (*instantiator)(); - -struct CommandInfo -{ - CommandInfo(const QString &name, instantiator func) : commandName(name) , commandFunc(func) { } - QString commandName; - instantiator commandFunc; -}; - -inline QList availableCommands() -{ - QList list; - list.append(CommandInfo(QLatin1String(COMMAND_CREATE_FILE), instCreateFile)); - list.append(CommandInfo(QLatin1String(COMMAND_CREATE_DIRECTORY), instCreateDirectory)); - list.append(CommandInfo(QLatin1String(COMMAND_COPY_FILE), instCopyFile)); - list.append(CommandInfo(QLatin1String(COMMAND_COPY_DIRECTORY), instCopyDirectory)); - list.append(CommandInfo(QLatin1String(COMMAND_DELETE_FILE), instDeleteFile)); - list.append(CommandInfo(QLatin1String(COMMAND_DELETE_DIRECTORY), instDeleteDirectory)); - list.append(CommandInfo(QLatin1String(COMMAND_EXECUTE), instExecution)); - list.append(CommandInfo(QLatin1String(COMMAND_READ_FILE), instReadFile)); - list.append(CommandInfo(QLatin1String(COMMAND_READ_DIRECTORY), instReadDirectory)); - list.append(CommandInfo(QLatin1String(COMMAND_FILE_TIME), instFileTime)); - list.append(CommandInfo(QLatin1String(COMMAND_TIME_STAMP), instTimeStamp)); - return list; -} - -#endif diff -Nru qttools-opensource-src-5.7.1/src/qtestlib/wince/cetcpsyncserver/connectionmanager.cpp qttools-opensource-src-5.9.1/src/qtestlib/wince/cetcpsyncserver/connectionmanager.cpp --- qttools-opensource-src-5.7.1/src/qtestlib/wince/cetcpsyncserver/connectionmanager.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/qtestlib/wince/cetcpsyncserver/connectionmanager.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,136 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the tools applications of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ -#include "connectionmanager.h" -#include "commands.h" -#include - -ConnectionManager::ConnectionManager() - : QObject() - , m_server(0) -{ - debugOutput(0, "ConnectionManager::ConnectionManager()"); -} - -ConnectionManager::~ConnectionManager() -{ - debugOutput(0, "ConnectionManager::~ConnectionManager()"); - cleanUp(); -} - -bool ConnectionManager::init() -{ - debugOutput(0, "ConnectionManager::init()"); - debugOutput(3, "Initializing server..."); - cleanUp(); - m_server = new QTcpServer(this); - connect(m_server, SIGNAL(newConnection()), this, SLOT(newConnection())); - bool result = m_server->listen(QHostAddress::Any, SERVER_PORT); - if (!result) - debugOutput(3, QString::fromLatin1(" Error: Server start failed:") + m_server->errorString()); - debugOutput(3, " Waiting for action"); - return result; -} - -void ConnectionManager::cleanUp() -{ - debugOutput(0, "ConnectionManager::cleanUp()"); - - if (m_server) { - debugOutput(1, "Removing server instance..."); - disconnect(m_server, SIGNAL(newConnection()), this, SLOT(newConnection())); - delete m_server; - m_server = 0; - } -} - -void ConnectionManager::newConnection() -{ - debugOutput(0, "ConnectionManager::newConnection()"); - - QTcpSocket* connection = m_server->nextPendingConnection(); - if (!connection) { - debugOutput(3, "Received connection has empty socket"); - return; - } - debugOutput(0, QString::fromLatin1(" received a connection: %1").arg((int) connection)); - new Connection(connection); -} - -Connection::Connection(QTcpSocket *socket) - : QObject() - , m_connection(socket) - , m_command(0) -{ - connect(m_connection, SIGNAL(readyRead()), this, SLOT(receiveCommand())); - connect(m_connection, SIGNAL(disconnected()), this, SLOT(closedConnection())); -} - -Connection::~Connection() -{ - if (m_command) { - m_command->commandFinished(); - delete m_command; - m_command = 0; - } - delete m_connection; -} - -void Connection::receiveCommand() -{ - QByteArray arr = m_connection->readAll(); - debugOutput(1, QString::fromLatin1("Command received: ") + (arr)); - QList commands = availableCommands(); - for(QList::iterator it = commands.begin(); it != commands.end(); ++it) { - if (it->commandName == QString::fromLatin1(arr)) { - debugOutput(1, "Found command in list"); - disconnect(m_connection, SIGNAL(readyRead()), this, SLOT(receiveCommand())); - AbstractCommand* command = (*it).commandFunc(); - command->setSocket(m_connection); - m_command = command; - return; - } - } - debugOutput(2, QString::fromLatin1("Unknown command received: ") + (arr)); -} - -void Connection::closedConnection() -{ - debugOutput(0, "connection being closed..."); - this->deleteLater(); -} diff -Nru qttools-opensource-src-5.7.1/src/qtestlib/wince/cetcpsyncserver/connectionmanager.h qttools-opensource-src-5.9.1/src/qtestlib/wince/cetcpsyncserver/connectionmanager.h --- qttools-opensource-src-5.7.1/src/qtestlib/wince/cetcpsyncserver/connectionmanager.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/qtestlib/wince/cetcpsyncserver/connectionmanager.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,81 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the tools applications of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ -#ifndef CONNECTION_MANAGER_INCL -#define CONNECTION_MANAGER_INCL - -#include "transfer_global.h" -#include "commands.h" - -#include -#include - -class Connection : public QObject -{ - Q_OBJECT -public: - Connection(QTcpSocket* socket); - ~Connection(); - -public slots: - void receiveCommand(); - void closedConnection(); - -private: - QTcpSocket* m_connection; - AbstractCommand* m_command; -}; - -class ConnectionManager : public QObject -{ - Q_OBJECT -public: - ConnectionManager(); - ~ConnectionManager(); - - bool init(); - -public slots: - void cleanUp(); - void newConnection(); - -private: - QTcpServer* m_server; -}; - -#endif diff -Nru qttools-opensource-src-5.7.1/src/qtestlib/wince/cetcpsyncserver/main.cpp qttools-opensource-src-5.9.1/src/qtestlib/wince/cetcpsyncserver/main.cpp --- qttools-opensource-src-5.7.1/src/qtestlib/wince/cetcpsyncserver/main.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/qtestlib/wince/cetcpsyncserver/main.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,61 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the tools applications of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ -#include "connectionmanager.h" - -#include -#include - -void messageOutput(QtMsgType type, const QMessageLogContext &, const QString &msg) -{ - switch(type) { - case QtDebugMsg: fprintf(stderr, "Debug: %s\n", qPrintable(msg)); break; - case QtWarningMsg: fprintf(stderr, "Warning: %s\n", qPrintable(msg)); break; - default: fprintf(stderr, "Some Msg: %s\n", qPrintable(msg)); break; - } -} - -int main(int argc, char **argv) -{ - qInstallMessageHandler(messageOutput); - - QCoreApplication app(argc, argv); - ConnectionManager manager; - manager.init(); - return app.exec(); -} diff -Nru qttools-opensource-src-5.7.1/src/qtestlib/wince/cetcpsyncserver/transfer_global.h qttools-opensource-src-5.9.1/src/qtestlib/wince/cetcpsyncserver/transfer_global.h --- qttools-opensource-src-5.7.1/src/qtestlib/wince/cetcpsyncserver/transfer_global.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/qtestlib/wince/cetcpsyncserver/transfer_global.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,157 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the tools applications of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ -#ifndef TRANSFER_GLOBAL_H -#define TRANSFER_GLOBAL_H - -#include -#ifdef Q_OS_WIN -#include -#endif - -#define SERVER_PORT 12145 - -#define MAX_NAME_LENGTH 512 -#define MAX_ARGUMENTS 10 - -// Defines for commands sent/received -#define COMMAND_CREATE_FILE "CREATEFILE" -#define COMMAND_CREATE_DIRECTORY "CREATEDIR" -#define COMMAND_COPY_FILE "COPYFILE" -#define COMMAND_COPY_DIRECTORY "COPYDIR" -#define COMMAND_DELETE_FILE "DELETEFILE" -#define COMMAND_DELETE_DIRECTORY "DELETEDIR" -#define COMMAND_EXECUTE "EXECUTE" -#define COMMAND_QUIT_SERVER "QUIT" -#define COMMAND_FILE_TIME "FILETIME" -#define COMMAND_TIME_STAMP "TIMESTAMP" - -// Report back commands -#define COMMAND_SUCCESS "SUCCESS" -#define COMMAND_ERROR "ERROR" - -// Defines for commands that send data back to requester -#define COMMAND_READ_FILE "READFILE" -#define COMMAND_READ_DIRECTORY "READDIR" - -#include -// Option-Structures for commands - -struct CreateFileOptions -{ - char fileName[MAX_NAME_LENGTH]; -#ifdef Q_OS_WIN - FILETIME fileTime; - DWORD fileAttributes; -#endif - int fileSize; - bool overwriteExisting; -}; - -struct CreateDirectoryOptions -{ - char dirName[MAX_NAME_LENGTH]; - bool recursively; // in case of \foo\bar create \foo if it does not exist -}; - -struct CopyFileOptions -{ - char from[MAX_NAME_LENGTH]; - char to[MAX_NAME_LENGTH]; - bool overwriteExisting; -}; - -struct CopyDirectoryOptions -{ - char from[MAX_NAME_LENGTH]; - char to[MAX_NAME_LENGTH]; - bool recursive; -}; - -struct DeleteFileOptions -{ - char fileName[MAX_NAME_LENGTH]; -}; - -struct DeleteDirectoryOptions -{ - char dirName[MAX_NAME_LENGTH]; - bool recursive; - bool failIfContentExists; -}; - -struct ExecuteOptions -{ - char appName[MAX_NAME_LENGTH]; - int argumentsCount; - bool waitForFinished; - int timeout; -}; - -struct ReadFileOptions -{ - char fileName[MAX_NAME_LENGTH]; -}; - -struct ReadFileReply -{ - qint64 fileSize; - bool fileValid; -}; - -struct ReadDirectoryOptions -{ - char dirName[MAX_NAME_LENGTH]; -}; - -struct ReadDirectoryItem -{ - char name[MAX_NAME_LENGTH]; - qint64 size; - bool isDirectory; - bool hasMore; -}; - -#define FileTimeOptions ReadFileOptions - -struct ReadDirectoryReply -{ - bool entryValid; - int itemCount; // might change during iteration -}; -#endif diff -Nru qttools-opensource-src-5.7.1/src/qtestlib/wince/cetest/activesyncconnection.cpp qttools-opensource-src-5.9.1/src/qtestlib/wince/cetest/activesyncconnection.cpp --- qttools-opensource-src-5.7.1/src/qtestlib/wince/cetest/activesyncconnection.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/qtestlib/wince/cetest/activesyncconnection.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,638 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the tools applications of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "activesyncconnection.h" -#include -#include -#include -#include - -extern void debugOutput(const QString& text, int level); - -ActiveSyncConnection::ActiveSyncConnection() - : AbstractRemoteConnection() - , connected(false) -{ -} - -ActiveSyncConnection::~ActiveSyncConnection() -{ - if (isConnected()) - disconnect(); -} - -bool ActiveSyncConnection::connect(QVariantList&) -{ - if (connected) - return true; - connected = false; - RAPIINIT init; - init.cbSize = sizeof(init); - if (CeRapiInitEx(&init) != S_OK) - return connected; - - DWORD res; - res = WaitForMultipleObjects(1,&(init.heRapiInit),true, 5000); - if ((res == -1) || (res == WAIT_TIMEOUT) || (init.hrRapiInit != S_OK)) - return connected; - - connected = true; - return connected; -} - -void ActiveSyncConnection::disconnect() -{ - connected = false; - CeRapiUninit(); -} - -bool ActiveSyncConnection::isConnected() const -{ - return connected; -} - -bool ActiveSyncConnection::copyFileToDevice(const QString &localSource, const QString &deviceDest, bool failIfExists) -{ - if (failIfExists) { - CE_FIND_DATA search; - HANDLE searchHandle = CeFindFirstFile(deviceDest.utf16(), &search); - if (searchHandle != INVALID_HANDLE_VALUE) { - CeFindClose(searchHandle); - return false; - } - } - - QFile file(localSource); - if (!file.exists()) - return false; - if (!file.open(QIODevice::ReadOnly)) { - debugOutput(QString::fromLatin1(" Could not open source file"),2); - if (file.size() == 0) { - // Create an empy file - deleteFile(deviceDest); - HANDLE deviceHandle = CeCreateFile(deviceDest.utf16(), GENERIC_WRITE, 0, 0, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0); - if (deviceHandle != INVALID_HANDLE_VALUE) { - CeCloseHandle(deviceHandle); - return true; - } - } else { - qWarning("Could not open %s: %s", qPrintable(localSource), qPrintable(file.errorString())); - } - return false; - } - - deleteFile(deviceDest); - HANDLE deviceHandle = CeCreateFile(deviceDest.utf16(), GENERIC_WRITE, 0, 0, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0); - if (deviceHandle == INVALID_HANDLE_VALUE) { - qWarning("Could not create %s: %s", qPrintable(deviceDest), strwinerror(CeGetLastError()).constData()); - return false; - } - - DWORD written = 0; - int currentPos = 0; - int size = file.size(); - DWORD toWrite = 0; - const int bufferSize = 65000; - QByteArray data; - data.reserve(bufferSize); - while (currentPos < size) { - data = file.read(bufferSize); - if (data.size() <= 0) { - wprintf( L"Error while reading file!\n"); - return false; - } - if (size - currentPos > bufferSize ) - toWrite = bufferSize; - else - toWrite = size - currentPos; - if (toWrite == 0) - break; - if (!CeWriteFile(deviceHandle, data.data() , toWrite, &written, NULL)) { - qWarning("Could not write to %s: %s", qPrintable(deviceDest), strwinerror(CeGetLastError()).constData()); - return false; - } - currentPos += written; - data.clear(); - wprintf( L"%s -> %s (%d / %d) %d %%\r", localSource.utf16() , deviceDest.utf16(), currentPos , size, (100*currentPos)/size ); - } - wprintf(L"\n"); - - // Copy FileTime for update verification - FILETIME creationTime, accessTime, writeTime; - HANDLE localHandle = CreateFile(localSource.utf16(), GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, 0); - if (localHandle != INVALID_HANDLE_VALUE) { - if (GetFileTime(localHandle, &creationTime, &accessTime, &writeTime)) { - LocalFileTimeToFileTime(&writeTime, &writeTime); - if (!CeSetFileTime(deviceHandle, &writeTime, NULL, NULL)) { - debugOutput(QString::fromLatin1(" Could not write time values"), 0); - } - } - CloseHandle(localHandle); - } - CeCloseHandle(deviceHandle); - - DWORD attributes = GetFileAttributes(localSource.utf16()); - if (attributes != -1 ) - CeSetFileAttributes(deviceDest.utf16(), attributes); - return true; -} - -bool ActiveSyncConnection::copyDirectoryToDevice(const QString &localSource, const QString &deviceDest, bool recursive) -{ - QDir dir(localSource); - if (!dir.exists()) - return false; - - deleteDirectory(deviceDest, recursive); - CeCreateDirectory(deviceDest.utf16(), NULL); - foreach(QString entry, dir.entryList(QDir::AllEntries | QDir::NoDotAndDotDot)) { - QString source = localSource + "\\" + entry; - QString target = deviceDest + "\\" + entry; - QFileInfo info(source); - if (info.isDir()) { - if (recursive) { - if (!copyDirectoryToDevice(source, target, recursive)) - return false; - } - } else { - if (!copyFileToDevice(source, target)) - return false; - } - } - return true; -} - -bool ActiveSyncConnection::copyFileFromDevice(const QString &deviceSource, const QString &localDest, bool failIfExists) -{ - QFile target(localDest); - if (failIfExists && target.exists()) { - debugOutput(QString::fromLatin1(" Not allowed to overwrite file"), 2); - return false; - } - - if (target.exists()) - target.remove(); - - HANDLE deviceHandle = CeCreateFile(deviceSource.utf16(), GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, 0); - if (deviceHandle == INVALID_HANDLE_VALUE) { - debugOutput(QString::fromLatin1(" Could not open file on device"), 2); - return false; - } - - DWORD fileSize = CeGetFileSize( deviceHandle, NULL ); - if (fileSize == -1) { - debugOutput(QString::fromLatin1(" Could not stat filesize of remote file"), 2); - CeCloseHandle(deviceHandle); - return false; - } - - if (!target.open(QIODevice::WriteOnly | QIODevice::Truncate)) { - debugOutput(QString::fromLatin1(" Could not open local file for writing"), 2); - CeCloseHandle(deviceHandle); - return false; - } - - int bufferSize = 65000; - char *buffer = (char*) malloc(bufferSize); - DWORD bufferRead = 0; - DWORD bufferWritten = 0; - bool readUntilEnd = false; - while(CeReadFile(deviceHandle, buffer, bufferSize, &bufferRead, NULL)) { - if (bufferRead == 0) { - readUntilEnd = true; - break; - } - target.write(buffer, bufferRead); - bufferWritten += bufferRead; - wprintf(L"%s -> %s (%d / %d) %d %%\r", deviceSource.utf16(), localDest.utf16(), bufferWritten, fileSize, (100*bufferWritten)/fileSize); - } - wprintf(L"\n"); - - if (!readUntilEnd) { - debugOutput(QString::fromLatin1(" an error occurred during copy"), 2); - return false; - } - - CeCloseHandle(deviceHandle); - return true; -} - -bool ActiveSyncConnection::copyDirectoryFromDevice(const QString &deviceSource, const QString &localDest, bool recursive) -{ - if (!QDir(localDest).exists() && !QDir(localDest).mkpath(QDir(localDest).absolutePath())) { - debugOutput(QString::fromLatin1(" Could not create local path"), 2); - } - - QString searchArg = deviceSource + "\\*"; - CE_FIND_DATA data; - HANDLE searchHandle = CeFindFirstFile(searchArg.utf16(), &data); - if (searchHandle == INVALID_HANDLE_VALUE) { - // We return true because we might be in a recursive call - // where nothing is to copy and the copy process - // might still be correct - return true; - } - - do { - QString srcFile = deviceSource + "\\" + QString::fromWCharArray(data.cFileName); - QString destFile = localDest + "\\" + QString::fromWCharArray(data.cFileName); - if ((data.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)) { - if (recursive && !copyDirectoryFromDevice(srcFile, destFile, recursive)) { - wprintf(L"Copy of subdirectory(%s) failed\n", srcFile.utf16()); - return false; - } - } else { - copyFileFromDevice(srcFile, destFile, false); - } - } while(CeFindNextFile(searchHandle, &data)); - CeFindClose(searchHandle); - return true; -} - -bool ActiveSyncConnection::copyFile(const QString &srcFile, const QString &destFile, bool failIfExists) -{ - return CeCopyFile(QDir::toNativeSeparators(srcFile).utf16(), - QDir::toNativeSeparators(destFile).utf16(), failIfExists); -} - -bool ActiveSyncConnection::copyDirectory(const QString &srcDirectory, const QString &destDirectory, - bool recursive) -{ - CeCreateDirectory(destDirectory.utf16(), NULL); - QString searchArg = srcDirectory + "\\*"; - CE_FIND_DATA data; - HANDLE searchHandle = CeFindFirstFile(searchArg.utf16(), &data); - if (searchHandle == INVALID_HANDLE_VALUE) { - // We return true because we might be in a recursive call - // where nothing is to copy and the copy process - // might still be correct - return true; - } - - do { - QString srcFile = srcDirectory + "\\" + QString::fromWCharArray(data.cFileName); - QString destFile = destDirectory + "\\" + QString::fromWCharArray(data.cFileName); - if ((data.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)) { - if (recursive && !copyDirectory(srcFile, destFile, recursive)) { - wprintf(L"Copy of subdirectory(%s) failed\n", srcFile.utf16()); - return false; - } - } else { - debugOutput(QString::fromLatin1("Copy %1 -> %2\n").arg(srcFile).arg(destFile), 0); - CeCopyFile(srcFile.utf16(), destFile.utf16(), false); - } - } while(CeFindNextFile(searchHandle, &data)); - CeFindClose(searchHandle); - return true; -} - -bool ActiveSyncConnection::deleteFile(const QString &fileName) -{ - CeSetFileAttributes(fileName.utf16(), FILE_ATTRIBUTE_NORMAL); - return CeDeleteFile(fileName.utf16()); -} - -bool ActiveSyncConnection::deleteDirectory(const QString &directory, bool recursive, bool failIfContentExists) -{ - HANDLE hFind; - CE_FIND_DATA FindFileData; - QString FileName = directory + "\\*"; - hFind = CeFindFirstFile(FileName.utf16(), &FindFileData); - if( hFind == INVALID_HANDLE_VALUE ) - return CeRemoveDirectory(directory.utf16()); - - if (failIfContentExists) - return false; - - do { - QString FileName = directory + "\\" + QString::fromWCharArray(FindFileData.cFileName); - if((FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)) { - if (recursive) - if (!deleteDirectory(FileName, recursive, failIfContentExists)) - return false; - } else { - if(FindFileData.dwFileAttributes & FILE_ATTRIBUTE_READONLY) - CeSetFileAttributes(FileName.utf16(), FILE_ATTRIBUTE_NORMAL); - if( !CeDeleteFile(FileName.utf16()) ) - break; - } - } while(CeFindNextFile(hFind,&FindFileData)); - CeFindClose(hFind); - - return CeRemoveDirectory(directory.utf16()); -} - -bool ActiveSyncConnection::execute(QString program, QString arguments, int timeout, int *returnValue) -{ - if (!isConnected()) { - qWarning("Cannot execute, connect to device first!"); - return false; - } - - PROCESS_INFORMATION* pid = new PROCESS_INFORMATION; - bool result = false; - if (timeout != 0) { - // If we want to wait, we have to use CeRapiInvoke, as CeCreateProcess has no way to wait - // until the process ends. The lib must have been build and also deployed already. - if (!isConnected() && !connect()) - return false; - - QString dllLocation = "\\Windows\\QtRemote.dll"; - QString functionName = "qRemoteLaunch"; - - DWORD outputSize; - BYTE* output; - IRAPIStream *stream; - int returned = 0; - DWORD error = 0; - HRESULT res = CeRapiInvoke(dllLocation.utf16(), functionName.utf16(), 0, 0, &outputSize, &output, &stream, 0); - if (S_OK != res) { - DWORD ce_error = CeGetLastError(); - if (S_OK != ce_error) { - qWarning("Error invoking %s on %s: %s", qPrintable(functionName), - qPrintable(dllLocation), strwinerror(ce_error).constData()); - } else { - qWarning("Error: %s on %s unexpectedly returned %d", qPrintable(functionName), - qPrintable(dllLocation), res); - } - } else { - DWORD written; - int strSize = program.length(); - if (S_OK != stream->Write(&strSize, sizeof(strSize), &written)) { - qWarning(" Could not write appSize to process"); - return false; - } - if (S_OK != stream->Write(program.utf16(), program.length()*sizeof(wchar_t), &written)) { - qWarning(" Could not write appName to process"); - return false; - } - strSize = arguments.length(); - if (S_OK != stream->Write(&strSize, sizeof(strSize), &written)) { - qWarning(" Could not write argumentSize to process"); - return false; - } - if (S_OK != stream->Write(arguments.utf16(), arguments.length()*sizeof(wchar_t), &written)) { - qWarning(" Could not write arguments to process"); - return false; - } - if (S_OK != stream->Write(&timeout, sizeof(timeout), &written)) { - qWarning(" Could not write waiting option to process"); - return false; - } - - if (S_OK != stream->Read(&returned, sizeof(returned), &written)) { - qWarning(" Could not access return value of process"); - } - if (S_OK != stream->Read(&error, sizeof(error), &written)) { - qWarning(" Could not access error code"); - } - - if (error) { - qWarning("Error on target: %s", strwinerror(error).constData()); - result = false; - } - else { - result = true; - } - } - - if (returnValue) - *returnValue = returned; - } else { - // We do not need to invoke another lib etc, if we are not interested in results anyway... - result = CeCreateProcess(program.utf16(), arguments.utf16(), 0, 0, false, 0, 0, 0, 0, pid); - } - return result; -} - -bool ActiveSyncConnection::setDeviceAwake(bool activate, int *returnValue) -{ - if (!isConnected()) { - qWarning("Cannot execute, connect to device first!"); - return false; - } - bool result = false; - - // If we want to wait, we have to use CeRapiInvoke, as CeCreateProcess has no way to wait - // until the process ends. The lib must have been build and also deployed already. - if (!isConnected() && !connect()) - return false; - - HRESULT res = S_OK; - - //SYSTEM_POWER_STATUS_EX systemPowerState; - - //res = CeGetSystemPowerStatusEx(&systemPowerState, true); - - QString dllLocation = "\\Windows\\QtRemote.dll"; - QString functionName = "qRemoteToggleUnattendedPowerMode"; - - DWORD outputSize; - BYTE* output; - IRAPIStream *stream; - int returned = 0; - int toggle = int(activate); - - res = CeRapiInvoke(dllLocation.utf16(), functionName.utf16(), 0, 0, &outputSize, &output, &stream, 0); - if (S_OK != res) { - DWORD ce_error = CeGetLastError(); - if (S_OK != ce_error) { - qWarning("Error invoking %s on %s: %s", qPrintable(functionName), - qPrintable(dllLocation), strwinerror(ce_error).constData()); - } else { - qWarning("Error: %s on %s unexpectedly returned %d", qPrintable(functionName), - qPrintable(dllLocation), res); - } - } else { - DWORD written; - - if (S_OK != stream->Write(&toggle, sizeof(toggle), &written)) { - qWarning(" Could not write toggle option to process"); - return false; - } - - if (S_OK != stream->Read(&returned, sizeof(returned), &written)) { - qWarning(" Could not access return value of process"); - } - else - result = true; - } - - if (returnValue) - *returnValue = returned; - - return result; -} - -bool ActiveSyncConnection::resetDevice() -{ - if (!isConnected()) { - qWarning("Cannot execute, connect to device first!"); - return false; - } - - bool result = false; - if (!isConnected() && !connect()) - return false; - - QString dllLocation = "\\Windows\\QtRemote.dll"; - QString functionName = "qRemoteSoftReset"; - - DWORD outputSize; - BYTE* output; - IRAPIStream *stream; - - int returned = 0; - - HRESULT res = CeRapiInvoke(dllLocation.utf16(), functionName.utf16(), 0, 0, &outputSize, &output, &stream, 0); - if (S_OK != res) { - DWORD ce_error = CeGetLastError(); - if (S_OK != ce_error) { - qWarning("Error invoking %s on %s: %s", qPrintable(functionName), - qPrintable(dllLocation), strwinerror(ce_error).constData()); - } else { - qWarning("Error: %s on %s unexpectedly returned %d", qPrintable(functionName), - qPrintable(dllLocation), res); - } - } else { - result = true; - } - return result; -} - -bool ActiveSyncConnection::toggleDevicePower(int *returnValue) -{ - if (!isConnected()) { - qWarning("Cannot execute, connect to device first!"); - return false; - } - - bool result = false; - if (!isConnected() && !connect()) - return false; - - QString dllLocation = "\\Windows\\QtRemote.dll"; - QString functionName = "qRemotePowerButton"; - - DWORD outputSize; - BYTE* output; - IRAPIStream *stream; - int returned = 0; - - HRESULT res = CeRapiInvoke(dllLocation.utf16(), functionName.utf16(), 0, 0, &outputSize, &output, &stream, 0); - if (S_OK != res) { - DWORD ce_error = CeGetLastError(); - if (S_OK != ce_error) { - qWarning("Error invoking %s on %s: %s", qPrintable(functionName), - qPrintable(dllLocation), strwinerror(ce_error).constData()); - } else { - qWarning("Error: %s on %s unexpectedly returned %d", qPrintable(functionName), - qPrintable(dllLocation), res); - } - } else { - DWORD written; - if (S_OK != stream->Read(&returned, sizeof(returned), &written)) { - qWarning(" Could not access return value of process"); - } - else { - result = true; - } - } - - if (returnValue) - *returnValue = returned; - return result; -} - -bool ActiveSyncConnection::createDirectory(const QString &path, bool deleteBefore) -{ - if (deleteBefore) - deleteDirectory(path); - QStringList separated = path.split(QLatin1Char('\\')); - QString current = QLatin1String("\\"); - bool result; - for (int i=1; i < separated.size(); ++i) { - current += separated.at(i); - result = CeCreateDirectory(current.utf16(), NULL); - current += QLatin1String("\\"); - } - return result; -} - -bool ActiveSyncConnection::timeStampForLocalFileTime(FILETIME* fTime) const -{ - QString tmpFile = QString::fromLatin1("\\qt_tmp_ftime_convert"); - HANDLE remoteHandle = CeCreateFile(tmpFile.utf16(), GENERIC_WRITE, 0, 0, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0); - if (remoteHandle == INVALID_HANDLE_VALUE) - return false; - - LocalFileTimeToFileTime(fTime, fTime); - - if (!CeSetFileTime(remoteHandle, fTime, NULL, NULL)) { - CeCloseHandle(remoteHandle); - return false; - } - - CeCloseHandle(remoteHandle); - remoteHandle = CeCreateFile(tmpFile.utf16(), GENERIC_READ, FILE_SHARE_READ, 0, OPEN_EXISTING, 0, 0); - if (remoteHandle == INVALID_HANDLE_VALUE) - return false; - if (!CeGetFileTime(remoteHandle, fTime, NULL, NULL)) { - CeCloseHandle(remoteHandle); - return false; - } - - CeCloseHandle(remoteHandle); - CeDeleteFile(tmpFile.utf16()); - return true; -} - -bool ActiveSyncConnection::fileCreationTime(const QString &fileName, FILETIME* deviceCreationTime) const -{ - HANDLE deviceHandle = CeCreateFile(fileName.utf16(), GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, 0); - if (deviceHandle == INVALID_HANDLE_VALUE) - return false; - - bool result = true; - if (!CeGetFileTime(deviceHandle, deviceCreationTime, NULL, NULL)) - result = false; - - CeCloseHandle(deviceHandle); - return result; -} diff -Nru qttools-opensource-src-5.7.1/src/qtestlib/wince/cetest/activesyncconnection.h qttools-opensource-src-5.9.1/src/qtestlib/wince/cetest/activesyncconnection.h --- qttools-opensource-src-5.7.1/src/qtestlib/wince/cetest/activesyncconnection.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/qtestlib/wince/cetest/activesyncconnection.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,87 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the tools applications of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef ACTIVESYNC_REMOTECONNECTION_H -#define ACTIVESYNC_REMOTECONNECTION_H - -#include "remoteconnection.h" - -#if defined(Q_OS_WIN32) -#define REMOTELIBNAME "remotecommands" -#endif - -class ActiveSyncConnection : public AbstractRemoteConnection -{ -public: - ActiveSyncConnection(); - virtual ~ActiveSyncConnection(); - - bool connect(QVariantList &list = QVariantList()); - void disconnect(); - bool isConnected() const; - - // These functions are designed for transfer between desktop and device - // Caution: deviceDest path has to be device specific (eg. no drive letters for CE) - bool copyFileToDevice(const QString &localSource, const QString &deviceDest, bool failIfExists = false); - bool copyDirectoryToDevice(const QString &localSource, const QString &deviceDest, bool recursive = true); - bool copyFileFromDevice(const QString &deviceSource, const QString &localDest, bool failIfExists = false); - bool copyDirectoryFromDevice(const QString &deviceSource, const QString &localDest, bool recursive = true); - - bool timeStampForLocalFileTime(FILETIME*) const; - bool fileCreationTime(const QString &fileName, FILETIME*) const; - - // These functions only work on files existing on the device - bool copyFile(const QString&, const QString&, bool failIfExists = false); - bool copyDirectory(const QString&, const QString&, bool recursive = true); - bool deleteFile(const QString&); - bool deleteDirectory(const QString&, bool recursive = true, bool failIfContentExists = false); - bool moveFile(const QString&, const QString&, bool FailIfExists = false); - bool moveDirectory(const QString&, const QString&, bool recursive = true); - - bool createDirectory(const QString&, bool deleteBefore=false); - - bool execute(QString program, QString arguments = QString(), int timeout = -1, int *returnValue = NULL); - bool resetDevice(); - bool toggleDevicePower(int *returnValue = NULL); - bool setDeviceAwake(bool activate, int *returnValue = NULL); -private: - bool connected; -}; - -#endif diff -Nru qttools-opensource-src-5.7.1/src/qtestlib/wince/cetest/bootstrapped.pri qttools-opensource-src-5.9.1/src/qtestlib/wince/cetest/bootstrapped.pri --- qttools-opensource-src-5.7.1/src/qtestlib/wince/cetest/bootstrapped.pri 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/qtestlib/wince/cetest/bootstrapped.pri 1970-01-01 00:00:00.000000000 +0000 @@ -1,47 +0,0 @@ -# Bootstrapped Input -SOURCES += \ - $$QT.core.sources/tools/qstring.cpp \ - $$QT.core.sources/tools/qstringlist.cpp \ - $$QT.core.sources/io/qfile.cpp \ - $$QT.core.sources/io/qdir.cpp \ - $$QT.core.sources/io/qfilesystementry.cpp \ - $$QT.core.sources/io/qfilesystemengine.cpp \ - $$QT.core.sources/io/qfilesystemengine_win.cpp \ - $$QT.core.sources/io/qfilesystemiterator_win.cpp \ - $$QT.core.sources/io/qfsfileengine.cpp \ - $$QT.core.sources/io/qabstractfileengine.cpp \ - $$QT.core.sources/io/qfsfileengine_win.cpp \ - $$QT.core.sources/io/qfsfileengine_iterator.cpp \ - $$QT.core.sources/io/qfileinfo.cpp \ - $$QT.core.sources/io/qtemporaryfile.cpp \ - $$QT.core.sources/io/qdiriterator.cpp \ - $$QT.core.sources/io/qiodevice.cpp \ - $$QT.core.sources/io/qbuffer.cpp \ - $$QT.core.sources/io/qtextstream.cpp \ - $$QT.core.sources/io/qurl.cpp \ - $$QT.core.sources/io/qsettings.cpp \ - $$QT.core.sources/io/qsettings_win.cpp \ - $$QT.core.sources/tools/qdatetime.cpp \ - $$QT.core.sources/tools/qlocale.cpp \ - $$QT.core.sources/tools/qbytearray.cpp \ - $$QT.core.sources/tools/qbytearraymatcher.cpp \ - $$QT.core.sources/tools/qvector.cpp \ - $$QT.core.sources/tools/qvsnprintf.cpp \ - $$QT.core.sources/tools/qlist.cpp \ - $$QT.core.sources/tools/qhash.cpp \ - $$QT.core.sources/tools/qlocale_tools.cpp \ - $$QT.core.sources/global/qglobal.cpp \ - $$shadowed($$QT.core.sources)/global/qconfig.cpp \ - $$QT.core.sources/global/qmalloc.cpp \ - $$QT.core.sources/global/qnumeric.cpp \ - $$QT.core.sources/global/qlibraryinfo.cpp \ - $$QT.core.sources/tools/qregexp.cpp \ - $$QT.core.sources/tools/qmap.cpp \ - $$QT.core.sources/tools/qbitarray.cpp \ - $$QT.core.sources/kernel/qmetatype.cpp \ - $$QT.core.sources/kernel/qvariant.cpp \ - $$QT.core.sources/kernel/qsystemerror.cpp \ - $$QT.core.sources/plugin/qsystemlibrary.cpp \ - $$QT.core.sources/codecs/qutfcodec.cpp \ - $$QT.core.sources/xml/qxmlstream.cpp \ - $$QT.core.sources/xml/qxmlutils.cpp diff -Nru qttools-opensource-src-5.7.1/src/qtestlib/wince/cetest/cetcpsyncconnection.cpp qttools-opensource-src-5.9.1/src/qtestlib/wince/cetest/cetcpsyncconnection.cpp --- qttools-opensource-src-5.7.1/src/qtestlib/wince/cetest/cetcpsyncconnection.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/qtestlib/wince/cetest/cetcpsyncconnection.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,219 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the tools applications of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "CeTcpSyncConnection.h" -#include -#include -#include - -static const QString ceTcpSyncProgram = "cetcpsync"; -extern void debugOutput(const QString& text, int level); - -CeTcpSyncConnection::CeTcpSyncConnection() - : AbstractRemoteConnection() - , connected(false) -{ -} - -CeTcpSyncConnection::~CeTcpSyncConnection() -{ - if (isConnected()) - disconnect(); -} - -bool CeTcpSyncConnection::connect(QVariantList&) -{ - // We connect with each command, so this is always true - // The command itself will fail then - const QString cmd = ceTcpSyncProgram + " noop"; - if (system(qPrintable(cmd)) != 0) - return false; - connected = true; - return true; -} - -void CeTcpSyncConnection::disconnect() -{ - connected = false; -} - -bool CeTcpSyncConnection::isConnected() const -{ - return connected; -} - -inline QString boolToString(bool b) -{ - return b ? "true" : "false"; -} - -static bool fileTimeFromString(FILETIME& ft, const QString& str) -{ - int idx = str.indexOf("*"); - if (idx <= 0) - return false; - bool ok; - ft.dwLowDateTime = str.left(idx).toULong(&ok); - if (!ok) - return false; - ft.dwHighDateTime = str.mid(idx+1).toULong(&ok); - return ok; -} - -static QString fileTimeToString(FILETIME& ft) -{ - return QString::number(ft.dwLowDateTime) + "*" + QString::number(ft.dwHighDateTime); -} - -bool CeTcpSyncConnection::copyFileToDevice(const QString &localSource, const QString &deviceDest, bool failIfExists) -{ - QString cmd = ceTcpSyncProgram + " copyFileToDevice \"" + localSource + "\" \"" + deviceDest + "\" " + boolToString(failIfExists); - return system(qPrintable(cmd)) == 0; -} - -bool CeTcpSyncConnection::copyDirectoryToDevice(const QString &localSource, const QString &deviceDest, bool recursive) -{ - QString cmd = ceTcpSyncProgram + " copyDirectoryToDevice \"" + localSource + "\" \"" + deviceDest + "\" " + boolToString(recursive); - return system(qPrintable(cmd)) == 0; -} - -bool CeTcpSyncConnection::copyFileFromDevice(const QString &deviceSource, const QString &localDest, bool failIfExists) -{ - QString cmd = ceTcpSyncProgram + " copyFileFromDevice \"" + deviceSource + "\" \"" + localDest + "\" " + boolToString(failIfExists); - return system(qPrintable(cmd)) == 0; -} - -bool CeTcpSyncConnection::copyDirectoryFromDevice(const QString &deviceSource, const QString &localDest, bool recursive) -{ - QString cmd = ceTcpSyncProgram + " copyDirectoryFromDevice \"" + deviceSource + "\" \"" + localDest + "\" " + boolToString(recursive); - return system(qPrintable(cmd)) == 0; -} - -bool CeTcpSyncConnection::copyFile(const QString &srcFile, const QString &destFile, bool failIfExists) -{ - QString cmd = ceTcpSyncProgram + " copyFile \"" + srcFile + "\" \"" + destFile + "\" " + boolToString(failIfExists); - return system(qPrintable(cmd)) == 0; -} - -bool CeTcpSyncConnection::copyDirectory(const QString &srcDirectory, const QString &destDirectory, - bool recursive) -{ - QString cmd = ceTcpSyncProgram + " copyDirectory \"" + srcDirectory + "\" \"" + destDirectory + "\" " + boolToString(recursive); - return system(qPrintable(cmd)) == 0; -} - -bool CeTcpSyncConnection::deleteFile(const QString &fileName) -{ - QString cmd = ceTcpSyncProgram + " deleteFile \"" + fileName + "\""; - return system(qPrintable(cmd)) == 0; -} - -bool CeTcpSyncConnection::deleteDirectory(const QString &directory, bool recursive, bool failIfContentExists) -{ - QString cmd = ceTcpSyncProgram + " deleteDirectory \"" + directory + "\" " + boolToString(recursive) + " " + boolToString(failIfContentExists); - return system(qPrintable(cmd)) == 0; -} - -bool CeTcpSyncConnection::execute(QString program, QString arguments, int timeout, int *returnValue) -{ - QString cmd = ceTcpSyncProgram + " execute \"" + program + "\" \"" + arguments + "\" " + QString::number(timeout); - int exitCode = system(qPrintable(cmd)); - if (returnValue) - *returnValue = exitCode; - return true; -} - -bool CeTcpSyncConnection::createDirectory(const QString &path, bool deleteBefore) -{ - QString cmd = ceTcpSyncProgram + " createDirectory \"" + path + "\" " + boolToString(deleteBefore); - return system(qPrintable(cmd)) == 0; -} - -bool CeTcpSyncConnection::timeStampForLocalFileTime(FILETIME* fTime) const -{ - QString cmd = ceTcpSyncProgram + " timeStampForLocalFileTime " + fileTimeToString(*fTime) + " >qt_cetcpsyncdata.txt"; - if (system(qPrintable(cmd)) != 0) - return false; - - QFile file("qt_cetcpsyncdata.txt"); - if (!file.open(QIODevice::ReadOnly)) - return false; - - bool result = fileTimeFromString(*fTime, file.readLine()); - file.close(); - file.remove(); - return result; -} - -bool CeTcpSyncConnection::fileCreationTime(const QString &fileName, FILETIME* deviceCreationTime) const -{ - QString cmd = ceTcpSyncProgram + " fileCreationTime \"" + fileName + "\" >qt_cetcpsyncdata.txt"; - if (system(qPrintable(cmd)) != 0) - return false; - - QFile file("qt_cetcpsyncdata.txt"); - if (!file.open(QIODevice::ReadOnly)) - return false; - - bool result = fileTimeFromString(*deviceCreationTime, file.readLine()); - file.close(); - file.remove(); - return result; -} - -bool CeTcpSyncConnection::resetDevice() -{ - qWarning("CeTcpSyncConnection::resetDevice not implemented"); - return false; -} - -bool CeTcpSyncConnection::toggleDevicePower(int *returnValue) -{ - Q_UNUSED(returnValue); - qWarning("CeTcpSyncConnection::toggleDevicePower not implemented"); - return false; -} - -bool CeTcpSyncConnection::setDeviceAwake(bool activate, int *returnValue) -{ - Q_UNUSED(activate); - Q_UNUSED(returnValue); - qWarning("CeTcpSyncConnection::setDeviceAwake not implemented"); - return false; -} diff -Nru qttools-opensource-src-5.7.1/src/qtestlib/wince/cetest/cetcpsyncconnection.h qttools-opensource-src-5.9.1/src/qtestlib/wince/cetest/cetcpsyncconnection.h --- qttools-opensource-src-5.7.1/src/qtestlib/wince/cetest/cetcpsyncconnection.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/qtestlib/wince/cetest/cetcpsyncconnection.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,83 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the tools applications of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef CETCPSYNC_REMOTECONNECTION_H -#define CETCPSYNC_REMOTECONNECTION_H - -#include "remoteconnection.h" - -class CeTcpSyncConnection : public AbstractRemoteConnection -{ -public: - CeTcpSyncConnection(); - virtual ~CeTcpSyncConnection(); - - bool connect(QVariantList &list = QVariantList()); - void disconnect(); - bool isConnected() const; - - // These functions are designed for transfer between desktop and device - // Caution: deviceDest path has to be device specific (eg. no drive letters for CE) - bool copyFileToDevice(const QString &localSource, const QString &deviceDest, bool failIfExists = false); - bool copyDirectoryToDevice(const QString &localSource, const QString &deviceDest, bool recursive = true); - bool copyFileFromDevice(const QString &deviceSource, const QString &localDest, bool failIfExists = false); - bool copyDirectoryFromDevice(const QString &deviceSource, const QString &localDest, bool recursive = true); - - bool timeStampForLocalFileTime(FILETIME*) const; - bool fileCreationTime(const QString &fileName, FILETIME*) const; - - // These functions only work on files existing on the device - bool copyFile(const QString&, const QString&, bool failIfExists = false); - bool copyDirectory(const QString&, const QString&, bool recursive = true); - bool deleteFile(const QString&); - bool deleteDirectory(const QString&, bool recursive = true, bool failIfContentExists = false); - bool moveFile(const QString&, const QString&, bool FailIfExists = false); - bool moveDirectory(const QString&, const QString&, bool recursive = true); - - bool createDirectory(const QString&, bool deleteBefore=false); - - bool execute(QString program, QString arguments = QString(), int timeout = -1, int *returnValue = NULL); - bool resetDevice(); - bool toggleDevicePower(int *returnValue = NULL); - bool setDeviceAwake(bool activate, int *returnValue = NULL); -private: - bool connected; -}; - -#endif diff -Nru qttools-opensource-src-5.7.1/src/qtestlib/wince/cetest/cetest.pro qttools-opensource-src-5.9.1/src/qtestlib/wince/cetest/cetest.pro --- qttools-opensource-src-5.7.1/src/qtestlib/wince/cetest/cetest.pro 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/qtestlib/wince/cetest/cetest.pro 1970-01-01 00:00:00.000000000 +0000 @@ -1,44 +0,0 @@ -CONFIG += console no_batch -CONFIG -= qt - -DEFINES += QT_BUILD_QMAKE QT_BOOTSTRAPPED QT_NO_CODECS QT_LITE_UNICODE QT_NO_LIBRARY \ - QT_NO_STL QT_NO_COMPRESS QT_NO_DATASTREAM \ - QT_NO_TEXTCODEC QT_NO_UNICODETABLES QT_NO_THREAD \ - QT_NO_SYSTEMLOCALE QT_NO_GEOM_VARIANT \ - QT_NODLL QT_NO_QOBJECT - -INCLUDEPATH = \ - $$QT.core.sources/../../tools/qtestlib/ce/cetest \ - $$QT.core.sources/../../qmake \ - $$QT.core.sources/../../tools/shared \ - $$QT.core.includes - -VPATH += $$QT.core.sources/../../tools/shared - -HEADERS += \ - remoteconnection.h \ - deployment.h - -SOURCES += \ - remoteconnection.cpp \ - deployment.cpp \ - main.cpp - -LIBS += ole32.lib advapi32.lib - -isEmpty(QT_CE_RAPI_INC) { - DEFINES += QT_CETEST_NO_ACTIVESYNC - HEADERS += cetcpsyncconnection.h - SOURCES += cetcpsyncconnection.cpp -} else { - HEADERS += activesyncconnection.h - SOURCES += activesyncconnection.cpp - LIBS += rapi.lib - INCLUDEPATH += $$QT_CE_RAPI_INC - LIBS += -L$$QT_CE_RAPI_LIB -} - -include(qmake_include.pri) -include(bootstrapped.pri) - -load(qt_app) diff -Nru qttools-opensource-src-5.7.1/src/qtestlib/wince/cetest/deployment.cpp qttools-opensource-src-5.9.1/src/qtestlib/wince/cetest/deployment.cpp --- qttools-opensource-src-5.7.1/src/qtestlib/wince/cetest/deployment.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/qtestlib/wince/cetest/deployment.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,291 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the tools applications of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "deployment.h" -#include "remoteconnection.h" -#include -#include -#include -#include - -extern void debugOutput(const QString& text, int level); - -bool DeploymentHandler::deviceCopy(const DeploymentList &deploymentList) -{ - for (int i=0; icreateDirectory(item.to.left(item.to.lastIndexOf(QLatin1Char('\\')))); - if (!m_connection->copyFileToDevice(item.from , item.to)) { - debugOutput(QString::fromLatin1("Error while copy: %1 -> %2").arg(item.from).arg(item.to),0); - return false; - } - } - return true; -} - -bool DeploymentHandler::deviceDeploy(const DeploymentList &deploymentList) -{ - DeploymentList copyList; - for (int i=0; itimeStampForLocalFileTime(&localCreationTime)) { - copyList.append(deploymentList.at(i)); - CloseHandle(localHandle); - continue; - } - CloseHandle(localHandle); - - FILETIME deviceCreationTime; - if (!m_connection->fileCreationTime(deploymentList.at(i).to , &deviceCreationTime)) { - copyList.append(deploymentList.at(i)); - continue; - } - - int res = CompareFileTime(&localCreationTime, &deviceCreationTime); - if (res != 0) - copyList.append(deploymentList.at(i)); - else - debugOutput(QString::fromLatin1("Skipping File %1, already latest version").arg(deploymentList.at(i).from),0); -#else - copyList.append(deploymentList.at(i)); -#endif - } - return deviceCopy(copyList); -} - -void DeploymentHandler::cleanup(const DeploymentList &deploymentList) -{ - for (int i=0; ideleteFile(deploymentList.at(i).to); -#ifdef Q_OS_WIN - QString path = deploymentList.at(i).to; - int pos; - while ( (pos = path.lastIndexOf(QLatin1Char('\\'))) > 0) { - path = path.left(pos); - if (!m_connection->deleteDirectory(path, false, true)) - break; - } -#endif - } -} - -void DeploymentHandler::initQtDeploy(QMakeProject *project, DeploymentList &deploymentList, const QString &testPath) -{ - QString targetPath = project->values("deploy.path").join(" "); - if (targetPath.isEmpty()) - targetPath = testPath; - if (targetPath.endsWith("/") || targetPath.endsWith("\\")) - targetPath = targetPath.mid(0,targetPath.size()-1); - - // Only deploy Qt libs for shared build - if (!project->values("QMAKE_QT_DLL").isEmpty() && !project->values("QMAKE_LIBDIR").isEmpty()) { - QStringList libs = project->values("LIBS"); - QStringList qtLibs; - QStringList libPaths; - foreach (QString item, libs) { - - if (item.startsWith("-L")) { - // -L -> a directory containing DLLs - libPaths << item.mid(2); - continue; - } - - QStringList libCandidates; - - if (item.startsWith("-l")) { - // -l -> a library located within one of the standard library paths - QString lib = item.mid(2); - - // Check if it's a Qt library first, then check in all paths given with -L. - // Note Qt libraries get a `4' appended to them, others don't. - libCandidates << project->values("QMAKE_LIBDIR").at(0) + QDir::separator() + lib + QLatin1String("4.dll"); - foreach (QString const& libPath, libPaths) { - libCandidates << libPath + QDir::separator() + lib + QLatin1String(".dll"); - } - } else { - libCandidates << item.replace(".lib",".dll"); - } - - foreach (QString const& file, libCandidates) { - QFileInfo info(file); - if (info.exists()) { - qtLibs += info.dir().absoluteFilePath(info.fileName()); - break; - } - } - } - for (QStringList::ConstIterator it = qtLibs.constBegin(); it != qtLibs.constEnd(); ++it) { - QString dllName = *it; - QFileInfo info(dllName); - if (!info.exists()) - continue; - deploymentList.append(CopyItem(Option::fixPathToLocalOS(info.absoluteFilePath()) , - Option::fixPathToLocalOS(targetPath + "/" + info.fileName()))); - } - } - -#ifndef QT_CETEST_NO_ACTIVESYNC - // QtRemote deployment. We always deploy to \Windows - if (!project->values("QMAKE_LIBDIR").isEmpty()) { - QString remoteLibName = QLatin1String("QtRemote.dll"); - QString remoteLib = Option::fixPathToLocalOS(project->values("QMAKE_LIBDIR").at(0) + QDir::separator() + remoteLibName); - if (QFile::exists(remoteLib)) - deploymentList.append(CopyItem(remoteLib, QString::fromLatin1("\\Windows\\") + remoteLibName)); - else - debugOutput(QString::fromLatin1("Could not find QtRemote. Might not be able to launch target executable"),0); - } -#endif - - // C-runtime deployment - QString runtime = project->values("QT_CE_C_RUNTIME").join(QLatin1String(" ")); - debugOutput(QString::fromLatin1("Runtime:%1").arg(runtime), 2); - if (!runtime.isEmpty() && (runtime != QLatin1String("no"))) { - QString runtimeVersion = QLatin1String("msvcr"); - const QString mkspec = project->values("QMAKESPEC").first(); - if (mkspec.endsWith("2008")) - runtimeVersion.append("90"); - else - runtimeVersion.append("80"); - if (project->isActiveConfig("debug")) - runtimeVersion.append("d"); - runtimeVersion.append(".dll"); - - if (runtime == "yes") { - // Auto-find C-runtime - QString vcInstallDir = qgetenv("VCINSTALLDIR"); - if (!vcInstallDir.isEmpty()) { - vcInstallDir += "\\ce\\dll\\"; - vcInstallDir += project->values("CE_ARCH").join(QLatin1String(" ")); - if (!QFileInfo(vcInstallDir + QDir::separator() + runtimeVersion).exists()) - runtime.clear(); - else - runtime = vcInstallDir; - } - } - - if (!runtime.isEmpty()) { - deploymentList.append(CopyItem(Option::fixPathToLocalOS(runtime + "/" + runtimeVersion ) , - Option::fixPathToLocalOS(targetPath + "/" + runtimeVersion))); - } - } -} - -void DeploymentHandler::initProjectDeploy(QMakeProject* project, DeploymentList &deploymentList, const QString &testPath) -{ - QString targetPath = project->values("deploy.path").join(" "); - if (targetPath.isEmpty()) - targetPath = testPath; - if (targetPath.endsWith("/") || targetPath.endsWith("\\")) - targetPath = targetPath.mid(0,targetPath.size()-1); - - QStringList& list = project->values("DEPLOYMENT"); - if (list.isEmpty()) - return; - - for (int it = 0; it < list.size(); ++it) { - QString argSource = list.at(it); - QString argPath = list.at(it) + QString(".path"); - if ((project->values(argSource + QString(".files")).isEmpty() || project->values(argPath).isEmpty()) && list.at(it) != "deploy") { - debugOutput(QString::fromLatin1("cannot deploy \"%1\" because of missing data.").arg(list.at(it)), 0); - continue; - } - - QString addPath = project->values(argPath).join(QLatin1String(" ")); - if (addPath == QLatin1String(".")) - addPath.clear(); - if (!addPath.startsWith("/") && !addPath.startsWith(QLatin1String("\\"))) - addPath = targetPath + "/" + addPath; - - QStringList addSources = project->values(argSource + QString(".files")); - addSources.replaceInStrings(QLatin1String("/"), QLatin1String("\\")); - for(int index=0; index < addSources.size(); ++index) { - QString dirstr = qmake_getpwd(); - QString filestr = Option::fixPathToLocalOS(addSources.at(index), false, false); - int slsh = filestr.lastIndexOf(Option::dir_sep); - if(slsh != -1) { - dirstr = filestr.left(slsh+1); - filestr = filestr.right(filestr.length() - slsh - 1); - } - if(dirstr.right(Option::dir_sep.length()) != Option::dir_sep) - dirstr += Option::dir_sep; - QFileInfo info(dirstr + filestr); - - static int addQMakeDeployCounter = 0; - QStringList entryList = info.absoluteDir().entryList(QStringList() << info.fileName()); - if (entryList.size() > 1) { - foreach(QString s, entryList) { - // We do not include directories when using wildcards - QFileInfo wildInfo(info.absolutePath() + "/" + s); - if (wildInfo.isDir()) { - continue; - } - QString appendedQmakeDeploy = QString::fromLatin1("_q_make_additional_deploy_%1").arg(addQMakeDeployCounter++); - project->parse(appendedQmakeDeploy + QLatin1String(".files = \"") + wildInfo.absoluteFilePath()); - project->parse(appendedQmakeDeploy + QLatin1String(".path = \"") + addPath); - list.append(appendedQmakeDeploy); - } - continue; - } - - if (info.isDir()) { - QDir additionalDir(dirstr + filestr); - QStringList additionalEntries = additionalDir.entryList(QDir::NoDotAndDotDot | QDir::AllEntries | QDir::NoSymLinks); - foreach(QString item, additionalEntries) { - QString appendedDeploy = QString::fromLatin1("_q_make_additional_deploy_%1").arg(addQMakeDeployCounter++); - project->parse(appendedDeploy + QLatin1String(".files = \"") + Option::fixPathToLocalOS(additionalDir.absoluteFilePath(item)) + QLatin1String("\"")); - QString appendTargetPath = project->values(argPath).join(QLatin1String(" ")); - if (appendTargetPath == QLatin1String(".")) - appendTargetPath = filestr; - else - appendTargetPath.append(QLatin1String("\\") + filestr); - project->parse(appendedDeploy + QLatin1String(".path = ") + appendTargetPath); - list.append(appendedDeploy); - } - } else if (entryList.size() == 1) - deploymentList.append(CopyItem(Option::fixPathToLocalOS(info.absolutePath() + "/" + entryList.at(0)) , - Option::fixPathToLocalOS(addPath + "/" + entryList.at(0)))); - } - } -} diff -Nru qttools-opensource-src-5.7.1/src/qtestlib/wince/cetest/deployment.h qttools-opensource-src-5.9.1/src/qtestlib/wince/cetest/deployment.h --- qttools-opensource-src-5.7.1/src/qtestlib/wince/cetest/deployment.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/qtestlib/wince/cetest/deployment.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,73 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the tools applications of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef DEPLOYMENT_INCL -#define DEPLOYMENT_INCL - -#include -#include -#include - -class AbstractRemoteConnection; - -struct CopyItem -{ - CopyItem(const QString& f, const QString& t) : from(f) , to(t) { } - QString from; - QString to; -}; -typedef QList DeploymentList; - -class DeploymentHandler -{ -public: - inline void setConnection(AbstractRemoteConnection*); - inline AbstractRemoteConnection* connection() const; - bool deviceCopy(const DeploymentList &deploymentList); - bool deviceDeploy(const DeploymentList &deploymentList); - void cleanup(const DeploymentList &deploymentList); - static void initProjectDeploy(QMakeProject* project, DeploymentList &deploymentList, const QString &testPath = "\\Program Files\\qt_test"); - static void initQtDeploy(QMakeProject* project, DeploymentList &deploymentList, const QString &testPath = "\\Program Files\\qt_test"); -private: - AbstractRemoteConnection* m_connection; -}; - -inline void DeploymentHandler::setConnection(AbstractRemoteConnection *connection) { m_connection = connection; } -inline AbstractRemoteConnection* DeploymentHandler::connection() const { return m_connection; } -#endif \ No newline at end of file diff -Nru qttools-opensource-src-5.7.1/src/qtestlib/wince/cetest/main.cpp qttools-opensource-src-5.9.1/src/qtestlib/wince/cetest/main.cpp --- qttools-opensource-src-5.7.1/src/qtestlib/wince/cetest/main.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/qtestlib/wince/cetest/main.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,431 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the tools applications of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifdef QT_CETEST_NO_ACTIVESYNC -# include "cetcpsyncconnection.h" -#else -# include "activesyncconnection.h" -#endif - -const int SLEEP_AFTER_RESET = 60000; // sleep for 1 minute -const int SLEEP_RECONNECT = 2000; // sleep for 2 seconds before trying another reconnect - -#include "deployment.h" -#include -#include -#include -#include -#include -#include -#include -using namespace std; - -const int debugLevel = 0; -void debugOutput(const QString& text, int level) -{ - if (level <= debugLevel) - cout << qPrintable(text) << endl; -} - -// needed for QMake sources to compile -QString project_builtin_regx() { return QString();} -static QString pwd; -QString qmake_getpwd() -{ - if(pwd.isNull()) - pwd = QDir::currentPath(); - return pwd; -} -bool qmake_setpwd(const QString &p) -{ - if(QDir::setCurrent(p)) { - pwd = QDir::currentPath(); - return true; - } - return false; -} - -namespace TestConfiguration { - QString localExecutable; - QString localQtConf; - QString remoteTestPath; - QString remoteLibraryPath; - QString remoteExecutable; - QString remoteResultFile; - - bool testDebug; - void init() - { - testDebug = true; - localQtConf = QLatin1String("no"); - remoteTestPath = QLatin1String("\\Program Files\\qt_test"); - remoteLibraryPath = remoteTestPath; - remoteResultFile = QLatin1String("\\qt_test_results.txt"); - } -} - -void usage() -{ - cout << - "QTestLib options\n" - " All valid QTestLib command-line options are accepted.\n" - " For details of QTestLib options, refer to the QTestLib Manual.\n" - "\n" - "cetest specific options\n" - " -debug : Test debug version[default]\n" - " -release : Test release version\n" - " -libpath : Remote path to deploy Qt libraries to\n" - " -reset : Reset device before starting a test\n" - " -awake : Device does not go sleep mode\n" - " -qt-delete : Delete the Qt libraries after execution\n" - " -project-delete : Delete the project file(s) after execution\n" - " -delete : Delete everything deployed after execution\n" - " -conf : Specify location of qt.conf file\n" - " -f : Specify project file\n" - " -cache : Specify .qmake.cache file to use\n" - " -d : Increase qmake debugging \n" - " -timeout : Specify a timeout value after which the test will be terminated\n" - " -1 specifies waiting forever (default)\n" - " 0 specifies starting the process detached\n" - " >0 wait seconds\n" - " -help : This help\n" - "\n"; -} - -int main(int argc, char **argv) -{ - QStringList arguments; - for (int i=0; i -#include -#include -class AbstractRemoteConnection -{ -public: - AbstractRemoteConnection(); - virtual ~AbstractRemoteConnection(); - - virtual bool connect(QVariantList&) = 0; - virtual void disconnect() = 0; - virtual bool isConnected() const = 0; - - // These functions are designed for transfer between desktop and device - // Caution: deviceDest path has to be device specific (eg. no drive letters for CE) - virtual bool copyFileToDevice(const QString &localSource, const QString &deviceDest, bool failIfExists = false) = 0; - virtual bool copyDirectoryToDevice(const QString &localSource, const QString &deviceDest, bool recursive = true) = 0; - virtual bool copyFileFromDevice(const QString &deviceSource, const QString &localDest, bool failIfExists = false) = 0; - virtual bool copyDirectoryFromDevice(const QString &deviceSource, const QString &localDest, bool recursive = true) = 0; - - // For "intelligent deployment" we need to investigate on filetimes on the device - virtual bool timeStampForLocalFileTime(FILETIME*) const = 0; - virtual bool fileCreationTime(const QString &fileName, FILETIME*) const = 0; - - // These functions only work on files existing on the device - virtual bool copyFile(const QString&, const QString&, bool failIfExists = false) = 0; - virtual bool copyDirectory(const QString&, const QString&, bool recursive = true) = 0; - virtual bool deleteFile(const QString&) = 0; - virtual bool deleteDirectory(const QString&, bool recursive = true, bool failIfContentExists = false) = 0; - bool moveFile(const QString&, const QString&, bool FailIfExists = false); - bool moveDirectory(const QString&, const QString&, bool recursive = true); - - virtual bool createDirectory(const QString&, bool deleteBefore=false) = 0; - - virtual bool execute(QString program, QString arguments = QString(), int timeout = -1, int *returnValue = NULL) = 0; -}; - -QByteArray strwinerror(DWORD); - -#endif diff -Nru qttools-opensource-src-5.7.1/src/qtestlib/wince/remotelib/commands.cpp qttools-opensource-src-5.9.1/src/qtestlib/wince/remotelib/commands.cpp --- qttools-opensource-src-5.7.1/src/qtestlib/wince/remotelib/commands.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/qtestlib/wince/remotelib/commands.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,210 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the tools applications of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ -#include "commands.h" -#include -#include - - -#define CLEAN_FAIL(a) {delete appName; \ - delete arguments; \ - return (a); } - -int qRemoteLaunch(DWORD, BYTE*, DWORD*, BYTE**, IRAPIStream* stream) -{ - if (!stream) - return -1; - - DWORD bytesRead; - int appLength; - wchar_t* appName = 0; - int argumentsLength; - wchar_t* arguments = 0; - int timeout = -1; - int returnValue = -2; - DWORD error = 0; - - if (S_OK != stream->Read(&appLength, sizeof(appLength), &bytesRead)) - CLEAN_FAIL(-2); - appName = (wchar_t*) malloc(sizeof(wchar_t)*(appLength + 1)); - if (S_OK != stream->Read(appName, sizeof(wchar_t)*appLength, &bytesRead)) - CLEAN_FAIL(-2); - appName[appLength] = '\0'; - - if (S_OK != stream->Read(&argumentsLength, sizeof(argumentsLength), &bytesRead)) - CLEAN_FAIL(-2); - arguments = (wchar_t*) malloc(sizeof(wchar_t)*(argumentsLength + 1)); - if (S_OK != stream->Read(arguments, sizeof(wchar_t)*argumentsLength, &bytesRead)) - CLEAN_FAIL(-2); - arguments[argumentsLength] = '\0'; - - if (S_OK != stream->Read(&timeout, sizeof(timeout), &bytesRead)) - CLEAN_FAIL(-2); - - bool result = qRemoteExecute(appName, arguments, &returnValue, &error, timeout); - - if (timeout != 0) { - if (S_OK != stream->Write(&returnValue, sizeof(returnValue), &bytesRead)) - CLEAN_FAIL(-4); - if (S_OK != stream->Write(&error, sizeof(error), &bytesRead)) - CLEAN_FAIL(-5); - } - delete appName; - delete arguments; - // We need to fail here for the execute, otherwise the calling application will wait - // forever for the returnValue. - if (!result) - return -3; - return S_OK; -} - - -bool qRemoteExecute(const wchar_t* program, const wchar_t* arguments, int *returnValue, DWORD* error, int timeout) -{ - *error = 0; - - if (!program) - return false; - - PROCESS_INFORMATION pid; - if (!CreateProcess(program, arguments, NULL, NULL, false, 0, NULL, NULL, NULL, &pid)) { - *error = GetLastError(); - wprintf(L"Could not launch: %s\n", program); - return false; - } - - // Timeout is in seconds - DWORD waitingTime = (timeout == -1) ? INFINITE : timeout * 1000; - - if (waitingTime != 0) { - DWORD waitStatus = WaitForSingleObject(pid.hProcess, waitingTime); - if (waitStatus == WAIT_TIMEOUT) { - TerminateProcess(pid.hProcess, 2); - return false; - } else if (waitStatus == WAIT_OBJECT_0 && returnValue) { - *returnValue = 0; - DWORD exitCode; - if (GetExitCodeProcess(pid.hProcess, &exitCode)) - *returnValue = exitCode; - } - } - return true; -} -/** -\brief Reset the device. -*/ -int qRemoteSoftReset(DWORD, BYTE*, DWORD*, BYTE**, IRAPIStream* stream) -{ - //POWER_STATE_ON On state - //POWER_STATE_OFF Off state - //POWER_STATE_CRITICAL Critical state - //POWER_STATE_BOOT Boot state - //POWER_STATE_IDLE Idle state - //POWER_STATE_SUSPEND Suspend state - //POWER_STATE_RESET Reset state - - DWORD returnValue = SetSystemPowerState(0, POWER_STATE_RESET, POWER_FORCE); - return returnValue; -} - -/** -\brief Toggle the unattended powermode of the device -*/ -int qRemoteToggleUnattendedPowerMode(DWORD, BYTE*, DWORD*, BYTE**, IRAPIStream* stream) -{ - if (!stream) - return -1; - - DWORD bytesRead; - int toggleVal = 0; - int returnValue = S_OK; - - if (S_OK != stream->Read(&toggleVal, sizeof(toggleVal), &bytesRead)) - return -2; - - //PPN_REEVALUATESTATE 0x0001 Reserved. Set dwData to zero (0). - //PPN_POWERCHANGE 0x0002 Reserved. Set dwData to zero (0). - //PPN_UNATTENDEDMODE 0x0003 Set dwData to TRUE or FALSE. - //PPN_SUSPENDKEYPRESSED or - //PPN_POWERBUTTONPRESSED 0x0004 Reserved. Set dwData to zero (0). - //PPN_SUSPENDKEYRELEASED 0x0005 Reserved. Set dwData to zero (0). - //PPN_APPBUTTONPRESSED 0x0006 Reserved. Set dwData to zero (0). - //PPN_OEMBASE Greater than or equal to 0x10000 - //You can define higher values, such as 0x10001, 0x10002, and so on. - // Reserved. Set dwData to zero (0). - returnValue = PowerPolicyNotify(PPN_UNATTENDEDMODE, toggleVal); - - if (S_OK != stream->Write(&returnValue, sizeof(returnValue), &bytesRead)) - return -3; - else - return S_OK; -} - -/** -\brief Virtually press the power button of the device -*/ -int qRemotePowerButton(DWORD, BYTE*, DWORD*, BYTE**, IRAPIStream* stream) -{ - if (!stream) - return -1; - - DWORD bytesRead; - int toggleVal = 0; - int returnValue = S_OK; - - if (S_OK != stream->Read(&toggleVal, sizeof(toggleVal), &bytesRead)) - return -2; - - //PPN_REEVALUATESTATE 0x0001 Reserved. Set dwData to zero (0). - //PPN_POWERCHANGE 0x0002 Reserved. Set dwData to zero (0). - //PPN_UNATTENDEDMODE 0x0003 Set dwData to TRUE or FALSE. - //PPN_SUSPENDKEYPRESSED or - //PPN_POWERBUTTONPRESSED 0x0004 Reserved. Set dwData to zero (0). - //PPN_SUSPENDKEYRELEASED 0x0005 Reserved. Set dwData to zero (0). - //PPN_APPBUTTONPRESSED 0x0006 Reserved. Set dwData to zero (0). - //PPN_OEMBASE Greater than or equal to 0x10000 - //You can define higher values, such as 0x10001, 0x10002, and so on. - // Reserved. Set dwData to zero (0). - returnValue = PowerPolicyNotify(PPN_SUSPENDKEYPRESSED, 0); - - if (S_OK != stream->Write(&returnValue, sizeof(returnValue), &bytesRead)) - return -3; - else - return S_OK; -} - diff -Nru qttools-opensource-src-5.7.1/src/qtestlib/wince/remotelib/commands.h qttools-opensource-src-5.9.1/src/qtestlib/wince/remotelib/commands.h --- qttools-opensource-src-5.7.1/src/qtestlib/wince/remotelib/commands.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/qtestlib/wince/remotelib/commands.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,52 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the tools applications of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ -#ifndef QREMOTECOMMANDS_H -#define QREMOTECOMMANDS_H -#include -#include - -extern "C" { - int __declspec(dllexport) qRemoteLaunch(DWORD, BYTE*, DWORD*, BYTE**, IRAPIStream*); - int __declspec(dllexport) qRemoteSoftReset(DWORD, BYTE*, DWORD*, BYTE**, IRAPIStream* stream); - int __declspec(dllexport) qRemoteToggleUnattendedPowerMode(DWORD, BYTE*, DWORD*, BYTE**, IRAPIStream* stream); - int __declspec(dllexport) qRemotePowerButton(DWORD, BYTE*, DWORD*, BYTE**, IRAPIStream* stream); - bool __declspec(dllexport) qRemoteExecute(const wchar_t* program, const wchar_t* arguments = NULL, int *returnValue = NULL , DWORD* error = NULL, int timeout = -1); -} - -#endif diff -Nru qttools-opensource-src-5.7.1/src/qtestlib/wince/remotelib/remotelib.pro qttools-opensource-src-5.9.1/src/qtestlib/wince/remotelib/remotelib.pro --- qttools-opensource-src-5.7.1/src/qtestlib/wince/remotelib/remotelib.pro 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/qtestlib/wince/remotelib/remotelib.pro 1970-01-01 00:00:00.000000000 +0000 @@ -1,12 +0,0 @@ -TEMPLATE = lib -CONFIG += dll -CONFIG -= staticlib -TARGET = QtRemote -DESTDIR = ../../../../lib -QT = - -HEADERS += commands.h -SOURCES += commands.cpp - -INCLUDEPATH += $$QT_CE_RAPI_INC -LIBS += -L$$QT_CE_RAPI_LIB diff -Nru qttools-opensource-src-5.7.1/src/qtestlib/wince/wince.pro qttools-opensource-src-5.9.1/src/qtestlib/wince/wince.pro --- qttools-opensource-src-5.7.1/src/qtestlib/wince/wince.pro 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/qtestlib/wince/wince.pro 1970-01-01 00:00:00.000000000 +0000 @@ -1,2 +0,0 @@ -TEMPLATE = subdirs -wince*:SUBDIRS = remotelib \ No newline at end of file diff -Nru qttools-opensource-src-5.7.1/src/qtplugininfo/qtplugininfo.cpp qttools-opensource-src-5.9.1/src/qtplugininfo/qtplugininfo.cpp --- qttools-opensource-src-5.7.1/src/qtplugininfo/qtplugininfo.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/qtplugininfo/qtplugininfo.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -90,7 +90,8 @@ print |= PrintUserData; int retval = 0; - foreach (const QString &plugin, parser.positionalArguments()) { + const QStringList positionalArguments = parser.positionalArguments(); + for (const QString &plugin : positionalArguments) { QByteArray pluginNativeName = QFile::encodeName(QDir::toNativeSeparators(plugin)); if (!QFile::exists(plugin)) { std::cerr << "qtplugininfo: " << pluginNativeName.constData() << ": No such file or directory." << std::endl; diff -Nru qttools-opensource-src-5.7.1/src/shared/corecon/corecon.pri qttools-opensource-src-5.9.1/src/shared/corecon/corecon.pri --- qttools-opensource-src-5.7.1/src/shared/corecon/corecon.pri 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/shared/corecon/corecon.pri 2017-06-23 12:03:39.000000000 +0000 @@ -1,5 +1,3 @@ -win32-msvc2013|win32-msvc2015 { - INCLUDEPATH += $$PWD - HEADERS += $$PWD/ccapi.h $$PWD/ccapi_11.h $$PWD/ccapi_12.h $$PWD/corecon.h - SOURCES += $$PWD/corecon.cpp -} +INCLUDEPATH += $$PWD +HEADERS += $$PWD/ccapi.h $$PWD/ccapi_11.h $$PWD/ccapi_12.h $$PWD/corecon.h +SOURCES += $$PWD/corecon.cpp diff -Nru qttools-opensource-src-5.7.1/src/shared/deviceskin/deviceskin.cpp qttools-opensource-src-5.9.1/src/shared/deviceskin/deviceskin.cpp --- qttools-opensource-src-5.7.1/src/shared/deviceskin/deviceskin.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/shared/deviceskin/deviceskin.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -69,7 +69,7 @@ } static void parseRect(const QString &value, QRect *rect) { - const QStringList l = value.split(QLatin1Char(' ')); + const QVector l = value.splitRef(QLatin1Char(' ')); rect->setRect(l[0].toInt(), l[1].toInt(), l[2].toInt(), l[3].toInt()); } @@ -78,12 +78,6 @@ } // ------------ DeviceSkinButtonArea -DeviceSkinButtonArea::DeviceSkinButtonArea() : - keyCode(0), - activeWhenClosed(0) -{ -} - QDebug &operator<<(QDebug &str, const DeviceSkinButtonArea &a) { @@ -391,9 +385,9 @@ setAttribute(Qt::WA_NoSystemBackground); setZoom(1.0); - connect( t_skinkey, SIGNAL(timeout()), this, SLOT(skinKeyRepeat()) ); + connect(t_skinkey, &QTimer::timeout, this, &DeviceSkin::skinKeyRepeat ); t_parentmove->setSingleShot( true ); - connect( t_parentmove, SIGNAL(timeout()), this, SLOT(moveParent()) ); + connect(t_parentmove, &QTimer::timeout, this, &DeviceSkin::moveParent ); } void DeviceSkin::skinKeyRepeat() @@ -543,14 +537,14 @@ if ( buttonPressed == true ) { toDraw += buttonIndex; } - foreach (int toggle, m_parameters.toggleAreaList) { + for (int toggle : qAsConst(m_parameters.toggleAreaList)) { const DeviceSkinButtonArea &ba = m_parameters.buttonAreas[toggle]; if (flipped_open || ba.activeWhenClosed) { if (ba.toggleArea && ba.toggleActiveArea) toDraw += toggle; } } - foreach (int button, toDraw ) { + for (int button : qAsConst(toDraw)) { const DeviceSkinButtonArea &ba = m_parameters.buttonAreas[button]; const QRect r = buttonRegions[button].boundingRect(); if ( ba.area.count() > 2 ) diff -Nru qttools-opensource-src-5.7.1/src/shared/deviceskin/deviceskin.h qttools-opensource-src-5.9.1/src/shared/deviceskin/deviceskin.h --- qttools-opensource-src-5.7.1/src/shared/deviceskin/deviceskin.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/shared/deviceskin/deviceskin.h 2017-06-23 12:03:39.000000000 +0000 @@ -56,14 +56,13 @@ // ------- Button Area struct DeviceSkinButtonArea { - DeviceSkinButtonArea(); QString name; - int keyCode; + int keyCode{0}; QPolygon area; QString text; - bool activeWhenClosed; - bool toggleArea; - bool toggleActiveArea; + bool activeWhenClosed{false}; + bool toggleArea{false}; + bool toggleActiveArea{false}; }; // -------- Parameters diff -Nru qttools-opensource-src-5.7.1/src/shared/findwidget/abstractfindwidget.cpp qttools-opensource-src-5.9.1/src/shared/findwidget/abstractfindwidget.cpp --- qttools-opensource-src-5.7.1/src/shared/findwidget/abstractfindwidget.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/shared/findwidget/abstractfindwidget.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -77,7 +77,7 @@ << (QString::fromUtf8(":/qt-project.org/shared/images/win/") + name); #endif - foreach (const QString &f, candidates) { + for (const QString &f : qAsConst(candidates)) { if (QFile::exists(f)) return QIcon(f); } diff -Nru qttools-opensource-src-5.7.1/src/shared/fontpanel/fontpanel.cpp qttools-opensource-src-5.9.1/src/shared/fontpanel/fontpanel.cpp --- qttools-opensource-src-5.7.1/src/shared/fontpanel/fontpanel.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/shared/fontpanel/fontpanel.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -66,20 +66,24 @@ QList writingSystems = m_fontDatabase.writingSystems(); writingSystems.push_front(QFontDatabase::Any); - foreach (QFontDatabase::WritingSystem ws, writingSystems) + for (QFontDatabase::WritingSystem ws : qAsConst(writingSystems)) m_writingSystemComboBox->addItem(QFontDatabase::writingSystemName(ws), QVariant(ws)); - connect(m_writingSystemComboBox, SIGNAL(currentIndexChanged(int)), this, SLOT(slotWritingSystemChanged(int))); + connect(m_writingSystemComboBox, QOverload::of(&QComboBox::currentIndexChanged), + this, &FontPanel::slotWritingSystemChanged); formLayout->addRow(tr("&Writing system"), m_writingSystemComboBox); - connect(m_familyComboBox, SIGNAL(currentFontChanged(QFont)), this, SLOT(slotFamilyChanged(QFont))); + connect(m_familyComboBox, &QFontComboBox::currentFontChanged, + this, &FontPanel::slotFamilyChanged); formLayout->addRow(tr("&Family"), m_familyComboBox); m_styleComboBox->setEditable(false); - connect(m_styleComboBox, SIGNAL(currentIndexChanged(int)), this, SLOT(slotStyleChanged(int))); + connect(m_styleComboBox, QOverload::of(&QComboBox::currentIndexChanged), + this, &FontPanel::slotStyleChanged); formLayout->addRow(tr("&Style"), m_styleComboBox); m_pointSizeComboBox->setEditable(false); - connect(m_pointSizeComboBox, SIGNAL(currentIndexChanged(int)), this, SLOT(slotPointSizeChanged(int))); + connect(m_pointSizeComboBox, QOverload::of(&QComboBox::currentIndexChanged), + this, &FontPanel::slotPointSizeChanged); formLayout->addRow(tr("&Point size"), m_pointSizeComboBox); m_previewLineEdit->setReadOnly(true); @@ -206,9 +210,9 @@ { // Update styles and trigger update of point sizes. // Try to maintain selection or select normal - const QString oldStyleString = styleString(); + const QString &oldStyleString = styleString(); - const QStringList styles = m_fontDatabase.styles(family); + const QStringList &styles = m_fontDatabase.styles(family); const bool hasStyles = !styles.empty(); m_styleComboBox->setCurrentIndex(-1); @@ -219,7 +223,7 @@ const QString normalStyle = QLatin1String("Normal"); if (hasStyles) { - foreach (const QString &style, styles) { + for (const QString &style : styles) { // try to maintain selection or select 'normal' preferably const int newIndex = m_styleComboBox->count(); m_styleComboBox->addItem(style); @@ -277,7 +281,7 @@ // try to maintain selection or select closest. if (hasSizes) { QString n; - foreach (int pointSize, pointSizes) + for (int pointSize : qAsConst(pointSizes)) m_pointSizeComboBox->addItem(n.setNum(pointSize), QVariant(pointSize)); const int closestIndex = closestPointSizeIndex(oldPointSize); if (closestIndex != -1) @@ -294,7 +298,8 @@ { if (!m_previewFontUpdateTimer) { m_previewFontUpdateTimer = new QTimer(this); - connect(m_previewFontUpdateTimer, SIGNAL(timeout()), this, SLOT(slotUpdatePreviewFont())); + connect(m_previewFontUpdateTimer, &QTimer::timeout, + this, &FontPanel::slotUpdatePreviewFont); m_previewFontUpdateTimer->setInterval(0); m_previewFontUpdateTimer->setSingleShot(true); } diff -Nru qttools-opensource-src-5.7.1/src/shared/qtgradienteditor/qtcolorline.cpp qttools-opensource-src-5.9.1/src/shared/qtgradienteditor/qtcolorline.cpp --- qttools-opensource-src-5.7.1/src/shared/qtgradienteditor/qtcolorline.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/shared/qtgradienteditor/qtcolorline.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -431,7 +431,7 @@ colorList << QColor::fromHsv(0, saturation, value, alpha); QLinearGradient lg(0, 0, gradW, gradH); for (int i = 0; i <= 6; i++) - lg.setColorAt((double)i / 6.0, flipped ? colorList.at(6 - i) : colorList.at(i)); + lg.setColorAt(double(i) / 6.0, flipped ? colorList.at(6 - i) : colorList.at(i)); QImage img(w, h, QImage::Format_ARGB32); QPainter p(&img); p.setCompositionMode(QPainter::CompositionMode_Source); @@ -945,8 +945,8 @@ else if (newPosOnField.y() > fieldSize.height()) newPosOnField.setY(fieldSize.height()); - double x = (double)newPosOnField.x() / fieldSize.width(); - double y = (double)newPosOnField.y() / fieldSize.height(); + const double x = double(newPosOnField.x()) / fieldSize.width(); + const double y = double(newPosOnField.y()) / fieldSize.height(); m_point = QPointF(x, y); QColor color = colorFromPoint(m_point); if (m_color == color) @@ -979,8 +979,8 @@ QSize fieldSize = q_ptr->geometry().size() - QSize(m_indicatorSize + 2 * m_indicatorSpace - 1, m_indicatorSize + 2 * m_indicatorSpace - 1); - double x = (double)newPosOnField.x() / fieldSize.width(); - double y = (double)newPosOnField.y() / fieldSize.height(); + const double x = double(newPosOnField.x()) / fieldSize.width(); + const double y = double(newPosOnField.y()) / fieldSize.height(); m_point = QPointF(x, y); QColor color = colorFromPoint(m_point); if (m_color == color) diff -Nru qttools-opensource-src-5.7.1/src/shared/qtgradienteditor/qtgradientmanager.cpp qttools-opensource-src-5.9.1/src/shared/qtgradienteditor/qtgradientmanager.cpp --- qttools-opensource-src-5.7.1/src/shared/qtgradienteditor/qtgradientmanager.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/shared/qtgradienteditor/qtgradientmanager.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -123,11 +123,9 @@ void QtGradientManager::clear() { - QMap grads = gradients(); - QMapIterator itGrad(grads); - while (itGrad.hasNext()) { - removeGradient(itGrad.next().key()); - } + const QMap grads = gradients(); + for (auto it = grads.cbegin(), end = grads.cend(); it != end; ++it) + removeGradient(it.key()); } QT_END_NAMESPACE diff -Nru qttools-opensource-src-5.7.1/src/shared/qtgradienteditor/qtgradientstopscontroller.cpp qttools-opensource-src-5.9.1/src/shared/qtgradienteditor/qtgradientstopscontroller.cpp --- qttools-opensource-src-5.7.1/src/shared/qtgradienteditor/qtgradientstopscontroller.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/shared/qtgradienteditor/qtgradientstopscontroller.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -389,7 +389,7 @@ m_ui->positionSpinBox->blockSignals(true); if (spinMin != newMin || spinMax != newMax) { - m_ui->positionSpinBox->setRange((double)newMin / 1000, (double)newMax / 1000); + m_ui->positionSpinBox->setRange(double(newMin) / 1000, double(newMax) / 1000); } if (m_ui->positionSpinBox->value() != pos) m_ui->positionSpinBox->setValue(pos); @@ -402,10 +402,8 @@ if (!stop) return; m_model->changeStop(stop, color); - QList stops = m_model->selectedStops(); - QListIterator itStop(stops); - while (itStop.hasNext()) { - QtGradientStop *s = itStop.next(); + const QList stops = m_model->selectedStops(); + for (QtGradientStop *s : stops) { if (s != stop) m_model->changeStop(s, color); } @@ -417,10 +415,8 @@ if (!stop) return; m_model->changeStop(stop, color); - QList stops = m_model->selectedStops(); - QListIterator itStop(stops); - while (itStop.hasNext()) { - QtGradientStop *s = itStop.next(); + const QList stops = m_model->selectedStops(); + for (QtGradientStop *s : stops) { if (s != stop) { QColor c = s->color(); if (m_ui->hsvRadioButton->isChecked()) @@ -436,7 +432,7 @@ { QColor c = m_ui->hueColorLine->color(); if (m_ui->hsvRadioButton->isChecked()) - c.setHsvF((qreal)color / 360.0, c.saturationF(), c.valueF(), c.alphaF()); + c.setHsvF(qreal(color) / 360.0, c.saturationF(), c.valueF(), c.alphaF()); else c.setRed(color); slotChangeHue(c); @@ -448,10 +444,8 @@ if (!stop) return; m_model->changeStop(stop, color); - QList stops = m_model->selectedStops(); - QListIterator itStop(stops); - while (itStop.hasNext()) { - QtGradientStop *s = itStop.next(); + const QList stops = m_model->selectedStops(); + for (QtGradientStop *s : stops) { if (s != stop) { QColor c = s->color(); if (m_ui->hsvRadioButton->isChecked()) { @@ -471,7 +465,7 @@ { QColor c = m_ui->saturationColorLine->color(); if (m_ui->hsvRadioButton->isChecked()) - c.setHsvF(c.hueF(), (qreal)color / 255, c.valueF(), c.alphaF()); + c.setHsvF(c.hueF(), qreal(color) / 255, c.valueF(), c.alphaF()); else c.setGreen(color); slotChangeSaturation(c); @@ -483,10 +477,8 @@ if (!stop) return; m_model->changeStop(stop, color); - QList stops = m_model->selectedStops(); - QListIterator itStop(stops); - while (itStop.hasNext()) { - QtGradientStop *s = itStop.next(); + const QList stops = m_model->selectedStops(); + for (QtGradientStop *s : stops) { if (s != stop) { QColor c = s->color(); if (m_ui->hsvRadioButton->isChecked()) { @@ -506,7 +498,7 @@ { QColor c = m_ui->valueColorLine->color(); if (m_ui->hsvRadioButton->isChecked()) - c.setHsvF(c.hueF(), c.saturationF(), (qreal)color / 255, c.alphaF()); + c.setHsvF(c.hueF(), c.saturationF(), qreal(color) / 255, c.alphaF()); else c.setBlue(color); slotChangeValue(c); @@ -518,10 +510,8 @@ if (!stop) return; m_model->changeStop(stop, color); - QList stops = m_model->selectedStops(); - QListIterator itStop(stops); - while (itStop.hasNext()) { - QtGradientStop *s = itStop.next(); + const QList stops = m_model->selectedStops(); + for (QtGradientStop *s : stops) { if (s != stop) { QColor c = s->color(); if (m_ui->hsvRadioButton->isChecked()) { @@ -541,7 +531,7 @@ { QColor c = m_ui->alphaColorLine->color(); if (m_ui->hsvRadioButton->isChecked()) - c.setHsvF(c.hueF(), c.saturationF(), c.valueF(), (qreal)color / 255); + c.setHsvF(c.hueF(), c.saturationF(), c.valueF(), qreal(color) / 255); else c.setAlpha(color); slotChangeAlpha(c); @@ -673,10 +663,8 @@ void QtGradientStopsController::setGradientStops(const QGradientStops &stops) { d_ptr->m_model->clear(); - QVectorIterator > it(stops); QtGradientStop *first = 0; - while (it.hasNext()) { - QPair pair = it.next(); + for (const QPair &pair : stops) { QtGradientStop *stop = d_ptr->m_model->addStop(pair.first, pair.second); if (!first) first = stop; @@ -688,12 +676,9 @@ QGradientStops QtGradientStopsController::gradientStops() const { QGradientStops stops; - QList stopsList = d_ptr->m_model->stops().values(); - QListIterator itStop(stopsList); - while (itStop.hasNext()) { - QtGradientStop *stop = itStop.next(); + const QList stopsList = d_ptr->m_model->stops().values(); + for (const QtGradientStop *stop : stopsList) stops << QPair(stop->position(), stop->color()); - } return stops; } diff -Nru qttools-opensource-src-5.7.1/src/shared/qtgradienteditor/qtgradientstopsmodel.cpp qttools-opensource-src-5.9.1/src/shared/qtgradienteditor/qtgradientstopsmodel.cpp --- qttools-opensource-src-5.7.1/src/shared/qtgradienteditor/qtgradientstopsmodel.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/shared/qtgradienteditor/qtgradientstopsmodel.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -330,11 +330,8 @@ QtGradientStopsModel *model = new QtGradientStopsModel(); QMap stopsToClone = stops(); - QMapIterator it(stopsToClone); - while (it.hasNext()) { - it.next(); + for (auto it = stopsToClone.cbegin(), end = stopsToClone.cend(); it != end; ++it) model->addStop(it.key(), it.value()->color()); - } // clone selection and current also return model; } @@ -378,12 +375,9 @@ PositionStopMap stopList; - QList selected = selectedStops(); - QListIterator it(selected); - while (it.hasNext()) { - QtGradientStop *stop = it.next(); + const QList selected = selectedStops(); + for (QtGradientStop *stop : selected) stopList[stop->position()] = stop; - } stopList[current->position()] = current; PositionStopMap::ConstIterator itStop = forward ? stopList.constBegin() : stopList.constEnd(); @@ -412,18 +406,16 @@ void QtGradientStopsModel::clear() { - QList stopsList = stops().values(); - QListIterator it(stopsList); - while (it.hasNext()) - removeStop(it.next()); + const QList stopsList = stops().values(); + for (QtGradientStop *stop : stopsList) + removeStop(stop); } void QtGradientStopsModel::clearSelection() { - QList stopsList = selectedStops(); - QListIterator it(stopsList); - while (it.hasNext()) - selectStop(it.next(), false); + const QList stopsList = selectedStops(); + for (QtGradientStop *stop : stopsList) + selectStop(stop, false); } void QtGradientStopsModel::flipAll() @@ -453,20 +445,16 @@ void QtGradientStopsModel::selectAll() { - QList stopsList = stops().values(); - QListIterator it(stopsList); - while (it.hasNext()) - selectStop(it.next(), true); + const auto stopsMap = stops(); + for (auto it = stopsMap.cbegin(), end = stopsMap.cend(); it != end; ++it) + selectStop(it.value(), true); } void QtGradientStopsModel::deleteStops() { - QList selected = selectedStops(); - QListIterator itSel(selected); - while (itSel.hasNext()) { - QtGradientStop *stop = itSel.next(); + const QList selected = selectedStops(); + for (QtGradientStop *stop : selected) removeStop(stop); - } QtGradientStop *current = currentStop(); if (current) removeStop(current); diff -Nru qttools-opensource-src-5.7.1/src/shared/qtgradienteditor/qtgradientstopswidget.cpp qttools-opensource-src-5.9.1/src/shared/qtgradienteditor/qtgradientstopswidget.cpp --- qttools-opensource-src-5.7.1/src/shared/qtgradienteditor/qtgradientstopswidget.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/shared/qtgradienteditor/qtgradientstopswidget.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -120,7 +120,7 @@ int w = size.width(); int max = q_ptr->horizontalScrollBar()->maximum(); int val = q_ptr->horizontalScrollBar()->value(); - return ((double)x * m_scaleFactor + w * val) / (w * (m_scaleFactor + max)); + return (double(x) * m_scaleFactor + w * val) / (w * (m_scaleFactor + max)); } double QtGradientStopsWidgetPrivate::toViewport(double x) const @@ -135,10 +135,7 @@ QtGradientStop *QtGradientStopsWidgetPrivate::stopAt(const QPoint &viewportPos) const { double posY = m_handleSize / 2; - QListIterator itStop(m_stops); - while (itStop.hasNext()) { - QtGradientStop *stop = itStop.next(); - + for (QtGradientStop *stop : m_stops) { double posX = toViewport(stop->position()); double x = viewportPos.x() - posX; @@ -154,10 +151,7 @@ { QList stops; double posY = m_handleSize / 2; - QListIterator itStop(m_stops); - while (itStop.hasNext()) { - QtGradientStop *stop = itStop.next(); - + for (QtGradientStop *stop : m_stops) { double posX = toViewport(stop->position()); double x = viewportPos.x() - posX; @@ -176,11 +170,9 @@ int viewportX = qRound(toViewport(stop->position())); m_moveOffset = x - viewportX; - QList stops = m_stops; + const QList stops = m_stops; m_stops.clear(); - QListIterator itStop(stops); - while (itStop.hasNext()) { - QtGradientStop *s = itStop.next(); + for (QtGradientStop *s : stops) { if (m_model->isSelected(s) || s == stop) { m_moveStops[s] = s->position() - stop->position(); m_stops.append(s); @@ -188,9 +180,7 @@ m_moveOriginal[s->position()] = s->color(); } } - itStop.toFront(); - while (itStop.hasNext()) { - QtGradientStop *s = itStop.next(); + for (QtGradientStop *s : stops) { if (!m_model->isSelected(s)) m_stops.append(s); } @@ -456,15 +446,13 @@ connect(d_ptr->m_model, SIGNAL(currentStopChanged(QtGradientStop*)), this, SLOT(slotCurrentStopChanged(QtGradientStop*))); - QList stops = d_ptr->m_model->stops().values(); - QListIterator itStop(stops); - while (itStop.hasNext()) - d_ptr->slotStopAdded(itStop.next()); - - QList selected = d_ptr->m_model->selectedStops(); - QListIterator itSelect(selected); - while (itSelect.hasNext()) - d_ptr->slotStopSelected(itSelect.next(), true); + const QtGradientStopsModel::PositionStopMap stopsMap = d_ptr->m_model->stops(); + for (auto it = stopsMap.cbegin(), end = stopsMap.cend(); it != end; ++it) + d_ptr->slotStopAdded(it.value()); + + const QList selected = d_ptr->m_model->selectedStops(); + for (QtGradientStop *stop : selected) + d_ptr->slotStopSelected(stop, true); d_ptr->slotCurrentStopChanged(d_ptr->m_model->currentStop()); } @@ -670,9 +658,7 @@ double x1 = d_ptr->fromViewport(xv1); double x2 = d_ptr->fromViewport(xv2); - QListIterator itStop(d_ptr->m_stops); - while (itStop.hasNext()) { - QtGradientStop *stop = itStop.next(); + for (QtGradientStop *stop : qAsConst(d_ptr->m_stops)) { if ((stop->position() >= x1 && stop->position() <= x2) || beginList.contains(stop) || endList.contains(stop)) d_ptr->m_model->selectStop(stop, true); @@ -789,21 +775,20 @@ p.begin(viewport()); } - double viewBegin = (double)w * horizontalScrollBar()->value() / d_ptr->m_scaleFactor; + const double viewBegin = double(w) * horizontalScrollBar()->value() / d_ptr->m_scaleFactor; int val = horizontalScrollBar()->value(); int max = horizontalScrollBar()->maximum(); - double begin = (double)val / (d_ptr->m_scaleFactor + max); - double end = (double)(val + d_ptr->m_scaleFactor) / (d_ptr->m_scaleFactor + max); + const double begin = double(val) / (d_ptr->m_scaleFactor + max); + const double end = double(val + d_ptr->m_scaleFactor) / (d_ptr->m_scaleFactor + max); double width = end - begin; if (h > 0) { QLinearGradient lg(0, 0, w, 0); QMap stops = model->stops(); - QMapIterator itStop(stops); - while (itStop.hasNext()) { - QtGradientStop *stop = itStop.next().value(); + for (auto itStop = stops.cbegin(), send = stops.cend(); itStop != send; ++itStop) { + QtGradientStop *stop = itStop.value(); double pos = stop->position(); if (pos >= begin && pos <= end) { double gradPos = (pos - begin) / width; @@ -842,10 +827,8 @@ QPen pen; p.setRenderHint(QPainter::Antialiasing); - QListIterator itStop(d_ptr->m_stops); - itStop.toBack(); - while (itStop.hasPrevious()) { - QtGradientStop *stop = itStop.previous(); + for (auto rit = d_ptr->m_stops.crbegin(), rend = d_ptr->m_stops.crend(); rit != rend; ++rit) { + QtGradientStop *stop = *rit; double x = stop->position(); if (x >= begin - handleWidth / 2 && x <= end + handleWidth / 2) { double viewX = x * w * (d_ptr->m_scaleFactor + max) / d_ptr->m_scaleFactor - viewBegin; @@ -1136,8 +1119,8 @@ int oldVal = horizontalScrollBar()->value(); horizontalScrollBar()->setRange(0, qRound(d_ptr->m_scaleFactor * (d_ptr->m_zoom - 1))); int newMax = horizontalScrollBar()->maximum(); - double newVal = (oldVal + (double)d_ptr->m_scaleFactor / 2) * (newMax + d_ptr->m_scaleFactor) - / (oldMax + d_ptr->m_scaleFactor) - (double)d_ptr->m_scaleFactor / 2; + const double newVal = (oldVal + double(d_ptr->m_scaleFactor) / 2) * (newMax + d_ptr->m_scaleFactor) + / (oldMax + d_ptr->m_scaleFactor) - double(d_ptr->m_scaleFactor) / 2; horizontalScrollBar()->setValue(qRound(newVal)); viewport()->update(); } diff -Nru qttools-opensource-src-5.7.1/src/shared/qtgradienteditor/qtgradientutils.cpp qttools-opensource-src-5.9.1/src/shared/qtgradienteditor/qtgradientutils.cpp --- qttools-opensource-src-5.7.1/src/shared/qtgradienteditor/qtgradientutils.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/shared/qtgradienteditor/qtgradientutils.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -146,10 +146,9 @@ gradElem.setAttribute(QLatin1String("spread"), gradientSpreadToString(gradient.spread())); gradElem.setAttribute(QLatin1String("coordinateMode"), gradientCoordinateModeToString(gradient.coordinateMode())); - QGradientStops stops = gradient.stops(); - QVectorIterator it(stops); - while (it.hasNext()) - gradElem.appendChild(saveGradientStop(doc, it.next())); + const QGradientStops stops = gradient.stops(); + for (const QGradientStop &stop : stops) + gradElem.appendChild(saveGradientStop(doc, stop)); if (type == QGradient::LinearGradient) { const QLinearGradient &g = *static_cast(&gradient); @@ -245,9 +244,7 @@ QDomElement rootElem = doc.createElement(QLatin1String("gradients")); QMap grads = manager->gradients(); - QMapIterator itGrad(grads); - while (itGrad.hasNext()) { - itGrad.next(); + for (auto itGrad = grads.cbegin(), end = grads.cend(); itGrad != end; ++itGrad) { QDomElement idElem = doc.createElement(QLatin1String("gradient")); idElem.setAttribute(QLatin1String("name"), itGrad.key()); QDomElement gradElem = saveGradient(doc, itGrad.value()); @@ -393,7 +390,8 @@ static QStringList styleSheetStops(const QGradient &gradient) { QStringList result; - foreach (const QGradientStop &stop, gradient.stops()) { + const QGradientStops &stops = gradient.stops(); + for (const QGradientStop &stop : stops) { const QColor color = stop.second; const QString stopDescription = QLatin1String("stop:") + QString::number(stop.first) + QLatin1String(" rgba(") diff -Nru qttools-opensource-src-5.7.1/src/shared/qtgradienteditor/qtgradientview.cpp qttools-opensource-src-5.9.1/src/shared/qtgradienteditor/qtgradientview.cpp --- qttools-opensource-src-5.7.1/src/shared/qtgradienteditor/qtgradientview.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/shared/qtgradienteditor/qtgradientview.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -252,11 +252,8 @@ return; QMap gradients = m_manager->gradients(); - QMapIterator itGrad(gradients); - while (itGrad.hasNext()) { - itGrad.next(); + for (auto itGrad = gradients.cbegin(), end = gradients.cend(); itGrad != end; ++itGrad) slotGradientAdded(itGrad.key(), itGrad.value()); - } connect(m_manager, SIGNAL(gradientAdded(QString,QGradient)), this, SLOT(slotGradientAdded(QString,QGradient))); diff -Nru qttools-opensource-src-5.7.1/src/shared/qtgradienteditor/qtgradientwidget.cpp qttools-opensource-src-5.9.1/src/shared/qtgradienteditor/qtgradientwidget.cpp --- qttools-opensource-src-5.7.1/src/shared/qtgradienteditor/qtgradientwidget.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/shared/qtgradienteditor/qtgradientwidget.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -382,15 +382,7 @@ y = current.y() - central.y(); x /= size().width() / 2; y /= size().height() / 2; - double r = sqrt(x * x + y * y); - - double arcSin = asin(y / r); - double arcCos = acos(x / r); - - double angle = arcCos * 180 / M_PI; - if (arcSin > 0) { - angle = -angle; - } + double angle = atan2(-y, x) * 180 / M_PI; d_ptr->m_angleOffset = d_ptr->m_angleConical - angle; d_ptr->m_dragAngle = d_ptr->m_angleConical; @@ -413,8 +405,7 @@ if (d_ptr->m_dragHandle == QtGradientWidgetPrivate::NoHandle) return; - QPointF newPos = QPointF((double)e->pos().x() - d_ptr->m_dragOffset.x(), - (double)e->pos().y() - d_ptr->m_dragOffset.y()); + const QPointF newPos = e->localPos() - d_ptr->m_dragOffset; QPointF newPoint = d_ptr->fromViewport(newPos); if (newPoint.x() < 0) newPoint.setX(0); @@ -480,18 +471,8 @@ y = current.y() - central.y(); x /= size().width() / 2; y /= size().height() / 2; - double r = sqrt(x * x + y * y); - - double arcSin = asin(y / r); - double arcCos = acos(x / r); - - double angle = arcCos * 180 / M_PI; - if (arcSin > 0) { - angle = -angle; - } - - angle += d_ptr->m_angleOffset; + double angle = atan2(-y, x) * 180 / M_PI + d_ptr->m_angleOffset; d_ptr->setAngleConical(angle); } } diff -Nru qttools-opensource-src-5.7.1/src/shared/qtpropertybrowser/qtbuttonpropertybrowser.cpp qttools-opensource-src-5.9.1/src/shared/qtpropertybrowser/qtbuttonpropertybrowser.cpp --- qttools-opensource-src-5.7.1/src/shared/qtpropertybrowser/qtbuttonpropertybrowser.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/shared/qtpropertybrowser/qtbuttonpropertybrowser.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -68,17 +68,15 @@ struct WidgetItem { - WidgetItem() : widget(0), label(0), widgetLabel(0), - button(0), container(0), layout(0), /*line(0), */parent(0), expanded(false) { } - QWidget *widget; // can be null - QLabel *label; // main label with property name - QLabel *widgetLabel; // label substitute showing the current value if there is no widget - QToolButton *button; // expandable button for items with children - QWidget *container; // container which is expanded when the button is clicked - QGridLayout *layout; // layout in container - WidgetItem *parent; + QWidget *widget{nullptr}; // can be null + QLabel *label{nullptr}; // main label with property name + QLabel *widgetLabel{nullptr}; // label substitute showing the current value if there is no widget + QToolButton *button{nullptr}; // expandable button for items with children + QWidget *container{nullptr}; // container which is expanded when the button is clicked + QGridLayout *layout{nullptr}; // layout in container + WidgetItem *parent{nullptr}; QList children; - bool expanded; + bool expanded{false}; }; private: void updateLater(); @@ -125,9 +123,7 @@ siblings = m_children; int row = 0; - QListIterator it(siblings); - while (it.hasNext()) { - WidgetItem *sibling = it.next(); + for (WidgetItem *sibling : qAsConst(siblings)) { if (sibling == item) return row; row += gridSpan(sibling); @@ -164,10 +160,7 @@ void QtButtonPropertyBrowserPrivate::slotUpdate() { - QListIterator itItem(m_recreateQueue); - while (itItem.hasNext()) { - WidgetItem *item = itItem.next(); - + for (WidgetItem *item : qAsConst(m_recreateQueue)) { WidgetItem *parent = item->parent; QWidget *w = 0; QGridLayout *l = 0; diff -Nru qttools-opensource-src-5.7.1/src/shared/qtpropertybrowser/qteditorfactory.cpp qttools-opensource-src-5.9.1/src/shared/qtpropertybrowser/qteditorfactory.cpp --- qttools-opensource-src-5.7.1/src/shared/qtpropertybrowser/qteditorfactory.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/shared/qtpropertybrowser/qteditorfactory.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -149,11 +149,10 @@ void QtSpinBoxFactoryPrivate::slotPropertyChanged(QtProperty *property, int value) { - if (!m_createdEditors.contains(property)) + const auto it = m_createdEditors.constFind(property); + if (it == m_createdEditors.cend()) return; - QListIterator itEditor(m_createdEditors[property]); - while (itEditor.hasNext()) { - QSpinBox *editor = itEditor.next(); + for (QSpinBox *editor : it.value()) { if (editor->value() != value) { editor->blockSignals(true); editor->setValue(value); @@ -164,16 +163,15 @@ void QtSpinBoxFactoryPrivate::slotRangeChanged(QtProperty *property, int min, int max) { - if (!m_createdEditors.contains(property)) + const auto it = m_createdEditors.constFind(property); + if (it == m_createdEditors.cend()) return; QtIntPropertyManager *manager = q_ptr->propertyManager(property); if (!manager) return; - QListIterator itEditor(m_createdEditors[property]); - while (itEditor.hasNext()) { - QSpinBox *editor = itEditor.next(); + for (QSpinBox *editor : it.value()) { editor->blockSignals(true); editor->setRange(min, max); editor->setValue(manager->value(property)); @@ -183,11 +181,10 @@ void QtSpinBoxFactoryPrivate::slotSingleStepChanged(QtProperty *property, int step) { - if (!m_createdEditors.contains(property)) + const auto it = m_createdEditors.constFind(property); + if (it == m_createdEditors.cend()) return; - QListIterator itEditor(m_createdEditors[property]); - while (itEditor.hasNext()) { - QSpinBox *editor = itEditor.next(); + for (QSpinBox *editor : it.value()) { editor->blockSignals(true); editor->setSingleStep(step); editor->blockSignals(false); @@ -305,11 +302,10 @@ void QtSliderFactoryPrivate::slotPropertyChanged(QtProperty *property, int value) { - if (!m_createdEditors.contains(property)) + const auto it = m_createdEditors.constFind(property); + if (it == m_createdEditors.cend()) return; - QListIterator itEditor(m_createdEditors[property]); - while (itEditor.hasNext()) { - QSlider *editor = itEditor.next(); + for (QSlider *editor : it.value()) { editor->blockSignals(true); editor->setValue(value); editor->blockSignals(false); @@ -318,16 +314,15 @@ void QtSliderFactoryPrivate::slotRangeChanged(QtProperty *property, int min, int max) { - if (!m_createdEditors.contains(property)) + const auto it = m_createdEditors.constFind(property); + if (it == m_createdEditors.cend()) return; QtIntPropertyManager *manager = q_ptr->propertyManager(property); if (!manager) return; - QListIterator itEditor(m_createdEditors[property]); - while (itEditor.hasNext()) { - QSlider *editor = itEditor.next(); + for (QSlider *editor : it.value()) { editor->blockSignals(true); editor->setRange(min, max); editor->setValue(manager->value(property)); @@ -337,11 +332,10 @@ void QtSliderFactoryPrivate::slotSingleStepChanged(QtProperty *property, int step) { - if (!m_createdEditors.contains(property)) + const auto it = m_createdEditors.constFind(property); + if (it == m_createdEditors.cend()) return; - QListIterator itEditor(m_createdEditors[property]); - while (itEditor.hasNext()) { - QSlider *editor = itEditor.next(); + for (QSlider *editor : it.value()) { editor->blockSignals(true); editor->setSingleStep(step); editor->blockSignals(false); @@ -459,12 +453,11 @@ void QtScrollBarFactoryPrivate::slotPropertyChanged(QtProperty *property, int value) { - if (!m_createdEditors.contains(property)) + const auto it = m_createdEditors.constFind(property); + if (it == m_createdEditors.cend()) return; - QListIterator itEditor( m_createdEditors[property]); - while (itEditor.hasNext()) { - QScrollBar *editor = itEditor.next(); + for (QScrollBar *editor : it.value()) { editor->blockSignals(true); editor->setValue(value); editor->blockSignals(false); @@ -473,16 +466,15 @@ void QtScrollBarFactoryPrivate::slotRangeChanged(QtProperty *property, int min, int max) { - if (!m_createdEditors.contains(property)) + const auto it = m_createdEditors.constFind(property); + if (it == m_createdEditors.cend()) return; QtIntPropertyManager *manager = q_ptr->propertyManager(property); if (!manager) return; - QListIterator itEditor( m_createdEditors[property]); - while (itEditor.hasNext()) { - QScrollBar *editor = itEditor.next(); + for (QScrollBar *editor : it.value()) { editor->blockSignals(true); editor->setRange(min, max); editor->setValue(manager->value(property)); @@ -492,11 +484,10 @@ void QtScrollBarFactoryPrivate::slotSingleStepChanged(QtProperty *property, int step) { - if (!m_createdEditors.contains(property)) + const auto it = m_createdEditors.constFind(property); + if (it == m_createdEditors.cend()) return; - QListIterator itEditor(m_createdEditors[property]); - while (itEditor.hasNext()) { - QScrollBar *editor = itEditor.next(); + for (QScrollBar *editor : it.value()) { editor->blockSignals(true); editor->setSingleStep(step); editor->blockSignals(false); @@ -610,12 +601,11 @@ void QtCheckBoxFactoryPrivate::slotPropertyChanged(QtProperty *property, bool value) { - if (!m_createdEditors.contains(property)) + const auto it = m_createdEditors.constFind(property); + if (it == m_createdEditors.cend()) return; - QListIterator itEditor(m_createdEditors[property]); - while (itEditor.hasNext()) { - QtBoolEdit *editor = itEditor.next(); + for (QtBoolEdit *editor : it.value()) { editor->blockCheckBoxSignals(true); editor->setChecked(value); editor->blockCheckBoxSignals(false); @@ -724,10 +714,10 @@ void QtDoubleSpinBoxFactoryPrivate::slotPropertyChanged(QtProperty *property, double value) { - QList editors = m_createdEditors[property]; - QListIterator itEditor(m_createdEditors[property]); - while (itEditor.hasNext()) { - QDoubleSpinBox *editor = itEditor.next(); + const auto it = m_createdEditors.constFind(property); + if (it == m_createdEditors.cend()) + return; + for (QDoubleSpinBox *editor : it.value()) { if (editor->value() != value) { editor->blockSignals(true); editor->setValue(value); @@ -739,17 +729,15 @@ void QtDoubleSpinBoxFactoryPrivate::slotRangeChanged(QtProperty *property, double min, double max) { - if (!m_createdEditors.contains(property)) + const auto it = m_createdEditors.constFind(property); + if (it == m_createdEditors.cend()) return; QtDoublePropertyManager *manager = q_ptr->propertyManager(property); if (!manager) return; - QList editors = m_createdEditors[property]; - QListIterator itEditor(editors); - while (itEditor.hasNext()) { - QDoubleSpinBox *editor = itEditor.next(); + for (QDoubleSpinBox *editor : it.value()) { editor->blockSignals(true); editor->setRange(min, max); editor->setValue(manager->value(property)); @@ -759,17 +747,15 @@ void QtDoubleSpinBoxFactoryPrivate::slotSingleStepChanged(QtProperty *property, double step) { - if (!m_createdEditors.contains(property)) + const auto it = m_createdEditors.constFind(property); + if (it == m_createdEditors.cend()) return; QtDoublePropertyManager *manager = q_ptr->propertyManager(property); if (!manager) return; - QList editors = m_createdEditors[property]; - QListIterator itEditor(editors); - while (itEditor.hasNext()) { - QDoubleSpinBox *editor = itEditor.next(); + for (QDoubleSpinBox *editor : it.value()) { editor->blockSignals(true); editor->setSingleStep(step); editor->blockSignals(false); @@ -778,17 +764,15 @@ void QtDoubleSpinBoxFactoryPrivate::slotDecimalsChanged(QtProperty *property, int prec) { - if (!m_createdEditors.contains(property)) + const auto it = m_createdEditors.constFind(property); + if (it == m_createdEditors.constEnd()) return; QtDoublePropertyManager *manager = q_ptr->propertyManager(property); if (!manager) return; - QList editors = m_createdEditors[property]; - QListIterator itEditor(editors); - while (itEditor.hasNext()) { - QDoubleSpinBox *editor = itEditor.next(); + for (QDoubleSpinBox *editor : it.value()) { editor->blockSignals(true); editor->setDecimals(prec); editor->setValue(manager->value(property)); @@ -912,12 +896,11 @@ void QtLineEditFactoryPrivate::slotPropertyChanged(QtProperty *property, const QString &value) { - if (!m_createdEditors.contains(property)) + const auto it = m_createdEditors.constFind(property); + if (it == m_createdEditors.constEnd()) return; - QListIterator itEditor( m_createdEditors[property]); - while (itEditor.hasNext()) { - QLineEdit *editor = itEditor.next(); + for (QLineEdit *editor : it.value()) { if (editor->text() != value) editor->setText(value); } @@ -926,16 +909,15 @@ void QtLineEditFactoryPrivate::slotRegExpChanged(QtProperty *property, const QRegExp ®Exp) { - if (!m_createdEditors.contains(property)) + const auto it = m_createdEditors.constFind(property); + if (it == m_createdEditors.constEnd()) return; QtStringPropertyManager *manager = q_ptr->propertyManager(property); if (!manager) return; - QListIterator itEditor(m_createdEditors[property]); - while (itEditor.hasNext()) { - QLineEdit *editor = itEditor.next(); + for (QLineEdit *editor : it.value()) { editor->blockSignals(true); const QValidator *oldValidator = editor->validator(); QValidator *newValidator = 0; @@ -1059,11 +1041,10 @@ void QtDateEditFactoryPrivate::slotPropertyChanged(QtProperty *property, const QDate &value) { - if (!m_createdEditors.contains(property)) + const auto it = m_createdEditors.constFind(property); + if (it == m_createdEditors.constEnd()) return; - QListIterator itEditor(m_createdEditors[property]); - while (itEditor.hasNext()) { - QDateEdit *editor = itEditor.next(); + for (QDateEdit *editor : it.value()) { editor->blockSignals(true); editor->setDate(value); editor->blockSignals(false); @@ -1073,16 +1054,15 @@ void QtDateEditFactoryPrivate::slotRangeChanged(QtProperty *property, const QDate &min, const QDate &max) { - if (!m_createdEditors.contains(property)) + const auto it = m_createdEditors.constFind(property); + if (it == m_createdEditors.constEnd()) return; QtDatePropertyManager *manager = q_ptr->propertyManager(property); if (!manager) return; - QListIterator itEditor(m_createdEditors[property]); - while (itEditor.hasNext()) { - QDateEdit *editor = itEditor.next(); + for (QDateEdit *editor : it.value()) { editor->blockSignals(true); editor->setDateRange(min, max); editor->setDate(manager->value(property)); @@ -1196,11 +1176,10 @@ void QtTimeEditFactoryPrivate::slotPropertyChanged(QtProperty *property, const QTime &value) { - if (!m_createdEditors.contains(property)) + const auto it = m_createdEditors.constFind(property); + if (it == m_createdEditors.constEnd()) return; - QListIterator itEditor(m_createdEditors[property]); - while (itEditor.hasNext()) { - QTimeEdit *editor = itEditor.next(); + for (QTimeEdit *editor : it.value()) { editor->blockSignals(true); editor->setTime(value); editor->blockSignals(false); @@ -1309,12 +1288,11 @@ void QtDateTimeEditFactoryPrivate::slotPropertyChanged(QtProperty *property, const QDateTime &value) { - if (!m_createdEditors.contains(property)) + const auto it = m_createdEditors.constFind(property); + if (it == m_createdEditors.constEnd()) return; - QListIterator itEditor(m_createdEditors[property]); - while (itEditor.hasNext()) { - QDateTimeEdit *editor = itEditor.next(); + for (QDateTimeEdit *editor : it.value()) { editor->blockSignals(true); editor->setDateTime(value); editor->blockSignals(false); @@ -1422,12 +1400,11 @@ void QtKeySequenceEditorFactoryPrivate::slotPropertyChanged(QtProperty *property, const QKeySequence &value) { - if (!m_createdEditors.contains(property)) + const auto it = m_createdEditors.constFind(property); + if (it == m_createdEditors.constEnd()) return; - QListIterator itEditor(m_createdEditors[property]); - while (itEditor.hasNext()) { - QKeySequenceEdit *editor = itEditor.next(); + for (QKeySequenceEdit *editor : it.value()) { editor->blockSignals(true); editor->setKeySequence(value); editor->blockSignals(false); @@ -1566,10 +1543,8 @@ if (o == m_lineEdit && e->type() == QEvent::ContextMenu) { QContextMenuEvent *c = static_cast(e); QMenu *menu = m_lineEdit->createStandardContextMenu(); - QList actions = menu->actions(); - QListIterator itAction(actions); - while (itAction.hasNext()) { - QAction *action = itAction.next(); + const QList actions = menu->actions(); + for (QAction *action : actions) { action->setShortcut(QKeySequence()); QString actionString = action->text(); const int pos = actionString.lastIndexOf(QLatin1Char('\t')); @@ -1704,12 +1679,11 @@ void QtCharEditorFactoryPrivate::slotPropertyChanged(QtProperty *property, const QChar &value) { - if (!m_createdEditors.contains(property)) + const auto it = m_createdEditors.constFind(property); + if (it == m_createdEditors.constEnd()) return; - QListIterator itEditor(m_createdEditors[property]); - while (itEditor.hasNext()) { - QtCharEdit *editor = itEditor.next(); + for (QtCharEdit *editor : it.value()) { editor->blockSignals(true); editor->setValue(value); editor->blockSignals(false); @@ -1817,12 +1791,11 @@ void QtEnumEditorFactoryPrivate::slotPropertyChanged(QtProperty *property, int value) { - if (!m_createdEditors.contains(property)) + const auto it = m_createdEditors.constFind(property); + if (it == m_createdEditors.constEnd()) return; - QListIterator itEditor(m_createdEditors[property]); - while (itEditor.hasNext()) { - QComboBox *editor = itEditor.next(); + for (QComboBox *editor : it.value()) { editor->blockSignals(true); editor->setCurrentIndex(value); editor->blockSignals(false); @@ -1832,7 +1805,8 @@ void QtEnumEditorFactoryPrivate::slotEnumNamesChanged(QtProperty *property, const QStringList &enumNames) { - if (!m_createdEditors.contains(property)) + const auto it = m_createdEditors.constFind(property); + if (it == m_createdEditors.constEnd()) return; QtEnumPropertyManager *manager = q_ptr->propertyManager(property); @@ -1841,9 +1815,7 @@ QMap enumIcons = manager->enumIcons(property); - QListIterator itEditor(m_createdEditors[property]); - while (itEditor.hasNext()) { - QComboBox *editor = itEditor.next(); + for (QComboBox *editor : it.value()) { editor->blockSignals(true); editor->clear(); editor->addItems(enumNames); @@ -1858,7 +1830,8 @@ void QtEnumEditorFactoryPrivate::slotEnumIconsChanged(QtProperty *property, const QMap &enumIcons) { - if (!m_createdEditors.contains(property)) + const auto it = m_createdEditors.constFind(property); + if (it == m_createdEditors.constEnd()) return; QtEnumPropertyManager *manager = q_ptr->propertyManager(property); @@ -1866,9 +1839,7 @@ return; const QStringList enumNames = manager->enumNames(property); - QListIterator itEditor(m_createdEditors[property]); - while (itEditor.hasNext()) { - QComboBox *editor = itEditor.next(); + for (QComboBox *editor : it.value()) { editor->blockSignals(true); const int nameCount = enumNames.count(); for (int i = 0; i < nameCount; i++) @@ -2250,13 +2221,12 @@ void QtColorEditorFactoryPrivate::slotPropertyChanged(QtProperty *property, const QColor &value) { - const PropertyToEditorListMap::iterator it = m_createdEditors.find(property); - if (it == m_createdEditors.end()) + const PropertyToEditorListMap::const_iterator it = m_createdEditors.constFind(property); + if (it == m_createdEditors.constEnd()) return; - QListIterator itEditor(it.value()); - while (itEditor.hasNext()) - itEditor.next()->setValue(value); + for (QtColorEditWidget *e : it.value()) + e->setValue(value); } void QtColorEditorFactoryPrivate::slotSetValue(const QColor &value) @@ -2463,13 +2433,12 @@ void QtFontEditorFactoryPrivate::slotPropertyChanged(QtProperty *property, const QFont &value) { - const PropertyToEditorListMap::iterator it = m_createdEditors.find(property); - if (it == m_createdEditors.end()) + const PropertyToEditorListMap::const_iterator it = m_createdEditors.constFind(property); + if (it == m_createdEditors.constEnd()) return; - QListIterator itEditor(it.value()); - while (itEditor.hasNext()) - itEditor.next()->setValue(value); + for (QtFontEditWidget *e : it.value()) + e->setValue(value); } void QtFontEditorFactoryPrivate::slotSetValue(const QFont &value) diff -Nru qttools-opensource-src-5.7.1/src/shared/qtpropertybrowser/qtgroupboxpropertybrowser.cpp qttools-opensource-src-5.9.1/src/shared/qtpropertybrowser/qtgroupboxpropertybrowser.cpp --- qttools-opensource-src-5.7.1/src/shared/qtpropertybrowser/qtgroupboxpropertybrowser.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/shared/qtpropertybrowser/qtgroupboxpropertybrowser.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -66,15 +66,13 @@ struct WidgetItem { - WidgetItem() : widget(0), label(0), widgetLabel(0), - groupBox(0), layout(0), line(0), parent(0) { } - QWidget *widget; // can be null - QLabel *label; - QLabel *widgetLabel; - QGroupBox *groupBox; - QGridLayout *layout; - QFrame *line; - WidgetItem *parent; + QWidget *widget{nullptr}; // can be null + QLabel *label{nullptr}; + QLabel *widgetLabel{nullptr}; + QGroupBox *groupBox{nullptr}; + QGridLayout *layout{nullptr}; + QFrame *line{nullptr}; + WidgetItem *parent{nullptr}; QList children; }; private: @@ -115,10 +113,7 @@ void QtGroupBoxPropertyBrowserPrivate::slotUpdate() { - QListIterator itItem(m_recreateQueue); - while (itItem.hasNext()) { - WidgetItem *item = itItem.next(); - + for (WidgetItem *item : qAsConst(m_recreateQueue)) { WidgetItem *par = item->parent; QWidget *w = 0; QGridLayout *l = 0; diff -Nru qttools-opensource-src-5.7.1/src/shared/qtpropertybrowser/qtpropertybrowser.cpp qttools-opensource-src-5.9.1/src/shared/qtpropertybrowser/qtpropertybrowser.cpp --- qttools-opensource-src-5.7.1/src/shared/qtpropertybrowser/qtpropertybrowser.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/shared/qtpropertybrowser/qtpropertybrowser.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -161,25 +161,16 @@ */ QtProperty::~QtProperty() { - QSetIterator itParent(d_ptr->m_parentItems); - while (itParent.hasNext()) { - QtProperty *property = itParent.next(); + for (QtProperty *property : qAsConst(d_ptr->m_parentItems)) property->d_ptr->m_manager->d_ptr->propertyRemoved(this, property); - } d_ptr->m_manager->d_ptr->propertyDestroyed(this); - QListIterator itChild(d_ptr->m_subItems); - while (itChild.hasNext()) { - QtProperty *property = itChild.next(); + for (QtProperty *property : qAsConst(d_ptr->m_subItems)) property->d_ptr->m_parentItems.remove(this); - } - itParent.toFront(); - while (itParent.hasNext()) { - QtProperty *property = itParent.next(); + for (QtProperty *property : qAsConst(d_ptr->m_parentItems)) property->d_ptr->m_subItems.removeAll(this); - } } /*! @@ -699,11 +690,8 @@ */ void QtAbstractPropertyManager::clear() const { - while (!properties().isEmpty()) { - QSetIterator itProperty(properties()); - QtProperty *prop = itProperty.next(); - delete prop; - } + while (!d_ptr->m_properties.isEmpty()) + delete *d_ptr->m_properties.cbegin(); } /*! @@ -1291,12 +1279,9 @@ m_managerToProperties[manager].append(property); m_propertyToParents[property].append(parentProperty); - QList subList = property->subProperties(); - QListIterator itSub(subList); - while (itSub.hasNext()) { - QtProperty *subProperty = itSub.next(); + const QList subList = property->subProperties(); + for (QtProperty *subProperty : subList) insertSubTree(subProperty, property); - } } void QtAbstractPropertyBrowserPrivate::removeSubTree(QtProperty *property, @@ -1331,12 +1316,9 @@ m_managerToProperties.remove(manager); } - QList subList = property->subProperties(); - QListIterator itSub(subList); - while (itSub.hasNext()) { - QtProperty *subProperty = itSub.next(); + const QList subList = property->subProperties(); + for (QtProperty *subProperty : subList) removeSubTree(subProperty, property); - } } void QtAbstractPropertyBrowserPrivate::createBrowserIndexes(QtProperty *property, QtProperty *parentProperty, QtProperty *afterProperty) @@ -1344,14 +1326,11 @@ QMap parentToAfter; if (afterProperty) { QMap >::ConstIterator it = - m_propertyToIndexes.find(afterProperty); + m_propertyToIndexes.constFind(afterProperty); if (it == m_propertyToIndexes.constEnd()) return; - QList indexes = it.value(); - QListIterator itIndex(indexes); - while (itIndex.hasNext()) { - QtBrowserItem *idx = itIndex.next(); + for (QtBrowserItem *idx : it.value()) { QtBrowserItem *parentIdx = idx->parent(); if ((parentProperty && parentIdx && parentIdx->property() == parentProperty) || (!parentProperty && !parentIdx)) parentToAfter[idx->parent()] = idx; @@ -1362,12 +1341,8 @@ if (it == m_propertyToIndexes.constEnd()) return; - QList indexes = it.value(); - QListIterator itIndex(indexes); - while (itIndex.hasNext()) { - QtBrowserItem *idx = itIndex.next(); + for (QtBrowserItem *idx : it.value()) parentToAfter[idx] = 0; - } } else { parentToAfter[0] = 0; } @@ -1391,13 +1366,10 @@ q_ptr->itemInserted(newIndex, afterIndex); - QList subItems = property->subProperties(); - QListIterator itChild(subItems); + const QList subItems = property->subProperties(); QtBrowserItem *afterChild = 0; - while (itChild.hasNext()) { - QtProperty *child = itChild.next(); + for (QtProperty *child : subItems) afterChild = createBrowserIndex(child, newIndex, afterChild); - } return newIndex; } @@ -1405,24 +1377,18 @@ { QList toRemove; QMap >::ConstIterator it = - m_propertyToIndexes.find(property); + m_propertyToIndexes.constFind(property); if (it == m_propertyToIndexes.constEnd()) return; - QList indexes = it.value(); - QListIterator itIndex(indexes); - while (itIndex.hasNext()) { - QtBrowserItem *idx = itIndex.next(); + for (QtBrowserItem *idx : it.value()) { QtBrowserItem *parentIdx = idx->parent(); if ((parentProperty && parentIdx && parentIdx->property() == parentProperty) || (!parentProperty && !parentIdx)) toRemove.append(idx); } - QListIterator itRemove(toRemove); - while (itRemove.hasNext()) { - QtBrowserItem *index = itRemove.next(); + for (QtBrowserItem *index : qAsConst(toRemove)) removeBrowserIndex(index); - } } void QtAbstractPropertyBrowserPrivate::removeBrowserIndex(QtBrowserItem *index) @@ -1452,11 +1418,9 @@ void QtAbstractPropertyBrowserPrivate::clearIndex(QtBrowserItem *index) { - QList children = index->children(); - QListIterator itChild(children); - while (itChild.hasNext()) { - clearIndex(itChild.next()); - } + const QList children = index->children(); + for (QtBrowserItem *item : children) + clearIndex(item); delete index; } @@ -1497,12 +1461,9 @@ if (it == m_propertyToIndexes.constEnd()) return; - QList indexes = it.value(); - QListIterator itIndex(indexes); - while (itIndex.hasNext()) { - QtBrowserItem *idx = itIndex.next(); + const QList indexes = it.value(); + for (QtBrowserItem *idx : indexes) q_ptr->itemChanged(idx); - } //q_ptr->propertyChanged(property); } @@ -1701,10 +1662,9 @@ */ QtAbstractPropertyBrowser::~QtAbstractPropertyBrowser() { - QList indexes = topLevelItems(); - QListIterator itItem(indexes); - while (itItem.hasNext()) - d_ptr->clearIndex(itItem.next()); + const QList indexes = topLevelItems(); + for (QtBrowserItem *item : indexes) + d_ptr->clearIndex(item); } /*! @@ -1767,13 +1727,9 @@ */ void QtAbstractPropertyBrowser::clear() { - QList subList = properties(); - QListIterator itSub(subList); - itSub.toBack(); - while (itSub.hasPrevious()) { - QtProperty *property = itSub.previous(); - removeProperty(property); - } + const QList subList = properties(); + for (auto rit = subList.crbegin(), rend = subList.crend(); rit != rend; ++rit) + removeProperty(*rit); } /*! diff -Nru qttools-opensource-src-5.7.1/src/shared/qtpropertybrowser/qtpropertybrowser.h qttools-opensource-src-5.9.1/src/shared/qtpropertybrowser/qtpropertybrowser.h --- qttools-opensource-src-5.7.1/src/shared/qtpropertybrowser/qtpropertybrowser.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/shared/qtpropertybrowser/qtpropertybrowser.h 2017-06-23 12:03:39.000000000 +0000 @@ -148,9 +148,7 @@ explicit QtAbstractEditorFactory(QObject *parent) : QtAbstractEditorFactoryBase(parent) {} QWidget *createEditor(QtProperty *property, QWidget *parent) { - QSetIterator it(m_managers); - while (it.hasNext()) { - PropertyManager *manager = it.next(); + for (PropertyManager *manager : qAsConst(m_managers)) { if (manager == property->propertyManager()) { return createEditor(manager, property, parent); } @@ -182,9 +180,7 @@ PropertyManager *propertyManager(QtProperty *property) const { QtAbstractPropertyManager *manager = property->propertyManager(); - QSetIterator itManager(m_managers); - while (itManager.hasNext()) { - PropertyManager *m = itManager.next(); + for (PropertyManager *m : qAsConst(m_managers)) { if (m == manager) { return m; } @@ -198,9 +194,7 @@ virtual void disconnectPropertyManager(PropertyManager *manager) = 0; void managerDestroyed(QObject *manager) { - QSetIterator it(m_managers); - while (it.hasNext()) { - PropertyManager *m = it.next(); + for (PropertyManager *m : qAsConst(m_managers)) { if (m == manager) { m_managers.remove(m); return; @@ -210,9 +204,7 @@ private: void breakConnection(QtAbstractPropertyManager *manager) { - QSetIterator it(m_managers); - while (it.hasNext()) { - PropertyManager *m = it.next(); + for (PropertyManager *m : qAsConst(m_managers)) { if (m == manager) { removePropertyManager(m); return; diff -Nru qttools-opensource-src-5.7.1/src/shared/qtpropertybrowser/qtpropertymanager.cpp qttools-opensource-src-5.9.1/src/shared/qtpropertybrowser/qtpropertymanager.cpp --- qttools-opensource-src-5.7.1/src/shared/qtpropertybrowser/qtpropertymanager.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/shared/qtpropertybrowser/qtpropertymanager.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -52,6 +52,7 @@ #include #include +#include #include #include @@ -408,33 +409,27 @@ static QList sortCountries(const QList &countries) { QMultiMap nameToCountry; - QListIterator itCountry(countries); - while (itCountry.hasNext()) { - QLocale::Country country = itCountry.next(); + for (QLocale::Country country : countries) nameToCountry.insert(QLocale::countryToString(country), country); - } return nameToCountry.values(); } void QtMetaEnumProvider::initLocale() { QMultiMap nameToLanguage; - QLocale::Language language = QLocale::C; - while (language <= QLocale::LastLanguage) { + for (int l = QLocale::C, last = QLocale::LastLanguage; l <= last; ++l) { + const QLocale::Language language = static_cast(l); QLocale locale(language); if (locale.language() == language) nameToLanguage.insert(QLocale::languageToString(language), language); - language = (QLocale::Language)((uint)language + 1); // ++language } const QLocale system = QLocale::system(); if (!nameToLanguage.contains(QLocale::languageToString(system.language()))) nameToLanguage.insert(QLocale::languageToString(system.language()), system.language()); - QList languages = nameToLanguage.values(); - QListIterator itLang(languages); - while (itLang.hasNext()) { - QLocale::Language language = itLang.next(); + const QList languages = nameToLanguage.values(); + for (QLocale::Language language : languages) { QList countries; countries = QLocale::countriesForLanguage(language); if (countries.isEmpty() && language == system.language()) @@ -446,10 +441,8 @@ m_indexToLanguage[langIdx] = language; m_languageToIndex[language] = langIdx; QStringList countryNames; - QListIterator it(countries); int countryIdx = 0; - while (it.hasNext()) { - QLocale::Country country = it.next(); + for (QLocale::Country country : qAsConst(countries)) { countryNames << QLocale::countryToString(country); m_indexToCountry[langIdx][countryIdx] = country; m_countryToIndex[language][country] = countryIdx; @@ -589,11 +582,10 @@ struct Data { - Data() : val(0), minVal(-INT_MAX), maxVal(INT_MAX), singleStep(1) {} - int val; - int minVal; - int maxVal; - int singleStep; + int val{0}; + int minVal{-INT_MAX}; + int maxVal{INT_MAX}; + int singleStep{1}; int minimumValue() const { return minVal; } int maximumValue() const { return maxVal; } void setMinimumValue(int newMinVal) { setSimpleMinimumData(this, newMinVal); } @@ -866,12 +858,11 @@ struct Data { - Data() : val(0), minVal(-DBL_MAX), maxVal(DBL_MAX), singleStep(1), decimals(2) {} - double val; - double minVal; - double maxVal; - double singleStep; - int decimals; + double val{0}; + double minVal{-DBL_MAX}; + double maxVal{DBL_MAX}; + double singleStep{1}; + int decimals{2}; double minimumValue() const { return minVal; } double maximumValue() const { return maxVal; } void setMinimumValue(double newMinVal) { setSimpleMinimumData(this, newMinVal); } @@ -1549,11 +1540,9 @@ struct Data { - Data() : val(QDate::currentDate()), minVal(QDate(1752, 9, 14)), - maxVal(QDate(7999, 12, 31)) {} - QDate val; - QDate minVal; - QDate maxVal; + QDate val{QDate::currentDate()}; + QDate minVal{QDate(1752, 9, 14)}; + QDate maxVal{QDate(7999, 12, 31)}; QDate minimumValue() const { return minVal; } QDate maximumValue() const { return maxVal; } void setMinimumValue(const QDate &newMinVal) { setSimpleMinimumData(this, newMinVal); } @@ -2712,9 +2701,8 @@ struct Data { - Data() : decimals(2) {} QPointF val; - int decimals; + int decimals{2}; }; void slotDoubleChanged(QtProperty *property, double value); @@ -2995,10 +2983,9 @@ struct Data { - Data() : val(QSize(0, 0)), minVal(QSize(0, 0)), maxVal(QSize(INT_MAX, INT_MAX)) {} - QSize val; - QSize minVal; - QSize maxVal; + QSize val{0, 0}; + QSize minVal{0, 0}; + QSize maxVal{INT_MAX, INT_MAX}; QSize minimumValue() const { return minVal; } QSize maximumValue() const { return maxVal; } void setMinimumValue(const QSize &newMinVal) { setSizeMinimumData(this, newMinVal); } @@ -3340,11 +3327,10 @@ struct Data { - Data() : val(QSizeF(0, 0)), minVal(QSizeF(0, 0)), maxVal(QSizeF(INT_MAX, INT_MAX)), decimals(2) {} - QSizeF val; - QSizeF minVal; - QSizeF maxVal; - int decimals; + QSizeF val{0, 0}; + QSizeF minVal{0, 0}; + QSizeF maxVal{std::numeric_limits::max(), std::numeric_limits::max()}; + int decimals{2}; QSizeF minimumValue() const { return minVal; } QSizeF maximumValue() const { return maxVal; } void setMinimumValue(const QSizeF &newMinVal) { setSizeMinimumData(this, newMinVal); } @@ -3739,8 +3725,7 @@ struct Data { - Data() : val(0, 0, 0, 0) {} - QRect val; + QRect val{0, 0, 0, 0}; QRect constraint; }; @@ -4148,10 +4133,9 @@ struct Data { - Data() : val(0, 0, 0, 0), decimals(2) {} - QRectF val; + QRectF val{0, 0, 0, 0}; QRectF constraint; - int decimals; + int decimals{2}; }; typedef QMap PropertyValueMap; @@ -4615,8 +4599,7 @@ struct Data { - Data() : val(-1) {} - int val; + int val{-1}; QStringList enumNames; QMap enumIcons; }; @@ -4888,8 +4871,7 @@ struct Data { - Data() : val(-1) {} - int val; + int val{-1}; QStringList flagNames; }; @@ -4909,10 +4891,11 @@ if (prop == 0) return; - QListIterator itProp(m_propertyToFlags[prop]); + const auto pfit = m_propertyToFlags.constFind(prop); + if (pfit == m_propertyToFlags.constEnd()) + return; int level = 0; - while (itProp.hasNext()) { - QtProperty *p = itProp.next(); + for (QtProperty *p : pfit.value()) { if (p == property) { int v = m_values[prop].val; if (value) { @@ -5113,13 +5096,14 @@ it.value() = data; - QListIterator itProp(d_ptr->m_propertyToFlags[property]); + const auto pfit = d_ptr->m_propertyToFlags.constFind(property); int level = 0; - while (itProp.hasNext()) { - QtProperty *prop = itProp.next(); - if (prop) - d_ptr->m_boolPropertyManager->setValue(prop, val & (1 << level)); - level++; + if (pfit != d_ptr->m_propertyToFlags.constEnd()) { + for (QtProperty *prop : pfit.value()) { + if (prop) + d_ptr->m_boolPropertyManager->setValue(prop, val & (1 << level)); + level++; + } } emit propertyChanged(property); @@ -5149,19 +5133,18 @@ it.value() = data; - QListIterator itProp(d_ptr->m_propertyToFlags[property]); - while (itProp.hasNext()) { - QtProperty *prop = itProp.next(); - if (prop) { - delete prop; - d_ptr->m_flagToProperty.remove(prop); + const auto pfit = d_ptr->m_propertyToFlags.find(property); + if (pfit != d_ptr->m_propertyToFlags.end()) { + for (QtProperty *prop : qAsConst(pfit.value())) { + if (prop) { + delete prop; + d_ptr->m_flagToProperty.remove(prop); + } } + pfit.value().clear(); } - d_ptr->m_propertyToFlags[property].clear(); - QStringListIterator itFlag(flagNames); - while (itFlag.hasNext()) { - const QString flagName = itFlag.next(); + for (const QString &flagName : flagNames) { QtProperty *prop = d_ptr->m_boolPropertyManager->addProperty(); prop->setPropertyName(flagName); property->addSubProperty(prop); @@ -5190,15 +5173,16 @@ */ void QtFlagPropertyManager::uninitializeProperty(QtProperty *property) { - QListIterator itProp(d_ptr->m_propertyToFlags[property]); - while (itProp.hasNext()) { - QtProperty *prop = itProp.next(); - if (prop) { - delete prop; - d_ptr->m_flagToProperty.remove(prop); + const auto it = d_ptr->m_propertyToFlags.find(property); + if (it != d_ptr->m_propertyToFlags.end()) { + for (QtProperty *prop : qAsConst(it.value())) { + if (prop) { + delete prop; + d_ptr->m_flagToProperty.remove(prop); + } } } - d_ptr->m_propertyToFlags.remove(property); + d_ptr->m_propertyToFlags.erase(it); d_ptr->m_values.remove(property); } diff -Nru qttools-opensource-src-5.7.1/src/shared/qtpropertybrowser/qttreepropertybrowser.cpp qttools-opensource-src-5.9.1/src/shared/qtpropertybrowser/qttreepropertybrowser.cpp --- qttools-opensource-src-5.7.1/src/shared/qtpropertybrowser/qttreepropertybrowser.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/shared/qtpropertybrowser/qttreepropertybrowser.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -773,9 +773,8 @@ void QtTreePropertyBrowser::setRootIsDecorated(bool show) { d_ptr->m_treeWidget->setRootIsDecorated(show); - QMapIterator it(d_ptr->m_itemToIndex); - while (it.hasNext()) { - QtProperty *property = it.next().value()->property(); + for (auto it = d_ptr->m_itemToIndex.cbegin(), end = d_ptr->m_itemToIndex.cend(); it != end; ++it) { + QtProperty *property = it.value()->property(); if (!property->hasValue()) d_ptr->updateItem(it.key()); } @@ -794,7 +793,6 @@ void QtTreePropertyBrowser::setAlternatingRowColors(bool enable) { d_ptr->m_treeWidget->setAlternatingRowColors(enable); - QMapIterator it(d_ptr->m_itemToIndex); } /*! @@ -989,9 +987,8 @@ return; d_ptr->m_markPropertiesWithoutValue = mark; - QMapIterator it(d_ptr->m_itemToIndex); - while (it.hasNext()) { - QtProperty *property = it.next().value()->property(); + for (auto it = d_ptr->m_itemToIndex.cbegin(), end = d_ptr->m_itemToIndex.cend(); it != end; ++it) { + QtProperty *property = it.value()->property(); if (!property->hasValue()) d_ptr->updateItem(it.key()); } diff -Nru qttools-opensource-src-5.7.1/src/shared/qtpropertybrowser/qtvariantproperty.cpp qttools-opensource-src-5.9.1/src/shared/qtpropertybrowser/qtvariantproperty.cpp --- qttools-opensource-src-5.7.1/src/shared/qtpropertybrowser/qtvariantproperty.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/shared/qtpropertybrowser/qtvariantproperty.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -1784,11 +1784,10 @@ } propertyToWrappedProperty()->insert(varProp, internProp); if (internProp) { - QList children = internProp->subProperties(); - QListIterator itChild(children); + const QList children = internProp->subProperties(); QtVariantProperty *lastProperty = 0; - while (itChild.hasNext()) { - QtVariantProperty *prop = d_ptr->createSubProperty(varProp, lastProperty, itChild.next()); + for (QtProperty *child : children) { + QtVariantProperty *prop = d_ptr->createSubProperty(varProp, lastProperty, child); lastProperty = prop ? prop : lastProperty; } } @@ -1994,126 +1993,101 @@ */ void QtVariantEditorFactory::connectPropertyManager(QtVariantPropertyManager *manager) { - QList intPropertyManagers = manager->findChildren(); - QListIterator itInt(intPropertyManagers); - while (itInt.hasNext()) - d_ptr->m_spinBoxFactory->addPropertyManager(itInt.next()); - - QList doublePropertyManagers = manager->findChildren(); - QListIterator itDouble(doublePropertyManagers); - while (itDouble.hasNext()) - d_ptr->m_doubleSpinBoxFactory->addPropertyManager(itDouble.next()); - - QList boolPropertyManagers = manager->findChildren(); - QListIterator itBool(boolPropertyManagers); - while (itBool.hasNext()) - d_ptr->m_checkBoxFactory->addPropertyManager(itBool.next()); - - QList stringPropertyManagers = manager->findChildren(); - QListIterator itString(stringPropertyManagers); - while (itString.hasNext()) - d_ptr->m_lineEditFactory->addPropertyManager(itString.next()); - - QList datePropertyManagers = manager->findChildren(); - QListIterator itDate(datePropertyManagers); - while (itDate.hasNext()) - d_ptr->m_dateEditFactory->addPropertyManager(itDate.next()); - - QList timePropertyManagers = manager->findChildren(); - QListIterator itTime(timePropertyManagers); - while (itTime.hasNext()) - d_ptr->m_timeEditFactory->addPropertyManager(itTime.next()); - - QList dateTimePropertyManagers = manager->findChildren(); - QListIterator itDateTime(dateTimePropertyManagers); - while (itDateTime.hasNext()) - d_ptr->m_dateTimeEditFactory->addPropertyManager(itDateTime.next()); - - QList keySequencePropertyManagers = manager->findChildren(); - QListIterator itKeySequence(keySequencePropertyManagers); - while (itKeySequence.hasNext()) - d_ptr->m_keySequenceEditorFactory->addPropertyManager(itKeySequence.next()); - - QList charPropertyManagers = manager->findChildren(); - QListIterator itChar(charPropertyManagers); - while (itChar.hasNext()) - d_ptr->m_charEditorFactory->addPropertyManager(itChar.next()); - - QList localePropertyManagers = manager->findChildren(); - QListIterator itLocale(localePropertyManagers); - while (itLocale.hasNext()) - d_ptr->m_comboBoxFactory->addPropertyManager(itLocale.next()->subEnumPropertyManager()); - - QList pointPropertyManagers = manager->findChildren(); - QListIterator itPoint(pointPropertyManagers); - while (itPoint.hasNext()) - d_ptr->m_spinBoxFactory->addPropertyManager(itPoint.next()->subIntPropertyManager()); - - QList pointFPropertyManagers = manager->findChildren(); - QListIterator itPointF(pointFPropertyManagers); - while (itPointF.hasNext()) - d_ptr->m_doubleSpinBoxFactory->addPropertyManager(itPointF.next()->subDoublePropertyManager()); - - QList sizePropertyManagers = manager->findChildren(); - QListIterator itSize(sizePropertyManagers); - while (itSize.hasNext()) - d_ptr->m_spinBoxFactory->addPropertyManager(itSize.next()->subIntPropertyManager()); - - QList sizeFPropertyManagers = manager->findChildren(); - QListIterator itSizeF(sizeFPropertyManagers); - while (itSizeF.hasNext()) - d_ptr->m_doubleSpinBoxFactory->addPropertyManager(itSizeF.next()->subDoublePropertyManager()); - - QList rectPropertyManagers = manager->findChildren(); - QListIterator itRect(rectPropertyManagers); - while (itRect.hasNext()) - d_ptr->m_spinBoxFactory->addPropertyManager(itRect.next()->subIntPropertyManager()); - - QList rectFPropertyManagers = manager->findChildren(); - QListIterator itRectF(rectFPropertyManagers); - while (itRectF.hasNext()) - d_ptr->m_doubleSpinBoxFactory->addPropertyManager(itRectF.next()->subDoublePropertyManager()); - - QList colorPropertyManagers = manager->findChildren(); - QListIterator itColor(colorPropertyManagers); - while (itColor.hasNext()) { - QtColorPropertyManager *manager = itColor.next(); + const QList intPropertyManagers = manager->findChildren(); + for (QtIntPropertyManager *manager : intPropertyManagers) + d_ptr->m_spinBoxFactory->addPropertyManager(manager); + + const QList doublePropertyManagers = manager->findChildren(); + for (QtDoublePropertyManager *manager : doublePropertyManagers) + d_ptr->m_doubleSpinBoxFactory->addPropertyManager(manager); + + const QList boolPropertyManagers = manager->findChildren(); + for (QtBoolPropertyManager *manager : boolPropertyManagers) + d_ptr->m_checkBoxFactory->addPropertyManager(manager); + + const QList stringPropertyManagers = manager->findChildren(); + for (QtStringPropertyManager *manager : stringPropertyManagers) + d_ptr->m_lineEditFactory->addPropertyManager(manager); + + const QList datePropertyManagers = manager->findChildren(); + for (QtDatePropertyManager *manager : datePropertyManagers) + d_ptr->m_dateEditFactory->addPropertyManager(manager); + + const QList timePropertyManagers = manager->findChildren(); + for (QtTimePropertyManager *manager : timePropertyManagers) + d_ptr->m_timeEditFactory->addPropertyManager(manager); + + const QList dateTimePropertyManagers = manager->findChildren(); + for (QtDateTimePropertyManager *manager : dateTimePropertyManagers) + d_ptr->m_dateTimeEditFactory->addPropertyManager(manager); + + const QList keySequencePropertyManagers = manager->findChildren(); + for (QtKeySequencePropertyManager *manager : keySequencePropertyManagers) + d_ptr->m_keySequenceEditorFactory->addPropertyManager(manager); + + const QList charPropertyManagers = manager->findChildren(); + for (QtCharPropertyManager *manager : charPropertyManagers) + d_ptr->m_charEditorFactory->addPropertyManager(manager); + + const QList localePropertyManagers = manager->findChildren(); + for (QtLocalePropertyManager *manager : localePropertyManagers) + d_ptr->m_comboBoxFactory->addPropertyManager(manager->subEnumPropertyManager()); + + const QList pointPropertyManagers = manager->findChildren(); + for (QtPointPropertyManager *manager : pointPropertyManagers) + d_ptr->m_spinBoxFactory->addPropertyManager(manager->subIntPropertyManager()); + + const QList pointFPropertyManagers = manager->findChildren(); + for (QtPointFPropertyManager *manager : pointFPropertyManagers) + d_ptr->m_doubleSpinBoxFactory->addPropertyManager(manager->subDoublePropertyManager()); + + const QList sizePropertyManagers = manager->findChildren(); + for (QtSizePropertyManager *manager : sizePropertyManagers) + d_ptr->m_spinBoxFactory->addPropertyManager(manager->subIntPropertyManager()); + + const QList sizeFPropertyManagers = manager->findChildren(); + for (QtSizeFPropertyManager *manager : sizeFPropertyManagers) + d_ptr->m_doubleSpinBoxFactory->addPropertyManager(manager->subDoublePropertyManager()); + + const QList rectPropertyManagers = manager->findChildren(); + for (QtRectPropertyManager *manager : rectPropertyManagers) + d_ptr->m_spinBoxFactory->addPropertyManager(manager->subIntPropertyManager()); + + const QList rectFPropertyManagers = manager->findChildren(); + for (QtRectFPropertyManager *manager : rectFPropertyManagers) + d_ptr->m_doubleSpinBoxFactory->addPropertyManager(manager->subDoublePropertyManager()); + + const QList colorPropertyManagers = manager->findChildren(); + for (QtColorPropertyManager *manager : colorPropertyManagers) { d_ptr->m_colorEditorFactory->addPropertyManager(manager); d_ptr->m_spinBoxFactory->addPropertyManager(manager->subIntPropertyManager()); } - QList enumPropertyManagers = manager->findChildren(); - QListIterator itEnum(enumPropertyManagers); - while (itEnum.hasNext()) - d_ptr->m_comboBoxFactory->addPropertyManager(itEnum.next()); - - QList sizePolicyPropertyManagers = manager->findChildren(); - QListIterator itSizePolicy(sizePolicyPropertyManagers); - while (itSizePolicy.hasNext()) { - QtSizePolicyPropertyManager *manager = itSizePolicy.next(); + const QList enumPropertyManagers = manager->findChildren(); + for (QtEnumPropertyManager *manager : enumPropertyManagers) + d_ptr->m_comboBoxFactory->addPropertyManager(manager); + + const QList sizePolicyPropertyManagers = manager->findChildren(); + for (QtSizePolicyPropertyManager *manager : sizePolicyPropertyManagers) { d_ptr->m_spinBoxFactory->addPropertyManager(manager->subIntPropertyManager()); d_ptr->m_comboBoxFactory->addPropertyManager(manager->subEnumPropertyManager()); } - QList fontPropertyManagers = manager->findChildren(); - QListIterator itFont(fontPropertyManagers); - while (itFont.hasNext()) { - QtFontPropertyManager *manager = itFont.next(); + const QList fontPropertyManagers = manager->findChildren(); + for (QtFontPropertyManager *manager : fontPropertyManagers) { d_ptr->m_fontEditorFactory->addPropertyManager(manager); d_ptr->m_spinBoxFactory->addPropertyManager(manager->subIntPropertyManager()); d_ptr->m_comboBoxFactory->addPropertyManager(manager->subEnumPropertyManager()); d_ptr->m_checkBoxFactory->addPropertyManager(manager->subBoolPropertyManager()); } - QList cursorPropertyManagers = manager->findChildren(); - QListIterator itCursor(cursorPropertyManagers); - while (itCursor.hasNext()) - d_ptr->m_cursorEditorFactory->addPropertyManager(itCursor.next()); - - QList flagPropertyManagers = manager->findChildren(); - QListIterator itFlag(flagPropertyManagers); - while (itFlag.hasNext()) - d_ptr->m_checkBoxFactory->addPropertyManager(itFlag.next()->subBoolPropertyManager()); + const QList cursorPropertyManagers = manager->findChildren(); + for (QtCursorPropertyManager *manager : cursorPropertyManagers) + d_ptr->m_cursorEditorFactory->addPropertyManager(manager); + + const QList flagPropertyManagers = manager->findChildren(); + for (QtFlagPropertyManager *manager : flagPropertyManagers) + d_ptr->m_checkBoxFactory->addPropertyManager(manager->subBoolPropertyManager()); } /*! @@ -2138,126 +2112,101 @@ */ void QtVariantEditorFactory::disconnectPropertyManager(QtVariantPropertyManager *manager) { - QList intPropertyManagers = manager->findChildren(); - QListIterator itInt(intPropertyManagers); - while (itInt.hasNext()) - d_ptr->m_spinBoxFactory->removePropertyManager(itInt.next()); - - QList doublePropertyManagers = manager->findChildren(); - QListIterator itDouble(doublePropertyManagers); - while (itDouble.hasNext()) - d_ptr->m_doubleSpinBoxFactory->removePropertyManager(itDouble.next()); - - QList boolPropertyManagers = manager->findChildren(); - QListIterator itBool(boolPropertyManagers); - while (itBool.hasNext()) - d_ptr->m_checkBoxFactory->removePropertyManager(itBool.next()); - - QList stringPropertyManagers = manager->findChildren(); - QListIterator itString(stringPropertyManagers); - while (itString.hasNext()) - d_ptr->m_lineEditFactory->removePropertyManager(itString.next()); - - QList datePropertyManagers = manager->findChildren(); - QListIterator itDate(datePropertyManagers); - while (itDate.hasNext()) - d_ptr->m_dateEditFactory->removePropertyManager(itDate.next()); - - QList timePropertyManagers = manager->findChildren(); - QListIterator itTime(timePropertyManagers); - while (itTime.hasNext()) - d_ptr->m_timeEditFactory->removePropertyManager(itTime.next()); - - QList dateTimePropertyManagers = manager->findChildren(); - QListIterator itDateTime(dateTimePropertyManagers); - while (itDateTime.hasNext()) - d_ptr->m_dateTimeEditFactory->removePropertyManager(itDateTime.next()); - - QList keySequencePropertyManagers = manager->findChildren(); - QListIterator itKeySequence(keySequencePropertyManagers); - while (itKeySequence.hasNext()) - d_ptr->m_keySequenceEditorFactory->removePropertyManager(itKeySequence.next()); - - QList charPropertyManagers = manager->findChildren(); - QListIterator itChar(charPropertyManagers); - while (itChar.hasNext()) - d_ptr->m_charEditorFactory->removePropertyManager(itChar.next()); - - QList localePropertyManagers = manager->findChildren(); - QListIterator itLocale(localePropertyManagers); - while (itLocale.hasNext()) - d_ptr->m_comboBoxFactory->removePropertyManager(itLocale.next()->subEnumPropertyManager()); - - QList pointPropertyManagers = manager->findChildren(); - QListIterator itPoint(pointPropertyManagers); - while (itPoint.hasNext()) - d_ptr->m_spinBoxFactory->removePropertyManager(itPoint.next()->subIntPropertyManager()); - - QList pointFPropertyManagers = manager->findChildren(); - QListIterator itPointF(pointFPropertyManagers); - while (itPointF.hasNext()) - d_ptr->m_doubleSpinBoxFactory->removePropertyManager(itPointF.next()->subDoublePropertyManager()); - - QList sizePropertyManagers = manager->findChildren(); - QListIterator itSize(sizePropertyManagers); - while (itSize.hasNext()) - d_ptr->m_spinBoxFactory->removePropertyManager(itSize.next()->subIntPropertyManager()); - - QList sizeFPropertyManagers = manager->findChildren(); - QListIterator itSizeF(sizeFPropertyManagers); - while (itSizeF.hasNext()) - d_ptr->m_doubleSpinBoxFactory->removePropertyManager(itSizeF.next()->subDoublePropertyManager()); - - QList rectPropertyManagers = manager->findChildren(); - QListIterator itRect(rectPropertyManagers); - while (itRect.hasNext()) - d_ptr->m_spinBoxFactory->removePropertyManager(itRect.next()->subIntPropertyManager()); - - QList rectFPropertyManagers = manager->findChildren(); - QListIterator itRectF(rectFPropertyManagers); - while (itRectF.hasNext()) - d_ptr->m_doubleSpinBoxFactory->removePropertyManager(itRectF.next()->subDoublePropertyManager()); - - QList colorPropertyManagers = manager->findChildren(); - QListIterator itColor(colorPropertyManagers); - while (itColor.hasNext()) { - QtColorPropertyManager *manager = itColor.next(); + const QList intPropertyManagers = manager->findChildren(); + for (QtIntPropertyManager *manager : intPropertyManagers) + d_ptr->m_spinBoxFactory->removePropertyManager(manager); + + const QList doublePropertyManagers = manager->findChildren(); + for (QtDoublePropertyManager *manager : doublePropertyManagers) + d_ptr->m_doubleSpinBoxFactory->removePropertyManager(manager); + + const QList boolPropertyManagers = manager->findChildren(); + for (QtBoolPropertyManager *manager : boolPropertyManagers) + d_ptr->m_checkBoxFactory->removePropertyManager(manager); + + const QList stringPropertyManagers = manager->findChildren(); + for (QtStringPropertyManager *manager : stringPropertyManagers) + d_ptr->m_lineEditFactory->removePropertyManager(manager); + + const QList datePropertyManagers = manager->findChildren(); + for (QtDatePropertyManager *manager : datePropertyManagers) + d_ptr->m_dateEditFactory->removePropertyManager(manager); + + const QList timePropertyManagers = manager->findChildren(); + for (QtTimePropertyManager *manager : timePropertyManagers) + d_ptr->m_timeEditFactory->removePropertyManager(manager); + + const QList dateTimePropertyManagers = manager->findChildren(); + for (QtDateTimePropertyManager *manager : dateTimePropertyManagers) + d_ptr->m_dateTimeEditFactory->removePropertyManager(manager); + + const QList keySequencePropertyManagers = manager->findChildren(); + for (QtKeySequencePropertyManager *manager : keySequencePropertyManagers) + d_ptr->m_keySequenceEditorFactory->removePropertyManager(manager); + + const QList charPropertyManagers = manager->findChildren(); + for (QtCharPropertyManager *manager : charPropertyManagers) + d_ptr->m_charEditorFactory->removePropertyManager(manager); + + const QList localePropertyManagers = manager->findChildren(); + for (QtLocalePropertyManager *manager : localePropertyManagers) + d_ptr->m_comboBoxFactory->removePropertyManager(manager->subEnumPropertyManager()); + + const QList pointPropertyManagers = manager->findChildren(); + for (QtPointPropertyManager *manager : pointPropertyManagers) + d_ptr->m_spinBoxFactory->removePropertyManager(manager->subIntPropertyManager()); + + const QList pointFPropertyManagers = manager->findChildren(); + for (QtPointFPropertyManager *manager : pointFPropertyManagers) + d_ptr->m_doubleSpinBoxFactory->removePropertyManager(manager->subDoublePropertyManager()); + + const QList sizePropertyManagers = manager->findChildren(); + for (QtSizePropertyManager *manager : sizePropertyManagers) + d_ptr->m_spinBoxFactory->removePropertyManager(manager->subIntPropertyManager()); + + const QList sizeFPropertyManagers = manager->findChildren(); + for (QtSizeFPropertyManager *manager : sizeFPropertyManagers) + d_ptr->m_doubleSpinBoxFactory->removePropertyManager(manager->subDoublePropertyManager()); + + const QList rectPropertyManagers = manager->findChildren(); + for (QtRectPropertyManager *manager : rectPropertyManagers) + d_ptr->m_spinBoxFactory->removePropertyManager(manager->subIntPropertyManager()); + + const QList rectFPropertyManagers = manager->findChildren(); + for (QtRectFPropertyManager *manager : rectFPropertyManagers) + d_ptr->m_doubleSpinBoxFactory->removePropertyManager(manager->subDoublePropertyManager()); + + const QList colorPropertyManagers = manager->findChildren(); + for (QtColorPropertyManager *manager : colorPropertyManagers) { d_ptr->m_colorEditorFactory->removePropertyManager(manager); d_ptr->m_spinBoxFactory->removePropertyManager(manager->subIntPropertyManager()); } - QList enumPropertyManagers = manager->findChildren(); - QListIterator itEnum(enumPropertyManagers); - while (itEnum.hasNext()) - d_ptr->m_comboBoxFactory->removePropertyManager(itEnum.next()); - - QList sizePolicyPropertyManagers = manager->findChildren(); - QListIterator itSizePolicy(sizePolicyPropertyManagers); - while (itSizePolicy.hasNext()) { - QtSizePolicyPropertyManager *manager = itSizePolicy.next(); + const QList enumPropertyManagers = manager->findChildren(); + for (QtEnumPropertyManager *manager : enumPropertyManagers) + d_ptr->m_comboBoxFactory->removePropertyManager(manager); + + const QList sizePolicyPropertyManagers = manager->findChildren(); + for (QtSizePolicyPropertyManager *manager : sizePolicyPropertyManagers) { d_ptr->m_spinBoxFactory->removePropertyManager(manager->subIntPropertyManager()); d_ptr->m_comboBoxFactory->removePropertyManager(manager->subEnumPropertyManager()); } - QList fontPropertyManagers = manager->findChildren(); - QListIterator itFont(fontPropertyManagers); - while (itFont.hasNext()) { - QtFontPropertyManager *manager = itFont.next(); + const QList fontPropertyManagers = manager->findChildren(); + for (QtFontPropertyManager *manager : fontPropertyManagers) { d_ptr->m_fontEditorFactory->removePropertyManager(manager); d_ptr->m_spinBoxFactory->removePropertyManager(manager->subIntPropertyManager()); d_ptr->m_comboBoxFactory->removePropertyManager(manager->subEnumPropertyManager()); d_ptr->m_checkBoxFactory->removePropertyManager(manager->subBoolPropertyManager()); } - QList cursorPropertyManagers = manager->findChildren(); - QListIterator itCursor(cursorPropertyManagers); - while (itCursor.hasNext()) - d_ptr->m_cursorEditorFactory->removePropertyManager(itCursor.next()); - - QList flagPropertyManagers = manager->findChildren(); - QListIterator itFlag(flagPropertyManagers); - while (itFlag.hasNext()) - d_ptr->m_checkBoxFactory->removePropertyManager(itFlag.next()->subBoolPropertyManager()); + const QList cursorPropertyManagers = manager->findChildren(); + for (QtCursorPropertyManager *manager : cursorPropertyManagers) + d_ptr->m_cursorEditorFactory->removePropertyManager(manager); + + const QList flagPropertyManagers = manager->findChildren(); + for (QtFlagPropertyManager *manager : flagPropertyManagers) + d_ptr->m_checkBoxFactory->removePropertyManager(manager->subBoolPropertyManager()); } QT_END_NAMESPACE diff -Nru qttools-opensource-src-5.7.1/src/shared/qttoolbardialog/qttoolbardialog.cpp qttools-opensource-src-5.9.1/src/shared/qttoolbardialog/qttoolbardialog.cpp --- qttools-opensource-src-5.7.1/src/shared/qttoolbardialog/qttoolbardialog.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/shared/qttoolbardialog/qttoolbardialog.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -48,6 +48,8 @@ #include #include +#include + QT_BEGIN_NAMESPACE class QtFullToolBarManagerPrivate; @@ -145,8 +147,6 @@ QToolBar *toolBarByName(const QString &toolBarName) const; - QtFullToolBarManagerPrivate(); - QMap > categoryToActions; QMap actionToCategory; @@ -160,17 +160,9 @@ QMap > defaultToolBars; QList customToolBars; - QMainWindow *theMainWindow; + QMainWindow *theMainWindow{nullptr}; }; - - - -QtFullToolBarManagerPrivate::QtFullToolBarManagerPrivate() - : theMainWindow(0) -{ -} - QToolBar *QtFullToolBarManagerPrivate::toolBarWidgetAction(QAction *action) const { if (widgetActions.contains(action)) @@ -188,10 +180,8 @@ QList newActionsWithSeparators = toolBarsWithSeparators.value(toolBar); QList removedActions; - QList actionList = itToolBar.value(); - QListIterator itAction(actionList); - while (itAction.hasNext()) { - QAction *action = itAction.next(); + const QList actionList = itToolBar.value(); + for (QAction *action : actionList) { if (newActions.contains(action) && toolBarWidgetAction(action) == toolBar) { newActions.removeAll(action); newActionsWithSeparators.removeAll(action); @@ -203,9 +193,7 @@ toolBars.insert(toolBar, newActions); toolBarsWithSeparators.insert(toolBar, newActionsWithSeparators); - QListIterator itRemovedAction(removedActions); - while (itRemovedAction.hasNext()) { - QAction *oldAction = itRemovedAction.next(); + for (QAction *oldAction : qAsConst(removedActions)) { widgetActions.insert(oldAction, 0); actionToToolBars[oldAction].removeAll(toolBar); } @@ -231,11 +219,9 @@ stream << tb->objectName(); } - stream << toolBars[tb].size(); - QListIterator itAction(toolBars[tb]); - while (itAction.hasNext()) { - QAction *action = itAction.next(); - + const QList actions = toolBars.value(tb); + stream << actions.size(); + for (QAction *action : actions) { if (action) { if (action->objectName().isEmpty()) { qWarning("QtToolBarManager::saveState(): 'objectName' not set for QAction " @@ -263,10 +249,9 @@ stream << tb->windowTitle(); stream << toolBars[tb].size(); - QListIterator itAction(toolBars[tb]); - while (itAction.hasNext()) { - QAction *action = itAction.next(); + const QList actions = toolBars.value(tb); + for (QAction *action : actions) { if (action) { if (action->objectName().isEmpty()) { qWarning("QtToolBarManager::saveState(): 'objectName' not set for QAction " @@ -361,9 +346,8 @@ q_ptr->setToolBar(toolBar, actions); } } - QListIterator itToolBar(oldCustomToolBars); - while (itToolBar.hasNext()) - q_ptr->deleteToolBar(itToolBar.next()); + for (QToolBar *toolBar : qAsConst(oldCustomToolBars)) + q_ptr->deleteToolBar(toolBar); return true; } @@ -400,24 +384,19 @@ QAction *QtFullToolBarManagerPrivate::findAction(const QString &actionName) const { - QSetIterator itAction(allActions); - while (itAction.hasNext()) { - QAction *action = itAction.next(); - - if (action->objectName() == actionName) - return action; - } + auto it = + std::find_if(allActions.cbegin(), allActions.cend(), + [&actionName] (const QAction *a) { return a->objectName() == actionName; }); + if (it != allActions.cend()) + return *it; qWarning("QtToolBarManager::restoreState(): cannot find a QAction named " "'%s', trying to match using 'text' instead.", actionName.toLocal8Bit().constData()); - itAction.toFront(); - while (itAction.hasNext()) { - QAction *action = itAction.next(); - - if (action->text() == actionName) - return action; - } + it = std::find_if(allActions.cbegin(), allActions.cend(), + [&actionName] (const QAction *a) { return a->text() == actionName; }); + if (it != allActions.cend()) + return *it; qWarning("QtToolBarManager::restoreState(): cannot find a QAction with " "matching 'text' (looking for '%s').", actionName.toLocal8Bit().constData()); @@ -515,11 +494,8 @@ if (!d_ptr->allActions.contains(action)) return; - QList toolBars = d_ptr->actionToToolBars[action]; - QListIterator itToolBar(toolBars); - while (itToolBar.hasNext()) { - QToolBar *toolBar = itToolBar.next(); - + const QList toolBars = d_ptr->actionToToolBars[action]; + for (QToolBar *toolBar : toolBars) { d_ptr->toolBars[toolBar].removeAll(action); d_ptr->toolBarsWithSeparators[toolBar].removeAll(action); @@ -570,10 +546,8 @@ QList newActionsWithSeparators; QList newActions; - QList actions = toolBar->actions(); - QListIterator itAction(actions); - while (itAction.hasNext()) { - QAction *action = itAction.next(); + const QList actions = toolBar->actions(); + for (QAction *action : actions) { addAction(action, category); if (d_ptr->widgetActions.contains(action)) d_ptr->widgetActions.insert(action, toolBar); @@ -595,19 +569,16 @@ if (!d_ptr->defaultToolBars.contains(toolBar)) return; - QList defaultActions = d_ptr->defaultToolBars[toolBar]; + const QList defaultActions = d_ptr->defaultToolBars[toolBar]; setToolBar(toolBar, QList()); - QListIterator itAction(defaultActions); - while (itAction.hasNext()) - removeAction(itAction.next()); + for (QAction *action : defaultActions) + removeAction(action); d_ptr->toolBars.remove(toolBar); d_ptr->toolBarsWithSeparators.remove(toolBar); d_ptr->defaultToolBars.remove(toolBar); - itAction.toFront(); - while (itAction.hasNext()) { - QAction *action = itAction.next(); + for (QAction *action : defaultActions) { if (action) toolBar->insertAction(0, action); else @@ -687,9 +658,7 @@ QMap > toRemove; QList newActions; - QListIterator itAction(actions); - while (itAction.hasNext()) { - QAction *action = itAction.next(); + for (QAction *action : actions) { if (!action || (!newActions.contains(action) && d_ptr->allActions.contains(action))) newActions.append(action); @@ -700,10 +669,8 @@ d_ptr->removeWidgetActions(toRemove); - QList oldActions = d_ptr->toolBarsWithSeparators.value(toolBar); - QListIterator itOldAction(oldActions); - while (itOldAction.hasNext()) { - QAction *action = itOldAction.next(); + const QList oldActions = d_ptr->toolBarsWithSeparators.value(toolBar); + for (QAction *action : oldActions) { /* When addDefaultToolBar() separator actions could be checked if they are inserted in other toolbars - if yes then create new one. @@ -718,9 +685,7 @@ } QList newActionsWithSeparators; - QListIterator itNewActions(newActions); - while (itNewActions.hasNext()) { - QAction *action = itNewActions.next(); + for (QAction *action : qAsConst(newActions)) { QAction *newAction = 0; if (!action) newAction = toolBar->insertSeparator(0); @@ -750,18 +715,16 @@ void QtFullToolBarManager::resetAllToolBars() { setToolBars(defaultToolBars()); - QList oldCustomToolBars = d_ptr->customToolBars; - QListIterator itToolBar(oldCustomToolBars); - while (itToolBar.hasNext()) { - deleteToolBar(itToolBar.next()); - } + const QList oldCustomToolBars = d_ptr->customToolBars; + for (QToolBar *tb : oldCustomToolBars) + deleteToolBar(tb); } QByteArray QtFullToolBarManager::saveState(int version) const { QByteArray data; QDataStream stream(&data, QIODevice::WriteOnly); - stream << QtFullToolBarManagerPrivate::VersionMarker; + stream << int(QtFullToolBarManagerPrivate::VersionMarker); stream << version; d_ptr->saveState(stream); return data; @@ -1112,9 +1075,7 @@ currentState.clear(); createdItems.clear(); removedItems.clear(); - QSetIterator itItem(allToolBarItems); - while (itItem.hasNext()) - delete itItem.next(); + qDeleteAll(allToolBarItems); allToolBarItems.clear(); currentToolBar = 0; @@ -1132,16 +1093,12 @@ currentAction = item; actionToItem.insert(0, item); itemToAction.insert(item, 0); - QStringList categories = toolBarManager->categories(); - QStringListIterator itCategory(categories); - while (itCategory.hasNext()) { - QString category = itCategory.next(); + const QStringList categories = toolBarManager->categories(); + for (const QString &category : categories) { QTreeWidgetItem *categoryItem = new QTreeWidgetItem(ui.actionTree); categoryItem->setText(0, category); - QList actions = toolBarManager->categoryActions(category); - QListIterator itAction(actions); - while (itAction.hasNext()) { - QAction *action = itAction.next(); + const QList actions = toolBarManager->categoryActions(category); + for (QAction *action : actions) { item = new QTreeWidgetItem(categoryItem); item->setText(0, action->text()); item->setIcon(0, action->icon()); @@ -1168,10 +1125,8 @@ ui.toolBarList); toolBarToItem.insert(tbItem, item); itemToToolBar.insert(item, tbItem); - QList actions = it.value(); - QListIterator itAction(actions); - while (itAction.hasNext()) { - QAction *action = itAction.next(); + const QList actions = it.value(); + for (QAction *action : actions) { if (toolBarManager->isWidgetAction(action)) { widgetActionToToolBar.insert(action, tbItem); toolBarToWidgetActions[tbItem].insert(action); @@ -1264,16 +1219,11 @@ if (i == ui.toolBarList->currentItem()) wasCurrent = true; int row = ui.toolBarList->row(i); - QMap >::ConstIterator itToolBar = - toolBarToWidgetActions.find(item); - if (itToolBar != toolBarToWidgetActions.constEnd()) { - QSet actions = itToolBar.value(); - QSetIterator itAction(actions); - while (itAction.hasNext()) { - QAction *action = itAction.next(); + const auto itToolBar = toolBarToWidgetActions.find(item); + if (itToolBar != toolBarToWidgetActions.end()) { + for (QAction *action : qAsConst(itToolBar.value())) widgetActionToToolBar.insert(action, 0); - } - toolBarToWidgetActions.remove(item); + toolBarToWidgetActions.erase(itToolBar); } currentState.remove(item); @@ -1313,18 +1263,16 @@ QToolBar *toolBar = itToolBar.key(); ToolBarItem *toolBarItem = toolBarItems.value(toolBar); - if (toolBarToWidgetActions.contains(toolBarItem)) { - QSetIterator itAction(toolBarToWidgetActions.value(toolBarItem)); - while (itAction.hasNext()) - widgetActionToToolBar.insert(itAction.next(), 0); - toolBarToWidgetActions.remove(toolBarItem); + const auto tbwit = toolBarToWidgetActions.find(toolBarItem); + if (tbwit != toolBarToWidgetActions.end()) { + for (QAction *action : qAsConst(tbwit.value())) + widgetActionToToolBar.insert(action, 0); + toolBarToWidgetActions.erase(tbwit); } currentState.remove(toolBarItem); - QListIterator itAction(itToolBar.value()); - while (itAction.hasNext()) { - QAction *action = itAction.next(); + for (QAction *action : itToolBar.value()) { if (toolBarManager->isWidgetAction(action)) { ToolBarItem *otherToolBar = widgetActionToToolBar.value(action); if (otherToolBar) { @@ -1341,10 +1289,9 @@ } currentToolBarChanged(toolBarToItem.value(currentToolBar)); - QList toolBars = currentState.keys(); - QListIterator itTb(toolBars); - while (itTb.hasNext()) - removeToolBar(itTb.next()); + const QList toolBars = currentState.keys(); + for (ToolBarItem *tb : toolBars) + removeToolBar(tb); } void QtToolBarDialogPrivate::okClicked() @@ -1368,10 +1315,8 @@ ++itToolBar; } - QSet toRemove = removedItems; - QSetIterator itRemove(toRemove); - while (itRemove.hasNext()) { - ToolBarItem *item = itRemove.next(); + const QSet toRemove = removedItems; + for (ToolBarItem *item : toRemove) { QToolBar *toolBar = item->toolBar(); removedItems.remove(item); currentState.remove(item); @@ -1380,10 +1325,8 @@ toolBarManager->deleteToolBar(toolBar); } - QSet toCreate = createdItems; - QSetIterator itCreate(toCreate); - while (itCreate.hasNext()) { - ToolBarItem *item = itCreate.next(); + const QSet toCreate = createdItems; + for (ToolBarItem *item : toCreate) { QString toolBarName = item->toolBarName(); createdItems.remove(item); QList actions = currentState.value(item); @@ -1557,11 +1500,9 @@ if (!currentToolBar) { return; } - QList actions = currentState.value(currentToolBar); - QListIterator itAction(actions); + const QList actions = currentState.value(currentToolBar); QListWidgetItem *first = 0; - while (itAction.hasNext()) { - QAction *action = itAction.next(); + for (QAction *action : actions) { QString actionName = separatorText; if (action) actionName = action->text(); diff -Nru qttools-opensource-src-5.7.1/src/src.pro qttools-opensource-src-5.9.1/src/src.pro --- qttools-opensource-src-5.7.1/src/src.pro 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/src.pro 2017-06-23 12:03:39.000000000 +0000 @@ -6,7 +6,6 @@ } else { SUBDIRS = assistant \ pixeltool \ - qtestlib \ designer linguist.depends = designer @@ -15,8 +14,13 @@ SUBDIRS += linguist \ qdoc \ - qtplugininfo -if(!android|android_app):!ios: SUBDIRS += qtpaths + qtattributionsscanner + +qtConfig(library) { + !android|android_app: SUBDIRS += qtplugininfo +} + +if(!android|android_app):!uikit: SUBDIRS += qtpaths mac { SUBDIRS += macdeployqt @@ -30,9 +34,19 @@ win32|winrt:SUBDIRS += windeployqt winrt:SUBDIRS += winrtrunner -qtHaveModule(gui):!android:!ios:!qnx:!wince*:!winrt*:SUBDIRS += qtdiag +qtHaveModule(gui):!android:!uikit:!qnx:!winrt: SUBDIRS += qtdiag qtNomakeTools( \ pixeltool \ macdeployqt \ ) + +# This is necessary to avoid a race condition between toolchain.prf +# invocations in a module-by-module cross-build. +cross_compile:isEmpty(QMAKE_HOST_CXX.INCDIRS) { + androiddeployqt.depends += qtattributionsscanner + qdoc.depends += qtattributionsscanner + windeployqt.depends += qtattributionsscanner + winrtrunner.depends += qtattributionsscanner + linguist.depends += qtattributionsscanner +} diff -Nru qttools-opensource-src-5.7.1/src/windeployqt/elfreader.cpp qttools-opensource-src-5.9.1/src/windeployqt/elfreader.cpp --- qttools-opensource-src-5.7.1/src/windeployqt/elfreader.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/windeployqt/elfreader.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -399,7 +399,8 @@ quint64 dynamicOffset = 0; quint64 dynamicSize = 0; - foreach (const ElfSectionHeader &eh, readHeaders().sectionHeaders) { + const QVector &headers = readHeaders().sectionHeaders; + for (const ElfSectionHeader &eh : headers) { if (eh.name == QByteArrayLiteral(".dynstr")) { dynStrOffset = eh.offset; } else if (eh.name == QByteArrayLiteral(".dynamic")) { diff -Nru qttools-opensource-src-5.7.1/src/windeployqt/main.cpp qttools-opensource-src-5.9.1/src/windeployqt/main.cpp --- qttools-opensource-src-5.7.1/src/windeployqt/main.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/windeployqt/main.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -40,6 +40,7 @@ #include #include +#include #include #include @@ -51,55 +52,54 @@ #endif { QtBluetoothModule = 0x0000000000000001, - QtCLuceneModule = 0x0000000000000002, - QtConcurrentModule = 0x0000000000000004, - QtCoreModule = 0x0000000000000008, - QtDeclarativeModule = 0x0000000000000010, - QtDesignerComponents = 0x0000000000000020, - QtDesignerModule = 0x0000000000000040, - QtGuiModule = 0x0000000000000080, - QtCluceneModule = 0x0000000000000100, - QtHelpModule = 0x0000000000000200, - QtMultimediaModule = 0x0000000000000400, - QtMultimediaWidgetsModule = 0x0000000000000800, - QtMultimediaQuickModule = 0x0000000000001000, - QtNetworkModule = 0x0000000000002000, - QtNfcModule = 0x0000000000004000, - QtOpenGLModule = 0x0000000000008000, - QtPositioningModule = 0x0000000000010000, - QtPrintSupportModule = 0x0000000000020000, - QtQmlModule = 0x0000000000040000, - QtQuickModule = 0x0000000000080000, - QtQuickParticlesModule = 0x0000000000100000, - QtScriptModule = 0x0000000000200000, - QtScriptToolsModule = 0x0000000000400000, - QtSensorsModule = 0x0000000000800000, - QtSerialPortModule = 0x0000000001000000, - QtSqlModule = 0x0000000002000000, - QtSvgModule = 0x0000000004000000, - QtTestModule = 0x0000000008000000, - QtWidgetsModule = 0x0000000010000000, - QtWinExtrasModule = 0x0000000020000000, - QtXmlModule = 0x0000000040000000, - QtXmlPatternsModule = 0x0000000080000000, - QtWebKitModule = 0x0000000100000000, - QtWebKitWidgetsModule = 0x0000000200000000, - QtQuickWidgetsModule = 0x0000000400000000, - QtWebSocketsModule = 0x0000000800000000, - QtEnginioModule = 0x0000001000000000, - QtWebEngineCoreModule = 0x0000002000000000, - QtWebEngineModule = 0x0000004000000000, - QtWebEngineWidgetsModule = 0x0000008000000000, - QtQmlToolingModule = 0x0000010000000000, - Qt3DCoreModule = 0x0000020000000000, - Qt3DRendererModule = 0x0000040000000000, - Qt3DQuickModule = 0x0000080000000000, - Qt3DQuickRendererModule = 0x0000100000000000, - Qt3DInputModule = 0x0000200000000000, - QtLocationModule = 0x0000400000000000, - QtWebChannelModule = 0x0000800000000000, - QtTextToSpeechModule = 0x0001000000000000, - QtSerialBusModule = 0x0002000000000000 + QtConcurrentModule = 0x0000000000000002, + QtCoreModule = 0x0000000000000004, + QtDeclarativeModule = 0x0000000000000008, + QtDesignerComponents = 0x0000000000000010, + QtDesignerModule = 0x0000000000000020, + QtGuiModule = 0x0000000000000040, + QtHelpModule = 0x0000000000000080, + QtMultimediaModule = 0x0000000000000100, + QtMultimediaWidgetsModule = 0x0000000000000200, + QtMultimediaQuickModule = 0x0000000000000400, + QtNetworkModule = 0x0000000000000800, + QtNfcModule = 0x0000000000001000, + QtOpenGLModule = 0x0000000000002000, + QtPositioningModule = 0x0000000000004000, + QtPrintSupportModule = 0x0000000000008000, + QtQmlModule = 0x0000000000010000, + QtQuickModule = 0x0000000000020000, + QtQuickParticlesModule = 0x0000000000040000, + QtScriptModule = 0x0000000000080000, + QtScriptToolsModule = 0x0000000000100000, + QtSensorsModule = 0x0000000000200000, + QtSerialPortModule = 0x0000000000400000, + QtSqlModule = 0x0000000000800000, + QtSvgModule = 0x0000000001000000, + QtTestModule = 0x0000000002000000, + QtWidgetsModule = 0x0000000004000000, + QtWinExtrasModule = 0x0000000008000000, + QtXmlModule = 0x0000000010000000, + QtXmlPatternsModule = 0x0000000020000000, + QtWebKitModule = 0x0000000040000000, + QtWebKitWidgetsModule = 0x0000000080000000, + QtQuickWidgetsModule = 0x0000000100000000, + QtWebSocketsModule = 0x0000000200000000, + QtEnginioModule = 0x0000000400000000, + QtWebEngineCoreModule = 0x0000000800000000, + QtWebEngineModule = 0x0000001000000000, + QtWebEngineWidgetsModule = 0x0000002000000000, + QtQmlToolingModule = 0x0000004000000000, + Qt3DCoreModule = 0x0000008000000000, + Qt3DRendererModule = 0x0000010000000000, + Qt3DQuickModule = 0x0000020000000000, + Qt3DQuickRendererModule = 0x0000040000000000, + Qt3DInputModule = 0x0000080000000000, + QtLocationModule = 0x0000100000000000, + QtWebChannelModule = 0x0000200000000000, + QtTextToSpeechModule = 0x0000400000000000, + QtSerialBusModule = 0x0000800000000000, + QtGamePadModule = 0x0001000000000000 }; struct QtModuleEntry { @@ -111,13 +111,13 @@ static QtModuleEntry qtModuleEntries[] = { { QtBluetoothModule, "bluetooth", "Qt5Bluetooth", 0 }, - { QtCLuceneModule, "clucene", "Qt5CLucene", "qt_help" }, { QtConcurrentModule, "concurrent", "Qt5Concurrent", "qtbase" }, { QtCoreModule, "core", "Qt5Core", "qtbase" }, { QtDeclarativeModule, "declarative", "Qt5Declarative", "qtquick1" }, { QtDesignerModule, "designer", "Qt5Designer", 0 }, { QtDesignerComponents, "designercomponents", "Qt5DesignerComponents", 0 }, { QtEnginioModule, "enginio", "Enginio", 0 }, + { QtGamePadModule, "gamepad", "Qt5Gamepad", 0 }, { QtGuiModule, "gui", "Qt5Gui", "qtbase" }, { QtHelpModule, "qthelp", "Qt5Help", "qt_help" }, { QtMultimediaModule, "multimedia", "Qt5Multimedia", "qtmultimedia" }, @@ -151,9 +151,9 @@ { QtWebEngineModule, "webengine", "Qt5WebEngine", "qtwebengine" }, { QtWebEngineWidgetsModule, "webenginewidgets", "Qt5WebEngineWidgets", 0 }, { Qt3DCoreModule, "3dcore", "Qt53DCore", 0 }, - { Qt3DRendererModule, "3drenderer", "Qt53DRenderer", 0 }, + { Qt3DRendererModule, "3drenderer", "Qt53DRender", 0 }, { Qt3DQuickModule, "3dquick", "Qt53DQuick", 0 }, - { Qt3DQuickRendererModule, "3dquickrenderer", "Qt53DQuickRenderer", 0 }, + { Qt3DQuickRendererModule, "3dquickrenderer", "Qt53DQuickRender", 0 }, { Qt3DInputModule, "3dinput", "Qt53DInput", 0 }, { QtLocationModule, "geoservices", "Qt5Location", 0 }, { QtWebChannelModule, "webchannel", "Qt5WebChannel", 0 }, @@ -194,10 +194,6 @@ return WinRtIntel; if (xSpec.startsWith(QLatin1String("winrt-arm"))) return WinRtArm; - if (xSpec.startsWith(QLatin1String("winphone-x"))) - return WinPhoneIntel; - if (xSpec.startsWith(QLatin1String("winphone-arm"))) - return WinPhoneArm; if (xSpec.startsWith(QLatin1String("wince"))) { if (xSpec.contains(QLatin1String("-x86-"))) return WinCEIntel; @@ -246,54 +242,48 @@ AngleDetectionForceOff }; - Options() : plugins(true), libraries(true), quickImports(true), translations(true) - , systemD3dCompiler(true), compilerRunTime(false) - , angleDetection(AngleDetectionAuto), softwareRasterizer(true), platform(Windows) - , additionalLibraries(0), disabledLibraries(0) - , updateFileFlags(0), json(0), list(ListNone), debugDetection(DebugDetectionAuto) - , deployPdb(false), dryRun(false) {} - - bool plugins; - bool libraries; - bool quickImports; - bool translations; - bool systemD3dCompiler; - bool compilerRunTime; - AngleDetection angleDetection; - bool softwareRasterizer; - Platform platform; - quint64 additionalLibraries; - quint64 disabledLibraries; - unsigned updateFileFlags; + bool plugins = true; + bool libraries = true; + bool quickImports = true; + bool translations = true; + bool systemD3dCompiler = true; + bool compilerRunTime = false; + AngleDetection angleDetection = AngleDetectionAuto; + bool softwareRasterizer = true; + Platform platform = Windows; + quint64 additionalLibraries = 0; + quint64 disabledLibraries = 0; + unsigned updateFileFlags = 0; QStringList qmlDirectories; // Project's QML files. QString directory; QString translationsDirectory; // Translations target directory QString libraryDirectory; QString pluginDirectory; QStringList binaries; - JsonOutput *json; - ListOption list; - DebugDetection debugDetection; - bool deployPdb; - bool dryRun; - - inline bool isWinRtOrWinPhone() const { - return (platform == WinPhoneArm || platform == WinPhoneIntel - || platform == WinRtArm || platform == WinRtIntel); + JsonOutput *json = nullptr; + ListOption list = ListNone; + DebugDetection debugDetection = DebugDetectionAuto; + bool deployPdb = false; + bool dryRun = false; + bool patchQt = true; + + inline bool isWinRt() const { + return platform == WinRtArm || platform == WinRtIntel; } }; // Return binary from folder static inline QString findBinary(const QString &directory, Platform platform) { - QDir dir(QDir::cleanPath(directory)); - const QStringList nameFilters = (platform & WindowsBased) ? QStringList(QStringLiteral("*.exe")) : QStringList(); - foreach (const QString &binary, dir.entryList(nameFilters, QDir::Files | QDir::Executable)) { + const QFileInfoList &binaries = + QDir(QDir::cleanPath(directory)).entryInfoList(nameFilters, QDir::Files | QDir::Executable); + for (const QFileInfo &binaryFi : binaries) { + const QString binary = binaryFi.fileName(); if (!binary.contains(QLatin1String(webKitProcessC), Qt::CaseInsensitive) && !binary.contains(QLatin1String(webEngineProcessC), Qt::CaseInsensitive)) { - return dir.filePath(binary); + return binaryFi.absoluteFilePath(); } } return QString(); @@ -349,7 +339,7 @@ parser->addOption(releaseOption); QCommandLineOption releaseWithDebugInfoOption(QStringLiteral("release-with-debug-info"), QStringLiteral("Assume release binaries with debug information.")); - releaseWithDebugInfoOption.setHidden(true); // Deprecated by improved debug detection. + releaseWithDebugInfoOption.setFlags(QCommandLineOption::HiddenFromHelp); // Deprecated by improved debug detection. parser->addOption(releaseWithDebugInfoOption); QCommandLineOption deployPdbOption(QStringLiteral("pdb"), @@ -364,6 +354,10 @@ QStringLiteral("Simulation mode. Behave normally, but do not copy/update any files.")); parser->addOption(dryRunOption); + QCommandLineOption noPatchQtOption(QStringLiteral("no-patchqt"), + QStringLiteral("Do not patch the Qt5Core library.")); + parser->addOption(noPatchQtOption); + QCommandLineOption noPluginsOption(QStringLiteral("no-plugins"), QStringLiteral("Skip plugin deployment.")); parser->addOption(noPluginsOption); @@ -531,6 +525,8 @@ options->updateFileFlags |= SkipUpdateFile; } + options->patchQt = !parser->isSet(noPatchQtOption); + for (size_t i = 0; i < qtModulesCount; ++i) { if (parser->isSet(*enabledModules.at(int(i)).first.data())) options->additionalLibraries |= enabledModules.at(int(i)).second; @@ -541,8 +537,6 @@ // Add some dependencies if (options->additionalLibraries & QtQuickModule) options->additionalLibraries |= QtQmlModule; - if (options->additionalLibraries & QtHelpModule) - options->additionalLibraries |= QtCLuceneModule; if (options->additionalLibraries & QtDesignerComponents) options->additionalLibraries |= QtDesignerModule; @@ -626,7 +620,7 @@ if (fi.isDir()) { const QStringList libraries = findSharedLibraries(QDir(path), options->platform, MatchDebugOrRelease, QString()); - foreach (const QString &library, libraries) + for (const QString &library : libraries) options->binaries.append(path + QLatin1Char('/') + library); } else { options->binaries.append(path); @@ -695,7 +689,7 @@ // Filter out the Qt libraries. Note that depends.exe finds libs from optDirectory if we // are run the 2nd time (updating). We want to check against the Qt bin dir libraries const int start = result->size(); - foreach (const QString &lib, dependentLibs) { + for (const QString &lib : qAsConst(dependentLibs)) { if (isQtModule(lib)) { const QString path = normalizeFileName(qtBinDir + QLatin1Char('/') + QFileInfo(lib).fileName()); if (!result->contains(path)) @@ -737,6 +731,10 @@ libraryFileName.replace(lastDot, libraryFileName.size() - lastDot, QLatin1String("pdb")); return libraryFileName; } +static inline QStringList qmlCacheFileFilters() +{ + return QStringList() << QStringLiteral("*.jsc") << QStringLiteral("*.qmlc"); +} // File entry filter function for updateFile() that returns a list of files for // QML import trees: DLLs (matching debgug) and .qml/,js, etc. @@ -755,7 +753,8 @@ QStringList operator()(const QDir &dir) const { QStringList result; - foreach (const QString &library, m_dllFilter(dir)) { + const QStringList &libraries = m_dllFilter(dir); + for (const QString &library : libraries) { result.append(library); if (m_flags & DeployPdb) { const QString pdb = pdbFileName(library); @@ -771,9 +770,13 @@ static inline QStringList qmlNameFilters(unsigned flags) { QStringList result; - result << QStringLiteral("qmldir") << QStringLiteral("*.qmltypes"); - if (!(flags & SkipSources)) - result << QStringLiteral("*.js") << QStringLiteral("*.qml") << QStringLiteral("*.png"); + result << QStringLiteral("qmldir") << QStringLiteral("*.qmltypes") + << QStringLiteral("*.frag") << QStringLiteral("*.vert") // Shaders + << QStringLiteral("*.ttf"); + if (!(flags & SkipSources)) { + result << QStringLiteral("*.js") << QStringLiteral("*.qml") << QStringLiteral("*.png"); + result.append(qmlCacheFileFilters()); + } return result; } @@ -782,42 +785,48 @@ DllDirectoryFileEntryFunction m_dllFilter; }; +struct PluginModuleMapping +{ + const char *directoryName; + quint64 module; +}; + +static const PluginModuleMapping pluginModuleMappings[] = +{ + {"qml1tooling", QtDeclarativeModule}, + {"gamepads", QtGamePadModule}, + {"accessible", QtGuiModule}, + {"iconengines", QtGuiModule}, + {"imageformats", QtGuiModule}, + {"platforms", QtGuiModule}, + {"platforminputcontexts", QtGuiModule}, + {"geoservices", QtLocationModule}, + {"audio", QtMultimediaModule}, + {"mediaservice", QtMultimediaModule}, + {"playlistformats", QtMultimediaModule}, + {"bearer", QtNetworkModule}, + {"position", QtPositioningModule}, + {"printsupport", QtPrintSupportModule}, + {"scenegraph", QtQuickModule}, + {"qmltooling", QtQuickModule | QtQmlToolingModule}, + {"sensors", QtSensorsModule}, + {"sensorgestures", QtSensorsModule}, + {"canbus", QtSerialBusModule}, + {"sqldrivers", QtSqlModule}, + {"texttospeech", QtTextToSpeechModule}, + {"qtwebengine", QtWebEngineModule | QtWebEngineCoreModule | QtWebEngineWidgetsModule}, + {"sceneparsers", Qt3DRendererModule}, + {"renderplugins", Qt3DRendererModule} +}; + static inline quint64 qtModuleForPlugin(const QString &subDirName) { - if (subDirName == QLatin1String("accessible") || subDirName == QLatin1String("iconengines") - || subDirName == QLatin1String("imageformats") || subDirName == QLatin1String("platforms") - || subDirName == QLatin1String("platforminputcontexts")) { - return QtGuiModule; - } - if (subDirName == QLatin1String("bearer")) - return QtNetworkModule; - if (subDirName == QLatin1String("sqldrivers")) - return QtSqlModule; - if (subDirName == QLatin1String("audio") || subDirName == QLatin1String("mediaservice") || subDirName == QLatin1String("playlistformats")) - return QtMultimediaModule; - if (subDirName == QLatin1String("printsupport")) - return QtPrintSupportModule; - if (subDirName == QLatin1String("scenegraph")) - return QtQuickModule; - if (subDirName == QLatin1String("qmltooling")) - return QtQuickModule | QtQmlToolingModule; - if (subDirName == QLatin1String("qml1tooling")) - return QtDeclarativeModule; - if (subDirName == QLatin1String("position")) - return QtPositioningModule; - if (subDirName == QLatin1String("geoservices")) - return QtLocationModule; - if (subDirName == QLatin1String("sensors") || subDirName == QLatin1String("sensorgestures")) - return QtSensorsModule; - if (subDirName == QLatin1String("qtwebengine")) - return QtWebEngineModule | QtWebEngineCoreModule | QtWebEngineWidgetsModule; - if (subDirName == QLatin1String("sceneparsers")) - return Qt3DRendererModule; - if (subDirName == QLatin1String("texttospeech")) - return QtTextToSpeechModule; - if (subDirName == QLatin1String("canbus")) - return QtSerialBusModule; - return 0; // "designer" + const PluginModuleMapping *end = pluginModuleMappings + + sizeof(pluginModuleMappings) / sizeof(pluginModuleMappings[0]); + const PluginModuleMapping *result = + std::find_if(pluginModuleMappings, end, + [&subDirName] (const PluginModuleMapping &m) { return subDirName == QLatin1String(m.directoryName); }); + return result != end ? result->module : 0; // "designer" } static quint64 qtModule(QString module, const QString &infix) @@ -855,14 +864,15 @@ return QStringList(); QDir pluginsDir(qtPluginsDirName); QStringList result; - foreach (const QString &subDirName, pluginsDir.entryList(QStringList(QLatin1String("*")), QDir::Dirs | QDir::NoDotAndDotDot)) { + const QFileInfoList &pluginDirs = pluginsDir.entryInfoList(QStringList(QLatin1String("*")), QDir::Dirs | QDir::NoDotAndDotDot); + for (const QFileInfo &subDirFi : pluginDirs) { + const QString subDirName = subDirFi.fileName(); const quint64 module = qtModuleForPlugin(subDirName); if (module & *usedQtModules) { const DebugMatchMode debugMatchMode = (module & QtWebEngineCoreModule) ? MatchDebugOrRelease // QTBUG-44331: Debug detection does not work for webengine, deploy all. : debugMatchModeIn; - const QString subDirPath = qtPluginsDirName + QLatin1Char('/') + subDirName; - QDir subDir(subDirPath); + QDir subDir(subDirFi.absoluteFilePath()); // Filter out disabled plugins if (disabledQtModules & QtQmlToolingModule && subDirName == QLatin1String("qmltooling")) continue; @@ -879,8 +889,6 @@ break; case WinRtIntel: case WinRtArm: - case WinPhoneIntel: - case WinPhoneArm: filter = QStringLiteral("qwinrt"); break; case Unix: @@ -893,7 +901,7 @@ filter = QLatin1String("*"); } const QStringList plugins = findSharedLibraries(subDir, platform, debugMatchMode, filter); - foreach (const QString &plugin, plugins) { + for (const QString &plugin : plugins) { const QString pluginPath = subDir.absoluteFilePath(plugin); if (isPlatformPlugin) *platformPlugin = pluginPath; @@ -945,10 +953,11 @@ QStringList prefixes; QDir sourceDir(sourcePath); const QStringList qmFilter = QStringList(QStringLiteral("qtbase_*.qm")); - foreach (QString qmFile, sourceDir.entryList(qmFilter)) { - qmFile.chop(3); - qmFile.remove(0, 7); - prefixes.push_back(qmFile); + const QFileInfoList &qmFiles = sourceDir.entryInfoList(qmFilter); + for (const QFileInfo &qmFi : qmFiles) { + QString qmFile = qmFi.baseName(); + qmFile.remove(0, 7); + prefixes.push_back(qmFile); } if (prefixes.isEmpty()) { std::wcerr << "Warning: Could not find any translations in " @@ -960,13 +969,14 @@ const QString absoluteTarget = QFileInfo(target).absoluteFilePath(); const QString binary = QStringLiteral("lconvert"); QStringList arguments; - foreach (const QString &prefix, prefixes) { + for (const QString &prefix : qAsConst(prefixes)) { arguments.clear(); const QString targetFile = QStringLiteral("qt_") + prefix + QStringLiteral(".qm"); arguments.append(QStringLiteral("-o")); arguments.append(QDir::toNativeSeparators(absoluteTarget + QLatin1Char('/') + targetFile)); - foreach (const QString &qmFile, sourceDir.entryList(translationNameFilters(usedQtModules, prefix))) - arguments.append(qmFile); + const QFileInfoList &langQmFiles = sourceDir.entryInfoList(translationNameFilters(usedQtModules, prefix)); + for (const QFileInfo &langQmFileFi : langQmFiles) + arguments.append(langQmFileFi.fileName()); if (optVerboseLevel) std::wcout << "Creating " << targetFile << "...\n"; unsigned long exitCode; @@ -980,15 +990,13 @@ struct DeployResult { - DeployResult() : success(false), isDebug(false), directlyUsedQtLibraries(0), usedQtLibraries(0), - deployedQtLibraries(0) {} operator bool() const { return success; } - bool success; - bool isDebug; - quint64 directlyUsedQtLibraries; - quint64 usedQtLibraries; - quint64 deployedQtLibraries; + bool success = false; + bool isDebug = false; + quint64 directlyUsedQtLibraries = 0; + quint64 usedQtLibraries = 0; + quint64 deployedQtLibraries = 0; }; static QString libraryPath(const QString &libraryLocation, const char *name, @@ -1009,6 +1017,42 @@ return result; } +static QString vcDebugRedistDir() { return QStringLiteral("Debug_NonRedist"); } + +static QString vcRedistDir() +{ + const char vcDirVar[] = "VCINSTALLDIR"; + const QChar slash(QLatin1Char('/')); + QString vcRedistDirName = QDir::cleanPath(QFile::decodeName(qgetenv(vcDirVar))); + if (vcRedistDirName.isEmpty()) { + std::wcerr << "Warning: Cannot find Visual Studio installation directory, " << vcDirVar + << " is not set.\n"; + return QString(); + } + if (!vcRedistDirName.endsWith(slash)) + vcRedistDirName.append(slash); + vcRedistDirName.append(QStringLiteral("redist")); + if (!QFileInfo(vcRedistDirName).isDir()) { + std::wcerr << "Warning: Cannot find Visual Studio redist directory, " + << QDir::toNativeSeparators(vcRedistDirName).toStdWString() << ".\n"; + return QString(); + } + const QString vc2017RedistDirName = vcRedistDirName + QStringLiteral("/MSVC"); + if (!QFileInfo(vc2017RedistDirName).isDir()) + return vcRedistDirName; // pre 2017 + // Look in reverse order for folder containing the debug redist folder + const QFileInfoList subDirs = + QDir(vc2017RedistDirName).entryInfoList(QDir::Dirs | QDir::NoDotAndDotDot, QDir::Name | QDir::Reversed); + for (const QFileInfo &f : subDirs) { + const QString path = f.absoluteFilePath(); + if (QFileInfo(path + slash + vcDebugRedistDir()).isDir()) + return path; + } + std::wcerr << "Warning: Cannot find Visual Studio redist directory under " + << QDir::toNativeSeparators(vc2017RedistDirName).toStdWString() << ".\n"; + return QString(); +} + static QStringList compilerRunTimeLibs(Platform platform, bool isDebug, unsigned wordSize) { QStringList result; @@ -1021,53 +1065,43 @@ break; } const QString binPath = QFileInfo(gcc).absolutePath(); - QDir dir(binPath); QStringList filters; const QString suffix = QLatin1Char('*') + sharedLibrarySuffix(platform); const size_t count = sizeof(minGwRuntimes) / sizeof(minGwRuntimes[0]); for (size_t i = 0; i < count; ++i) filters.append(QLatin1String(minGwRuntimes[i]) + suffix); - foreach (const QString &dll, dir.entryList(filters, QDir::Files)) - result.append(binPath + QLatin1Char('/') + dll); + const QFileInfoList &dlls = QDir(binPath).entryInfoList(filters, QDir::Files); + for (const QFileInfo &dllFi : dlls) + result.append(dllFi.absoluteFilePath()); } break; case Windows: { // MSVC/Desktop: Add redistributable packages. - const char vcDirVar[] = "VCINSTALLDIR"; - const QChar slash(QLatin1Char('/')); - QString vcRedistDirName = QDir::cleanPath(QFile::decodeName(qgetenv(vcDirVar))); - if (vcRedistDirName.isEmpty()) { - std::wcerr << "Warning: Cannot find Visual Studio installation directory, " << vcDirVar << " is not set.\n"; + QString vcRedistDirName = vcRedistDir(); + if (vcRedistDirName.isEmpty()) break; - } - if (!vcRedistDirName.endsWith(slash)) - vcRedistDirName.append(slash); - vcRedistDirName.append(QStringLiteral("redist")); - QDir vcRedistDir(vcRedistDirName); - if (!vcRedistDir.exists()) { - std::wcerr << "Warning: Cannot find Visual Studio redist directory, " - << QDir::toNativeSeparators(vcRedistDirName).toStdWString() << ".\n"; - break; - } QStringList redistFiles; + QDir vcRedistDir(vcRedistDirName); const QString wordSizeString(QLatin1String(wordSize > 32 ? "x64" : "x86")); if (isDebug) { // Append DLLs from Debug_NonRedist\x??\Microsoft.VC.DebugCRT. - if (vcRedistDir.cd(QLatin1String("Debug_NonRedist")) && vcRedistDir.cd(wordSizeString)) { + if (vcRedistDir.cd(vcDebugRedistDir()) && vcRedistDir.cd(wordSizeString)) { const QStringList names = vcRedistDir.entryList(QStringList(QStringLiteral("Microsoft.VC*.DebugCRT")), QDir::Dirs); if (!names.isEmpty() && vcRedistDir.cd(names.first())) { - foreach (const QFileInfo &dll, vcRedistDir.entryInfoList(QStringList(QLatin1String("*.dll")))) + const QFileInfoList &dlls = vcRedistDir.entryInfoList(QStringList(QLatin1String("*.dll"))); + for (const QFileInfo &dll : dlls) redistFiles.append(dll.absoluteFilePath()); } } } else { // release: Bundle vcredist<>.exe + QString releaseRedistDir = vcRedistDirName; const QStringList countryCodes = vcRedistDir.entryList(QStringList(QStringLiteral("[0-9]*")), QDir::Dirs); - if (!countryCodes.isEmpty()) { - const QFileInfo fi(vcRedistDirName + slash + countryCodes.first() + slash - + QStringLiteral("vcredist_") + wordSizeString - + QStringLiteral(".exe")); - if (fi.isFile()) - redistFiles.append(fi.absoluteFilePath()); - } + if (!countryCodes.isEmpty()) // Pre MSVC2017 + releaseRedistDir += QLatin1Char('/') + countryCodes.constFirst(); + const QFileInfo fi(releaseRedistDir + QLatin1Char('/') + + QStringLiteral("vcredist_") + wordSizeString + + QStringLiteral(".exe")); + if (fi.isFile()) + redistFiles.append(fi.absoluteFilePath()); } if (redistFiles.isEmpty()) { std::wcerr << "Warning: Cannot find Visual Studio " << (isDebug ? "debug" : "release") @@ -1204,7 +1238,7 @@ if (options.platform & WindowsBased) { const QStringList qtLibs = dependentQtLibs.filter(QStringLiteral("Qt5Core"), Qt::CaseInsensitive) + dependentQtLibs.filter(QStringLiteral("Qt5WebKit"), Qt::CaseInsensitive); - foreach (const QString &qtLib, qtLibs) { + for (const QString &qtLib : qtLibs) { QStringList icuLibs = findDependentLibraries(qtLib, options.platform, errorMessage).filter(QStringLiteral("ICU"), Qt::CaseInsensitive); if (!icuLibs.isEmpty()) { // Find out the ICU version to add the data library icudtXX.dll, which does not show @@ -1218,14 +1252,14 @@ std::wcout << "Adding ICU version " << icuVersion << '\n'; icuLibs.push_back(QStringLiteral("icudt") + icuVersion + QLatin1String(windowsSharedLibrarySuffix)); } - foreach (const QString &icuLib, icuLibs) { + for (const QString &icuLib : qAsConst(icuLibs)) { const QString icuPath = findInPath(icuLib); if (icuPath.isEmpty()) { *errorMessage = QStringLiteral("Unable to locate ICU library ") + icuLib; return result; } dependentQtLibs.push_back(icuPath); - } // foreach icuLib + } // for each icuLib break; } // !icuLibs.isEmpty() } // Qt5Core/Qt5WebKit @@ -1240,7 +1274,7 @@ if (!qmlDirectory.isEmpty()) qmlDirectories.append(qmlDirectory); } - foreach (const QString &qmlDirectory, qmlDirectories) { + for (const QString &qmlDirectory : qAsConst(qmlDirectories)) { if (optVerboseLevel >= 1) std::wcout << "Scanning " << QDir::toNativeSeparators(qmlDirectory) << ":\n"; const QmlImportScanResult scanResult = @@ -1251,19 +1285,19 @@ return result; qmlScanResult.append(scanResult); // Additional dependencies of QML plugins. - foreach (const QString &plugin, qmlScanResult.plugins) { + for (const QString &plugin : qAsConst(qmlScanResult.plugins)) { if (!findDependentQtLibraries(libraryLocation, plugin, options.platform, errorMessage, &dependentQtLibs, &wordSize, &detectedDebug)) return result; } if (optVerboseLevel >= 1) { std::wcout << "QML imports:\n"; - foreach (const QmlImportScanResult::Module &mod, qmlScanResult.modules) { + for (const QmlImportScanResult::Module &mod : qAsConst(qmlScanResult.modules)) { std::wcout << " '" << mod.name << "' " << QDir::toNativeSeparators(mod.sourcePath) << '\n'; } if (optVerboseLevel >= 2) { std::wcout << "QML plugins:\n"; - foreach (const QString &p, qmlScanResult.plugins) + for (const QString &p : qAsConst(qmlScanResult.plugins)) std::wcout << " " << QDir::toNativeSeparators(p) << '\n'; } } @@ -1323,20 +1357,30 @@ if (isDebug) libGlesName += QLatin1Char('d'); libGlesName += QLatin1String(windowsSharedLibrarySuffix); + QString libCombinedQtAngleName = QStringLiteral("QtANGLE"); + if (isDebug) + libCombinedQtAngleName += QLatin1Char('d'); + libCombinedQtAngleName += QLatin1String(windowsSharedLibrarySuffix); const QStringList guiLibraries = findDependentLibraries(qtGuiLibrary, options.platform, errorMessage); const bool dependsOnAngle = !guiLibraries.filter(libGlesName, Qt::CaseInsensitive).isEmpty(); + const bool dependsOnCombinedAngle = !guiLibraries.filter(libCombinedQtAngleName, Qt::CaseInsensitive).isEmpty(); const bool dependsOnOpenGl = !guiLibraries.filter(QStringLiteral("opengl32"), Qt::CaseInsensitive).isEmpty(); if (options.angleDetection != Options::AngleDetectionForceOff - && (dependsOnAngle || !dependsOnOpenGl || options.angleDetection == Options::AngleDetectionForceOn)) { - const QString libGlesFullPath = qtBinDir + slash + libGlesName; - deployedQtLibraries.append(libGlesFullPath); - QString libEglFullPath = qtBinDir + slash + QStringLiteral("libEGL"); - if (isDebug) - libEglFullPath += QLatin1Char('d'); - libEglFullPath += QLatin1String(windowsSharedLibrarySuffix); - deployedQtLibraries.append(libEglFullPath); + && (dependsOnAngle || dependsOnCombinedAngle || !dependsOnOpenGl || options.angleDetection == Options::AngleDetectionForceOn)) { + const QString combinedAngleFullPath = qtBinDir + slash + libCombinedQtAngleName; + if (QFileInfo(combinedAngleFullPath).exists()) { + deployedQtLibraries.append(combinedAngleFullPath); + } else { + const QString libGlesFullPath = qtBinDir + slash + libGlesName; + deployedQtLibraries.append(libGlesFullPath); + QString libEglFullPath = qtBinDir + slash + QStringLiteral("libEGL"); + if (isDebug) + libEglFullPath += QLatin1Char('d'); + libEglFullPath += QLatin1String(windowsSharedLibrarySuffix); + deployedQtLibraries.append(libEglFullPath); + } // Find the system D3d Compiler matching the D3D library. - if (options.systemD3dCompiler && !options.isWinRtOrWinPhone()) { + if (options.systemD3dCompiler && !options.isWinRt()) { const QString d3dCompiler = findD3dCompiler(options.platform, qtBinDir, wordSize); if (d3dCompiler.isEmpty()) { std::wcerr << "Warning: Cannot find any version of the d3dcompiler DLL.\n"; @@ -1386,12 +1430,12 @@ QStringList libraries = deployedQtLibraries; if (options.compilerRunTime) libraries.append(compilerRunTimeLibs(options.platform, isDebug, wordSize)); - foreach (const QString &qtLib, libraries) { + for (const QString &qtLib : qAsConst(libraries)) { if (!updateLibrary(qtLib, targetPath, options, errorMessage)) return result; } - if (!options.isWinRtOrWinPhone() && !options.dryRun) { + if (options.patchQt && !options.dryRun && !options.isWinRt()) { const QString qt5CoreName = QFileInfo(libraryPath(libraryLocation, "Qt5Core", qtLibInfix, options.platform, isDebug)).fileName(); @@ -1410,7 +1454,7 @@ QDir::toNativeSeparators(dir.absolutePath()) + QLatin1Char('.'); return result; } - foreach (const QString &plugin, plugins) { + for (const QString &plugin : plugins) { const QString targetDirName = plugin.section(slash, -2, -2); const QString targetPath = dir.absoluteFilePath(targetDirName); if (!dir.exists(targetDirName)) { @@ -1432,7 +1476,7 @@ // for WebKit1-applications. Check direct dependency only. if (options.quickImports && (usesQuick1 || usesQml2)) { if (usesQml2) { - foreach (const QmlImportScanResult::Module &module, qmlScanResult.modules) { + for (const QmlImportScanResult::Module &module : qAsConst(qmlScanResult.modules)) { const QString installPath = module.installPath(options.directory); if (optVerboseLevel > 1) std::wcout << "Installing: '" << module.name @@ -1442,10 +1486,6 @@ return result; unsigned updateFileFlags = options.updateFileFlags | SkipQmlDesignerSpecificsDirectories; unsigned qmlDirectoryFileFlags = 0; - if (quickControlsImportPath(module.sourcePath) == 1) { // QML files of Controls 1 not needed - updateFileFlags |= RemoveEmptyQmlDirectories; - qmlDirectoryFileFlags |= QmlDirectoryFileEntryFunction::SkipSources; - } if (options.deployPdb) qmlDirectoryFileFlags |= QmlDirectoryFileEntryFunction::DeployPdb; if (!updateFile(module.sourcePath, QmlDirectoryFileEntryFunction(options.platform, debugMatchMode, qmlDirectoryFileFlags), @@ -1460,7 +1500,7 @@ QStringList quick1Imports(QStringLiteral("Qt")); if (result.deployedQtLibraries & QtWebKitModule) quick1Imports << QStringLiteral("QtWebKit"); - foreach (const QString &quick1Import, quick1Imports) { + for (const QString &quick1Import : qAsConst(quick1Imports)) { const QString sourceFile = quick1ImportPath + slash + quick1Import; if (!updateFile(sourceFile, qmlFileEntryFunction, options.directory, options.updateFileFlags, options.json, errorMessage)) return result; diff -Nru qttools-opensource-src-5.7.1/src/windeployqt/qmlutils.cpp qttools-opensource-src-5.9.1/src/windeployqt/qmlutils.cpp --- qttools-opensource-src-5.7.1/src/windeployqt/qmlutils.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/windeployqt/qmlutils.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -39,38 +39,15 @@ QT_BEGIN_NAMESPACE -// Return the relative install path, that is, for example for -// module "QtQuick.Controls.Styles" in "path/qtbase/qml/QtQuick/Controls/Styles.3" -// --> "QtQuick/Controls" suitable for updateFile() (cp -r semantics). -QString QmlImportScanResult::Module::relativeInstallPath() const -{ - const QChar dot = QLatin1Char('.'); - const QChar slash = QLatin1Char('/'); - - // Find relative path by module name. - if (!name.contains(dot)) - return QString(); // "QtQuick.2" -> flat folder. - QString result = sourcePath; - QString pathComponent = name; - pathComponent.replace(dot, slash); - const int pos = result.lastIndexOf(pathComponent); - if (pos < 0) - return QString(); - result.remove(0, pos); - // return base name. - const int lastSlash = result.lastIndexOf(slash); - if (lastSlash >= 0) - result.truncate(lastSlash); - return result; -} - +// Return install path (cp -r semantics) QString QmlImportScanResult::Module::installPath(const QString &root) const { QString result = root; - const QString relPath = relativeInstallPath(); - if (!relPath.isEmpty()) + const int lastSlashPos = relativePath.lastIndexOf(QLatin1Char('/')); + if (lastSlashPos != -1) { result += QLatin1Char('/'); - result += relPath; + result += relativePath.left(lastSlashPos); + } return result; } @@ -79,9 +56,10 @@ QDir dir(path); if (!dir.entryList(QStringList(QStringLiteral("*.qml")), QDir::Files, QDir::NoSort).isEmpty()) return dir.path(); - foreach (const QString &subDir, dir.entryList(QStringList(), QDir::Dirs | QDir::NoDotAndDotDot, QDir::NoSort)) { - if (!isBuildDirectory(platform, subDir)) { - const QString subPath = qmlDirectoryRecursion(platform, dir.path() + QLatin1Char('/') + subDir); + const QFileInfoList &subDirs = dir.entryInfoList(QStringList(), QDir::Dirs | QDir::NoDotAndDotDot, QDir::NoSort); + for (const QFileInfo &subDirFi : subDirs) { + if (!isBuildDirectory(platform, subDirFi.fileName())) { + const QString subPath = qmlDirectoryRecursion(platform, subDirFi.absoluteFilePath()); if (!subPath.isEmpty()) return subPath; } @@ -101,11 +79,13 @@ static void findFileRecursion(const QDir &directory, Platform platform, DebugMatchMode debugMatchMode, QStringList *matches) { - foreach (const QString &dll, findSharedLibraries(directory, platform, debugMatchMode)) + const QStringList &dlls = findSharedLibraries(directory, platform, debugMatchMode); + for (const QString &dll : dlls) matches->append(directory.filePath(dll)); - foreach (const QString &subDir, directory.entryList(QStringList(), QDir::Dirs | QDir::NoDotAndDotDot | QDir::NoSymLinks)) { - QDir subDirectory = directory; - if (subDirectory.cd(subDir)) + const QFileInfoList &subDirs = directory.entryInfoList(QStringList(), QDir::Dirs | QDir::NoDotAndDotDot | QDir::NoSymLinks); + for (const QFileInfo &subDirFi : subDirs) { + QDir subDirectory(subDirFi.absoluteFilePath()); + if (subDirectory.isReadable()) findFileRecursion(subDirectory, platform, debugMatchMode, matches); } } @@ -148,6 +128,7 @@ module.name = object.value(QStringLiteral("name")).toString(); module.className = object.value(QStringLiteral("classname")).toString(); module.sourcePath = path; + module.relativePath = object.value(QStringLiteral("relativePath")).toString(); result.modules.append(module); findFileRecursion(QDir(path), Platform(platform), debugMatchMode, &result.plugins); // QTBUG-48424, QTBUG-45977: In release mode, qmlimportscanner does not report @@ -161,6 +142,7 @@ privateWidgetsModule.name = QStringLiteral("QtQuick.PrivateWidgets"); privateWidgetsModule.className = QStringLiteral("QtQuick2PrivateWidgetsPlugin"); privateWidgetsModule.sourcePath = QFileInfo(path).absolutePath() + QStringLiteral("/PrivateWidgets"); + privateWidgetsModule.relativePath = QStringLiteral("QtQuick/PrivateWidgets"); result.modules.append(privateWidgetsModule); findFileRecursion(QDir(privateWidgetsModule.sourcePath), Platform(platform), debugMatchMode, &result.plugins); } @@ -173,7 +155,7 @@ static inline bool contains(const QList &modules, const QString &className) { - foreach (const QmlImportScanResult::Module &m, modules) { + for (const QmlImportScanResult::Module &m : modules) { if (m.className == className) return true; } @@ -182,11 +164,11 @@ void QmlImportScanResult::append(const QmlImportScanResult &other) { - foreach (const QmlImportScanResult::Module &module, other.modules) { + for (const QmlImportScanResult::Module &module : other.modules) { if (!contains(modules, module.className)) modules.append(module); } - foreach (const QString &plugin, other.plugins) { + for (const QString &plugin : other.plugins) { if (!plugins.contains(plugin)) plugins.append(plugin); } diff -Nru qttools-opensource-src-5.7.1/src/windeployqt/qmlutils.h qttools-opensource-src-5.9.1/src/windeployqt/qmlutils.h --- qttools-opensource-src-5.7.1/src/windeployqt/qmlutils.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/windeployqt/qmlutils.h 2017-06-23 12:03:39.000000000 +0000 @@ -39,12 +39,12 @@ struct QmlImportScanResult { struct Module { - QString relativeInstallPath() const; QString installPath(const QString &root) const; QString name; QString className; QString sourcePath; + QString relativePath; }; QmlImportScanResult() : ok(false) {} diff -Nru qttools-opensource-src-5.7.1/src/windeployqt/utils.cpp qttools-opensource-src-5.9.1/src/windeployqt/utils.cpp --- qttools-opensource-src-5.7.1/src/windeployqt/utils.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/windeployqt/utils.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -117,8 +117,9 @@ nameFilter += sharedLibrarySuffix(platform); QStringList result; QString errorMessage; - foreach (const QString &dll, directory.entryList(QStringList(nameFilter), QDir::Files)) { - const QString dllPath = directory.absoluteFilePath(dll); + const QFileInfoList &dlls = directory.entryInfoList(QStringList(nameFilter), QDir::Files); + for (const QFileInfo &dllFi : dlls) { + const QString dllPath = dllFi.absoluteFilePath(); bool matches = true; if (debugMatchMode != MatchDebugOrRelease && (platform & WindowsBased)) { bool debugDll; @@ -131,7 +132,7 @@ } } // Windows if (matches) - result += dll; + result += dllFi.fileName(); } // for return result; } @@ -192,7 +193,8 @@ securityAttributes.bInheritHandle = TRUE; return CreateFile(name, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, &securityAttributes, - TRUNCATE_EXISTING, FILE_ATTRIBUTE_TEMPORARY, NULL); + TRUNCATE_EXISTING, + FILE_ATTRIBUTE_TEMPORARY | FILE_FLAG_DELETE_ON_CLOSE, NULL); } // runProcess helper: Rewind and read out a temporary file for stdout/stderr. @@ -269,7 +271,7 @@ // Create a copy of the command line which CreateProcessW can modify. QString commandLine; appendToCommandLine(binary, &commandLine); - foreach (const QString &a, args) + for (const QString &a : args) appendToCommandLine(a, &commandLine); if (optVerboseLevel > 1) std::wcout << "Running: " << commandLine << '\n'; @@ -393,7 +395,7 @@ char **argv = new char *[args.size() + 2]; // Create argv. char **ap = argv; *ap++ = encodeFileName(binary); - foreach (const QString &a, args) + for (const QString &a : qAsConst(args)) *ap++ = encodeFileName(a); *ap = 0; @@ -564,10 +566,12 @@ } // Recurse into directory QDir dir(sourceFileName); - const QStringList allEntries = dir.entryList(nameFilters, QDir::Files) + dir.entryList(QDir::Dirs | QDir::NoDotAndDotDot); - foreach (const QString &entry, allEntries) - if (!updateFile(sourceFileName + QLatin1Char('/') + entry, nameFilters, targetFileName, flags, json, errorMessage)) + const QFileInfoList allEntries = dir.entryInfoList(nameFilters, QDir::Files) + + dir.entryInfoList(QDir::Dirs | QDir::NoDotAndDotDot); + for (const QFileInfo &entryFi : allEntries) { + if (!updateFile(entryFi.absoluteFilePath(), nameFilters, targetFileName, flags, json, errorMessage)) return false; + } return true; } // Source is directory. @@ -625,7 +629,7 @@ + elfReader.errorString(); return false; } - foreach (const QByteArray &l, libs) + for (const QByteArray &l : libs) dependentLibraries->push_back(QString::fromLocal8Bit(l)); } if (isDebug) @@ -750,7 +754,7 @@ static inline MsvcDebugRuntimeResult checkMsvcDebugRuntime(const QStringList &dependentLibraries) { - foreach (const QString &lib, dependentLibraries) { + for (const QString &lib : dependentLibraries) { int pos = 0; if (lib.startsWith(QLatin1String("MSVCR"), Qt::CaseInsensitive) || lib.startsWith(QLatin1String("MSVCP"), Qt::CaseInsensitive)) { @@ -903,7 +907,7 @@ candidateVersions.append(prefix + QString::number(i) + suffix); // Check the bin directory of the Qt SDK (in case it is shadowed by the // Windows system directory in PATH). - foreach (const QString &candidate, candidateVersions) { + for (const QString &candidate : qAsConst(candidateVersions)) { const QFileInfo fi(qtBinDir + QLatin1Char('/') + candidate); if (fi.isFile()) return fi.absoluteFilePath(); @@ -912,7 +916,7 @@ if (platform & IntelBased) { QString errorMessage; unsigned detectedWordSize; - foreach (const QString &candidate, candidateVersions) { + for (const QString &candidate : qAsConst(candidateVersions)) { const QString dll = findInPath(candidate); if (!dll.isEmpty() && readPeExecutable(dll, &errorMessage, 0, &detectedWordSize, 0) diff -Nru qttools-opensource-src-5.7.1/src/windeployqt/utils.h qttools-opensource-src-5.9.1/src/windeployqt/utils.h --- qttools-opensource-src-5.7.1/src/windeployqt/utils.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/windeployqt/utils.h 2017-06-23 12:03:39.000000000 +0000 @@ -55,8 +55,6 @@ WindowsMinGW = WindowsBased + IntelBased + MinGW, WinRtIntel = WindowsBased + IntelBased + 1, WinRtArm = WindowsBased + ArmBased + 2, - WinPhoneIntel = WindowsBased + IntelBased + 3, - WinPhoneArm = WindowsBased + ArmBased + 4, WinCEIntel = WindowsBased + IntelBased + 5, WinCEArm = WindowsBased + ArmBased + 6, Unix = UnixBased, @@ -105,7 +103,7 @@ { QJsonObject document; QJsonArray files; - foreach (const SourceTargetMapping &mapping, m_files) { + for (const SourceTargetMapping &mapping : m_files) { QJsonObject object; object.insert(QStringLiteral("source"), QDir::toNativeSeparators(mapping.first)); object.insert(QStringLiteral("target"), QDir::toNativeSeparators(mapping.second)); @@ -117,7 +115,7 @@ QByteArray toList(ListOption option, const QDir &base) const { QByteArray list; - foreach (const SourceTargetMapping &mapping, m_files) { + for (const SourceTargetMapping &mapping : m_files) { const QString source = QDir::toNativeSeparators(mapping.first); const QString fileName = QFileInfo(mapping.first).fileName(); const QString target = QDir::toNativeSeparators(mapping.second) + QDir::separator() + fileName; @@ -307,7 +305,7 @@ QDir dir(sourceFileName); const QStringList allEntries = directoryFileEntryFunction(dir) + dir.entryList(QDir::Dirs | QDir::NoDotAndDotDot); - foreach (const QString &entry, allEntries) + for (const QString &entry : allEntries) if (!updateFile(sourceFileName + QLatin1Char('/') + entry, directoryFileEntryFunction, targetFileName, flags, json, errorMessage)) return false; // Remove empty directories, for example QML import folders for which the filter did not match. diff -Nru qttools-opensource-src-5.7.1/src/windeployqt/windeployqt.pro qttools-opensource-src-5.9.1/src/windeployqt/windeployqt.pro --- qttools-opensource-src-5.7.1/src/windeployqt/windeployqt.pro 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/windeployqt/windeployqt.pro 2017-06-23 12:03:39.000000000 +0000 @@ -1,6 +1,6 @@ option(host_build) QT = core-private -DEFINES += QT_NO_CAST_FROM_ASCII QT_NO_CAST_TO_ASCII +DEFINES += QT_NO_CAST_FROM_ASCII QT_NO_CAST_TO_ASCII QT_NO_FOREACH SOURCES += main.cpp utils.cpp qmlutils.cpp elfreader.cpp HEADERS += utils.h qmlutils.h elfreader.h diff -Nru qttools-opensource-src-5.7.1/src/winrtrunner/appxengine.cpp qttools-opensource-src-5.9.1/src/winrtrunner/appxengine.cpp --- qttools-opensource-src-5.7.1/src/winrtrunner/appxengine.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/winrtrunner/appxengine.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -1,34 +1,37 @@ /**************************************************************************** ** -** Copyright (C) 2015 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ ** ** This file is part of the tools applications of the Qt Toolkit. ** -** $QT_BEGIN_LICENSE:LGPL3$ +** $QT_BEGIN_LICENSE:LGPL$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. ** ** GNU Lesser General Public License Usage ** Alternatively, this file may be used under the terms of the GNU Lesser ** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** Foundation and appearing in the file LICENSE.LGPL3 included in the ** packaging of this file. Please review the following information to ** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. ** ** GNU General Public License Usage ** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. ** ** $QT_END_LICENSE$ ** @@ -52,9 +55,7 @@ #include #include #include -#if _MSC_VER >= 1900 #include -#endif using namespace Microsoft::WRL; using namespace Microsoft::WRL::Wrappers; @@ -65,7 +66,6 @@ QT_USE_NAMESPACE -#if _MSC_VER >= 1900 // *********** Taken from MSDN Example code // https://msdn.microsoft.com/en-us/library/windows/desktop/jj835834%28v=vs.85%29.aspx?f=255&MSPPError=-2147217396 @@ -297,7 +297,6 @@ return true; } // ************ MSDN -#endif // MSC_VER >= 1900 bool AppxEngine::getManifestFile(const QString &fileName, QString *manifest) { @@ -458,13 +457,11 @@ d->packageFamilyName = QString::fromWCharArray(packageFamilyName); CoTaskMemFree(packageFamilyName); -#if _MSC_VER >= 1900 LPWSTR publisher; packageId->GetPublisher(&publisher); CHECK_RESULT_FATAL("Failed to retrieve publisher name from package.", return); d->publisherName = QString::fromWCharArray(publisher); CoTaskMemFree(publisher); -#endif // _MSC_VER >= 1900 ComPtr applications; hr = d->manifestReader->GetApplications(&applications); @@ -542,7 +539,7 @@ qCDebug(lcWinRtRunner) << __FUNCTION__; QSet toInstall; - foreach (const QString &dependencyName, d->dependencies) { + for (const QString &dependencyName : qAsConst(d->dependencies)) { toInstall.insert(dependencyName); qCDebug(lcWinRtRunner).nospace() << "dependency to be installed: " << dependencyName; @@ -721,7 +718,6 @@ bool AppxEngine::sign(const QString &fileName) { -#if _MSC_VER >= 1900 Q_D(const AppxEngine); BYTE buffer[256]; DWORD bufferSize = 256; @@ -800,8 +796,4 @@ } return signAppxPackage(context, wchar(fileName)); -#else // _MSC_VER < 1900 - Q_UNUSED(fileName); - return true; -#endif // _MSC_VER < 1900 } diff -Nru qttools-opensource-src-5.7.1/src/winrtrunner/appxengine.h qttools-opensource-src-5.9.1/src/winrtrunner/appxengine.h --- qttools-opensource-src-5.7.1/src/winrtrunner/appxengine.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/winrtrunner/appxengine.h 2017-06-23 12:03:39.000000000 +0000 @@ -1,34 +1,37 @@ /**************************************************************************** ** -** Copyright (C) 2015 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ ** ** This file is part of the tools applications of the Qt Toolkit. ** -** $QT_BEGIN_LICENSE:LGPL3$ +** $QT_BEGIN_LICENSE:LGPL$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. ** ** GNU Lesser General Public License Usage ** Alternatively, this file may be used under the terms of the GNU Lesser ** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** Foundation and appearing in the file LICENSE.LGPL3 included in the ** packaging of this file. Please review the following information to ** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. ** ** GNU General Public License Usage ** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. ** ** $QT_END_LICENSE$ ** diff -Nru qttools-opensource-src-5.7.1/src/winrtrunner/appxengine_p.h qttools-opensource-src-5.9.1/src/winrtrunner/appxengine_p.h --- qttools-opensource-src-5.7.1/src/winrtrunner/appxengine_p.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/winrtrunner/appxengine_p.h 2017-06-23 12:03:39.000000000 +0000 @@ -1,34 +1,37 @@ /**************************************************************************** ** -** Copyright (C) 2015 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ ** ** This file is part of the tools applications of the Qt Toolkit. ** -** $QT_BEGIN_LICENSE:LGPL3$ +** $QT_BEGIN_LICENSE:LGPL$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. ** ** GNU Lesser General Public License Usage ** Alternatively, this file may be used under the terms of the GNU Lesser ** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** Foundation and appearing in the file LICENSE.LGPL3 included in the ** packaging of this file. Please review the following information to ** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. ** ** GNU General Public License Usage ** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. ** ** $QT_END_LICENSE$ ** @@ -63,7 +66,9 @@ virtual ~AppxEnginePrivate() { + uriFactory.Reset(); packageFactory.Reset(); + manifestReader.Reset(); CoUninitialize(); } diff -Nru qttools-opensource-src-5.7.1/src/winrtrunner/appxlocalengine.cpp qttools-opensource-src-5.9.1/src/winrtrunner/appxlocalengine.cpp --- qttools-opensource-src-5.7.1/src/winrtrunner/appxlocalengine.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/winrtrunner/appxlocalengine.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -1,34 +1,37 @@ /**************************************************************************** ** -** Copyright (C) 2015 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ ** ** This file is part of the tools applications of the Qt Toolkit. ** -** $QT_BEGIN_LICENSE:LGPL3$ +** $QT_BEGIN_LICENSE:LGPL$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. ** ** GNU Lesser General Public License Usage ** Alternatively, this file may be used under the terms of the GNU Lesser ** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** Foundation and appearing in the file LICENSE.LGPL3 included in the ** packaging of this file. Please review the following information to ** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. ** ** GNU General Public License Usage ** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. ** ** $QT_END_LICENSE$ ** @@ -60,6 +63,9 @@ using namespace ABI::Windows::ApplicationModel; using namespace ABI::Windows::System; +typedef IAsyncOperationWithProgressCompletedHandler DeploymentResultHandler; +typedef IAsyncOperationWithProgress DeploymentOperation; + QT_USE_NAMESPACE // Set a break handler for gracefully breaking long-running ops @@ -378,7 +384,7 @@ hr = d->uriFactory->CreateUri(hStringFromQString(nativeFilePath), &uri); RETURN_FALSE_IF_FAILED("Failed to create an URI for the package"); - ComPtr> deploymentOperation; + ComPtr deploymentOperation; if (addInsteadOfRegister) { hr = d->packageManager->AddPackageAsync(uri.Get(), NULL, DeploymentOptions_None, &deploymentOperation); @@ -390,13 +396,41 @@ RETURN_FALSE_IF_FAILED("Failed to start package registration"); } + HANDLE ev = CreateEvent(NULL, FALSE, FALSE, NULL); + hr = deploymentOperation->put_Completed(Callback([ev](DeploymentOperation *, AsyncStatus) { + SetEvent(ev); + return S_OK; + }).Get()); + RETURN_FALSE_IF_FAILED("Could not register deployment completed callback."); + DWORD ret = WaitForSingleObjectEx(ev, 15000, FALSE); + CloseHandle(ev); + if (ret != WAIT_OBJECT_0) { + if (ret == WAIT_TIMEOUT) + qCWarning(lcWinRtRunner) << "Deployment did not finish within 15 seconds."; + else + qCWarning(lcWinRtRunner) << "Deployment finished event was not triggered."; + return false; + } + + ComPtr asyncInfo; + hr = deploymentOperation.As(&asyncInfo); + RETURN_FALSE_IF_FAILED("Failed to cast deployment operation to info."); + AsyncStatus status; + hr = asyncInfo->get_Status(&status); + RETURN_FALSE_IF_FAILED("Failed to retrieve deployment operation's status."); + + if (status != Completed) { + qCWarning(lcWinRtRunner) << "Deployment operation did not succeed."; + return false; + } + ComPtr results; - while ((hr = deploymentOperation->GetResults(&results)) == E_ILLEGAL_METHOD_CALL) - Sleep(1); + hr = deploymentOperation->GetResults(&results); + RETURN_FALSE_IF_FAILED("Failed to retrieve package registration results."); HRESULT errorCode; hr = results->get_ExtendedErrorCode(&errorCode); - RETURN_FALSE_IF_FAILED("Failed to retrieve package registration results."); + RETURN_FALSE_IF_FAILED("Failed to retrieve extended error code."); if (FAILED(errorCode)) { HString errorText; @@ -462,17 +496,40 @@ qCDebug(lcWinRtRunner) << __FUNCTION__; // ### TODO: use RemovePackageWithOptions to preserve previous state when re-installing - ComPtr> deploymentOperation; + ComPtr deploymentOperation; HRESULT hr = d->packageManager->RemovePackageAsync(hStringFromQString(d->packageFullName), &deploymentOperation); RETURN_FALSE_IF_FAILED("Unable to start package removal"); - ComPtr results; - while ((hr = deploymentOperation.Get()->GetResults(&results)) == E_ILLEGAL_METHOD_CALL) - Sleep(1); + HANDLE ev = CreateEvent(NULL, FALSE, FALSE, NULL); + hr = deploymentOperation->put_Completed(Callback([ev](DeploymentOperation *, AsyncStatus) { + SetEvent(ev); + return S_OK; + }).Get()); + RETURN_FALSE_IF_FAILED("Could not register deployment completed callback."); + DWORD ret = WaitForSingleObjectEx(ev, 15000, FALSE); + CloseHandle(ev); + if (ret != WAIT_OBJECT_0) { + if (ret == WAIT_TIMEOUT) + qCWarning(lcWinRtRunner) << "Deployment did not finish within 15 seconds."; + else + qCWarning(lcWinRtRunner) << "Deployment finished event was not triggered."; + return false; + } - RETURN_FALSE_IF_FAILED("Unable to remove package"); + ComPtr asyncInfo; + hr = deploymentOperation.As(&asyncInfo); + RETURN_FALSE_IF_FAILED("Failed to cast deployment operation."); + + AsyncStatus status; + hr = asyncInfo->get_Status(&status); + RETURN_FALSE_IF_FAILED("Failed to retrieve deployment operation's status."); - return SUCCEEDED(hr); + if (status != Completed) { + qCWarning(lcWinRtRunner) << "Unable to remove package."; + return false; + } + + return true; } bool AppxLocalEngine::start() diff -Nru qttools-opensource-src-5.7.1/src/winrtrunner/appxlocalengine.h qttools-opensource-src-5.9.1/src/winrtrunner/appxlocalengine.h --- qttools-opensource-src-5.7.1/src/winrtrunner/appxlocalengine.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/winrtrunner/appxlocalengine.h 2017-06-23 12:03:39.000000000 +0000 @@ -1,34 +1,37 @@ /**************************************************************************** ** -** Copyright (C) 2015 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ ** ** This file is part of the tools applications of the Qt Toolkit. ** -** $QT_BEGIN_LICENSE:LGPL3$ +** $QT_BEGIN_LICENSE:LGPL$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. ** ** GNU Lesser General Public License Usage ** Alternatively, this file may be used under the terms of the GNU Lesser ** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** Foundation and appearing in the file LICENSE.LGPL3 included in the ** packaging of this file. Please review the following information to ** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. ** ** GNU General Public License Usage ** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. ** ** $QT_END_LICENSE$ ** diff -Nru qttools-opensource-src-5.7.1/src/winrtrunner/appxphoneengine.cpp qttools-opensource-src-5.9.1/src/winrtrunner/appxphoneengine.cpp --- qttools-opensource-src-5.7.1/src/winrtrunner/appxphoneengine.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/winrtrunner/appxphoneengine.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -1,34 +1,37 @@ /**************************************************************************** ** -** Copyright (C) 2015 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ ** ** This file is part of the tools applications of the Qt Toolkit. ** -** $QT_BEGIN_LICENSE:LGPL3$ +** $QT_BEGIN_LICENSE:LGPL$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. ** ** GNU Lesser General Public License Usage ** Alternatively, this file may be used under the terms of the GNU Lesser ** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** Foundation and appearing in the file LICENSE.LGPL3 included in the ** packaging of this file. Please review the following information to ** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. ** ** GNU General Public License Usage ** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. ** ** $QT_END_LICENSE$ ** @@ -210,7 +213,9 @@ QStringList AppxPhoneEngine::deviceNames() { QStringList deviceNames; - foreach (const CoreConDevice *device, coreConServer->devices()) + + const QList devices = coreConServer->devices(); + for (const CoreConDevice *device : devices) deviceNames.append(device->name()); return deviceNames; } @@ -264,35 +269,12 @@ QString AppxPhoneEngine::extensionSdkPath() const { -#if _MSC_VER >= 1900 const QByteArray extensionSdkDirRaw = qgetenv("ExtensionSdkDir"); if (extensionSdkDirRaw.isEmpty()) { qCWarning(lcWinRtRunner) << "The environment variable ExtensionSdkDir is not set."; return QString(); } return QString::fromLocal8Bit(extensionSdkDirRaw); -#else // _MSC_VER < 1900 - HKEY regKey; - LONG hr = RegOpenKeyEx( - HKEY_LOCAL_MACHINE, - L"SOFTWARE\\Wow6432Node\\Microsoft\\Microsoft SDKs\\WindowsPhoneApp\\v8.1", - 0, KEY_READ, ®Key); - if (hr != ERROR_SUCCESS) { - qCWarning(lcWinRtRunner) << "Failed to open registry key:" << qt_error_string(hr); - return QString(); - } - - wchar_t pathData[MAX_PATH]; - DWORD pathLength = MAX_PATH; - hr = RegGetValue(regKey, L"Install Path", L"Install Path", RRF_RT_REG_SZ, NULL, pathData, &pathLength); - if (hr != ERROR_SUCCESS) { - qCWarning(lcWinRtRunner) << "Failed to get installation path value:" << qt_error_string(hr); - return QString(); - } - - return QString::fromWCharArray(pathData, (pathLength - 1) / sizeof(wchar_t)) - + QLatin1String("ExtensionSDKs"); -#endif // _MSC_VER < 1900 } bool AppxPhoneEngine::installPackage(IAppxManifestReader *reader, const QString &filePath) diff -Nru qttools-opensource-src-5.7.1/src/winrtrunner/appxphoneengine.h qttools-opensource-src-5.9.1/src/winrtrunner/appxphoneengine.h --- qttools-opensource-src-5.7.1/src/winrtrunner/appxphoneengine.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/winrtrunner/appxphoneengine.h 2017-06-23 12:03:39.000000000 +0000 @@ -1,34 +1,37 @@ /**************************************************************************** ** -** Copyright (C) 2015 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ ** ** This file is part of the tools applications of the Qt Toolkit. ** -** $QT_BEGIN_LICENSE:LGPL3$ +** $QT_BEGIN_LICENSE:LGPL$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. ** ** GNU Lesser General Public License Usage ** Alternatively, this file may be used under the terms of the GNU Lesser ** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** Foundation and appearing in the file LICENSE.LGPL3 included in the ** packaging of this file. Please review the following information to ** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. ** ** GNU General Public License Usage ** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. ** ** $QT_END_LICENSE$ ** diff -Nru qttools-opensource-src-5.7.1/src/winrtrunner/main.cpp qttools-opensource-src-5.9.1/src/winrtrunner/main.cpp --- qttools-opensource-src-5.7.1/src/winrtrunner/main.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/winrtrunner/main.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -1,34 +1,37 @@ /**************************************************************************** ** -** Copyright (C) 2015 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ ** ** This file is part of the tools applications of the Qt Toolkit. ** -** $QT_BEGIN_LICENSE:LGPL3$ +** $QT_BEGIN_LICENSE:LGPL$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. ** ** GNU Lesser General Public License Usage ** Alternatively, this file may be used under the terms of the GNU Lesser ** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** Foundation and appearing in the file LICENSE.LGPL3 included in the ** packaging of this file. Please review the following information to ** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. ** ** GNU General Public License Usage ** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. ** ** $QT_END_LICENSE$ ** @@ -176,10 +179,10 @@ if (parser.isSet(listDevicesOption)) { std::wcout << "Available devices:\n"; const QMap deviceNames = Runner::deviceNames(); - foreach (const QString &profile, deviceNames.keys()) { - std::wcout << reinterpret_cast(profile.utf16()) << ":\n"; + for (auto it = deviceNames.cbegin(), end = deviceNames.cend(); it != end; ++it) { + std::wcout << reinterpret_cast(it.key().utf16()) << ":\n"; int index = 0; - foreach (const QString &device, deviceNames.value(profile)) { + for (const QString &device : it.value()) { std::wcout << " " << index++ << ' ' << reinterpret_cast(device.utf16()) << '\n'; } diff -Nru qttools-opensource-src-5.7.1/src/winrtrunner/runner.cpp qttools-opensource-src-5.9.1/src/winrtrunner/runner.cpp --- qttools-opensource-src-5.7.1/src/winrtrunner/runner.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/winrtrunner/runner.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -1,34 +1,37 @@ /**************************************************************************** ** -** Copyright (C) 2015 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ ** ** This file is part of the tools applications of the Qt Toolkit. ** -** $QT_BEGIN_LICENSE:LGPL3$ +** $QT_BEGIN_LICENSE:LGPL$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. ** ** GNU Lesser General Public License Usage ** Alternatively, this file may be used under the terms of the GNU Lesser ** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** Foundation and appearing in the file LICENSE.LGPL3 included in the ** packaging of this file. Please review the following information to ** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. ** ** GNU General Public License Usage ** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. ** ** $QT_END_LICENSE$ ** @@ -93,34 +96,34 @@ bool deviceIndexKnown; d->deviceIndex = deviceName.toInt(&deviceIndexKnown); -#ifndef RTRUNNER_NO_APPXPHONE +#ifndef RTRUNNER_NO_APPXLOCAL if (!deviceIndexKnown) { - d->deviceIndex = AppxPhoneEngine::deviceNames().indexOf(deviceName); + d->deviceIndex = AppxLocalEngine::deviceNames().indexOf(deviceName); if (d->deviceIndex < 0) d->deviceIndex = 0; } - if ((d->profile.isEmpty() || d->profile.toLower() == QStringLiteral("appxphone")) - && AppxPhoneEngine::canHandle(this)) { - if (RunnerEngine *engine = AppxPhoneEngine::create(this)) { + if ((d->profile.isEmpty() || d->profile.toLower() == QStringLiteral("appx")) + && AppxLocalEngine::canHandle(this)) { + if (RunnerEngine *engine = AppxLocalEngine::create(this)) { d->engine.reset(engine); d->isValid = true; - qCWarning(lcWinRtRunner) << "Using the AppxPhone profile."; + qCWarning(lcWinRtRunner) << "Using the Appx profile."; return; } } #endif -#ifndef RTRUNNER_NO_APPXLOCAL +#ifndef RTRUNNER_NO_APPXPHONE if (!deviceIndexKnown) { - d->deviceIndex = AppxLocalEngine::deviceNames().indexOf(deviceName); + d->deviceIndex = AppxPhoneEngine::deviceNames().indexOf(deviceName); if (d->deviceIndex < 0) d->deviceIndex = 0; } - if ((d->profile.isEmpty() || d->profile.toLower() == QStringLiteral("appx")) - && AppxLocalEngine::canHandle(this)) { - if (RunnerEngine *engine = AppxLocalEngine::create(this)) { + if ((d->profile.isEmpty() || d->profile.toLower() == QStringLiteral("appxphone")) + && AppxPhoneEngine::canHandle(this)) { + if (RunnerEngine *engine = AppxPhoneEngine::create(this)) { d->engine.reset(engine); d->isValid = true; - qCWarning(lcWinRtRunner) << "Using the Appx profile."; + qCWarning(lcWinRtRunner) << "Using the AppxPhone profile."; return; } } diff -Nru qttools-opensource-src-5.7.1/src/winrtrunner/runnerengine.h qttools-opensource-src-5.9.1/src/winrtrunner/runnerengine.h --- qttools-opensource-src-5.7.1/src/winrtrunner/runnerengine.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/winrtrunner/runnerengine.h 2017-06-23 12:03:39.000000000 +0000 @@ -1,34 +1,37 @@ /**************************************************************************** ** -** Copyright (C) 2015 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ ** ** This file is part of the tools applications of the Qt Toolkit. ** -** $QT_BEGIN_LICENSE:LGPL3$ +** $QT_BEGIN_LICENSE:LGPL$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. ** ** GNU Lesser General Public License Usage ** Alternatively, this file may be used under the terms of the GNU Lesser ** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** Foundation and appearing in the file LICENSE.LGPL3 included in the ** packaging of this file. Please review the following information to ** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. ** ** GNU General Public License Usage ** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. ** ** $QT_END_LICENSE$ ** diff -Nru qttools-opensource-src-5.7.1/src/winrtrunner/runner.h qttools-opensource-src-5.9.1/src/winrtrunner/runner.h --- qttools-opensource-src-5.7.1/src/winrtrunner/runner.h 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/winrtrunner/runner.h 2017-06-23 12:03:39.000000000 +0000 @@ -1,34 +1,37 @@ /**************************************************************************** ** -** Copyright (C) 2015 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ ** ** This file is part of the tools applications of the Qt Toolkit. ** -** $QT_BEGIN_LICENSE:LGPL3$ +** $QT_BEGIN_LICENSE:LGPL$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. ** ** GNU Lesser General Public License Usage ** Alternatively, this file may be used under the terms of the GNU Lesser ** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** Foundation and appearing in the file LICENSE.LGPL3 included in the ** packaging of this file. Please review the following information to ** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. ** ** GNU General Public License Usage ** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. ** ** $QT_END_LICENSE$ ** diff -Nru qttools-opensource-src-5.7.1/src/winrtrunner/winrtrunner.pro qttools-opensource-src-5.9.1/src/winrtrunner/winrtrunner.pro --- qttools-opensource-src-5.7.1/src/winrtrunner/winrtrunner.pro 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/src/winrtrunner/winrtrunner.pro 2017-06-23 12:03:39.000000000 +0000 @@ -3,21 +3,23 @@ DEFINES += QT_NO_CAST_FROM_ASCII QT_NO_CAST_TO_ASCII WINRT_LIBRARY -SOURCES += main.cpp runner.cpp -HEADERS += runner.h runnerengine.h +SOURCES += \ + main.cpp \ + runner.cpp \ + appxengine.cpp \ + appxlocalengine.cpp \ + appxphoneengine.cpp + +HEADERS += \ + runner.h \ + runnerengine.h \ + appxengine.h \ + appxengine_p.h \ + appxlocalengine.h \ + appxphoneengine.h -DEFINES += RTRUNNER_NO_APPXLOCAL RTRUNNER_NO_APPXPHONE +LIBS += -lruntimeobject -lwsclient -lShlwapi -lurlmon -lxmllite -lcrypt32 -win32-msvc2013|win32-msvc2015 { - SOURCES += appxengine.cpp appxlocalengine.cpp appxphoneengine.cpp - HEADERS += appxengine.h appxengine_p.h appxlocalengine.h appxphoneengine.h - LIBS += -lruntimeobject -lwsclient -lShlwapi -lurlmon -lxmllite - DEFINES -= RTRUNNER_NO_APPXLOCAL RTRUNNER_NO_APPXPHONE - - include(../shared/corecon/corecon.pri) -} - -# Windows 10 requires signing -*msvc2015: LIBS += -lcrypt32 +include(../shared/corecon/corecon.pri) load(qt_tool) diff -Nru qttools-opensource-src-5.7.1/sync.profile qttools-opensource-src-5.9.1/sync.profile --- qttools-opensource-src-5.7.1/sync.profile 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/sync.profile 2017-06-23 12:03:39.000000000 +0000 @@ -1,5 +1,4 @@ %modules = ( # path to module name map - "QtCLucene" => "$basedir/src/assistant/clucene", "QtHelp" => "$basedir/src/assistant/help", "QtUiTools" => "$basedir/src/designer/src/uitools", "QtUiPlugin" => "$basedir/src/designer/src/uiplugin", @@ -19,16 +18,3 @@ "QDesignerExportWidget" => "QtUiPlugin/QDesignerExportWidget" } ); -# Module dependencies. -# Every module that is required to build this module should have one entry. -# Each of the module version specifiers can take one of the following values: -# - A specific Git revision. -# - any git symbolic ref resolvable from the module's repository (e.g. "refs/heads/master" to track master branch) -# - an empty string to use the same branch under test (dependencies will become "refs/heads/master" if we are in the master branch) -# -%dependencies = ( - "qtbase" => "", - "qtxmlpatterns" => "", - "qtdeclarative" => "", - "qtactiveqt" => "", -); diff -Nru qttools-opensource-src-5.7.1/.tag qttools-opensource-src-5.9.1/.tag --- qttools-opensource-src-5.7.1/.tag 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/.tag 2017-06-23 12:03:39.000000000 +0000 @@ -1 +1 @@ -8575ed82ff0dd43aed8f5de67b4cfef06fec8c33 +dfda6f14b3e210a33b71ef1c6fa3c75a9c866cce diff -Nru qttools-opensource-src-5.7.1/tests/auto/auto.pro qttools-opensource-src-5.9.1/tests/auto/auto.pro --- qttools-opensource-src-5.7.1/tests/auto/auto.pro 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/tests/auto/auto.pro 2017-06-23 12:03:39.000000000 +0000 @@ -1,6 +1,7 @@ TEMPLATE=subdirs SUBDIRS=\ linguist \ + qtattributionsscanner \ qhelpcontentmodel \ qhelpenginecore \ qhelpgenerator \ @@ -24,5 +25,5 @@ qhelpindexmodel \ qhelpprojectdata \ -android|ios|qnx|wince*|winrt*:SUBDIRS -= qtdiag -!win32|wince*|winrt*:SUBDIRS -= windeployqt +android|ios|qnx|winrt: SUBDIRS -= qtdiag +!win32|winrt: SUBDIRS -= windeployqt diff -Nru qttools-opensource-src-5.7.1/tests/auto/linguist/lconvert/tst_lconvert.cpp qttools-opensource-src-5.9.1/tests/auto/linguist/lconvert/tst_lconvert.cpp --- qttools-opensource-src-5.7.1/tests/auto/linguist/lconvert/tst_lconvert.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/tests/auto/linguist/lconvert/tst_lconvert.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -34,7 +34,9 @@ Q_OBJECT public: - tst_lconvert() : dataDir(QFINDTESTDATA("data/")), binDir(QLibraryInfo::location(QLibraryInfo::BinariesPath)) {} + tst_lconvert() + : dataDir(QFINDTESTDATA("data/")) + , lconvert(QLibraryInfo::location(QLibraryInfo::BinariesPath) + "/lconvert") {} private slots: void initTestCase(); @@ -61,7 +63,7 @@ const QList &args); QString dataDir; - QString binDir; + QString lconvert; }; void tst_lconvert::initTestCase() @@ -140,7 +142,7 @@ void tst_lconvert::verifyReadFail(const QString &fn) { QProcess cvt; - cvt.start(binDir + "/lconvert", QStringList() << (dataDir + fn)); + cvt.start(lconvert, QStringList() << (dataDir + fn)); QVERIFY(cvt.waitForFinished(10000)); QVERIFY(cvt.exitStatus() == QProcess::NormalExit); QVERIFY2(cvt.exitCode() == 2, "Accepted invalid input"); @@ -167,7 +169,7 @@ if (!argList.isEmpty()) args += argList[i]; args << "-if" << stations[i] << "-i" << "-" << "-of" << stations[i + 1]; - cvts.at(i)->start(binDir + "/lconvert", args, QIODevice::ReadWrite | QIODevice::Text); + cvts.at(i)->start(lconvert, args, QIODevice::ReadWrite | QIODevice::Text); } int st = 0; foreach (QProcess *cvt, cvts) @@ -233,7 +235,7 @@ QString outFileNameFq = dataDir + outFileName; QProcess cvt; - cvt.start(binDir + "/lconvert", + cvt.start(lconvert, QStringList() << "-i" << (dataDir + inFileName) << "-of" << format, QIODevice::ReadWrite | QIODevice::Text); doWait(&cvt, 0); @@ -328,7 +330,7 @@ QProcess cvt; QStringList args; args << (dataDir + "idxmerge.ts") << (dataDir + "idxmerge-add.ts"); - cvt.start(binDir + "/lconvert", args, QIODevice::ReadWrite | QIODevice::Text); + cvt.start(lconvert, args, QIODevice::ReadWrite | QIODevice::Text); doWait(&cvt, 1); if (!QTest::currentTestFailed()) doCompare(&cvt, dataDir + "idxmerge.ts.out"); diff -Nru qttools-opensource-src-5.7.1/tests/auto/linguist/lrelease/tst_lrelease.cpp qttools-opensource-src-5.9.1/tests/auto/linguist/lrelease/tst_lrelease.cpp --- qttools-opensource-src-5.7.1/tests/auto/linguist/lrelease/tst_lrelease.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/tests/auto/linguist/lrelease/tst_lrelease.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -39,7 +39,7 @@ public: tst_lrelease() - : binDir(QLibraryInfo::location(QLibraryInfo::BinariesPath)) + : lrelease(QLibraryInfo::location(QLibraryInfo::BinariesPath) + "/lrelease") , dataDir(QFINDTESTDATA("testdata/")) {} @@ -55,7 +55,7 @@ private: void doCompare(const QStringList &actual, const QString &expectedFn); - QString binDir; + QString lrelease; QString dataDir; }; @@ -109,7 +109,7 @@ void tst_lrelease::translate() { - QVERIFY(!QProcess::execute(binDir + "/lrelease " + dataDir + "translate.ts")); + QVERIFY(!QProcess::execute(lrelease, QStringList() << (dataDir + "translate.ts"))); QTranslator translator; QVERIFY(translator.load(dataDir + "translate.qm")); @@ -159,7 +159,7 @@ void tst_lrelease::compressed() { - QVERIFY(!QProcess::execute(binDir + "/lrelease -compress " + dataDir + "compressed.ts")); + QVERIFY(!QProcess::execute(lrelease, QStringList() << "-compress" << (dataDir + "compressed.ts"))); QTranslator translator; QVERIFY(translator.load(dataDir + "compressed.qm")); @@ -176,7 +176,7 @@ void tst_lrelease::idbased() { - QVERIFY(!QProcess::execute(binDir + "/lrelease -idbased " + dataDir + "idbased.ts")); + QVERIFY(!QProcess::execute(lrelease, QStringList() << "-idbased" << (dataDir + "idbased.ts"))); QTranslator translator; QVERIFY(translator.load(dataDir + "idbased.qm")); @@ -188,7 +188,7 @@ void tst_lrelease::markuntranslated() { - QVERIFY(!QProcess::execute(binDir + "/lrelease -markuntranslated # -idbased " + dataDir + "idbased.ts")); + QVERIFY(!QProcess::execute(lrelease, QStringList() << "-markuntranslated" << "#" << "-idbased" << (dataDir + "idbased.ts"))); QTranslator translator; QVERIFY(translator.load(dataDir + "idbased.qm")); @@ -201,7 +201,7 @@ void tst_lrelease::dupes() { QProcess proc; - proc.start(binDir + "/lrelease " + dataDir + "dupes.ts", QIODevice::ReadWrite | QIODevice::Text); + proc.start(lrelease, QStringList() << (dataDir + "dupes.ts"), QIODevice::ReadWrite | QIODevice::Text); QVERIFY(proc.waitForFinished()); QVERIFY(proc.exitStatus() == QProcess::NormalExit); doCompare(QString(proc.readAllStandardError()).trimmed().split('\n'), dataDir + "dupes.errors"); diff -Nru qttools-opensource-src-5.7.1/tests/auto/linguist/lupdate/testdata/good/parsecpp/main.cpp qttools-opensource-src-5.9.1/tests/auto/linguist/lupdate/testdata/good/parsecpp/main.cpp --- qttools-opensource-src-5.7.1/tests/auto/linguist/lupdate/testdata/good/parsecpp/main.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/tests/auto/linguist/lupdate/testdata/good/parsecpp/main.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -647,3 +647,11 @@ #include"qobject.h" QObject::tr("message after local include without space"); + + + +// QTBUG-35164: handling of \uNNNN escapes +QString unicodeEscape() +{ + return QApplication::tr("Context", "soft\u00ADhyphen"); +} diff -Nru qttools-opensource-src-5.7.1/tests/auto/linguist/lupdate/testdata/good/parsecpp/project.ts.result qttools-opensource-src-5.9.1/tests/auto/linguist/lupdate/testdata/good/parsecpp/project.ts.result --- qttools-opensource-src-5.7.1/tests/auto/linguist/lupdate/testdata/good/parsecpp/project.ts.result 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/tests/auto/linguist/lupdate/testdata/good/parsecpp/project.ts.result 2017-06-23 12:03:39.000000000 +0000 @@ -295,6 +295,12 @@ Translate this string to the string 'LTR' in left-to-right languages or to 'RTL' in right-to-left languages (such as Hebrew and Arabic) to get proper widget layout. + + + Context + soft­hyphen + + QCoreApplication diff -Nru qttools-opensource-src-5.7.1/tests/auto/linguist/lupdate/testdata/good/parseqrc/main.cpp qttools-opensource-src-5.9.1/tests/auto/linguist/lupdate/testdata/good/parseqrc/main.cpp --- qttools-opensource-src-5.7.1/tests/auto/linguist/lupdate/testdata/good/parseqrc/main.cpp 1970-01-01 00:00:00.000000000 +0000 +++ qttools-opensource-src-5.9.1/tests/auto/linguist/lupdate/testdata/good/parseqrc/main.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -0,0 +1,37 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +// IMPORTANT!!!! If you want to add testdata to this file, +// always add it to the end in order to not change the linenumbers of translations!!! + + +void func1() { + QApplication::tr("Hello world"); +} + + diff -Nru qttools-opensource-src-5.7.1/tests/auto/linguist/lupdate/testdata/good/parseqrc/main.js qttools-opensource-src-5.9.1/tests/auto/linguist/lupdate/testdata/good/parseqrc/main.js --- qttools-opensource-src-5.7.1/tests/auto/linguist/lupdate/testdata/good/parseqrc/main.js 1970-01-01 00:00:00.000000000 +0000 +++ qttools-opensource-src-5.9.1/tests/auto/linguist/lupdate/testdata/good/parseqrc/main.js 2017-06-23 12:03:39.000000000 +0000 @@ -0,0 +1 @@ +qsTr("From JavaScript file"); diff -Nru qttools-opensource-src-5.7.1/tests/auto/linguist/lupdate/testdata/good/parseqrc/main.qml qttools-opensource-src-5.9.1/tests/auto/linguist/lupdate/testdata/good/parseqrc/main.qml --- qttools-opensource-src-5.7.1/tests/auto/linguist/lupdate/testdata/good/parseqrc/main.qml 1970-01-01 00:00:00.000000000 +0000 +++ qttools-opensource-src-5.9.1/tests/auto/linguist/lupdate/testdata/good/parseqrc/main.qml 2017-06-23 12:03:39.000000000 +0000 @@ -0,0 +1,35 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 1.0 + +QtObject { + function translate() { + qsTr("From QML file in root"); + } +} diff -Nru qttools-opensource-src-5.7.1/tests/auto/linguist/lupdate/testdata/good/parseqrc/project.pro qttools-opensource-src-5.9.1/tests/auto/linguist/lupdate/testdata/good/parseqrc/project.pro --- qttools-opensource-src-5.7.1/tests/auto/linguist/lupdate/testdata/good/parseqrc/project.pro 1970-01-01 00:00:00.000000000 +0000 +++ qttools-opensource-src-5.9.1/tests/auto/linguist/lupdate/testdata/good/parseqrc/project.pro 2017-06-23 12:03:39.000000000 +0000 @@ -0,0 +1,7 @@ + +SOURCES += main.cpp + +RESOURCES += project.qrc +RESOURCES += main.qml + +TRANSLATIONS = project.ts diff -Nru qttools-opensource-src-5.7.1/tests/auto/linguist/lupdate/testdata/good/parseqrc/project.qrc qttools-opensource-src-5.9.1/tests/auto/linguist/lupdate/testdata/good/parseqrc/project.qrc --- qttools-opensource-src-5.7.1/tests/auto/linguist/lupdate/testdata/good/parseqrc/project.qrc 1970-01-01 00:00:00.000000000 +0000 +++ qttools-opensource-src-5.9.1/tests/auto/linguist/lupdate/testdata/good/parseqrc/project.qrc 2017-06-23 12:03:39.000000000 +0000 @@ -0,0 +1,5 @@ + + + main.js + + diff -Nru qttools-opensource-src-5.7.1/tests/auto/linguist/lupdate/testdata/good/parseqrc/project.ts.result qttools-opensource-src-5.9.1/tests/auto/linguist/lupdate/testdata/good/parseqrc/project.ts.result --- qttools-opensource-src-5.7.1/tests/auto/linguist/lupdate/testdata/good/parseqrc/project.ts.result 1970-01-01 00:00:00.000000000 +0000 +++ qttools-opensource-src-5.9.1/tests/auto/linguist/lupdate/testdata/good/parseqrc/project.ts.result 2017-06-23 12:03:39.000000000 +0000 @@ -0,0 +1,25 @@ + + + + + QApplication + + + Hello world + + + + + main + + + From JavaScript file + + + + + From QML file in root + + + + diff -Nru qttools-opensource-src-5.7.1/tests/auto/linguist/lupdate/testdata/good/resources_cmdline/lupdatecmd qttools-opensource-src-5.9.1/tests/auto/linguist/lupdate/testdata/good/resources_cmdline/lupdatecmd --- qttools-opensource-src-5.7.1/tests/auto/linguist/lupdate/testdata/good/resources_cmdline/lupdatecmd 1970-01-01 00:00:00.000000000 +0000 +++ qttools-opensource-src-5.9.1/tests/auto/linguist/lupdate/testdata/good/resources_cmdline/lupdatecmd 2017-06-23 12:03:39.000000000 +0000 @@ -0,0 +1 @@ +lupdate project.qrc -ts project.ts diff -Nru qttools-opensource-src-5.7.1/tests/auto/linguist/lupdate/testdata/good/resources_cmdline/main.js qttools-opensource-src-5.9.1/tests/auto/linguist/lupdate/testdata/good/resources_cmdline/main.js --- qttools-opensource-src-5.7.1/tests/auto/linguist/lupdate/testdata/good/resources_cmdline/main.js 1970-01-01 00:00:00.000000000 +0000 +++ qttools-opensource-src-5.9.1/tests/auto/linguist/lupdate/testdata/good/resources_cmdline/main.js 2017-06-23 12:03:39.000000000 +0000 @@ -0,0 +1 @@ +qsTr("From JavaScript file"); diff -Nru qttools-opensource-src-5.7.1/tests/auto/linguist/lupdate/testdata/good/resources_cmdline/main.qml qttools-opensource-src-5.9.1/tests/auto/linguist/lupdate/testdata/good/resources_cmdline/main.qml --- qttools-opensource-src-5.7.1/tests/auto/linguist/lupdate/testdata/good/resources_cmdline/main.qml 1970-01-01 00:00:00.000000000 +0000 +++ qttools-opensource-src-5.9.1/tests/auto/linguist/lupdate/testdata/good/resources_cmdline/main.qml 2017-06-23 12:03:39.000000000 +0000 @@ -0,0 +1,35 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 1.0 + +QtObject { + function translate() { + qsTr("From QML file in root"); + } +} diff -Nru qttools-opensource-src-5.7.1/tests/auto/linguist/lupdate/testdata/good/resources_cmdline/project.qrc qttools-opensource-src-5.9.1/tests/auto/linguist/lupdate/testdata/good/resources_cmdline/project.qrc --- qttools-opensource-src-5.7.1/tests/auto/linguist/lupdate/testdata/good/resources_cmdline/project.qrc 1970-01-01 00:00:00.000000000 +0000 +++ qttools-opensource-src-5.9.1/tests/auto/linguist/lupdate/testdata/good/resources_cmdline/project.qrc 2017-06-23 12:03:39.000000000 +0000 @@ -0,0 +1,6 @@ + + + main.qml + main.js + + diff -Nru qttools-opensource-src-5.7.1/tests/auto/linguist/lupdate/testdata/good/resources_cmdline/project.ts.result qttools-opensource-src-5.9.1/tests/auto/linguist/lupdate/testdata/good/resources_cmdline/project.ts.result --- qttools-opensource-src-5.7.1/tests/auto/linguist/lupdate/testdata/good/resources_cmdline/project.ts.result 1970-01-01 00:00:00.000000000 +0000 +++ qttools-opensource-src-5.9.1/tests/auto/linguist/lupdate/testdata/good/resources_cmdline/project.ts.result 2017-06-23 12:03:39.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + main + + + From QML file in root + + + + + From JavaScript file + + + + diff -Nru qttools-opensource-src-5.7.1/tests/auto/linguist/lupdate/tst_lupdate.cpp qttools-opensource-src-5.9.1/tests/auto/linguist/lupdate/tst_lupdate.cpp --- qttools-opensource-src-5.7.1/tests/auto/linguist/lupdate/tst_lupdate.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/tests/auto/linguist/lupdate/tst_lupdate.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -283,7 +283,7 @@ QProcess proc; proc.setWorkingDirectory(workDir); proc.setProcessChannelMode(QProcess::MergedChannels); - const QString command = m_cmdLupdate + QLatin1Char(' ') + lupdatecmd; + const QString command = QLatin1Char('"') + m_cmdLupdate + QLatin1String("\" ") + lupdatecmd; proc.start(command, QIODevice::ReadWrite | QIODevice::Text); QVERIFY2(proc.waitForStarted(), qPrintable(command + QLatin1String(" :") + proc.errorString())); QVERIFY2(proc.waitForFinished(30000), qPrintable(command)); diff -Nru qttools-opensource-src-5.7.1/tests/auto/qhelpcontentmodel/qhelpcontentmodel.pro qttools-opensource-src-5.9.1/tests/auto/qhelpcontentmodel/qhelpcontentmodel.pro --- qttools-opensource-src-5.7.1/tests/auto/qhelpcontentmodel/qhelpcontentmodel.pro 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/tests/auto/qhelpcontentmodel/qhelpcontentmodel.pro 2017-06-23 12:03:39.000000000 +0000 @@ -3,19 +3,4 @@ QT += help testlib SOURCES += tst_qhelpcontentmodel.cpp -DEFINES += QT_USE_USING_NAMESPACE - -wince*: { - DEFINES += SRCDIR=\\\"./\\\" - QT += network - addFiles.files = $$PWD/data/*.* - addFiles.path = data - clucene.files = $$QT.clucene.libs/QtCLucene*.dll - - DEPLOYMENT += addFiles - DEPLOYMENT += clucene - - DEPLOYMENT_PLUGIN += qsqlite -} else { - DEFINES += SRCDIR=\\\"$$PWD\\\" -} +DEFINES += QT_USE_USING_NAMESPACE SRCDIR=\\\"$$PWD\\\" diff -Nru qttools-opensource-src-5.7.1/tests/auto/qhelpenginecore/qhelpenginecore.pro qttools-opensource-src-5.9.1/tests/auto/qhelpenginecore/qhelpenginecore.pro --- qttools-opensource-src-5.7.1/tests/auto/qhelpenginecore/qhelpenginecore.pro 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/tests/auto/qhelpenginecore/qhelpenginecore.pro 2017-06-23 12:03:39.000000000 +0000 @@ -4,19 +4,4 @@ QT += help sql testlib help -DEFINES += QT_USE_USING_NAMESPACE - -wince*: { - DEFINES += SRCDIR=\\\"./\\\" - QT += network - addFiles.files = $$PWD/data/*.* - addFiles.path = data - clucene.files = $$QT.clucene.libs/QtCLucene*.dll - - DEPLOYMENT += addFiles - DEPLOYMENT += clucene - - DEPLOYMENT_PLUGIN += qsqlite -} else { - DEFINES += SRCDIR=\\\"$$PWD\\\" -} +DEFINES += QT_USE_USING_NAMESPACE SRCDIR=\\\"$$PWD\\\" diff -Nru qttools-opensource-src-5.7.1/tests/auto/qtattributionsscanner/qtattributionsscanner.pro qttools-opensource-src-5.9.1/tests/auto/qtattributionsscanner/qtattributionsscanner.pro --- qttools-opensource-src-5.7.1/tests/auto/qtattributionsscanner/qtattributionsscanner.pro 1970-01-01 00:00:00.000000000 +0000 +++ qttools-opensource-src-5.9.1/tests/auto/qtattributionsscanner/qtattributionsscanner.pro 2017-06-23 12:03:39.000000000 +0000 @@ -0,0 +1,18 @@ +CONFIG += testcase +QT = core testlib + +DISTFILES += \ + testdata/good/minimal/qt_attribution.json \ + testdata/good/complete/qt_attribution.json \ + testdata/good/expected.json \ + testdata/good/expected.error \ + testdata/warnings/incomplete/qt_attribution.json \ + testdata/warnings/incomplete/expected.json \ + testdata/warnings/incomplete/expected.error \ + testdata/warnings/unknown/qt_attribution.json \ + testdata/warnings/unknown/expected.json \ + testdata/warnings/unknown/expected.error + +TARGET = tst_qtattributionsscanner + +SOURCES += tst_qtattributionsscanner.cpp diff -Nru qttools-opensource-src-5.7.1/tests/auto/qtattributionsscanner/testdata/good/complete/qt_attribution.json qttools-opensource-src-5.9.1/tests/auto/qtattributionsscanner/testdata/good/complete/qt_attribution.json --- qttools-opensource-src-5.7.1/tests/auto/qtattributionsscanner/testdata/good/complete/qt_attribution.json 1970-01-01 00:00:00.000000000 +0000 +++ qttools-opensource-src-5.9.1/tests/auto/qtattributionsscanner/testdata/good/complete/qt_attribution.json 2017-06-23 12:03:39.000000000 +0000 @@ -0,0 +1,21 @@ +{ + "Id": "complete", + "Name": "Complete", + "QDocModule": "qtest", + "QtParts": ["examples"], + + "License": "License", + "Copyright": "Copyright", + + "Description": "Multi +Line +Description", + "QtUsage": "Multi +Line +Usage", + "Homepage": "www.qt.io", + "Version": "1.0", + "DownloadLocation": "www.qt.io/1.0", + "LicenseId": "xxx", + "LicenseFile": "LICENSE" +} diff -Nru qttools-opensource-src-5.7.1/tests/auto/qtattributionsscanner/testdata/good/expected.json qttools-opensource-src-5.9.1/tests/auto/qtattributionsscanner/testdata/good/expected.json --- qttools-opensource-src-5.7.1/tests/auto/qtattributionsscanner/testdata/good/expected.json 1970-01-01 00:00:00.000000000 +0000 +++ qttools-opensource-src-5.9.1/tests/auto/qtattributionsscanner/testdata/good/expected.json 2017-06-23 12:03:39.000000000 +0000 @@ -0,0 +1,38 @@ +[ + { + "Copyright": "Copyright", + "Description": "Multi\nLine\nDescription", + "Homepage": "www.qt.io", + "Id": "complete", + "License": "License", + "LicenseFile": "%{PWD}/complete/LICENSE", + "LicenseId": "xxx", + "Name": "Complete", + "Path": "%{PWD}/complete", + "Files": "", + "QDocModule": "qtest", + "QtParts": [ "examples" ], + "QtUsage": "Multi\nLine\nUsage", + "Version": "1.0", + "DownloadLocation": "www.qt.io/1.0" + }, + { + "Copyright": "Copyright", + "Description": "", + "Homepage": "", + "Id": "minimal", + "License": "License", + "LicenseFile": "", + "LicenseId": "", + "Name": "Minimal", + "Path": "%{PWD}/minimal", + "Files": "", + "QDocModule": "qtest", + "QtParts": [ + "libs" + ], + "QtUsage": "Usage", + "Version": "", + "DownloadLocation": "" + } +] diff -Nru qttools-opensource-src-5.7.1/tests/auto/qtattributionsscanner/testdata/good/minimal/qt_attribution.json qttools-opensource-src-5.9.1/tests/auto/qtattributionsscanner/testdata/good/minimal/qt_attribution.json --- qttools-opensource-src-5.7.1/tests/auto/qtattributionsscanner/testdata/good/minimal/qt_attribution.json 1970-01-01 00:00:00.000000000 +0000 +++ qttools-opensource-src-5.9.1/tests/auto/qtattributionsscanner/testdata/good/minimal/qt_attribution.json 2017-06-23 12:03:39.000000000 +0000 @@ -0,0 +1,9 @@ +{ + "Id": "minimal", + "Name": "Minimal", + + "QDocModule": "qtest", + "QtUsage": "Usage", + "License": "License", + "Copyright": "Copyright" +} diff -Nru qttools-opensource-src-5.7.1/tests/auto/qtattributionsscanner/testdata/warnings/incomplete/expected.error qttools-opensource-src-5.9.1/tests/auto/qtattributionsscanner/testdata/warnings/incomplete/expected.error --- qttools-opensource-src-5.7.1/tests/auto/qtattributionsscanner/testdata/warnings/incomplete/expected.error 1970-01-01 00:00:00.000000000 +0000 +++ qttools-opensource-src-5.9.1/tests/auto/qtattributionsscanner/testdata/warnings/incomplete/expected.error 2017-06-23 12:03:39.000000000 +0000 @@ -0,0 +1,6 @@ +File %{PWD}/qt_attribution.json: Missing mandatory property 'Name'. +File %{PWD}/qt_attribution.json: Missing mandatory property 'Id'. +File %{PWD}/qt_attribution.json: Missing mandatory property 'QDocModule'. +File %{PWD}/qt_attribution.json: Missing mandatory property 'QtUsage'. +File %{PWD}/qt_attribution.json: Missing mandatory property 'License'. +File %{PWD}/qt_attribution.json: Missing mandatory property 'Copyright'. diff -Nru qttools-opensource-src-5.7.1/tests/auto/qtattributionsscanner/testdata/warnings/incomplete/expected.json qttools-opensource-src-5.9.1/tests/auto/qtattributionsscanner/testdata/warnings/incomplete/expected.json --- qttools-opensource-src-5.7.1/tests/auto/qtattributionsscanner/testdata/warnings/incomplete/expected.json 1970-01-01 00:00:00.000000000 +0000 +++ qttools-opensource-src-5.9.1/tests/auto/qtattributionsscanner/testdata/warnings/incomplete/expected.json 2017-06-23 12:03:39.000000000 +0000 @@ -0,0 +1,19 @@ +[ + { + "Copyright": "", + "Description": "", + "Homepage": "", + "Id": "", + "License": "", + "LicenseFile": "", + "LicenseId": "", + "Name": "", + "Path": "%{PWD}", + "Files": "", + "QDocModule": "", + "QtParts": [ "libs" ], + "QtUsage": "", + "Version": "", + "DownloadLocation": "" + } +] diff -Nru qttools-opensource-src-5.7.1/tests/auto/qtattributionsscanner/testdata/warnings/incomplete/qt_attribution.json qttools-opensource-src-5.9.1/tests/auto/qtattributionsscanner/testdata/warnings/incomplete/qt_attribution.json --- qttools-opensource-src-5.7.1/tests/auto/qtattributionsscanner/testdata/warnings/incomplete/qt_attribution.json 1970-01-01 00:00:00.000000000 +0000 +++ qttools-opensource-src-5.9.1/tests/auto/qtattributionsscanner/testdata/warnings/incomplete/qt_attribution.json 2017-06-23 12:03:39.000000000 +0000 @@ -0,0 +1,2 @@ +{ +} diff -Nru qttools-opensource-src-5.7.1/tests/auto/qtattributionsscanner/testdata/warnings/unknown/expected.error qttools-opensource-src-5.9.1/tests/auto/qtattributionsscanner/testdata/warnings/unknown/expected.error --- qttools-opensource-src-5.7.1/tests/auto/qtattributionsscanner/testdata/warnings/unknown/expected.error 1970-01-01 00:00:00.000000000 +0000 +++ qttools-opensource-src-5.9.1/tests/auto/qtattributionsscanner/testdata/warnings/unknown/expected.error 2017-06-23 12:03:39.000000000 +0000 @@ -0,0 +1 @@ +File %{PWD}/qt_attribution.json: Unknown key Unknown. diff -Nru qttools-opensource-src-5.7.1/tests/auto/qtattributionsscanner/testdata/warnings/unknown/expected.json qttools-opensource-src-5.9.1/tests/auto/qtattributionsscanner/testdata/warnings/unknown/expected.json --- qttools-opensource-src-5.7.1/tests/auto/qtattributionsscanner/testdata/warnings/unknown/expected.json 1970-01-01 00:00:00.000000000 +0000 +++ qttools-opensource-src-5.9.1/tests/auto/qtattributionsscanner/testdata/warnings/unknown/expected.json 2017-06-23 12:03:39.000000000 +0000 @@ -0,0 +1,19 @@ +[ + { + "Copyright": "Copyright", + "Description": "", + "Homepage": "", + "Id": "unknown", + "License": "License", + "LicenseFile": "", + "LicenseId": "", + "Name": "Unknown", + "Path": "%{PWD}", + "Files": "", + "QDocModule": "qtest", + "QtParts": [ "libs" ], + "QtUsage": "Usage", + "Version": "", + "DownloadLocation": "" + } +] diff -Nru qttools-opensource-src-5.7.1/tests/auto/qtattributionsscanner/testdata/warnings/unknown/qt_attribution.json qttools-opensource-src-5.9.1/tests/auto/qtattributionsscanner/testdata/warnings/unknown/qt_attribution.json --- qttools-opensource-src-5.7.1/tests/auto/qtattributionsscanner/testdata/warnings/unknown/qt_attribution.json 1970-01-01 00:00:00.000000000 +0000 +++ qttools-opensource-src-5.9.1/tests/auto/qtattributionsscanner/testdata/warnings/unknown/qt_attribution.json 2017-06-23 12:03:39.000000000 +0000 @@ -0,0 +1,10 @@ +{ + "Id": "unknown", + "Name": "Unknown", + "QDocModule": "qtest", + + "QtUsage": "Usage", + "License": "License", + "Copyright": "Copyright", + "Unknown": "Unknown" +} diff -Nru qttools-opensource-src-5.7.1/tests/auto/qtattributionsscanner/tst_qtattributionsscanner.cpp qttools-opensource-src-5.9.1/tests/auto/qtattributionsscanner/tst_qtattributionsscanner.cpp --- qttools-opensource-src-5.7.1/tests/auto/qtattributionsscanner/tst_qtattributionsscanner.cpp 1970-01-01 00:00:00.000000000 +0000 +++ qttools-opensource-src-5.9.1/tests/auto/qtattributionsscanner/tst_qtattributionsscanner.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -0,0 +1,128 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Linguist of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include +#include +#include +#include +#include +#include +#include + +#include + +class tst_qtattributionsscanner : public QObject +{ + Q_OBJECT +public: + tst_qtattributionsscanner(); + +private slots: + void test_data(); + void test(); + +private: + QString m_cmd; + QString m_basePath; +}; + + +tst_qtattributionsscanner::tst_qtattributionsscanner() +{ + QString binPath = QLibraryInfo::location(QLibraryInfo::BinariesPath); + m_cmd = binPath + QLatin1String("/qtattributionsscanner"); + m_basePath = QFINDTESTDATA("testdata"); +} + + +void tst_qtattributionsscanner::test_data() +{ + QTest::addColumn("directory"); + QTest::newRow("good") << QStringLiteral("good"); + QTest::newRow("warnings (incomplete)") << QStringLiteral("warnings/incomplete"); + QTest::newRow("warnings (unknown attribute)") << QStringLiteral("warnings/unknown"); +} + +static void readExpectedFile(const QString &dir, const QString &fileName, QByteArray *content) +{ + QFile file(QDir(dir).absoluteFilePath(fileName)); + QVERIFY2(file.open(QIODevice::ReadOnly | QIODevice::Text), "Could not open " + file.fileName().toLocal8Bit()); + *content = file.readAll(); + content->replace("%{PWD}", dir.toUtf8()); +} + +void tst_qtattributionsscanner::test() +{ + QFETCH(QString, directory); + + QString dir = QDir(m_basePath).absoluteFilePath(directory); + + QProcess proc; + QString command = m_cmd + " " + dir + " --output-format json"; + proc.start(command, QIODevice::ReadWrite | QIODevice::Text); + + QVERIFY2(proc.waitForStarted(), qPrintable(command + QLatin1String(" :") + proc.errorString())); + QVERIFY2(proc.waitForFinished(30000), qPrintable(command)); + + QVERIFY2(proc.exitStatus() == QProcess::NormalExit, + "\"qtattributionsscanner " + m_cmd.toLatin1() + "\" crashed"); + QVERIFY2(!proc.exitCode(), + "\"qtattributionsscanner " + m_cmd.toLatin1() + "\" exited with code " + + QByteArray::number(proc.exitCode())); + + { // compare error output + QByteArray stdErr = proc.readAllStandardError(); + stdErr.replace(QDir::separator(), "/"); + + QByteArray expectedErrorOutput; + readExpectedFile(dir, "expected.error", &expectedErrorOutput); + + QCOMPARE(stdErr, expectedErrorOutput); + } + + { // compare json output + QByteArray stdOut = proc.readAllStandardOutput(); + + QJsonParseError jsonError; + QJsonDocument actualJson = QJsonDocument::fromJson(stdOut, &jsonError); + QVERIFY2(!actualJson.isNull(), "Invalid output: " + jsonError.errorString().toLatin1()); + + QByteArray expectedOutput; + readExpectedFile(dir, "expected.json", &expectedOutput); + QJsonDocument expectedJson = QJsonDocument::fromJson(expectedOutput); + + if (!QTest::qCompare(actualJson, expectedJson, "actualJson", "expectedJson", __FILE__, __LINE__)) { + qWarning() << "Actual (actualJson) :" << actualJson; + qWarning() << "Expected (expectedJson):" << expectedJson; + return; + } + } +} + +QTEST_MAIN(tst_qtattributionsscanner) +#include "tst_qtattributionsscanner.moc" diff -Nru qttools-opensource-src-5.7.1/tests/auto/windeployqt/tst_windeployqt.cpp qttools-opensource-src-5.9.1/tests/auto/windeployqt/tst_windeployqt.cpp --- qttools-opensource-src-5.7.1/tests/auto/windeployqt/tst_windeployqt.cpp 2016-11-03 08:31:16.000000000 +0000 +++ qttools-opensource-src-5.9.1/tests/auto/windeployqt/tst_windeployqt.cpp 2017-06-23 12:03:39.000000000 +0000 @@ -38,11 +38,18 @@ #include #ifndef QT_NO_PROCESS -static const QString msgProcessError(const QProcess &process, const QString &what) +static const QString msgProcessError(const QProcess &process, const QString &what, + const QByteArray &stdOut = QByteArray(), + const QByteArray &stdErr = QByteArray()) { QString result; - QTextStream(&result) << what << ": \"" << process.program() << ' ' + QTextStream str(&result); + str << what << ": \"" << process.program() << ' ' << process.arguments().join(QLatin1Char(' ')) << "\": " << process.errorString(); + if (!stdOut.isEmpty()) + str << "\nStandard output:\n" << stdOut; + if (!stdErr.isEmpty()) + str << "\nStandard error:\n" << stdErr; return result; } @@ -52,7 +59,7 @@ const QString &workingDir = QString(), const QProcessEnvironment &env = QProcessEnvironment(), int timeOut = 5000, - QByteArray *stdOut = Q_NULLPTR, QByteArray *stdErr = Q_NULLPTR) + QByteArray *stdOutIn = nullptr, QByteArray *stdErrIn = nullptr) { QProcess process; if (!env.isEmpty()) @@ -73,16 +80,19 @@ process.kill(); return false; } - if (stdOut) - *stdOut = process.readAllStandardOutput(); - if (stdErr) - *stdErr= process.readAllStandardError(); + const QByteArray stdOut = process.readAllStandardOutput(); + const QByteArray stdErr = process.readAllStandardError(); + if (stdOutIn) + *stdOutIn = stdOut; + if (stdErrIn) + *stdErrIn = stdErr; if (process.exitStatus() != QProcess::NormalExit) { - *errorMessage = msgProcessError(process, "Crashed"); + *errorMessage = msgProcessError(process, "Crashed", stdOut, stdErr); return false; } if (process.exitCode() != QProcess::NormalExit) { - *errorMessage = msgProcessError(process, "Exit code " + QString::number(process.exitCode())); + *errorMessage = msgProcessError(process, "Exit code " + QString::number(process.exitCode()), + stdOut, stdErr); return false; } return true; @@ -156,7 +166,8 @@ const QChar pathSeparator(QLatin1Char(';')); // ### fixme: Qt 5.6: QDir::listSeparator() const QString origPath = env.value(pathKey); QString newPath; - foreach (const QString &pathElement, origPath.split(pathSeparator, QString::SkipEmptyParts)) { + const QStringList pathElements = origPath.split(pathSeparator, QString::SkipEmptyParts); + for (const QString &pathElement : pathElements) { if (pathElement.compare(qtBinDir, Qt::CaseInsensitive) && !pathElement.contains(QLatin1String("\\lib"), Qt::CaseInsensitive)) { if (!newPath.isEmpty()) diff -Nru qttools-opensource-src-5.7.1/tests/manual/manual.pro qttools-opensource-src-5.9.1/tests/manual/manual.pro --- qttools-opensource-src-5.7.1/tests/manual/manual.pro 1970-01-01 00:00:00.000000000 +0000 +++ qttools-opensource-src-5.9.1/tests/manual/manual.pro 2017-06-23 12:03:39.000000000 +0000 @@ -0,0 +1,3 @@ +TEMPLATE = subdirs +SUBDIRS += \ + qtattributionsscanner diff -Nru qttools-opensource-src-5.7.1/tests/manual/qtattributionsscanner/data/LICENSE qttools-opensource-src-5.9.1/tests/manual/qtattributionsscanner/data/LICENSE --- qttools-opensource-src-5.7.1/tests/manual/qtattributionsscanner/data/LICENSE 1970-01-01 00:00:00.000000000 +0000 +++ qttools-opensource-src-5.9.1/tests/manual/qtattributionsscanner/data/LICENSE 2017-06-23 12:03:39.000000000 +0000 @@ -0,0 +1,686 @@ + GNU GENERAL PUBLIC LICENSE + + The Qt Toolkit is Copyright (C) 2016 The Qt Company Ltd. + Contact: http://www.qt.io/licensing/ + + You may use, distribute and copy the Qt GUI Toolkit under the terms of + GNU Lesser General Public License version 3. That license references + the General Public License version 3, that is displayed below. Other + portions of the Qt Toolkit may be licensed directly under this license. + +------------------------------------------------------------------------- + + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + 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 3 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 . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. diff -Nru qttools-opensource-src-5.7.1/tests/manual/qtattributionsscanner/data/qt_attribution.json qttools-opensource-src-5.9.1/tests/manual/qtattributionsscanner/data/qt_attribution.json --- qttools-opensource-src-5.7.1/tests/manual/qtattributionsscanner/data/qt_attribution.json 1970-01-01 00:00:00.000000000 +0000 +++ qttools-opensource-src-5.9.1/tests/manual/qtattributionsscanner/data/qt_attribution.json 2017-06-23 12:03:39.000000000 +0000 @@ -0,0 +1,11 @@ +{ + "Id": "exampleattribution", + "Name": "Example Attribution", + "QDocModule": "somemodule", + "Description": "Does nothing specific.", + "QtUsage": "Optionally compiled into Some Qt Module. To avoid, pass \c -no-somemodule or \c -system-somemodule to \c configure.", + "License": "GNU General Public License v3.0 only", + "LicenseId": "GPL-3.0", + "LicenseFile": "LICENSE", + "Copyright": "Copyright (C) 2016 The Qt Company Ltd." +} diff -Nru qttools-opensource-src-5.7.1/tests/manual/qtattributionsscanner/overview.qdoc qttools-opensource-src-5.9.1/tests/manual/qtattributionsscanner/overview.qdoc --- qttools-opensource-src-5.7.1/tests/manual/qtattributionsscanner/overview.qdoc 1970-01-01 00:00:00.000000000 +0000 +++ qttools-opensource-src-5.9.1/tests/manual/qtattributionsscanner/overview.qdoc 2017-06-23 12:03:39.000000000 +0000 @@ -0,0 +1,13 @@ +/*! + \page attributions.html + \title Credits + + \generatelist{annotatedattributions} +*/ + +/*! + \module SomeModule + \title Some Module + + \generatelist{groupsbymodule attributions-somemodule} + */ diff -Nru qttools-opensource-src-5.7.1/tests/manual/qtattributionsscanner/qtattributionsscanner.pro qttools-opensource-src-5.9.1/tests/manual/qtattributionsscanner/qtattributionsscanner.pro --- qttools-opensource-src-5.7.1/tests/manual/qtattributionsscanner/qtattributionsscanner.pro 1970-01-01 00:00:00.000000000 +0000 +++ qttools-opensource-src-5.9.1/tests/manual/qtattributionsscanner/qtattributionsscanner.pro 2017-06-23 12:03:39.000000000 +0000 @@ -0,0 +1,14 @@ +TEMPLATE = aux + +DISTFILES += test.qdocconf overview.qdoc data/qt_attribution.json data/LICENSE + +run_qtattributionsscanner.commands = $$[QT_HOST_BINS]/qtattributionsscanner \ + --filter QDocModule=somemodule -o generated.qdoc $$PWD + +run_docs.commands = BUILDDIR=$$OUT_PWD $$[QT_HOST_BINS]/qdoc $$PWD/test.qdocconf + +check.depends = run_qtattributionsscanner run_docs + +QMAKE_EXTRA_TARGETS += run_qtattributionsscanner run_docs check + +QMAKE_CLEAN += generated.qdoc diff -Nru qttools-opensource-src-5.7.1/tests/manual/qtattributionsscanner/test.qdocconf qttools-opensource-src-5.9.1/tests/manual/qtattributionsscanner/test.qdocconf --- qttools-opensource-src-5.7.1/tests/manual/qtattributionsscanner/test.qdocconf 1970-01-01 00:00:00.000000000 +0000 +++ qttools-opensource-src-5.9.1/tests/manual/qtattributionsscanner/test.qdocconf 2017-06-23 12:03:39.000000000 +0000 @@ -0,0 +1,6 @@ +project = Test + +outputdir = $BUILDDIR/html + +sourcedirs = $BUILDDIR . +sources.fileextensions = *.qdoc