Title: [168713] releases/WebKitGTK/webkit-2.4
Revision
168713
Author
[email protected]
Date
2014-05-13 12:30:17 -0700 (Tue, 13 May 2014)

Log Message

Merge 165114 - [GTK][CMake] Generate documentation for the DOM bindings
https://bugs.webkit.org/show_bug.cgi?id=126211

Reviewed by Carlos Garcia Campos.

Source/WebCore:

* PlatformGTK.cmake: Add some files to the GObjectDOMBindings build, so that the
doc generation succeeds. Have the GObjectDOMBindings_INSTALLED_HEADERS variable contain
all installed headers and use another variable for GIR generation. Create the configuration
file for the gtkdoc generation.

Source/WebKit:

* PlatformGTK.cmake: The list of headers for GIR generation has a better name
now.

Source/WebKit2:

* PlatformGTK.cmake: The list of headers for GIR generation has a better name now.

Tools:

* gtk/GNUmakefile.am: No longer generation sections and SGML files in the makefile.
* gtk/generate-gtkdoc: Call the code from webkitdom.py to generate sections and SGML files.
* gtk/generate-webkitdom-doc-files: Removed.
* gtk/webkitdom.py: Moved WebKit GObject DOM bindings doc generation code here, so
that it can be called by generate-gtkdoc.


Conflicts:
	Source/WebCore/ChangeLog
	Source/WebKit/ChangeLog
	Source/WebKit2/ChangeLog
	Tools/ChangeLog

Modified Paths

Removed Paths

Diff

Modified: releases/WebKitGTK/webkit-2.4/Source/WebCore/PlatformGTK.cmake (168712 => 168713)


--- releases/WebKitGTK/webkit-2.4/Source/WebCore/PlatformGTK.cmake	2014-05-13 19:29:57 UTC (rev 168712)
+++ releases/WebKitGTK/webkit-2.4/Source/WebCore/PlatformGTK.cmake	2014-05-13 19:30:17 UTC (rev 168713)
@@ -482,6 +482,7 @@
         bindings/gobject/DOMObjectCache.cpp
         bindings/gobject/GObjectEventListener.cpp
         bindings/gobject/WebKitDOMCustom.cpp
+        bindings/gobject/WebKitDOMDeprecated.cpp
         bindings/gobject/WebKitDOMEventTarget.cpp
         bindings/gobject/WebKitDOMHTMLPrivate.cpp
         bindings/gobject/WebKitDOMObject.cpp
@@ -668,6 +669,9 @@
          ${DERIVED_SOURCES_GOBJECT_DOM_BINDINGS_DIR}/webkitdomdefines.h
          ${DERIVED_SOURCES_GOBJECT_DOM_BINDINGS_DIR}/webkitdom.h
          ${WEBCORE_DIR}/bindings/gobject/WebKitDOMCustom.h
+         ${WEBCORE_DIR}/bindings/gobject/WebKitDOMDeprecated.h
+         ${WEBCORE_DIR}/bindings/gobject/WebKitDOMEventTarget.h
+         ${WEBCORE_DIR}/bindings/gobject/WebKitDOMObject.h
     )
     file(GLOB GObjectDOMBindingsSymbolsFiles
         "${WEBCORE_DIR}/bindings/gobject/WebKitDOM*.symbols"
@@ -680,9 +684,6 @@
         list(APPEND GObjectDOMBindingsSymbolsFiles ${DERIVED_SOURCES_GOBJECT_DOM_BINDINGS_DIR}/WebKitDOM${classname}.symbols)
     endforeach ()
 
-    # Propagate this variable to the parent scope, so that it can be used in other parts of the build.
-    set(GObjectDOMBindings_INSTALLED_HEADERS ${GObjectDOMBindings_INSTALLED_HEADERS} PARENT_SCOPE)
-
     set(GOBJECT_DOM_BINDINGS_FEATURES_DEFINES "LANGUAGE_GOBJECT=1 ${FEATURE_DEFINES_WITH_SPACE_SEPARATOR}")
     string(REPLACE "ENABLE_INDEXED_DATABASE=1" "" GOBJECT_DOM_BINDINGS_FEATURES_DEFINES ${GOBJECT_DOM_BINDINGS_FEATURES_DEFINES})
     string(REPLACE REGEX "ENABLE_SVG[A-Z_]+=1" "" GOBJECT_DOM_BINDINGS_FEATURES_DEFINES ${GOBJECT_DOM_BINDINGS_FEATURES_DEFINES})
@@ -728,11 +729,33 @@
         fake-installed-webkitdom-headers
     )
 
