瀏覽代碼

Help: Create proper identifiers for keywords in QtHelp.

This is necessary in order for the QHelpEngineCore::linksForIdentifier API
to work.

 http://doc-snapshot.qt-project.org/qt5-5.3/qhelpenginecore.html#linksForIdentifier

That API is used by QtCreator to enable contextual links to help files.
Stephen Kelly 11 年之前
父節點
當前提交
b5002631c0
共有 2 個文件被更改,包括 37 次插入0 次删除
  1. 5 0
      Utilities/Sphinx/CMakeLists.txt
  2. 32 0
      Utilities/Sphinx/create_identifiers.py

+ 5 - 0
Utilities/Sphinx/CMakeLists.txt

@@ -88,6 +88,11 @@ if(SPHINX_QTHELP)
     COMMAND ${CMAKE_COMMAND} "-DQTHELP_DIR=${CMAKE_CURRENT_BINARY_DIR}/qthelp/"
       "-DCMake_VERSION=${CMake_VERSION_MAJOR}${CMake_VERSION_MINOR}${CMake_VERSION_PATCH}"
       -P "${CMAKE_CURRENT_SOURCE_DIR}/fixup_qthelp_names.cmake"
+
+    # Create proper identifiers. Workaround for
+    # https://bitbucket.org/birkenfeld/sphinx/issue/1491/qthelp-should-generate-identifiers-for
+    COMMAND "${CMAKE_CURRENT_SOURCE_DIR}/create_identifiers.py" "${CMAKE_CURRENT_BINARY_DIR}/qthelp/"
+
     COMMAND qcollectiongenerator ${CMAKE_CURRENT_BINARY_DIR}/qthelp/CMake.qhcp
   )
 endif()

+ 32 - 0
Utilities/Sphinx/create_identifiers.py

@@ -0,0 +1,32 @@
+#!/usr/bin/env python
+
+import sys, os
+
+if len(sys.argv) != 2:
+  sys.exit(-1)
+name = sys.argv[1] + "/CMake.qhp"
+
+f = open(name)
+
+if not f:
+  sys.exit(-1)
+
+lines = f.read().splitlines()
+
+if not lines:
+  sys.exit(-1)
+
+newlines = []
+
+for line in lines:
+  if "<keyword name=\"command\"" in line:
+    if not "id=\"" in line:
+      prefix = "<keyword name=\"command\" "
+      part1, part2 = line.split(prefix)
+      head, tail = part2.split("#command:")
+      cmdname, rest = tail.split("\"")
+      line = part1 + prefix + "id=\"command/" + cmdname + "\" " + part2
+  newlines.append(line + "\n")
+
+f = open(name, "w")
+f.writelines(newlines)