diff --git a/src/libs/cplusplus/CppDocument.cpp b/src/libs/cplusplus/CppDocument.cpp index 1f4621e97038dd4bce14d2737d42caf616e69982..06655b0960a6db86609f4a993609697b02fd7335 100644 --- a/src/libs/cplusplus/CppDocument.cpp +++ b/src/libs/cplusplus/CppDocument.cpp @@ -109,6 +109,7 @@ Document::Document(const QString &fileName) localFileName.size()); _translationUnit = new TranslationUnit(_control, fileId); _translationUnit->setQtMocRunEnabled(true); + _translationUnit->setObjCEnabled(true); (void) _control->switchTranslationUnit(_translationUnit); } diff --git a/src/libs/cplusplus/SimpleLexer.cpp b/src/libs/cplusplus/SimpleLexer.cpp index 62ecaa174e86ab8880f6e058afc84188ff530fac..5efa1f02d8c1f8eb292b5c03330e734ec9d7921c 100644 --- a/src/libs/cplusplus/SimpleLexer.cpp +++ b/src/libs/cplusplus/SimpleLexer.cpp @@ -59,7 +59,9 @@ SimpleLexer::SimpleLexer() _skipComments(false), _qtMocRunEnabled(true), _objCEnabled(false) -{ } +{ + setObjCEnabled(true); +} SimpleLexer::~SimpleLexer() { } diff --git a/src/libs/cplusplus/pp-engine.cpp b/src/libs/cplusplus/pp-engine.cpp index e7d3011a7677ff132f46378e1d99538a201614d1..974af656a6528807d389e5ed8b2745b328ad4d9b 100644 --- a/src/libs/cplusplus/pp-engine.cpp +++ b/src/libs/cplusplus/pp-engine.cpp @@ -727,6 +727,7 @@ void Preprocessor::processDirective(TokenIterator firstToken, TokenIterator last case PP_INCLUDE: case PP_INCLUDE_NEXT: + case PP_IMPORT: if (! skipping()) processInclude(d == PP_INCLUDE_NEXT, firstToken, lastToken); break; @@ -1069,6 +1070,8 @@ Preprocessor::PP_DIRECTIVE_TYPE Preprocessor::classifyDirective (const QByteArra case 6: if (__directive[0] == 'i' && __directive == "ifndef") return PP_IFNDEF; + else if (__directive[0] == 'i' && __directive == "import") + return PP_IMPORT; else if (__directive[0] == 'd' && __directive == "define") return PP_DEFINE; break; diff --git a/src/libs/cplusplus/pp-engine.h b/src/libs/cplusplus/pp-engine.h index 24e1ac13de0b2d9f21bcd41b0dc20ce7fdf9660e..033db4cb933a02c710d78f16c22f53474958aa88 100644 --- a/src/libs/cplusplus/pp-engine.h +++ b/src/libs/cplusplus/pp-engine.h @@ -150,6 +150,7 @@ namespace CPlusPlus { { PP_UNKNOWN_DIRECTIVE, PP_DEFINE, + PP_IMPORT, PP_INCLUDE, PP_INCLUDE_NEXT, PP_ELIF, diff --git a/src/plugins/bineditor/BinEditor.mimetypes.xml b/src/plugins/bineditor/BinEditor.mimetypes.xml index 4fcd96036521bbb92d975cae60b38be0d04d3c15..7791d07203b8895f4a51b5a8ef9ea6d0eb2c86ce 100644 --- a/src/plugins/bineditor/BinEditor.mimetypes.xml +++ b/src/plugins/bineditor/BinEditor.mimetypes.xml @@ -2,38 +2,5 @@ <mime-info xmlns='http://www.freedesktop.org/standards/shared-mime-info'> <mime-type type="application/octet-stream"> <comment>unknown</comment> - <comment xml:lang="bg">ÐеизвеÑтен тип</comment> - <comment xml:lang="ca">desconegut</comment> - <comment xml:lang="cs">Neznámý</comment> - <comment xml:lang="cy">Anhysbys</comment> - <comment xml:lang="da">ukendt</comment> - <comment xml:lang="de">unbekannt</comment> - <comment xml:lang="el">αγνωστο</comment> - <comment xml:lang="eo">nekonata</comment> - <comment xml:lang="es">desconocido</comment> - <comment xml:lang="eu">ezezaguna</comment> - <comment xml:lang="fi">tuntematon</comment> - <comment xml:lang="fr">inconnu</comment> - <comment xml:lang="hu">ismeretlen</comment> - <comment xml:lang="it">Sconosciuto</comment> - <comment xml:lang="ja">䏿˜Ž</comment> - <comment xml:lang="ko">알 수 ì—†ìŒ</comment> - <comment xml:lang="lt">nežinoma</comment> - <comment xml:lang="ms">Entah</comment> - <comment xml:lang="nb">ukjent</comment> - <comment xml:lang="nl">onbekend</comment> - <comment xml:lang="nn">ukjend</comment> - <comment xml:lang="pl">nieznany typ</comment> - <comment xml:lang="pt">desconhecido</comment> - <comment xml:lang="pt_BR">Desconhecido</comment> - <comment xml:lang="ru">неизвеÑтный</comment> - <comment xml:lang="rw">itazwi</comment> - <comment xml:lang="sq">nuk njihet</comment> - <comment xml:lang="sr">непознато</comment> - <comment xml:lang="sv">okänd</comment> - <comment xml:lang="uk">невідомо</comment> - <comment xml:lang="vi">không rõ</comment> - <comment xml:lang="zh_CN">未知</comment> - <comment xml:lang="zh_TW">䏿˜Ž</comment> </mime-type> </mime-info> diff --git a/src/plugins/cppeditor/CppEditor.mimetypes.xml b/src/plugins/cppeditor/CppEditor.mimetypes.xml index 0c58890e9b5d25d494bd5aef11f41a6b312ee70d..04046a28477cde5f329325942730e4e87cff2449 100644 --- a/src/plugins/cppeditor/CppEditor.mimetypes.xml +++ b/src/plugins/cppeditor/CppEditor.mimetypes.xml @@ -3,37 +3,6 @@ <mime-type type="text/x-csrc"> <sub-class-of type="text/plain"/> <comment>C Source file</comment> - <comment xml:lang="bg">Изходен код на C</comment> - <comment xml:lang="ca">codi font en C</comment> - <comment xml:lang="cs">Zdrojový kód v C</comment> - <comment xml:lang="cy">Ffynhonnell Rhaglen C</comment> - <comment xml:lang="da">C-kildekode</comment> - <comment xml:lang="de">C-Quelltext</comment> - <comment xml:lang="el">πηγαίος κώδικας C</comment> - <comment xml:lang="eo">C-fontkodo</comment> - <comment xml:lang="es">código fuente en C</comment> - <comment xml:lang="eu">C iturburu-kodea</comment> - <comment xml:lang="fi">C-lähdekoodi</comment> - <comment xml:lang="fr">code source C</comment> - <comment xml:lang="hu">C-forráskód</comment> - <comment xml:lang="it">Codice sorgente C</comment> - <comment xml:lang="ja">C ソースコード</comment> - <comment xml:lang="ko">C 소스 코드</comment> - <comment xml:lang="lt">C pradinis kodas</comment> - <comment xml:lang="ms">Kod sumber C</comment> - <comment xml:lang="nb">C-kildekode</comment> - <comment xml:lang="nl">C-broncode</comment> - <comment xml:lang="nn">C-kjeldekode</comment> - <comment xml:lang="pl">Kod źródÅ‚owy w C</comment> - <comment xml:lang="pt">código fonte C</comment> - <comment xml:lang="pt_BR">Código fonte C</comment> - <comment xml:lang="ru">программа на Ñзыке C</comment> - <comment xml:lang="sq">Kod burues C</comment> - <comment xml:lang="sr">C изворни ко̂д</comment> - <comment xml:lang="sv">C-källkod</comment> - <comment xml:lang="uk">Вихідний код на мові C</comment> - <comment xml:lang="zh_CN">C æºä»£ç </comment> - <comment xml:lang="zh_TW">C æºä»£ç¢¼</comment> <glob pattern="*.c"/> </mime-type> @@ -41,21 +10,6 @@ <mime-type type="text/x-chdr"> <sub-class-of type="text/x-csrc"/> <comment>C Header file</comment> - <comment xml:lang="bg">Заглавен файл на C</comment> - <comment xml:lang="cs">HlaviÄka v C</comment> - <comment xml:lang="de">C-Header</comment> - <comment xml:lang="es">cabecera de código fuente en C</comment> - <comment xml:lang="eu">C goiburua</comment> - <comment xml:lang="fi">C-otsake</comment> - <comment xml:lang="fr">en-tête C</comment> - <comment xml:lang="hu">C fejléc</comment> - <comment xml:lang="it">Header C</comment> - <comment xml:lang="ko">C í—¤ë”</comment> - <comment xml:lang="nb">C-kildekodeheader</comment> - <comment xml:lang="nn">C-hovud</comment> - <comment xml:lang="pl">Plik nagłówkowy w C</comment> - <comment xml:lang="sv">C-huvud</comment> - <comment xml:lang="uk">Файл заголовків на C</comment> <glob pattern="*.h"/> </mime-type> @@ -65,20 +19,6 @@ <sub-class-of type="text/x-chdr"/> <comment>C++ Header file</comment> <comment>C++ header</comment> - <comment xml:lang="bg">Заглавен файл на C++</comment> - <comment xml:lang="cs">HlaviÄka v C++</comment> - <comment xml:lang="de">C++-Header</comment> - <comment xml:lang="es">cabecera de código fuente en C++</comment> - <comment xml:lang="eu">C++ goiburua</comment> - <comment xml:lang="fi">C++-otsake</comment> - <comment xml:lang="fr">en-tête C++</comment> - <comment xml:lang="hu">C++ fejléc</comment> - <comment xml:lang="it">Header C++</comment> - <comment xml:lang="nb">C++-kildekodeheader</comment> - <comment xml:lang="nn">C++-hovud</comment> - <comment xml:lang="pl">Plik nagłówkowy w C++</comment> - <comment xml:lang="sv">C++-huvud</comment> - <comment xml:lang="uk">Файл заголовків на C++</comment> <glob pattern="*.h"/> <glob pattern="*.hh"/> <glob pattern="*.hxx"/> @@ -97,37 +37,6 @@ <comment>C++ Source file</comment> <sub-class-of type="text/x-csrc"/> <comment>C++ source code</comment> - <comment xml:lang="bg">Изходен код на C++</comment> - <comment xml:lang="ca">codi font en C++</comment> - <comment xml:lang="cs">Zdrojový kód v C++</comment> - <comment xml:lang="cy">Ffynhonnell Rhaglen C++</comment> - <comment xml:lang="da">C++-kildekode</comment> - <comment xml:lang="de">C++-Quelltext</comment> - <comment xml:lang="el">πηγαίος κώδικας C++</comment> - <comment xml:lang="eo">C++-fontkodo</comment> - <comment xml:lang="es">código fuente en C++</comment> - <comment xml:lang="eu">C++ iturburu-kodea</comment> - <comment xml:lang="fi">C++-lähdekoodi</comment> - <comment xml:lang="fr">code source C++</comment> - <comment xml:lang="hu">C++-forráskód</comment> - <comment xml:lang="it">Codice sorgente C++</comment> - <comment xml:lang="ja">C++ ソースコード</comment> - <comment xml:lang="ko">C++ 소스 코드</comment> - <comment xml:lang="lt">C++ pradinis kodas</comment> - <comment xml:lang="ms">Kod sumber C++</comment> - <comment xml:lang="nb">C++-kildekode</comment> - <comment xml:lang="nl">C++-broncode</comment> - <comment xml:lang="nn">C++-kjeldekode</comment> - <comment xml:lang="pl">Kod źródÅ‚owy w C++</comment> - <comment xml:lang="pt">código fonte C++</comment> - <comment xml:lang="pt_BR">Código fonte C++</comment> - <comment xml:lang="ru">программа на Ñзыке C++</comment> - <comment xml:lang="sq">Kod burues C++</comment> - <comment xml:lang="sr">C++ изворни ко̂д</comment> - <comment xml:lang="sv">C++-källkod</comment> - <comment xml:lang="uk">Вихідний код на мові C++</comment> - <comment xml:lang="zh_CN">C++ æºä»£ç </comment> - <comment xml:lang="zh_TW">C++ æºä»£ç¢¼</comment> <glob pattern="*.cpp"/> <glob pattern="*.cc"/> <glob pattern="*.cxx"/> @@ -135,4 +44,15 @@ <glob pattern="*.C"/> <glob pattern="*.inl"/> </mime-type> + + <mime-type type="text/x-objcsrc"> + <comment>Objective-C source code</comment> + <sub-class-of type="text/x-csrc"/> + <magic priority="30"> + <match value="#import" type="string" offset="0"/> + </magic> + <glob pattern="*.m"/> + <glob pattern="*.mm"/> + </mime-type> + </mime-info> diff --git a/src/plugins/cppeditor/cpphighlighter.cpp b/src/plugins/cppeditor/cpphighlighter.cpp index f7d12b0add73802f385266e0c3fd7cf5260d3ce0..511cb56c8b36786acaa25b9746c196476901e32a 100644 --- a/src/plugins/cppeditor/cpphighlighter.cpp +++ b/src/plugins/cppeditor/cpphighlighter.cpp @@ -230,6 +230,8 @@ bool CppHighlighter::isPPKeyword(const QStringRef &text) const case 6: if (text.at(0) == 'i' && text == QLatin1String("ifndef")) return true; + if (text.at(0) == 'i' && text == QLatin1String("import")) + return true; else if (text.at(0) == 'd' && text == QLatin1String("define")) return true; else if (text.at(0) == 'p' && text == QLatin1String("pragma")) diff --git a/src/plugins/cpptools/completionsettingspage.ui b/src/plugins/cpptools/completionsettingspage.ui index c71a2abc821b731ab9bcb96c5421c70eae07c117..a044376bc74ed7034b3bbfdf94492c1fd905f9b8 100644 --- a/src/plugins/cpptools/completionsettingspage.ui +++ b/src/plugins/cpptools/completionsettingspage.ui @@ -17,11 +17,14 @@ <item> <widget class="QGroupBox" name="groupBox"> <property name="title"> - <string>Completion Settings</string> + <string>Code Completion</string> </property> <layout class="QVBoxLayout" name="verticalLayout_2"> <item> <widget class="QCheckBox" name="caseSensitive"> + <property name="toolTip"> + <string>Do a case-sensitive match for completion items.</string> + </property> <property name="text"> <string>&Case-sensitive completion</string> </property> @@ -32,6 +35,9 @@ </item> <item> <widget class="QCheckBox" name="autoInsertBraces"> + <property name="toolTip"> + <string>Automatically insert (, ) and ; when appropriate.</string> + </property> <property name="text"> <string>&Automatically insert braces</string> </property> @@ -42,6 +48,9 @@ </item> <item> <widget class="QCheckBox" name="partiallyComplete"> + <property name="toolTip"> + <string>Insert the common prefix of available completion items.</string> + </property> <property name="text"> <string>Autocomplete common &prefix</string> </property> diff --git a/src/plugins/designer/Designer.mimetypes.xml b/src/plugins/designer/Designer.mimetypes.xml index f093afb0e1d314346a147a76fae652618ab967b5..a593f240d12ddbb179778f05a8fcc7bf938c5a1e 100644 --- a/src/plugins/designer/Designer.mimetypes.xml +++ b/src/plugins/designer/Designer.mimetypes.xml @@ -4,34 +4,5 @@ <sub-class-of type="application/xml"/> <comment>Qt Designer file</comment> <glob pattern="*.ui"/> - <comment xml:lang="bg">Файл, формат Qt Designer</comment> - <comment xml:lang="ca">fitxer de Qt Designer</comment> - <comment xml:lang="cs">Soubor Qt Designeru</comment> - <comment xml:lang="cy">Ffeil Qt Designer</comment> - <comment xml:lang="da">Qt Designer-fil</comment> - <comment xml:lang="de">QT Designer-Datei</comment> - <comment xml:lang="el">αÏχείο Qt Designer</comment> - <comment xml:lang="eo">dosiero de Qt Designer</comment> - <comment xml:lang="es">fichero de Qt Designer</comment> - <comment xml:lang="eu">Qt Designer Fitxategia</comment> - <comment xml:lang="fi">Qt Designer -tiedosto</comment> - <comment xml:lang="fr">fichier Qt Designer</comment> - <comment xml:lang="hu">Qt Designer-fájl</comment> - <comment xml:lang="it">File Qt Designer</comment> - <comment xml:lang="ja">Qt Designer ファイル</comment> - <comment xml:lang="ko">Qt ë””ìžì´ë„ˆ 파ì¼</comment> - <comment xml:lang="lt">Qt Designer rinkmena</comment> - <comment xml:lang="ms">Fail Qt Designer</comment> - <comment xml:lang="nb">Qt Designer-fil</comment> - <comment xml:lang="nl">Qt Designer-bestand</comment> - <comment xml:lang="nn">Qt Designer-fil</comment> - <comment xml:lang="pl">Plik Qt Designera</comment> - <comment xml:lang="pt">ficheiro do Qt Designer</comment> - <comment xml:lang="pt_BR">Arquivo do Qt Designer</comment> - <comment xml:lang="ru">файл Qt Designer</comment> - <comment xml:lang="sq">File Qt Designer</comment> - <comment xml:lang="sr">Qt Designer датотека</comment> - <comment xml:lang="sv">Qt Designer-fil</comment> - <comment xml:lang="uk">Файл програми Qt-дизайнер</comment> </mime-type> </mime-info> diff --git a/src/plugins/qtscripteditor/QtScriptEditor.mimetypes.xml b/src/plugins/qtscripteditor/QtScriptEditor.mimetypes.xml index 45f6c0b00b872ab0bb8cf00e72e46dc8d1c7d976..cd60086773561a6dfdd16d4f16c6e24d5ebdfc24 100644 --- a/src/plugins/qtscripteditor/QtScriptEditor.mimetypes.xml +++ b/src/plugins/qtscripteditor/QtScriptEditor.mimetypes.xml @@ -5,37 +5,6 @@ <alias type="text/javascript"/> <sub-class-of type="text/plain"/> <comment>Qt Script file</comment> - <comment xml:lang="bg">Програма на JavaScript</comment> - <comment xml:lang="ca">programa JavaScript</comment> - <comment xml:lang="cs">Program v JavaScriptu</comment> - <comment xml:lang="da">JavaScript-program</comment> - <comment xml:lang="de">JavaScript-Programm</comment> - <comment xml:lang="el">Ï€ÏόγÏαμμα JavaScript</comment> - <comment xml:lang="eo">JavaScript-programo</comment> - <comment xml:lang="es">programa en JavaScript</comment> - <comment xml:lang="eu">JavaScript programa</comment> - <comment xml:lang="fi">JavaScript-ohjelma</comment> - <comment xml:lang="fr">programme JavaScript</comment> - <comment xml:lang="hu">JavaScript-program</comment> - <comment xml:lang="it">Programma JavaScript</comment> - <comment xml:lang="ja">JavaScript プãƒã‚°ãƒ©ãƒ </comment> - <comment xml:lang="ko">ìžë°”스í¬ë¦½íЏ 프로그램</comment> - <comment xml:lang="lt">JavaScript programa</comment> - <comment xml:lang="ms">Program JavaScript</comment> - <comment xml:lang="nb">JavaScript-program</comment> - <comment xml:lang="nl">JavaScript-programma</comment> - <comment xml:lang="nn">JavaScript-program</comment> - <comment xml:lang="pl">Pogram JavaScript</comment> - <comment xml:lang="pt">programa JavaScript</comment> - <comment xml:lang="pt_BR">Programa JavaScript</comment> - <comment xml:lang="ru">программа JavaScript</comment> - <comment xml:lang="sq">program JavaScript</comment> - <comment xml:lang="sr">ЈаваÑкрипт програм</comment> - <comment xml:lang="sv">JavaScript-program</comment> - <comment xml:lang="uk">Програма на мові JavaScript</comment> - <comment xml:lang="vi">Chương trình JavaScript</comment> - <comment xml:lang="zh_CN">JavaScript 程åº</comment> - <comment xml:lang="zh_TW">JavaScript 程å¼</comment> <glob pattern="*.js"/> </mime-type> </mime-info> diff --git a/src/plugins/texteditor/TextEditor.mimetypes.xml b/src/plugins/texteditor/TextEditor.mimetypes.xml index e78754da68dac33a20d74717244b55ce94fb782f..913b9fe0ebaf6e18b99c60e040059a9d607e7635 100644 --- a/src/plugins/texteditor/TextEditor.mimetypes.xml +++ b/src/plugins/texteditor/TextEditor.mimetypes.xml @@ -3,36 +3,6 @@ <mime-type type="text/plain"> <comment>Plain text document</comment> <sub-class-of type="application/octet-stream"/> - <comment xml:lang="bg">Документ Ñ Ð½ÐµÑ„Ð¾Ñ€Ð¼Ð°Ñ‚Ð¸Ñ€Ð°Ð½ текÑÑ‚</comment> - <comment xml:lang="ca">document de text pla</comment> - <comment xml:lang="cs">Prostý textový dokument</comment> - <comment xml:lang="da">ren tekst-dokument</comment> - <comment xml:lang="de">einfaches Textdokument</comment> - <comment xml:lang="el">ÎγγÏαφο Î±Ï€Î»Î¿Ï ÎºÎµÎ¹Î¼Îνου</comment> - <comment xml:lang="eo">plata teksta dokumento</comment> - <comment xml:lang="es">documento de texto sencillo</comment> - <comment xml:lang="eu">testu soileko dokumentua</comment> - <comment xml:lang="fi">perustekstiasiakirja</comment> - <comment xml:lang="fr">document plein texte</comment> - <comment xml:lang="hu">egyszerű szöveg</comment> - <comment xml:lang="it">Documento in testo semplice</comment> - <comment xml:lang="ja">平文テã‚ストドã‚ュメント</comment> - <comment xml:lang="ko">보통 text 문서</comment> - <comment xml:lang="lt">paprastas tekstinis dokumentas</comment> - <comment xml:lang="ms">Dokumen teks jernih</comment> - <comment xml:lang="nb">vanlig tekstdokument</comment> - <comment xml:lang="nl">platte tekst document</comment> - <comment xml:lang="nn">vanleg tekstdokument</comment> - <comment xml:lang="pl">zwykÅ‚y dokument tekstowy</comment> - <comment xml:lang="pt">documento em texto simples</comment> - <comment xml:lang="pt_BR">Documento somente texto</comment> - <comment xml:lang="sq">dokument teksti i thjeshtë</comment> - <comment xml:lang="sr">обичан текÑтуални документ</comment> - <comment xml:lang="sv">vanligt textdokument</comment> - <comment xml:lang="uk">звичайний текÑтовий документ</comment> - <comment xml:lang="vi">thư nháºp thô (văn bản không có kiểu dáng)</comment> - <comment xml:lang="zh_CN">纯文本文档</comment> - <comment xml:lang="zh_TW">普通文本檔</comment> <glob pattern="*.txt"/> </mime-type> <mime-type type="application/xml"> diff --git a/src/plugins/texteditor/behaviorsettingspage.ui b/src/plugins/texteditor/behaviorsettingspage.ui index e6414918c22fb63c92e40ed3c745a9038389dd4f..64febb27e5bcd1d43c660170f5ee9153fb206c10 100644 --- a/src/plugins/texteditor/behaviorsettingspage.ui +++ b/src/plugins/texteditor/behaviorsettingspage.ui @@ -6,27 +6,144 @@ <rect> <x>0</x> <y>0</y> - <width>484</width> - <height>398</height> + <width>428</width> + <height>384</height> </rect> </property> <property name="windowTitle"> <string>Form</string> </property> <layout class="QGridLayout" name="gridLayout_3"> - <item row="0" column="0"> - <widget class="QGroupBox" name="groupBoxTabAndIndentSettings"> + <item row="1" column="0"> + <widget class="QGroupBox" name="groupBoxStorageSettings"> <property name="title"> - <string>Tab/Indent Settings</string> + <string>Storage</string> </property> - <layout class="QGridLayout" name="gridLayout"> + <layout class="QVBoxLayout" name="verticalLayout_3"> + <item> + <widget class="QCheckBox" name="cleanWhitespace"> + <property name="toolTip"> + <string>Removes trailing whitespace on saving.</string> + </property> + <property name="text"> + <string>&Clean whitespace</string> + </property> + </widget> + </item> + <item> + <layout class="QHBoxLayout" name="horizontalLayout_2"> + <item> + <spacer name="horizontalSpacer_2"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="sizeType"> + <enum>QSizePolicy::Fixed</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>30</width> + <height>20</height> + </size> + </property> + </spacer> + </item> + <item> + <widget class="QCheckBox" name="inEntireDocument"> + <property name="enabled"> + <bool>false</bool> + </property> + <property name="toolTip"> + <string>Clean whitespace in entire document instead of only for changed parts.</string> + </property> + <property name="text"> + <string>In entire &document</string> + </property> + </widget> + </item> + </layout> + </item> + <item> + <layout class="QHBoxLayout" name="cleanIndentationLayout"> + <item> + <spacer name="cleanIndentationSpacer"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="sizeType"> + <enum>QSizePolicy::Fixed</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>30</width> + <height>20</height> + </size> + </property> + </spacer> + </item> + <item> + <widget class="QCheckBox" name="cleanIndentation"> + <property name="enabled"> + <bool>false</bool> + </property> + <property name="toolTip"> + <string>Correct leading whitespace according to tab settings.</string> + </property> + <property name="text"> + <string>Clean indentation</string> + </property> + </widget> + </item> + </layout> + </item> + <item> + <widget class="QCheckBox" name="addFinalNewLine"> + <property name="text"> + <string>&Ensure newline at end of file</string> + </property> + </widget> + </item> + </layout> + </widget> + </item> + <item row="2" column="0"> + <widget class="QGroupBox" name="groupBoxInteractionSettings"> + <property name="title"> + <string>Interaction</string> + </property> + <layout class="QGridLayout" name="gridLayout_2"> <item row="0" column="0"> - <widget class="QCheckBox" name="autoIndent"> + <widget class="QCheckBox" name="useVim"> + <property name="toolTip"> + <string/> + </property> <property name="text"> - <string>Enable automatic &indentation</string> + <string>Use "vi" style editing</string> </property> </widget> </item> + </layout> + </widget> + </item> + <item row="3" column="0"> + <spacer name="verticalSpacer"> + <property name="orientation"> + <enum>Qt::Vertical</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>20</width> + <height>8</height> + </size> + </property> + </spacer> + </item> + <item row="0" column="0"> + <widget class="QGroupBox" name="groupBoxTabAndIndentSettings"> + <property name="title"> + <string>Tabs and Indentation</string> + </property> + <layout class="QGridLayout" name="gridLayout"> <item row="0" column="2"> <layout class="QHBoxLayout" name="horizontalLayout_3"> <item> @@ -89,13 +206,6 @@ </property> </spacer> </item> - <item row="1" column="0"> - <widget class="QCheckBox" name="insertSpaces"> - <property name="text"> - <string>Insert &spaces instead of tabs</string> - </property> - </widget> - </item> <item row="1" column="2"> <layout class="QHBoxLayout" name="horizontalLayout_4"> <item> @@ -145,8 +255,11 @@ </item> </layout> </item> - <item row="2" column="0"> + <item row="3" column="0"> <widget class="QCheckBox" name="smartBackspace"> + <property name="toolTip"> + <string>Backspace will go back one indentation level instead of one space.</string> + </property> <property name="text"> <string>&Backspace follows indentation</string> </property> @@ -168,121 +281,23 @@ </property> </spacer> </item> - </layout> - </widget> - </item> - <item row="1" column="0"> - <widget class="QGroupBox" name="groupBoxStorageSettings"> - <property name="title"> - <string>Storage Settings</string> - </property> - <layout class="QVBoxLayout" name="verticalLayout_3"> - <item> - <widget class="QCheckBox" name="cleanWhitespace"> - <property name="text"> - <string>&Clean whitespace</string> - </property> - </widget> - </item> - <item> - <layout class="QHBoxLayout" name="horizontalLayout_2"> - <item> - <spacer name="horizontalSpacer_2"> - <property name="orientation"> - <enum>Qt::Horizontal</enum> - </property> - <property name="sizeType"> - <enum>QSizePolicy::Fixed</enum> - </property> - <property name="sizeHint" stdset="0"> - <size> - <width>30</width> - <height>20</height> - </size> - </property> - </spacer> - </item> - <item> - <widget class="QCheckBox" name="inEntireDocument"> - <property name="enabled"> - <bool>false</bool> - </property> - <property name="text"> - <string>In entire &document</string> - </property> - </widget> - </item> - </layout> - </item> - <item> - <layout class="QHBoxLayout" name="cleanIndentationLayout"> - <item> - <spacer name="cleanIndentationSpacer"> - <property name="orientation"> - <enum>Qt::Horizontal</enum> - </property> - <property name="sizeType"> - <enum>QSizePolicy::Fixed</enum> - </property> - <property name="sizeHint" stdset="0"> - <size> - <width>30</width> - <height>20</height> - </size> - </property> - </spacer> - </item> - <item> - <widget class="QCheckBox" name="cleanIndentation"> - <property name="enabled"> - <bool>false</bool> - </property> - <property name="text"> - <string>Clean indentation</string> - </property> - </widget> - </item> - </layout> - </item> - <item> - <widget class="QCheckBox" name="addFinalNewLine"> + <item row="0" column="0"> + <widget class="QCheckBox" name="insertSpaces"> <property name="text"> - <string>&Ensure newline at end of file</string> + <string>Insert &spaces instead of tabs</string> </property> </widget> </item> - </layout> - </widget> - </item> - <item row="2" column="0"> - <widget class="QGroupBox" name="groupBoxInteractionSettings"> - <property name="title"> - <string>Interaction Settings</string> - </property> - <layout class="QGridLayout" name="gridLayout_2"> - <item row="0" column="0"> - <widget class="QCheckBox" name="useVim"> + <item row="1" column="0"> + <widget class="QCheckBox" name="autoIndent"> <property name="text"> - <string>Use "vi" style editing</string> + <string>Enable automatic &indentation</string> </property> </widget> </item> </layout> </widget> </item> - <item row="3" column="0"> - <spacer name="verticalSpacer"> - <property name="orientation"> - <enum>Qt::Vertical</enum> - </property> - <property name="sizeHint" stdset="0"> - <size> - <width>20</width> - <height>8</height> - </size> - </property> - </spacer> - </item> </layout> </widget> <resources/> diff --git a/src/plugins/texteditor/displaysettingspage.ui b/src/plugins/texteditor/displaysettingspage.ui index 30fdf5cf93b7fbd16b32a236b70b85d19cf4a47c..59c8d676b26eb6ee411b41c486d7c8bb83cdda06 100644 --- a/src/plugins/texteditor/displaysettingspage.ui +++ b/src/plugins/texteditor/displaysettingspage.ui @@ -6,70 +6,58 @@ <rect> <x>0</x> <y>0</y> - <width>514</width> - <height>194</height> + <width>381</width> + <height>279</height> </rect> </property> <property name="windowTitle"> <string>Form</string> </property> <layout class="QGridLayout" name="gridLayout_3"> - <item row="0" column="0"> - <widget class="QGroupBox" name="groupBoxDisplaySettings"> + <item row="2" column="0"> + <spacer name="verticalSpacer"> + <property name="orientation"> + <enum>Qt::Vertical</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>20</width> + <height>8</height> + </size> + </property> + </spacer> + </item> + <item row="1" column="0"> + <widget class="QGroupBox" name="groupBox"> <property name="title"> - <string>Display Settings</string> + <string>Display</string> </property> - <layout class="QGridLayout"> - <item row="0" column="1"> - <layout class="QHBoxLayout" name="horizontalLayout"> - <item> - <widget class="QCheckBox" name="showWrapColumn"> - <property name="text"> - <string>Display right &margin at column</string> - </property> - </widget> - </item> - <item> - <widget class="QSpinBox" name="wrapColumn"> - <property name="enabled"> - <bool>false</bool> - </property> - <property name="maximum"> - <number>999</number> - </property> - </widget> - </item> - </layout> - </item> + <layout class="QGridLayout" name="gridLayout_2"> <item row="0" column="0"> - <widget class="QCheckBox" name="enableTextWrapping"> - <property name="text"> - <string>Enable text &wrapping</string> - </property> - </widget> - </item> - <item row="3" column="0"> <widget class="QCheckBox" name="displayLineNumbers"> <property name="text"> <string>Display line &numbers</string> </property> </widget> </item> - <item row="3" column="1"> - <widget class="QCheckBox" name="visualizeWhitespace"> + <item row="1" column="0"> + <widget class="QCheckBox" name="displayFoldingMarkers"> <property name="text"> - <string>&Visualize whitespace</string> + <string>Display &folding markers</string> </property> </widget> </item> - <item row="4" column="0"> - <widget class="QCheckBox" name="displayFoldingMarkers"> + <item row="2" column="0"> + <widget class="QCheckBox" name="visualizeWhitespace"> + <property name="toolTip"> + <string>Show tabs and spaces.</string> + </property> <property name="text"> - <string>Display &folding markers</string> + <string>&Visualize whitespace</string> </property> </widget> </item> - <item row="4" column="1"> + <item row="3" column="0"> <widget class="QCheckBox" name="highlightCurrentLine"> <property name="text"> <string>Highlight current &line</string> @@ -79,18 +67,55 @@ </layout> </widget> </item> - <item row="1" column="0"> - <spacer name="verticalSpacer"> - <property name="orientation"> - <enum>Qt::Vertical</enum> - </property> - <property name="sizeHint" stdset="0"> - <size> - <width>20</width> - <height>8</height> - </size> + <item row="0" column="0"> + <widget class="QGroupBox" name="groupBoxDisplaySettings"> + <property name="title"> + <string>Text Wrapping</string> </property> - </spacer> + <layout class="QGridLayout" name="gridLayout"> + <item row="0" column="0"> + <widget class="QCheckBox" name="enableTextWrapping"> + <property name="text"> + <string>Enable text &wrapping</string> + </property> + </widget> + </item> + <item row="1" column="0"> + <layout class="QHBoxLayout" name="horizontalLayout"> + <item> + <widget class="QCheckBox" name="showWrapColumn"> + <property name="text"> + <string>Display right &margin at column:</string> + </property> + </widget> + </item> + <item> + <widget class="QSpinBox" name="wrapColumn"> + <property name="enabled"> + <bool>false</bool> + </property> + <property name="maximum"> + <number>999</number> + </property> + </widget> + </item> + <item> + <spacer name="horizontalSpacer"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>40</width> + <height>20</height> + </size> + </property> + </spacer> + </item> + </layout> + </item> + </layout> + </widget> </item> </layout> </widget> diff --git a/src/plugins/texteditor/fontsettingspage.ui b/src/plugins/texteditor/fontsettingspage.ui index 770d5e2935c1002be5b5063ee33714cebd4ded73..8aafb751b2fe8596a2f1dc5629a17d1a6003576a 100644 --- a/src/plugins/texteditor/fontsettingspage.ui +++ b/src/plugins/texteditor/fontsettingspage.ui @@ -23,7 +23,7 @@ <item> <widget class="QGroupBox" name="groupBox"> <property name="title"> - <string>General Font Settings</string> + <string>Font</string> </property> <layout class="QHBoxLayout"> <property name="spacing"> @@ -119,7 +119,7 @@ </sizepolicy> </property> <property name="title"> - <string>Item Specific Settings</string> + <string>Color Scheme</string> </property> <layout class="QHBoxLayout"> <property name="spacing"> diff --git a/src/plugins/vcsbase/VCSBase.mimetypes.xml b/src/plugins/vcsbase/VCSBase.mimetypes.xml index 1c970521748c6b42a0d8816a744a3e60dd3fd2e4..b5821a75a6105b4ca7b90e80cb4f315ca16dfa35 100644 --- a/src/plugins/vcsbase/VCSBase.mimetypes.xml +++ b/src/plugins/vcsbase/VCSBase.mimetypes.xml @@ -3,37 +3,6 @@ <mime-type type="text/x-patch"> <sub-class-of type="text/plain"/> <comment>Differences between files</comment> - <glob pattern="*.diff"/> <comment xml:lang="bg">Разлики между файлове</comment> - <comment xml:lang="ca">diferències entre fitxers</comment> - <comment xml:lang="cs">RozdÃly mezi soubory</comment> - <comment xml:lang="da">forskel mellem filer</comment> - <comment xml:lang="de">Unterschied zwischen Dateien</comment> - <comment xml:lang="el">διαφοÏÎÏ‚ Î¼ÎµÏ„Î±Î¾Ï Î±Ïχείων</comment> - <comment xml:lang="eo">diferencoj inter dosieroj</comment> - <comment xml:lang="es">diferencias entre ficheros</comment> - <comment xml:lang="eu">fitxategien arteko ezberdintasunak</comment> - <comment xml:lang="fi">tiedostojen väliset erot</comment> - <comment xml:lang="fr">différences entre fichiers</comment> - <comment xml:lang="hu">diff-különbségfájl</comment> - <comment xml:lang="it">Differenze tra file</comment> - <comment xml:lang="ja">ファイル間差分</comment> - <comment xml:lang="ko">파ì¼ì‚¬ì´ì˜ ë°”ë€ì </comment> - <comment xml:lang="lt">skirtumai tarp rinkmenų</comment> - <comment xml:lang="ms">Perbezaan antara fail</comment> - <comment xml:lang="nb">forskjeller mellom filer</comment> - <comment xml:lang="nl">verschillen tussen bestanden</comment> - <comment xml:lang="nn">skilnader mellom filer</comment> - <comment xml:lang="pl">różnica pomiÄ™dzy plikami</comment> - <comment xml:lang="pt">diferenças entre ficheiros</comment> - <comment xml:lang="pt_BR">Diferenças entre arquivos</comment> - <comment xml:lang="ru">Ñ€Ð°Ð·Ð»Ð¸Ñ‡Ð¸Ñ Ð¼ÐµÐ¶Ð´Ñƒ файлами</comment> - <comment xml:lang="sq">diferenca midis files</comment> - <comment xml:lang="sr">разлике међу датотекама</comment> - <comment xml:lang="sv">skillnader mellan filer</comment> - <comment xml:lang="uk">Ñ€Ñ–Ð·Ð½Ð¸Ñ†Ñ Ð¼Ñ–Ð¶ файлами</comment> - <comment xml:lang="vi">khác biệt giữa nhiá»u táºp tin</comment> - <comment xml:lang="zh_CN">文件的区别</comment> - <comment xml:lang="zh_TW">檔案內容差異</comment> <glob pattern="*.patch"/> </mime-type> </mime-info> diff --git a/src/shared/cplusplus/AST.cpp b/src/shared/cplusplus/AST.cpp index 3d710db3669add45c8fafe9f0bcbf58288f2a0b2..d0ac090099d1195dba22fccac722e2b63789cb24 100644 --- a/src/shared/cplusplus/AST.cpp +++ b/src/shared/cplusplus/AST.cpp @@ -611,8 +611,7 @@ AsmDefinitionAST *AsmDefinitionAST::clone(MemoryPool *pool) const { AsmDefinitionAST *ast = new (pool) AsmDefinitionAST; ast->asm_token = asm_token; - if (cv_qualifier_seq) - ast->cv_qualifier_seq = cv_qualifier_seq->clone(pool); + ast->volatile_token = volatile_token; ast->lparen_token = lparen_token; ast->rparen_token = rparen_token; ast->semicolon_token = semicolon_token; @@ -622,9 +621,7 @@ AsmDefinitionAST *AsmDefinitionAST::clone(MemoryPool *pool) const void AsmDefinitionAST::accept0(ASTVisitor *visitor) { if (visitor->visit(this)) { - for (SpecifierAST *spec = cv_qualifier_seq; spec; - spec = spec->next) - accept(spec, visitor); + // ### accept the asm operand list. } } @@ -641,11 +638,8 @@ unsigned AsmDefinitionAST::lastToken() const return rparen_token + 1; else if (lparen_token) return lparen_token + 1; - for (SpecifierAST *it = cv_qualifier_seq; it; it = it->next) { - if (! it->next) - return it->lastToken(); - } - + else if (volatile_token) + return volatile_token + 1; return asm_token + 1; } diff --git a/src/shared/cplusplus/AST.h b/src/shared/cplusplus/AST.h index d7f346c5b0ce78b5da0c5c4c6bad08ebcf2499a3..1918ee795350053b8f717f3d5bf4debf9001cb5c 100644 --- a/src/shared/cplusplus/AST.h +++ b/src/shared/cplusplus/AST.h @@ -397,8 +397,10 @@ class CPLUSPLUS_EXPORT AsmDefinitionAST: public DeclarationAST { public: unsigned asm_token; - SpecifierAST *cv_qualifier_seq; + unsigned volatile_token; unsigned lparen_token; + // ### string literals + // ### asm operand list unsigned rparen_token; unsigned semicolon_token; diff --git a/src/shared/cplusplus/ObjectiveCTypeQualifiers.cpp b/src/shared/cplusplus/ObjectiveCTypeQualifiers.cpp new file mode 100644 index 0000000000000000000000000000000000000000..0bcff3202c9850e80116f3e934397e37adf20600 --- /dev/null +++ b/src/shared/cplusplus/ObjectiveCTypeQualifiers.cpp @@ -0,0 +1,124 @@ +/*************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Qt Software Information (qt-info@nokia.com) +** +** +** Non-Open Source Usage +** +** Licensees may use this file in accordance with the Qt Beta Version +** License Agreement, Agreement version 2.2 provided with the Software or, +** alternatively, in accordance with the terms contained in a written +** agreement between you and Nokia. +** +** GNU General Public License Usage +** +** Alternatively, this file may be used under the terms of the GNU General +** Public License versions 2.0 or 3.0 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 GNU +** General Public Licensing requirements will be met: +** +** http://www.fsf.org/licensing/licenses/info/GPLv2.html and +** http://www.gnu.org/copyleft/gpl.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt GPL Exception +** version 1.3, included in the file GPL_EXCEPTION.txt in this package. +** +***************************************************************************/ + +#include "ObjectiveCTypeQualifiers.h" + +CPLUSPLUS_BEGIN_NAMESPACE + +static inline int classify2(const char *s) { + if (s[0] == 'i') { + if (s[1] == 'n') { + return Token_in; + } + } + return Token_identifier; +} + +static inline int classify3(const char *s) { + if (s[0] == 'o') { + if (s[1] == 'u') { + if (s[2] == 't') { + return Token_out; + } + } + } + return Token_identifier; +} + +static inline int classify5(const char *s) { + if (s[0] == 'b') { + if (s[1] == 'y') { + if (s[2] == 'r') { + if (s[3] == 'e') { + if (s[4] == 'f') { + return Token_byref; + } + } + } + } + } + else if (s[0] == 'i') { + if (s[1] == 'n') { + if (s[2] == 'o') { + if (s[3] == 'u') { + if (s[4] == 't') { + return Token_inout; + } + } + } + } + } + return Token_identifier; +} + +static inline int classify6(const char *s) { + if (s[0] == 'b') { + if (s[1] == 'y') { + if (s[2] == 'c') { + if (s[3] == 'o') { + if (s[4] == 'p') { + if (s[5] == 'y') { + return Token_bycopy; + } + } + } + } + } + } + else if (s[0] == 'o') { + if (s[1] == 'n') { + if (s[2] == 'e') { + if (s[3] == 'w') { + if (s[4] == 'a') { + if (s[5] == 'y') { + return Token_oneway; + } + } + } + } + } + } + return Token_identifier; +} + +int classifyObjectiveCTypeQualifiers(const char *s, int n) { + switch (n) { + case 2: return classify2(s); + case 3: return classify3(s); + case 5: return classify5(s); + case 6: return classify6(s); + default: return Token_identifier; + } // switch +} + +CPLUSPLUS_END_NAMESPACE diff --git a/src/shared/cplusplus/ObjectiveCTypeQualifiers.h b/src/shared/cplusplus/ObjectiveCTypeQualifiers.h new file mode 100644 index 0000000000000000000000000000000000000000..5dd7a7609ba0089930b2f11ee89a634814ffa24f --- /dev/null +++ b/src/shared/cplusplus/ObjectiveCTypeQualifiers.h @@ -0,0 +1,56 @@ +/*************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Qt Software Information (qt-info@nokia.com) +** +** +** Non-Open Source Usage +** +** Licensees may use this file in accordance with the Qt Beta Version +** License Agreement, Agreement version 2.2 provided with the Software or, +** alternatively, in accordance with the terms contained in a written +** agreement between you and Nokia. +** +** GNU General Public License Usage +** +** Alternatively, this file may be used under the terms of the GNU General +** Public License versions 2.0 or 3.0 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 GNU +** General Public Licensing requirements will be met: +** +** http://www.fsf.org/licensing/licenses/info/GPLv2.html and +** http://www.gnu.org/copyleft/gpl.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt GPL Exception +** version 1.3, included in the file GPL_EXCEPTION.txt in this package. +** +***************************************************************************/ +#ifndef CPLUSPLUS_OBJC_TYPEQUALIFIERS_H +#define CPLUSPLUS_OBJC_TYPEQUALIFIERS_H + +#include "CPlusPlusForwardDeclarations.h" + +CPLUSPLUS_BEGIN_HEADER +CPLUSPLUS_BEGIN_NAMESPACE + +enum { + Token_in, + Token_out, + Token_byref, + Token_inout, + Token_bycopy, + Token_oneway, + Token_identifier +}; + +CPLUSPLUS_EXPORT int classifyObjectiveCTypeQualifiers(const char *s, int n); + +CPLUSPLUS_END_NAMESPACE +CPLUSPLUS_END_HEADER + +#endif // CPLUSPLUS_OBJC_TYPEQUALIFIERS_H diff --git a/src/shared/cplusplus/Parser.cpp b/src/shared/cplusplus/Parser.cpp index 572c9f6665b41ba8b3366a453d97a286a0cffc57..6fb2da600d73fd2a7b2f103d8aa1af08cffa88e9 100644 --- a/src/shared/cplusplus/Parser.cpp +++ b/src/shared/cplusplus/Parser.cpp @@ -56,6 +56,7 @@ #include "Control.h" #include "AST.h" #include "Literals.h" +#include "ObjectiveCTypeQualifiers.h" #include <cstdlib> #include <cstring> #include <cassert> @@ -627,22 +628,92 @@ bool Parser::parseTemplateArgumentList(TemplateArgumentListAST *&node) bool Parser::parseAsmDefinition(DeclarationAST *&node) { - if (LA() == T_ASM) { - AsmDefinitionAST *ast = new (_pool) AsmDefinitionAST; - ast->asm_token = consumeToken(); - parseCvQualifiers(ast->cv_qualifier_seq); - if (LA() == T_LPAREN) { - ast->lparen_token = cursor(); - if (skip(T_LPAREN, T_RPAREN)) - ast->rparen_token = consumeToken(); + if (LA() != T_ASM) + return false; + + AsmDefinitionAST *ast = new (_pool) AsmDefinitionAST; + ast->asm_token = consumeToken(); + + if (LA() == T_VOLATILE) + ast->volatile_token = consumeToken(); + + match(T_LPAREN, &ast->lparen_token); + unsigned string_literal_token = 0; + match(T_STRING_LITERAL, &string_literal_token); + while (LA() == T_STRING_LITERAL) { + consumeToken(); + } + if (LA() == T_COLON) { + consumeToken(); // skip T_COLON + parseAsmOperandList(); + if (LA() == T_COLON) { + consumeToken(); + parseAsmOperandList(); + if (LA() == T_COLON) { + consumeToken(); + parseAsmClobberList(); + } + } else if (LA() == T_COLON_COLON) { + consumeToken(); + parseAsmClobberList(); + } + } else if (LA() == T_COLON_COLON) { + consumeToken(); + parseAsmClobberList(); + } + match(T_RPAREN, &ast->rparen_token); + match(T_SEMICOLON, &ast->semicolon_token); + node = ast; + return true; +} + +bool Parser::parseAsmOperandList() +{ + if (parseAsmOperand()) { + while (LA() == T_COMMA) { + consumeToken(); + parseAsmOperand(); } - match(T_SEMICOLON, &ast->semicolon_token); - node = ast; return true; } return false; } +bool Parser::parseAsmOperand() +{ + unsigned string_literal_token = 0; + match(T_STRING_LITERAL, &string_literal_token); + + if (LA() == T_LBRACKET) { + /*unsigned lbracket_token = */ consumeToken(); + match(T_STRING_LITERAL, &string_literal_token); + unsigned rbracket_token = 0; + match(T_RBRACKET, &rbracket_token); + } + + unsigned lparen_token = 0, rparen_token = 0; + match(T_LPAREN, &lparen_token); + ExpressionAST *expression = 0; + parseExpression(expression); + match(T_RPAREN, &rparen_token); + return true; +} + +bool Parser::parseAsmClobberList() +{ + if (LA() != T_STRING_LITERAL) + return false; + + unsigned string_literal_token = consumeToken(); + + while (LA() == T_COMMA) { + consumeToken(); + match(T_STRING_LITERAL, &string_literal_token); + } + + return true; +} + bool Parser::parseTemplateDeclaration(DeclarationAST *&node) { if (! (LA(1) == T_TEMPLATE || ((LA(1) == T_EXPORT || LA(1) == T_EXTERN) @@ -2556,6 +2627,13 @@ bool Parser::parsePrimaryExpression(ExpressionAST *&node) case T_SLOT: return parseQtMethod(node); + case T_LBRACKET: + case T_AT_STRING_LITERAL: + case T_AT_ENCODE: + case T_AT_PROTOCOL: + case T_AT_SELECTOR: + return parseObjCExpression(node); + default: { NameAST *name = 0; if (parseNameId(name)) { @@ -2570,6 +2648,151 @@ bool Parser::parsePrimaryExpression(ExpressionAST *&node) return false; } +bool Parser::parseObjCExpression(ExpressionAST *&node) +{ + switch (LA()) { + case T_AT_ENCODE: + return parseObjCEncodeExpression(node); + + case T_AT_PROTOCOL: + return parseObjCProtocolExpression(node); + + case T_AT_SELECTOR: + return parseObjCSelectorExpression(node); + + case T_LBRACKET: + return parseObjCMessageExpression(node); + + case T_AT_STRING_LITERAL: + return parseObjCStringLiteral(node); + + default: + break; + } // switch + return false; +} + +bool Parser::parseObjCStringLiteral(ExpressionAST *&node) +{ + if (LA() != T_AT_STRING_LITERAL) + return false; + + StringLiteralAST **ast = reinterpret_cast<StringLiteralAST **> (&node); + + while (LA() == T_AT_STRING_LITERAL) { + *ast = new (_pool) StringLiteralAST; + (*ast)->token = consumeToken(); + ast = &(*ast)->next; + } + return true; +} + +bool Parser::parseObjCEncodeExpression(ExpressionAST *&) +{ + if (LA() != T_AT_ENCODE) + return false; + + /*unsigned encode_token = */ consumeToken(); + parseObjCTypeName(); + return true; +} + +bool Parser::parseObjCProtocolExpression(ExpressionAST *&) +{ + if (LA() != T_AT_PROTOCOL) + return false; + + /*unsigned protocol_token = */ consumeToken(); + unsigned lparen_token = 0, identifier_token = 0, rparen_token = 0; + match(T_LPAREN, &lparen_token); + match(T_IDENTIFIER, &identifier_token); + match(T_RPAREN, &rparen_token); + return true; +} + +bool Parser::parseObjCSelectorExpression(ExpressionAST *&) +{ + if (LA() != T_AT_SELECTOR) + return false; + + /*unsigned selector_token = */consumeToken(); + unsigned lparen_token = 0, rparen_token = 0; + match(T_LPAREN, &lparen_token); + parseObjCMethodSignature(); + match(T_RPAREN, &rparen_token); + return true; +} + +bool Parser::parseObjCMessageExpression(ExpressionAST *&) +{ + if (LA() != T_LBRACKET) + return false; + + /*unsigned lbracket_token = */ consumeToken(); + + parseObjCMessageReceiver(); + parseObjCMessageArguments(); + + unsigned rbracket_token = 0; + match(T_RBRACKET, &rbracket_token); + return true; +} + +bool Parser::parseObjCMessageReceiver() +{ + ExpressionAST *expression = 0; + return parseExpression(expression); +} + +bool Parser::parseObjCMessageArguments() +{ + if (LA() == T_RBRACKET) + return false; // nothing to do. + + unsigned start = cursor(); + + if (parseObjCSelectorArgs()) { + while (parseObjCSelectorArgs()) { + // accept the selector args. + } + } else { + rewind(start); + parseObjCSelector(); + } + + while (LA() == T_COMMA) { + consumeToken(); // skip T_COMMA + ExpressionAST *expression = 0; + parseAssignmentExpression(expression); + } + return true; +} + +bool Parser::parseObjCSelectorArgs() +{ + parseObjCSelector(); + if (LA() != T_COLON) + return false; + + /*unsigned colon_token = */consumeToken(); + + ExpressionAST *expression = 0; + parseAssignmentExpression(expression); + return true; +} + +bool Parser::parseObjCMethodSignature() +{ + if (parseObjCSelector()) { + while (LA() == T_COMMA) { + consumeToken(); // skip T_COMMA + parseObjCSelector(); + } + return true; + } + return false; +} + bool Parser::parseNameId(NameAST *&name) { unsigned start = cursor(); @@ -3522,6 +3745,42 @@ bool Parser::parseObjCImplementation(DeclarationAST *&) } parseObjClassInstanceVariables(); + parseObjCMethodDefinitionList(); + return true; +} + +bool Parser::parseObjCMethodDefinitionList() +{ + while (LA() && LA() != T_AT_END) { + unsigned start = cursor(); + + switch (LA()) { + case T_PLUS: + case T_MINUS: + parseObjCMethodDefinition(); + + if (start == cursor()) + consumeToken(); + break; + + default: + // ### warning message + consumeToken(); + break; + } // switch + } + + return true; +} + +bool Parser::parseObjCMethodDefinition() +{ + if (LA() != T_MINUS && LA() != T_PLUS) + return false; + + parseObjCMethodSignature(); + StatementAST *function_body = 0; + parseFunctionBody(function_body); return true; } @@ -3785,16 +4044,11 @@ bool Parser::parseObjCTypeQualifiers() return false; Identifier *id = tok().identifier; - if (! strcmp("in", id->chars()) || - ! strcmp("out", id->chars()) || - ! strcmp("inout", id->chars()) || - ! strcmp("bycopy", id->chars()) || - ! strcmp("byref", id->chars()) || - ! strcmp("oneway", id->chars())) { - consumeToken(); - return true; - } - return false; + const int k = classifyObjectiveCTypeQualifiers(id->chars(), id->size()); + if (k == Token_identifier) + return false; + consumeToken(); + return true; } // objc-end: T_AT_END diff --git a/src/shared/cplusplus/Parser.h b/src/shared/cplusplus/Parser.h index d99d8d27fc0a395344cb6287138d986561b24f13..e6a29d199e24db9d2fa1e9cff3bef39f6c137b6e 100644 --- a/src/shared/cplusplus/Parser.h +++ b/src/shared/cplusplus/Parser.h @@ -85,6 +85,9 @@ public: bool parseAdditiveExpression(ExpressionAST *&node); bool parseAndExpression(ExpressionAST *&node); bool parseAsmDefinition(DeclarationAST *&node); + bool parseAsmOperandList(); + bool parseAsmOperand(); + bool parseAsmClobberList(); bool parseAssignmentExpression(ExpressionAST *&node); bool parseBaseClause(BaseSpecifierAST *&node); bool parseBaseSpecifier(BaseSpecifierAST *&node); @@ -211,12 +214,25 @@ public: bool parseQtMethod(ExpressionAST *&node); // ObjC++ + bool parseObjCExpression(ExpressionAST *&node); bool parseObjCClassDeclaration(DeclarationAST *&node); bool parseObjCInterface(DeclarationAST *&node, SpecifierAST *attributes = 0); bool parseObjCProtocol(DeclarationAST *&node, SpecifierAST *attributes = 0); + bool parseObjCEncodeExpression(ExpressionAST *&node); + bool parseObjCProtocolExpression(ExpressionAST *&node); + bool parseObjCSelectorExpression(ExpressionAST *&node); + bool parseObjCStringLiteral(ExpressionAST *&node); + bool parseObjCMethodSignature(); + bool parseObjCMessageExpression(ExpressionAST *&node); + bool parseObjCMessageReceiver(); + bool parseObjCMessageArguments(); + bool parseObjCSelectorArgs(); + bool parseObjCMethodDefinitionList(); + bool parseObjCMethodDefinition(); + bool parseObjCProtocolRefs(); bool parseObjClassInstanceVariables(); bool parseObjCInterfaceMemberDeclaration(); diff --git a/src/shared/cplusplus/PrettyPrinter.cpp b/src/shared/cplusplus/PrettyPrinter.cpp index 6acb109dcfb41d1aa5467cee7f0ac63f1f8c1746..d6c604c3abbcec56c3b82f493df23f7f506b55ed 100644 --- a/src/shared/cplusplus/PrettyPrinter.cpp +++ b/src/shared/cplusplus/PrettyPrinter.cpp @@ -101,10 +101,8 @@ bool PrettyPrinter::visit(ArrayInitializerAST *ast) bool PrettyPrinter::visit(AsmDefinitionAST *ast) { out << spell(ast->asm_token); - for (SpecifierAST *it = ast->cv_qualifier_seq; it; it = it->next) { - out << ' '; - accept(it); - } + if (ast->volatile_token) + out << ' ' << spell(ast->volatile_token) << ' '; out << '('; out << "/* ### implement me */"; out << ");"; diff --git a/src/shared/cplusplus/cplusplus.pri b/src/shared/cplusplus/cplusplus.pri index 041aff67be21e2e37ce249d3ea576f2c5ad3a0bd..3a62ed6b7da9e99e374cc4df19a7e555edebb3e9 100644 --- a/src/shared/cplusplus/cplusplus.pri +++ b/src/shared/cplusplus/cplusplus.pri @@ -36,8 +36,8 @@ HEADERS += \ $$PWD/TranslationUnit.h \ $$PWD/Type.h \ $$PWD/TypeVisitor.h \ - $$PWD/PrettyPrinter.h - + $$PWD/PrettyPrinter.h \ + $$PWD/ObjectiveCTypeQualifiers.h SOURCES += \ $$PWD/AST.cpp \ @@ -55,6 +55,7 @@ SOURCES += \ $$PWD/FullySpecifiedType.cpp \ $$PWD/Keywords.cpp \ $$PWD/ObjectiveCAtKeywords.cpp \ + $$PWD/ObjectiveCTypeQualifiers.cpp \ $$PWD/Lexer.cpp \ $$PWD/LiteralTable.cpp \ $$PWD/Literals.cpp \ diff --git a/src/shared/proparser/profileevaluator.cpp b/src/shared/proparser/profileevaluator.cpp index 28a30f2a03b9e5df879641aa46931a8c09cf7211..c54b75a1e2db1c96e88dc7b346638b04f7f60dad 100644 --- a/src/shared/proparser/profileevaluator.cpp +++ b/src/shared/proparser/profileevaluator.cpp @@ -719,6 +719,7 @@ bool ProFileEvaluator::Private::visitProValue(ProValue *value) // The following two blocks fix bug 180128 by making all "interesting" // file name absolute in each .pro file, not just the top most one if (varName == QLatin1String("SOURCES") + || varName == QLatin1String("OBJECTIVE_SOURCES") || varName == QLatin1String("HEADERS") || varName == QLatin1String("INTERFACES") || varName == QLatin1String("FORMS") diff --git a/tests/auto/cplusplus/shared/shared.pri b/tests/auto/cplusplus/shared/shared.pri index 924cda99911af638da1fddff3ca5219825940a06..63573f07c69ac9770e2b8615d0e2ee1e238d21c2 100644 --- a/tests/auto/cplusplus/shared/shared.pri +++ b/tests/auto/cplusplus/shared/shared.pri @@ -1,5 +1,5 @@ -DEFINES += HAVE_QT CPLUSPLUS_WITH_NAMESPACE +DEFINES += CPLUSPLUS_WITH_NAMESPACE INCLUDEPATH += $$PWD/../../../../src/shared/cplusplus DEPENDPATH += $$INCLUDEPATH . LIBS += -L$$PWD -lCPlusPlusTestSupport diff --git a/tests/auto/cplusplus/shared/shared.pro b/tests/auto/cplusplus/shared/shared.pro index 2f84af560bcdf0a8a2704b83a5a3cb19e0a4c7db..a3746386dfa6752b0212ab35a816a77e89dc9503 100644 --- a/tests/auto/cplusplus/shared/shared.pro +++ b/tests/auto/cplusplus/shared/shared.pro @@ -3,6 +3,7 @@ TEMPLATE = lib TARGET = CPlusPlusTestSupport CONFIG += static QT = core +DESTDIR = $$PWD -DEFINES += HAVE_QT CPLUSPLUS_WITH_NAMESPACE +DEFINES += CPLUSPLUS_WITH_NAMESPACE include($$PWD/../../../../src/shared/cplusplus/cplusplus.pri)