+    file(WRITE ${CMAKE_BINARY_DIR}/gtkdoc-webkitdom.cfg
+        "[webkitdomgtk]\n"
+        "pkgconfig_file=${WebKit2_PKGCONFIG_FILE}\n"
+        "namespace=webkit_dom\n"
+        "cflags=-I${CMAKE_SOURCE_DIR}/Source\n"
+        "       -I${WEBCORE_DIR}/bindings\n"
+        "       -I${WEBCORE_DIR}/bindings/gobject\n"
+        "       -I${DERIVED_SOURCES_GOBJECT_DOM_BINDINGS_DIR}\n"
+        "doc_dir=${DERIVED_SOURCES_GOBJECT_DOM_BINDINGS_DIR}/docs\n"
+        "source_dirs=${DERIVED_SOURCES_GOBJECT_DOM_BINDINGS_DIR}\n"
+        "            ${WEBCORE_DIR}/bindings/gobject\n"
+        "headers=${GObjectDOMBindings_INSTALLED_HEADERS}\n"
+    )
+
     install(FILES ${GObjectDOMBindings_INSTALLED_HEADERS}
-                  bindings/gobject/WebKitDOMEventTarget.h
-                  bindings/gobject/WebKitDOMDeprecated.h
-                  bindings/gobject/WebKitDOMObject.h
             DESTINATION "${WEBKITGTK_HEADER_INSTALL_DIR}/webkitdom"
     )
+
+    # Some installed headers are not on the list of headers used for gir generation.
+    set(GObjectDOMBindings_GIR_HEADERS ${GObjectDOMBindings_INSTALLED_HEADERS})
+    list(REMOVE_ITEM GObjectDOMBindings_GIR_HEADERS
+         bindings/gobject/WebKitDOMEventTarget.h
+         bindings/gobject/WebKitDOMDeprecated.h
+         bindings/gobject/WebKitDOMObject.h)
+
+    # Propagate this variable to the parent scope, so that it can be used in other parts of the build.
+    set(GObjectDOMBindings_GIR_HEADERS ${GObjectDOMBindings_GIR_HEADERS} PARENT_SCOPE)
+
 endif ()
 

Modified: releases/WebKitGTK/webkit-2.4/Source/WebKit/PlatformGTK.cmake (168712 => 168713)


--- releases/WebKitGTK/webkit-2.4/Source/WebKit/PlatformGTK.cmake	2014-05-13 19:29:57 UTC (rev 168712)
+++ releases/WebKitGTK/webkit-2.4/Source/WebKit/PlatformGTK.cmake	2014-05-13 19:30:17 UTC (rev 168713)
@@ -201,7 +201,7 @@
         -I${DERIVED_SOURCES_DIR}
         -I${DERIVED_SOURCES_WEBKITGTK_DIR}
         -I${WEBCORE_DIR}/platform/gtk
