File kate-4.14.3-git.patch of Package kate4-parts

diff --git a/addons/kate/gdbplugin/localsview.cpp b/addons/kate/gdbplugin/localsview.cpp
index 3f1bcc0..8aa8374 100644
--- a/addons/kate/gdbplugin/localsview.cpp
+++ b/addons/kate/gdbplugin/localsview.cpp
@@ -170,6 +170,10 @@ void LocalsView::addStruct(QTreeWidgetItem *parent, const QString &vString)
         // Value
         start = end + 3;
         end = start;
+        if (start < 0 || start > vString.size()) {
+            kDebug() << vString << start;
+            break;
+        }
         if (vString[start] == '{') {
             start++;
             end++;
diff --git a/addons/kate/pate/src/plugins/cmake_utils/__init__.py b/addons/kate/pate/src/plugins/cmake_utils/__init__.py
index 5b7310d..d309c2e 100644
--- a/addons/kate/pate/src/plugins/cmake_utils/__init__.py
+++ b/addons/kate/pate/src/plugins/cmake_utils/__init__.py
@@ -33,6 +33,7 @@ from PyQt4.QtCore import QEvent, QObject, QUrl, Qt, pyqtSlot
 from PyQt4.QtGui import (
     QBrush
   , QColor
+  , QDialog
   , QPalette
   , QSplitter
   , QTabWidget
@@ -96,7 +97,6 @@ def _find_current_context(document, cursor):
         in_comment = False
         should_count_pos = (current_line == cursor.line())
         for pos, c in enumerate(line_str):
-            print("c='{}'".format(c))
             if should_count_pos and pos == cursor.column():
                 break
             if c == '#' and not in_string:
@@ -179,17 +179,22 @@ def openDocument(url):
 
 
 def _ask_for_CMakeLists_location_and_try_open(start_dir_to_show, cur_doc_dir):
-    selected_dir = KUrlRequesterDialog.getUrl(
+    url_requester = KUrlRequesterDialog(
         start_dir_to_show
-      , kate.mainInterfaceWindow().window()
       , i18nc('@title:window', '<filename>CMakeLists.txt</filename> location')
+      , kate.mainInterfaceWindow().window()
       )
+
+    if url_requester.exec() == QDialog.Rejected:
+        return
+
+    selected_dir = url_requester.urlRequester().text()
     kate.kDebug('CMakeHelper: selected_dir={}'.format(selected_dir))
 
-    if selected_dir.isEmpty():
-        return                                              # User pressed 'Cancel'
+    if not selected_dir:
+        return                                              # User has pressed 'Ok' on empty line
 
-    selected_dir = selected_dir.toLocalFile()               # Get selected path
+    selected_dir = KUrl(selected_dir).toLocalFile()         # Get selected path
     # Is it relative?
     if not os.path.isabs(selected_dir):
         # Yep, join w/ a path of the current doc
@@ -222,6 +227,7 @@ def openCMakeList():
     # First of all check the document's MIME-type
     document = kate.activeDocument()
     cur_dir = os.path.dirname(document.url().toLocalFile())
+    kate.kDebug('CMakeHelper: cur_doc_dir="{}"'.format(cur_dir))
     mimetype = document.mimeType()
     if mimetype != _CMAKE_MIME_TYPE:
         # Ok, current document is not a CMakeLists.txt, lets try to open
diff --git a/addons/kate/project/kateproject.cpp b/addons/kate/project/kateproject.cpp
index f5557c3..2400b5e 100644
--- a/addons/kate/project/kateproject.cpp
+++ b/addons/kate/project/kateproject.cpp
@@ -35,6 +35,7 @@ KateProject::KateProject ()
   : QObject ()
   , m_worker (new KateProjectWorker (this))
   , m_thread (m_worker)
+  , m_fileLastModified()
   , m_notesDocument (0)
   , m_documentsParent (0)
 {
@@ -96,10 +97,12 @@ bool KateProject::reload (bool force)
   /**
    * open the file for reading, bail out on error!
    */
+  m_fileLastModified = QDateTime();
   QFile file (m_fileName);
   if (!file.open (QFile::ReadOnly))
     return false;
 
+  m_fileLastModified = QFileInfo(m_fileName).lastModified();
   /**
    * parse the whole file, bail out again on error!
    */
diff --git a/addons/kate/project/kateproject.h b/addons/kate/project/kateproject.h
index 3aaed67..f39375b 100644
--- a/addons/kate/project/kateproject.h
+++ b/addons/kate/project/kateproject.h
@@ -21,6 +21,7 @@
 #ifndef KATE_PROJECT_H
 #define KATE_PROJECT_H
 
+#include <QDateTime>
 #include <QThread>
 #include <QMap>
 #include <QSharedPointer>
@@ -135,6 +136,13 @@ class KateProject : public QObject
       return m_baseDir;
     }
 
+
+    /**
+     * Return the time when the project file has been modified last.
+     * @return QFileInfo::lastModified()
+     */
+    QDateTime fileLastModified() const { return m_fileLastModified; }
+
     /**
      * Accessor to project map containing the whole project info.
      * @return project info
@@ -279,6 +287,8 @@ class KateProject : public QObject
      */
     KateProjectWorkerThread m_thread;
 
+    QDateTime m_fileLastModified;
+
     /**
      * project file name
      */
diff --git a/addons/kate/project/kateprojectplugin.cpp b/addons/kate/project/kateprojectplugin.cpp
index a7f71e6..811b62c 100644
--- a/addons/kate/project/kateprojectplugin.cpp
+++ b/addons/kate/project/kateprojectplugin.cpp
@@ -253,7 +253,10 @@ void KateProjectPlugin::slotDirectoryChanged (const QString &path)
   QString fileName = path + QString("/.kateproject");
   foreach (KateProject *project, m_projects) {
     if (project->fileName() == fileName) {
-      project->reload();
+      QDateTime lastModified = QFileInfo(fileName).lastModified();
+      if (project->fileLastModified().isNull() || (lastModified > project->fileLastModified())) {
+        project->reload();
+      }
       break;
     }
   }
diff --git a/addons/ktexteditor/autobrace/autobrace.cpp b/addons/ktexteditor/autobrace/autobrace.cpp
index ac079b6..1f5f8df 100644
--- a/addons/ktexteditor/autobrace/autobrace.cpp
+++ b/addons/ktexteditor/autobrace/autobrace.cpp
@@ -31,6 +31,32 @@
 
 AutoBracePlugin *AutoBracePlugin::plugin = 0;
 
+namespace {
+
+/**
+ * Returns next character after specified text range in document.
+ * @param document Current document.
+ * @param position Text cursor position
+ * @return Next character after text position
+ */
+QChar nextToken(KTextEditor::Document* document, const KTextEditor::Cursor& position)
+{
+    return document->character(position + KTextEditor::Cursor(0, 1));
+}
+
+/**
+ * Returns previous character before specified text range in document.
+ * @param document Current document.
+ * @param position Text cursor position
+ * @return Next character after text position
+ */
+QChar previousToken(KTextEditor::Document* document, const KTextEditor::Cursor& position)
+{
+    return document->character(position - KTextEditor::Cursor(0, 1));
+}
+
+}
+
 K_PLUGIN_FACTORY_DEFINITION(AutoBracePluginFactory,
         registerPlugin<AutoBracePlugin>("ktexteditor_autobrace");
         registerPlugin<AutoBraceConfig>("ktexteditor_autobrace_config");
@@ -222,22 +248,27 @@ void AutoBracePluginDocument::slotTextRemoved(KTextEditor::Document* document, c
 void AutoBracePluginDocument::slotTextInserted(KTextEditor::Document *document,
                                                const KTextEditor::Range& range)
 {
+    if (!range.onSingleLine() || range.columnWidth() != 1) {
+        return;
+    }
+    const KTextEditor::Cursor position = range.start();
+    const QChar insertedToken = document->character(position);
+
     // Fill brackets map matching opening and closing brackets.
-    QMap<QString,QString> brackets;
-    brackets["("] = ")";
-    brackets["["] = "]";
-    
+    QMap<QChar,QChar> brackets;
+    brackets['('] = ')';
+    brackets['['] = ']';
+
     // latex wants {, too
     if (document->mode() == "LaTeX")
-        brackets["{"] = "}";
-    
+        brackets['{'] = '}';
+
     // List of Tokens after which an automatic bracket expanion
     // is allowed.
-    const static QStringList allowedNextToken = QStringList() << "]" << ")" << ","
-                                                << "." << ";" << "\n" << "\t" << " " << "";
-    const QString text = document->text(range);
+    const static QVector<QChar> allowedNextToken = QVector<QChar>()
+        << ']' << ')' << ',' << '.' << ';' << '\n' << '\t' << ' ' << QChar();
 
-    // An insertion operation cancels any last range removal
+    // An insertion operation cancels any last position removal
     // operation
     m_lastRange = KTextEditor::Range::invalid();
 
@@ -247,14 +278,14 @@ void AutoBracePluginDocument::slotTextInserted(KTextEditor::Document *document,
     // 3.) Quotation marks like " and '
 
     // Handle brace openers
-    if (text == "\n") {
+    if (insertedToken == '\n') {
         // Remember this position as insertion candidate.
         // We don't directly insert this here because of KatePart specifics:
         // a) Setting the cursor position crashes at this point, and
         // b) textChanged() only gets called once per edit operation, so we can
         //    ignore the same braces when they're being inserted via paste.
-        if (isInsertionCandidate(document, range.start().line())) {
-            m_insertionLine = range.end().line();
+        if (isInsertionCandidate(document, position.line())) {
+            m_insertionLine = position.line();
             connect(document, SIGNAL(textChanged(KTextEditor::Document*)),
                     this, SLOT(slotTextChanged(KTextEditor::Document*)));
         }
@@ -263,21 +294,21 @@ void AutoBracePluginDocument::slotTextInserted(KTextEditor::Document *document,
         }
     }
     // Opening brackets (defined in ctor)
-    else if (m_autoBrackets && brackets.contains(text)) {
-        // Only insert auto closing brackets if current text range
+    else if (m_autoBrackets && brackets.contains(insertedToken)) {
+        // Only insert auto closing brackets if current text position
         // is followed by one of the allowed next tokens.
-        if (allowedNextToken.contains(nextToken(document,range))) {
-            insertAutoBracket(document, range, brackets[text]);
+        if (allowedNextToken.contains(nextToken(document, position))) {
+            insertAutoBracket(document, range, brackets[insertedToken]);
         }
 
     }
     // Check whether closing brackets are allowed.
     // If a brace is not allowed remove it
-    // and set the cursor to the position after that text range.
+    // and set the cursor to the position after that text position.
     // Bracket tests bases on this simple idea: A bracket can only be inserted
     // if it is NOT followed by the same bracket. This results in overwriting closing brackets.
-    else if (m_autoBrackets && brackets.values().contains(text)) {
-        if (nextToken(document,range) == text) {
+    else if (m_autoBrackets && brackets.values().contains(insertedToken)) {
+        if (nextToken(document, position) == insertedToken) {
             KTextEditor::Cursor saved = range.end();
             document->removeText(range);
             document->activeView()->setCursorPosition(saved);
@@ -287,10 +318,10 @@ void AutoBracePluginDocument::slotTextInserted(KTextEditor::Document *document,
     // applies here: double quotation marks are eaten up and only inserted if not
     // followed by the same quoation mark. Additionally automatic quotation marks
     // are inserted only if NOT followed by a back slash (escaping character).
-    else if (m_autoQuotations && (text == "\"" || text == "\'") && previousToken(document, range) != "\\") {
-        const QString next = nextToken(document, range);
+    else if (m_autoQuotations && (insertedToken == '\"' || insertedToken == '\'') && previousToken(document, position) != '\\') {
+        const QChar next = nextToken(document, position);
         // Eat it if already there
-        if (next == text) {
+        if (next == insertedToken) {
             KTextEditor::Cursor saved = range.end();
             document->removeText(range);
             document->activeView()->setCursorPosition(saved);
@@ -299,8 +330,8 @@ void AutoBracePluginDocument::slotTextInserted(KTextEditor::Document *document,
         // next tokens and the number of marks in the insertion line is even
         // (excluding the already inserted mark)
         else if (allowedNextToken.contains(next)
-            && (document->line(range.start().line()).count(text) % 2) ) {
-            insertAutoBracket(document, range, text);
+            && (document->line(position.line()).count(insertedToken) % 2) ) {
+            insertAutoBracket(document, range, insertedToken);
         }
     }
 }
@@ -314,7 +345,7 @@ void AutoBracePluginDocument::slotTextInserted(KTextEditor::Document *document,
  */
 void AutoBracePluginDocument::insertAutoBracket(KTextEditor::Document *document,
                                                 const KTextEditor::Range& range,
-                                                const QString& brace) {
+                                                const QChar& brace) {
     // Disconnect Slots to avoid check for redundant closing brackets
     disconnectSlots(document);
 
@@ -331,35 +362,6 @@ void AutoBracePluginDocument::insertAutoBracket(KTextEditor::Document *document,
     connectSlots(document);
 }
 
-/**
- * Returns next character after specified text range in document.
- * @param document Current document.
- * @param range Inserted text range (by text-inserted slot)
- * @return Next character after text range
- */
-const QString AutoBracePluginDocument::nextToken(KTextEditor::Document* document, const KTextEditor::Range& range)
-{
-    // Calculate range after insertion (exactly one character)
-    KTextEditor::Range afterRange(range.end(), range.end().line(), range.end().column()+1);
-
-    return (afterRange.isValid() ? document->text(afterRange) : "");
-}
-
-/**
- * Returns previous character before specified text range in document.
- * @param document Current document.
- * @param range Inserted text range (by text-inserted slot)
- * @return Next character after text range
- */
-const QString AutoBracePluginDocument::previousToken(KTextEditor::Document* document, const KTextEditor::Range& range)
-{
-    // Calculate range before insertion (exactly one character)
-    KTextEditor::Range beforeRange(range.start().line(), range.start().column()-1, range.start().line(),
-                                   range.start().column());
-
-    return (beforeRange.isValid() ? document->text(beforeRange) : "");
-}
-
 bool AutoBracePluginDocument::isInsertionCandidate(KTextEditor::Document *document, int openingBraceLine) {
     QString line = document->line(openingBraceLine);
     if (line.isEmpty() || !line.endsWith('{')) {
diff --git a/addons/ktexteditor/autobrace/autobrace.h b/addons/ktexteditor/autobrace/autobrace.h
index 8a17a35..477d919 100644
--- a/addons/ktexteditor/autobrace/autobrace.h
+++ b/addons/ktexteditor/autobrace/autobrace.h
@@ -88,9 +88,7 @@ class AutoBracePluginDocument
 
   private:
     void insertAutoBracket(KTextEditor::Document *document,const KTextEditor::Range& range,
-                         const QString& brace);
-    const QString previousToken(KTextEditor::Document *document,const KTextEditor::Range& range);
-    const QString nextToken(KTextEditor::Document *document,const KTextEditor::Range& range);
+                           const QChar& brace);
 
     int m_insertionLine;
     QString m_indentation;
diff --git a/kate/app/katequickopen.cpp b/kate/app/katequickopen.cpp
index 235f9f1..92ffdd0 100644
--- a/kate/app/katequickopen.cpp
+++ b/kate/app/katequickopen.cpp
@@ -76,7 +76,7 @@ KateQuickOpen::KateQuickOpen(QWidget *parent, KateMainWindow *mainWindow)
     m_model->setFilterCaseSensitivity(Qt::CaseInsensitive);
     m_model->setSortCaseSensitivity(Qt::CaseInsensitive);
 
-    connect(m_inputLine, SIGNAL(textChanged(QString)), m_model, SLOT(setFilterFixedString(QString)));
+    connect(m_inputLine, SIGNAL(textChanged(QString)), m_model, SLOT(setFilterWildcard(QString)));
     connect(m_inputLine, SIGNAL(returnPressed()), this, SLOT(slotReturnPressed()));
     connect(m_model, SIGNAL(rowsInserted(QModelIndex, int, int)), this, SLOT(reselectFirst()));
     connect(m_model, SIGNAL(rowsRemoved(QModelIndex, int, int)), this, SLOT(reselectFirst()));
@@ -244,9 +244,6 @@ void KateQuickOpen::update ()
         itemName->setData(qVariantFromValue(KUrl::fromPath (file)), UrlRole);
         itemName->setData(QString("%1: %2").arg(fi.fileName()).arg(file), SortFilterRole);
         itemName->setEditable(false);
-        QFont font = itemName->font();
-        font.setBold(true);
-        itemName->setFont(font);
 
         QStandardItem *itemUrl = new QStandardItem(file);
         itemUrl->setEditable(false);
diff --git a/part/spellcheck/ontheflycheck.cpp b/part/spellcheck/ontheflycheck.cpp
index a08827b..da9d9fd 100644
--- a/part/spellcheck/ontheflycheck.cpp
+++ b/part/spellcheck/ontheflycheck.cpp
@@ -58,8 +58,8 @@ KateOnTheFlyChecker::KateOnTheFlyChecker(KateDocument *document)
           this, SLOT(addView(KTextEditor::Document*,KTextEditor::View*)));
   connect(document, SIGNAL(highlightingModeChanged(KTextEditor::Document*)),
           this, SLOT(updateConfig()));
-  connect(&document->buffer(), SIGNAL(respellCheckBlock(KateDocument*,int,int)),
-          this, SLOT(handleRespellCheckBlock(KateDocument*,int,int)));
+  connect(&document->buffer(), SIGNAL(respellCheckBlock(int,int)),
+          this, SLOT(handleRespellCheckBlock(int,int)));
 
   // load the settings for the speller
   updateConfig();
@@ -117,11 +117,8 @@ void KateOnTheFlyChecker::clearMisspellingForWord(const QString& word)
 const KateOnTheFlyChecker::SpellCheckItem KateOnTheFlyChecker::invalidSpellCheckQueueItem =
                            SpellCheckItem(NULL, "");
 
-void KateOnTheFlyChecker::handleRespellCheckBlock(KateDocument *kateDocument, int start, int end)
+void KateOnTheFlyChecker::handleRespellCheckBlock(int start, int end)
 {
-  Q_ASSERT(kateDocument == m_document);
-  Q_UNUSED(kateDocument);
-
   ON_THE_FLY_DEBUG << start << end;
   KTextEditor::Range range(start, 0, end, m_document->lineLength(end));
   bool listEmpty = m_modificationList.isEmpty();
diff --git a/part/spellcheck/ontheflycheck.h b/part/spellcheck/ontheflycheck.h
index 991f7d0..89494ec 100644
--- a/part/spellcheck/ontheflycheck.h
+++ b/part/spellcheck/ontheflycheck.h
@@ -133,7 +133,7 @@ class KateOnTheFlyChecker : public QObject, private KTextEditor::MovingRangeFeed
     void handleModifiedRanges();
     void handleInsertedText(const KTextEditor::Range &range);
     void handleRemovedText(const KTextEditor::Range &range);
-    void handleRespellCheckBlock(KateDocument *document, int start, int end);
+    void handleRespellCheckBlock(int start, int end);
     bool removeRangeFromModificationList(KTextEditor::MovingRange *range);
     void clearModificationList();
 };
diff --git a/part/syntax/data/cmake-gen.sh b/part/syntax/data/cmake-gen.sh
index 248083c..860ad63 100755
--- a/part/syntax/data/cmake-gen.sh
+++ b/part/syntax/data/cmake-gen.sh
@@ -2,13 +2,12 @@
 # Copyright 2008, 2009 Matthew Woehlke (mw_triad@users.sourceforge.net)
 # Copyright 2013, Alex Turbov (i.zaufi@gmail.com)
 #
-# ATTENTION Since CMake 3.x this generator is broken! So last time
-# (making version 1.31 of cmake.xml syntax) I had to use `kdiff3`
-# to manually merge changes!
+# ATTENTION Since Thu Feb 26 2015 this generator is CMake 3.x only!
+# Use this generator with care and merge a results with a previous cmake.xml
+# to keep older CMake compatibility.
 #
-# TODO CMake 2 and 3 has some difference in syntax... So, this
-# generator do not feasible anymore if we are trying to keep a single
-# syntax files for both CMake generations. It must be fixed! (somehow)
+# NOTE CMake 3.x seem do not have any (useless) heading for --help-xxx commands.
+# So, no need to strip the first line anymore. ( | sed '1d' | )
 
 export LC_ALL=C
 
@@ -38,7 +37,7 @@ sed "1,$(wc -l < $t.4)d" $t._4 | sed -e '/<\/list\s*>/ba' -e 'd' -e ':a' -e 'n;b
 sed -n -e '/<context.*"Detect More Builtin Variables"/{p;q}' -e 'p' $t._5 > $t.5
 sed "1,$(wc -l < $t.5)d" $t._5 | sed -e '/<\/context\s*>/ba' -e 'd' -e ':a' -e 'n;ba' > $t.6
 
-cmake --help-command-list | sed '1d' | sort > $t.commands
+"$CMAKE" --help-command-list | sort > $t.commands
 echo "$(count commands) commands"
 
 extract_args() {
@@ -64,14 +63,17 @@ while read COMMAND ; do
 done < $t.commands
 sed '/^#/d' $t.args | sort -u > $t.argsu
 echo "$(count args) arguments, $(count argsu) unique"
-cmake --help-property-list | sed -e '1d' -e '/[<>]/d' | sort -u > $t.props
+"$CMAKE" --help-property-list | sed -e '/[<>]/d' | sort -u > $t.props
 echo "$(count props) properties"
 
 # Get builtin CMake variables list
-cmake --help-variable-list | sed -e '1d' | grep -v 'Project name' > $t.all_vars
+# ATTENTION CMake 3.x doesn't have "Project name" string anymore in output of this command
+# ( | grep -v 'Project name' | )
+"$CMAKE" --help-variable-list > $t.all_vars
 grep '^[A-Za-z_0-9]\+\s*$' $t.all_vars | sort -u > $t.vars
 grep -v '^[A-Za-z_0-9]\+\s*$' $t.all_vars \
   | sed 's,<LANG>,[A-Za-z_][A-Za-z_0-9]*,' \
+  | sed 's,<an-attribute>,[A-Za-z_][A-Za-z_0-9]*,' \
   | sed 's,<CONFIG>,[A-Za-z_][A-Za-z_0-9]*,' \
   | sed 's,<PackageName>,[A-Za-z_][A-Za-z_0-9]*,' \
   | sed 's,<PROJECT-NAME>,[A-Za-z_][A-Za-z_0-9]*,' \
@@ -84,7 +86,7 @@ echo "$(count all_vars) builtin variables"
 
 # Generate new .xml
 {
-    sed '/<!-- generated for/s/^.*$/<!-- generated for "'"$(cmake --version)"'" -->/' $t.1
+    cat $t.1
     echo "      <!-- generated list -->"
     sed 's!.*!      <item> & </item>!' $t.commands
     cat $t.2
diff --git a/part/syntax/data/cmake.xml b/part/syntax/data/cmake.xml
index 8aca323..021f909 100644
--- a/part/syntax/data/cmake.xml
+++ b/part/syntax/data/cmake.xml
@@ -25,10 +25,10 @@
  * Boston, MA  02110-1301, USA.                                       *
  **********************************************************************
  -->
-<!-- generated for "cmake version 2.8.12.1 and 3.0.2" -->
+<!-- generated for "cmake version 2.8.12.1, 3.0.2 and 3.1.2" -->
 <language
     name="CMake"
-    version="1.31"
+    version="1.33"
     kateversion="2.4"
     section="Other"
     extensions="CMakeLists.txt;*.cmake;*.cmake.in"
@@ -59,6 +59,7 @@
       <item> cmake_minimum_required </item>
       <item> cmake_policy </item>
       <item> configure_file </item>
+      <item> continue </item>
       <item> create_test_sourcelist </item>
       <item> ctest_build </item>
       <item> ctest_configure </item>
@@ -143,9 +144,11 @@
       <item> subdir_depends </item>
       <item> subdirs </item>
       <item> target_compile_definitions </item>
+      <item> target_compile_features </item>
       <item> target_compile_options </item>
       <item> target_include_directories </item>
       <item> target_link_libraries </item>
+      <item> target_sources </item>
       <item> try_compile </item>
       <item> try_run </item>
       <item> unset </item>
@@ -184,8 +187,11 @@
       <item> BRIEF_DOCS </item>
       <item> BUILD </item>
       <item> BUNDLE </item>
+      <item> BYPRODUCTS </item>
       <item> CACHE </item>
       <item> CACHED_VARIABLE </item>
+      <item> CDASH_UPLOAD </item>
+      <item> CDASH_UPLOAD_TYPE </item>
       <item> CLEAR </item>
       <item> CMAKE_FIND_ROOT_PATH_BOTH </item>
       <item> CMAKE_FLAGS </item>
@@ -252,6 +258,7 @@
       <item> FULL_DOCS </item>
       <item> FUNCTION </item>
       <item> GENERATE </item>
+      <item> GENEX_STRIP </item>
       <item> GET </item>
       <item> GLOB </item>
       <item> GLOBAL </item>
@@ -259,6 +266,7 @@
       <item> GREATER </item>
       <item> GROUP_EXECUTE </item>
       <item> GROUP_READ </item>
+      <item> GUARD </item>
       <item> GUID </item>
       <item> HEX </item>
       <item> HINTS </item>
@@ -298,6 +306,7 @@
       <item> LINK_PRIVATE </item>
       <item> LINK_PUBLIC </item>
       <item> LISTS </item>
+      <item> LOCK </item>
       <item> LOG </item>
       <item> MACOSX_BUNDLE </item>
       <item> MAIN_DEPENDENCY </item>
@@ -307,6 +316,7 @@
       <item> MATCHALL </item>
       <item> MATCHES </item>
       <item> MD5 </item>
+      <item> MESSAGE_NEVER </item>
       <item> MODULE </item>
       <item> NAME </item>
       <item> NAMELINK_ONLY </item>
@@ -369,6 +379,7 @@
       <item> PRE_LINK </item>
       <item> PRIVATE </item>
       <item> PRIVATE_HEADER </item>
+      <item> PROCESS </item>
       <item> PROGRAM </item>
       <item> PROGRAMS </item>
       <item> PROGRAM_ARGS </item>
@@ -389,6 +400,7 @@
       <item> REGULAR_EXPRESSION </item>
       <item> RELATIVE </item>
       <item> RELATIVE_PATH </item>
+      <item> RELEASE </item>
       <item> REMOVE </item>
       <item> REMOVE_AT </item>
       <item> REMOVE_DUPLICATES </item>
@@ -455,8 +467,11 @@
       <item> UNIX_COMMAND </item>
       <item> UNKNOWN </item>
       <item> UPLOAD </item>
+      <item> UPPER </item>
+      <item> USES_TERMINAL </item>
       <item> USE_SOURCE_PERMISSIONS </item>
       <item> UTC </item>
+      <item> UUID </item>
       <item> VALUE </item>
       <item> VARIABLE </item>
       <item> VERBATIM </item>
@@ -505,6 +520,9 @@
       <item> ADVANCED </item>
       <item> ALIASED_TARGET </item>
       <item> ALLOW_DUPLICATE_CUSTOM_TARGETS </item>
+      <item> ANDROID_API </item>
+      <item> ANDROID_API_MIN </item>
+      <item> ANDROID_GUI </item>
       <item> ARCHIVE_OUTPUT_DIRECTORY </item>
       <item> ARCHIVE_OUTPUT_NAME </item>
       <item> ATTACHED_FILES </item>
@@ -524,14 +542,28 @@
       <item> CACHE_VARIABLES </item>
       <item> CLEAN_NO_CUSTOM </item>
       <item> CMAKE_CONFIGURE_DEPENDS </item>
+      <item> CMAKE_CXX_KNOWN_FEATURES </item>
+      <item> CMAKE_C_KNOWN_FEATURES </item>
       <item> COMPATIBLE_INTERFACE_BOOL </item>
       <item> COMPATIBLE_INTERFACE_NUMBER_MAX </item>
       <item> COMPATIBLE_INTERFACE_NUMBER_MIN </item>
       <item> COMPATIBLE_INTERFACE_STRING </item>
       <item> COMPILE_DEFINITIONS </item>
+      <item> COMPILE_FEATURES </item>
       <item> COMPILE_FLAGS </item>
       <item> COMPILE_OPTIONS </item>
+      <item> COMPILE_PDB_NAME </item>
+      <item> COMPILE_PDB_OUTPUT_DIRECTORY </item>
       <item> COST </item>
+      <item> CPACK_NEVER_OVERWRITE </item>
+      <item> CPACK_PERMANENT </item>
+      <item> CPACK_WIX_ACL </item>
+      <item> CXX_EXTENSIONS </item>
+      <item> CXX_STANDARD </item>
+      <item> CXX_STANDARD_REQUIRED </item>
+      <item> C_EXTENSIONS </item>
+      <item> C_STANDARD </item>
+      <item> C_STANDARD_REQUIRED </item>
       <item> DEBUG_CONFIGURATIONS </item>
       <item> DEBUG_POSTFIX </item>
       <item> DEFINE_SYMBOL </item>
@@ -583,10 +615,12 @@
       <item> INSTALL_RPATH_USE_LINK_PATH </item>
       <item> INTERFACE_AUTOUIC_OPTIONS </item>
       <item> INTERFACE_COMPILE_DEFINITIONS </item>
+      <item> INTERFACE_COMPILE_FEATURES </item>
       <item> INTERFACE_COMPILE_OPTIONS </item>
       <item> INTERFACE_INCLUDE_DIRECTORIES </item>
       <item> INTERFACE_LINK_LIBRARIES </item>
       <item> INTERFACE_POSITION_INDEPENDENT_CODE </item>
+      <item> INTERFACE_SOURCES </item>
       <item> INTERFACE_SYSTEM_INCLUDE_DIRECTORIES </item>
       <item> INTERPROCEDURAL_OPTIMIZATION </item>
       <item> IN_TRY_COMPILE </item>
@@ -669,6 +703,8 @@
       <item> VARIABLES </item>
       <item> VERSION </item>
       <item> VISIBILITY_INLINES_HIDDEN </item>
+      <item> VS_DEPLOYMENT_CONTENT </item>
+      <item> VS_DEPLOYMENT_LOCATION </item>
       <item> VS_DOTNET_REFERENCES </item>
       <item> VS_DOTNET_TARGET_FRAMEWORK_VERSION </item>
       <item> VS_GLOBAL_KEYWORD </item>
@@ -679,13 +715,19 @@
       <item> VS_SCC_LOCALPATH </item>
       <item> VS_SCC_PROJECTNAME </item>
       <item> VS_SCC_PROVIDER </item>
+      <item> VS_SHADER_ENTRYPOINT </item>
+      <item> VS_SHADER_FLAGS </item>
+      <item> VS_SHADER_MODEL </item>
+      <item> VS_SHADER_TYPE </item>
+      <item> VS_WINRT_COMPONENT </item>
       <item> VS_WINRT_EXTENSIONS </item>
       <item> VS_WINRT_REFERENCES </item>
       <item> WILL_FAIL </item>
       <item> WIN32_EXECUTABLE </item>
       <item> WORKING_DIRECTORY </item>
       <item> WRAP_EXCLUDE </item>
-      <item> __CMAKE_DELETE_CACHE_CHANGE_VARS_ </item>
+      <item> XCODE_EXPLICIT_FILE_TYPE </item>
+      <item> XCODE_LAST_KNOWN_FILE_TYPE </item>
     </list>
 
     <!-- these are "special" and don't show up in the generated lists -->
@@ -701,6 +743,9 @@
       <item> BORLAND </item>
       <item> BUILD_SHARED_LIBS </item>
       <item> CMAKE_ABSOLUTE_DESTINATION_FILES </item>
+      <item> CMAKE_ANDROID_API </item>
+      <item> CMAKE_ANDROID_API_MIN </item>
+      <item> CMAKE_ANDROID_GUI </item>
       <item> CMAKE_APPBUNDLE_PATH </item>
       <item> CMAKE_AR </item>
       <item> CMAKE_ARCHIVE_OUTPUT_DIRECTORY </item>
@@ -727,6 +772,7 @@
       <item> CMAKE_COLOR_MAKEFILE </item>
       <item> CMAKE_COMMAND </item>
       <item> CMAKE_COMPILER_2005 </item>
+      <item> CMAKE_COMPILE_PDB_OUTPUT_DIRECTORY </item>
       <item> CMAKE_CONFIGURATION_TYPES </item>
       <item> CMAKE_CROSSCOMPILING </item>
       <item> CMAKE_CTEST_COMMAND </item>
@@ -735,6 +781,14 @@
       <item> CMAKE_CURRENT_LIST_FILE </item>
       <item> CMAKE_CURRENT_LIST_LINE </item>
       <item> CMAKE_CURRENT_SOURCE_DIR </item>
+      <item> CMAKE_CXX_COMPILE_FEATURES </item>
+      <item> CMAKE_CXX_EXTENSIONS </item>
+      <item> CMAKE_CXX_STANDARD </item>
+      <item> CMAKE_CXX_STANDARD_REQUIRED </item>
+      <item> CMAKE_C_COMPILE_FEATURES </item>
+      <item> CMAKE_C_EXTENSIONS </item>
+      <item> CMAKE_C_STANDARD </item>
+      <item> CMAKE_C_STANDARD_REQUIRED </item>
       <item> CMAKE_DEBUG_POSTFIX </item>
       <item> CMAKE_DEBUG_TARGET_PROPERTIES </item>
       <item> CMAKE_DL_LIBS </item>
@@ -743,11 +797,15 @@
       <item> CMAKE_ERROR_ON_ABSOLUTE_INSTALL_DESTINATION </item>
       <item> CMAKE_EXECUTABLE_SUFFIX </item>
       <item> CMAKE_EXE_LINKER_FLAGS </item>
+      <item> CMAKE_EXPORT_NO_PACKAGE_REGISTRY </item>
       <item> CMAKE_EXTRA_GENERATOR </item>
       <item> CMAKE_EXTRA_SHARED_LIBRARY_SUFFIXES </item>
       <item> CMAKE_FIND_LIBRARY_PREFIXES </item>
       <item> CMAKE_FIND_LIBRARY_SUFFIXES </item>
       <item> CMAKE_FIND_NO_INSTALL_PREFIX </item>
+      <item> CMAKE_FIND_PACKAGE_NAME </item>
+      <item> CMAKE_FIND_PACKAGE_NO_PACKAGE_REGISTRY </item>
+      <item> CMAKE_FIND_PACKAGE_NO_SYSTEM_PACKAGE_REGISTRY </item>
       <item> CMAKE_FIND_PACKAGE_WARN_NO_MODULE </item>
       <item> CMAKE_FIND_ROOT_PATH </item>
       <item> CMAKE_FIND_ROOT_PATH_MODE_INCLUDE </item>
@@ -761,6 +819,7 @@
       <item> CMAKE_Fortran_MODOUT_FLAG </item>
       <item> CMAKE_Fortran_MODULE_DIRECTORY </item>
       <item> CMAKE_GENERATOR </item>
+      <item> CMAKE_GENERATOR_PLATFORM </item>
       <item> CMAKE_GENERATOR_TOOLSET </item>
       <item> CMAKE_GNUtoMS </item>
       <item> CMAKE_HOME_DIRECTORY </item>
@@ -780,6 +839,7 @@
       <item> CMAKE_INCLUDE_DIRECTORIES_PROJECT_BEFORE </item>
       <item> CMAKE_INCLUDE_PATH </item>
       <item> CMAKE_INSTALL_DEFAULT_COMPONENT_NAME </item>
+      <item> CMAKE_INSTALL_MESSAGE </item>
       <item> CMAKE_INSTALL_NAME_DIR </item>
       <item> CMAKE_INSTALL_PREFIX </item>
       <item> CMAKE_INSTALL_RPATH </item>
@@ -802,6 +862,7 @@
       <item> CMAKE_MACOSX_RPATH </item>
       <item> CMAKE_MAJOR_VERSION </item>
       <item> CMAKE_MAKE_PROGRAM </item>
+      <item> CMAKE_MATCH_COUNT </item>
       <item> CMAKE_MFC_FLAG </item>
       <item> CMAKE_MINIMUM_REQUIRED_VERSION </item>
       <item> CMAKE_MINOR_VERSION </item>
@@ -864,6 +925,8 @@
       <item> CMAKE_VS_INTEL_Fortran_PROJECT_VERSION </item>
       <item> CMAKE_VS_MSBUILD_COMMAND </item>
       <item> CMAKE_VS_MSDEV_COMMAND </item>
+      <item> CMAKE_VS_NsightTegra_VERSION </item>
+      <item> CMAKE_VS_PLATFORM_NAME </item>
       <item> CMAKE_VS_PLATFORM_TOOLSET </item>
       <item> CMAKE_WARN_DEPRECATED </item>
       <item> CMAKE_WARN_ON_ABSOLUTE_INSTALL_DESTINATION </item>
@@ -877,14 +940,63 @@
       <item> CPACK_PACKAGING_INSTALL_PREFIX </item>
       <item> CPACK_SET_DESTDIR </item>
       <item> CPACK_WARN_ON_ABSOLUTE_INSTALL_DESTINATION </item>
+      <item> CTEST_BINARY_DIRECTORY </item>
+      <item> CTEST_BUILD_COMMAND </item>
+      <item> CTEST_BUILD_NAME </item>
+      <item> CTEST_BZR_COMMAND </item>
+      <item> CTEST_BZR_UPDATE_OPTIONS </item>
+      <item> CTEST_CHECKOUT_COMMAND </item>
+      <item> CTEST_CONFIGURATION_TYPE </item>
+      <item> CTEST_CONFIGURE_COMMAND </item>
+      <item> CTEST_COVERAGE_COMMAND </item>
+      <item> CTEST_COVERAGE_EXTRA_FLAGS </item>
+      <item> CTEST_CURL_OPTIONS </item>
+      <item> CTEST_CVS_CHECKOUT </item>
+      <item> CTEST_CVS_COMMAND </item>
+      <item> CTEST_CVS_UPDATE_OPTIONS </item>
+      <item> CTEST_DROP_LOCATION </item>
+      <item> CTEST_DROP_METHOD </item>
+      <item> CTEST_DROP_SITE </item>
+      <item> CTEST_DROP_SITE_CDASH </item>
+      <item> CTEST_DROP_SITE_PASSWORD </item>
+      <item> CTEST_DROP_SITE_USER </item>
+      <item> CTEST_GIT_COMMAND </item>
+      <item> CTEST_GIT_UPDATE_CUSTOM </item>
+      <item> CTEST_GIT_UPDATE_OPTIONS </item>
+      <item> CTEST_HG_COMMAND </item>
+      <item> CTEST_HG_UPDATE_OPTIONS </item>
+      <item> CTEST_MEMORYCHECK_COMMAND </item>
+      <item> CTEST_MEMORYCHECK_COMMAND_OPTIONS </item>
+      <item> CTEST_MEMORYCHECK_SANITIZER_OPTIONS </item>
+      <item> CTEST_MEMORYCHECK_SUPPRESSIONS_FILE </item>
+      <item> CTEST_MEMORYCHECK_TYPE </item>
+      <item> CTEST_NIGHTLY_START_TIME </item>
+      <item> CTEST_P4_CLIENT </item>
+      <item> CTEST_P4_COMMAND </item>
+      <item> CTEST_P4_OPTIONS </item>
+      <item> CTEST_P4_UPDATE_OPTIONS </item>
+      <item> CTEST_SCP_COMMAND </item>
+      <item> CTEST_SITE </item>
+      <item> CTEST_SOURCE_DIRECTORY </item>
+      <item> CTEST_SVN_COMMAND </item>
+      <item> CTEST_SVN_OPTIONS </item>
+      <item> CTEST_SVN_UPDATE_OPTIONS </item>
+      <item> CTEST_TEST_TIMEOUT </item>
+      <item> CTEST_TRIGGER_SITE </item>
+      <item> CTEST_UPDATE_COMMAND </item>
+      <item> CTEST_UPDATE_OPTIONS </item>
+      <item> CTEST_UPDATE_VERSION_ONLY </item>
+      <item> CTEST_USE_LAUNCHERS </item>
       <item> CYGWIN </item>
       <item> ENV </item>
       <item> EXECUTABLE_OUTPUT_PATH </item>
       <item> LIBRARY_OUTPUT_PATH </item>
+      <item> MINGW </item>
       <item> MSVC </item>
       <item> MSVC10 </item>
       <item> MSVC11 </item>
       <item> MSVC12 </item>
+      <item> MSVC14 </item>
       <item> MSVC60 </item>
       <item> MSVC70 </item>
       <item> MSVC71 </item>
@@ -902,6 +1014,9 @@
       <item> PROJECT_VERSION_TWEAK </item>
       <item> UNIX </item>
       <item> WIN32 </item>
+      <item> WINCE </item>
+      <item> WINDOWS_PHONE </item>
+      <item> WINDOWS_STORE </item>
       <item> XCODE_VERSION </item>
     </list>
 
@@ -914,15 +1029,17 @@
     </list>
 
     <list name="generator_expr">
+      <!-- Logical Expressions -->
       <item> 0 </item>
       <item> 1 </item>
-      <item> CONFIG </item>
       <item> BOOL </item>
+      <item> AND </item>
+      <item> OR </item>
+      <item> NOT </item>
       <item> STREQUAL </item>
-      <item> JOIN </item>
-      <item> TARGET_NAME </item>
-      <item> INSTALL_INTERFACE </item>
-      <item> BUILD_INTERFACE </item>
+      <item> EQUAL </item>
+      <item> CONFIG </item>
+      <item> PLATFORM_ID </item>
       <item> C_COMPILER_ID </item>
       <item> CXX_COMPILER_ID </item>
       <item> VERSION_GREATER </item>
@@ -930,22 +1047,39 @@
       <item> VERSION_EQUAL </item>
       <item> C_COMPILER_VERSION </item>
       <item> CXX_COMPILER_VERSION </item>
+      <item> TARGET_POLICY </item>
+      <item> COMPILER_FEATURES </item>
+      <!-- Informational Expressions -->
+      <item> CONFIGURATION </item>
       <item> TARGET_FILE </item>
-      <item> TARGET_LINKER_FILE </item>
-      <item> TARGET_SONAME_FILE </item>
-      <item> TARGET_FILE_DIR </item>
       <item> TARGET_FILE_NAME </item>
-      <item> TARGET_DIR </item>
-      <item> TARGET_LINKER_FILE_DIR </item>
+      <item> TARGET_FILE_DIR </item>
+      <item> TARGET_LINKER_FILE </item>
       <item> TARGET_LINKER_FILE_NAME </item>
-      <item> TARGET_SONAME_FILE_DIR </item>
+      <item> TARGET_LINKER_FILE_DIR </item>
+      <item> TARGET_SONAME_FILE </item>
       <item> TARGET_SONAME_FILE_NAME </item>
+      <item> TARGET_SONAME_FILE_DIR </item>
+      <item> TARGET_PDB_FILE </item>
+      <item> TARGET_PDB_FILE_NAME </item>
+      <item> TARGET_PDB_FILE_DIR </item>
       <item> TARGET_PROPERTY </item>
+      <item> INSTALL_PREFIX </item>
+      <!-- Output Expressions -->
+      <item> JOIN </item>
+      <item> ANGLE-R </item>
+      <item> COMMA </item>
+      <item> SEMICOLON </item>
+      <item> TARGET_NAME </item>
+      <item> LINK_ONLY </item>
+      <item> INSTALL_INTERFACE </item>
+      <item> BUILD_INTERFACE </item>
+      <item> LOWER_CASE </item>
+      <item> UPPER_CASE </item>
+      <item> MAKE_C_IDENTIFIER </item>
       <item> TARGET_OBJECTS </item>
-      <item> TARGET_POLICY </item>
-      <item> AND </item>
-      <item> OR </item>
-      <item> NOT </item>
+      <!-- TODO Is this from CMake 2.x? -->
+      <item> TARGET_DIR </item>
     </list>
 
     <contexts>
@@ -970,20 +1104,21 @@
         <RegExpr String="\bwhile\b" attribute="Commands" context="Command Args" beginRegion="while" insensitive="true" />
         <RegExpr String="\bendwhile\b" attribute="Commands" context="Command Args" endRegion="while" insensitive="true" />
 
-        <keyword attribute="Commands" context="Command Args" String="commands" insensitive="true"/>
-        <keyword attribute="Third-Party Commands" context="#stay" String="itkvtk_commands" insensitive="true"/>
-        <RegExpr attribute="Region Marker" context="#stay" String="#\s*BEGIN.*$" beginRegion="block" firstNonSpace="true"/>
-        <RegExpr attribute="Region Marker" context="#stay" String="#\s*END.*$" endRegion="block" firstNonSpace="true"/>
+        <keyword attribute="Commands" context="Command Args" String="commands" insensitive="true" />
+        <keyword attribute="Third-Party Commands" context="#stay" String="itkvtk_commands" insensitive="true" />
+        <RegExpr attribute="Region Marker" context="#stay" String="#\s*BEGIN.*$" beginRegion="block" firstNonSpace="true" />
+        <RegExpr attribute="Region Marker" context="#stay" String="#\s*END.*$" endRegion="block" firstNonSpace="true" />
         <RegExpr attribute="Region Marker" context="RST Documentation" String="^#\[(=*)\[\.rst:" column="0" />
         <RegExpr attribute="Comment" context="Bracketed Comment" String="^#\[(=*)\[" column="0" />
-        <DetectChar attribute="Comment" context="Comment" char="#"/>
-        <IncludeRules context="Detect Variables"/>
-        <RegExpr attribute="Macros" context="Macro Args" String="\w+\s*(?=\()"/>
+        <DetectChar attribute="Comment" context="Comment" char="#" />
+        <IncludeRules context="Detect Variables" />
+        <RegExpr attribute="Macros" context="Macro Args" String="\w+\s*(?=\()" />
       </context>
       <!-- ATTENTION Do not change the context name! Or change a generation script accordingly -->
       <context attribute="Normal Text" lineEndContext="#stay" name="Detect More Builtin Variables">
         <!-- generated rules -->
         <RegExpr attribute="Builtin CMake Variable" context="#stay" String="\bCMAKE_COMPILER_IS_GNU[A-Za-z_][A-Za-z_0-9]*\b" />
+        <RegExpr attribute="Builtin CMake Variable" context="#stay" String="\bCMAKE_COMPILE_PDB_OUTPUT_DIRECTORY_[A-Za-z_][A-Za-z_0-9]*\b" />
         <RegExpr attribute="Builtin CMake Variable" context="#stay" String="\bCMAKE_DISABLE_FIND_PACKAGE_[A-Za-z_][A-Za-z_0-9]*\b" />
         <RegExpr attribute="Builtin CMake Variable" context="#stay" String="\bCMAKE_EXE_LINKER_FLAGS_[A-Za-z_][A-Za-z_0-9]*\b" />
         <RegExpr attribute="Builtin CMake Variable" context="#stay" String="\bCMAKE_MAP_IMPORTED_CONFIG_[A-Za-z_][A-Za-z_0-9]*\b" />
@@ -995,6 +1130,7 @@
         <RegExpr attribute="Builtin CMake Variable" context="#stay" String="\bCMAKE_SHARED_LINKER_FLAGS_[A-Za-z_][A-Za-z_0-9]*\b" />
         <RegExpr attribute="Builtin CMake Variable" context="#stay" String="\bCMAKE_STATIC_LINKER_FLAGS_[A-Za-z_][A-Za-z_0-9]*\b" />
         <RegExpr attribute="Builtin CMake Variable" context="#stay" String="\bCMAKE_USER_MAKE_RULES_OVERRIDE_[A-Za-z_][A-Za-z_0-9]*\b" />
+        <RegExpr attribute="Builtin CMake Variable" context="#stay" String="\bCMAKE_XCODE_ATTRIBUTE_[A-Za-z_][A-Za-z_0-9]*\b" />
         <RegExpr attribute="Builtin CMake Variable" context="#stay" String="\bCMAKE_[A-Za-z_][A-Za-z_0-9]*_ARCHIVE_APPEND\b" />
         <RegExpr attribute="Builtin CMake Variable" context="#stay" String="\bCMAKE_[A-Za-z_][A-Za-z_0-9]*_ARCHIVE_CREATE\b" />
         <RegExpr attribute="Builtin CMake Variable" context="#stay" String="\bCMAKE_[A-Za-z_][A-Za-z_0-9]*_ARCHIVE_FINISH\b" />
@@ -1031,6 +1167,7 @@
         <RegExpr attribute="Builtin CMake Variable" context="#stay" String="\bCMAKE_[A-Za-z_][A-Za-z_0-9]*_SIZEOF_DATA_PTR\b" />
         <RegExpr attribute="Builtin CMake Variable" context="#stay" String="\bCMAKE_[A-Za-z_][A-Za-z_0-9]*_SOURCE_FILE_EXTENSIONS\b" />
         <RegExpr attribute="Builtin CMake Variable" context="#stay" String="\bCMAKE_[A-Za-z_][A-Za-z_0-9]*_VISIBILITY_PRESET\b" />
+        <RegExpr attribute="Builtin CMake Variable" context="#stay" String="\b[A-Za-z_][A-Za-z_0-9]*_BINARY_DIR\b" />
         <RegExpr attribute="Builtin CMake Variable" context="#stay" String="\b[A-Za-z_][A-Za-z_0-9]*_SOURCE_DIR\b" />
         <RegExpr attribute="Builtin CMake Variable" context="#stay" String="\b[A-Za-z_][A-Za-z_0-9]*_VERSION\b" />
         <RegExpr attribute="Builtin CMake Variable" context="#stay" String="\b[A-Za-z_][A-Za-z_0-9]*_VERSION_MAJOR\b" />
@@ -1039,51 +1176,51 @@
         <RegExpr attribute="Builtin CMake Variable" context="#stay" String="\b[A-Za-z_][A-Za-z_0-9]*_VERSION_TWEAK\b" />
       </context>
       <context attribute="Normal Text" lineEndContext="#stay" name="Detect Builtin Variables">
-        <keyword attribute="Builtin CMake Variable" context="#stay" String="cmake_vars" insensitive="false"/>
+        <keyword attribute="Builtin CMake Variable" context="#stay" String="cmake_vars" insensitive="false" />
         <IncludeRules context="Detect More Builtin Variables" />
       </context>
       <context attribute="CMake Variable" lineEndContext="#pop" name="VarSubst">
-        <IncludeRules context="Detect Builtin Variables"/>
+        <IncludeRules context="Detect Builtin Variables" />
         <DetectIdentifier />
-        <DetectChar attribute="CMake Variable" context="#pop" char="}"/>
-        <IncludeRules context="Detect Variables"/>
+        <DetectChar attribute="CMake Variable" context="#pop" char="}" />
+        <IncludeRules context="Detect Variables" />
       </context>
       <context attribute="Normal Text" lineEndContext="#stay" name="Detect Variables">
-        <RegExpr attribute="Environment Variable" context="#stay" String="\$ENV\{\s*[\w-]+\s*\}"/>
+        <RegExpr attribute="Environment Variable" context="#stay" String="\$ENV\{\s*[\w-]+\s*\}" />
         <Detect2Chars attribute="CMake Variable" context="VarSubst" char="$" char1="{" />
       </context>
       <context attribute="Generator Expression" lineEndContext="#pop#pop" name="DetectSimpleGEEnd">
-        <DetectChar attribute="Generator Expression" context="#pop#pop" char="&gt;"/>
+        <DetectChar attribute="Generator Expression" context="#pop#pop" char="&gt;" />
       </context>
       <context attribute="Generator Expression" lineEndContext="#pop" name="Generator Expression">
-        <IncludeRules context="Detect Generator Expressions"/>
-        <DetectChar attribute="Generator Expression" context="#pop" char="&gt;"/>
-        <keyword attribute="Generator Expression Keyword" context="DetectSimpleGEEnd" String="simple_generator_expr" insensitive="false"/>
-        <keyword attribute="Generator Expression Keyword" context="#stay" String="generator_expr" insensitive="false"/>
-        <IncludeRules context="Detect Variables"/>
+        <IncludeRules context="Detect Generator Expressions" />
+        <DetectChar attribute="Generator Expression" context="#pop" char="&gt;" />
+        <keyword attribute="Generator Expression Keyword" context="DetectSimpleGEEnd" String="simple_generator_expr" insensitive="false" />
+        <keyword attribute="Generator Expression Keyword" context="#stay" String="generator_expr" insensitive="false" />
+        <IncludeRules context="Detect Variables" />
       </context>
       <context attribute="Normal Text" lineEndContext="#stay" name="Detect Generator Expressions">
         <Detect2Chars attribute="Generator Expression" context="Generator Expression" char="$" char1="&lt;" />
       </context>
       <context attribute="Normal Text" lineEndContext="#stay" name="Command Args">
-        <keyword attribute="Special Args" context="#stay" String="special_args"/>
-        <keyword attribute="Special Args" context="#stay" String="extra_special_args"/>
+        <keyword attribute="Special Args" context="#stay" String="special_args" />
+        <keyword attribute="Special Args" context="#stay" String="extra_special_args" />
         <!-- NOTE Handle CMP<NNN> as a special arg -->
         <RegExpr attribute="Special Args" context="#stay" String="\bCMP[0-9]+\b" />
-        <keyword attribute="Properties" context="#stay" String="properties"/>
-        <keyword attribute="Properties" context="#stay" String="extra_properties"/>
-        <IncludeRules context="Detect Builtin Variables"/>
-        <IncludeRules context="Macro Args"/>
+        <keyword attribute="Properties" context="#stay" String="properties" />
+        <keyword attribute="Properties" context="#stay" String="extra_properties" />
+        <IncludeRules context="Detect Builtin Variables" />
+        <IncludeRules context="Macro Args" />
       </context>
       <context attribute="Normal Text" lineEndContext="#stay" name="Macro Args">
-        <DetectChar attribute="Normal Text" context="#pop" char=")"/>
-        <RegExpr attribute="Escapes" context="#stay" String="\\[&quot;$n\\]"/>
-        <DetectChar attribute="Strings" context="String" char="&quot;"/>
+        <DetectChar attribute="Normal Text" context="#pop" char=")" />
+        <RegExpr attribute="Escapes" context="#stay" String="\\[&quot;$n\\]" />
+        <DetectChar attribute="Strings" context="String" char="&quot;" />
         <RegExpr attribute="Strings" context="Bracketed String" String="\[(=*)\[" />
-        <DetectChar attribute="Comment" context="Comment" char="#"/>
-        <IncludeRules context="Detect Builtin Variables"/>
-        <IncludeRules context="Detect Variables"/>
-        <IncludeRules context="Detect Generator Expressions"/>
+        <DetectChar attribute="Comment" context="Comment" char="#" />
+        <IncludeRules context="Detect Builtin Variables" />
+        <IncludeRules context="Detect Variables" />
+        <IncludeRules context="Detect Generator Expressions" />
       </context>
       <context attribute="Comment" lineEndContext="#pop" name="Comment">
         <LineContinue attribute="Comment" context="#pop" />
@@ -1101,14 +1238,14 @@
       <context attribute="Strings" lineEndContext="#stay" name="String">
         <RegExpr attribute="Strings" context="#pop" String="&quot;(?=[ );]|$)" />
         <RegExpr attribute="Escapes" context="#stay" String="\\[&quot;$nrt\\]" />
-        <IncludeRules context="Detect Variables"/>
-        <IncludeRules context="Detect Generator Expressions"/>
+        <IncludeRules context="Detect Variables" />
+        <IncludeRules context="Detect Generator Expressions" />
       </context>
       <context attribute="Strings" lineEndContext="#stay" name="Bracketed String" dynamic="true">
         <RegExpr attribute="Strings" context="#pop" String="\]%1\]" dynamic="true" />
       </context>
-
     </contexts>
+
     <itemDatas>
       <itemData name="Normal Text" defStyleNum="dsNormal" spellChecking="false" />
       <itemData name="Special Args" defStyleNum="dsOthers" spellChecking="false" />
@@ -1128,12 +1265,13 @@
       <itemData name="Comment" defStyleNum="dsComment" spellChecking="true" />
       <itemData name="Region Marker" defStyleNum="dsRegionMarker" spellChecking="false" />
     </itemDatas>
+
   </highlighting>
 
   <general>
     <comments>
-      <comment name="singleLine" start="#"/>
+      <comment name="singleLine" start="#" />
     </comments>
-    <keywords casesensitive="1"/>
+    <keywords casesensitive="1" />
   </general>
 </language>
diff --git a/part/syntax/data/ppd.xml b/part/syntax/data/ppd.xml
index 796bd90..cfe9a77 100644
--- a/part/syntax/data/ppd.xml
+++ b/part/syntax/data/ppd.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 
 <!DOCTYPE language SYSTEM "language.dtd" []>
 
@@ -9,7 +9,7 @@ The following documentation is available for PPD:
 - CUPS PPD Extensions: http://www.cups.org/documentation.php/doc-1.4/spec-ppd.html
 -->
 
-<language name="PostScript Printer Description" version="0.1" kateversion="2.4" section="Markup" extensions="*.ppd" author="Lukas Sommer" mimetype="application/vnd.cups-ppd" license="public domain">
+<language name="PostScript Printer Description" version="0.2" kateversion="2.4" section="Markup" extensions="*.ppd" author="Lukas Sommer" mimetype="application/vnd.cups-ppd" license="public domain">
 
     <highlighting>
 
@@ -26,7 +26,17 @@ The following documentation is available for PPD:
             <context attribute="Comment" lineEndContext="#pop" name="contextComment">
                 <IncludeRules context="##Alerts"/>
             </context>
-            <context attribute="Value" lineEndContext="#pop" name="contextValue"></context>
+            <context attribute="Value" lineEndContext="#pop" name="contextValue">
+                <DetectSpaces/>
+                <DetectChar attribute="Value" context="contextValueMultiLine" char="&quot;" />
+                <RegExpr attribute="Value" context="contextValueSingleLine" String="."/>
+            </context>
+            <context attribute="Value" lineEndContext="#stay" name="contextValueMultiLine">
+                <DetectSpaces/>
+                <DetectChar attribute="Value" context="#pop" char="&quot;" />
+            </context>
+            <context attribute="Value" lineEndContext="#pop" name="contextValueSingleLine">
+            </context>
         </contexts>
 
         <itemDatas>
openSUSE Build Service is sponsored by