-        ${GObjectDOMBindings_INSTALLED_HEADERS}
+        ${GObjectDOMBindings_GIR_HEADERS}
         ${WebKitGTK_INSTALLED_HEADERS}
         ${WEBKIT_DIR}/gtk/webkit/*.cpp
 )

Modified: releases/WebKitGTK/webkit-2.4/Source/WebKit2/PlatformGTK.cmake (168712 => 168713)


--- releases/WebKitGTK/webkit-2.4/Source/WebKit2/PlatformGTK.cmake	2014-05-13 19:29:57 UTC (rev 168712)
+++ releases/WebKitGTK/webkit-2.4/Source/WebKit2/PlatformGTK.cmake	2014-05-13 19:30:17 UTC (rev 168713)
@@ -750,7 +750,7 @@
         -I${FORWARDING_HEADERS_WEBKIT2GTK_DIR}
         -I${FORWARDING_HEADERS_WEBKIT2GTK_EXTENSION_DIR}
         -I${WEBKIT2_DIR}/WebProcess/InjectedBundle/API/gtk
-        ${GObjectDOMBindings_INSTALLED_HEADERS}
+        ${GObjectDOMBindings_GIR_HEADERS}
         ${WebKit2WebExtension_INSTALLED_HEADERS}
         ${WEBKIT2_DIR}/WebProcess/InjectedBundle/API/gtk/*.cpp
 )

Modified: releases/WebKitGTK/webkit-2.4/Tools/gtk/GNUmakefile.am (168712 => 168713)


--- releases/WebKitGTK/webkit-2.4/Tools/gtk/GNUmakefile.am	2014-05-13 19:29:57 UTC (rev 168712)
+++ releases/WebKitGTK/webkit-2.4/Tools/gtk/GNUmakefile.am	2014-05-13 19:30:17 UTC (rev 168713)
@@ -30,22 +30,8 @@
 	gtkdoc-webkit2gtk.cfg
 endif
 
-$(top_builddir)/DerivedSources/webkitdom/docs/webkitdomgtk-docs.sgml: $(gdom_symbol_files) $(srcdir)/Tools/gtk/generate-webkitdom-doc-files
-	$(AM_V_GEN)mkdir -p $(top_builddir)/DerivedSources/webkitdom/docs \
-	&& echo $(gdom_symbol_files) | $(PYTHON) $(srcdir)/Tools/gtk/generate-webkitdom-doc-files docs > $@
-
-$(top_builddir)/DerivedSources/webkitdom/docs/webkitdomgtk-sections.txt: $(gdom_symbol_files) $(srcdir)/Tools/gtk/generate-webkitdom-doc-files
-	$(AM_V_GEN)mkdir -p $(top_builddir)/DerivedSources/webkitdom/docs \
-	&& echo $(gdom_symbol_files) | $(PYTHON) $(srcdir)/Tools/gtk/generate-webkitdom-doc-files sections > $@
-
-BUILT_SOURCES += \
-	$(top_builddir)/DerivedSources/webkitdom/docs/webkitdomgtk-docs.sgml \
-	$(top_builddir)/DerivedSources/webkitdom/docs/webkitdomgtk-sections.txt
-
 docs_build_dependencies += \
 	libGObjectDOMBindings.la \
-	$(top_builddir)/DerivedSources/webkitdom/docs/webkitdomgtk-docs.sgml \
-	$(top_builddir)/DerivedSources/webkitdom/docs/webkitdomgtk-sections.txt \
 	gtkdoc-webkitdom.cfg
 
 docs-build.stamp: $(docs_build_dependencies)

Modified: releases/WebKitGTK/webkit-2.4/Tools/gtk/generate-gtkdoc (168712 => 168713)


--- releases/WebKitGTK/webkit-2.4/Tools/gtk/generate-gtkdoc	2014-05-13 19:29:57 UTC (rev 168712)
+++ releases/WebKitGTK/webkit-2.4/Tools/gtk/generate-gtkdoc	2014-05-13 19:30:17 UTC (rev 168713)
@@ -25,6 +25,7 @@
 import logging
 import os.path
 import sys
+import webkitdom
 
 def configure_logging(verbose):
     level = logging.DEBUG if verbose else logging.INFO
@@ -194,9 +195,10 @@
 
     prepare_environment_for_gtkdoc_generation()
 
+    webkitdom.write_doc_files()
+    generate_documentation_for_config(common.build_path('gtkdoc-webkitdom.cfg'))
+
     saw_webkit1_warnings = generate_documentation_for_config(common.build_path('gtkdoc-webkitgtk.cfg'))
     saw_webkit2_warnings = generate_documentation_for_config(common.build_path('gtkdoc-webkit2gtk.cfg'))
-    if not common.is_cmake_build():
-        generate_documentation_for_config(common.build_path('gtkdoc-webkitdom.cfg'))
 
     sys.exit(saw_webkit1_warnings or saw_webkit2_warnings)

Deleted: releases/WebKitGTK/webkit-2.4/Tools/gtk/generate-webkitdom-doc-files (168712 => 168713)


--- releases/WebKitGTK/webkit-2.4/Tools/gtk/generate-webkitdom-doc-files	2014-05-13 19:29:57 UTC (rev 168712)
+++ releases/WebKitGTK/webkit-2.4/Tools/gtk/generate-webkitdom-doc-files	2014-05-13 19:30:17 UTC (rev 168713)
@@ -1,216 +0,0 @@
-#!/usr/bin/env python
-# Copyright (C) 2013 Igalia S.L.
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-# 02110-1301  USA
-
-import os
-import re
-import sys
-
-class WebKitDOMDocGenerator:
-
-    DELETED_CLASSES = ["WebKitDOMBarInfo", "WebKitDOMHTMLPropertiesCollection", "WebKitDOMMemoryInfo", "WebKitDOMMicroDataItemValue", "WebKitDOMPropertyNodeList" ]
-
-    def write_header(self):
-        pass
-
-    def write_section(self, symbol_file):
-        raise NotImplementedError
-
-    def write_deleted_classes(self):
-        raise NotImplementedError
-
-    def write_footer(self):
-        pass
-
-class WebKitDOMDocGeneratorDocs(WebKitDOMDocGenerator):
-
-    def write_header(self):
-        sys.stdout.write('''<?xml version="1.0"?>
-<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
-               "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd" [
-<!ENTITY version SYSTEM "version.xml">
-]>
-<book id="index" xmlns:xi="http://www.w3.org/2003/XInclude">
-  <bookinfo>
-    <title>WebKitDOMGTK+ Reference Manual</title>
-    <releaseinfo>for WebKitDOMGTK+ &version;</releaseinfo>
-  </bookinfo>
-
-  <chapter>
-    <title>Class Overview</title>
-''')
-
-    def write_section(self, symbol_file):
-        basename = os.path.basename(symbol_file)
-        sys.stdout.write('    <xi:include href="" % basename.replace(".symbols", ".xml"))
-
-    def write_deleted_classes(self):
-        for class_name in self.DELETED_CLASSES:
-            sys.stdout.write('    <xi:include href="" % class_name)
-
-    def write_footer(self):
-        sys.stdout.write('''  </chapter>
-
-  <index id="index-all">
-    <title>Index</title>
-    <xi:include href="" /></xi:include>
-  </index>
-  <index id="api-index-deprecated" role="deprecated">
-    <title>Index of deprecated symbols</title>
-    <xi:include href="" /></xi:include>
-  </index>
-
-  <xi:include href="" /></xi:include>
-</book>
-''')
-
-class WebKitDOMDocGeneratorSections(WebKitDOMDocGenerator):
-
-    def __init__(self, deprecated_symbol_file):
-        self._first_decamelize_re = re.compile('(.)([A-Z][a-z]+)')
-        self._second_decamelize_re = re.compile('([a-z0-9])([A-Z])')
-        self._dom_class_re = re.compile('(^WebKitDOM)(.+)$')
-        self._function_re = re.compile('^.+ (.+)\((.+)\)$')
-
-        self._deprecated_symbols = self._deprecated_symbols(deprecated_symbol_file)
-
-    def _dom_class(self, class_name):
-        return self._dom_class_re.sub(r'\2', class_name)
-
-    def _dom_class_decamelize(self, class_name):
-        s1 = self._first_decamelize_re.sub(r'\1_\2', self._dom_class(class_name))
-        retval = self._second_decamelize_re.sub(r'\1_\2', s1)
-
-        # Fix some exceptions.
-        retval = retval.replace('Web_Kit', 'WebKit')
-        retval = retval.replace('X_Path', 'XPath')
-        retval = retval.replace('HTMLI_Frame', 'HTML_IFrame')
-
-        return retval
-
-    def _deleted_class(self, function):
-        for deleted_class in self.DELETED_CLASSES:
-            decamelized = 'webkit_dom_%s' % self._dom_class_decamelize(deleted_class).lower()
-            if function.startswith(decamelized):
-                return deleted_class
-        return None
-
-    def _deprecated_symbols(self, symbol_file):
-        retval = {}
-        f = open(symbol_file, 'r')
-        for line in f.readlines():
-            match = self._function_re.match(line)
-            if not match:
-                continue
-
-            function = match.group(1)
-            args = match.group(2).split(', ')
-            class_name = args[0].strip('*')
-            if class_name == 'void':
-                class_name = self._deleted_class(function)
-
-            retval.setdefault(class_name, []).append(function)
-
-        return retval
-
-    def _symbol_list(self, symbol_file):
-        retval = []
-        f = open(symbol_file, 'r')
-        for line in f.readlines():
-            match = self._function_re.match(line)
-            if not match or match.group(1).endswith('get_type'):
-                continue
-            retval.append(match.group(1))
-
-        return retval
-
-    def write_section(self, symbol_file):
-        class_name = os.path.basename(symbol_file).replace(".symbols", "")
-        is_custom = class_name == 'WebKitDOMCustom'
-        is_interface = class_name == 'WebKitDOMEventTarget'
-        is_object = class_name == 'WebKitDOMObject'
-        sys.stdout.write('<SECTION>\n')
-        sys.stdout.write('<FILE>%s</FILE>\n<TITLE>%s</TITLE>\n' % (class_name, class_name))
-        if not is_custom:
-            sys.stdout.write('%s\n' % class_name)
-        sys.stdout.write('\n')
-        sys.stdout.write('\n'.join(self._symbol_list(symbol_file)) + '\n')
-        try:
-            deprecated_functions = self._deprecated_symbols[class_name]
-            sys.stdout.write('\n'.join(deprecated_functions) + '\n')
-        except KeyError:
-            pass
-        if not is_custom:
-            sys.stdout.write('\n<SUBSECTION Standard>\n')
-            sys.stdout.write('%sClass\n' % class_name)
-            dom_class = self._dom_class_decamelize(class_name).upper()
-            sys.stdout.write('WEBKIT_TYPE_DOM_%s\n' % dom_class)
-            sys.stdout.write('WEBKIT_DOM_%s\n' % dom_class)
-            if is_object:
-                sys.stdout.write('WEBKIT_IS_DOM_%s\n' % dom_class)
-            else:
-                sys.stdout.write('WEBKIT_DOM_IS_%s\n' % dom_class)
-            sys.stdout.write('WEBKIT_DOM_%s_CLASS\n' % dom_class)
-            if is_interface:
-                sys.stdout.write('WEBKIT_DOM_%s_GET_IFACE\n' % dom_class)
-            else:
-                if is_object:
-                    sys.stdout.write('WEBKIT_IS_DOM_%s_CLASS\n' % dom_class)
-                else:
-                    sys.stdout.write('WEBKIT_DOM_IS_%s_CLASS\n' % dom_class)
-                sys.stdout.write('WEBKIT_DOM_%s_GET_CLASS\n' % dom_class)
-            sys.stdout.write('\n<SUBSECTION Private>\n')
-            if is_object:
-                sys.stdout.write('%sPrivate\n' % class_name)
-            sys.stdout.write('webkit_dom_%s_get_type\n' % dom_class.lower())
-        sys.stdout.write('</SECTION>\n\n')
-
-    def write_deleted_classes(self):
-        for class_name in self.DELETED_CLASSES:
-            sys.stdout.write('<SECTION>\n')
-            sys.stdout.write('<FILE>%s</FILE>\n<TITLE>%s</TITLE>\n' % (class_name, class_name))
-            sys.stdout.write('\n'.join([name for name in self._deprecated_symbols[class_name] if not name.endswith('get_type')]) + '\n')
-            sys.stdout.write('\n<SUBSECTION Private>\n')
-            sys.stdout.write('webkit_dom_%s_get_type\n' % self._dom_class_decamelize(class_name).lower())
-            sys.stdout.write('</SECTION>\n\n')
-
-    def write_footer(self):
-        sys.stdout.write('<SECTION>\n')
-        sys.stdout.write('<FILE>webkitdomdefines</FILE>\n<TITLE>WebKitDOMDefines</TITLE>\n')
-        sys.stdout.write('<SUBSECTION Private>\n')
-        sys.stdout.write('WEBKIT_API\nWEBKIT_DEPRECATED\nWEBKIT_DEPRECATED_FOR\n')
-        sys.stdout.write('</SECTION>\n\n')
-
-
-symbol_files = sys.stdin.read().strip('\n').split(' ')
-if 'docs' in sys.argv[1:]:
-    generator = WebKitDOMDocGeneratorDocs()
-elif 'sections' in sys.argv[1:]:
-    deprecated_symbol_file = None
-    for symbol_file in symbol_files:
-        if 'WebKitDOMDeprecated' in symbol_file:
-            deprecated_symbol_file = symbol_file
-            break
-    generator = WebKitDOMDocGeneratorSections(deprecated_symbol_file)
-
-generator.write_header()
-for symbol_file in symbol_files:
-    if 'WebKitDOMDeprecated' in symbol_file:
-        continue
-    generator.write_section(symbol_file)
-generator.write_deleted_classes()
-generator.write_footer()

Modified: releases/WebKitGTK/webkit-2.4/Tools/gtk/webkitdom.py (168712 => 168713)


--- releases/WebKitGTK/webkit-2.4/Tools/gtk/webkitdom.py	2014-05-13 19:29:57 UTC (rev 168712)
+++ releases/WebKitGTK/webkit-2.4/Tools/gtk/webkitdom.py	2014-05-13 19:30:17 UTC (rev 168713)
@@ -18,11 +18,235 @@
 
 import common
 import os
+import re
 import sys
 
 from ConfigParser import SafeConfigParser
 
 
+class WebKitDOMDocGenerator(object):
+
+    DELETED_CLASSES = [
+        "WebKitDOMBarInfo",
+        "WebKitDOMHTMLPropertiesCollection",
+        "WebKitDOMMemoryInfo",
+        "WebKitDOMMicroDataItemValue",
+        "WebKitDOMPropertyNodeList"]
+
+    def __init__(self, symbol_files, file_handle):
+        self._symbol_files = symbol_files
+        self._file_handle = file_handle
+
+    def write_header(self):
+        pass
+
+    def write_section(self, symbol_file):
+        raise NotImplementedError
+
+    def write_deleted_classes(self):
+        raise NotImplementedError
+
+    def write_footer(self):
+        pass
+
+    def write(self, string):
+        self._file_handle.write(string)
+
+    @staticmethod
+    def is_deprecated_symbol_file(file_path):
+        return 'WebKitDOMDeprecated' in file_path
+
+    def generate(self):
+        self.write_header()
+        for symbol_file in self._symbol_files:
+            if WebKitDOMDocGenerator.is_deprecated_symbol_file(symbol_file):
+                continue
+            self.write_section(symbol_file)
+        self.write_deleted_classes()
+        self.write_footer()
+
+
+class WebKitDOMDocGeneratorSGML(WebKitDOMDocGenerator):
+    def write_header(self):
+        self.write('''<?xml version="1.0"?>
+<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
+               "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd" [
+<!ENTITY version SYSTEM "version.xml">
+]>
+<book id="index" xmlns:xi="http://www.w3.org/2003/XInclude">
+  <bookinfo>
+    <title>WebKitDOMGTK+ Reference Manual</title>
+    <releaseinfo>for WebKitDOMGTK+ &version;</releaseinfo>
+  </bookinfo>
+
+  <chapter>
+    <title>Class Overview</title>
+''')
+
+    def write_section(self, symbol_file):
+        basename = os.path.basename(symbol_file)
+        self.write('    <xi:include href="" % basename.replace(".symbols", ".xml"))
+
+    def write_deleted_classes(self):
+        for class_name in self.DELETED_CLASSES:
+            self.write('    <xi:include href="" % class_name)
+
+    def write_footer(self):
+        self.write('''  </chapter>
+
+  <index id="index-all">
+    <title>Index</title>
+    <xi:include href="" /></xi:include>
+  </index>
+  <index id="api-index-deprecated" role="deprecated">
+    <title>Index of deprecated symbols</title>
+    <xi:include href="" /></xi:include>
+  </index>
+
+  <xi:include href="" /></xi:include>
+</book>
+''')
+
+
+class WebKitDOMDocGeneratorSections(WebKitDOMDocGenerator):
+    def __init__(self, symbol_files, file_handle):
+        super(WebKitDOMDocGeneratorSections, self).__init__(symbol_files, file_handle)
+
+        self._first_decamelize_re = re.compile('(.)([A-Z][a-z]+)')
+        self._second_decamelize_re = re.compile('([a-z0-9])([A-Z])')
+        self._dom_class_re = re.compile('(^WebKitDOM)(.+)$')
+        self._function_re = re.compile('^.+ (.+)\((.+)\)$')
+
+        self.deprecated_symbosl = {}
+        for symbol_file in symbol_files:
+            if WebKitDOMDocGenerator.is_deprecated_symbol_file(symbol_file):
+                self._deprecated_symbols = self._find_deprecated_symbols(symbol_file)
+                break
+
+    def _dom_class(self, class_name):
+        return self._dom_class_re.sub(r'\2', class_name)
+
+    def _dom_class_decamelize(self, class_name):
+        s1 = self._first_decamelize_re.sub(r'\1_\2', self._dom_class(class_name))
+        retval = self._second_decamelize_re.sub(r'\1_\2', s1)
+
+        # Fix some exceptions.
+        retval = retval.replace('Web_Kit', 'WebKit')
+        retval = retval.replace('X_Path', 'XPath')
+        retval = retval.replace('HTMLI_Frame', 'HTML_IFrame')
+
+        return retval
+
+    def _deleted_class(self, function):
+        for deleted_class in self.DELETED_CLASSES:
+            decamelized = 'webkit_dom_%s' % self._dom_class_decamelize(deleted_class).lower()
+            if function.startswith(decamelized):
+                return deleted_class
+        return None
+
+    def _find_deprecated_symbols(self, symbol_file):
+        retval = {}
+        f = open(symbol_file, 'r')
+        for line in f.readlines():
+            match = self._function_re.match(line)
+            if not match:
+                continue
+
+            function = match.group(1)
+            args = match.group(2).split(', ')
+            class_name = args[0].strip('*')
+            if class_name == 'void':
+                class_name = self._deleted_class(function)
+
+            retval.setdefault(class_name, []).append(function)
+
+        return retval
+
+    def _symbol_list(self, symbol_file):
+        retval = []
+        f = open(symbol_file, 'r')
+        for line in f.readlines():
+            match = self._function_re.match(line)
+            if not match or match.group(1).endswith('get_type'):
+                continue
+            retval.append(match.group(1))
+
+        return retval
+
+    def write_section(self, symbol_file):
+        class_name = os.path.basename(symbol_file).replace(".symbols", "")
+        is_custom = class_name == 'WebKitDOMCustom'
+        is_interface = class_name == 'WebKitDOMEventTarget'
+        is_object = class_name == 'WebKitDOMObject'
+        self.write('<SECTION>\n')
+        self.write('<FILE>%s</FILE>\n<TITLE>%s</TITLE>\n' % (class_name, class_name))
+        if not is_custom:
+            self.write('%s\n' % class_name)
+        self.write('\n')
+        self.write('\n'.join(self._symbol_list(symbol_file)) + '\n')
+        try:
+            deprecated_functions = self._deprecated_symbols[class_name]
+            self.write('\n'.join(deprecated_functions) + '\n')
+        except KeyError:
+            pass
+        if not is_custom:
+            self.write('\n<SUBSECTION Standard>\n')
+            self.write('%sClass\n' % class_name)
+            dom_class = self._dom_class_decamelize(class_name).upper()
+            self.write('WEBKIT_TYPE_DOM_%s\n' % dom_class)
+            self.write('WEBKIT_DOM_%s\n' % dom_class)
+            if is_object:
+                self.write('WEBKIT_IS_DOM_%s\n' % dom_class)
+            else:
+                self.write('WEBKIT_DOM_IS_%s\n' % dom_class)
+            self.write('WEBKIT_DOM_%s_CLASS\n' % dom_class)
+            if is_interface:
+                self.write('WEBKIT_DOM_%s_GET_IFACE\n' % dom_class)
+            else:
+                if is_object:
+                    self.write('WEBKIT_IS_DOM_%s_CLASS\n' % dom_class)
+                else:
+                    self.write('WEBKIT_DOM_IS_%s_CLASS\n' % dom_class)
+                self.write('WEBKIT_DOM_%s_GET_CLASS\n' % dom_class)
+            self.write('\n<SUBSECTION Private>\n')
+            if is_object:
+                self.write('%sPrivate\n' % class_name)
+            self.write('webkit_dom_%s_get_type\n' % dom_class.lower())
+        self.write('</SECTION>\n\n')
+
+    def write_deleted_classes(self):
+        for class_name in self.DELETED_CLASSES:
+            self.write('<SECTION>\n')
+            self.write('<FILE>%s</FILE>\n<TITLE>%s</TITLE>\n' % (class_name, class_name))
+            self.write('\n'.join([name for name in self._deprecated_symbols[class_name] if not name.endswith('get_type')]) + '\n')
+            self.write('\n<SUBSECTION Private>\n')
+            self.write('webkit_dom_%s_get_type\n' % self._dom_class_decamelize(class_name).lower())
+            self.write('</SECTION>\n\n')
+
+    def write_footer(self):
+        self.write('<SECTION>\n')
+        self.write('<FILE>webkitdomdefines</FILE>\n<TITLE>WebKitDOMDefines</TITLE>\n')
+        self.write('<SUBSECTION Private>\n')
+        self.write('WEBKIT_API\nWEBKIT_DEPRECATED\nWEBKIT_DEPRECATED_FOR\n')
+        self.write('</SECTION>\n\n')
+
+
+def write_doc_files():
+    doc_dir = common.build_path('DerivedSources', 'webkitdom', 'docs')
+
+    try:
+        os.mkdir(doc_dir)
+    except:
+        pass  # Commonly happens if the directory already exists.
+
+    with open(os.path.join(doc_dir, 'webkitdomgtk-sections.txt'), 'w') as sections_file:
+        generator = WebKitDOMDocGeneratorSections(get_all_webkitdom_symbol_files(), sections_file)
+        generator.generate()
+    with open(os.path.join(doc_dir, 'webkitdomgtk-docs.sgml'), 'w') as sgml_file:
+        generator = WebKitDOMDocGeneratorSGML(get_all_webkitdom_symbol_files(), sgml_file)
+        generator.generate()
+
+
 def header_name_list_from_gtkdoc_config_file():
     config_file = common.build_path('gtkdoc-webkitdom.cfg')
     if not os.path.isfile(config_file):
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to