From 05dbe07fa7237069e4d850e42f9b1e90977ad318 Mon Sep 17 00:00:00 2001 From: Bjoern Kerler Date: Thu, 31 Mar 2022 19:33:00 +0200 Subject: [PATCH] Bump to 3.10 --- .clang-format | 104 + .gitignore | 6 - CMakeLists.txt | 191 +- MANIFEST.md | 17 + apps/CMakeLists.txt | 17 +- cmake/Modules/CMakeParseArgumentsCopy.cmake | 2 +- cmake/Modules/FindCppUnit.cmake | 36 - cmake/Modules/FindGnuradioRuntime.cmake | 36 - cmake/Modules/GrMiscUtils.cmake | 210 - cmake/Modules/GrPlatform.cmake | 46 - cmake/Modules/GrPython.cmake | 227 - cmake/Modules/GrSwig.cmake | 229 - cmake/Modules/GrTest.cmake | 133 - cmake/Modules/UseSWIG.cmake | 304 -- ...ig.cmake => gnuradio-bruningaConfig.cmake} | 20 +- cmake/Modules/targetConfig.cmake.in | 14 + docs/CMakeLists.txt | 17 +- docs/README.bruninga | 2 +- docs/doxygen/CMakeLists.txt | 18 +- docs/doxygen/Doxyfile.in | 61 +- docs/doxygen/Doxyfile.swig_doc.in | 1890 -------- docs/doxygen/doxyxml/__init__.py | 22 +- .../__pycache__/__init__.cpython-39.pyc | Bin 0 -> 1990 bytes .../doxyxml/__pycache__/base.cpython-39.pyc | Bin 0 -> 6114 bytes .../__pycache__/doxyindex.cpython-39.pyc | Bin 0 -> 8811 bytes .../doxyxml/__pycache__/text.cpython-39.pyc | Bin 0 -> 1282 bytes docs/doxygen/doxyxml/base.py | 35 +- docs/doxygen/doxyxml/doxyindex.py | 138 +- .../__pycache__/__init__.cpython-39.pyc | Bin 0 -> 408 bytes .../__pycache__/compound.cpython-39.pyc | Bin 0 -> 23234 bytes .../__pycache__/compoundsuper.cpython-39.pyc | Bin 0 -> 317740 bytes .../__pycache__/index.cpython-39.pyc | Bin 0 -> 2355 bytes .../__pycache__/indexsuper.cpython-39.pyc | Bin 0 -> 19245 bytes docs/doxygen/doxyxml/generated/compound.py | 151 +- .../doxyxml/generated/compoundsuper.py | 2566 ++++++++--- docs/doxygen/doxyxml/generated/index.py | 9 +- docs/doxygen/doxyxml/generated/indexsuper.py | 132 +- docs/doxygen/doxyxml/text.py | 25 +- docs/doxygen/other/doxypy.py | 446 ++ docs/doxygen/other/group_defs.dox | 1 - docs/doxygen/pydoc_macros.h | 19 + docs/doxygen/swig_doc.py | 255 -- docs/doxygen/update_pydoc.py | 372 ++ examples/aprs-loopback.grc | 697 +-- examples/aprs-rxtx.grc | 767 +--- examples/aprs-uhd.grc | 2254 ++++------ examples/aprs-wav.grc | 3816 +++++------------ grc/CMakeLists.txt | 10 +- grc/bruninga_ax25_fsk_mod.block.yml | 46 + grc/bruninga_ax25_fsk_mod.xml | 74 - grc/bruninga_direwolf_agc.block.yml | 37 + grc/bruninga_direwolf_agc.xml | 55 - grc/bruninga_fsk_demod.block.yml | 26 + grc/bruninga_fsk_demod.xml | 39 - grc/bruninga_hdlc_to_ax25.block.yml | 15 + grc/bruninga_hdlc_to_ax25.xml | 29 - grc/bruninga_str_to_aprs.block.yml | 30 + grc/bruninga_str_to_aprs.xml | 50 - include/bruninga/CMakeLists.txt | 26 - include/bruninga/api.h | 33 - include/gnuradio/bruninga/CMakeLists.txt | 16 + include/gnuradio/bruninga/api.h | 22 + .../{ => gnuradio}/bruninga/direwolf_agc.h | 4 +- lib/CMakeLists.txt | 73 +- lib/direwolf_agc_impl.h | 2 +- python/CMakeLists.txt | 48 - python/__init__.py | 42 - python/bruninga/.gitignore | 5 + python/bruninga/CMakeLists.txt | 47 + python/bruninga/__init__.py | 29 + python/{ => bruninga}/ax25_fsk_mod.py | 22 +- python/bruninga/bindings/CMakeLists.txt | 48 + python/bruninga/bindings/README.md | 0 python/bruninga/bindings/bind_oot_file.py | 54 + .../bruninga/bindings/direwolf_agc_python.cc | 61 + python/bruninga/bindings/docstrings/README.md | 1 + .../docstrings/direwolf_agc_pydoc_template.h | 27 + python/bruninga/bindings/header_utils.py | 80 + python/bruninga/bindings/python_bindings.cc | 55 + python/{ => bruninga}/fsk_demod.py | 21 +- python/{ => bruninga}/hdlc_to_ax25.py | 16 +- python/{ => bruninga}/packet.py | 4 +- python/{ => bruninga}/str_to_aprs.py | 8 +- python/build_utils.py | 226 - python/build_utils_codes.py | 52 - swig/CMakeLists.txt | 65 - swig/bruninga_swig.i | 16 - 87 files changed, 6236 insertions(+), 10563 deletions(-) create mode 100644 .clang-format delete mode 100644 .gitignore create mode 100644 MANIFEST.md delete mode 100644 cmake/Modules/FindCppUnit.cmake delete mode 100644 cmake/Modules/FindGnuradioRuntime.cmake delete mode 100644 cmake/Modules/GrMiscUtils.cmake delete mode 100644 cmake/Modules/GrPlatform.cmake delete mode 100644 cmake/Modules/GrPython.cmake delete mode 100644 cmake/Modules/GrSwig.cmake delete mode 100644 cmake/Modules/GrTest.cmake delete mode 100644 cmake/Modules/UseSWIG.cmake rename cmake/Modules/{bruningaConfig.cmake => gnuradio-bruningaConfig.cmake} (54%) create mode 100644 cmake/Modules/targetConfig.cmake.in delete mode 100644 docs/doxygen/Doxyfile.swig_doc.in create mode 100644 docs/doxygen/doxyxml/__pycache__/__init__.cpython-39.pyc create mode 100644 docs/doxygen/doxyxml/__pycache__/base.cpython-39.pyc create mode 100644 docs/doxygen/doxyxml/__pycache__/doxyindex.cpython-39.pyc create mode 100644 docs/doxygen/doxyxml/__pycache__/text.cpython-39.pyc create mode 100644 docs/doxygen/doxyxml/generated/__pycache__/__init__.cpython-39.pyc create mode 100644 docs/doxygen/doxyxml/generated/__pycache__/compound.cpython-39.pyc create mode 100644 docs/doxygen/doxyxml/generated/__pycache__/compoundsuper.cpython-39.pyc create mode 100644 docs/doxygen/doxyxml/generated/__pycache__/index.cpython-39.pyc create mode 100644 docs/doxygen/doxyxml/generated/__pycache__/indexsuper.cpython-39.pyc create mode 100644 docs/doxygen/other/doxypy.py create mode 100644 docs/doxygen/pydoc_macros.h delete mode 100644 docs/doxygen/swig_doc.py create mode 100644 docs/doxygen/update_pydoc.py create mode 100644 grc/bruninga_ax25_fsk_mod.block.yml delete mode 100644 grc/bruninga_ax25_fsk_mod.xml create mode 100644 grc/bruninga_direwolf_agc.block.yml delete mode 100644 grc/bruninga_direwolf_agc.xml create mode 100644 grc/bruninga_fsk_demod.block.yml delete mode 100644 grc/bruninga_fsk_demod.xml create mode 100644 grc/bruninga_hdlc_to_ax25.block.yml delete mode 100644 grc/bruninga_hdlc_to_ax25.xml create mode 100644 grc/bruninga_str_to_aprs.block.yml delete mode 100644 grc/bruninga_str_to_aprs.xml delete mode 100644 include/bruninga/CMakeLists.txt delete mode 100644 include/bruninga/api.h create mode 100644 include/gnuradio/bruninga/CMakeLists.txt create mode 100644 include/gnuradio/bruninga/api.h rename include/{ => gnuradio}/bruninga/direwolf_agc.h (96%) delete mode 100644 python/CMakeLists.txt delete mode 100644 python/__init__.py create mode 100644 python/bruninga/.gitignore create mode 100644 python/bruninga/CMakeLists.txt create mode 100644 python/bruninga/__init__.py rename python/{ => bruninga}/ax25_fsk_mod.py (90%) create mode 100644 python/bruninga/bindings/CMakeLists.txt create mode 100644 python/bruninga/bindings/README.md create mode 100644 python/bruninga/bindings/bind_oot_file.py create mode 100644 python/bruninga/bindings/direwolf_agc_python.cc create mode 100644 python/bruninga/bindings/docstrings/README.md create mode 100644 python/bruninga/bindings/docstrings/direwolf_agc_pydoc_template.h create mode 100644 python/bruninga/bindings/header_utils.py create mode 100644 python/bruninga/bindings/python_bindings.cc rename python/{ => bruninga}/fsk_demod.py (91%) rename python/{ => bruninga}/hdlc_to_ax25.py (91%) rename python/{ => bruninga}/packet.py (99%) rename python/{ => bruninga}/str_to_aprs.py (94%) delete mode 100644 python/build_utils.py delete mode 100644 python/build_utils_codes.py delete mode 100644 swig/CMakeLists.txt delete mode 100644 swig/bruninga_swig.i diff --git a/.clang-format b/.clang-format new file mode 100644 index 0000000..3e4ddd4 --- /dev/null +++ b/.clang-format @@ -0,0 +1,104 @@ +--- +Language: Cpp +# BasedOnStyle: LLVM +AccessModifierOffset: -4 +AlignAfterOpenBracket: Align +AlignConsecutiveAssignments: false +AlignConsecutiveDeclarations: false +AlignEscapedNewlinesLeft: true +AlignOperands: true +AlignTrailingComments: true +AllowAllParametersOfDeclarationOnNextLine: true +AllowShortBlocksOnASingleLine: false +AllowShortCaseLabelsOnASingleLine: false +AllowShortFunctionsOnASingleLine: All +AllowShortIfStatementsOnASingleLine: false +AllowShortLoopsOnASingleLine: false +AlwaysBreakAfterDefinitionReturnType: None +AlwaysBreakAfterReturnType: None +AlwaysBreakBeforeMultilineStrings: false +AlwaysBreakTemplateDeclarations: true +BinPackArguments: false +BinPackParameters: false +BreakBeforeBraces: Custom +BraceWrapping: + AfterClass: true + AfterControlStatement: false + AfterEnum: false + AfterFunction: true + AfterNamespace: false + AfterObjCDeclaration: false + AfterStruct: false + AfterUnion: false + BeforeCatch: false + BeforeElse: false + IndentBraces: false +BreakBeforeBinaryOperators: None +BreakBeforeTernaryOperators: true +BreakConstructorInitializersBeforeComma: false +BreakAfterJavaFieldAnnotations: false +BreakStringLiterals: true +ColumnLimit: 90 +CommentPragmas: '^ IWYU pragma:' +ConstructorInitializerAllOnOneLineOrOnePerLine: true +ConstructorInitializerIndentWidth: 4 +ContinuationIndentWidth: 4 +Cpp11BracedListStyle: false +DerivePointerAlignment: false +DisableFormat: false +ExperimentalAutoDetectBinPacking: false +ForEachMacros: + - foreach + - Q_FOREACH + - BOOST_FOREACH +IncludeCategories: + - Regex: '^"(gnuradio)/' + Priority: 1 + - Regex: '^<(gnuradio)/' + Priority: 2 + - Regex: '^<(boost)/' + Priority: 98 + - Regex: '^<[a-z]*>$' + Priority: 99 + - Regex: '^".*"$' + Priority: 0 + - Regex: '.*' + Priority: 10 + +IncludeIsMainRegex: '(Test)?$' +IndentCaseLabels: false +IndentWidth: 4 +IndentWrappedFunctionNames: false +JavaScriptQuotes: Leave +JavaScriptWrapImports: true +KeepEmptyLinesAtTheStartOfBlocks: true +MacroBlockBegin: '' +MacroBlockEnd: '' +MaxEmptyLinesToKeep: 2 +NamespaceIndentation: None +ObjCBlockIndentWidth: 2 +ObjCSpaceAfterProperty: false +ObjCSpaceBeforeProtocolList: true +PenaltyBreakBeforeFirstCallParameter: 19 +PenaltyBreakComment: 300 +PenaltyBreakFirstLessLess: 120 +PenaltyBreakString: 1000 +PenaltyExcessCharacter: 1000000 +PenaltyReturnTypeOnItsOwnLine: 60 +PointerAlignment: Left +ReflowComments: true +SortIncludes: true +SpaceAfterCStyleCast: false +SpaceAfterTemplateKeyword: true +SpaceBeforeAssignmentOperators: true +SpaceBeforeParens: ControlStatements +SpaceInEmptyParentheses: false +SpacesBeforeTrailingComments: 1 +SpacesInAngles: false +SpacesInContainerLiterals: true +SpacesInCStyleCastParentheses: false +SpacesInParentheses: false +SpacesInSquareBrackets: false +Standard: Cpp11 +TabWidth: 8 +UseTab: Never diff --git a/.gitignore b/.gitignore deleted file mode 100644 index c376ce2..0000000 --- a/.gitignore +++ /dev/null @@ -1,6 +0,0 @@ -build -*.pyc -*.swp -top_block.py -.unittests -examples/*.py diff --git a/CMakeLists.txt b/CMakeLists.txt index 0590592..0fa80e8 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,154 +1,109 @@ -# Copyright 2011,2012 Free Software Foundation, Inc. +# Copyright 2011-2020 Free Software Foundation, Inc. # -# This file is part of GNU Radio +# This file was generated by gr_modtool, a tool from the GNU Radio framework +# This file is a part of gr-bruninga # -# GNU Radio is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 3, or (at your option) -# any later version. +# SPDX-License-Identifier: GPL-3.0-or-later # -# GNU Radio is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with GNU Radio; see the file COPYING. If not, write to -# the Free Software Foundation, Inc., 51 Franklin Street, -# Boston, MA 02110-1301, USA. +# Select the release build type by default to get optimization flags. +# This has to come before project() which otherwise initializes it. +# Build type can still be overridden by setting -DCMAKE_BUILD_TYPE= +set(CMAKE_BUILD_TYPE "Release" CACHE STRING "") ######################################################################## # Project setup ######################################################################## -cmake_minimum_required(VERSION 2.6) +cmake_minimum_required(VERSION 3.8) project(gr-bruninga CXX C) enable_testing() -#select the release build type by default to get optimization flags -if(NOT CMAKE_BUILD_TYPE) - set(CMAKE_BUILD_TYPE "Release") - message(STATUS "Build type not specified: defaulting to release.") -endif(NOT CMAKE_BUILD_TYPE) -set(CMAKE_BUILD_TYPE ${CMAKE_BUILD_TYPE} CACHE STRING "") +# Install to PyBOMBS target prefix if defined +if(DEFINED ENV{PYBOMBS_PREFIX}) + set(CMAKE_INSTALL_PREFIX $ENV{PYBOMBS_PREFIX}) + message(STATUS "PyBOMBS installed GNU Radio. Setting CMAKE_INSTALL_PREFIX to $ENV{PYBOMBS_PREFIX}") +endif() + +# Make sure our local CMake Modules path comes first +list(INSERT CMAKE_MODULE_PATH 0 ${CMAKE_SOURCE_DIR}/cmake/Modules) +# Find gnuradio to get access to the cmake modules +find_package(Gnuradio "3.10" REQUIRED) + +# Set the version information here +set(VERSION_MAJOR 1) +set(VERSION_API 0) +set(VERSION_ABI 0) +set(VERSION_PATCH 0) -list(APPEND CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake/Modules) +cmake_policy(SET CMP0011 NEW) + +# Enable generation of compile_commands.json for code completion engines +set(CMAKE_EXPORT_COMPILE_COMMANDS ON) ######################################################################## -# Compiler specific setup +# Minimum Version Requirements ######################################################################## -if(CMAKE_COMPILER_IS_GNUCXX AND NOT WIN32) - #http://gcc.gnu.org/wiki/Visibility - add_definitions(-fvisibility=hidden) -endif() + +include(GrMinReq) ######################################################################## -# Find boost +# Compiler settings ######################################################################## -if(UNIX AND EXISTS "/usr/lib64") - list(APPEND BOOST_LIBRARYDIR "/usr/lib64") #fedora 64-bit fix -endif(UNIX AND EXISTS "/usr/lib64") -set(Boost_ADDITIONAL_VERSIONS - "1.35.0" "1.35" "1.36.0" "1.36" "1.37.0" "1.37" "1.38.0" "1.38" "1.39.0" "1.39" - "1.40.0" "1.40" "1.41.0" "1.41" "1.42.0" "1.42" "1.43.0" "1.43" "1.44.0" "1.44" - "1.45.0" "1.45" "1.46.0" "1.46" "1.47.0" "1.47" "1.48.0" "1.48" "1.49.0" "1.49" - "1.50.0" "1.50" "1.51.0" "1.51" "1.52.0" "1.52" "1.53.0" "1.53" "1.54.0" "1.54" - "1.55.0" "1.55" "1.56.0" "1.56" "1.57.0" "1.57" "1.58.0" "1.58" "1.59.0" "1.59" - "1.60.0" "1.60" "1.61.0" "1.61" "1.62.0" "1.62" "1.63.0" "1.63" "1.64.0" "1.64" - "1.65.0" "1.65" "1.66.0" "1.66" "1.67.0" "1.67" "1.68.0" "1.68" "1.69.0" "1.69" -) -find_package(Boost "1.35" COMPONENTS filesystem system) -if(NOT Boost_FOUND) - message(FATAL_ERROR "Boost required to compile bruninga") -endif() +include(GrCompilerSettings) ######################################################################## # Install directories ######################################################################## +include(GrVersion) + include(GrPlatform) #define LIB_SUFFIX -set(GR_RUNTIME_DIR bin) -set(GR_LIBRARY_DIR lib${LIB_SUFFIX}) -set(GR_INCLUDE_DIR include/bruninga) -set(GR_DATA_DIR share) + +if(NOT CMAKE_MODULES_DIR) + set(CMAKE_MODULES_DIR lib${LIB_SUFFIX}/cmake) +endif(NOT CMAKE_MODULES_DIR) + +set(GR_INCLUDE_DIR include/gnuradio/bruninga) +set(GR_CMAKE_DIR ${CMAKE_MODULES_DIR}/gnuradio-bruninga) set(GR_PKG_DATA_DIR ${GR_DATA_DIR}/${CMAKE_PROJECT_NAME}) -set(GR_DOC_DIR ${GR_DATA_DIR}/doc) set(GR_PKG_DOC_DIR ${GR_DOC_DIR}/${CMAKE_PROJECT_NAME}) -set(GR_CONF_DIR etc) set(GR_PKG_CONF_DIR ${GR_CONF_DIR}/${CMAKE_PROJECT_NAME}/conf.d) -set(GR_LIBEXEC_DIR libexec) set(GR_PKG_LIBEXEC_DIR ${GR_LIBEXEC_DIR}/${CMAKE_PROJECT_NAME}) -set(GRC_BLOCKS_DIR ${GR_PKG_DATA_DIR}/grc/blocks) ######################################################################## # On Apple only, set install name and use rpath correctly, if not already set ######################################################################## if(APPLE) - if(NOT CMAKE_INSTALL_NAME_DIR) - set(CMAKE_INSTALL_NAME_DIR - ${CMAKE_INSTALL_PREFIX}/${GR_LIBRARY_DIR} CACHE - PATH "Library Install Name Destination Directory" FORCE) - endif(NOT CMAKE_INSTALL_NAME_DIR) - if(NOT CMAKE_INSTALL_RPATH) - set(CMAKE_INSTALL_RPATH - ${CMAKE_INSTALL_PREFIX}/${GR_LIBRARY_DIR} CACHE - PATH "Library Install RPath" FORCE) - endif(NOT CMAKE_INSTALL_RPATH) - if(NOT CMAKE_BUILD_WITH_INSTALL_RPATH) - set(CMAKE_BUILD_WITH_INSTALL_RPATH ON CACHE - BOOL "Do Build Using Library Install RPath" FORCE) - endif(NOT CMAKE_BUILD_WITH_INSTALL_RPATH) + if(NOT CMAKE_INSTALL_NAME_DIR) + set(CMAKE_INSTALL_NAME_DIR + ${CMAKE_INSTALL_PREFIX}/${GR_LIBRARY_DIR} CACHE + PATH "Library Install Name Destination Directory" FORCE) + endif(NOT CMAKE_INSTALL_NAME_DIR) + if(NOT CMAKE_INSTALL_RPATH) + set(CMAKE_INSTALL_RPATH + ${CMAKE_INSTALL_PREFIX}/${GR_LIBRARY_DIR} CACHE + PATH "Library Install RPath" FORCE) + endif(NOT CMAKE_INSTALL_RPATH) + if(NOT CMAKE_BUILD_WITH_INSTALL_RPATH) + set(CMAKE_BUILD_WITH_INSTALL_RPATH ON CACHE + BOOL "Do Build Using Library Install RPath" FORCE) + endif(NOT CMAKE_BUILD_WITH_INSTALL_RPATH) endif(APPLE) ######################################################################## # Find gnuradio build dependencies ######################################################################## -find_package(CppUnit) find_package(Doxygen) -# Search for GNU Radio and its components and versions. Add any -# components required to the list of GR_REQUIRED_COMPONENTS (in all -# caps such as FILTER or FFT) and change the version to the minimum -# API compatible version required. -set(GR_REQUIRED_COMPONENTS RUNTIME) -find_package(Gnuradio "3.7.2" REQUIRED) - -if(NOT CPPUNIT_FOUND) - message(FATAL_ERROR "CppUnit required to compile bruninga") -endif() - ######################################################################## # Setup doxygen option ######################################################################## if(DOXYGEN_FOUND) - option(ENABLE_DOXYGEN "Build docs using Doxygen" ON) + option(ENABLE_DOXYGEN "Build docs using Doxygen" ON) else(DOXYGEN_FOUND) - option(ENABLE_DOXYGEN "Build docs using Doxygen" OFF) + option(ENABLE_DOXYGEN "Build docs using Doxygen" OFF) endif(DOXYGEN_FOUND) -######################################################################## -# Setup the include and linker paths -######################################################################## -include_directories( - ${CMAKE_SOURCE_DIR}/lib - ${CMAKE_SOURCE_DIR}/include - ${CMAKE_BINARY_DIR}/lib - ${CMAKE_BINARY_DIR}/include - ${Boost_INCLUDE_DIRS} - ${CPPUNIT_INCLUDE_DIRS} - ${GNURADIO_ALL_INCLUDE_DIRS} -) - -link_directories( - ${Boost_LIBRARY_DIRS} - ${CPPUNIT_LIBRARY_DIRS} - ${GNURADIO_RUNTIME_LIBRARY_DIRS} -) - -# Set component parameters -set(GR_BRUNINGA_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/include CACHE INTERNAL "" FORCE) -set(GR_BRUNINGA_SWIG_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/swig CACHE INTERNAL "" FORCE) - ######################################################################## # Create uninstall target ######################################################################## @@ -159,22 +114,36 @@ configure_file( add_custom_target(uninstall ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake -) + ) ######################################################################## # Add subdirectories ######################################################################## -add_subdirectory(include/bruninga) +add_subdirectory(include/gnuradio/bruninga) add_subdirectory(lib) -add_subdirectory(swig) -add_subdirectory(python) -add_subdirectory(grc) add_subdirectory(apps) add_subdirectory(docs) +# NOTE: manually update below to use GRC to generate C++ flowgraphs w/o python +if(ENABLE_PYTHON) + message(STATUS "PYTHON and GRC components are enabled") + add_subdirectory(python/bruninga) + add_subdirectory(grc) +else(ENABLE_PYTHON) + message(STATUS "PYTHON and GRC components are disabled") +endif(ENABLE_PYTHON) ######################################################################## # Install cmake search helper for this library ######################################################################## -install(FILES cmake/Modules/bruningaConfig.cmake - DESTINATION lib/cmake/bruninga + +install(FILES cmake/Modules/gnuradio-bruningaConfig.cmake + DESTINATION ${GR_CMAKE_DIR} ) + +include(CMakePackageConfigHelpers) +configure_package_config_file( + ${PROJECT_SOURCE_DIR}/cmake/Modules/targetConfig.cmake.in + ${CMAKE_CURRENT_BINARY_DIR}/cmake/Modules/${target}Config.cmake + INSTALL_DESTINATION ${GR_CMAKE_DIR} +) + diff --git a/MANIFEST.md b/MANIFEST.md new file mode 100644 index 0000000..77a86cf --- /dev/null +++ b/MANIFEST.md @@ -0,0 +1,17 @@ +title: The BRUNINGA OOT Module +brief: Short description of gr-bruninga +tags: # Tags are arbitrary, but look at CGRAN what other authors are using + - sdr +author: + - Author Name +copyright_owner: + - Copyright Owner 1 +license: +gr_supported_version: # Put a comma separated list of supported GR versions here +#repo: # Put the URL of the repository here, or leave blank for default +#website: # If you have a separate project website, put it here +#icon: # Put a URL to a square image here that will be used as an icon on CGRAN +--- +A longer, multi-line description of gr-bruninga. +You may use some *basic* Markdown here. +If left empty, it will try to find a README file instead. diff --git a/apps/CMakeLists.txt b/apps/CMakeLists.txt index c837d77..0791dda 100644 --- a/apps/CMakeLists.txt +++ b/apps/CMakeLists.txt @@ -1,21 +1,10 @@ # Copyright 2011 Free Software Foundation, Inc. # -# This file is part of GNU Radio +# This file was generated by gr_modtool, a tool from the GNU Radio framework +# This file is a part of gr-bruninga # -# GNU Radio is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 3, or (at your option) -# any later version. +# SPDX-License-Identifier: GPL-3.0-or-later # -# GNU Radio is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with GNU Radio; see the file COPYING. If not, write to -# the Free Software Foundation, Inc., 51 Franklin Street, -# Boston, MA 02110-1301, USA. include(GrPython) diff --git a/cmake/Modules/CMakeParseArgumentsCopy.cmake b/cmake/Modules/CMakeParseArgumentsCopy.cmake index 7ce4c49..66016cb 100644 --- a/cmake/Modules/CMakeParseArgumentsCopy.cmake +++ b/cmake/Modules/CMakeParseArgumentsCopy.cmake @@ -58,7 +58,7 @@ # the new option. # E.g. my_install(TARGETS foo DESTINATION OPTIONAL) would result in # MY_INSTALL_DESTINATION set to "OPTIONAL", but MY_INSTALL_DESTINATION would -# be empty and MY_INSTALL_OPTIONAL would be set to TRUE therefor. +# be empty and MY_INSTALL_OPTIONAL would be set to TRUE therefore. #============================================================================= # Copyright 2010 Alexander Neundorf diff --git a/cmake/Modules/FindCppUnit.cmake b/cmake/Modules/FindCppUnit.cmake deleted file mode 100644 index 9af308f..0000000 --- a/cmake/Modules/FindCppUnit.cmake +++ /dev/null @@ -1,36 +0,0 @@ -# http://www.cmake.org/pipermail/cmake/2006-October/011446.html -# Modified to use pkg config and use standard var names - -# -# Find the CppUnit includes and library -# -# This module defines -# CPPUNIT_INCLUDE_DIR, where to find tiff.h, etc. -# CPPUNIT_LIBRARIES, the libraries to link against to use CppUnit. -# CPPUNIT_FOUND, If false, do not try to use CppUnit. - -INCLUDE(FindPkgConfig) -PKG_CHECK_MODULES(PC_CPPUNIT "cppunit") - -FIND_PATH(CPPUNIT_INCLUDE_DIRS - NAMES cppunit/TestCase.h - HINTS ${PC_CPPUNIT_INCLUDE_DIR} - PATHS - /usr/local/include - /usr/include -) - -FIND_LIBRARY(CPPUNIT_LIBRARIES - NAMES cppunit - HINTS ${PC_CPPUNIT_LIBDIR} - PATHS - ${CPPUNIT_INCLUDE_DIRS}/../lib - /usr/local/lib - /usr/lib -) - -LIST(APPEND CPPUNIT_LIBRARIES ${CMAKE_DL_LIBS}) - -INCLUDE(FindPackageHandleStandardArgs) -FIND_PACKAGE_HANDLE_STANDARD_ARGS(CPPUNIT DEFAULT_MSG CPPUNIT_LIBRARIES CPPUNIT_INCLUDE_DIRS) -MARK_AS_ADVANCED(CPPUNIT_LIBRARIES CPPUNIT_INCLUDE_DIRS) diff --git a/cmake/Modules/FindGnuradioRuntime.cmake b/cmake/Modules/FindGnuradioRuntime.cmake deleted file mode 100644 index afed684..0000000 --- a/cmake/Modules/FindGnuradioRuntime.cmake +++ /dev/null @@ -1,36 +0,0 @@ -INCLUDE(FindPkgConfig) -PKG_CHECK_MODULES(PC_GNURADIO_RUNTIME gnuradio-runtime) - -if(PC_GNURADIO_RUNTIME_FOUND) - # look for include files - FIND_PATH( - GNURADIO_RUNTIME_INCLUDE_DIRS - NAMES gnuradio/top_block.h - HINTS $ENV{GNURADIO_RUNTIME_DIR}/include - ${PC_GNURADIO_RUNTIME_INCLUDE_DIRS} - ${CMAKE_INSTALL_PREFIX}/include - PATHS /usr/local/include - /usr/include - ) - - # look for libs - FIND_LIBRARY( - GNURADIO_RUNTIME_LIBRARIES - NAMES gnuradio-runtime - HINTS $ENV{GNURADIO_RUNTIME_DIR}/lib - ${PC_GNURADIO_RUNTIME_LIBDIR} - ${CMAKE_INSTALL_PREFIX}/lib/ - ${CMAKE_INSTALL_PREFIX}/lib64/ - PATHS /usr/local/lib - /usr/local/lib64 - /usr/lib - /usr/lib64 - ) - - set(GNURADIO_RUNTIME_FOUND ${PC_GNURADIO_RUNTIME_FOUND}) -endif(PC_GNURADIO_RUNTIME_FOUND) - -INCLUDE(FindPackageHandleStandardArgs) -# do not check GNURADIO_RUNTIME_INCLUDE_DIRS, is not set when default include path us used. -FIND_PACKAGE_HANDLE_STANDARD_ARGS(GNURADIO_RUNTIME DEFAULT_MSG GNURADIO_RUNTIME_LIBRARIES) -MARK_AS_ADVANCED(GNURADIO_RUNTIME_LIBRARIES GNURADIO_RUNTIME_INCLUDE_DIRS) diff --git a/cmake/Modules/GrMiscUtils.cmake b/cmake/Modules/GrMiscUtils.cmake deleted file mode 100644 index 9331d5d..0000000 --- a/cmake/Modules/GrMiscUtils.cmake +++ /dev/null @@ -1,210 +0,0 @@ -# Copyright 2010-2011 Free Software Foundation, Inc. -# -# This file is part of GNU Radio -# -# GNU Radio is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 3, or (at your option) -# any later version. -# -# GNU Radio is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with GNU Radio; see the file COPYING. If not, write to -# the Free Software Foundation, Inc., 51 Franklin Street, -# Boston, MA 02110-1301, USA. - -if(DEFINED __INCLUDED_GR_MISC_UTILS_CMAKE) - return() -endif() -set(__INCLUDED_GR_MISC_UTILS_CMAKE TRUE) - -######################################################################## -# Set global variable macro. -# Used for subdirectories to export settings. -# Example: include and library paths. -######################################################################## -function(GR_SET_GLOBAL var) - set(${var} ${ARGN} CACHE INTERNAL "" FORCE) -endfunction(GR_SET_GLOBAL) - -######################################################################## -# Set the pre-processor definition if the condition is true. -# - def the pre-processor definition to set and condition name -######################################################################## -function(GR_ADD_COND_DEF def) - if(${def}) - add_definitions(-D${def}) - endif(${def}) -endfunction(GR_ADD_COND_DEF) - -######################################################################## -# Check for a header and conditionally set a compile define. -# - hdr the relative path to the header file -# - def the pre-processor definition to set -######################################################################## -function(GR_CHECK_HDR_N_DEF hdr def) - include(CheckIncludeFileCXX) - CHECK_INCLUDE_FILE_CXX(${hdr} ${def}) - GR_ADD_COND_DEF(${def}) -endfunction(GR_CHECK_HDR_N_DEF) - -######################################################################## -# Include subdirectory macro. -# Sets the CMake directory variables, -# includes the subdirectory CMakeLists.txt, -# resets the CMake directory variables. -# -# This macro includes subdirectories rather than adding them -# so that the subdirectory can affect variables in the level above. -# This provides a work-around for the lack of convenience libraries. -# This way a subdirectory can append to the list of library sources. -######################################################################## -macro(GR_INCLUDE_SUBDIRECTORY subdir) - #insert the current directories on the front of the list - list(INSERT _cmake_source_dirs 0 ${CMAKE_CURRENT_SOURCE_DIR}) - list(INSERT _cmake_binary_dirs 0 ${CMAKE_CURRENT_BINARY_DIR}) - - #set the current directories to the names of the subdirs - set(CMAKE_CURRENT_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/${subdir}) - set(CMAKE_CURRENT_BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/${subdir}) - - #include the subdirectory CMakeLists to run it - file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) - include(${CMAKE_CURRENT_SOURCE_DIR}/CMakeLists.txt) - - #reset the value of the current directories - list(GET _cmake_source_dirs 0 CMAKE_CURRENT_SOURCE_DIR) - list(GET _cmake_binary_dirs 0 CMAKE_CURRENT_BINARY_DIR) - - #pop the subdir names of the front of the list - list(REMOVE_AT _cmake_source_dirs 0) - list(REMOVE_AT _cmake_binary_dirs 0) -endmacro(GR_INCLUDE_SUBDIRECTORY) - -######################################################################## -# Check if a compiler flag works and conditionally set a compile define. -# - flag the compiler flag to check for -# - have the variable to set with result -######################################################################## -macro(GR_ADD_CXX_COMPILER_FLAG_IF_AVAILABLE flag have) - include(CheckCXXCompilerFlag) - CHECK_CXX_COMPILER_FLAG(${flag} ${have}) - if(${have}) - add_definitions(${flag}) - endif(${have}) -endmacro(GR_ADD_CXX_COMPILER_FLAG_IF_AVAILABLE) - -######################################################################## -# Generates the .la libtool file -# This appears to generate libtool files that cannot be used by auto*. -# Usage GR_LIBTOOL(TARGET [target] DESTINATION [dest]) -# Notice: there is not COMPONENT option, these will not get distributed. -######################################################################## -function(GR_LIBTOOL) - if(NOT DEFINED GENERATE_LIBTOOL) - set(GENERATE_LIBTOOL OFF) #disabled by default - endif() - - if(GENERATE_LIBTOOL) - include(CMakeParseArgumentsCopy) - CMAKE_PARSE_ARGUMENTS(GR_LIBTOOL "" "TARGET;DESTINATION" "" ${ARGN}) - - find_program(LIBTOOL libtool) - if(LIBTOOL) - include(CMakeMacroLibtoolFile) - CREATE_LIBTOOL_FILE(${GR_LIBTOOL_TARGET} /${GR_LIBTOOL_DESTINATION}) - endif(LIBTOOL) - endif(GENERATE_LIBTOOL) - -endfunction(GR_LIBTOOL) - -######################################################################## -# Do standard things to the library target -# - set target properties -# - make install rules -# Also handle gnuradio custom naming conventions w/ extras mode. -######################################################################## -function(GR_LIBRARY_FOO target) - #parse the arguments for component names - include(CMakeParseArgumentsCopy) - CMAKE_PARSE_ARGUMENTS(GR_LIBRARY "" "RUNTIME_COMPONENT;DEVEL_COMPONENT" "" ${ARGN}) - - #set additional target properties - set_target_properties(${target} PROPERTIES SOVERSION ${LIBVER}) - - #install the generated files like so... - install(TARGETS ${target} - LIBRARY DESTINATION ${GR_LIBRARY_DIR} COMPONENT ${GR_LIBRARY_RUNTIME_COMPONENT} # .so/.dylib file - ARCHIVE DESTINATION ${GR_LIBRARY_DIR} COMPONENT ${GR_LIBRARY_DEVEL_COMPONENT} # .lib file - RUNTIME DESTINATION ${GR_RUNTIME_DIR} COMPONENT ${GR_LIBRARY_RUNTIME_COMPONENT} # .dll file - ) - - #extras mode enabled automatically on linux - if(NOT DEFINED LIBRARY_EXTRAS) - set(LIBRARY_EXTRAS ${LINUX}) - endif() - - #special extras mode to enable alternative naming conventions - if(LIBRARY_EXTRAS) - - #create .la file before changing props - GR_LIBTOOL(TARGET ${target} DESTINATION ${GR_LIBRARY_DIR}) - - #give the library a special name with ultra-zero soversion - set_target_properties(${target} PROPERTIES LIBRARY_OUTPUT_NAME ${target}-${LIBVER} SOVERSION "0.0.0") - set(target_name lib${target}-${LIBVER}.so.0.0.0) - - #custom command to generate symlinks - add_custom_command( - TARGET ${target} - POST_BUILD - COMMAND ${CMAKE_COMMAND} -E create_symlink ${target_name} ${CMAKE_CURRENT_BINARY_DIR}/lib${target}.so - COMMAND ${CMAKE_COMMAND} -E create_symlink ${target_name} ${CMAKE_CURRENT_BINARY_DIR}/lib${target}-${LIBVER}.so.0 - COMMAND ${CMAKE_COMMAND} -E touch ${target_name} #so the symlinks point to something valid so cmake 2.6 will install - ) - - #and install the extra symlinks - install( - FILES - ${CMAKE_CURRENT_BINARY_DIR}/lib${target}.so - ${CMAKE_CURRENT_BINARY_DIR}/lib${target}-${LIBVER}.so.0 - DESTINATION ${GR_LIBRARY_DIR} COMPONENT ${GR_LIBRARY_RUNTIME_COMPONENT} - ) - - endif(LIBRARY_EXTRAS) -endfunction(GR_LIBRARY_FOO) - -######################################################################## -# Create a dummy custom command that depends on other targets. -# Usage: -# GR_GEN_TARGET_DEPS(unique_name target_deps ...) -# ADD_CUSTOM_COMMAND( ${target_deps}) -# -# Custom command cant depend on targets, but can depend on executables, -# and executables can depend on targets. So this is the process: -######################################################################## -function(GR_GEN_TARGET_DEPS name var) - file( - WRITE ${CMAKE_CURRENT_BINARY_DIR}/${name}.cpp.in - "int main(void){return 0;}\n" - ) - execute_process( - COMMAND ${CMAKE_COMMAND} -E copy_if_different - ${CMAKE_CURRENT_BINARY_DIR}/${name}.cpp.in - ${CMAKE_CURRENT_BINARY_DIR}/${name}.cpp - ) - add_executable(${name} ${CMAKE_CURRENT_BINARY_DIR}/${name}.cpp) - if(ARGN) - add_dependencies(${name} ${ARGN}) - endif(ARGN) - - if(CMAKE_CROSSCOMPILING) - set(${var} "DEPENDS;${name}" PARENT_SCOPE) #cant call command when cross - else() - set(${var} "DEPENDS;${name};COMMAND;${name}" PARENT_SCOPE) - endif() -endfunction(GR_GEN_TARGET_DEPS) diff --git a/cmake/Modules/GrPlatform.cmake b/cmake/Modules/GrPlatform.cmake deleted file mode 100644 index a2e4f3b..0000000 --- a/cmake/Modules/GrPlatform.cmake +++ /dev/null @@ -1,46 +0,0 @@ -# Copyright 2011 Free Software Foundation, Inc. -# -# This file is part of GNU Radio -# -# GNU Radio is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 3, or (at your option) -# any later version. -# -# GNU Radio is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with GNU Radio; see the file COPYING. If not, write to -# the Free Software Foundation, Inc., 51 Franklin Street, -# Boston, MA 02110-1301, USA. - -if(DEFINED __INCLUDED_GR_PLATFORM_CMAKE) - return() -endif() -set(__INCLUDED_GR_PLATFORM_CMAKE TRUE) - -######################################################################## -# Setup additional defines for OS types -######################################################################## -if(CMAKE_SYSTEM_NAME STREQUAL "Linux") - set(LINUX TRUE) -endif() - -if(LINUX AND EXISTS "/etc/debian_version") - set(DEBIAN TRUE) -endif() - -if(LINUX AND EXISTS "/etc/redhat-release") - set(REDHAT TRUE) -endif() - -######################################################################## -# when the library suffix should be 64 (applies to redhat linux family) -######################################################################## -if(NOT DEFINED LIB_SUFFIX AND REDHAT AND CMAKE_SYSTEM_PROCESSOR MATCHES "64$") - set(LIB_SUFFIX 64) -endif() -set(LIB_SUFFIX ${LIB_SUFFIX} CACHE STRING "lib directory suffix") diff --git a/cmake/Modules/GrPython.cmake b/cmake/Modules/GrPython.cmake deleted file mode 100644 index 68ca58e..0000000 --- a/cmake/Modules/GrPython.cmake +++ /dev/null @@ -1,227 +0,0 @@ -# Copyright 2010-2011 Free Software Foundation, Inc. -# -# This file is part of GNU Radio -# -# GNU Radio is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 3, or (at your option) -# any later version. -# -# GNU Radio is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with GNU Radio; see the file COPYING. If not, write to -# the Free Software Foundation, Inc., 51 Franklin Street, -# Boston, MA 02110-1301, USA. - -if(DEFINED __INCLUDED_GR_PYTHON_CMAKE) - return() -endif() -set(__INCLUDED_GR_PYTHON_CMAKE TRUE) - -######################################################################## -# Setup the python interpreter: -# This allows the user to specify a specific interpreter, -# or finds the interpreter via the built-in cmake module. -######################################################################## -#this allows the user to override PYTHON_EXECUTABLE -if(PYTHON_EXECUTABLE) - - set(PYTHONINTERP_FOUND TRUE) - -#otherwise if not set, try to automatically find it -else(PYTHON_EXECUTABLE) - - #use the built-in find script - find_package(PythonInterp 2) - - #and if that fails use the find program routine - if(NOT PYTHONINTERP_FOUND) - find_program(PYTHON_EXECUTABLE NAMES python python2 python2.7 python2.6 python2.5) - if(PYTHON_EXECUTABLE) - set(PYTHONINTERP_FOUND TRUE) - endif(PYTHON_EXECUTABLE) - endif(NOT PYTHONINTERP_FOUND) - -endif(PYTHON_EXECUTABLE) - -#make the path to the executable appear in the cmake gui -set(PYTHON_EXECUTABLE ${PYTHON_EXECUTABLE} CACHE FILEPATH "python interpreter") - -#make sure we can use -B with python (introduced in 2.6) -if(PYTHON_EXECUTABLE) - execute_process( - COMMAND ${PYTHON_EXECUTABLE} -B -c "" - OUTPUT_QUIET ERROR_QUIET - RESULT_VARIABLE PYTHON_HAS_DASH_B_RESULT - ) - if(PYTHON_HAS_DASH_B_RESULT EQUAL 0) - set(PYTHON_DASH_B "-B") - endif() -endif(PYTHON_EXECUTABLE) - -######################################################################## -# Check for the existence of a python module: -# - desc a string description of the check -# - mod the name of the module to import -# - cmd an additional command to run -# - have the result variable to set -######################################################################## -macro(GR_PYTHON_CHECK_MODULE desc mod cmd have) - message(STATUS "") - message(STATUS "Python checking for ${desc}") - execute_process( - COMMAND ${PYTHON_EXECUTABLE} -c " -######################################### -try: import ${mod} -except: exit(-1) -try: assert ${cmd} -except: exit(-1) -#########################################" - RESULT_VARIABLE ${have} - ) - if(${have} EQUAL 0) - message(STATUS "Python checking for ${desc} - found") - set(${have} TRUE) - else(${have} EQUAL 0) - message(STATUS "Python checking for ${desc} - not found") - set(${have} FALSE) - endif(${have} EQUAL 0) -endmacro(GR_PYTHON_CHECK_MODULE) - -######################################################################## -# Sets the python installation directory GR_PYTHON_DIR -######################################################################## -execute_process(COMMAND ${PYTHON_EXECUTABLE} -c " -from distutils import sysconfig -print sysconfig.get_python_lib(plat_specific=True, prefix='') -" OUTPUT_VARIABLE GR_PYTHON_DIR OUTPUT_STRIP_TRAILING_WHITESPACE -) -file(TO_CMAKE_PATH ${GR_PYTHON_DIR} GR_PYTHON_DIR) - -######################################################################## -# Create an always-built target with a unique name -# Usage: GR_UNIQUE_TARGET( ) -######################################################################## -function(GR_UNIQUE_TARGET desc) - file(RELATIVE_PATH reldir ${CMAKE_BINARY_DIR} ${CMAKE_CURRENT_BINARY_DIR}) - execute_process(COMMAND ${PYTHON_EXECUTABLE} -c "import re, hashlib -unique = hashlib.md5('${reldir}${ARGN}').hexdigest()[:5] -print(re.sub('\\W', '_', '${desc} ${reldir} ' + unique))" - OUTPUT_VARIABLE _target OUTPUT_STRIP_TRAILING_WHITESPACE) - add_custom_target(${_target} ALL DEPENDS ${ARGN}) -endfunction(GR_UNIQUE_TARGET) - -######################################################################## -# Install python sources (also builds and installs byte-compiled python) -######################################################################## -function(GR_PYTHON_INSTALL) - include(CMakeParseArgumentsCopy) - CMAKE_PARSE_ARGUMENTS(GR_PYTHON_INSTALL "" "DESTINATION;COMPONENT" "FILES;PROGRAMS" ${ARGN}) - - #################################################################### - if(GR_PYTHON_INSTALL_FILES) - #################################################################### - install(${ARGN}) #installs regular python files - - #create a list of all generated files - unset(pysrcfiles) - unset(pycfiles) - unset(pyofiles) - foreach(pyfile ${GR_PYTHON_INSTALL_FILES}) - get_filename_component(pyfile ${pyfile} ABSOLUTE) - list(APPEND pysrcfiles ${pyfile}) - - #determine if this file is in the source or binary directory - file(RELATIVE_PATH source_rel_path ${CMAKE_CURRENT_SOURCE_DIR} ${pyfile}) - string(LENGTH "${source_rel_path}" source_rel_path_len) - file(RELATIVE_PATH binary_rel_path ${CMAKE_CURRENT_BINARY_DIR} ${pyfile}) - string(LENGTH "${binary_rel_path}" binary_rel_path_len) - - #and set the generated path appropriately - if(${source_rel_path_len} GREATER ${binary_rel_path_len}) - set(pygenfile ${CMAKE_CURRENT_BINARY_DIR}/${binary_rel_path}) - else() - set(pygenfile ${CMAKE_CURRENT_BINARY_DIR}/${source_rel_path}) - endif() - list(APPEND pycfiles ${pygenfile}c) - list(APPEND pyofiles ${pygenfile}o) - - #ensure generation path exists - get_filename_component(pygen_path ${pygenfile} PATH) - file(MAKE_DIRECTORY ${pygen_path}) - - endforeach(pyfile) - - #the command to generate the pyc files - add_custom_command( - DEPENDS ${pysrcfiles} OUTPUT ${pycfiles} - COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_BINARY_DIR}/python_compile_helper.py ${pysrcfiles} ${pycfiles} - ) - - #the command to generate the pyo files - add_custom_command( - DEPENDS ${pysrcfiles} OUTPUT ${pyofiles} - COMMAND ${PYTHON_EXECUTABLE} -O ${CMAKE_BINARY_DIR}/python_compile_helper.py ${pysrcfiles} ${pyofiles} - ) - - #create install rule and add generated files to target list - set(python_install_gen_targets ${pycfiles} ${pyofiles}) - install(FILES ${python_install_gen_targets} - DESTINATION ${GR_PYTHON_INSTALL_DESTINATION} - COMPONENT ${GR_PYTHON_INSTALL_COMPONENT} - ) - - - #################################################################### - elseif(GR_PYTHON_INSTALL_PROGRAMS) - #################################################################### - file(TO_NATIVE_PATH ${PYTHON_EXECUTABLE} pyexe_native) - - foreach(pyfile ${GR_PYTHON_INSTALL_PROGRAMS}) - get_filename_component(pyfile_name ${pyfile} NAME) - get_filename_component(pyfile ${pyfile} ABSOLUTE) - string(REPLACE "${CMAKE_SOURCE_DIR}" "${CMAKE_BINARY_DIR}" pyexefile "${pyfile}.exe") - list(APPEND python_install_gen_targets ${pyexefile}) - - get_filename_component(pyexefile_path ${pyexefile} PATH) - file(MAKE_DIRECTORY ${pyexefile_path}) - - add_custom_command( - OUTPUT ${pyexefile} DEPENDS ${pyfile} - COMMAND ${PYTHON_EXECUTABLE} -c - \"open('${pyexefile}', 'w').write('\#!${pyexe_native}\\n'+open('${pyfile}').read())\" - COMMENT "Shebangin ${pyfile_name}" - ) - - #on windows, python files need an extension to execute - get_filename_component(pyfile_ext ${pyfile} EXT) - if(WIN32 AND NOT pyfile_ext) - set(pyfile_name "${pyfile_name}.py") - endif() - - install(PROGRAMS ${pyexefile} RENAME ${pyfile_name} - DESTINATION ${GR_PYTHON_INSTALL_DESTINATION} - COMPONENT ${GR_PYTHON_INSTALL_COMPONENT} - ) - endforeach(pyfile) - - endif() - - GR_UNIQUE_TARGET("pygen" ${python_install_gen_targets}) - -endfunction(GR_PYTHON_INSTALL) - -######################################################################## -# Write the python helper script that generates byte code files -######################################################################## -file(WRITE ${CMAKE_BINARY_DIR}/python_compile_helper.py " -import sys, py_compile -files = sys.argv[1:] -srcs, gens = files[:len(files)/2], files[len(files)/2:] -for src, gen in zip(srcs, gens): - py_compile.compile(file=src, cfile=gen, doraise=True) -") diff --git a/cmake/Modules/GrSwig.cmake b/cmake/Modules/GrSwig.cmake deleted file mode 100644 index 569667b..0000000 --- a/cmake/Modules/GrSwig.cmake +++ /dev/null @@ -1,229 +0,0 @@ -# Copyright 2010-2011 Free Software Foundation, Inc. -# -# This file is part of GNU Radio -# -# GNU Radio is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 3, or (at your option) -# any later version. -# -# GNU Radio is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with GNU Radio; see the file COPYING. If not, write to -# the Free Software Foundation, Inc., 51 Franklin Street, -# Boston, MA 02110-1301, USA. - -if(DEFINED __INCLUDED_GR_SWIG_CMAKE) - return() -endif() -set(__INCLUDED_GR_SWIG_CMAKE TRUE) - -include(GrPython) - -######################################################################## -# Builds a swig documentation file to be generated into python docstrings -# Usage: GR_SWIG_MAKE_DOCS(output_file input_path input_path....) -# -# Set the following variable to specify extra dependent targets: -# - GR_SWIG_DOCS_SOURCE_DEPS -# - GR_SWIG_DOCS_TARGET_DEPS -######################################################################## -function(GR_SWIG_MAKE_DOCS output_file) - find_package(Doxygen) - if(DOXYGEN_FOUND) - - #setup the input files variable list, quote formated - set(input_files) - unset(INPUT_PATHS) - foreach(input_path ${ARGN}) - if (IS_DIRECTORY ${input_path}) #when input path is a directory - file(GLOB input_path_h_files ${input_path}/*.h) - else() #otherwise its just a file, no glob - set(input_path_h_files ${input_path}) - endif() - list(APPEND input_files ${input_path_h_files}) - set(INPUT_PATHS "${INPUT_PATHS} \"${input_path}\"") - endforeach(input_path) - - #determine the output directory - get_filename_component(name ${output_file} NAME_WE) - get_filename_component(OUTPUT_DIRECTORY ${output_file} PATH) - set(OUTPUT_DIRECTORY ${OUTPUT_DIRECTORY}/${name}_swig_docs) - make_directory(${OUTPUT_DIRECTORY}) - - #generate the Doxyfile used by doxygen - configure_file( - ${CMAKE_SOURCE_DIR}/docs/doxygen/Doxyfile.swig_doc.in - ${OUTPUT_DIRECTORY}/Doxyfile - @ONLY) - - #Create a dummy custom command that depends on other targets - include(GrMiscUtils) - GR_GEN_TARGET_DEPS(_${name}_tag tag_deps ${GR_SWIG_DOCS_TARGET_DEPS}) - - #call doxygen on the Doxyfile + input headers - add_custom_command( - OUTPUT ${OUTPUT_DIRECTORY}/xml/index.xml - DEPENDS ${input_files} ${GR_SWIG_DOCS_SOURCE_DEPS} ${tag_deps} - COMMAND ${DOXYGEN_EXECUTABLE} ${OUTPUT_DIRECTORY}/Doxyfile - COMMENT "Generating doxygen xml for ${name} docs" - ) - - #call the swig_doc script on the xml files - add_custom_command( - OUTPUT ${output_file} - DEPENDS ${input_files} ${OUTPUT_DIRECTORY}/xml/index.xml - COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B} - ${CMAKE_SOURCE_DIR}/docs/doxygen/swig_doc.py - ${OUTPUT_DIRECTORY}/xml - ${output_file} - WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/docs/doxygen - ) - - else(DOXYGEN_FOUND) - file(WRITE ${output_file} "\n") #no doxygen -> empty file - endif(DOXYGEN_FOUND) -endfunction(GR_SWIG_MAKE_DOCS) - -######################################################################## -# Build a swig target for the common gnuradio use case. Usage: -# GR_SWIG_MAKE(target ifile ifile ifile...) -# -# Set the following variables before calling: -# - GR_SWIG_FLAGS -# - GR_SWIG_INCLUDE_DIRS -# - GR_SWIG_LIBRARIES -# - GR_SWIG_SOURCE_DEPS -# - GR_SWIG_TARGET_DEPS -# - GR_SWIG_DOC_FILE -# - GR_SWIG_DOC_DIRS -######################################################################## -macro(GR_SWIG_MAKE name) - set(ifiles ${ARGN}) - - #do swig doc generation if specified - if (GR_SWIG_DOC_FILE) - set(GR_SWIG_DOCS_SOURCE_DEPS ${GR_SWIG_SOURCE_DEPS}) - set(GR_SWIG_DOCS_TAREGT_DEPS ${GR_SWIG_TARGET_DEPS}) - GR_SWIG_MAKE_DOCS(${GR_SWIG_DOC_FILE} ${GR_SWIG_DOC_DIRS}) - list(APPEND GR_SWIG_SOURCE_DEPS ${GR_SWIG_DOC_FILE}) - endif() - - #append additional include directories - find_package(PythonLibs 2) - list(APPEND GR_SWIG_INCLUDE_DIRS ${PYTHON_INCLUDE_PATH}) #deprecated name (now dirs) - list(APPEND GR_SWIG_INCLUDE_DIRS ${PYTHON_INCLUDE_DIRS}) - list(APPEND GR_SWIG_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}) - list(APPEND GR_SWIG_INCLUDE_DIRS ${CMAKE_CURRENT_BINARY_DIR}) - - #determine include dependencies for swig file - execute_process( - COMMAND ${PYTHON_EXECUTABLE} - ${CMAKE_BINARY_DIR}/get_swig_deps.py - "${ifiles}" "${GR_SWIG_INCLUDE_DIRS}" - OUTPUT_STRIP_TRAILING_WHITESPACE - OUTPUT_VARIABLE SWIG_MODULE_${name}_EXTRA_DEPS - WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} - ) - - #Create a dummy custom command that depends on other targets - include(GrMiscUtils) - GR_GEN_TARGET_DEPS(_${name}_swig_tag tag_deps ${GR_SWIG_TARGET_DEPS}) - set(tag_file ${CMAKE_CURRENT_BINARY_DIR}/${name}.tag) - add_custom_command( - OUTPUT ${tag_file} - DEPENDS ${GR_SWIG_SOURCE_DEPS} ${tag_deps} - COMMAND ${CMAKE_COMMAND} -E touch ${tag_file} - ) - - #append the specified include directories - include_directories(${GR_SWIG_INCLUDE_DIRS}) - list(APPEND SWIG_MODULE_${name}_EXTRA_DEPS ${tag_file}) - - #setup the swig flags with flags and include directories - set(CMAKE_SWIG_FLAGS -fvirtual -modern -keyword -w511 -module ${name} ${GR_SWIG_FLAGS}) - foreach(dir ${GR_SWIG_INCLUDE_DIRS}) - list(APPEND CMAKE_SWIG_FLAGS "-I${dir}") - endforeach(dir) - - #set the C++ property on the swig .i file so it builds - set_source_files_properties(${ifiles} PROPERTIES CPLUSPLUS ON) - - #setup the actual swig library target to be built - include(UseSWIG) - SWIG_ADD_MODULE(${name} python ${ifiles}) - SWIG_LINK_LIBRARIES(${name} ${PYTHON_LIBRARIES} ${GR_SWIG_LIBRARIES}) - -endmacro(GR_SWIG_MAKE) - -######################################################################## -# Install swig targets generated by GR_SWIG_MAKE. Usage: -# GR_SWIG_INSTALL( -# TARGETS target target target... -# [DESTINATION destination] -# [COMPONENT component] -# ) -######################################################################## -macro(GR_SWIG_INSTALL) - - include(CMakeParseArgumentsCopy) - CMAKE_PARSE_ARGUMENTS(GR_SWIG_INSTALL "" "DESTINATION;COMPONENT" "TARGETS" ${ARGN}) - - foreach(name ${GR_SWIG_INSTALL_TARGETS}) - install(TARGETS ${SWIG_MODULE_${name}_REAL_NAME} - DESTINATION ${GR_SWIG_INSTALL_DESTINATION} - COMPONENT ${GR_SWIG_INSTALL_COMPONENT} - ) - - include(GrPython) - GR_PYTHON_INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/${name}.py - DESTINATION ${GR_SWIG_INSTALL_DESTINATION} - COMPONENT ${GR_SWIG_INSTALL_COMPONENT} - ) - - GR_LIBTOOL( - TARGET ${SWIG_MODULE_${name}_REAL_NAME} - DESTINATION ${GR_SWIG_INSTALL_DESTINATION} - ) - - endforeach(name) - -endmacro(GR_SWIG_INSTALL) - -######################################################################## -# Generate a python file that can determine swig dependencies. -# Used by the make macro above to determine extra dependencies. -# When you build C++, CMake figures out the header dependencies. -# This code essentially performs that logic for swig includes. -######################################################################## -file(WRITE ${CMAKE_BINARY_DIR}/get_swig_deps.py " - -import os, sys, re - -include_matcher = re.compile('[#|%]include\\s*[<|\"](.*)[>|\"]') -include_dirs = sys.argv[2].split(';') - -def get_swig_incs(file_path): - file_contents = open(file_path, 'r').read() - return include_matcher.findall(file_contents, re.MULTILINE) - -def get_swig_deps(file_path, level): - deps = [file_path] - if level == 0: return deps - for inc_file in get_swig_incs(file_path): - for inc_dir in include_dirs: - inc_path = os.path.join(inc_dir, inc_file) - if not os.path.exists(inc_path): continue - deps.extend(get_swig_deps(inc_path, level-1)) - return deps - -if __name__ == '__main__': - ifiles = sys.argv[1].split(';') - deps = sum([get_swig_deps(ifile, 3) for ifile in ifiles], []) - #sys.stderr.write(';'.join(set(deps)) + '\\n\\n') - print(';'.join(set(deps))) -") diff --git a/cmake/Modules/GrTest.cmake b/cmake/Modules/GrTest.cmake deleted file mode 100644 index 6174c03..0000000 --- a/cmake/Modules/GrTest.cmake +++ /dev/null @@ -1,133 +0,0 @@ -# Copyright 2010-2011 Free Software Foundation, Inc. -# -# This file is part of GNU Radio -# -# GNU Radio is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 3, or (at your option) -# any later version. -# -# GNU Radio is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with GNU Radio; see the file COPYING. If not, write to -# the Free Software Foundation, Inc., 51 Franklin Street, -# Boston, MA 02110-1301, USA. - -if(DEFINED __INCLUDED_GR_TEST_CMAKE) - return() -endif() -set(__INCLUDED_GR_TEST_CMAKE TRUE) - -######################################################################## -# Add a unit test and setup the environment for a unit test. -# Takes the same arguments as the ADD_TEST function. -# -# Before calling set the following variables: -# GR_TEST_TARGET_DEPS - built targets for the library path -# GR_TEST_LIBRARY_DIRS - directories for the library path -# GR_TEST_PYTHON_DIRS - directories for the python path -######################################################################## -function(GR_ADD_TEST test_name) - - if(WIN32) - #Ensure that the build exe also appears in the PATH. - list(APPEND GR_TEST_TARGET_DEPS ${ARGN}) - - #In the land of windows, all libraries must be in the PATH. - #Since the dependent libraries are not yet installed, - #we must manually set them in the PATH to run tests. - #The following appends the path of a target dependency. - foreach(target ${GR_TEST_TARGET_DEPS}) - get_target_property(location ${target} LOCATION) - if(location) - get_filename_component(path ${location} PATH) - string(REGEX REPLACE "\\$\\(.*\\)" ${CMAKE_BUILD_TYPE} path ${path}) - list(APPEND GR_TEST_LIBRARY_DIRS ${path}) - endif(location) - endforeach(target) - - #SWIG generates the python library files into a subdirectory. - #Therefore, we must append this subdirectory into PYTHONPATH. - #Only do this for the python directories matching the following: - foreach(pydir ${GR_TEST_PYTHON_DIRS}) - get_filename_component(name ${pydir} NAME) - if(name MATCHES "^(swig|lib|src)$") - list(APPEND GR_TEST_PYTHON_DIRS ${pydir}/${CMAKE_BUILD_TYPE}) - endif() - endforeach(pydir) - endif(WIN32) - - file(TO_NATIVE_PATH ${CMAKE_CURRENT_SOURCE_DIR} srcdir) - file(TO_NATIVE_PATH "${GR_TEST_LIBRARY_DIRS}" libpath) #ok to use on dir list? - file(TO_NATIVE_PATH "${GR_TEST_PYTHON_DIRS}" pypath) #ok to use on dir list? - - set(environs "GR_DONT_LOAD_PREFS=1" "srcdir=${srcdir}") - - #http://www.cmake.org/pipermail/cmake/2009-May/029464.html - #Replaced this add test + set environs code with the shell script generation. - #Its nicer to be able to manually run the shell script to diagnose problems. - #ADD_TEST(${ARGV}) - #SET_TESTS_PROPERTIES(${test_name} PROPERTIES ENVIRONMENT "${environs}") - - if(UNIX) - set(binpath "${CMAKE_CURRENT_BINARY_DIR}:$PATH") - #set both LD and DYLD paths to cover multiple UNIX OS library paths - list(APPEND libpath "$LD_LIBRARY_PATH" "$DYLD_LIBRARY_PATH") - list(APPEND pypath "$PYTHONPATH") - - #replace list separator with the path separator - string(REPLACE ";" ":" libpath "${libpath}") - string(REPLACE ";" ":" pypath "${pypath}") - list(APPEND environs "PATH=${binpath}" "LD_LIBRARY_PATH=${libpath}" "DYLD_LIBRARY_PATH=${libpath}" "PYTHONPATH=${pypath}") - - #generate a bat file that sets the environment and runs the test - find_program(SHELL sh) - set(sh_file ${CMAKE_CURRENT_BINARY_DIR}/${test_name}_test.sh) - file(WRITE ${sh_file} "#!${SHELL}\n") - #each line sets an environment variable - foreach(environ ${environs}) - file(APPEND ${sh_file} "export ${environ}\n") - endforeach(environ) - #load the command to run with its arguments - foreach(arg ${ARGN}) - file(APPEND ${sh_file} "${arg} ") - endforeach(arg) - file(APPEND ${sh_file} "\n") - - #make the shell file executable - execute_process(COMMAND chmod +x ${sh_file}) - - add_test(${test_name} ${SHELL} ${sh_file}) - - endif(UNIX) - - if(WIN32) - list(APPEND libpath ${DLL_PATHS} "%PATH%") - list(APPEND pypath "%PYTHONPATH%") - - #replace list separator with the path separator (escaped) - string(REPLACE ";" "\\;" libpath "${libpath}") - string(REPLACE ";" "\\;" pypath "${pypath}") - list(APPEND environs "PATH=${libpath}" "PYTHONPATH=${pypath}") - - #generate a bat file that sets the environment and runs the test - set(bat_file ${CMAKE_CURRENT_BINARY_DIR}/${test_name}_test.bat) - file(WRITE ${bat_file} "@echo off\n") - #each line sets an environment variable - foreach(environ ${environs}) - file(APPEND ${bat_file} "SET ${environ}\n") - endforeach(environ) - #load the command to run with its arguments - foreach(arg ${ARGN}) - file(APPEND ${bat_file} "${arg} ") - endforeach(arg) - file(APPEND ${bat_file} "\n") - - add_test(${test_name} ${bat_file}) - endif(WIN32) - -endfunction(GR_ADD_TEST) diff --git a/cmake/Modules/UseSWIG.cmake b/cmake/Modules/UseSWIG.cmake deleted file mode 100644 index c0f1728..0000000 --- a/cmake/Modules/UseSWIG.cmake +++ /dev/null @@ -1,304 +0,0 @@ -# - SWIG module for CMake -# Defines the following macros: -# SWIG_ADD_MODULE(name language [ files ]) -# - Define swig module with given name and specified language -# SWIG_LINK_LIBRARIES(name [ libraries ]) -# - Link libraries to swig module -# All other macros are for internal use only. -# To get the actual name of the swig module, -# use: ${SWIG_MODULE_${name}_REAL_NAME}. -# Set Source files properties such as CPLUSPLUS and SWIG_FLAGS to specify -# special behavior of SWIG. Also global CMAKE_SWIG_FLAGS can be used to add -# special flags to all swig calls. -# Another special variable is CMAKE_SWIG_OUTDIR, it allows one to specify -# where to write all the swig generated module (swig -outdir option) -# The name-specific variable SWIG_MODULE__EXTRA_DEPS may be used -# to specify extra dependencies for the generated modules. -# If the source file generated by swig need some special flag you can use -# set_source_files_properties( ${swig_generated_file_fullname} -# PROPERTIES COMPILE_FLAGS "-bla") - - -#============================================================================= -# Copyright 2004-2009 Kitware, Inc. -# Copyright 2009 Mathieu Malaterre -# -# Distributed under the OSI-approved BSD License (the "License"); -# see accompanying file Copyright.txt for details. -# -# This software is distributed WITHOUT ANY WARRANTY; without even the -# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the License for more information. -#============================================================================= -# (To distribute this file outside of CMake, substitute the full -# License text for the above reference.) - -set(SWIG_CXX_EXTENSION "cxx") -set(SWIG_EXTRA_LIBRARIES "") - -set(SWIG_PYTHON_EXTRA_FILE_EXTENSION "py") - -# -# For given swig module initialize variables associated with it -# -macro(SWIG_MODULE_INITIALIZE name language) - string(TOUPPER "${language}" swig_uppercase_language) - string(TOLOWER "${language}" swig_lowercase_language) - set(SWIG_MODULE_${name}_LANGUAGE "${swig_uppercase_language}") - set(SWIG_MODULE_${name}_SWIG_LANGUAGE_FLAG "${swig_lowercase_language}") - - set(SWIG_MODULE_${name}_REAL_NAME "${name}") - if("${SWIG_MODULE_${name}_LANGUAGE}" STREQUAL "UNKNOWN") - message(FATAL_ERROR "SWIG Error: Language \"${language}\" not found") - elseif("${SWIG_MODULE_${name}_LANGUAGE}" STREQUAL "PYTHON") - # when swig is used without the -interface it will produce in the module.py - # a 'import _modulename' statement, which implies having a corresponding - # _modulename.so (*NIX), _modulename.pyd (Win32). - set(SWIG_MODULE_${name}_REAL_NAME "_${name}") - elseif("${SWIG_MODULE_${name}_LANGUAGE}" STREQUAL "PERL") - set(SWIG_MODULE_${name}_EXTRA_FLAGS "-shadow") - endif() -endmacro() - -# -# For a given language, input file, and output file, determine extra files that -# will be generated. This is internal swig macro. -# - -macro(SWIG_GET_EXTRA_OUTPUT_FILES language outfiles generatedpath infile) - set(${outfiles} "") - get_source_file_property(SWIG_GET_EXTRA_OUTPUT_FILES_module_basename - ${infile} SWIG_MODULE_NAME) - if(SWIG_GET_EXTRA_OUTPUT_FILES_module_basename STREQUAL "NOTFOUND") - get_filename_component(SWIG_GET_EXTRA_OUTPUT_FILES_module_basename "${infile}" NAME_WE) - endif() - foreach(it ${SWIG_${language}_EXTRA_FILE_EXTENSION}) - set(${outfiles} ${${outfiles}} - "${generatedpath}/${SWIG_GET_EXTRA_OUTPUT_FILES_module_basename}.${it}") - endforeach() -endmacro() - -# -# Take swig (*.i) file and add proper custom commands for it -# -macro(SWIG_ADD_SOURCE_TO_MODULE name outfiles infile) - set(swig_full_infile ${infile}) - get_filename_component(swig_source_file_path "${infile}" PATH) - get_filename_component(swig_source_file_name_we "${infile}" NAME_WE) - get_source_file_property(swig_source_file_generated ${infile} GENERATED) - get_source_file_property(swig_source_file_cplusplus ${infile} CPLUSPLUS) - get_source_file_property(swig_source_file_flags ${infile} SWIG_FLAGS) - if("${swig_source_file_flags}" STREQUAL "NOTFOUND") - set(swig_source_file_flags "") - endif() - set(swig_source_file_fullname "${infile}") - if(${swig_source_file_path} MATCHES "^${CMAKE_CURRENT_SOURCE_DIR}") - string(REGEX REPLACE - "^${CMAKE_CURRENT_SOURCE_DIR}" "" - swig_source_file_relative_path - "${swig_source_file_path}") - else() - if(${swig_source_file_path} MATCHES "^${CMAKE_CURRENT_BINARY_DIR}") - string(REGEX REPLACE - "^${CMAKE_CURRENT_BINARY_DIR}" "" - swig_source_file_relative_path - "${swig_source_file_path}") - set(swig_source_file_generated 1) - else() - set(swig_source_file_relative_path "${swig_source_file_path}") - if(swig_source_file_generated) - set(swig_source_file_fullname "${CMAKE_CURRENT_BINARY_DIR}/${infile}") - else() - set(swig_source_file_fullname "${CMAKE_CURRENT_SOURCE_DIR}/${infile}") - endif() - endif() - endif() - - set(swig_generated_file_fullname - "${CMAKE_CURRENT_BINARY_DIR}") - if(swig_source_file_relative_path) - set(swig_generated_file_fullname - "${swig_generated_file_fullname}/${swig_source_file_relative_path}") - endif() - # If CMAKE_SWIG_OUTDIR was specified then pass it to -outdir - if(CMAKE_SWIG_OUTDIR) - set(swig_outdir ${CMAKE_SWIG_OUTDIR}) - else() - set(swig_outdir ${CMAKE_CURRENT_BINARY_DIR}) - endif() - SWIG_GET_EXTRA_OUTPUT_FILES(${SWIG_MODULE_${name}_LANGUAGE} - swig_extra_generated_files - "${swig_outdir}" - "${infile}") - set(swig_generated_file_fullname - "${swig_generated_file_fullname}/${swig_source_file_name_we}") - # add the language into the name of the file (i.e. TCL_wrap) - # this allows for the same .i file to be wrapped into different languages - set(swig_generated_file_fullname - "${swig_generated_file_fullname}${SWIG_MODULE_${name}_LANGUAGE}_wrap") - - if(swig_source_file_cplusplus) - set(swig_generated_file_fullname - "${swig_generated_file_fullname}.${SWIG_CXX_EXTENSION}") - else() - set(swig_generated_file_fullname - "${swig_generated_file_fullname}.c") - endif() - - # Shut up some warnings from poor SWIG code generation that we - # can do nothing about, when this flag is available - include(CheckCXXCompilerFlag) - check_cxx_compiler_flag("-Wno-unused-but-set-variable" HAVE_WNO_UNUSED_BUT_SET_VARIABLE) - if(HAVE_WNO_UNUSED_BUT_SET_VARIABLE) - set_source_files_properties(${swig_generated_file_fullname} - PROPERTIES COMPILE_FLAGS "-Wno-unused-but-set-variable") - endif(HAVE_WNO_UNUSED_BUT_SET_VARIABLE) - - get_directory_property(cmake_include_directories INCLUDE_DIRECTORIES) - set(swig_include_dirs) - foreach(it ${cmake_include_directories}) - set(swig_include_dirs ${swig_include_dirs} "-I${it}") - endforeach() - - set(swig_special_flags) - # default is c, so add c++ flag if it is c++ - if(swig_source_file_cplusplus) - set(swig_special_flags ${swig_special_flags} "-c++") - endif() - set(swig_extra_flags) - if(SWIG_MODULE_${name}_EXTRA_FLAGS) - set(swig_extra_flags ${swig_extra_flags} ${SWIG_MODULE_${name}_EXTRA_FLAGS}) - endif() - - # hack to work around CMake bug in add_custom_command with multiple OUTPUT files - - file(RELATIVE_PATH reldir ${CMAKE_BINARY_DIR} ${CMAKE_CURRENT_BINARY_DIR}) - execute_process( - COMMAND ${PYTHON_EXECUTABLE} -c "import re, hashlib -unique = hashlib.md5('${reldir}${ARGN}').hexdigest()[:5] -print(re.sub('\\W', '_', '${name} ${reldir} ' + unique))" - OUTPUT_VARIABLE _target OUTPUT_STRIP_TRAILING_WHITESPACE - ) - - file( - WRITE ${CMAKE_CURRENT_BINARY_DIR}/${_target}.cpp.in - "int main(void){return 0;}\n" - ) - - # create dummy dependencies - add_custom_command( - OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${_target}.cpp - COMMAND ${CMAKE_COMMAND} -E copy - ${CMAKE_CURRENT_BINARY_DIR}/${_target}.cpp.in - ${CMAKE_CURRENT_BINARY_DIR}/${_target}.cpp - DEPENDS "${swig_source_file_fullname}" ${SWIG_MODULE_${name}_EXTRA_DEPS} - COMMENT "" - ) - - # create the dummy target - add_executable(${_target} ${CMAKE_CURRENT_BINARY_DIR}/${_target}.cpp) - - # add a custom command to the dummy target - add_custom_command( - TARGET ${_target} - # Let's create the ${swig_outdir} at execution time, in case dir contains $(OutDir) - COMMAND ${CMAKE_COMMAND} -E make_directory ${swig_outdir} - COMMAND "${SWIG_EXECUTABLE}" - ARGS "-${SWIG_MODULE_${name}_SWIG_LANGUAGE_FLAG}" - ${swig_source_file_flags} - ${CMAKE_SWIG_FLAGS} - -outdir ${swig_outdir} - ${swig_special_flags} - ${swig_extra_flags} - ${swig_include_dirs} - -o "${swig_generated_file_fullname}" - "${swig_source_file_fullname}" - COMMENT "Swig source" - ) - - #add dummy independent dependencies from the _target to each file - #that will be generated by the SWIG command above - - set(${outfiles} "${swig_generated_file_fullname}" ${swig_extra_generated_files}) - - foreach(swig_gen_file ${${outfiles}}) - add_custom_command( - OUTPUT ${swig_gen_file} - COMMAND "" - DEPENDS ${_target} - COMMENT "" - ) - endforeach() - - set_source_files_properties( - ${outfiles} PROPERTIES GENERATED 1 - ) - -endmacro() - -# -# Create Swig module -# -macro(SWIG_ADD_MODULE name language) - SWIG_MODULE_INITIALIZE(${name} ${language}) - set(swig_dot_i_sources) - set(swig_other_sources) - foreach(it ${ARGN}) - if(${it} MATCHES ".*\\.i$") - set(swig_dot_i_sources ${swig_dot_i_sources} "${it}") - else() - set(swig_other_sources ${swig_other_sources} "${it}") - endif() - endforeach() - - set(swig_generated_sources) - foreach(it ${swig_dot_i_sources}) - SWIG_ADD_SOURCE_TO_MODULE(${name} swig_generated_source ${it}) - set(swig_generated_sources ${swig_generated_sources} "${swig_generated_source}") - endforeach() - get_directory_property(swig_extra_clean_files ADDITIONAL_MAKE_CLEAN_FILES) - set_directory_properties(PROPERTIES - ADDITIONAL_MAKE_CLEAN_FILES "${swig_extra_clean_files};${swig_generated_sources}") - add_library(${SWIG_MODULE_${name}_REAL_NAME} - MODULE - ${swig_generated_sources} - ${swig_other_sources}) - string(TOLOWER "${language}" swig_lowercase_language) - if ("${swig_lowercase_language}" STREQUAL "java") - if (APPLE) - # In java you want: - # System.loadLibrary("LIBRARY"); - # then JNI will look for a library whose name is platform dependent, namely - # MacOS : libLIBRARY.jnilib - # Windows: LIBRARY.dll - # Linux : libLIBRARY.so - set_target_properties (${SWIG_MODULE_${name}_REAL_NAME} PROPERTIES SUFFIX ".jnilib") - endif () - endif () - if ("${swig_lowercase_language}" STREQUAL "python") - # this is only needed for the python case where a _modulename.so is generated - set_target_properties(${SWIG_MODULE_${name}_REAL_NAME} PROPERTIES PREFIX "") - # Python extension modules on Windows must have the extension ".pyd" - # instead of ".dll" as of Python 2.5. Older python versions do support - # this suffix. - # http://docs.python.org/whatsnew/ports.html#SECTION0001510000000000000000 - # - # Windows: .dll is no longer supported as a filename extension for extension modules. - # .pyd is now the only filename extension that will be searched for. - # - if(WIN32 AND NOT CYGWIN) - set_target_properties(${SWIG_MODULE_${name}_REAL_NAME} PROPERTIES SUFFIX ".pyd") - endif() - endif () -endmacro() - -# -# Like TARGET_LINK_LIBRARIES but for swig modules -# -macro(SWIG_LINK_LIBRARIES name) - if(SWIG_MODULE_${name}_REAL_NAME) - target_link_libraries(${SWIG_MODULE_${name}_REAL_NAME} ${ARGN}) - else() - message(SEND_ERROR "Cannot find Swig library \"${name}\".") - endif() -endmacro() diff --git a/cmake/Modules/bruningaConfig.cmake b/cmake/Modules/gnuradio-bruningaConfig.cmake similarity index 54% rename from cmake/Modules/bruningaConfig.cmake rename to cmake/Modules/gnuradio-bruningaConfig.cmake index 36362c0..3abcc9c 100644 --- a/cmake/Modules/bruningaConfig.cmake +++ b/cmake/Modules/gnuradio-bruningaConfig.cmake @@ -1,9 +1,10 @@ -INCLUDE(FindPkgConfig) -PKG_CHECK_MODULES(PC_BRUNINGA bruninga) +find_package(PkgConfig) + +PKG_CHECK_MODULES(PC_GR_BRUNINGA gnuradio-bruninga) FIND_PATH( - BRUNINGA_INCLUDE_DIRS - NAMES bruninga/api.h + GR_BRUNINGA_INCLUDE_DIRS + NAMES gnuradio/bruninga/api.h HINTS $ENV{BRUNINGA_DIR}/include ${PC_BRUNINGA_INCLUDEDIR} PATHS ${CMAKE_INSTALL_PREFIX}/include @@ -12,7 +13,7 @@ FIND_PATH( ) FIND_LIBRARY( - BRUNINGA_LIBRARIES + GR_BRUNINGA_LIBRARIES NAMES gnuradio-bruninga HINTS $ENV{BRUNINGA_DIR}/lib ${PC_BRUNINGA_LIBDIR} @@ -22,9 +23,10 @@ FIND_LIBRARY( /usr/local/lib64 /usr/lib /usr/lib64 -) + ) -INCLUDE(FindPackageHandleStandardArgs) -FIND_PACKAGE_HANDLE_STANDARD_ARGS(BRUNINGA DEFAULT_MSG BRUNINGA_LIBRARIES BRUNINGA_INCLUDE_DIRS) -MARK_AS_ADVANCED(BRUNINGA_LIBRARIES BRUNINGA_INCLUDE_DIRS) +include("${CMAKE_CURRENT_LIST_DIR}/gnuradio-bruningaTarget.cmake") +INCLUDE(FindPackageHandleStandardArgs) +FIND_PACKAGE_HANDLE_STANDARD_ARGS(GR_BRUNINGA DEFAULT_MSG GR_BRUNINGA_LIBRARIES GR_BRUNINGA_INCLUDE_DIRS) +MARK_AS_ADVANCED(GR_BRUNINGA_LIBRARIES GR_BRUNINGA_INCLUDE_DIRS) diff --git a/cmake/Modules/targetConfig.cmake.in b/cmake/Modules/targetConfig.cmake.in new file mode 100644 index 0000000..4a1fb31 --- /dev/null +++ b/cmake/Modules/targetConfig.cmake.in @@ -0,0 +1,14 @@ +# Copyright 2018 Free Software Foundation, Inc. +# +# This file is part of GNU Radio +# +# SPDX-License-Identifier: GPL-3.0-or-later +# + +include(CMakeFindDependencyMacro) + +set(target_deps "@TARGET_DEPENDENCIES@") +foreach(dep IN LISTS target_deps) + find_dependency(${dep}) +endforeach() +include("${CMAKE_CURRENT_LIST_DIR}/@TARGET@Targets.cmake") diff --git a/docs/CMakeLists.txt b/docs/CMakeLists.txt index f16fbf6..13efac1 100644 --- a/docs/CMakeLists.txt +++ b/docs/CMakeLists.txt @@ -1,21 +1,10 @@ # Copyright 2011 Free Software Foundation, Inc. # -# This file is part of GNU Radio +# This file was generated by gr_modtool, a tool from the GNU Radio framework +# This file is a part of gr-bruninga # -# GNU Radio is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 3, or (at your option) -# any later version. +# SPDX-License-Identifier: GPL-3.0-or-later # -# GNU Radio is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with GNU Radio; see the file COPYING. If not, write to -# the Free Software Foundation, Inc., 51 Franklin Street, -# Boston, MA 02110-1301, USA. ######################################################################## # Setup dependencies diff --git a/docs/README.bruninga b/docs/README.bruninga index d2b88c1..cb8b99d 100644 --- a/docs/README.bruninga +++ b/docs/README.bruninga @@ -2,7 +2,7 @@ This is the bruninga-write-a-block package meant as a guide to building out-of-tree packages. To use the bruninga blocks, the Python namespaces is in 'bruninga', which is imported as: - import bruninga + import gnuradio.bruninga as bruninga See the Doxygen documentation for details about the blocks available in this package. A quick listing of the details can be found in Python diff --git a/docs/doxygen/CMakeLists.txt b/docs/doxygen/CMakeLists.txt index 1b44799..b119627 100644 --- a/docs/doxygen/CMakeLists.txt +++ b/docs/doxygen/CMakeLists.txt @@ -1,21 +1,10 @@ # Copyright 2011 Free Software Foundation, Inc. # -# This file is part of GNU Radio +# This file was generated by gr_modtool, a tool from the GNU Radio framework +# This file is a part of gr-bruninga # -# GNU Radio is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 3, or (at your option) -# any later version. +# SPDX-License-Identifier: GPL-3.0-or-later # -# GNU Radio is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with GNU Radio; see the file COPYING. If not, write to -# the Free Software Foundation, Inc., 51 Franklin Street, -# Boston, MA 02110-1301, USA. ######################################################################## # Create the doxygen configuration file @@ -28,6 +17,7 @@ file(TO_NATIVE_PATH ${CMAKE_BINARY_DIR} abs_top_builddir) set(HAVE_DOT ${DOXYGEN_DOT_FOUND}) set(enable_html_docs YES) set(enable_latex_docs NO) +set(enable_mathjax NO) set(enable_xml_docs YES) configure_file( diff --git a/docs/doxygen/Doxyfile.in b/docs/doxygen/Doxyfile.in index 0790451..b073c83 100644 --- a/docs/doxygen/Doxyfile.in +++ b/docs/doxygen/Doxyfile.in @@ -199,13 +199,6 @@ TAB_SIZE = 8 ALIASES = -# This tag can be used to specify a number of word-keyword mappings (TCL only). -# A mapping has the form "name=value". For example adding -# "class=itcl::class" will allow you to use the command class in the -# itcl::class meaning. - -TCL_SUBST = - # Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C # sources only. Doxygen will then generate output that is more tailored for C. # For instance, some of the names that are used will be different. The list @@ -654,8 +647,8 @@ WARN_LOGFILE = # directories like "/usr/src/myproject". Separate the files or directories # with spaces. -INPUT = @top_srcdir@ \ - @top_builddir@ +INPUT = "@top_srcdir@" \ + "@top_builddir@" # This tag can be used to specify the character encoding of the source files # that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is @@ -723,8 +716,6 @@ EXCLUDE_PATTERNS = */.deps/* \ EXCLUDE_SYMBOLS = ad9862 \ numpy \ - *swig* \ - *Swig* \ *my_top_block* \ *my_graph* \ *app_top_block* \ @@ -790,7 +781,7 @@ INPUT_FILTER = # info on how filters are used. If FILTER_PATTERNS is empty or if # non of the patterns match the file name, INPUT_FILTER is applied. -FILTER_PATTERNS = *.py=@top_srcdir@/doc/doxygen/other/doxypy.py +FILTER_PATTERNS = *.py=@top_srcdir@/docs/doxygen/other/doxypy.py # If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using # INPUT_FILTER) will be used to filter the input files when producing source @@ -879,12 +870,6 @@ VERBATIM_HEADERS = YES ALPHABETICAL_INDEX = YES -# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then -# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns -# in which this list will be split (can be a number in the range [1..20]) - -COLS_IN_ALPHA_INDEX = 5 - # In case all classes in a project start with a common prefix, all # classes will be put under the same header in the alphabetical index. # The IGNORE_PREFIX tag can be used to specify one or more prefixes that @@ -945,7 +930,7 @@ HTML_STYLESHEET = # user-defined cascading style sheet that is included after the standard # style sheets created by doxygen. Using this option one can overrule # certain style aspects. This is preferred over using HTML_STYLESHEET -# since it does not replace the standard style sheet and is therefor more +# since it does not replace the standard style sheet and is therefore more # robust against future updates. Doxygen will copy the style sheet file to # the output directory. @@ -989,7 +974,7 @@ HTML_COLORSTYLE_GAMMA = 80 # page will contain the date and time when the page was generated. Setting # this to NO can help when comparing the output of multiple runs. -HTML_TIMESTAMP = YES +HTML_TIMESTAMP = NO # If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML # documentation will contain sections that can be hidden and shown after the @@ -1220,14 +1205,14 @@ FORMULA_TRANSPARENT = YES # output. When enabled you may also need to install MathJax separately and # configure the path to it using the MATHJAX_RELPATH option. -USE_MATHJAX = NO +USE_MATHJAX = @enable_mathjax@ # When MathJax is enabled you can set the default output format to be used for # the MathJax output. Supported types are HTML-CSS, NativeMML (i.e. MathML) and # SVG. The default value is HTML-CSS, which is slower, but has the best # compatibility. -MATHJAX_FORMAT = HTML-CSS +MATHJAX_FORMAT = SVG # When MathJax is enabled you need to specify the location relative to the # HTML output directory using the MATHJAX_RELPATH option. The destination @@ -1239,12 +1224,12 @@ MATHJAX_FORMAT = HTML-CSS # However, it is strongly recommended to install a local # copy of MathJax from http://www.mathjax.org before deployment. -MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest +MATHJAX_RELPATH = @MATHJAX2_PATH@ # The MATHJAX_EXTENSIONS tag can be used to specify one or MathJax extension # names that should be enabled during MathJax rendering. -MATHJAX_EXTENSIONS = +MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols # The MATHJAX_CODEFILE tag can be used to specify a file with javascript # pieces of code that will be used on startup of the MathJax code. @@ -1503,18 +1488,6 @@ GENERATE_XML = @enable_xml_docs@ XML_OUTPUT = xml -# The XML_SCHEMA tag can be used to specify an XML schema, -# which can be used by a validating XML parser to check the -# syntax of the XML files. - -XML_SCHEMA = - -# The XML_DTD tag can be used to specify an XML DTD, -# which can be used by a validating XML parser to check the -# syntax of the XML files. - -XML_DTD = - # If the XML_PROGRAMLISTING tag is set to YES Doxygen will # dump the program listings (including syntax highlighting # and cross-referencing information) to the XML output. Note that @@ -1692,11 +1665,6 @@ EXTERNAL_GROUPS = YES EXTERNAL_PAGES = YES -# The PERL_PATH should be the absolute path and name of the perl script -# interpreter (i.e. the result of `which perl'). - -PERL_PATH = /usr/bin/perl - #--------------------------------------------------------------------------- # Configuration options related to the dot tool #--------------------------------------------------------------------------- @@ -1709,15 +1677,6 @@ PERL_PATH = /usr/bin/perl CLASS_DIAGRAMS = YES -# You can define message sequence charts within doxygen comments using the \msc -# command. Doxygen will then run the mscgen tool (see -# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the -# documentation. The MSCGEN_PATH tag allows you to specify the directory where -# the mscgen tool resides. If left empty the tool is assumed to be found in the -# default search path. - -MSCGEN_PATH = - # If set to YES, the inheritance and collaboration graphs will hide # inheritance and usage relations if the target is undocumented # or is not a class. @@ -1846,7 +1805,7 @@ DIRECTORY_GRAPH = YES # HTML_FILE_EXTENSION to xhtml in order to make the SVG files # visible in IE 9+ (other browsers do not have this requirement). -DOT_IMAGE_FORMAT = png +DOT_IMAGE_FORMAT = svg # If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to # enable generation of interactive SVG images that allow zooming and panning. diff --git a/docs/doxygen/Doxyfile.swig_doc.in b/docs/doxygen/Doxyfile.swig_doc.in deleted file mode 100644 index 57736d7..0000000 --- a/docs/doxygen/Doxyfile.swig_doc.in +++ /dev/null @@ -1,1890 +0,0 @@ -# Doxyfile 1.8.4 - -# This file describes the settings to be used by the documentation system -# doxygen (www.doxygen.org) for a project. -# -# All text after a double hash (##) is considered a comment and is placed -# in front of the TAG it is preceding . -# All text after a hash (#) is considered a comment and will be ignored. -# The format is: -# TAG = value [value, ...] -# For lists items can also be appended using: -# TAG += value [value, ...] -# Values that contain spaces should be placed between quotes (" "). - -#--------------------------------------------------------------------------- -# Project related configuration options -#--------------------------------------------------------------------------- - -# This tag specifies the encoding used for all characters in the config file -# that follow. The default is UTF-8 which is also the encoding used for all -# text before the first occurrence of this tag. Doxygen uses libiconv (or the -# iconv built into libc) for the transcoding. See -# http://www.gnu.org/software/libiconv for the list of possible encodings. - -DOXYFILE_ENCODING = UTF-8 - -# The PROJECT_NAME tag is a single word (or sequence of words) that should -# identify the project. Note that if you do not use Doxywizard you need -# to put quotes around the project name if it contains spaces. - -PROJECT_NAME = @CPACK_PACKAGE_NAME@ - -# The PROJECT_NUMBER tag can be used to enter a project or revision number. -# This could be handy for archiving the generated documentation or -# if some version control system is used. - -PROJECT_NUMBER = @CPACK_PACKAGE_VERSION@ - -# Using the PROJECT_BRIEF tag one can provide an optional one line description -# for a project that appears at the top of each page and should give viewer -# a quick idea about the purpose of the project. Keep the description short. - -PROJECT_BRIEF = - -# With the PROJECT_LOGO tag one can specify an logo or icon that is -# included in the documentation. The maximum height of the logo should not -# exceed 55 pixels and the maximum width should not exceed 200 pixels. -# Doxygen will copy the logo to the output directory. - -PROJECT_LOGO = - -# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) -# base path where the generated documentation will be put. -# If a relative path is entered, it will be relative to the location -# where doxygen was started. If left blank the current directory will be used. - -OUTPUT_DIRECTORY = @OUTPUT_DIRECTORY@ - -# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create -# 4096 sub-directories (in 2 levels) under the output directory of each output -# format and will distribute the generated files over these directories. -# Enabling this option can be useful when feeding doxygen a huge amount of -# source files, where putting all generated files in the same directory would -# otherwise cause performance problems for the file system. - -CREATE_SUBDIRS = NO - -# The OUTPUT_LANGUAGE tag is used to specify the language in which all -# documentation generated by doxygen is written. Doxygen will use this -# information to generate all constant output in the proper language. -# The default language is English, other supported languages are: -# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, -# Croatian, Czech, Danish, Dutch, Esperanto, Farsi, Finnish, French, German, -# Greek, Hungarian, Italian, Japanese, Japanese-en (Japanese with English -# messages), Korean, Korean-en, Latvian, Lithuanian, Norwegian, Macedonian, -# Persian, Polish, Portuguese, Romanian, Russian, Serbian, Serbian-Cyrillic, -# Slovak, Slovene, Spanish, Swedish, Ukrainian, and Vietnamese. - -OUTPUT_LANGUAGE = English - -# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will -# include brief member descriptions after the members that are listed in -# the file and class documentation (similar to JavaDoc). -# Set to NO to disable this. - -BRIEF_MEMBER_DESC = YES - -# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend -# the brief description of a member or function before the detailed description. -# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the -# brief descriptions will be completely suppressed. - -REPEAT_BRIEF = YES - -# This tag implements a quasi-intelligent brief description abbreviator -# that is used to form the text in various listings. Each string -# in this list, if found as the leading text of the brief description, will be -# stripped from the text and the result after processing the whole list, is -# used as the annotated text. Otherwise, the brief description is used as-is. -# If left blank, the following values are used ("$name" is automatically -# replaced with the name of the entity): "The $name class" "The $name widget" -# "The $name file" "is" "provides" "specifies" "contains" -# "represents" "a" "an" "the" - -ABBREVIATE_BRIEF = - -# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then -# Doxygen will generate a detailed section even if there is only a brief -# description. - -ALWAYS_DETAILED_SEC = NO - -# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all -# inherited members of a class in the documentation of that class as if those -# members were ordinary class members. Constructors, destructors and assignment -# operators of the base classes will not be shown. - -INLINE_INHERITED_MEMB = NO - -# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full -# path before files name in the file list and in the header files. If set -# to NO the shortest path that makes the file name unique will be used. - -FULL_PATH_NAMES = YES - -# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag -# can be used to strip a user-defined part of the path. Stripping is -# only done if one of the specified strings matches the left-hand part of -# the path. The tag can be used to show relative paths in the file list. -# If left blank the directory from which doxygen is run is used as the -# path to strip. Note that you specify absolute paths here, but also -# relative paths, which will be relative from the directory where doxygen is -# started. - -STRIP_FROM_PATH = - -# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of -# the path mentioned in the documentation of a class, which tells -# the reader which header file to include in order to use a class. -# If left blank only the name of the header file containing the class -# definition is used. Otherwise one should specify the include paths that -# are normally passed to the compiler using the -I flag. - -STRIP_FROM_INC_PATH = - -# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter -# (but less readable) file names. This can be useful if your file system -# doesn't support long names like on DOS, Mac, or CD-ROM. - -SHORT_NAMES = NO - -# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen -# will interpret the first line (until the first dot) of a JavaDoc-style -# comment as the brief description. If set to NO, the JavaDoc -# comments will behave just like regular Qt-style comments -# (thus requiring an explicit @brief command for a brief description.) - -JAVADOC_AUTOBRIEF = NO - -# If the QT_AUTOBRIEF tag is set to YES then Doxygen will -# interpret the first line (until the first dot) of a Qt-style -# comment as the brief description. If set to NO, the comments -# will behave just like regular Qt-style comments (thus requiring -# an explicit \brief command for a brief description.) - -QT_AUTOBRIEF = NO - -# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen -# treat a multi-line C++ special comment block (i.e. a block of //! or /// -# comments) as a brief description. This used to be the default behaviour. -# The new default is to treat a multi-line C++ comment block as a detailed -# description. Set this tag to YES if you prefer the old behaviour instead. - -MULTILINE_CPP_IS_BRIEF = NO - -# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented -# member inherits the documentation from any documented member that it -# re-implements. - -INHERIT_DOCS = YES - -# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce -# a new page for each member. If set to NO, the documentation of a member will -# be part of the file/class/namespace that contains it. - -SEPARATE_MEMBER_PAGES = NO - -# The TAB_SIZE tag can be used to set the number of spaces in a tab. -# Doxygen uses this value to replace tabs by spaces in code fragments. - -TAB_SIZE = 8 - -# This tag can be used to specify a number of aliases that acts -# as commands in the documentation. An alias has the form "name=value". -# For example adding "sideeffect=\par Side Effects:\n" will allow you to -# put the command \sideeffect (or @sideeffect) in the documentation, which -# will result in a user-defined paragraph with heading "Side Effects:". -# You can put \n's in the value part of an alias to insert newlines. - -ALIASES = - -# This tag can be used to specify a number of word-keyword mappings (TCL only). -# A mapping has the form "name=value". For example adding -# "class=itcl::class" will allow you to use the command class in the -# itcl::class meaning. - -TCL_SUBST = - -# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C -# sources only. Doxygen will then generate output that is more tailored for C. -# For instance, some of the names that are used will be different. The list -# of all members will be omitted, etc. - -OPTIMIZE_OUTPUT_FOR_C = NO - -# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java -# sources only. Doxygen will then generate output that is more tailored for -# Java. For instance, namespaces will be presented as packages, qualified -# scopes will look different, etc. - -OPTIMIZE_OUTPUT_JAVA = NO - -# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran -# sources only. Doxygen will then generate output that is more tailored for -# Fortran. - -OPTIMIZE_FOR_FORTRAN = NO - -# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL -# sources. Doxygen will then generate output that is tailored for -# VHDL. - -OPTIMIZE_OUTPUT_VHDL = NO - -# Doxygen selects the parser to use depending on the extension of the files it -# parses. With this tag you can assign which parser to use for a given -# extension. Doxygen has a built-in mapping, but you can override or extend it -# using this tag. The format is ext=language, where ext is a file extension, -# and language is one of the parsers supported by doxygen: IDL, Java, -# Javascript, CSharp, C, C++, D, PHP, Objective-C, Python, Fortran, VHDL, C, -# C++. For instance to make doxygen treat .inc files as Fortran files (default -# is PHP), and .f files as C (default is Fortran), use: inc=Fortran f=C. Note -# that for custom extensions you also need to set FILE_PATTERNS otherwise the -# files are not read by doxygen. - -EXTENSION_MAPPING = - -# If MARKDOWN_SUPPORT is enabled (the default) then doxygen pre-processes all -# comments according to the Markdown format, which allows for more readable -# documentation. See http://daringfireball.net/projects/markdown/ for details. -# The output of markdown processing is further processed by doxygen, so you -# can mix doxygen, HTML, and XML commands with Markdown formatting. -# Disable only in case of backward compatibilities issues. - -MARKDOWN_SUPPORT = YES - -# When enabled doxygen tries to link words that correspond to documented -# classes, or namespaces to their corresponding documentation. Such a link can -# be prevented in individual cases by by putting a % sign in front of the word -# or globally by setting AUTOLINK_SUPPORT to NO. - -AUTOLINK_SUPPORT = YES - -# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want -# to include (a tag file for) the STL sources as input, then you should -# set this tag to YES in order to let doxygen match functions declarations and -# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. -# func(std::string) {}). This also makes the inheritance and collaboration -# diagrams that involve STL classes more complete and accurate. - -BUILTIN_STL_SUPPORT = YES - -# If you use Microsoft's C++/CLI language, you should set this option to YES to -# enable parsing support. - -CPP_CLI_SUPPORT = NO - -# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. -# Doxygen will parse them like normal C++ but will assume all classes use public -# instead of private inheritance when no explicit protection keyword is present. - -SIP_SUPPORT = NO - -# For Microsoft's IDL there are propget and propput attributes to indicate -# getter and setter methods for a property. Setting this option to YES (the -# default) will make doxygen replace the get and set methods by a property in -# the documentation. This will only work if the methods are indeed getting or -# setting a simple type. If this is not the case, or you want to show the -# methods anyway, you should set this option to NO. - -IDL_PROPERTY_SUPPORT = YES - -# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC -# tag is set to YES, then doxygen will reuse the documentation of the first -# member in the group (if any) for the other members of the group. By default -# all members of a group must be documented explicitly. - -DISTRIBUTE_GROUP_DOC = NO - -# Set the SUBGROUPING tag to YES (the default) to allow class member groups of -# the same type (for instance a group of public functions) to be put as a -# subgroup of that type (e.g. under the Public Functions section). Set it to -# NO to prevent subgrouping. Alternatively, this can be done per class using -# the \nosubgrouping command. - -SUBGROUPING = YES - -# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and -# unions are shown inside the group in which they are included (e.g. using -# @ingroup) instead of on a separate page (for HTML and Man pages) or -# section (for LaTeX and RTF). - -INLINE_GROUPED_CLASSES = NO - -# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and -# unions with only public data fields or simple typedef fields will be shown -# inline in the documentation of the scope in which they are defined (i.e. file, -# namespace, or group documentation), provided this scope is documented. If set -# to NO (the default), structs, classes, and unions are shown on a separate -# page (for HTML and Man pages) or section (for LaTeX and RTF). - -INLINE_SIMPLE_STRUCTS = NO - -# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum -# is documented as struct, union, or enum with the name of the typedef. So -# typedef struct TypeS {} TypeT, will appear in the documentation as a struct -# with name TypeT. When disabled the typedef will appear as a member of a file, -# namespace, or class. And the struct will be named TypeS. This can typically -# be useful for C code in case the coding convention dictates that all compound -# types are typedef'ed and only the typedef is referenced, never the tag name. - -TYPEDEF_HIDES_STRUCT = NO - -# The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This -# cache is used to resolve symbols given their name and scope. Since this can -# be an expensive process and often the same symbol appear multiple times in -# the code, doxygen keeps a cache of pre-resolved symbols. If the cache is too -# small doxygen will become slower. If the cache is too large, memory is wasted. -# The cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid -# range is 0..9, the default is 0, corresponding to a cache size of 2^16 = 65536 -# symbols. - -LOOKUP_CACHE_SIZE = 0 - -#--------------------------------------------------------------------------- -# Build related configuration options -#--------------------------------------------------------------------------- - -# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in -# documentation are documented, even if no documentation was available. -# Private class members and static file members will be hidden unless -# the EXTRACT_PRIVATE respectively EXTRACT_STATIC tags are set to YES - -EXTRACT_ALL = YES - -# If the EXTRACT_PRIVATE tag is set to YES all private members of a class -# will be included in the documentation. - -EXTRACT_PRIVATE = NO - -# If the EXTRACT_PACKAGE tag is set to YES all members with package or internal -# scope will be included in the documentation. - -EXTRACT_PACKAGE = NO - -# If the EXTRACT_STATIC tag is set to YES all static members of a file -# will be included in the documentation. - -EXTRACT_STATIC = NO - -# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) -# defined locally in source files will be included in the documentation. -# If set to NO only classes defined in header files are included. - -EXTRACT_LOCAL_CLASSES = YES - -# This flag is only useful for Objective-C code. When set to YES local -# methods, which are defined in the implementation section but not in -# the interface are included in the documentation. -# If set to NO (the default) only methods in the interface are included. - -EXTRACT_LOCAL_METHODS = NO - -# If this flag is set to YES, the members of anonymous namespaces will be -# extracted and appear in the documentation as a namespace called -# 'anonymous_namespace{file}', where file will be replaced with the base -# name of the file that contains the anonymous namespace. By default -# anonymous namespaces are hidden. - -EXTRACT_ANON_NSPACES = NO - -# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all -# undocumented members of documented classes, files or namespaces. -# If set to NO (the default) these members will be included in the -# various overviews, but no documentation section is generated. -# This option has no effect if EXTRACT_ALL is enabled. - -HIDE_UNDOC_MEMBERS = NO - -# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all -# undocumented classes that are normally visible in the class hierarchy. -# If set to NO (the default) these classes will be included in the various -# overviews. This option has no effect if EXTRACT_ALL is enabled. - -HIDE_UNDOC_CLASSES = NO - -# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all -# friend (class|struct|union) declarations. -# If set to NO (the default) these declarations will be included in the -# documentation. - -HIDE_FRIEND_COMPOUNDS = NO - -# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any -# documentation blocks found inside the body of a function. -# If set to NO (the default) these blocks will be appended to the -# function's detailed documentation block. - -HIDE_IN_BODY_DOCS = NO - -# The INTERNAL_DOCS tag determines if documentation -# that is typed after a \internal command is included. If the tag is set -# to NO (the default) then the documentation will be excluded. -# Set it to YES to include the internal documentation. - -INTERNAL_DOCS = NO - -# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate -# file names in lower-case letters. If set to YES upper-case letters are also -# allowed. This is useful if you have classes or files whose names only differ -# in case and if your file system supports case sensitive file names. Windows -# and Mac users are advised to set this option to NO. - -CASE_SENSE_NAMES = YES - -# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen -# will show members with their full class and namespace scopes in the -# documentation. If set to YES the scope will be hidden. - -HIDE_SCOPE_NAMES = NO - -# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen -# will put a list of the files that are included by a file in the documentation -# of that file. - -SHOW_INCLUDE_FILES = YES - -# If the FORCE_LOCAL_INCLUDES tag is set to YES then Doxygen -# will list include files with double quotes in the documentation -# rather than with sharp brackets. - -FORCE_LOCAL_INCLUDES = NO - -# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] -# is inserted in the documentation for inline members. - -INLINE_INFO = YES - -# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen -# will sort the (detailed) documentation of file and class members -# alphabetically by member name. If set to NO the members will appear in -# declaration order. - -SORT_MEMBER_DOCS = YES - -# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the -# brief documentation of file, namespace and class members alphabetically -# by member name. If set to NO (the default) the members will appear in -# declaration order. - -SORT_BRIEF_DOCS = NO - -# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen -# will sort the (brief and detailed) documentation of class members so that -# constructors and destructors are listed first. If set to NO (the default) -# the constructors will appear in the respective orders defined by -# SORT_MEMBER_DOCS and SORT_BRIEF_DOCS. -# This tag will be ignored for brief docs if SORT_BRIEF_DOCS is set to NO -# and ignored for detailed docs if SORT_MEMBER_DOCS is set to NO. - -SORT_MEMBERS_CTORS_1ST = NO - -# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the -# hierarchy of group names into alphabetical order. If set to NO (the default) -# the group names will appear in their defined order. - -SORT_GROUP_NAMES = NO - -# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be -# sorted by fully-qualified names, including namespaces. If set to -# NO (the default), the class list will be sorted only by class name, -# not including the namespace part. -# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. -# Note: This option applies only to the class list, not to the -# alphabetical list. - -SORT_BY_SCOPE_NAME = NO - -# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to -# do proper type resolution of all parameters of a function it will reject a -# match between the prototype and the implementation of a member function even -# if there is only one candidate or it is obvious which candidate to choose -# by doing a simple string match. By disabling STRICT_PROTO_MATCHING doxygen -# will still accept a match between prototype and implementation in such cases. - -STRICT_PROTO_MATCHING = NO - -# The GENERATE_TODOLIST tag can be used to enable (YES) or -# disable (NO) the todo list. This list is created by putting \todo -# commands in the documentation. - -GENERATE_TODOLIST = YES - -# The GENERATE_TESTLIST tag can be used to enable (YES) or -# disable (NO) the test list. This list is created by putting \test -# commands in the documentation. - -GENERATE_TESTLIST = YES - -# The GENERATE_BUGLIST tag can be used to enable (YES) or -# disable (NO) the bug list. This list is created by putting \bug -# commands in the documentation. - -GENERATE_BUGLIST = YES - -# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or -# disable (NO) the deprecated list. This list is created by putting -# \deprecated commands in the documentation. - -GENERATE_DEPRECATEDLIST= YES - -# The ENABLED_SECTIONS tag can be used to enable conditional -# documentation sections, marked by \if section-label ... \endif -# and \cond section-label ... \endcond blocks. - -ENABLED_SECTIONS = - -# The MAX_INITIALIZER_LINES tag determines the maximum number of lines -# the initial value of a variable or macro consists of for it to appear in -# the documentation. If the initializer consists of more lines than specified -# here it will be hidden. Use a value of 0 to hide initializers completely. -# The appearance of the initializer of individual variables and macros in the -# documentation can be controlled using \showinitializer or \hideinitializer -# command in the documentation regardless of this setting. - -MAX_INITIALIZER_LINES = 30 - -# Set the SHOW_USED_FILES tag to NO to disable the list of files generated -# at the bottom of the documentation of classes and structs. If set to YES the -# list will mention the files that were used to generate the documentation. - -SHOW_USED_FILES = YES - -# Set the SHOW_FILES tag to NO to disable the generation of the Files page. -# This will remove the Files entry from the Quick Index and from the -# Folder Tree View (if specified). The default is YES. - -SHOW_FILES = YES - -# Set the SHOW_NAMESPACES tag to NO to disable the generation of the -# Namespaces page. -# This will remove the Namespaces entry from the Quick Index -# and from the Folder Tree View (if specified). The default is YES. - -SHOW_NAMESPACES = YES - -# The FILE_VERSION_FILTER tag can be used to specify a program or script that -# doxygen should invoke to get the current version for each file (typically from -# the version control system). Doxygen will invoke the program by executing (via -# popen()) the command , where is the value of -# the FILE_VERSION_FILTER tag, and is the name of an input file -# provided by doxygen. Whatever the program writes to standard output -# is used as the file version. See the manual for examples. - -FILE_VERSION_FILTER = - -# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed -# by doxygen. The layout file controls the global structure of the generated -# output files in an output format independent way. To create the layout file -# that represents doxygen's defaults, run doxygen with the -l option. -# You can optionally specify a file name after the option, if omitted -# DoxygenLayout.xml will be used as the name of the layout file. - -LAYOUT_FILE = - -# The CITE_BIB_FILES tag can be used to specify one or more bib files -# containing the references data. This must be a list of .bib files. The -# .bib extension is automatically appended if omitted. Using this command -# requires the bibtex tool to be installed. See also -# http://en.wikipedia.org/wiki/BibTeX for more info. For LaTeX the style -# of the bibliography can be controlled using LATEX_BIB_STYLE. To use this -# feature you need bibtex and perl available in the search path. Do not use -# file names with spaces, bibtex cannot handle them. - -CITE_BIB_FILES = - -#--------------------------------------------------------------------------- -# configuration options related to warning and progress messages -#--------------------------------------------------------------------------- - -# The QUIET tag can be used to turn on/off the messages that are generated -# by doxygen. Possible values are YES and NO. If left blank NO is used. - -QUIET = YES - -# The WARNINGS tag can be used to turn on/off the warning messages that are -# generated by doxygen. Possible values are YES and NO. If left blank -# NO is used. - -WARNINGS = YES - -# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings -# for undocumented members. If EXTRACT_ALL is set to YES then this flag will -# automatically be disabled. - -WARN_IF_UNDOCUMENTED = YES - -# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for -# potential errors in the documentation, such as not documenting some -# parameters in a documented function, or documenting parameters that -# don't exist or using markup commands wrongly. - -WARN_IF_DOC_ERROR = YES - -# The WARN_NO_PARAMDOC option can be enabled to get warnings for -# functions that are documented, but have no documentation for their parameters -# or return value. If set to NO (the default) doxygen will only warn about -# wrong or incomplete parameter documentation, but not about the absence of -# documentation. - -WARN_NO_PARAMDOC = NO - -# The WARN_FORMAT tag determines the format of the warning messages that -# doxygen can produce. The string should contain the $file, $line, and $text -# tags, which will be replaced by the file and line number from which the -# warning originated and the warning text. Optionally the format may contain -# $version, which will be replaced by the version of the file (if it could -# be obtained via FILE_VERSION_FILTER) - -WARN_FORMAT = "$file:$line: $text" - -# The WARN_LOGFILE tag can be used to specify a file to which warning -# and error messages should be written. If left blank the output is written -# to stderr. - -WARN_LOGFILE = - -#--------------------------------------------------------------------------- -# configuration options related to the input files -#--------------------------------------------------------------------------- - -# The INPUT tag can be used to specify the files and/or directories that contain -# documented source files. You may enter file names like "myfile.cpp" or -# directories like "/usr/src/myproject". Separate the files or directories -# with spaces. - -INPUT = @INPUT_PATHS@ - -# This tag can be used to specify the character encoding of the source files -# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is -# also the default input encoding. Doxygen uses libiconv (or the iconv built -# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for -# the list of possible encodings. - -INPUT_ENCODING = UTF-8 - -# If the value of the INPUT tag contains directories, you can use the -# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp -# and *.h) to filter out the source-files in the directories. If left -# blank the following patterns are tested: -# *.c *.cc *.cxx *.cpp *.c++ *.d *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh -# *.hxx *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.dox *.py -# *.f90 *.f *.for *.vhd *.vhdl - -FILE_PATTERNS = *.h - -# The RECURSIVE tag can be used to turn specify whether or not subdirectories -# should be searched for input files as well. Possible values are YES and NO. -# If left blank NO is used. - -RECURSIVE = YES - -# The EXCLUDE tag can be used to specify files and/or directories that should be -# excluded from the INPUT source files. This way you can easily exclude a -# subdirectory from a directory tree whose root is specified with the INPUT tag. -# Note that relative paths are relative to the directory from which doxygen is -# run. - -EXCLUDE = - -# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or -# directories that are symbolic links (a Unix file system feature) are excluded -# from the input. - -EXCLUDE_SYMLINKS = NO - -# If the value of the INPUT tag contains directories, you can use the -# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude -# certain files from those directories. Note that the wildcards are matched -# against the file with absolute path, so to exclude all test directories -# for example use the pattern */test/* - -EXCLUDE_PATTERNS = - -# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names -# (namespaces, classes, functions, etc.) that should be excluded from the -# output. The symbol name can be a fully qualified name, a word, or if the -# wildcard * is used, a substring. Examples: ANamespace, AClass, -# AClass::ANamespace, ANamespace::*Test - -EXCLUDE_SYMBOLS = - -# The EXAMPLE_PATH tag can be used to specify one or more files or -# directories that contain example code fragments that are included (see -# the \include command). - -EXAMPLE_PATH = - -# If the value of the EXAMPLE_PATH tag contains directories, you can use the -# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp -# and *.h) to filter out the source-files in the directories. If left -# blank all files are included. - -EXAMPLE_PATTERNS = - -# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be -# searched for input files to be used with the \include or \dontinclude -# commands irrespective of the value of the RECURSIVE tag. -# Possible values are YES and NO. If left blank NO is used. - -EXAMPLE_RECURSIVE = NO - -# The IMAGE_PATH tag can be used to specify one or more files or -# directories that contain image that are included in the documentation (see -# the \image command). - -IMAGE_PATH = - -# The INPUT_FILTER tag can be used to specify a program that doxygen should -# invoke to filter for each input file. Doxygen will invoke the filter program -# by executing (via popen()) the command , where -# is the value of the INPUT_FILTER tag, and is the name of an -# input file. Doxygen will then use the output that the filter program writes -# to standard output. -# If FILTER_PATTERNS is specified, this tag will be ignored. -# Note that the filter must not add or remove lines; it is applied before the -# code is scanned, but not when the output code is generated. If lines are added -# or removed, the anchors will not be placed correctly. - -INPUT_FILTER = - -# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern -# basis. -# Doxygen will compare the file name with each pattern and apply the -# filter if there is a match. -# The filters are a list of the form: -# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further -# info on how filters are used. If FILTER_PATTERNS is empty or if -# non of the patterns match the file name, INPUT_FILTER is applied. - -FILTER_PATTERNS = - -# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using -# INPUT_FILTER) will be used to filter the input files when producing source -# files to browse (i.e. when SOURCE_BROWSER is set to YES). - -FILTER_SOURCE_FILES = NO - -# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file -# pattern. A pattern will override the setting for FILTER_PATTERN (if any) -# and it is also possible to disable source filtering for a specific pattern -# using *.ext= (so without naming a filter). This option only has effect when -# FILTER_SOURCE_FILES is enabled. - -FILTER_SOURCE_PATTERNS = - -# If the USE_MD_FILE_AS_MAINPAGE tag refers to the name of a markdown file that -# is part of the input, its contents will be placed on the main page -# (index.html). This can be useful if you have a project on for instance GitHub -# and want reuse the introduction page also for the doxygen output. - -USE_MDFILE_AS_MAINPAGE = - -#--------------------------------------------------------------------------- -# configuration options related to source browsing -#--------------------------------------------------------------------------- - -# If the SOURCE_BROWSER tag is set to YES then a list of source files will -# be generated. Documented entities will be cross-referenced with these sources. -# Note: To get rid of all source code in the generated output, make sure also -# VERBATIM_HEADERS is set to NO. - -SOURCE_BROWSER = NO - -# Setting the INLINE_SOURCES tag to YES will include the body -# of functions and classes directly in the documentation. - -INLINE_SOURCES = NO - -# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct -# doxygen to hide any special comment blocks from generated source code -# fragments. Normal C, C++ and Fortran comments will always remain visible. - -STRIP_CODE_COMMENTS = YES - -# If the REFERENCED_BY_RELATION tag is set to YES -# then for each documented function all documented -# functions referencing it will be listed. - -REFERENCED_BY_RELATION = NO - -# If the REFERENCES_RELATION tag is set to YES -# then for each documented function all documented entities -# called/used by that function will be listed. - -REFERENCES_RELATION = NO - -# If the REFERENCES_LINK_SOURCE tag is set to YES (the default) -# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from -# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will -# link to the source code. -# Otherwise they will link to the documentation. - -REFERENCES_LINK_SOURCE = YES - -# If the USE_HTAGS tag is set to YES then the references to source code -# will point to the HTML generated by the htags(1) tool instead of doxygen -# built-in source browser. The htags tool is part of GNU's global source -# tagging system (see http://www.gnu.org/software/global/global.html). You -# will need version 4.8.6 or higher. - -USE_HTAGS = NO - -# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen -# will generate a verbatim copy of the header file for each class for -# which an include is specified. Set to NO to disable this. - -VERBATIM_HEADERS = YES - -#--------------------------------------------------------------------------- -# configuration options related to the alphabetical class index -#--------------------------------------------------------------------------- - -# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index -# of all compounds will be generated. Enable this if the project -# contains a lot of classes, structs, unions or interfaces. - -ALPHABETICAL_INDEX = NO - -# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then -# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns -# in which this list will be split (can be a number in the range [1..20]) - -COLS_IN_ALPHA_INDEX = 5 - -# In case all classes in a project start with a common prefix, all -# classes will be put under the same header in the alphabetical index. -# The IGNORE_PREFIX tag can be used to specify one or more prefixes that -# should be ignored while generating the index headers. - -IGNORE_PREFIX = - -#--------------------------------------------------------------------------- -# configuration options related to the HTML output -#--------------------------------------------------------------------------- - -# If the GENERATE_HTML tag is set to YES (the default) Doxygen will -# generate HTML output. - -GENERATE_HTML = NO - -# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `html' will be used as the default path. - -HTML_OUTPUT = html - -# The HTML_FILE_EXTENSION tag can be used to specify the file extension for -# each generated HTML page (for example: .htm,.php,.asp). If it is left blank -# doxygen will generate files with .html extension. - -HTML_FILE_EXTENSION = .html - -# The HTML_HEADER tag can be used to specify a personal HTML header for -# each generated HTML page. If it is left blank doxygen will generate a -# standard header. Note that when using a custom header you are responsible -# for the proper inclusion of any scripts and style sheets that doxygen -# needs, which is dependent on the configuration options used. -# It is advised to generate a default header using "doxygen -w html -# header.html footer.html stylesheet.css YourConfigFile" and then modify -# that header. Note that the header is subject to change so you typically -# have to redo this when upgrading to a newer version of doxygen or when -# changing the value of configuration settings such as GENERATE_TREEVIEW! - -HTML_HEADER = - -# The HTML_FOOTER tag can be used to specify a personal HTML footer for -# each generated HTML page. If it is left blank doxygen will generate a -# standard footer. - -HTML_FOOTER = - -# The HTML_STYLESHEET tag can be used to specify a user-defined cascading -# style sheet that is used by each HTML page. It can be used to -# fine-tune the look of the HTML output. If left blank doxygen will -# generate a default style sheet. Note that it is recommended to use -# HTML_EXTRA_STYLESHEET instead of this one, as it is more robust and this -# tag will in the future become obsolete. - -HTML_STYLESHEET = - -# The HTML_EXTRA_STYLESHEET tag can be used to specify an additional -# user-defined cascading style sheet that is included after the standard -# style sheets created by doxygen. Using this option one can overrule -# certain style aspects. This is preferred over using HTML_STYLESHEET -# since it does not replace the standard style sheet and is therefor more -# robust against future updates. Doxygen will copy the style sheet file to -# the output directory. - -HTML_EXTRA_STYLESHEET = - -# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or -# other source files which should be copied to the HTML output directory. Note -# that these files will be copied to the base HTML output directory. Use the -# $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these -# files. In the HTML_STYLESHEET file, use the file name only. Also note that -# the files will be copied as-is; there are no commands or markers available. - -HTML_EXTRA_FILES = - -# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. -# Doxygen will adjust the colors in the style sheet and background images -# according to this color. Hue is specified as an angle on a colorwheel, -# see http://en.wikipedia.org/wiki/Hue for more information. -# For instance the value 0 represents red, 60 is yellow, 120 is green, -# 180 is cyan, 240 is blue, 300 purple, and 360 is red again. -# The allowed range is 0 to 359. - -HTML_COLORSTYLE_HUE = 220 - -# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of -# the colors in the HTML output. For a value of 0 the output will use -# grayscales only. A value of 255 will produce the most vivid colors. - -HTML_COLORSTYLE_SAT = 100 - -# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to -# the luminance component of the colors in the HTML output. Values below -# 100 gradually make the output lighter, whereas values above 100 make -# the output darker. The value divided by 100 is the actual gamma applied, -# so 80 represents a gamma of 0.8, The value 220 represents a gamma of 2.2, -# and 100 does not change the gamma. - -HTML_COLORSTYLE_GAMMA = 80 - -# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML -# page will contain the date and time when the page was generated. Setting -# this to NO can help when comparing the output of multiple runs. - -HTML_TIMESTAMP = YES - -# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML -# documentation will contain sections that can be hidden and shown after the -# page has loaded. - -HTML_DYNAMIC_SECTIONS = NO - -# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of -# entries shown in the various tree structured indices initially; the user -# can expand and collapse entries dynamically later on. Doxygen will expand -# the tree to such a level that at most the specified number of entries are -# visible (unless a fully collapsed tree already exceeds this amount). -# So setting the number of entries 1 will produce a full collapsed tree by -# default. 0 is a special value representing an infinite number of entries -# and will result in a full expanded tree by default. - -HTML_INDEX_NUM_ENTRIES = 100 - -# If the GENERATE_DOCSET tag is set to YES, additional index files -# will be generated that can be used as input for Apple's Xcode 3 -# integrated development environment, introduced with OSX 10.5 (Leopard). -# To create a documentation set, doxygen will generate a Makefile in the -# HTML output directory. Running make will produce the docset in that -# directory and running "make install" will install the docset in -# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find -# it at startup. -# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html -# for more information. - -GENERATE_DOCSET = NO - -# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the -# feed. A documentation feed provides an umbrella under which multiple -# documentation sets from a single provider (such as a company or product suite) -# can be grouped. - -DOCSET_FEEDNAME = "Doxygen generated docs" - -# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that -# should uniquely identify the documentation set bundle. This should be a -# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen -# will append .docset to the name. - -DOCSET_BUNDLE_ID = org.doxygen.Project - -# When GENERATE_PUBLISHER_ID tag specifies a string that should uniquely -# identify the documentation publisher. This should be a reverse domain-name -# style string, e.g. com.mycompany.MyDocSet.documentation. - -DOCSET_PUBLISHER_ID = org.doxygen.Publisher - -# The GENERATE_PUBLISHER_NAME tag identifies the documentation publisher. - -DOCSET_PUBLISHER_NAME = Publisher - -# If the GENERATE_HTMLHELP tag is set to YES, additional index files -# will be generated that can be used as input for tools like the -# Microsoft HTML help workshop to generate a compiled HTML help file (.chm) -# of the generated HTML documentation. - -GENERATE_HTMLHELP = NO - -# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can -# be used to specify the file name of the resulting .chm file. You -# can add a path in front of the file if the result should not be -# written to the html output directory. - -CHM_FILE = - -# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can -# be used to specify the location (absolute path including file name) of -# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run -# the HTML help compiler on the generated index.hhp. - -HHC_LOCATION = - -# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag -# controls if a separate .chi index file is generated (YES) or that -# it should be included in the master .chm file (NO). - -GENERATE_CHI = NO - -# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING -# is used to encode HtmlHelp index (hhk), content (hhc) and project file -# content. - -CHM_INDEX_ENCODING = - -# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag -# controls whether a binary table of contents is generated (YES) or a -# normal table of contents (NO) in the .chm file. - -BINARY_TOC = NO - -# The TOC_EXPAND flag can be set to YES to add extra items for group members -# to the contents of the HTML help documentation and to the tree view. - -TOC_EXPAND = NO - -# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and -# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated -# that can be used as input for Qt's qhelpgenerator to generate a -# Qt Compressed Help (.qch) of the generated HTML documentation. - -GENERATE_QHP = NO - -# If the QHG_LOCATION tag is specified, the QCH_FILE tag can -# be used to specify the file name of the resulting .qch file. -# The path specified is relative to the HTML output folder. - -QCH_FILE = - -# The QHP_NAMESPACE tag specifies the namespace to use when generating -# Qt Help Project output. For more information please see -# http://doc.trolltech.com/qthelpproject.html#namespace - -QHP_NAMESPACE = - -# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating -# Qt Help Project output. For more information please see -# http://doc.trolltech.com/qthelpproject.html#virtual-folders - -QHP_VIRTUAL_FOLDER = doc - -# If QHP_CUST_FILTER_NAME is set, it specifies the name of a custom filter to -# add. For more information please see -# http://doc.trolltech.com/qthelpproject.html#custom-filters - -QHP_CUST_FILTER_NAME = - -# The QHP_CUST_FILT_ATTRS tag specifies the list of the attributes of the -# custom filter to add. For more information please see -# -# Qt Help Project / Custom Filters. - -QHP_CUST_FILTER_ATTRS = - -# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this -# project's -# filter section matches. -# -# Qt Help Project / Filter Attributes. - -QHP_SECT_FILTER_ATTRS = - -# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can -# be used to specify the location of Qt's qhelpgenerator. -# If non-empty doxygen will try to run qhelpgenerator on the generated -# .qhp file. - -QHG_LOCATION = - -# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files -# will be generated, which together with the HTML files, form an Eclipse help -# plugin. To install this plugin and make it available under the help contents -# menu in Eclipse, the contents of the directory containing the HTML and XML -# files needs to be copied into the plugins directory of eclipse. The name of -# the directory within the plugins directory should be the same as -# the ECLIPSE_DOC_ID value. After copying Eclipse needs to be restarted before -# the help appears. - -GENERATE_ECLIPSEHELP = NO - -# A unique identifier for the eclipse help plugin. When installing the plugin -# the directory name containing the HTML and XML files should also have -# this name. - -ECLIPSE_DOC_ID = org.doxygen.Project - -# The DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) -# at top of each HTML page. The value NO (the default) enables the index and -# the value YES disables it. Since the tabs have the same information as the -# navigation tree you can set this option to NO if you already set -# GENERATE_TREEVIEW to YES. - -DISABLE_INDEX = NO - -# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index -# structure should be generated to display hierarchical information. -# If the tag value is set to YES, a side panel will be generated -# containing a tree-like index structure (just like the one that -# is generated for HTML Help). For this to work a browser that supports -# JavaScript, DHTML, CSS and frames is required (i.e. any modern browser). -# Windows users are probably better off using the HTML help feature. -# Since the tree basically has the same information as the tab index you -# could consider to set DISABLE_INDEX to NO when enabling this option. - -GENERATE_TREEVIEW = NO - -# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values -# (range [0,1..20]) that doxygen will group on one line in the generated HTML -# documentation. Note that a value of 0 will completely suppress the enum -# values from appearing in the overview section. - -ENUM_VALUES_PER_LINE = 4 - -# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be -# used to set the initial width (in pixels) of the frame in which the tree -# is shown. - -TREEVIEW_WIDTH = 250 - -# When the EXT_LINKS_IN_WINDOW option is set to YES doxygen will open -# links to external symbols imported via tag files in a separate window. - -EXT_LINKS_IN_WINDOW = NO - -# Use this tag to change the font size of Latex formulas included -# as images in the HTML documentation. The default is 10. Note that -# when you change the font size after a successful doxygen run you need -# to manually remove any form_*.png images from the HTML output directory -# to force them to be regenerated. - -FORMULA_FONTSIZE = 10 - -# Use the FORMULA_TRANPARENT tag to determine whether or not the images -# generated for formulas are transparent PNGs. Transparent PNGs are -# not supported properly for IE 6.0, but are supported on all modern browsers. -# Note that when changing this option you need to delete any form_*.png files -# in the HTML output before the changes have effect. - -FORMULA_TRANSPARENT = YES - -# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax -# (see http://www.mathjax.org) which uses client side Javascript for the -# rendering instead of using prerendered bitmaps. Use this if you do not -# have LaTeX installed or if you want to formulas look prettier in the HTML -# output. When enabled you may also need to install MathJax separately and -# configure the path to it using the MATHJAX_RELPATH option. - -USE_MATHJAX = NO - -# When MathJax is enabled you can set the default output format to be used for -# the MathJax output. Supported types are HTML-CSS, NativeMML (i.e. MathML) and -# SVG. The default value is HTML-CSS, which is slower, but has the best -# compatibility. - -MATHJAX_FORMAT = HTML-CSS - -# When MathJax is enabled you need to specify the location relative to the -# HTML output directory using the MATHJAX_RELPATH option. The destination -# directory should contain the MathJax.js script. For instance, if the mathjax -# directory is located at the same level as the HTML output directory, then -# MATHJAX_RELPATH should be ../mathjax. The default value points to -# the MathJax Content Delivery Network so you can quickly see the result without -# installing MathJax. -# However, it is strongly recommended to install a local -# copy of MathJax from http://www.mathjax.org before deployment. - -MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest - -# The MATHJAX_EXTENSIONS tag can be used to specify one or MathJax extension -# names that should be enabled during MathJax rendering. - -MATHJAX_EXTENSIONS = - -# The MATHJAX_CODEFILE tag can be used to specify a file with javascript -# pieces of code that will be used on startup of the MathJax code. - -MATHJAX_CODEFILE = - -# When the SEARCHENGINE tag is enabled doxygen will generate a search box -# for the HTML output. The underlying search engine uses javascript -# and DHTML and should work on any modern browser. Note that when using -# HTML help (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets -# (GENERATE_DOCSET) there is already a search function so this one should -# typically be disabled. For large projects the javascript based search engine -# can be slow, then enabling SERVER_BASED_SEARCH may provide a better solution. - -SEARCHENGINE = YES - -# When the SERVER_BASED_SEARCH tag is enabled the search engine will be -# implemented using a web server instead of a web client using Javascript. -# There are two flavours of web server based search depending on the -# EXTERNAL_SEARCH setting. When disabled, doxygen will generate a PHP script for -# searching and an index file used by the script. When EXTERNAL_SEARCH is -# enabled the indexing and searching needs to be provided by external tools. -# See the manual for details. - -SERVER_BASED_SEARCH = NO - -# When EXTERNAL_SEARCH is enabled doxygen will no longer generate the PHP -# script for searching. Instead the search results are written to an XML file -# which needs to be processed by an external indexer. Doxygen will invoke an -# external search engine pointed to by the SEARCHENGINE_URL option to obtain -# the search results. Doxygen ships with an example indexer (doxyindexer) and -# search engine (doxysearch.cgi) which are based on the open source search -# engine library Xapian. See the manual for configuration details. - -EXTERNAL_SEARCH = NO - -# The SEARCHENGINE_URL should point to a search engine hosted by a web server -# which will returned the search results when EXTERNAL_SEARCH is enabled. -# Doxygen ships with an example search engine (doxysearch) which is based on -# the open source search engine library Xapian. See the manual for configuration -# details. - -SEARCHENGINE_URL = - -# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the unindexed -# search data is written to a file for indexing by an external tool. With the -# SEARCHDATA_FILE tag the name of this file can be specified. - -SEARCHDATA_FILE = searchdata.xml - -# When SERVER_BASED_SEARCH AND EXTERNAL_SEARCH are both enabled the -# EXTERNAL_SEARCH_ID tag can be used as an identifier for the project. This is -# useful in combination with EXTRA_SEARCH_MAPPINGS to search through multiple -# projects and redirect the results back to the right project. - -EXTERNAL_SEARCH_ID = - -# The EXTRA_SEARCH_MAPPINGS tag can be used to enable searching through doxygen -# projects other than the one defined by this configuration file, but that are -# all added to the same external search index. Each project needs to have a -# unique id set via EXTERNAL_SEARCH_ID. The search mapping then maps the id -# of to a relative location where the documentation can be found. -# The format is: EXTRA_SEARCH_MAPPINGS = id1=loc1 id2=loc2 ... - -EXTRA_SEARCH_MAPPINGS = - -#--------------------------------------------------------------------------- -# configuration options related to the LaTeX output -#--------------------------------------------------------------------------- - -# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will -# generate Latex output. - -GENERATE_LATEX = NO - -# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `latex' will be used as the default path. - -LATEX_OUTPUT = latex - -# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be -# invoked. If left blank `latex' will be used as the default command name. -# Note that when enabling USE_PDFLATEX this option is only used for -# generating bitmaps for formulas in the HTML output, but not in the -# Makefile that is written to the output directory. - -LATEX_CMD_NAME = latex - -# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to -# generate index for LaTeX. If left blank `makeindex' will be used as the -# default command name. - -MAKEINDEX_CMD_NAME = makeindex - -# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact -# LaTeX documents. This may be useful for small projects and may help to -# save some trees in general. - -COMPACT_LATEX = NO - -# The PAPER_TYPE tag can be used to set the paper type that is used -# by the printer. Possible values are: a4, letter, legal and -# executive. If left blank a4 will be used. - -PAPER_TYPE = a4wide - -# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX -# packages that should be included in the LaTeX output. - -EXTRA_PACKAGES = - -# The LATEX_HEADER tag can be used to specify a personal LaTeX header for -# the generated latex document. The header should contain everything until -# the first chapter. If it is left blank doxygen will generate a -# standard header. Notice: only use this tag if you know what you are doing! - -LATEX_HEADER = - -# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for -# the generated latex document. The footer should contain everything after -# the last chapter. If it is left blank doxygen will generate a -# standard footer. Notice: only use this tag if you know what you are doing! - -LATEX_FOOTER = - -# The LATEX_EXTRA_FILES tag can be used to specify one or more extra images -# or other source files which should be copied to the LaTeX output directory. -# Note that the files will be copied as-is; there are no commands or markers -# available. - -LATEX_EXTRA_FILES = - -# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated -# is prepared for conversion to pdf (using ps2pdf). The pdf file will -# contain links (just like the HTML output) instead of page references -# This makes the output suitable for online browsing using a pdf viewer. - -PDF_HYPERLINKS = YES - -# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of -# plain latex in the generated Makefile. Set this option to YES to get a -# higher quality PDF documentation. - -USE_PDFLATEX = YES - -# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. -# command to the generated LaTeX files. This will instruct LaTeX to keep -# running if errors occur, instead of asking the user for help. -# This option is also used when generating formulas in HTML. - -LATEX_BATCHMODE = NO - -# If LATEX_HIDE_INDICES is set to YES then doxygen will not -# include the index chapters (such as File Index, Compound Index, etc.) -# in the output. - -LATEX_HIDE_INDICES = NO - -# If LATEX_SOURCE_CODE is set to YES then doxygen will include -# source code with syntax highlighting in the LaTeX output. -# Note that which sources are shown also depends on other settings -# such as SOURCE_BROWSER. - -LATEX_SOURCE_CODE = NO - -# The LATEX_BIB_STYLE tag can be used to specify the style to use for the -# bibliography, e.g. plainnat, or ieeetr. The default style is "plain". See -# http://en.wikipedia.org/wiki/BibTeX for more info. - -LATEX_BIB_STYLE = plain - -#--------------------------------------------------------------------------- -# configuration options related to the RTF output -#--------------------------------------------------------------------------- - -# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output -# The RTF output is optimized for Word 97 and may not look very pretty with -# other RTF readers or editors. - -GENERATE_RTF = NO - -# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `rtf' will be used as the default path. - -RTF_OUTPUT = rtf - -# If the COMPACT_RTF tag is set to YES Doxygen generates more compact -# RTF documents. This may be useful for small projects and may help to -# save some trees in general. - -COMPACT_RTF = NO - -# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated -# will contain hyperlink fields. The RTF file will -# contain links (just like the HTML output) instead of page references. -# This makes the output suitable for online browsing using WORD or other -# programs which support those fields. -# Note: wordpad (write) and others do not support links. - -RTF_HYPERLINKS = NO - -# Load style sheet definitions from file. Syntax is similar to doxygen's -# config file, i.e. a series of assignments. You only have to provide -# replacements, missing definitions are set to their default value. - -RTF_STYLESHEET_FILE = - -# Set optional variables used in the generation of an rtf document. -# Syntax is similar to doxygen's config file. - -RTF_EXTENSIONS_FILE = - -#--------------------------------------------------------------------------- -# configuration options related to the man page output -#--------------------------------------------------------------------------- - -# If the GENERATE_MAN tag is set to YES (the default) Doxygen will -# generate man pages - -GENERATE_MAN = NO - -# The MAN_OUTPUT tag is used to specify where the man pages will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `man' will be used as the default path. - -MAN_OUTPUT = man - -# The MAN_EXTENSION tag determines the extension that is added to -# the generated man pages (default is the subroutine's section .3) - -MAN_EXTENSION = .3 - -# If the MAN_LINKS tag is set to YES and Doxygen generates man output, -# then it will generate one additional man file for each entity -# documented in the real man page(s). These additional files -# only source the real man page, but without them the man command -# would be unable to find the correct page. The default is NO. - -MAN_LINKS = NO - -#--------------------------------------------------------------------------- -# configuration options related to the XML output -#--------------------------------------------------------------------------- - -# If the GENERATE_XML tag is set to YES Doxygen will -# generate an XML file that captures the structure of -# the code including all documentation. - -GENERATE_XML = YES - -# The XML_OUTPUT tag is used to specify where the XML pages will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `xml' will be used as the default path. - -XML_OUTPUT = xml - -# The XML_SCHEMA tag can be used to specify an XML schema, -# which can be used by a validating XML parser to check the -# syntax of the XML files. - -XML_SCHEMA = - -# The XML_DTD tag can be used to specify an XML DTD, -# which can be used by a validating XML parser to check the -# syntax of the XML files. - -XML_DTD = - -# If the XML_PROGRAMLISTING tag is set to YES Doxygen will -# dump the program listings (including syntax highlighting -# and cross-referencing information) to the XML output. Note that -# enabling this will significantly increase the size of the XML output. - -XML_PROGRAMLISTING = YES - -#--------------------------------------------------------------------------- -# configuration options related to the DOCBOOK output -#--------------------------------------------------------------------------- - -# If the GENERATE_DOCBOOK tag is set to YES Doxygen will generate DOCBOOK files -# that can be used to generate PDF. - -GENERATE_DOCBOOK = NO - -# The DOCBOOK_OUTPUT tag is used to specify where the DOCBOOK pages will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be put in -# front of it. If left blank docbook will be used as the default path. - -DOCBOOK_OUTPUT = docbook - -#--------------------------------------------------------------------------- -# configuration options for the AutoGen Definitions output -#--------------------------------------------------------------------------- - -# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will -# generate an AutoGen Definitions (see autogen.sf.net) file -# that captures the structure of the code including all -# documentation. Note that this feature is still experimental -# and incomplete at the moment. - -GENERATE_AUTOGEN_DEF = NO - -#--------------------------------------------------------------------------- -# configuration options related to the Perl module output -#--------------------------------------------------------------------------- - -# If the GENERATE_PERLMOD tag is set to YES Doxygen will -# generate a Perl module file that captures the structure of -# the code including all documentation. Note that this -# feature is still experimental and incomplete at the -# moment. - -GENERATE_PERLMOD = NO - -# If the PERLMOD_LATEX tag is set to YES Doxygen will generate -# the necessary Makefile rules, Perl scripts and LaTeX code to be able -# to generate PDF and DVI output from the Perl module output. - -PERLMOD_LATEX = NO - -# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be -# nicely formatted so it can be parsed by a human reader. -# This is useful -# if you want to understand what is going on. -# On the other hand, if this -# tag is set to NO the size of the Perl module output will be much smaller -# and Perl will parse it just the same. - -PERLMOD_PRETTY = YES - -# The names of the make variables in the generated doxyrules.make file -# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. -# This is useful so different doxyrules.make files included by the same -# Makefile don't overwrite each other's variables. - -PERLMOD_MAKEVAR_PREFIX = - -#--------------------------------------------------------------------------- -# Configuration options related to the preprocessor -#--------------------------------------------------------------------------- - -# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will -# evaluate all C-preprocessor directives found in the sources and include -# files. - -ENABLE_PREPROCESSING = YES - -# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro -# names in the source code. If set to NO (the default) only conditional -# compilation will be performed. Macro expansion can be done in a controlled -# way by setting EXPAND_ONLY_PREDEF to YES. - -MACRO_EXPANSION = YES - -# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES -# then the macro expansion is limited to the macros specified with the -# PREDEFINED and EXPAND_AS_DEFINED tags. - -EXPAND_ONLY_PREDEF = NO - -# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files -# pointed to by INCLUDE_PATH will be searched when a #include is found. - -SEARCH_INCLUDES = YES - -# The INCLUDE_PATH tag can be used to specify one or more directories that -# contain include files that are not input files but should be processed by -# the preprocessor. - -INCLUDE_PATH = - -# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard -# patterns (like *.h and *.hpp) to filter out the header-files in the -# directories. If left blank, the patterns specified with FILE_PATTERNS will -# be used. - -INCLUDE_FILE_PATTERNS = - -# The PREDEFINED tag can be used to specify one or more macro names that -# are defined before the preprocessor is started (similar to the -D option of -# gcc). The argument of the tag is a list of macros of the form: name -# or name=definition (no spaces). If the definition and the = are -# omitted =1 is assumed. To prevent a macro definition from being -# undefined via #undef or recursively expanded use the := operator -# instead of the = operator. - -PREDEFINED = - -# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then -# this tag can be used to specify a list of macro names that should be expanded. -# The macro definition that is found in the sources will be used. -# Use the PREDEFINED tag if you want to use a different macro definition that -# overrules the definition found in the source code. - -EXPAND_AS_DEFINED = - -# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then -# doxygen's preprocessor will remove all references to function-like macros -# that are alone on a line, have an all uppercase name, and do not end with a -# semicolon, because these will confuse the parser if not removed. - -SKIP_FUNCTION_MACROS = YES - -#--------------------------------------------------------------------------- -# Configuration::additions related to external references -#--------------------------------------------------------------------------- - -# The TAGFILES option can be used to specify one or more tagfiles. For each -# tag file the location of the external documentation should be added. The -# format of a tag file without this location is as follows: -# -# TAGFILES = file1 file2 ... -# Adding location for the tag files is done as follows: -# -# TAGFILES = file1=loc1 "file2 = loc2" ... -# where "loc1" and "loc2" can be relative or absolute paths -# or URLs. Note that each tag file must have a unique name (where the name does -# NOT include the path). If a tag file is not located in the directory in which -# doxygen is run, you must also specify the path to the tagfile here. - -TAGFILES = - -# When a file name is specified after GENERATE_TAGFILE, doxygen will create -# a tag file that is based on the input files it reads. - -GENERATE_TAGFILE = - -# If the ALLEXTERNALS tag is set to YES all external classes will be listed -# in the class index. If set to NO only the inherited external classes -# will be listed. - -ALLEXTERNALS = NO - -# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed -# in the modules index. If set to NO, only the current project's groups will -# be listed. - -EXTERNAL_GROUPS = YES - -# If the EXTERNAL_PAGES tag is set to YES all external pages will be listed -# in the related pages index. If set to NO, only the current project's -# pages will be listed. - -EXTERNAL_PAGES = YES - -# The PERL_PATH should be the absolute path and name of the perl script -# interpreter (i.e. the result of `which perl'). - -PERL_PATH = /usr/bin/perl - -#--------------------------------------------------------------------------- -# Configuration options related to the dot tool -#--------------------------------------------------------------------------- - -# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will -# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base -# or super classes. Setting the tag to NO turns the diagrams off. Note that -# this option also works with HAVE_DOT disabled, but it is recommended to -# install and use dot, since it yields more powerful graphs. - -CLASS_DIAGRAMS = YES - -# You can define message sequence charts within doxygen comments using the \msc -# command. Doxygen will then run the mscgen tool (see -# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the -# documentation. The MSCGEN_PATH tag allows you to specify the directory where -# the mscgen tool resides. If left empty the tool is assumed to be found in the -# default search path. - -MSCGEN_PATH = - -# If set to YES, the inheritance and collaboration graphs will hide -# inheritance and usage relations if the target is undocumented -# or is not a class. - -HIDE_UNDOC_RELATIONS = YES - -# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is -# available from the path. This tool is part of Graphviz, a graph visualization -# toolkit from AT&T and Lucent Bell Labs. The other options in this section -# have no effect if this option is set to NO (the default) - -HAVE_DOT = NO - -# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is -# allowed to run in parallel. When set to 0 (the default) doxygen will -# base this on the number of processors available in the system. You can set it -# explicitly to a value larger than 0 to get control over the balance -# between CPU load and processing speed. - -DOT_NUM_THREADS = 0 - -# By default doxygen will use the Helvetica font for all dot files that -# doxygen generates. When you want a differently looking font you can specify -# the font name using DOT_FONTNAME. You need to make sure dot is able to find -# the font, which can be done by putting it in a standard location or by setting -# the DOTFONTPATH environment variable or by setting DOT_FONTPATH to the -# directory containing the font. - -DOT_FONTNAME = Helvetica - -# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. -# The default size is 10pt. - -DOT_FONTSIZE = 10 - -# By default doxygen will tell dot to use the Helvetica font. -# If you specify a different font using DOT_FONTNAME you can use DOT_FONTPATH to -# set the path where dot can find it. - -DOT_FONTPATH = - -# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen -# will generate a graph for each documented class showing the direct and -# indirect inheritance relations. Setting this tag to YES will force the -# CLASS_DIAGRAMS tag to NO. - -CLASS_GRAPH = YES - -# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen -# will generate a graph for each documented class showing the direct and -# indirect implementation dependencies (inheritance, containment, and -# class references variables) of the class with other documented classes. - -COLLABORATION_GRAPH = YES - -# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen -# will generate a graph for groups, showing the direct groups dependencies - -GROUP_GRAPHS = YES - -# If the UML_LOOK tag is set to YES doxygen will generate inheritance and -# collaboration diagrams in a style similar to the OMG's Unified Modeling -# Language. - -UML_LOOK = NO - -# If the UML_LOOK tag is enabled, the fields and methods are shown inside -# the class node. If there are many fields or methods and many nodes the -# graph may become too big to be useful. The UML_LIMIT_NUM_FIELDS -# threshold limits the number of items for each type to make the size more -# manageable. Set this to 0 for no limit. Note that the threshold may be -# exceeded by 50% before the limit is enforced. - -UML_LIMIT_NUM_FIELDS = 10 - -# If set to YES, the inheritance and collaboration graphs will show the -# relations between templates and their instances. - -TEMPLATE_RELATIONS = NO - -# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT -# tags are set to YES then doxygen will generate a graph for each documented -# file showing the direct and indirect include dependencies of the file with -# other documented files. - -INCLUDE_GRAPH = YES - -# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and -# HAVE_DOT tags are set to YES then doxygen will generate a graph for each -# documented header file showing the documented files that directly or -# indirectly include this file. - -INCLUDED_BY_GRAPH = YES - -# If the CALL_GRAPH and HAVE_DOT options are set to YES then -# doxygen will generate a call dependency graph for every global function -# or class method. Note that enabling this option will significantly increase -# the time of a run. So in most cases it will be better to enable call graphs -# for selected functions only using the \callgraph command. - -CALL_GRAPH = NO - -# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then -# doxygen will generate a caller dependency graph for every global function -# or class method. Note that enabling this option will significantly increase -# the time of a run. So in most cases it will be better to enable caller -# graphs for selected functions only using the \callergraph command. - -CALLER_GRAPH = NO - -# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen -# will generate a graphical hierarchy of all classes instead of a textual one. - -GRAPHICAL_HIERARCHY = YES - -# If the DIRECTORY_GRAPH and HAVE_DOT tags are set to YES -# then doxygen will show the dependencies a directory has on other directories -# in a graphical way. The dependency relations are determined by the #include -# relations between the files in the directories. - -DIRECTORY_GRAPH = YES - -# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images -# generated by dot. Possible values are svg, png, jpg, or gif. -# If left blank png will be used. If you choose svg you need to set -# HTML_FILE_EXTENSION to xhtml in order to make the SVG files -# visible in IE 9+ (other browsers do not have this requirement). - -DOT_IMAGE_FORMAT = png - -# If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to -# enable generation of interactive SVG images that allow zooming and panning. -# Note that this requires a modern browser other than Internet Explorer. -# Tested and working are Firefox, Chrome, Safari, and Opera. For IE 9+ you -# need to set HTML_FILE_EXTENSION to xhtml in order to make the SVG files -# visible. Older versions of IE do not have SVG support. - -INTERACTIVE_SVG = NO - -# The tag DOT_PATH can be used to specify the path where the dot tool can be -# found. If left blank, it is assumed the dot tool can be found in the path. - -DOT_PATH = - -# The DOTFILE_DIRS tag can be used to specify one or more directories that -# contain dot files that are included in the documentation (see the -# \dotfile command). - -DOTFILE_DIRS = - -# The MSCFILE_DIRS tag can be used to specify one or more directories that -# contain msc files that are included in the documentation (see the -# \mscfile command). - -MSCFILE_DIRS = - -# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of -# nodes that will be shown in the graph. If the number of nodes in a graph -# becomes larger than this value, doxygen will truncate the graph, which is -# visualized by representing a node as a red box. Note that doxygen if the -# number of direct children of the root node in a graph is already larger than -# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note -# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH. - -DOT_GRAPH_MAX_NODES = 50 - -# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the -# graphs generated by dot. A depth value of 3 means that only nodes reachable -# from the root by following a path via at most 3 edges will be shown. Nodes -# that lay further from the root node will be omitted. Note that setting this -# option to 1 or 2 may greatly reduce the computation time needed for large -# code bases. Also note that the size of a graph can be further restricted by -# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction. - -MAX_DOT_GRAPH_DEPTH = 0 - -# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent -# background. This is disabled by default, because dot on Windows does not -# seem to support this out of the box. Warning: Depending on the platform used, -# enabling this option may lead to badly anti-aliased labels on the edges of -# a graph (i.e. they become hard to read). - -DOT_TRANSPARENT = NO - -# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output -# files in one run (i.e. multiple -o and -T options on the command line). This -# makes dot run faster, but since only newer versions of dot (>1.8.10) -# support this, this feature is disabled by default. - -DOT_MULTI_TARGETS = YES - -# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will -# generate a legend page explaining the meaning of the various boxes and -# arrows in the dot generated graphs. - -GENERATE_LEGEND = YES - -# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will -# remove the intermediate dot files that are used to generate -# the various graphs. - -DOT_CLEANUP = YES diff --git a/docs/doxygen/doxyxml/__init__.py b/docs/doxygen/doxyxml/__init__.py index 5cd0b3c..3f902b8 100644 --- a/docs/doxygen/doxyxml/__init__.py +++ b/docs/doxygen/doxyxml/__init__.py @@ -1,22 +1,11 @@ # # Copyright 2010 Free Software Foundation, Inc. # -# This file is part of GNU Radio +# This file was generated by gr_modtool, a tool from the GNU Radio framework +# This file is a part of gr-bruninga # -# GNU Radio is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 3, or (at your option) -# any later version. +# SPDX-License-Identifier: GPL-3.0-or-later # -# GNU Radio is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with GNU Radio; see the file COPYING. If not, write to -# the Free Software Foundation, Inc., 51 Franklin Street, -# Boston, MA 02110-1301, USA. # """ Python interface to contents of doxygen xml documentation. @@ -64,7 +53,8 @@ """ -from doxyindex import DoxyIndex, DoxyFunction, DoxyParam, DoxyClass, DoxyFile, DoxyNamespace, DoxyGroup, DoxyFriend, DoxyOther +from .doxyindex import DoxyIndex, DoxyFunction, DoxyParam, DoxyClass, DoxyFile, DoxyNamespace, DoxyGroup, DoxyFriend, DoxyOther + def _test(): import os @@ -77,6 +67,6 @@ def _test(): import doctest return doctest.testmod() + if __name__ == "__main__": _test() - diff --git a/docs/doxygen/doxyxml/__pycache__/__init__.cpython-39.pyc b/docs/doxygen/doxyxml/__pycache__/__init__.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ad8adf33c2683abf91985b89f376e838913dd001 GIT binary patch literal 1990 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 literal 0 HcmV?d00001 diff --git a/docs/doxygen/doxyxml/__pycache__/text.cpython-39.pyc b/docs/doxygen/doxyxml/__pycache__/text.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1689f84a46f4c8ed858225d8da217bbde8fec706 GIT binary patch literal 1282 zcmbVMUuzRV5Z~RqB$sPyt5y)74n^TalRgLqDOJ!4f&?K-u^`9gcAH#!xr@6SO+)%( z`UUjC=k~E*Li`;2>PPUcFFLd7|Gv3lW@q<)%=~6{Ch`2dPhkD}x!yi<3HgnO^NYdZ zIfx2Cak5D`c2?hTr3vCbN1&DeIN|OoEbjsv4PFrNWbb1apfKZEUko<;A zG~0PX3I0BioGla1fRfXE_bPOZpQ=|V6GMJ zP3c!^kySu`2b{80 z`{cG}Pkl&b1->6L!|Kb%O||G>uAIM`rAjA7f3S8JpnpKf_};m4V)5&%S&_tpDwd s+n~+RHI*oWNsJ;J+jjDd&sn*wWoN)!?H7EQi8X9^I{eA+C>YnyfcE=|Sz+JXU(RZb z2`LD}XrpowYO6wEHAM){N7x}v(2zl=?F7+-Q#;eLEeL;VAts?jlLQiZ&rU5S$2HDu z4EE5B#FNV6cAXziq}0Ba@;RdgM=-aq8`1e5MfI>1ts6;c<3*rav~*h0==csL_*dXI dUouY?6vwQDl*XATCFgQjp8Xg(PicR0W#50Fgk}H$ literal 0 HcmV?d00001 diff --git a/docs/doxygen/doxyxml/generated/__pycache__/compound.cpython-39.pyc b/docs/doxygen/doxyxml/generated/__pycache__/compound.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f3b1c098d9d74b941c436da3a6e899bc45e9c751 GIT binary patch literal 23234 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 literal 0 HcmV?d00001 diff --git a/docs/doxygen/doxyxml/generated/__pycache__/compoundsuper.cpython-39.pyc b/docs/doxygen/doxyxml/generated/__pycache__/compoundsuper.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..577100426dfed7aa1316a2fdb63347c75d86c39d GIT binary patch literal 317740 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�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

F-q09ntGRIkP@m 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 A5dZ)H literal 0 HcmV?d00001 diff --git a/docs/doxygen/doxyxml/generated/__pycache__/index.cpython-39.pyc b/docs/doxygen/doxyxml/generated/__pycache__/index.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..cfa454fb6b30417d4c47c9ed75563252cb3f71c2 GIT binary patch literal 2355 zcma)7-EQ1O6rSKGhwIW5NLn@^>Fa3MaVz6 zXf^{D2hio8Kp61}qfAR^s`(nlxt{30u13Q*n8D1%Oj~{ncm`|1-12Qo9usCU`;su5 z+oQEVbl>3)&VqH|tT6{TxNZZd!#g-roORX)P8-%6!0GZX&VqH;VH=mk-(>nR@w(?< zI*)nAMObj=KFu@t5g)kjp8MI}{_a=%yI;7U@9yrogQ+`QoH{z*8BcedmtYU^XlbQ! z7PCC3*XxFJ6Z#=^`8JS(jOdj%BQrYF<~lf&9FrHc@9Cwj zlu2_|t~Vr>b`XFWMG(LdL-ORLw0`44#(5?%f-i{Z!0_*r-f5ol-eB~sH_Rp?WO3e; zBI*srgMpZ2aW)KlERQ4*rL7vz(xg{AkM)#Cz=HyDa|^oEfDn3qx1kSMxKnEsDL$To zhE^^ueFBRixd1yy|cddST2A@##zhALuh3pYP;!z6L*$ijZc+~SnS!cBQP08hEUpT^Otn}!8Y z#)~jc?!3RzvX7PnL!Dzbsc z?#R5>Q{s96(ZUP~uK^^!Ex~VzP&%GP2e!UD&>-Rkq;gN+Y4}#JO0szk>!Ff9f zo=?K0;;49v+wixBiU=BkdWseh)I}nkZ0hK0CxXSbwk#LdlEPw;4k{^3)>#?gm{um|=bZ-N?DWJQ7-vz2G>>e)B_G;|D5l(gS z0sK{9S_+I702e_iwvfDqMDbNvSF!B^;{kMuRs+}oWDad>=l5?K-Gskq^!wr-oCkb~ zJ1~m7NH9tjlu&BJt*hU?0}K!P3QD;1KPc(2d4R`I__Ds5ODJJoZIzv;Dt~JLDUBkG zLEUhU;8ig}QP(jvH(r4tXC<`4&%%xO;ktMa3BtQ!+!8b2!G4XIJ1Z$o#CZC`aS)tW z`E3=PmCIZZ`)w`S)&#C2e6Q+;R-(g{m59880M-apQmCgR?LsT`k#S|tiK?+JcvYaH z&fo#9GRG2Fq)T%g3d#L0JOPuGXT`&W2XxbNL6tsnq7LEu~P^6bFVTq&pJ zvee~Nst~K9DzHARlv5Q6AIL$Jgi?xkk&Dn0A0ly);4d2LEInM>Usq-E8}y2TB3_=>Px# literal 0 HcmV?d00001 diff --git a/docs/doxygen/doxyxml/generated/__pycache__/indexsuper.cpython-39.pyc b/docs/doxygen/doxyxml/generated/__pycache__/indexsuper.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e67afe0925bc6ce7ec820a8fff02ec3dce79dc53 GIT binary patch literal 19245 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 literal 0 HcmV?d00001 diff --git a/docs/doxygen/doxyxml/generated/compound.py b/docs/doxygen/doxyxml/generated/compound.py index 1522ac2..321328b 100644 --- a/docs/doxygen/doxyxml/generated/compound.py +++ b/docs/doxygen/doxyxml/generated/compound.py @@ -4,14 +4,14 @@ Generated Mon Feb 9 19:08:05 2009 by generateDS.py. """ -from string import lower as str_lower + from xml.dom import minidom from xml.dom import Node import sys -import compoundsuper as supermod -from compoundsuper import MixedContainer +from . import compoundsuper as supermod +from .compoundsuper import MixedContainer class DoxygenTypeSub(supermod.DoxygenType): @@ -22,13 +22,15 @@ def find(self, details): return self.compounddef.find(details) + supermod.DoxygenType.subclass = DoxygenTypeSub # end class DoxygenTypeSub class compounddefTypeSub(supermod.compounddefType): def __init__(self, kind=None, prot=None, id=None, compoundname='', title='', basecompoundref=None, derivedcompoundref=None, includes=None, includedby=None, incdepgraph=None, invincdepgraph=None, innerdir=None, innerfile=None, innerclass=None, innernamespace=None, innerpage=None, innergroup=None, templateparamlist=None, sectiondef=None, briefdescription=None, detaileddescription=None, inheritancegraph=None, collaborationgraph=None, programlisting=None, location=None, listofallmembers=None): - supermod.compounddefType.__init__(self, kind, prot, id, compoundname, title, basecompoundref, derivedcompoundref, includes, includedby, incdepgraph, invincdepgraph, innerdir, innerfile, innerclass, innernamespace, innerpage, innergroup, templateparamlist, sectiondef, briefdescription, detaileddescription, inheritancegraph, collaborationgraph, programlisting, location, listofallmembers) + supermod.compounddefType.__init__(self, kind, prot, id, compoundname, title, basecompoundref, derivedcompoundref, includes, includedby, incdepgraph, invincdepgraph, innerdir, innerfile, innerclass, + innernamespace, innerpage, innergroup, templateparamlist, sectiondef, briefdescription, detaileddescription, inheritancegraph, collaborationgraph, programlisting, location, listofallmembers) def find(self, details): @@ -48,13 +50,18 @@ def find(self, details): class listofallmembersTypeSub(supermod.listofallmembersType): def __init__(self, member=None): supermod.listofallmembersType.__init__(self, member) + + supermod.listofallmembersType.subclass = listofallmembersTypeSub # end class listofallmembersTypeSub class memberRefTypeSub(supermod.memberRefType): def __init__(self, virt=None, prot=None, refid=None, ambiguityscope=None, scope='', name=''): - supermod.memberRefType.__init__(self, virt, prot, refid, ambiguityscope, scope, name) + supermod.memberRefType.__init__( + self, virt, prot, refid, ambiguityscope, scope, name) + + supermod.memberRefType.subclass = memberRefTypeSub # end class memberRefTypeSub @@ -62,6 +69,8 @@ def __init__(self, virt=None, prot=None, refid=None, ambiguityscope=None, scope= class compoundRefTypeSub(supermod.compoundRefType): def __init__(self, virt=None, prot=None, refid=None, valueOf_='', mixedclass_=None, content_=None): supermod.compoundRefType.__init__(self, mixedclass_, content_) + + supermod.compoundRefType.subclass = compoundRefTypeSub # end class compoundRefTypeSub @@ -69,6 +78,8 @@ def __init__(self, virt=None, prot=None, refid=None, valueOf_='', mixedclass_=No class reimplementTypeSub(supermod.reimplementType): def __init__(self, refid=None, valueOf_='', mixedclass_=None, content_=None): supermod.reimplementType.__init__(self, mixedclass_, content_) + + supermod.reimplementType.subclass = reimplementTypeSub # end class reimplementTypeSub @@ -76,6 +87,8 @@ def __init__(self, refid=None, valueOf_='', mixedclass_=None, content_=None): class incTypeSub(supermod.incType): def __init__(self, local=None, refid=None, valueOf_='', mixedclass_=None, content_=None): supermod.incType.__init__(self, mixedclass_, content_) + + supermod.incType.subclass = incTypeSub # end class incTypeSub @@ -83,23 +96,26 @@ def __init__(self, local=None, refid=None, valueOf_='', mixedclass_=None, conten class refTypeSub(supermod.refType): def __init__(self, prot=None, refid=None, valueOf_='', mixedclass_=None, content_=None): supermod.refType.__init__(self, mixedclass_, content_) + + supermod.refType.subclass = refTypeSub # end class refTypeSub - class refTextTypeSub(supermod.refTextType): def __init__(self, refid=None, kindref=None, external=None, valueOf_='', mixedclass_=None, content_=None): supermod.refTextType.__init__(self, mixedclass_, content_) + supermod.refTextType.subclass = refTextTypeSub # end class refTextTypeSub -class sectiondefTypeSub(supermod.sectiondefType): +class sectiondefTypeSub(supermod.sectiondefType): def __init__(self, kind=None, header='', description=None, memberdef=None): - supermod.sectiondefType.__init__(self, kind, header, description, memberdef) + supermod.sectiondefType.__init__( + self, kind, header, description, memberdef) def find(self, details): @@ -116,7 +132,10 @@ def find(self, details): class memberdefTypeSub(supermod.memberdefType): def __init__(self, initonly=None, kind=None, volatile=None, const=None, raise_=None, virt=None, readable=None, prot=None, explicit=None, new=None, final=None, writable=None, add=None, static=None, remove=None, sealed=None, mutable=None, gettable=None, inline=None, settable=None, id=None, templateparamlist=None, type_=None, definition='', argsstring='', name='', read='', write='', bitfield='', reimplements=None, reimplementedby=None, param=None, enumvalue=None, initializer=None, exceptions=None, briefdescription=None, detaileddescription=None, inbodydescription=None, location=None, references=None, referencedby=None): - supermod.memberdefType.__init__(self, initonly, kind, volatile, const, raise_, virt, readable, prot, explicit, new, final, writable, add, static, remove, sealed, mutable, gettable, inline, settable, id, templateparamlist, type_, definition, argsstring, name, read, write, bitfield, reimplements, reimplementedby, param, enumvalue, initializer, exceptions, briefdescription, detaileddescription, inbodydescription, location, references, referencedby) + supermod.memberdefType.__init__(self, initonly, kind, volatile, const, raise_, virt, readable, prot, explicit, new, final, writable, add, static, remove, sealed, mutable, gettable, inline, settable, id, templateparamlist, type_, + definition, argsstring, name, read, write, bitfield, reimplements, reimplementedby, param, enumvalue, initializer, exceptions, briefdescription, detaileddescription, inbodydescription, location, references, referencedby) + + supermod.memberdefType.subclass = memberdefTypeSub # end class memberdefTypeSub @@ -124,6 +143,8 @@ def __init__(self, initonly=None, kind=None, volatile=None, const=None, raise_=N class descriptionTypeSub(supermod.descriptionType): def __init__(self, title='', para=None, sect1=None, internal=None, mixedclass_=None, content_=None): supermod.descriptionType.__init__(self, mixedclass_, content_) + + supermod.descriptionType.subclass = descriptionTypeSub # end class descriptionTypeSub @@ -131,6 +152,8 @@ def __init__(self, title='', para=None, sect1=None, internal=None, mixedclass_=N class enumvalueTypeSub(supermod.enumvalueType): def __init__(self, prot=None, id=None, name='', initializer=None, briefdescription=None, detaileddescription=None, mixedclass_=None, content_=None): supermod.enumvalueType.__init__(self, mixedclass_, content_) + + supermod.enumvalueType.subclass = enumvalueTypeSub # end class enumvalueTypeSub @@ -138,13 +161,18 @@ def __init__(self, prot=None, id=None, name='', initializer=None, briefdescripti class templateparamlistTypeSub(supermod.templateparamlistType): def __init__(self, param=None): supermod.templateparamlistType.__init__(self, param) + + supermod.templateparamlistType.subclass = templateparamlistTypeSub # end class templateparamlistTypeSub class paramTypeSub(supermod.paramType): def __init__(self, type_=None, declname='', defname='', array='', defval=None, briefdescription=None): - supermod.paramType.__init__(self, type_, declname, defname, array, defval, briefdescription) + supermod.paramType.__init__( + self, type_, declname, defname, array, defval, briefdescription) + + supermod.paramType.subclass = paramTypeSub # end class paramTypeSub @@ -152,6 +180,8 @@ def __init__(self, type_=None, declname='', defname='', array='', defval=None, b class linkedTextTypeSub(supermod.linkedTextType): def __init__(self, ref=None, mixedclass_=None, content_=None): supermod.linkedTextType.__init__(self, mixedclass_, content_) + + supermod.linkedTextType.subclass = linkedTextTypeSub # end class linkedTextTypeSub @@ -159,6 +189,8 @@ def __init__(self, ref=None, mixedclass_=None, content_=None): class graphTypeSub(supermod.graphType): def __init__(self, node=None): supermod.graphType.__init__(self, node) + + supermod.graphType.subclass = graphTypeSub # end class graphTypeSub @@ -166,6 +198,8 @@ def __init__(self, node=None): class nodeTypeSub(supermod.nodeType): def __init__(self, id=None, label='', link=None, childnode=None): supermod.nodeType.__init__(self, id, label, link, childnode) + + supermod.nodeType.subclass = nodeTypeSub # end class nodeTypeSub @@ -173,6 +207,8 @@ def __init__(self, id=None, label='', link=None, childnode=None): class childnodeTypeSub(supermod.childnodeType): def __init__(self, relation=None, refid=None, edgelabel=None): supermod.childnodeType.__init__(self, relation, refid, edgelabel) + + supermod.childnodeType.subclass = childnodeTypeSub # end class childnodeTypeSub @@ -180,6 +216,8 @@ def __init__(self, relation=None, refid=None, edgelabel=None): class linkTypeSub(supermod.linkType): def __init__(self, refid=None, external=None, valueOf_=''): supermod.linkType.__init__(self, refid, external) + + supermod.linkType.subclass = linkTypeSub # end class linkTypeSub @@ -187,13 +225,18 @@ def __init__(self, refid=None, external=None, valueOf_=''): class listingTypeSub(supermod.listingType): def __init__(self, codeline=None): supermod.listingType.__init__(self, codeline) + + supermod.listingType.subclass = listingTypeSub # end class listingTypeSub class codelineTypeSub(supermod.codelineType): def __init__(self, external=None, lineno=None, refkind=None, refid=None, highlight=None): - supermod.codelineType.__init__(self, external, lineno, refkind, refid, highlight) + supermod.codelineType.__init__( + self, external, lineno, refkind, refid, highlight) + + supermod.codelineType.subclass = codelineTypeSub # end class codelineTypeSub @@ -201,6 +244,8 @@ def __init__(self, external=None, lineno=None, refkind=None, refid=None, highlig class highlightTypeSub(supermod.highlightType): def __init__(self, class_=None, sp=None, ref=None, mixedclass_=None, content_=None): supermod.highlightType.__init__(self, mixedclass_, content_) + + supermod.highlightType.subclass = highlightTypeSub # end class highlightTypeSub @@ -208,13 +253,18 @@ def __init__(self, class_=None, sp=None, ref=None, mixedclass_=None, content_=No class referenceTypeSub(supermod.referenceType): def __init__(self, endline=None, startline=None, refid=None, compoundref=None, valueOf_='', mixedclass_=None, content_=None): supermod.referenceType.__init__(self, mixedclass_, content_) + + supermod.referenceType.subclass = referenceTypeSub # end class referenceTypeSub class locationTypeSub(supermod.locationType): def __init__(self, bodystart=None, line=None, bodyend=None, bodyfile=None, file=None, valueOf_=''): - supermod.locationType.__init__(self, bodystart, line, bodyend, bodyfile, file) + supermod.locationType.__init__( + self, bodystart, line, bodyend, bodyfile, file) + + supermod.locationType.subclass = locationTypeSub # end class locationTypeSub @@ -222,6 +272,8 @@ def __init__(self, bodystart=None, line=None, bodyend=None, bodyfile=None, file= class docSect1TypeSub(supermod.docSect1Type): def __init__(self, id=None, title='', para=None, sect2=None, internal=None, mixedclass_=None, content_=None): supermod.docSect1Type.__init__(self, mixedclass_, content_) + + supermod.docSect1Type.subclass = docSect1TypeSub # end class docSect1TypeSub @@ -229,6 +281,8 @@ def __init__(self, id=None, title='', para=None, sect2=None, internal=None, mixe class docSect2TypeSub(supermod.docSect2Type): def __init__(self, id=None, title='', para=None, sect3=None, internal=None, mixedclass_=None, content_=None): supermod.docSect2Type.__init__(self, mixedclass_, content_) + + supermod.docSect2Type.subclass = docSect2TypeSub # end class docSect2TypeSub @@ -236,6 +290,8 @@ def __init__(self, id=None, title='', para=None, sect3=None, internal=None, mixe class docSect3TypeSub(supermod.docSect3Type): def __init__(self, id=None, title='', para=None, sect4=None, internal=None, mixedclass_=None, content_=None): supermod.docSect3Type.__init__(self, mixedclass_, content_) + + supermod.docSect3Type.subclass = docSect3TypeSub # end class docSect3TypeSub @@ -243,6 +299,8 @@ def __init__(self, id=None, title='', para=None, sect4=None, internal=None, mixe class docSect4TypeSub(supermod.docSect4Type): def __init__(self, id=None, title='', para=None, internal=None, mixedclass_=None, content_=None): supermod.docSect4Type.__init__(self, mixedclass_, content_) + + supermod.docSect4Type.subclass = docSect4TypeSub # end class docSect4TypeSub @@ -250,6 +308,8 @@ def __init__(self, id=None, title='', para=None, internal=None, mixedclass_=None class docInternalTypeSub(supermod.docInternalType): def __init__(self, para=None, sect1=None, mixedclass_=None, content_=None): supermod.docInternalType.__init__(self, mixedclass_, content_) + + supermod.docInternalType.subclass = docInternalTypeSub # end class docInternalTypeSub @@ -257,6 +317,8 @@ def __init__(self, para=None, sect1=None, mixedclass_=None, content_=None): class docInternalS1TypeSub(supermod.docInternalS1Type): def __init__(self, para=None, sect2=None, mixedclass_=None, content_=None): supermod.docInternalS1Type.__init__(self, mixedclass_, content_) + + supermod.docInternalS1Type.subclass = docInternalS1TypeSub # end class docInternalS1TypeSub @@ -264,6 +326,8 @@ def __init__(self, para=None, sect2=None, mixedclass_=None, content_=None): class docInternalS2TypeSub(supermod.docInternalS2Type): def __init__(self, para=None, sect3=None, mixedclass_=None, content_=None): supermod.docInternalS2Type.__init__(self, mixedclass_, content_) + + supermod.docInternalS2Type.subclass = docInternalS2TypeSub # end class docInternalS2TypeSub @@ -271,6 +335,8 @@ def __init__(self, para=None, sect3=None, mixedclass_=None, content_=None): class docInternalS3TypeSub(supermod.docInternalS3Type): def __init__(self, para=None, sect3=None, mixedclass_=None, content_=None): supermod.docInternalS3Type.__init__(self, mixedclass_, content_) + + supermod.docInternalS3Type.subclass = docInternalS3TypeSub # end class docInternalS3TypeSub @@ -278,6 +344,8 @@ def __init__(self, para=None, sect3=None, mixedclass_=None, content_=None): class docInternalS4TypeSub(supermod.docInternalS4Type): def __init__(self, para=None, mixedclass_=None, content_=None): supermod.docInternalS4Type.__init__(self, mixedclass_, content_) + + supermod.docInternalS4Type.subclass = docInternalS4TypeSub # end class docInternalS4TypeSub @@ -285,6 +353,8 @@ def __init__(self, para=None, mixedclass_=None, content_=None): class docURLLinkSub(supermod.docURLLink): def __init__(self, url=None, valueOf_='', mixedclass_=None, content_=None): supermod.docURLLink.__init__(self, mixedclass_, content_) + + supermod.docURLLink.subclass = docURLLinkSub # end class docURLLinkSub @@ -292,6 +362,8 @@ def __init__(self, url=None, valueOf_='', mixedclass_=None, content_=None): class docAnchorTypeSub(supermod.docAnchorType): def __init__(self, id=None, valueOf_='', mixedclass_=None, content_=None): supermod.docAnchorType.__init__(self, mixedclass_, content_) + + supermod.docAnchorType.subclass = docAnchorTypeSub # end class docAnchorTypeSub @@ -299,6 +371,8 @@ def __init__(self, id=None, valueOf_='', mixedclass_=None, content_=None): class docFormulaTypeSub(supermod.docFormulaType): def __init__(self, id=None, valueOf_='', mixedclass_=None, content_=None): supermod.docFormulaType.__init__(self, mixedclass_, content_) + + supermod.docFormulaType.subclass = docFormulaTypeSub # end class docFormulaTypeSub @@ -306,6 +380,8 @@ def __init__(self, id=None, valueOf_='', mixedclass_=None, content_=None): class docIndexEntryTypeSub(supermod.docIndexEntryType): def __init__(self, primaryie='', secondaryie=''): supermod.docIndexEntryType.__init__(self, primaryie, secondaryie) + + supermod.docIndexEntryType.subclass = docIndexEntryTypeSub # end class docIndexEntryTypeSub @@ -313,6 +389,8 @@ def __init__(self, primaryie='', secondaryie=''): class docListTypeSub(supermod.docListType): def __init__(self, listitem=None): supermod.docListType.__init__(self, listitem) + + supermod.docListType.subclass = docListTypeSub # end class docListTypeSub @@ -320,6 +398,8 @@ def __init__(self, listitem=None): class docListItemTypeSub(supermod.docListItemType): def __init__(self, para=None): supermod.docListItemType.__init__(self, para) + + supermod.docListItemType.subclass = docListItemTypeSub # end class docListItemTypeSub @@ -327,6 +407,8 @@ def __init__(self, para=None): class docSimpleSectTypeSub(supermod.docSimpleSectType): def __init__(self, kind=None, title=None, para=None): supermod.docSimpleSectType.__init__(self, kind, title, para) + + supermod.docSimpleSectType.subclass = docSimpleSectTypeSub # end class docSimpleSectTypeSub @@ -334,6 +416,8 @@ def __init__(self, kind=None, title=None, para=None): class docVarListEntryTypeSub(supermod.docVarListEntryType): def __init__(self, term=None): supermod.docVarListEntryType.__init__(self, term) + + supermod.docVarListEntryType.subclass = docVarListEntryTypeSub # end class docVarListEntryTypeSub @@ -341,6 +425,8 @@ def __init__(self, term=None): class docRefTextTypeSub(supermod.docRefTextType): def __init__(self, refid=None, kindref=None, external=None, valueOf_='', mixedclass_=None, content_=None): supermod.docRefTextType.__init__(self, mixedclass_, content_) + + supermod.docRefTextType.subclass = docRefTextTypeSub # end class docRefTextTypeSub @@ -348,6 +434,8 @@ def __init__(self, refid=None, kindref=None, external=None, valueOf_='', mixedcl class docTableTypeSub(supermod.docTableType): def __init__(self, rows=None, cols=None, row=None, caption=None): supermod.docTableType.__init__(self, rows, cols, row, caption) + + supermod.docTableType.subclass = docTableTypeSub # end class docTableTypeSub @@ -355,6 +443,8 @@ def __init__(self, rows=None, cols=None, row=None, caption=None): class docRowTypeSub(supermod.docRowType): def __init__(self, entry=None): supermod.docRowType.__init__(self, entry) + + supermod.docRowType.subclass = docRowTypeSub # end class docRowTypeSub @@ -362,6 +452,8 @@ def __init__(self, entry=None): class docEntryTypeSub(supermod.docEntryType): def __init__(self, thead=None, para=None): supermod.docEntryType.__init__(self, thead, para) + + supermod.docEntryType.subclass = docEntryTypeSub # end class docEntryTypeSub @@ -369,6 +461,8 @@ def __init__(self, thead=None, para=None): class docHeadingTypeSub(supermod.docHeadingType): def __init__(self, level=None, valueOf_='', mixedclass_=None, content_=None): supermod.docHeadingType.__init__(self, mixedclass_, content_) + + supermod.docHeadingType.subclass = docHeadingTypeSub # end class docHeadingTypeSub @@ -376,6 +470,8 @@ def __init__(self, level=None, valueOf_='', mixedclass_=None, content_=None): class docImageTypeSub(supermod.docImageType): def __init__(self, width=None, type_=None, name=None, height=None, valueOf_='', mixedclass_=None, content_=None): supermod.docImageType.__init__(self, mixedclass_, content_) + + supermod.docImageType.subclass = docImageTypeSub # end class docImageTypeSub @@ -383,6 +479,8 @@ def __init__(self, width=None, type_=None, name=None, height=None, valueOf_='', class docDotFileTypeSub(supermod.docDotFileType): def __init__(self, name=None, valueOf_='', mixedclass_=None, content_=None): supermod.docDotFileType.__init__(self, mixedclass_, content_) + + supermod.docDotFileType.subclass = docDotFileTypeSub # end class docDotFileTypeSub @@ -390,6 +488,8 @@ def __init__(self, name=None, valueOf_='', mixedclass_=None, content_=None): class docTocItemTypeSub(supermod.docTocItemType): def __init__(self, id=None, valueOf_='', mixedclass_=None, content_=None): supermod.docTocItemType.__init__(self, mixedclass_, content_) + + supermod.docTocItemType.subclass = docTocItemTypeSub # end class docTocItemTypeSub @@ -397,6 +497,8 @@ def __init__(self, id=None, valueOf_='', mixedclass_=None, content_=None): class docTocListTypeSub(supermod.docTocListType): def __init__(self, tocitem=None): supermod.docTocListType.__init__(self, tocitem) + + supermod.docTocListType.subclass = docTocListTypeSub # end class docTocListTypeSub @@ -404,6 +506,8 @@ def __init__(self, tocitem=None): class docLanguageTypeSub(supermod.docLanguageType): def __init__(self, langid=None, para=None): supermod.docLanguageType.__init__(self, langid, para) + + supermod.docLanguageType.subclass = docLanguageTypeSub # end class docLanguageTypeSub @@ -411,13 +515,18 @@ def __init__(self, langid=None, para=None): class docParamListTypeSub(supermod.docParamListType): def __init__(self, kind=None, parameteritem=None): supermod.docParamListType.__init__(self, kind, parameteritem) + + supermod.docParamListType.subclass = docParamListTypeSub # end class docParamListTypeSub class docParamListItemSub(supermod.docParamListItem): def __init__(self, parameternamelist=None, parameterdescription=None): - supermod.docParamListItem.__init__(self, parameternamelist, parameterdescription) + supermod.docParamListItem.__init__( + self, parameternamelist, parameterdescription) + + supermod.docParamListItem.subclass = docParamListItemSub # end class docParamListItemSub @@ -425,6 +534,8 @@ def __init__(self, parameternamelist=None, parameterdescription=None): class docParamNameListSub(supermod.docParamNameList): def __init__(self, parametername=None): supermod.docParamNameList.__init__(self, parametername) + + supermod.docParamNameList.subclass = docParamNameListSub # end class docParamNameListSub @@ -432,6 +543,8 @@ def __init__(self, parametername=None): class docParamNameSub(supermod.docParamName): def __init__(self, direction=None, ref=None, mixedclass_=None, content_=None): supermod.docParamName.__init__(self, mixedclass_, content_) + + supermod.docParamName.subclass = docParamNameSub # end class docParamNameSub @@ -439,6 +552,8 @@ def __init__(self, direction=None, ref=None, mixedclass_=None, content_=None): class docXRefSectTypeSub(supermod.docXRefSectType): def __init__(self, id=None, xreftitle=None, xrefdescription=None): supermod.docXRefSectType.__init__(self, id, xreftitle, xrefdescription) + + supermod.docXRefSectType.subclass = docXRefSectTypeSub # end class docXRefSectTypeSub @@ -446,6 +561,8 @@ def __init__(self, id=None, xreftitle=None, xrefdescription=None): class docCopyTypeSub(supermod.docCopyType): def __init__(self, link=None, para=None, sect1=None, internal=None): supermod.docCopyType.__init__(self, link, para, sect1, internal) + + supermod.docCopyType.subclass = docCopyTypeSub # end class docCopyTypeSub @@ -453,9 +570,12 @@ def __init__(self, link=None, para=None, sect1=None, internal=None): class docCharTypeSub(supermod.docCharType): def __init__(self, char=None, valueOf_=''): supermod.docCharType.__init__(self, char) + + supermod.docCharType.subclass = docCharTypeSub # end class docCharTypeSub + class docParaTypeSub(supermod.docParaType): def __init__(self, char=None, valueOf_=''): supermod.docParaType.__init__(self, char) @@ -469,7 +589,7 @@ def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.TEXT_NODE: obj_ = self.mixedclass_(MixedContainer.CategoryText, - MixedContainer.TypeNone, '', child_.nodeValue) + MixedContainer.TypeNone, '', child_.nodeValue) self.content.append(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == "ref": @@ -492,12 +612,9 @@ def buildChildren(self, child_, nodeName_): # end class docParaTypeSub - def parse(inFilename): doc = minidom.parse(inFilename) rootNode = doc.documentElement rootObj = supermod.DoxygenType.factory() rootObj.build(rootNode) return rootObj - - diff --git a/docs/doxygen/doxyxml/generated/compoundsuper.py b/docs/doxygen/doxyxml/generated/compoundsuper.py index 6255dda..40f548a 100644 --- a/docs/doxygen/doxyxml/generated/compoundsuper.py +++ b/docs/doxygen/doxyxml/generated/compoundsuper.py @@ -4,9 +4,9 @@ # Generated Thu Jun 11 18:44:25 2009 by generateDS.py. # + import sys -import getopt -from string import lower as str_lower + from xml.dom import minidom from xml.dom import Node @@ -19,17 +19,21 @@ try: from generatedssuper import GeneratedsSuper -except ImportError, exp: +except ImportError as exp: - class GeneratedsSuper: + class GeneratedsSuper(object): def format_string(self, input_data, input_name=''): return input_data + def format_integer(self, input_data, input_name=''): return '%d' % input_data + def format_float(self, input_data, input_name=''): return '%f' % input_data + def format_double(self, input_data, input_name=''): return '%e' % input_data + def format_boolean(self, input_data, input_name=''): return '%s' % input_data @@ -41,9 +45,9 @@ def format_boolean(self, input_data, input_name=''): ## from IPython.Shell import IPShellEmbed ## args = '' -## ipshell = IPShellEmbed(args, +# ipshell = IPShellEmbed(args, ## banner = 'Dropping into IPython', -## exit_msg = 'Leaving Interpreter, back to program.') +# exit_msg = 'Leaving Interpreter, back to program.') # Then use the following line where and when you want to drop into the # IPython shell: @@ -59,20 +63,23 @@ def format_boolean(self, input_data, input_name=''): # Support/utility functions. # + def showIndent(outfile, level): for idx in range(level): outfile.write(' ') + def quote_xml(inStr): - s1 = (isinstance(inStr, basestring) and inStr or + s1 = (isinstance(inStr, str) and inStr or '%s' % inStr) s1 = s1.replace('&', '&') s1 = s1.replace('<', '<') s1 = s1.replace('>', '>') return s1 + def quote_attrib(inStr): - s1 = (isinstance(inStr, basestring) and inStr or + s1 = (isinstance(inStr, str) and inStr or '%s' % inStr) s1 = s1.replace('&', '&') s1 = s1.replace('<', '<') @@ -86,6 +93,7 @@ def quote_attrib(inStr): s1 = '"%s"' % s1 return s1 + def quote_python(inStr): s1 = inStr if s1.find("'") == -1: @@ -102,7 +110,7 @@ def quote_python(inStr): return '"""%s"""' % s1 -class MixedContainer: +class MixedContainer(object): # Constants for category: CategoryNone = 0 CategoryText = 1 @@ -117,26 +125,33 @@ class MixedContainer: TypeDecimal = 5 TypeDouble = 6 TypeBoolean = 7 + def __init__(self, category, content_type, name, value): self.category = category self.content_type = content_type self.name = name self.value = value + def getCategory(self): return self.category + def getContenttype(self, content_type): return self.content_type + def getValue(self): return self.value + def getName(self): return self.name + def export(self, outfile, level, name, namespace): if self.category == MixedContainer.CategoryText: outfile.write(self.value) elif self.category == MixedContainer.CategorySimple: self.exportSimple(outfile, level, name) else: # category == MixedContainer.CategoryComplex - self.value.export(outfile, level, namespace,name) + self.value.export(outfile, level, namespace, name) + def exportSimple(self, outfile, level, name): if self.content_type == MixedContainer.TypeString: outfile.write('<%s>%s' % (self.name, self.value, self.name)) @@ -148,19 +163,20 @@ def exportSimple(self, outfile, level, name): outfile.write('<%s>%f' % (self.name, self.value, self.name)) elif self.content_type == MixedContainer.TypeDouble: outfile.write('<%s>%g' % (self.name, self.value, self.name)) + def exportLiteral(self, outfile, level, name): if self.category == MixedContainer.CategoryText: showIndent(outfile, level) - outfile.write('MixedContainer(%d, %d, "%s", "%s"),\n' % \ - (self.category, self.content_type, self.name, self.value)) + outfile.write('MixedContainer(%d, %d, "%s", "%s"),\n' % + (self.category, self.content_type, self.name, self.value)) elif self.category == MixedContainer.CategorySimple: showIndent(outfile, level) - outfile.write('MixedContainer(%d, %d, "%s", "%s"),\n' % \ - (self.category, self.content_type, self.name, self.value)) + outfile.write('MixedContainer(%d, %d, "%s", "%s"),\n' % + (self.category, self.content_type, self.name, self.value)) else: # category == MixedContainer.CategoryComplex showIndent(outfile, level) - outfile.write('MixedContainer(%d, %d, "%s",\n' % \ - (self.category, self.content_type, self.name,)) + outfile.write('MixedContainer(%d, %d, "%s",\n' % + (self.category, self.content_type, self.name,)) self.value.exportLiteral(outfile, level + 1) showIndent(outfile, level) outfile.write(')\n') @@ -171,6 +187,7 @@ def __init__(self, name='', data_type='', container=0): self.name = name self.data_type = data_type self.container = container + def set_name(self, name): self.name = name def get_name(self): return self.name def set_data_type(self, data_type): self.data_type = data_type @@ -186,9 +203,11 @@ def get_container(self): return self.container class DoxygenType(GeneratedsSuper): subclass = None superclass = None + def __init__(self, version=None, compounddef=None): self.version = version self.compounddef = compounddef + def factory(*args_, **kwargs_): if DoxygenType.subclass: return DoxygenType.subclass(*args_, **kwargs_) @@ -199,6 +218,7 @@ def get_compounddef(self): return self.compounddef def set_compounddef(self, compounddef): self.compounddef = compounddef def get_version(self): return self.version def set_version(self, version): self.version = version + def export(self, outfile, level, namespace_='', name_='DoxygenType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) @@ -210,27 +230,34 @@ def export(self, outfile, level, namespace_='', name_='DoxygenType', namespacede outfile.write('\n' % (namespace_, name_)) else: outfile.write(' />\n') + def exportAttributes(self, outfile, level, namespace_='', name_='DoxygenType'): outfile.write(' version=%s' % (quote_attrib(self.version), )) + def exportChildren(self, outfile, level, namespace_='', name_='DoxygenType'): if self.compounddef: - self.compounddef.export(outfile, level, namespace_, name_='compounddef') + self.compounddef.export( + outfile, level, namespace_, name_='compounddef') + def hasContent_(self): if ( self.compounddef is not None - ): + ): return True else: return False + def exportLiteral(self, outfile, level, name_='DoxygenType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) + def exportLiteralAttributes(self, outfile, level, name_): if self.version is not None: showIndent(outfile, level) outfile.write('version = "%s",\n' % (self.version,)) + def exportLiteralChildren(self, outfile, level, name_): if self.compounddef: showIndent(outfile, level) @@ -238,18 +265,21 @@ def exportLiteralChildren(self, outfile, level, name_): self.compounddef.exportLiteral(outfile, level, name_='compounddef') showIndent(outfile, level) outfile.write('),\n') + def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) + def buildAttributes(self, attrs): if attrs.get('version'): self.version = attrs.get('version').value + def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.ELEMENT_NODE and \ - nodeName_ == 'compounddef': + nodeName_ == 'compounddef': obj_ = compounddefType.factory() obj_.build(child_) self.set_compounddef(obj_) @@ -259,6 +289,7 @@ def buildChildren(self, child_, nodeName_): class compounddefType(GeneratedsSuper): subclass = None superclass = None + def __init__(self, kind=None, prot=None, id=None, compoundname=None, title=None, basecompoundref=None, derivedcompoundref=None, includes=None, includedby=None, incdepgraph=None, invincdepgraph=None, innerdir=None, innerfile=None, innerclass=None, innernamespace=None, innerpage=None, innergroup=None, templateparamlist=None, sectiondef=None, briefdescription=None, detaileddescription=None, inheritancegraph=None, collaborationgraph=None, programlisting=None, location=None, listofallmembers=None): self.kind = kind self.prot = prot @@ -319,6 +350,7 @@ def __init__(self, kind=None, prot=None, id=None, compoundname=None, title=None, self.programlisting = programlisting self.location = location self.listofallmembers = listofallmembers + def factory(*args_, **kwargs_): if compounddefType.subclass: return compounddefType.subclass(*args_, **kwargs_) @@ -330,13 +362,23 @@ def set_compoundname(self, compoundname): self.compoundname = compoundname def get_title(self): return self.title def set_title(self, title): self.title = title def get_basecompoundref(self): return self.basecompoundref - def set_basecompoundref(self, basecompoundref): self.basecompoundref = basecompoundref + def set_basecompoundref( + self, basecompoundref): self.basecompoundref = basecompoundref + def add_basecompoundref(self, value): self.basecompoundref.append(value) - def insert_basecompoundref(self, index, value): self.basecompoundref[index] = value + def insert_basecompoundref( + self, index, value): self.basecompoundref[index] = value + def get_derivedcompoundref(self): return self.derivedcompoundref - def set_derivedcompoundref(self, derivedcompoundref): self.derivedcompoundref = derivedcompoundref - def add_derivedcompoundref(self, value): self.derivedcompoundref.append(value) - def insert_derivedcompoundref(self, index, value): self.derivedcompoundref[index] = value + + def set_derivedcompoundref( + self, derivedcompoundref): self.derivedcompoundref = derivedcompoundref + + def add_derivedcompoundref( + self, value): self.derivedcompoundref.append(value) + def insert_derivedcompoundref( + self, index, value): self.derivedcompoundref[index] = value + def get_includes(self): return self.includes def set_includes(self, includes): self.includes = includes def add_includes(self, value): self.includes.append(value) @@ -348,7 +390,9 @@ def insert_includedby(self, index, value): self.includedby[index] = value def get_incdepgraph(self): return self.incdepgraph def set_incdepgraph(self, incdepgraph): self.incdepgraph = incdepgraph def get_invincdepgraph(self): return self.invincdepgraph - def set_invincdepgraph(self, invincdepgraph): self.invincdepgraph = invincdepgraph + def set_invincdepgraph( + self, invincdepgraph): self.invincdepgraph = invincdepgraph + def get_innerdir(self): return self.innerdir def set_innerdir(self, innerdir): self.innerdir = innerdir def add_innerdir(self, value): self.innerdir.append(value) @@ -362,9 +406,13 @@ def set_innerclass(self, innerclass): self.innerclass = innerclass def add_innerclass(self, value): self.innerclass.append(value) def insert_innerclass(self, index, value): self.innerclass[index] = value def get_innernamespace(self): return self.innernamespace - def set_innernamespace(self, innernamespace): self.innernamespace = innernamespace + def set_innernamespace( + self, innernamespace): self.innernamespace = innernamespace + def add_innernamespace(self, value): self.innernamespace.append(value) - def insert_innernamespace(self, index, value): self.innernamespace[index] = value + def insert_innernamespace( + self, index, value): self.innernamespace[index] = value + def get_innerpage(self): return self.innerpage def set_innerpage(self, innerpage): self.innerpage = innerpage def add_innerpage(self, value): self.innerpage.append(value) @@ -374,35 +422,51 @@ def set_innergroup(self, innergroup): self.innergroup = innergroup def add_innergroup(self, value): self.innergroup.append(value) def insert_innergroup(self, index, value): self.innergroup[index] = value def get_templateparamlist(self): return self.templateparamlist - def set_templateparamlist(self, templateparamlist): self.templateparamlist = templateparamlist + def set_templateparamlist( + self, templateparamlist): self.templateparamlist = templateparamlist + def get_sectiondef(self): return self.sectiondef def set_sectiondef(self, sectiondef): self.sectiondef = sectiondef def add_sectiondef(self, value): self.sectiondef.append(value) def insert_sectiondef(self, index, value): self.sectiondef[index] = value def get_briefdescription(self): return self.briefdescription - def set_briefdescription(self, briefdescription): self.briefdescription = briefdescription + def set_briefdescription( + self, briefdescription): self.briefdescription = briefdescription + def get_detaileddescription(self): return self.detaileddescription - def set_detaileddescription(self, detaileddescription): self.detaileddescription = detaileddescription + def set_detaileddescription( + self, detaileddescription): self.detaileddescription = detaileddescription + def get_inheritancegraph(self): return self.inheritancegraph - def set_inheritancegraph(self, inheritancegraph): self.inheritancegraph = inheritancegraph + def set_inheritancegraph( + self, inheritancegraph): self.inheritancegraph = inheritancegraph + def get_collaborationgraph(self): return self.collaborationgraph - def set_collaborationgraph(self, collaborationgraph): self.collaborationgraph = collaborationgraph + def set_collaborationgraph( + self, collaborationgraph): self.collaborationgraph = collaborationgraph + def get_programlisting(self): return self.programlisting - def set_programlisting(self, programlisting): self.programlisting = programlisting + def set_programlisting( + self, programlisting): self.programlisting = programlisting + def get_location(self): return self.location def set_location(self, location): self.location = location def get_listofallmembers(self): return self.listofallmembers - def set_listofallmembers(self, listofallmembers): self.listofallmembers = listofallmembers + def set_listofallmembers( + self, listofallmembers): self.listofallmembers = listofallmembers + def get_kind(self): return self.kind def set_kind(self, kind): self.kind = kind def get_prot(self): return self.prot def set_prot(self, prot): self.prot = prot def get_id(self): return self.id def set_id(self, id): self.id = id + def export(self, outfile, level, namespace_='', name_='compounddefType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) - self.exportAttributes(outfile, level, namespace_, name_='compounddefType') + self.exportAttributes(outfile, level, namespace_, + name_='compounddefType') if self.hasContent_(): outfile.write('>\n') self.exportChildren(outfile, level + 1, namespace_, name_) @@ -410,32 +474,41 @@ def export(self, outfile, level, namespace_='', name_='compounddefType', namespa outfile.write('\n' % (namespace_, name_)) else: outfile.write(' />\n') + def exportAttributes(self, outfile, level, namespace_='', name_='compounddefType'): if self.kind is not None: outfile.write(' kind=%s' % (quote_attrib(self.kind), )) if self.prot is not None: outfile.write(' prot=%s' % (quote_attrib(self.prot), )) if self.id is not None: - outfile.write(' id=%s' % (self.format_string(quote_attrib(self.id).encode(ExternalEncoding), input_name='id'), )) + outfile.write(' id=%s' % (self.format_string(quote_attrib( + self.id).encode(ExternalEncoding), input_name='id'), )) + def exportChildren(self, outfile, level, namespace_='', name_='compounddefType'): if self.compoundname is not None: showIndent(outfile, level) - outfile.write('<%scompoundname>%s\n' % (namespace_, self.format_string(quote_xml(self.compoundname).encode(ExternalEncoding), input_name='compoundname'), namespace_)) + outfile.write('<%scompoundname>%s\n' % (namespace_, self.format_string( + quote_xml(self.compoundname).encode(ExternalEncoding), input_name='compoundname'), namespace_)) if self.title is not None: showIndent(outfile, level) - outfile.write('<%stitle>%s\n' % (namespace_, self.format_string(quote_xml(self.title).encode(ExternalEncoding), input_name='title'), namespace_)) + outfile.write('<%stitle>%s\n' % (namespace_, self.format_string( + quote_xml(self.title).encode(ExternalEncoding), input_name='title'), namespace_)) for basecompoundref_ in self.basecompoundref: - basecompoundref_.export(outfile, level, namespace_, name_='basecompoundref') + basecompoundref_.export( + outfile, level, namespace_, name_='basecompoundref') for derivedcompoundref_ in self.derivedcompoundref: - derivedcompoundref_.export(outfile, level, namespace_, name_='derivedcompoundref') + derivedcompoundref_.export( + outfile, level, namespace_, name_='derivedcompoundref') for includes_ in self.includes: includes_.export(outfile, level, namespace_, name_='includes') for includedby_ in self.includedby: includedby_.export(outfile, level, namespace_, name_='includedby') if self.incdepgraph: - self.incdepgraph.export(outfile, level, namespace_, name_='incdepgraph') + self.incdepgraph.export( + outfile, level, namespace_, name_='incdepgraph') if self.invincdepgraph: - self.invincdepgraph.export(outfile, level, namespace_, name_='invincdepgraph') + self.invincdepgraph.export( + outfile, level, namespace_, name_='invincdepgraph') for innerdir_ in self.innerdir: innerdir_.export(outfile, level, namespace_, name_='innerdir') for innerfile_ in self.innerfile: @@ -443,29 +516,38 @@ def exportChildren(self, outfile, level, namespace_='', name_='compounddefType') for innerclass_ in self.innerclass: innerclass_.export(outfile, level, namespace_, name_='innerclass') for innernamespace_ in self.innernamespace: - innernamespace_.export(outfile, level, namespace_, name_='innernamespace') + innernamespace_.export( + outfile, level, namespace_, name_='innernamespace') for innerpage_ in self.innerpage: innerpage_.export(outfile, level, namespace_, name_='innerpage') for innergroup_ in self.innergroup: innergroup_.export(outfile, level, namespace_, name_='innergroup') if self.templateparamlist: - self.templateparamlist.export(outfile, level, namespace_, name_='templateparamlist') + self.templateparamlist.export( + outfile, level, namespace_, name_='templateparamlist') for sectiondef_ in self.sectiondef: sectiondef_.export(outfile, level, namespace_, name_='sectiondef') if self.briefdescription: - self.briefdescription.export(outfile, level, namespace_, name_='briefdescription') + self.briefdescription.export( + outfile, level, namespace_, name_='briefdescription') if self.detaileddescription: - self.detaileddescription.export(outfile, level, namespace_, name_='detaileddescription') + self.detaileddescription.export( + outfile, level, namespace_, name_='detaileddescription') if self.inheritancegraph: - self.inheritancegraph.export(outfile, level, namespace_, name_='inheritancegraph') + self.inheritancegraph.export( + outfile, level, namespace_, name_='inheritancegraph') if self.collaborationgraph: - self.collaborationgraph.export(outfile, level, namespace_, name_='collaborationgraph') + self.collaborationgraph.export( + outfile, level, namespace_, name_='collaborationgraph') if self.programlisting: - self.programlisting.export(outfile, level, namespace_, name_='programlisting') + self.programlisting.export( + outfile, level, namespace_, name_='programlisting') if self.location: self.location.export(outfile, level, namespace_, name_='location') if self.listofallmembers: - self.listofallmembers.export(outfile, level, namespace_, name_='listofallmembers') + self.listofallmembers.export( + outfile, level, namespace_, name_='listofallmembers') + def hasContent_(self): if ( self.compoundname is not None or @@ -491,15 +573,17 @@ def hasContent_(self): self.programlisting is not None or self.location is not None or self.listofallmembers is not None - ): + ): return True else: return False + def exportLiteral(self, outfile, level, name_='compounddefType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) + def exportLiteralAttributes(self, outfile, level, name_): if self.kind is not None: showIndent(outfile, level) @@ -510,9 +594,11 @@ def exportLiteralAttributes(self, outfile, level, name_): if self.id is not None: showIndent(outfile, level) outfile.write('id = %s,\n' % (self.id,)) + def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) - outfile.write('compoundname=%s,\n' % quote_python(self.compoundname).encode(ExternalEncoding)) + outfile.write('compoundname=%s,\n' % quote_python( + self.compoundname).encode(ExternalEncoding)) if self.title: showIndent(outfile, level) outfile.write('title=model_.xsd_string(\n') @@ -525,7 +611,8 @@ def exportLiteralChildren(self, outfile, level, name_): for basecompoundref in self.basecompoundref: showIndent(outfile, level) outfile.write('model_.basecompoundref(\n') - basecompoundref.exportLiteral(outfile, level, name_='basecompoundref') + basecompoundref.exportLiteral( + outfile, level, name_='basecompoundref') showIndent(outfile, level) outfile.write('),\n') level -= 1 @@ -537,7 +624,8 @@ def exportLiteralChildren(self, outfile, level, name_): for derivedcompoundref in self.derivedcompoundref: showIndent(outfile, level) outfile.write('model_.derivedcompoundref(\n') - derivedcompoundref.exportLiteral(outfile, level, name_='derivedcompoundref') + derivedcompoundref.exportLiteral( + outfile, level, name_='derivedcompoundref') showIndent(outfile, level) outfile.write('),\n') level -= 1 @@ -576,7 +664,8 @@ def exportLiteralChildren(self, outfile, level, name_): if self.invincdepgraph: showIndent(outfile, level) outfile.write('invincdepgraph=model_.graphType(\n') - self.invincdepgraph.exportLiteral(outfile, level, name_='invincdepgraph') + self.invincdepgraph.exportLiteral( + outfile, level, name_='invincdepgraph') showIndent(outfile, level) outfile.write('),\n') showIndent(outfile, level) @@ -621,7 +710,8 @@ def exportLiteralChildren(self, outfile, level, name_): for innernamespace in self.innernamespace: showIndent(outfile, level) outfile.write('model_.innernamespace(\n') - innernamespace.exportLiteral(outfile, level, name_='innernamespace') + innernamespace.exportLiteral( + outfile, level, name_='innernamespace') showIndent(outfile, level) outfile.write('),\n') level -= 1 @@ -654,7 +744,8 @@ def exportLiteralChildren(self, outfile, level, name_): if self.templateparamlist: showIndent(outfile, level) outfile.write('templateparamlist=model_.templateparamlistType(\n') - self.templateparamlist.exportLiteral(outfile, level, name_='templateparamlist') + self.templateparamlist.exportLiteral( + outfile, level, name_='templateparamlist') showIndent(outfile, level) outfile.write('),\n') showIndent(outfile, level) @@ -672,31 +763,36 @@ def exportLiteralChildren(self, outfile, level, name_): if self.briefdescription: showIndent(outfile, level) outfile.write('briefdescription=model_.descriptionType(\n') - self.briefdescription.exportLiteral(outfile, level, name_='briefdescription') + self.briefdescription.exportLiteral( + outfile, level, name_='briefdescription') showIndent(outfile, level) outfile.write('),\n') if self.detaileddescription: showIndent(outfile, level) outfile.write('detaileddescription=model_.descriptionType(\n') - self.detaileddescription.exportLiteral(outfile, level, name_='detaileddescription') + self.detaileddescription.exportLiteral( + outfile, level, name_='detaileddescription') showIndent(outfile, level) outfile.write('),\n') if self.inheritancegraph: showIndent(outfile, level) outfile.write('inheritancegraph=model_.graphType(\n') - self.inheritancegraph.exportLiteral(outfile, level, name_='inheritancegraph') + self.inheritancegraph.exportLiteral( + outfile, level, name_='inheritancegraph') showIndent(outfile, level) outfile.write('),\n') if self.collaborationgraph: showIndent(outfile, level) outfile.write('collaborationgraph=model_.graphType(\n') - self.collaborationgraph.exportLiteral(outfile, level, name_='collaborationgraph') + self.collaborationgraph.exportLiteral( + outfile, level, name_='collaborationgraph') showIndent(outfile, level) outfile.write('),\n') if self.programlisting: showIndent(outfile, level) outfile.write('programlisting=model_.listingType(\n') - self.programlisting.exportLiteral(outfile, level, name_='programlisting') + self.programlisting.exportLiteral( + outfile, level, name_='programlisting') showIndent(outfile, level) outfile.write('),\n') if self.location: @@ -708,15 +804,18 @@ def exportLiteralChildren(self, outfile, level, name_): if self.listofallmembers: showIndent(outfile, level) outfile.write('listofallmembers=model_.listofallmembersType(\n') - self.listofallmembers.exportLiteral(outfile, level, name_='listofallmembers') + self.listofallmembers.exportLiteral( + outfile, level, name_='listofallmembers') showIndent(outfile, level) outfile.write('),\n') + def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) + def buildAttributes(self, attrs): if attrs.get('kind'): self.kind = attrs.get('kind').value @@ -724,120 +823,121 @@ def buildAttributes(self, attrs): self.prot = attrs.get('prot').value if attrs.get('id'): self.id = attrs.get('id').value + def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.ELEMENT_NODE and \ - nodeName_ == 'compoundname': + nodeName_ == 'compoundname': compoundname_ = '' for text__content_ in child_.childNodes: compoundname_ += text__content_.nodeValue self.compoundname = compoundname_ elif child_.nodeType == Node.ELEMENT_NODE and \ - nodeName_ == 'title': + nodeName_ == 'title': obj_ = docTitleType.factory() obj_.build(child_) self.set_title(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ - nodeName_ == 'basecompoundref': + nodeName_ == 'basecompoundref': obj_ = compoundRefType.factory() obj_.build(child_) self.basecompoundref.append(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ - nodeName_ == 'derivedcompoundref': + nodeName_ == 'derivedcompoundref': obj_ = compoundRefType.factory() obj_.build(child_) self.derivedcompoundref.append(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ - nodeName_ == 'includes': + nodeName_ == 'includes': obj_ = incType.factory() obj_.build(child_) self.includes.append(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ - nodeName_ == 'includedby': + nodeName_ == 'includedby': obj_ = incType.factory() obj_.build(child_) self.includedby.append(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ - nodeName_ == 'incdepgraph': + nodeName_ == 'incdepgraph': obj_ = graphType.factory() obj_.build(child_) self.set_incdepgraph(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ - nodeName_ == 'invincdepgraph': + nodeName_ == 'invincdepgraph': obj_ = graphType.factory() obj_.build(child_) self.set_invincdepgraph(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ - nodeName_ == 'innerdir': + nodeName_ == 'innerdir': obj_ = refType.factory() obj_.build(child_) self.innerdir.append(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ - nodeName_ == 'innerfile': + nodeName_ == 'innerfile': obj_ = refType.factory() obj_.build(child_) self.innerfile.append(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ - nodeName_ == 'innerclass': + nodeName_ == 'innerclass': obj_ = refType.factory() obj_.build(child_) self.innerclass.append(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ - nodeName_ == 'innernamespace': + nodeName_ == 'innernamespace': obj_ = refType.factory() obj_.build(child_) self.innernamespace.append(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ - nodeName_ == 'innerpage': + nodeName_ == 'innerpage': obj_ = refType.factory() obj_.build(child_) self.innerpage.append(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ - nodeName_ == 'innergroup': + nodeName_ == 'innergroup': obj_ = refType.factory() obj_.build(child_) self.innergroup.append(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ - nodeName_ == 'templateparamlist': + nodeName_ == 'templateparamlist': obj_ = templateparamlistType.factory() obj_.build(child_) self.set_templateparamlist(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ - nodeName_ == 'sectiondef': + nodeName_ == 'sectiondef': obj_ = sectiondefType.factory() obj_.build(child_) self.sectiondef.append(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ - nodeName_ == 'briefdescription': + nodeName_ == 'briefdescription': obj_ = descriptionType.factory() obj_.build(child_) self.set_briefdescription(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ - nodeName_ == 'detaileddescription': + nodeName_ == 'detaileddescription': obj_ = descriptionType.factory() obj_.build(child_) self.set_detaileddescription(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ - nodeName_ == 'inheritancegraph': + nodeName_ == 'inheritancegraph': obj_ = graphType.factory() obj_.build(child_) self.set_inheritancegraph(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ - nodeName_ == 'collaborationgraph': + nodeName_ == 'collaborationgraph': obj_ = graphType.factory() obj_.build(child_) self.set_collaborationgraph(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ - nodeName_ == 'programlisting': + nodeName_ == 'programlisting': obj_ = listingType.factory() obj_.build(child_) self.set_programlisting(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ - nodeName_ == 'location': + nodeName_ == 'location': obj_ = locationType.factory() obj_.build(child_) self.set_location(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ - nodeName_ == 'listofallmembers': + nodeName_ == 'listofallmembers': obj_ = listofallmembersType.factory() obj_.build(child_) self.set_listofallmembers(obj_) @@ -847,11 +947,13 @@ def buildChildren(self, child_, nodeName_): class listofallmembersType(GeneratedsSuper): subclass = None superclass = None + def __init__(self, member=None): if member is None: self.member = [] else: self.member = member + def factory(*args_, **kwargs_): if listofallmembersType.subclass: return listofallmembersType.subclass(*args_, **kwargs_) @@ -862,10 +964,12 @@ def get_member(self): return self.member def set_member(self, member): self.member = member def add_member(self, value): self.member.append(value) def insert_member(self, index, value): self.member[index] = value + def export(self, outfile, level, namespace_='', name_='listofallmembersType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) - self.exportAttributes(outfile, level, namespace_, name_='listofallmembersType') + self.exportAttributes(outfile, level, namespace_, + name_='listofallmembersType') if self.hasContent_(): outfile.write('>\n') self.exportChildren(outfile, level + 1, namespace_, name_) @@ -873,25 +977,31 @@ def export(self, outfile, level, namespace_='', name_='listofallmembersType', na outfile.write('\n' % (namespace_, name_)) else: outfile.write(' />\n') + def exportAttributes(self, outfile, level, namespace_='', name_='listofallmembersType'): pass + def exportChildren(self, outfile, level, namespace_='', name_='listofallmembersType'): for member_ in self.member: member_.export(outfile, level, namespace_, name_='member') + def hasContent_(self): if ( self.member is not None - ): + ): return True else: return False + def exportLiteral(self, outfile, level, name_='listofallmembersType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) + def exportLiteralAttributes(self, outfile, level, name_): pass + def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('member=[\n') @@ -905,17 +1015,20 @@ def exportLiteralChildren(self, outfile, level, name_): level -= 1 showIndent(outfile, level) outfile.write('],\n') + def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) + def buildAttributes(self, attrs): pass + def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.ELEMENT_NODE and \ - nodeName_ == 'member': + nodeName_ == 'member': obj_ = memberRefType.factory() obj_.build(child_) self.member.append(obj_) @@ -925,6 +1038,7 @@ def buildChildren(self, child_, nodeName_): class memberRefType(GeneratedsSuper): subclass = None superclass = None + def __init__(self, virt=None, prot=None, refid=None, ambiguityscope=None, scope=None, name=None): self.virt = virt self.prot = prot @@ -932,6 +1046,7 @@ def __init__(self, virt=None, prot=None, refid=None, ambiguityscope=None, scope= self.ambiguityscope = ambiguityscope self.scope = scope self.name = name + def factory(*args_, **kwargs_): if memberRefType.subclass: return memberRefType.subclass(*args_, **kwargs_) @@ -949,11 +1064,15 @@ def set_prot(self, prot): self.prot = prot def get_refid(self): return self.refid def set_refid(self, refid): self.refid = refid def get_ambiguityscope(self): return self.ambiguityscope - def set_ambiguityscope(self, ambiguityscope): self.ambiguityscope = ambiguityscope + + def set_ambiguityscope( + self, ambiguityscope): self.ambiguityscope = ambiguityscope + def export(self, outfile, level, namespace_='', name_='memberRefType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) - self.exportAttributes(outfile, level, namespace_, name_='memberRefType') + self.exportAttributes(outfile, level, namespace_, + name_='memberRefType') if self.hasContent_(): outfile.write('>\n') self.exportChildren(outfile, level + 1, namespace_, name_) @@ -961,35 +1080,44 @@ def export(self, outfile, level, namespace_='', name_='memberRefType', namespace outfile.write('\n' % (namespace_, name_)) else: outfile.write(' />\n') + def exportAttributes(self, outfile, level, namespace_='', name_='memberRefType'): if self.virt is not None: outfile.write(' virt=%s' % (quote_attrib(self.virt), )) if self.prot is not None: outfile.write(' prot=%s' % (quote_attrib(self.prot), )) if self.refid is not None: - outfile.write(' refid=%s' % (self.format_string(quote_attrib(self.refid).encode(ExternalEncoding), input_name='refid'), )) + outfile.write(' refid=%s' % (self.format_string(quote_attrib( + self.refid).encode(ExternalEncoding), input_name='refid'), )) if self.ambiguityscope is not None: - outfile.write(' ambiguityscope=%s' % (self.format_string(quote_attrib(self.ambiguityscope).encode(ExternalEncoding), input_name='ambiguityscope'), )) + outfile.write(' ambiguityscope=%s' % (self.format_string(quote_attrib( + self.ambiguityscope).encode(ExternalEncoding), input_name='ambiguityscope'), )) + def exportChildren(self, outfile, level, namespace_='', name_='memberRefType'): if self.scope is not None: showIndent(outfile, level) - outfile.write('<%sscope>%s\n' % (namespace_, self.format_string(quote_xml(self.scope).encode(ExternalEncoding), input_name='scope'), namespace_)) + outfile.write('<%sscope>%s\n' % (namespace_, self.format_string( + quote_xml(self.scope).encode(ExternalEncoding), input_name='scope'), namespace_)) if self.name is not None: showIndent(outfile, level) - outfile.write('<%sname>%s\n' % (namespace_, self.format_string(quote_xml(self.name).encode(ExternalEncoding), input_name='name'), namespace_)) + outfile.write('<%sname>%s\n' % (namespace_, self.format_string( + quote_xml(self.name).encode(ExternalEncoding), input_name='name'), namespace_)) + def hasContent_(self): if ( self.scope is not None or self.name is not None - ): + ): return True else: return False + def exportLiteral(self, outfile, level, name_='memberRefType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) + def exportLiteralAttributes(self, outfile, level, name_): if self.virt is not None: showIndent(outfile, level) @@ -1003,17 +1131,22 @@ def exportLiteralAttributes(self, outfile, level, name_): if self.ambiguityscope is not None: showIndent(outfile, level) outfile.write('ambiguityscope = %s,\n' % (self.ambiguityscope,)) + def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) - outfile.write('scope=%s,\n' % quote_python(self.scope).encode(ExternalEncoding)) + outfile.write('scope=%s,\n' % quote_python( + self.scope).encode(ExternalEncoding)) showIndent(outfile, level) - outfile.write('name=%s,\n' % quote_python(self.name).encode(ExternalEncoding)) + outfile.write('name=%s,\n' % quote_python( + self.name).encode(ExternalEncoding)) + def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) + def buildAttributes(self, attrs): if attrs.get('virt'): self.virt = attrs.get('virt').value @@ -1023,15 +1156,16 @@ def buildAttributes(self, attrs): self.refid = attrs.get('refid').value if attrs.get('ambiguityscope'): self.ambiguityscope = attrs.get('ambiguityscope').value + def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.ELEMENT_NODE and \ - nodeName_ == 'scope': + nodeName_ == 'scope': scope_ = '' for text__content_ in child_.childNodes: scope_ += text__content_.nodeValue self.scope = scope_ elif child_.nodeType == Node.ELEMENT_NODE and \ - nodeName_ == 'name': + nodeName_ == 'name': name_ = '' for text__content_ in child_.childNodes: name_ += text__content_.nodeValue @@ -1042,8 +1176,10 @@ def buildChildren(self, child_, nodeName_): class scope(GeneratedsSuper): subclass = None superclass = None + def __init__(self, valueOf_=''): self.valueOf_ = valueOf_ + def factory(*args_, **kwargs_): if scope.subclass: return scope.subclass(*args_, **kwargs_) @@ -1052,6 +1188,7 @@ def factory(*args_, **kwargs_): factory = staticmethod(factory) def getValueOf_(self): return self.valueOf_ def setValueOf_(self, valueOf_): self.valueOf_ = valueOf_ + def export(self, outfile, level, namespace_='', name_='scope', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) @@ -1063,33 +1200,40 @@ def export(self, outfile, level, namespace_='', name_='scope', namespacedef_='') outfile.write('\n' % (namespace_, name_)) else: outfile.write(' />\n') + def exportAttributes(self, outfile, level, namespace_='', name_='scope'): pass + def exportChildren(self, outfile, level, namespace_='', name_='scope'): - if self.valueOf_.find('![CDATA')>-1: - value=quote_xml('%s' % self.valueOf_) - value=value.replace('![CDATA','') + if self.valueOf_.find('![CDATA') > -1: + value = quote_xml('%s' % self.valueOf_) + value = value.replace('![CDATA', '') outfile.write(value) else: outfile.write(quote_xml('%s' % self.valueOf_)) + def hasContent_(self): if ( self.valueOf_ is not None - ): + ): return True else: return False + def exportLiteral(self, outfile, level, name_='scope'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) + def exportLiteralAttributes(self, outfile, level, name_): pass + def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('valueOf_ = "%s",\n' % (self.valueOf_,)) + def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) @@ -1097,21 +1241,25 @@ def build(self, node_): for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) + def buildAttributes(self, attrs): pass + def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.TEXT_NODE: self.valueOf_ += child_.nodeValue elif child_.nodeType == Node.CDATA_SECTION_NODE: - self.valueOf_ += '![CDATA['+child_.nodeValue+']]' + self.valueOf_ += '![CDATA[' + child_.nodeValue + ']]' # end class scope class name(GeneratedsSuper): subclass = None superclass = None + def __init__(self, valueOf_=''): self.valueOf_ = valueOf_ + def factory(*args_, **kwargs_): if name.subclass: return name.subclass(*args_, **kwargs_) @@ -1120,6 +1268,7 @@ def factory(*args_, **kwargs_): factory = staticmethod(factory) def getValueOf_(self): return self.valueOf_ def setValueOf_(self, valueOf_): self.valueOf_ = valueOf_ + def export(self, outfile, level, namespace_='', name_='name', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) @@ -1131,33 +1280,40 @@ def export(self, outfile, level, namespace_='', name_='name', namespacedef_=''): outfile.write('\n' % (namespace_, name_)) else: outfile.write(' />\n') + def exportAttributes(self, outfile, level, namespace_='', name_='name'): pass + def exportChildren(self, outfile, level, namespace_='', name_='name'): - if self.valueOf_.find('![CDATA')>-1: - value=quote_xml('%s' % self.valueOf_) - value=value.replace('![CDATA','') + if self.valueOf_.find('![CDATA') > -1: + value = quote_xml('%s' % self.valueOf_) + value = value.replace('![CDATA', '') outfile.write(value) else: outfile.write(quote_xml('%s' % self.valueOf_)) + def hasContent_(self): if ( self.valueOf_ is not None - ): + ): return True else: return False + def exportLiteral(self, outfile, level, name_='name'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) + def exportLiteralAttributes(self, outfile, level, name_): pass + def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('valueOf_ = "%s",\n' % (self.valueOf_,)) + def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) @@ -1165,19 +1321,22 @@ def build(self, node_): for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) + def buildAttributes(self, attrs): pass + def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.TEXT_NODE: self.valueOf_ += child_.nodeValue elif child_.nodeType == Node.CDATA_SECTION_NODE: - self.valueOf_ += '![CDATA['+child_.nodeValue+']]' + self.valueOf_ += '![CDATA[' + child_.nodeValue + ']]' # end class name class compoundRefType(GeneratedsSuper): subclass = None superclass = None + def __init__(self, virt=None, prot=None, refid=None, valueOf_='', mixedclass_=None, content_=None): self.virt = virt self.prot = prot @@ -1190,6 +1349,7 @@ def __init__(self, virt=None, prot=None, refid=None, valueOf_='', mixedclass_=No self.content_ = [] else: self.content_ = content_ + def factory(*args_, **kwargs_): if compoundRefType.subclass: return compoundRefType.subclass(*args_, **kwargs_) @@ -1204,40 +1364,48 @@ def get_refid(self): return self.refid def set_refid(self, refid): self.refid = refid def getValueOf_(self): return self.valueOf_ def setValueOf_(self, valueOf_): self.valueOf_ = valueOf_ + def export(self, outfile, level, namespace_='', name_='compoundRefType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) - self.exportAttributes(outfile, level, namespace_, name_='compoundRefType') + self.exportAttributes(outfile, level, namespace_, + name_='compoundRefType') outfile.write('>') self.exportChildren(outfile, level + 1, namespace_, name_) outfile.write('\n' % (namespace_, name_)) + def exportAttributes(self, outfile, level, namespace_='', name_='compoundRefType'): if self.virt is not None: outfile.write(' virt=%s' % (quote_attrib(self.virt), )) if self.prot is not None: outfile.write(' prot=%s' % (quote_attrib(self.prot), )) if self.refid is not None: - outfile.write(' refid=%s' % (self.format_string(quote_attrib(self.refid).encode(ExternalEncoding), input_name='refid'), )) + outfile.write(' refid=%s' % (self.format_string(quote_attrib( + self.refid).encode(ExternalEncoding), input_name='refid'), )) + def exportChildren(self, outfile, level, namespace_='', name_='compoundRefType'): - if self.valueOf_.find('![CDATA')>-1: - value=quote_xml('%s' % self.valueOf_) - value=value.replace('![CDATA','') + if self.valueOf_.find('![CDATA') > -1: + value = quote_xml('%s' % self.valueOf_) + value = value.replace('![CDATA', '') outfile.write(value) else: outfile.write(quote_xml('%s' % self.valueOf_)) + def hasContent_(self): if ( self.valueOf_ is not None - ): + ): return True else: return False + def exportLiteral(self, outfile, level, name_='compoundRefType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) + def exportLiteralAttributes(self, outfile, level, name_): if self.virt is not None: showIndent(outfile, level) @@ -1248,9 +1416,11 @@ def exportLiteralAttributes(self, outfile, level, name_): if self.refid is not None: showIndent(outfile, level) outfile.write('refid = %s,\n' % (self.refid,)) + def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('valueOf_ = "%s",\n' % (self.valueOf_,)) + def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) @@ -1258,6 +1428,7 @@ def build(self, node_): for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) + def buildAttributes(self, attrs): if attrs.get('virt'): self.virt = attrs.get('virt').value @@ -1265,21 +1436,23 @@ def buildAttributes(self, attrs): self.prot = attrs.get('prot').value if attrs.get('refid'): self.refid = attrs.get('refid').value + def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.TEXT_NODE: obj_ = self.mixedclass_(MixedContainer.CategoryText, - MixedContainer.TypeNone, '', child_.nodeValue) + MixedContainer.TypeNone, '', child_.nodeValue) self.content_.append(obj_) if child_.nodeType == Node.TEXT_NODE: self.valueOf_ += child_.nodeValue elif child_.nodeType == Node.CDATA_SECTION_NODE: - self.valueOf_ += '![CDATA['+child_.nodeValue+']]' + self.valueOf_ += '![CDATA[' + child_.nodeValue + ']]' # end class compoundRefType class reimplementType(GeneratedsSuper): subclass = None superclass = None + def __init__(self, refid=None, valueOf_='', mixedclass_=None, content_=None): self.refid = refid if mixedclass_ is None: @@ -1290,6 +1463,7 @@ def __init__(self, refid=None, valueOf_='', mixedclass_=None, content_=None): self.content_ = [] else: self.content_ = content_ + def factory(*args_, **kwargs_): if reimplementType.subclass: return reimplementType.subclass(*args_, **kwargs_) @@ -1300,43 +1474,53 @@ def get_refid(self): return self.refid def set_refid(self, refid): self.refid = refid def getValueOf_(self): return self.valueOf_ def setValueOf_(self, valueOf_): self.valueOf_ = valueOf_ + def export(self, outfile, level, namespace_='', name_='reimplementType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) - self.exportAttributes(outfile, level, namespace_, name_='reimplementType') + self.exportAttributes(outfile, level, namespace_, + name_='reimplementType') outfile.write('>') self.exportChildren(outfile, level + 1, namespace_, name_) outfile.write('\n' % (namespace_, name_)) + def exportAttributes(self, outfile, level, namespace_='', name_='reimplementType'): if self.refid is not None: - outfile.write(' refid=%s' % (self.format_string(quote_attrib(self.refid).encode(ExternalEncoding), input_name='refid'), )) + outfile.write(' refid=%s' % (self.format_string(quote_attrib( + self.refid).encode(ExternalEncoding), input_name='refid'), )) + def exportChildren(self, outfile, level, namespace_='', name_='reimplementType'): - if self.valueOf_.find('![CDATA')>-1: - value=quote_xml('%s' % self.valueOf_) - value=value.replace('![CDATA','') + if self.valueOf_.find('![CDATA') > -1: + value = quote_xml('%s' % self.valueOf_) + value = value.replace('![CDATA', '') outfile.write(value) else: outfile.write(quote_xml('%s' % self.valueOf_)) + def hasContent_(self): if ( self.valueOf_ is not None - ): + ): return True else: return False + def exportLiteral(self, outfile, level, name_='reimplementType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) + def exportLiteralAttributes(self, outfile, level, name_): if self.refid is not None: showIndent(outfile, level) outfile.write('refid = %s,\n' % (self.refid,)) + def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('valueOf_ = "%s",\n' % (self.valueOf_,)) + def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) @@ -1344,24 +1528,27 @@ def build(self, node_): for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) + def buildAttributes(self, attrs): if attrs.get('refid'): self.refid = attrs.get('refid').value + def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.TEXT_NODE: obj_ = self.mixedclass_(MixedContainer.CategoryText, - MixedContainer.TypeNone, '', child_.nodeValue) + MixedContainer.TypeNone, '', child_.nodeValue) self.content_.append(obj_) if child_.nodeType == Node.TEXT_NODE: self.valueOf_ += child_.nodeValue elif child_.nodeType == Node.CDATA_SECTION_NODE: - self.valueOf_ += '![CDATA['+child_.nodeValue+']]' + self.valueOf_ += '![CDATA[' + child_.nodeValue + ']]' # end class reimplementType class incType(GeneratedsSuper): subclass = None superclass = None + def __init__(self, local=None, refid=None, valueOf_='', mixedclass_=None, content_=None): self.local = local self.refid = refid @@ -1373,6 +1560,7 @@ def __init__(self, local=None, refid=None, valueOf_='', mixedclass_=None, conten self.content_ = [] else: self.content_ = content_ + def factory(*args_, **kwargs_): if incType.subclass: return incType.subclass(*args_, **kwargs_) @@ -1385,6 +1573,7 @@ def get_refid(self): return self.refid def set_refid(self, refid): self.refid = refid def getValueOf_(self): return self.valueOf_ def setValueOf_(self, valueOf_): self.valueOf_ = valueOf_ + def export(self, outfile, level, namespace_='', name_='incType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) @@ -1392,31 +1581,37 @@ def export(self, outfile, level, namespace_='', name_='incType', namespacedef_=' outfile.write('>') self.exportChildren(outfile, level + 1, namespace_, name_) outfile.write('\n' % (namespace_, name_)) + def exportAttributes(self, outfile, level, namespace_='', name_='incType'): if self.local is not None: outfile.write(' local=%s' % (quote_attrib(self.local), )) if self.refid is not None: - outfile.write(' refid=%s' % (self.format_string(quote_attrib(self.refid).encode(ExternalEncoding), input_name='refid'), )) + outfile.write(' refid=%s' % (self.format_string(quote_attrib( + self.refid).encode(ExternalEncoding), input_name='refid'), )) + def exportChildren(self, outfile, level, namespace_='', name_='incType'): - if self.valueOf_.find('![CDATA')>-1: - value=quote_xml('%s' % self.valueOf_) - value=value.replace('![CDATA','') + if self.valueOf_.find('![CDATA') > -1: + value = quote_xml('%s' % self.valueOf_) + value = value.replace('![CDATA', '') outfile.write(value) else: outfile.write(quote_xml('%s' % self.valueOf_)) + def hasContent_(self): if ( self.valueOf_ is not None - ): + ): return True else: return False + def exportLiteral(self, outfile, level, name_='incType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) + def exportLiteralAttributes(self, outfile, level, name_): if self.local is not None: showIndent(outfile, level) @@ -1424,9 +1619,11 @@ def exportLiteralAttributes(self, outfile, level, name_): if self.refid is not None: showIndent(outfile, level) outfile.write('refid = %s,\n' % (self.refid,)) + def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('valueOf_ = "%s",\n' % (self.valueOf_,)) + def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) @@ -1434,26 +1631,29 @@ def build(self, node_): for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) + def buildAttributes(self, attrs): if attrs.get('local'): self.local = attrs.get('local').value if attrs.get('refid'): self.refid = attrs.get('refid').value + def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.TEXT_NODE: obj_ = self.mixedclass_(MixedContainer.CategoryText, - MixedContainer.TypeNone, '', child_.nodeValue) + MixedContainer.TypeNone, '', child_.nodeValue) self.content_.append(obj_) if child_.nodeType == Node.TEXT_NODE: self.valueOf_ += child_.nodeValue elif child_.nodeType == Node.CDATA_SECTION_NODE: - self.valueOf_ += '![CDATA['+child_.nodeValue+']]' + self.valueOf_ += '![CDATA[' + child_.nodeValue + ']]' # end class incType class refType(GeneratedsSuper): subclass = None superclass = None + def __init__(self, prot=None, refid=None, valueOf_='', mixedclass_=None, content_=None): self.prot = prot self.refid = refid @@ -1465,6 +1665,7 @@ def __init__(self, prot=None, refid=None, valueOf_='', mixedclass_=None, content self.content_ = [] else: self.content_ = content_ + def factory(*args_, **kwargs_): if refType.subclass: return refType.subclass(*args_, **kwargs_) @@ -1477,6 +1678,7 @@ def get_refid(self): return self.refid def set_refid(self, refid): self.refid = refid def getValueOf_(self): return self.valueOf_ def setValueOf_(self, valueOf_): self.valueOf_ = valueOf_ + def export(self, outfile, level, namespace_='', name_='refType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) @@ -1484,31 +1686,37 @@ def export(self, outfile, level, namespace_='', name_='refType', namespacedef_=' outfile.write('>') self.exportChildren(outfile, level + 1, namespace_, name_) outfile.write('\n' % (namespace_, name_)) + def exportAttributes(self, outfile, level, namespace_='', name_='refType'): if self.prot is not None: outfile.write(' prot=%s' % (quote_attrib(self.prot), )) if self.refid is not None: - outfile.write(' refid=%s' % (self.format_string(quote_attrib(self.refid).encode(ExternalEncoding), input_name='refid'), )) + outfile.write(' refid=%s' % (self.format_string(quote_attrib( + self.refid).encode(ExternalEncoding), input_name='refid'), )) + def exportChildren(self, outfile, level, namespace_='', name_='refType'): - if self.valueOf_.find('![CDATA')>-1: - value=quote_xml('%s' % self.valueOf_) - value=value.replace('![CDATA','') + if self.valueOf_.find('![CDATA') > -1: + value = quote_xml('%s' % self.valueOf_) + value = value.replace('![CDATA', '') outfile.write(value) else: outfile.write(quote_xml('%s' % self.valueOf_)) + def hasContent_(self): if ( self.valueOf_ is not None - ): + ): return True else: return False + def exportLiteral(self, outfile, level, name_='refType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) + def exportLiteralAttributes(self, outfile, level, name_): if self.prot is not None: showIndent(outfile, level) @@ -1516,9 +1724,11 @@ def exportLiteralAttributes(self, outfile, level, name_): if self.refid is not None: showIndent(outfile, level) outfile.write('refid = %s,\n' % (self.refid,)) + def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('valueOf_ = "%s",\n' % (self.valueOf_,)) + def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) @@ -1526,26 +1736,29 @@ def build(self, node_): for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) + def buildAttributes(self, attrs): if attrs.get('prot'): self.prot = attrs.get('prot').value if attrs.get('refid'): self.refid = attrs.get('refid').value + def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.TEXT_NODE: obj_ = self.mixedclass_(MixedContainer.CategoryText, - MixedContainer.TypeNone, '', child_.nodeValue) + MixedContainer.TypeNone, '', child_.nodeValue) self.content_.append(obj_) if child_.nodeType == Node.TEXT_NODE: self.valueOf_ += child_.nodeValue elif child_.nodeType == Node.CDATA_SECTION_NODE: - self.valueOf_ += '![CDATA['+child_.nodeValue+']]' + self.valueOf_ += '![CDATA[' + child_.nodeValue + ']]' # end class refType class refTextType(GeneratedsSuper): subclass = None superclass = None + def __init__(self, refid=None, kindref=None, external=None, valueOf_='', mixedclass_=None, content_=None): self.refid = refid self.kindref = kindref @@ -1558,6 +1771,7 @@ def __init__(self, refid=None, kindref=None, external=None, valueOf_='', mixedcl self.content_ = [] else: self.content_ = content_ + def factory(*args_, **kwargs_): if refTextType.subclass: return refTextType.subclass(*args_, **kwargs_) @@ -1572,6 +1786,7 @@ def get_external(self): return self.external def set_external(self, external): self.external = external def getValueOf_(self): return self.valueOf_ def setValueOf_(self, valueOf_): self.valueOf_ = valueOf_ + def export(self, outfile, level, namespace_='', name_='refTextType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) @@ -1579,33 +1794,40 @@ def export(self, outfile, level, namespace_='', name_='refTextType', namespacede outfile.write('>') self.exportChildren(outfile, level + 1, namespace_, name_) outfile.write('\n' % (namespace_, name_)) + def exportAttributes(self, outfile, level, namespace_='', name_='refTextType'): if self.refid is not None: - outfile.write(' refid=%s' % (self.format_string(quote_attrib(self.refid).encode(ExternalEncoding), input_name='refid'), )) + outfile.write(' refid=%s' % (self.format_string(quote_attrib( + self.refid).encode(ExternalEncoding), input_name='refid'), )) if self.kindref is not None: outfile.write(' kindref=%s' % (quote_attrib(self.kindref), )) if self.external is not None: - outfile.write(' external=%s' % (self.format_string(quote_attrib(self.external).encode(ExternalEncoding), input_name='external'), )) + outfile.write(' external=%s' % (self.format_string(quote_attrib( + self.external).encode(ExternalEncoding), input_name='external'), )) + def exportChildren(self, outfile, level, namespace_='', name_='refTextType'): - if self.valueOf_.find('![CDATA')>-1: - value=quote_xml('%s' % self.valueOf_) - value=value.replace('![CDATA','') + if self.valueOf_.find('![CDATA') > -1: + value = quote_xml('%s' % self.valueOf_) + value = value.replace('![CDATA', '') outfile.write(value) else: outfile.write(quote_xml('%s' % self.valueOf_)) + def hasContent_(self): if ( self.valueOf_ is not None - ): + ): return True else: return False + def exportLiteral(self, outfile, level, name_='refTextType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) + def exportLiteralAttributes(self, outfile, level, name_): if self.refid is not None: showIndent(outfile, level) @@ -1616,9 +1838,11 @@ def exportLiteralAttributes(self, outfile, level, name_): if self.external is not None: showIndent(outfile, level) outfile.write('external = %s,\n' % (self.external,)) + def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('valueOf_ = "%s",\n' % (self.valueOf_,)) + def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) @@ -1626,6 +1850,7 @@ def build(self, node_): for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) + def buildAttributes(self, attrs): if attrs.get('refid'): self.refid = attrs.get('refid').value @@ -1633,21 +1858,23 @@ def buildAttributes(self, attrs): self.kindref = attrs.get('kindref').value if attrs.get('external'): self.external = attrs.get('external').value + def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.TEXT_NODE: obj_ = self.mixedclass_(MixedContainer.CategoryText, - MixedContainer.TypeNone, '', child_.nodeValue) + MixedContainer.TypeNone, '', child_.nodeValue) self.content_.append(obj_) if child_.nodeType == Node.TEXT_NODE: self.valueOf_ += child_.nodeValue elif child_.nodeType == Node.CDATA_SECTION_NODE: - self.valueOf_ += '![CDATA['+child_.nodeValue+']]' + self.valueOf_ += '![CDATA[' + child_.nodeValue + ']]' # end class refTextType class sectiondefType(GeneratedsSuper): subclass = None superclass = None + def __init__(self, kind=None, header=None, description=None, memberdef=None): self.kind = kind self.header = header @@ -1656,6 +1883,7 @@ def __init__(self, kind=None, header=None, description=None, memberdef=None): self.memberdef = [] else: self.memberdef = memberdef + def factory(*args_, **kwargs_): if sectiondefType.subclass: return sectiondefType.subclass(*args_, **kwargs_) @@ -1672,10 +1900,12 @@ def add_memberdef(self, value): self.memberdef.append(value) def insert_memberdef(self, index, value): self.memberdef[index] = value def get_kind(self): return self.kind def set_kind(self, kind): self.kind = kind + def export(self, outfile, level, namespace_='', name_='sectiondefType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) - self.exportAttributes(outfile, level, namespace_, name_='sectiondefType') + self.exportAttributes(outfile, level, namespace_, + name_='sectiondefType') if self.hasContent_(): outfile.write('>\n') self.exportChildren(outfile, level + 1, namespace_, name_) @@ -1683,38 +1913,47 @@ def export(self, outfile, level, namespace_='', name_='sectiondefType', namespac outfile.write('\n' % (namespace_, name_)) else: outfile.write(' />\n') + def exportAttributes(self, outfile, level, namespace_='', name_='sectiondefType'): if self.kind is not None: outfile.write(' kind=%s' % (quote_attrib(self.kind), )) + def exportChildren(self, outfile, level, namespace_='', name_='sectiondefType'): if self.header is not None: showIndent(outfile, level) - outfile.write('<%sheader>%s\n' % (namespace_, self.format_string(quote_xml(self.header).encode(ExternalEncoding), input_name='header'), namespace_)) + outfile.write('<%sheader>%s\n' % (namespace_, self.format_string( + quote_xml(self.header).encode(ExternalEncoding), input_name='header'), namespace_)) if self.description: - self.description.export(outfile, level, namespace_, name_='description') + self.description.export( + outfile, level, namespace_, name_='description') for memberdef_ in self.memberdef: memberdef_.export(outfile, level, namespace_, name_='memberdef') + def hasContent_(self): if ( self.header is not None or self.description is not None or self.memberdef is not None - ): + ): return True else: return False + def exportLiteral(self, outfile, level, name_='sectiondefType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) + def exportLiteralAttributes(self, outfile, level, name_): if self.kind is not None: showIndent(outfile, level) outfile.write('kind = "%s",\n' % (self.kind,)) + def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) - outfile.write('header=%s,\n' % quote_python(self.header).encode(ExternalEncoding)) + outfile.write('header=%s,\n' % quote_python( + self.header).encode(ExternalEncoding)) if self.description: showIndent(outfile, level) outfile.write('description=model_.descriptionType(\n') @@ -1733,29 +1972,32 @@ def exportLiteralChildren(self, outfile, level, name_): level -= 1 showIndent(outfile, level) outfile.write('],\n') + def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) + def buildAttributes(self, attrs): if attrs.get('kind'): self.kind = attrs.get('kind').value + def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.ELEMENT_NODE and \ - nodeName_ == 'header': + nodeName_ == 'header': header_ = '' for text__content_ in child_.childNodes: header_ += text__content_.nodeValue self.header = header_ elif child_.nodeType == Node.ELEMENT_NODE and \ - nodeName_ == 'description': + nodeName_ == 'description': obj_ = descriptionType.factory() obj_.build(child_) self.set_description(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ - nodeName_ == 'memberdef': + nodeName_ == 'memberdef': obj_ = memberdefType.factory() obj_.build(child_) self.memberdef.append(obj_) @@ -1765,6 +2007,7 @@ def buildChildren(self, child_, nodeName_): class memberdefType(GeneratedsSuper): subclass = None superclass = None + def __init__(self, initonly=None, kind=None, volatile=None, const=None, raisexx=None, virt=None, readable=None, prot=None, explicit=None, new=None, final=None, writable=None, add=None, static=None, remove=None, sealed=None, mutable=None, gettable=None, inline=None, settable=None, id=None, templateparamlist=None, type_=None, definition=None, argsstring=None, name=None, read=None, write=None, bitfield=None, reimplements=None, reimplementedby=None, param=None, enumvalue=None, initializer=None, exceptions=None, briefdescription=None, detaileddescription=None, inbodydescription=None, location=None, references=None, referencedby=None): self.initonly = initonly self.kind = kind @@ -1825,6 +2068,7 @@ def __init__(self, initonly=None, kind=None, volatile=None, const=None, raisexx= self.referencedby = [] else: self.referencedby = referencedby + def factory(*args_, **kwargs_): if memberdefType.subclass: return memberdefType.subclass(*args_, **kwargs_) @@ -1832,7 +2076,9 @@ def factory(*args_, **kwargs_): return memberdefType(*args_, **kwargs_) factory = staticmethod(factory) def get_templateparamlist(self): return self.templateparamlist - def set_templateparamlist(self, templateparamlist): self.templateparamlist = templateparamlist + def set_templateparamlist( + self, templateparamlist): self.templateparamlist = templateparamlist + def get_type(self): return self.type_ def set_type(self, type_): self.type_ = type_ def get_definition(self): return self.definition @@ -1850,11 +2096,17 @@ def set_bitfield(self, bitfield): self.bitfield = bitfield def get_reimplements(self): return self.reimplements def set_reimplements(self, reimplements): self.reimplements = reimplements def add_reimplements(self, value): self.reimplements.append(value) - def insert_reimplements(self, index, value): self.reimplements[index] = value + def insert_reimplements( + self, index, value): self.reimplements[index] = value + def get_reimplementedby(self): return self.reimplementedby - def set_reimplementedby(self, reimplementedby): self.reimplementedby = reimplementedby + def set_reimplementedby( + self, reimplementedby): self.reimplementedby = reimplementedby + def add_reimplementedby(self, value): self.reimplementedby.append(value) - def insert_reimplementedby(self, index, value): self.reimplementedby[index] = value + def insert_reimplementedby( + self, index, value): self.reimplementedby[index] = value + def get_param(self): return self.param def set_param(self, param): self.param = param def add_param(self, value): self.param.append(value) @@ -1868,11 +2120,17 @@ def set_initializer(self, initializer): self.initializer = initializer def get_exceptions(self): return self.exceptions def set_exceptions(self, exceptions): self.exceptions = exceptions def get_briefdescription(self): return self.briefdescription - def set_briefdescription(self, briefdescription): self.briefdescription = briefdescription + def set_briefdescription( + self, briefdescription): self.briefdescription = briefdescription + def get_detaileddescription(self): return self.detaileddescription - def set_detaileddescription(self, detaileddescription): self.detaileddescription = detaileddescription + def set_detaileddescription( + self, detaileddescription): self.detaileddescription = detaileddescription + def get_inbodydescription(self): return self.inbodydescription - def set_inbodydescription(self, inbodydescription): self.inbodydescription = inbodydescription + def set_inbodydescription( + self, inbodydescription): self.inbodydescription = inbodydescription + def get_location(self): return self.location def set_location(self, location): self.location = location def get_references(self): return self.references @@ -1882,7 +2140,9 @@ def insert_references(self, index, value): self.references[index] = value def get_referencedby(self): return self.referencedby def set_referencedby(self, referencedby): self.referencedby = referencedby def add_referencedby(self, value): self.referencedby.append(value) - def insert_referencedby(self, index, value): self.referencedby[index] = value + def insert_referencedby( + self, index, value): self.referencedby[index] = value + def get_initonly(self): return self.initonly def set_initonly(self, initonly): self.initonly = initonly def get_kind(self): return self.kind @@ -1925,10 +2185,12 @@ def get_settable(self): return self.settable def set_settable(self, settable): self.settable = settable def get_id(self): return self.id def set_id(self, id): self.id = id + def export(self, outfile, level, namespace_='', name_='memberdefType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) - self.exportAttributes(outfile, level, namespace_, name_='memberdefType') + self.exportAttributes(outfile, level, namespace_, + name_='memberdefType') if self.hasContent_(): outfile.write('>\n') self.exportChildren(outfile, level + 1, namespace_, name_) @@ -1936,6 +2198,7 @@ def export(self, outfile, level, namespace_='', name_='memberdefType', namespace outfile.write('\n' % (namespace_, name_)) else: outfile.write(' />\n') + def exportAttributes(self, outfile, level, namespace_='', name_='memberdefType'): if self.initonly is not None: outfile.write(' initonly=%s' % (quote_attrib(self.initonly), )) @@ -1978,54 +2241,73 @@ def exportAttributes(self, outfile, level, namespace_='', name_='memberdefType') if self.settable is not None: outfile.write(' settable=%s' % (quote_attrib(self.settable), )) if self.id is not None: - outfile.write(' id=%s' % (self.format_string(quote_attrib(self.id).encode(ExternalEncoding), input_name='id'), )) + outfile.write(' id=%s' % (self.format_string(quote_attrib( + self.id).encode(ExternalEncoding), input_name='id'), )) + def exportChildren(self, outfile, level, namespace_='', name_='memberdefType'): if self.templateparamlist: - self.templateparamlist.export(outfile, level, namespace_, name_='templateparamlist') + self.templateparamlist.export( + outfile, level, namespace_, name_='templateparamlist') if self.type_: self.type_.export(outfile, level, namespace_, name_='type') if self.definition is not None: showIndent(outfile, level) - outfile.write('<%sdefinition>%s\n' % (namespace_, self.format_string(quote_xml(self.definition).encode(ExternalEncoding), input_name='definition'), namespace_)) + outfile.write('<%sdefinition>%s\n' % (namespace_, self.format_string( + quote_xml(self.definition).encode(ExternalEncoding), input_name='definition'), namespace_)) if self.argsstring is not None: showIndent(outfile, level) - outfile.write('<%sargsstring>%s\n' % (namespace_, self.format_string(quote_xml(self.argsstring).encode(ExternalEncoding), input_name='argsstring'), namespace_)) + outfile.write('<%sargsstring>%s\n' % (namespace_, self.format_string( + quote_xml(self.argsstring).encode(ExternalEncoding), input_name='argsstring'), namespace_)) if self.name is not None: showIndent(outfile, level) - outfile.write('<%sname>%s\n' % (namespace_, self.format_string(quote_xml(self.name).encode(ExternalEncoding), input_name='name'), namespace_)) + outfile.write('<%sname>%s\n' % (namespace_, self.format_string( + quote_xml(self.name).encode(ExternalEncoding), input_name='name'), namespace_)) if self.read is not None: showIndent(outfile, level) - outfile.write('<%sread>%s\n' % (namespace_, self.format_string(quote_xml(self.read).encode(ExternalEncoding), input_name='read'), namespace_)) + outfile.write('<%sread>%s\n' % (namespace_, self.format_string( + quote_xml(self.read).encode(ExternalEncoding), input_name='read'), namespace_)) if self.write is not None: showIndent(outfile, level) - outfile.write('<%swrite>%s\n' % (namespace_, self.format_string(quote_xml(self.write).encode(ExternalEncoding), input_name='write'), namespace_)) + outfile.write('<%swrite>%s\n' % (namespace_, self.format_string( + quote_xml(self.write).encode(ExternalEncoding), input_name='write'), namespace_)) if self.bitfield is not None: showIndent(outfile, level) - outfile.write('<%sbitfield>%s\n' % (namespace_, self.format_string(quote_xml(self.bitfield).encode(ExternalEncoding), input_name='bitfield'), namespace_)) + outfile.write('<%sbitfield>%s\n' % (namespace_, self.format_string( + quote_xml(self.bitfield).encode(ExternalEncoding), input_name='bitfield'), namespace_)) for reimplements_ in self.reimplements: - reimplements_.export(outfile, level, namespace_, name_='reimplements') + reimplements_.export( + outfile, level, namespace_, name_='reimplements') for reimplementedby_ in self.reimplementedby: - reimplementedby_.export(outfile, level, namespace_, name_='reimplementedby') + reimplementedby_.export( + outfile, level, namespace_, name_='reimplementedby') for param_ in self.param: param_.export(outfile, level, namespace_, name_='param') for enumvalue_ in self.enumvalue: enumvalue_.export(outfile, level, namespace_, name_='enumvalue') if self.initializer: - self.initializer.export(outfile, level, namespace_, name_='initializer') + self.initializer.export( + outfile, level, namespace_, name_='initializer') if self.exceptions: - self.exceptions.export(outfile, level, namespace_, name_='exceptions') + self.exceptions.export( + outfile, level, namespace_, name_='exceptions') if self.briefdescription: - self.briefdescription.export(outfile, level, namespace_, name_='briefdescription') + self.briefdescription.export( + outfile, level, namespace_, name_='briefdescription') if self.detaileddescription: - self.detaileddescription.export(outfile, level, namespace_, name_='detaileddescription') + self.detaileddescription.export( + outfile, level, namespace_, name_='detaileddescription') if self.inbodydescription: - self.inbodydescription.export(outfile, level, namespace_, name_='inbodydescription') + self.inbodydescription.export( + outfile, level, namespace_, name_='inbodydescription') if self.location: - self.location.export(outfile, level, namespace_, name_='location', ) + self.location.export( + outfile, level, namespace_, name_='location', ) for references_ in self.references: references_.export(outfile, level, namespace_, name_='references') for referencedby_ in self.referencedby: - referencedby_.export(outfile, level, namespace_, name_='referencedby') + referencedby_.export( + outfile, level, namespace_, name_='referencedby') + def hasContent_(self): if ( self.templateparamlist is not None or @@ -2048,15 +2330,17 @@ def hasContent_(self): self.location is not None or self.references is not None or self.referencedby is not None - ): + ): return True else: return False + def exportLiteral(self, outfile, level, name_='memberdefType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) + def exportLiteralAttributes(self, outfile, level, name_): if self.initonly is not None: showIndent(outfile, level) @@ -2121,11 +2405,13 @@ def exportLiteralAttributes(self, outfile, level, name_): if self.id is not None: showIndent(outfile, level) outfile.write('id = %s,\n' % (self.id,)) + def exportLiteralChildren(self, outfile, level, name_): if self.templateparamlist: showIndent(outfile, level) outfile.write('templateparamlist=model_.templateparamlistType(\n') - self.templateparamlist.exportLiteral(outfile, level, name_='templateparamlist') + self.templateparamlist.exportLiteral( + outfile, level, name_='templateparamlist') showIndent(outfile, level) outfile.write('),\n') if self.type_: @@ -2135,17 +2421,23 @@ def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('),\n') showIndent(outfile, level) - outfile.write('definition=%s,\n' % quote_python(self.definition).encode(ExternalEncoding)) + outfile.write('definition=%s,\n' % quote_python( + self.definition).encode(ExternalEncoding)) showIndent(outfile, level) - outfile.write('argsstring=%s,\n' % quote_python(self.argsstring).encode(ExternalEncoding)) + outfile.write('argsstring=%s,\n' % quote_python( + self.argsstring).encode(ExternalEncoding)) showIndent(outfile, level) - outfile.write('name=%s,\n' % quote_python(self.name).encode(ExternalEncoding)) + outfile.write('name=%s,\n' % quote_python( + self.name).encode(ExternalEncoding)) showIndent(outfile, level) - outfile.write('read=%s,\n' % quote_python(self.read).encode(ExternalEncoding)) + outfile.write('read=%s,\n' % quote_python( + self.read).encode(ExternalEncoding)) showIndent(outfile, level) - outfile.write('write=%s,\n' % quote_python(self.write).encode(ExternalEncoding)) + outfile.write('write=%s,\n' % quote_python( + self.write).encode(ExternalEncoding)) showIndent(outfile, level) - outfile.write('bitfield=%s,\n' % quote_python(self.bitfield).encode(ExternalEncoding)) + outfile.write('bitfield=%s,\n' % quote_python( + self.bitfield).encode(ExternalEncoding)) showIndent(outfile, level) outfile.write('reimplements=[\n') level += 1 @@ -2164,7 +2456,8 @@ def exportLiteralChildren(self, outfile, level, name_): for reimplementedby in self.reimplementedby: showIndent(outfile, level) outfile.write('model_.reimplementedby(\n') - reimplementedby.exportLiteral(outfile, level, name_='reimplementedby') + reimplementedby.exportLiteral( + outfile, level, name_='reimplementedby') showIndent(outfile, level) outfile.write('),\n') level -= 1 @@ -2209,19 +2502,22 @@ def exportLiteralChildren(self, outfile, level, name_): if self.briefdescription: showIndent(outfile, level) outfile.write('briefdescription=model_.descriptionType(\n') - self.briefdescription.exportLiteral(outfile, level, name_='briefdescription') + self.briefdescription.exportLiteral( + outfile, level, name_='briefdescription') showIndent(outfile, level) outfile.write('),\n') if self.detaileddescription: showIndent(outfile, level) outfile.write('detaileddescription=model_.descriptionType(\n') - self.detaileddescription.exportLiteral(outfile, level, name_='detaileddescription') + self.detaileddescription.exportLiteral( + outfile, level, name_='detaileddescription') showIndent(outfile, level) outfile.write('),\n') if self.inbodydescription: showIndent(outfile, level) outfile.write('inbodydescription=model_.descriptionType(\n') - self.inbodydescription.exportLiteral(outfile, level, name_='inbodydescription') + self.inbodydescription.exportLiteral( + outfile, level, name_='inbodydescription') showIndent(outfile, level) outfile.write('),\n') if self.location: @@ -2254,12 +2550,14 @@ def exportLiteralChildren(self, outfile, level, name_): level -= 1 showIndent(outfile, level) outfile.write('],\n') + def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) + def buildAttributes(self, attrs): if attrs.get('initonly'): self.initonly = attrs.get('initonly').value @@ -2303,110 +2601,111 @@ def buildAttributes(self, attrs): self.settable = attrs.get('settable').value if attrs.get('id'): self.id = attrs.get('id').value + def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.ELEMENT_NODE and \ - nodeName_ == 'templateparamlist': + nodeName_ == 'templateparamlist': obj_ = templateparamlistType.factory() obj_.build(child_) self.set_templateparamlist(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ - nodeName_ == 'type': + nodeName_ == 'type': obj_ = linkedTextType.factory() obj_.build(child_) self.set_type(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ - nodeName_ == 'definition': + nodeName_ == 'definition': definition_ = '' for text__content_ in child_.childNodes: definition_ += text__content_.nodeValue self.definition = definition_ elif child_.nodeType == Node.ELEMENT_NODE and \ - nodeName_ == 'argsstring': + nodeName_ == 'argsstring': argsstring_ = '' for text__content_ in child_.childNodes: argsstring_ += text__content_.nodeValue self.argsstring = argsstring_ elif child_.nodeType == Node.ELEMENT_NODE and \ - nodeName_ == 'name': + nodeName_ == 'name': name_ = '' for text__content_ in child_.childNodes: name_ += text__content_.nodeValue self.name = name_ elif child_.nodeType == Node.ELEMENT_NODE and \ - nodeName_ == 'read': + nodeName_ == 'read': read_ = '' for text__content_ in child_.childNodes: read_ += text__content_.nodeValue self.read = read_ elif child_.nodeType == Node.ELEMENT_NODE and \ - nodeName_ == 'write': + nodeName_ == 'write': write_ = '' for text__content_ in child_.childNodes: write_ += text__content_.nodeValue self.write = write_ elif child_.nodeType == Node.ELEMENT_NODE and \ - nodeName_ == 'bitfield': + nodeName_ == 'bitfield': bitfield_ = '' for text__content_ in child_.childNodes: bitfield_ += text__content_.nodeValue self.bitfield = bitfield_ elif child_.nodeType == Node.ELEMENT_NODE and \ - nodeName_ == 'reimplements': + nodeName_ == 'reimplements': obj_ = reimplementType.factory() obj_.build(child_) self.reimplements.append(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ - nodeName_ == 'reimplementedby': + nodeName_ == 'reimplementedby': obj_ = reimplementType.factory() obj_.build(child_) self.reimplementedby.append(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ - nodeName_ == 'param': + nodeName_ == 'param': obj_ = paramType.factory() obj_.build(child_) self.param.append(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ - nodeName_ == 'enumvalue': + nodeName_ == 'enumvalue': obj_ = enumvalueType.factory() obj_.build(child_) self.enumvalue.append(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ - nodeName_ == 'initializer': + nodeName_ == 'initializer': obj_ = linkedTextType.factory() obj_.build(child_) self.set_initializer(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ - nodeName_ == 'exceptions': + nodeName_ == 'exceptions': obj_ = linkedTextType.factory() obj_.build(child_) self.set_exceptions(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ - nodeName_ == 'briefdescription': + nodeName_ == 'briefdescription': obj_ = descriptionType.factory() obj_.build(child_) self.set_briefdescription(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ - nodeName_ == 'detaileddescription': + nodeName_ == 'detaileddescription': obj_ = descriptionType.factory() obj_.build(child_) self.set_detaileddescription(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ - nodeName_ == 'inbodydescription': + nodeName_ == 'inbodydescription': obj_ = descriptionType.factory() obj_.build(child_) self.set_inbodydescription(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ - nodeName_ == 'location': + nodeName_ == 'location': obj_ = locationType.factory() obj_.build(child_) self.set_location(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ - nodeName_ == 'references': + nodeName_ == 'references': obj_ = referenceType.factory() obj_.build(child_) self.references.append(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ - nodeName_ == 'referencedby': + nodeName_ == 'referencedby': obj_ = referenceType.factory() obj_.build(child_) self.referencedby.append(obj_) @@ -2416,8 +2715,10 @@ def buildChildren(self, child_, nodeName_): class definition(GeneratedsSuper): subclass = None superclass = None + def __init__(self, valueOf_=''): self.valueOf_ = valueOf_ + def factory(*args_, **kwargs_): if definition.subclass: return definition.subclass(*args_, **kwargs_) @@ -2426,6 +2727,7 @@ def factory(*args_, **kwargs_): factory = staticmethod(factory) def getValueOf_(self): return self.valueOf_ def setValueOf_(self, valueOf_): self.valueOf_ = valueOf_ + def export(self, outfile, level, namespace_='', name_='definition', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) @@ -2437,33 +2739,40 @@ def export(self, outfile, level, namespace_='', name_='definition', namespacedef outfile.write('\n' % (namespace_, name_)) else: outfile.write(' />\n') + def exportAttributes(self, outfile, level, namespace_='', name_='definition'): pass + def exportChildren(self, outfile, level, namespace_='', name_='definition'): - if self.valueOf_.find('![CDATA')>-1: - value=quote_xml('%s' % self.valueOf_) - value=value.replace('![CDATA','') + if self.valueOf_.find('![CDATA') > -1: + value = quote_xml('%s' % self.valueOf_) + value = value.replace('![CDATA', '') outfile.write(value) else: outfile.write(quote_xml('%s' % self.valueOf_)) + def hasContent_(self): if ( self.valueOf_ is not None - ): + ): return True else: return False + def exportLiteral(self, outfile, level, name_='definition'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) + def exportLiteralAttributes(self, outfile, level, name_): pass + def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('valueOf_ = "%s",\n' % (self.valueOf_,)) + def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) @@ -2471,21 +2780,25 @@ def build(self, node_): for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) + def buildAttributes(self, attrs): pass + def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.TEXT_NODE: self.valueOf_ += child_.nodeValue elif child_.nodeType == Node.CDATA_SECTION_NODE: - self.valueOf_ += '![CDATA['+child_.nodeValue+']]' + self.valueOf_ += '![CDATA[' + child_.nodeValue + ']]' # end class definition class argsstring(GeneratedsSuper): subclass = None superclass = None + def __init__(self, valueOf_=''): self.valueOf_ = valueOf_ + def factory(*args_, **kwargs_): if argsstring.subclass: return argsstring.subclass(*args_, **kwargs_) @@ -2494,6 +2807,7 @@ def factory(*args_, **kwargs_): factory = staticmethod(factory) def getValueOf_(self): return self.valueOf_ def setValueOf_(self, valueOf_): self.valueOf_ = valueOf_ + def export(self, outfile, level, namespace_='', name_='argsstring', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) @@ -2505,33 +2819,40 @@ def export(self, outfile, level, namespace_='', name_='argsstring', namespacedef outfile.write('\n' % (namespace_, name_)) else: outfile.write(' />\n') + def exportAttributes(self, outfile, level, namespace_='', name_='argsstring'): pass + def exportChildren(self, outfile, level, namespace_='', name_='argsstring'): - if self.valueOf_.find('![CDATA')>-1: - value=quote_xml('%s' % self.valueOf_) - value=value.replace('![CDATA','') + if self.valueOf_.find('![CDATA') > -1: + value = quote_xml('%s' % self.valueOf_) + value = value.replace('![CDATA', '') outfile.write(value) else: outfile.write(quote_xml('%s' % self.valueOf_)) + def hasContent_(self): if ( self.valueOf_ is not None - ): + ): return True else: return False + def exportLiteral(self, outfile, level, name_='argsstring'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) + def exportLiteralAttributes(self, outfile, level, name_): pass + def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('valueOf_ = "%s",\n' % (self.valueOf_,)) + def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) @@ -2539,21 +2860,25 @@ def build(self, node_): for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) + def buildAttributes(self, attrs): pass + def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.TEXT_NODE: self.valueOf_ += child_.nodeValue elif child_.nodeType == Node.CDATA_SECTION_NODE: - self.valueOf_ += '![CDATA['+child_.nodeValue+']]' + self.valueOf_ += '![CDATA[' + child_.nodeValue + ']]' # end class argsstring class read(GeneratedsSuper): subclass = None superclass = None + def __init__(self, valueOf_=''): self.valueOf_ = valueOf_ + def factory(*args_, **kwargs_): if read.subclass: return read.subclass(*args_, **kwargs_) @@ -2562,6 +2887,7 @@ def factory(*args_, **kwargs_): factory = staticmethod(factory) def getValueOf_(self): return self.valueOf_ def setValueOf_(self, valueOf_): self.valueOf_ = valueOf_ + def export(self, outfile, level, namespace_='', name_='read', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) @@ -2573,33 +2899,40 @@ def export(self, outfile, level, namespace_='', name_='read', namespacedef_=''): outfile.write('\n' % (namespace_, name_)) else: outfile.write(' />\n') + def exportAttributes(self, outfile, level, namespace_='', name_='read'): pass + def exportChildren(self, outfile, level, namespace_='', name_='read'): - if self.valueOf_.find('![CDATA')>-1: - value=quote_xml('%s' % self.valueOf_) - value=value.replace('![CDATA','') + if self.valueOf_.find('![CDATA') > -1: + value = quote_xml('%s' % self.valueOf_) + value = value.replace('![CDATA', '') outfile.write(value) else: outfile.write(quote_xml('%s' % self.valueOf_)) + def hasContent_(self): if ( self.valueOf_ is not None - ): + ): return True else: return False + def exportLiteral(self, outfile, level, name_='read'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) + def exportLiteralAttributes(self, outfile, level, name_): pass + def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('valueOf_ = "%s",\n' % (self.valueOf_,)) + def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) @@ -2607,21 +2940,25 @@ def build(self, node_): for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) + def buildAttributes(self, attrs): pass + def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.TEXT_NODE: self.valueOf_ += child_.nodeValue elif child_.nodeType == Node.CDATA_SECTION_NODE: - self.valueOf_ += '![CDATA['+child_.nodeValue+']]' + self.valueOf_ += '![CDATA[' + child_.nodeValue + ']]' # end class read class write(GeneratedsSuper): subclass = None superclass = None + def __init__(self, valueOf_=''): self.valueOf_ = valueOf_ + def factory(*args_, **kwargs_): if write.subclass: return write.subclass(*args_, **kwargs_) @@ -2630,6 +2967,7 @@ def factory(*args_, **kwargs_): factory = staticmethod(factory) def getValueOf_(self): return self.valueOf_ def setValueOf_(self, valueOf_): self.valueOf_ = valueOf_ + def export(self, outfile, level, namespace_='', name_='write', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) @@ -2641,33 +2979,40 @@ def export(self, outfile, level, namespace_='', name_='write', namespacedef_='') outfile.write('\n' % (namespace_, name_)) else: outfile.write(' />\n') + def exportAttributes(self, outfile, level, namespace_='', name_='write'): pass + def exportChildren(self, outfile, level, namespace_='', name_='write'): - if self.valueOf_.find('![CDATA')>-1: - value=quote_xml('%s' % self.valueOf_) - value=value.replace('![CDATA','') + if self.valueOf_.find('![CDATA') > -1: + value = quote_xml('%s' % self.valueOf_) + value = value.replace('![CDATA', '') outfile.write(value) else: outfile.write(quote_xml('%s' % self.valueOf_)) + def hasContent_(self): if ( self.valueOf_ is not None - ): + ): return True else: return False + def exportLiteral(self, outfile, level, name_='write'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) + def exportLiteralAttributes(self, outfile, level, name_): pass + def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('valueOf_ = "%s",\n' % (self.valueOf_,)) + def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) @@ -2675,21 +3020,25 @@ def build(self, node_): for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) + def buildAttributes(self, attrs): pass + def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.TEXT_NODE: self.valueOf_ += child_.nodeValue elif child_.nodeType == Node.CDATA_SECTION_NODE: - self.valueOf_ += '![CDATA['+child_.nodeValue+']]' + self.valueOf_ += '![CDATA[' + child_.nodeValue + ']]' # end class write class bitfield(GeneratedsSuper): subclass = None superclass = None + def __init__(self, valueOf_=''): self.valueOf_ = valueOf_ + def factory(*args_, **kwargs_): if bitfield.subclass: return bitfield.subclass(*args_, **kwargs_) @@ -2698,6 +3047,7 @@ def factory(*args_, **kwargs_): factory = staticmethod(factory) def getValueOf_(self): return self.valueOf_ def setValueOf_(self, valueOf_): self.valueOf_ = valueOf_ + def export(self, outfile, level, namespace_='', name_='bitfield', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) @@ -2709,33 +3059,40 @@ def export(self, outfile, level, namespace_='', name_='bitfield', namespacedef_= outfile.write('\n' % (namespace_, name_)) else: outfile.write(' />\n') + def exportAttributes(self, outfile, level, namespace_='', name_='bitfield'): pass + def exportChildren(self, outfile, level, namespace_='', name_='bitfield'): - if self.valueOf_.find('![CDATA')>-1: - value=quote_xml('%s' % self.valueOf_) - value=value.replace('![CDATA','') + if self.valueOf_.find('![CDATA') > -1: + value = quote_xml('%s' % self.valueOf_) + value = value.replace('![CDATA', '') outfile.write(value) else: outfile.write(quote_xml('%s' % self.valueOf_)) + def hasContent_(self): if ( self.valueOf_ is not None - ): + ): return True else: return False + def exportLiteral(self, outfile, level, name_='bitfield'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) + def exportLiteralAttributes(self, outfile, level, name_): pass + def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('valueOf_ = "%s",\n' % (self.valueOf_,)) + def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) @@ -2743,19 +3100,22 @@ def build(self, node_): for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) + def buildAttributes(self, attrs): pass + def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.TEXT_NODE: self.valueOf_ += child_.nodeValue elif child_.nodeType == Node.CDATA_SECTION_NODE: - self.valueOf_ += '![CDATA['+child_.nodeValue+']]' + self.valueOf_ += '![CDATA[' + child_.nodeValue + ']]' # end class bitfield class descriptionType(GeneratedsSuper): subclass = None superclass = None + def __init__(self, title=None, para=None, sect1=None, internal=None, mixedclass_=None, content_=None): if mixedclass_ is None: self.mixedclass_ = MixedContainer @@ -2765,6 +3125,7 @@ def __init__(self, title=None, para=None, sect1=None, internal=None, mixedclass_ self.content_ = [] else: self.content_ = content_ + def factory(*args_, **kwargs_): if descriptionType.subclass: return descriptionType.subclass(*args_, **kwargs_) @@ -2783,35 +3144,43 @@ def add_sect1(self, value): self.sect1.append(value) def insert_sect1(self, index, value): self.sect1[index] = value def get_internal(self): return self.internal def set_internal(self, internal): self.internal = internal + def export(self, outfile, level, namespace_='', name_='descriptionType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) - self.exportAttributes(outfile, level, namespace_, name_='descriptionType') + self.exportAttributes(outfile, level, namespace_, + name_='descriptionType') outfile.write('>') self.exportChildren(outfile, level + 1, namespace_, name_) outfile.write('\n' % (namespace_, name_)) + def exportAttributes(self, outfile, level, namespace_='', name_='descriptionType'): pass + def exportChildren(self, outfile, level, namespace_='', name_='descriptionType'): for item_ in self.content_: item_.export(outfile, level, item_.name, namespace_) + def hasContent_(self): if ( self.title is not None or self.para is not None or self.sect1 is not None or self.internal is not None - ): + ): return True else: return False + def exportLiteral(self, outfile, level, name_='descriptionType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) + def exportLiteralAttributes(self, outfile, level, name_): pass + def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('content_ = [\n') @@ -2837,46 +3206,49 @@ def exportLiteralChildren(self, outfile, level, name_): item_.exportLiteral(outfile, level, name_) showIndent(outfile, level) outfile.write('],\n') + def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) + def buildAttributes(self, attrs): pass + def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.ELEMENT_NODE and \ - nodeName_ == 'title': + nodeName_ == 'title': childobj_ = docTitleType.factory() childobj_.build(child_) obj_ = self.mixedclass_(MixedContainer.CategoryComplex, - MixedContainer.TypeNone, 'title', childobj_) + MixedContainer.TypeNone, 'title', childobj_) self.content_.append(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ - nodeName_ == 'para': + nodeName_ == 'para': childobj_ = docParaType.factory() childobj_.build(child_) obj_ = self.mixedclass_(MixedContainer.CategoryComplex, - MixedContainer.TypeNone, 'para', childobj_) + MixedContainer.TypeNone, 'para', childobj_) self.content_.append(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ - nodeName_ == 'sect1': + nodeName_ == 'sect1': childobj_ = docSect1Type.factory() childobj_.build(child_) obj_ = self.mixedclass_(MixedContainer.CategoryComplex, - MixedContainer.TypeNone, 'sect1', childobj_) + MixedContainer.TypeNone, 'sect1', childobj_) self.content_.append(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ - nodeName_ == 'internal': + nodeName_ == 'internal': childobj_ = docInternalType.factory() childobj_.build(child_) obj_ = self.mixedclass_(MixedContainer.CategoryComplex, - MixedContainer.TypeNone, 'internal', childobj_) + MixedContainer.TypeNone, 'internal', childobj_) self.content_.append(obj_) elif child_.nodeType == Node.TEXT_NODE: obj_ = self.mixedclass_(MixedContainer.CategoryText, - MixedContainer.TypeNone, '', child_.nodeValue) + MixedContainer.TypeNone, '', child_.nodeValue) self.content_.append(obj_) # end class descriptionType @@ -2884,6 +3256,7 @@ def buildChildren(self, child_, nodeName_): class enumvalueType(GeneratedsSuper): subclass = None superclass = None + def __init__(self, prot=None, id=None, name=None, initializer=None, briefdescription=None, detaileddescription=None, mixedclass_=None, content_=None): self.prot = prot self.id = id @@ -2895,6 +3268,7 @@ def __init__(self, prot=None, id=None, name=None, initializer=None, briefdescrip self.content_ = [] else: self.content_ = content_ + def factory(*args_, **kwargs_): if enumvalueType.subclass: return enumvalueType.subclass(*args_, **kwargs_) @@ -2906,43 +3280,55 @@ def set_name(self, name): self.name = name def get_initializer(self): return self.initializer def set_initializer(self, initializer): self.initializer = initializer def get_briefdescription(self): return self.briefdescription - def set_briefdescription(self, briefdescription): self.briefdescription = briefdescription + def set_briefdescription( + self, briefdescription): self.briefdescription = briefdescription + def get_detaileddescription(self): return self.detaileddescription - def set_detaileddescription(self, detaileddescription): self.detaileddescription = detaileddescription + def set_detaileddescription( + self, detaileddescription): self.detaileddescription = detaileddescription + def get_prot(self): return self.prot def set_prot(self, prot): self.prot = prot def get_id(self): return self.id def set_id(self, id): self.id = id + def export(self, outfile, level, namespace_='', name_='enumvalueType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) - self.exportAttributes(outfile, level, namespace_, name_='enumvalueType') + self.exportAttributes(outfile, level, namespace_, + name_='enumvalueType') outfile.write('>') self.exportChildren(outfile, level + 1, namespace_, name_) outfile.write('\n' % (namespace_, name_)) + def exportAttributes(self, outfile, level, namespace_='', name_='enumvalueType'): if self.prot is not None: outfile.write(' prot=%s' % (quote_attrib(self.prot), )) if self.id is not None: - outfile.write(' id=%s' % (self.format_string(quote_attrib(self.id).encode(ExternalEncoding), input_name='id'), )) + outfile.write(' id=%s' % (self.format_string(quote_attrib( + self.id).encode(ExternalEncoding), input_name='id'), )) + def exportChildren(self, outfile, level, namespace_='', name_='enumvalueType'): for item_ in self.content_: item_.export(outfile, level, item_.name, namespace_) + def hasContent_(self): if ( self.name is not None or self.initializer is not None or self.briefdescription is not None or self.detaileddescription is not None - ): + ): return True else: return False + def exportLiteral(self, outfile, level, name_='enumvalueType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) + def exportLiteralAttributes(self, outfile, level, name_): if self.prot is not None: showIndent(outfile, level) @@ -2950,6 +3336,7 @@ def exportLiteralAttributes(self, outfile, level, name_): if self.id is not None: showIndent(outfile, level) outfile.write('id = %s,\n' % (self.id,)) + def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('content_ = [\n') @@ -2975,51 +3362,54 @@ def exportLiteralChildren(self, outfile, level, name_): item_.exportLiteral(outfile, level, name_) showIndent(outfile, level) outfile.write('],\n') + def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) + def buildAttributes(self, attrs): if attrs.get('prot'): self.prot = attrs.get('prot').value if attrs.get('id'): self.id = attrs.get('id').value + def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.ELEMENT_NODE and \ - nodeName_ == 'name': + nodeName_ == 'name': value_ = [] for text_ in child_.childNodes: value_.append(text_.nodeValue) valuestr_ = ''.join(value_) obj_ = self.mixedclass_(MixedContainer.CategorySimple, - MixedContainer.TypeString, 'name', valuestr_) + MixedContainer.TypeString, 'name', valuestr_) self.content_.append(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ - nodeName_ == 'initializer': + nodeName_ == 'initializer': childobj_ = linkedTextType.factory() childobj_.build(child_) obj_ = self.mixedclass_(MixedContainer.CategoryComplex, - MixedContainer.TypeNone, 'initializer', childobj_) + MixedContainer.TypeNone, 'initializer', childobj_) self.content_.append(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ - nodeName_ == 'briefdescription': + nodeName_ == 'briefdescription': childobj_ = descriptionType.factory() childobj_.build(child_) obj_ = self.mixedclass_(MixedContainer.CategoryComplex, - MixedContainer.TypeNone, 'briefdescription', childobj_) + MixedContainer.TypeNone, 'briefdescription', childobj_) self.content_.append(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ - nodeName_ == 'detaileddescription': + nodeName_ == 'detaileddescription': childobj_ = descriptionType.factory() childobj_.build(child_) obj_ = self.mixedclass_(MixedContainer.CategoryComplex, - MixedContainer.TypeNone, 'detaileddescription', childobj_) + MixedContainer.TypeNone, 'detaileddescription', childobj_) self.content_.append(obj_) elif child_.nodeType == Node.TEXT_NODE: obj_ = self.mixedclass_(MixedContainer.CategoryText, - MixedContainer.TypeNone, '', child_.nodeValue) + MixedContainer.TypeNone, '', child_.nodeValue) self.content_.append(obj_) # end class enumvalueType @@ -3027,11 +3417,13 @@ def buildChildren(self, child_, nodeName_): class templateparamlistType(GeneratedsSuper): subclass = None superclass = None + def __init__(self, param=None): if param is None: self.param = [] else: self.param = param + def factory(*args_, **kwargs_): if templateparamlistType.subclass: return templateparamlistType.subclass(*args_, **kwargs_) @@ -3042,10 +3434,12 @@ def get_param(self): return self.param def set_param(self, param): self.param = param def add_param(self, value): self.param.append(value) def insert_param(self, index, value): self.param[index] = value + def export(self, outfile, level, namespace_='', name_='templateparamlistType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) - self.exportAttributes(outfile, level, namespace_, name_='templateparamlistType') + self.exportAttributes(outfile, level, namespace_, + name_='templateparamlistType') if self.hasContent_(): outfile.write('>\n') self.exportChildren(outfile, level + 1, namespace_, name_) @@ -3053,25 +3447,31 @@ def export(self, outfile, level, namespace_='', name_='templateparamlistType', n outfile.write('\n' % (namespace_, name_)) else: outfile.write(' />\n') + def exportAttributes(self, outfile, level, namespace_='', name_='templateparamlistType'): pass + def exportChildren(self, outfile, level, namespace_='', name_='templateparamlistType'): for param_ in self.param: param_.export(outfile, level, namespace_, name_='param') + def hasContent_(self): if ( self.param is not None - ): + ): return True else: return False + def exportLiteral(self, outfile, level, name_='templateparamlistType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) + def exportLiteralAttributes(self, outfile, level, name_): pass + def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('param=[\n') @@ -3085,17 +3485,20 @@ def exportLiteralChildren(self, outfile, level, name_): level -= 1 showIndent(outfile, level) outfile.write('],\n') + def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) + def buildAttributes(self, attrs): pass + def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.ELEMENT_NODE and \ - nodeName_ == 'param': + nodeName_ == 'param': obj_ = paramType.factory() obj_.build(child_) self.param.append(obj_) @@ -3105,6 +3508,7 @@ def buildChildren(self, child_, nodeName_): class paramType(GeneratedsSuper): subclass = None superclass = None + def __init__(self, type_=None, declname=None, defname=None, array=None, defval=None, briefdescription=None): self.type_ = type_ self.declname = declname @@ -3112,6 +3516,7 @@ def __init__(self, type_=None, declname=None, defname=None, array=None, defval=N self.array = array self.defval = defval self.briefdescription = briefdescription + def factory(*args_, **kwargs_): if paramType.subclass: return paramType.subclass(*args_, **kwargs_) @@ -3129,7 +3534,10 @@ def set_array(self, array): self.array = array def get_defval(self): return self.defval def set_defval(self, defval): self.defval = defval def get_briefdescription(self): return self.briefdescription - def set_briefdescription(self, briefdescription): self.briefdescription = briefdescription + + def set_briefdescription( + self, briefdescription): self.briefdescription = briefdescription + def export(self, outfile, level, namespace_='', name_='paramType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) @@ -3141,24 +3549,31 @@ def export(self, outfile, level, namespace_='', name_='paramType', namespacedef_ outfile.write('\n' % (namespace_, name_)) else: outfile.write(' />\n') + def exportAttributes(self, outfile, level, namespace_='', name_='paramType'): pass + def exportChildren(self, outfile, level, namespace_='', name_='paramType'): if self.type_: self.type_.export(outfile, level, namespace_, name_='type') if self.declname is not None: showIndent(outfile, level) - outfile.write('<%sdeclname>%s\n' % (namespace_, self.format_string(quote_xml(self.declname).encode(ExternalEncoding), input_name='declname'), namespace_)) + outfile.write('<%sdeclname>%s\n' % (namespace_, self.format_string( + quote_xml(self.declname).encode(ExternalEncoding), input_name='declname'), namespace_)) if self.defname is not None: showIndent(outfile, level) - outfile.write('<%sdefname>%s\n' % (namespace_, self.format_string(quote_xml(self.defname).encode(ExternalEncoding), input_name='defname'), namespace_)) + outfile.write('<%sdefname>%s\n' % (namespace_, self.format_string( + quote_xml(self.defname).encode(ExternalEncoding), input_name='defname'), namespace_)) if self.array is not None: showIndent(outfile, level) - outfile.write('<%sarray>%s\n' % (namespace_, self.format_string(quote_xml(self.array).encode(ExternalEncoding), input_name='array'), namespace_)) + outfile.write('<%sarray>%s\n' % (namespace_, self.format_string( + quote_xml(self.array).encode(ExternalEncoding), input_name='array'), namespace_)) if self.defval: self.defval.export(outfile, level, namespace_, name_='defval') if self.briefdescription: - self.briefdescription.export(outfile, level, namespace_, name_='briefdescription') + self.briefdescription.export( + outfile, level, namespace_, name_='briefdescription') + def hasContent_(self): if ( self.type_ is not None or @@ -3167,17 +3582,20 @@ def hasContent_(self): self.array is not None or self.defval is not None or self.briefdescription is not None - ): + ): return True else: return False + def exportLiteral(self, outfile, level, name_='paramType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) + def exportLiteralAttributes(self, outfile, level, name_): pass + def exportLiteralChildren(self, outfile, level, name_): if self.type_: showIndent(outfile, level) @@ -3186,11 +3604,14 @@ def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('),\n') showIndent(outfile, level) - outfile.write('declname=%s,\n' % quote_python(self.declname).encode(ExternalEncoding)) + outfile.write('declname=%s,\n' % quote_python( + self.declname).encode(ExternalEncoding)) showIndent(outfile, level) - outfile.write('defname=%s,\n' % quote_python(self.defname).encode(ExternalEncoding)) + outfile.write('defname=%s,\n' % quote_python( + self.defname).encode(ExternalEncoding)) showIndent(outfile, level) - outfile.write('array=%s,\n' % quote_python(self.array).encode(ExternalEncoding)) + outfile.write('array=%s,\n' % quote_python( + self.array).encode(ExternalEncoding)) if self.defval: showIndent(outfile, level) outfile.write('defval=model_.linkedTextType(\n') @@ -3200,48 +3621,52 @@ def exportLiteralChildren(self, outfile, level, name_): if self.briefdescription: showIndent(outfile, level) outfile.write('briefdescription=model_.descriptionType(\n') - self.briefdescription.exportLiteral(outfile, level, name_='briefdescription') + self.briefdescription.exportLiteral( + outfile, level, name_='briefdescription') showIndent(outfile, level) outfile.write('),\n') + def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) + def buildAttributes(self, attrs): pass + def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.ELEMENT_NODE and \ - nodeName_ == 'type': + nodeName_ == 'type': obj_ = linkedTextType.factory() obj_.build(child_) self.set_type(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ - nodeName_ == 'declname': + nodeName_ == 'declname': declname_ = '' for text__content_ in child_.childNodes: declname_ += text__content_.nodeValue self.declname = declname_ elif child_.nodeType == Node.ELEMENT_NODE and \ - nodeName_ == 'defname': + nodeName_ == 'defname': defname_ = '' for text__content_ in child_.childNodes: defname_ += text__content_.nodeValue self.defname = defname_ elif child_.nodeType == Node.ELEMENT_NODE and \ - nodeName_ == 'array': + nodeName_ == 'array': array_ = '' for text__content_ in child_.childNodes: array_ += text__content_.nodeValue self.array = array_ elif child_.nodeType == Node.ELEMENT_NODE and \ - nodeName_ == 'defval': + nodeName_ == 'defval': obj_ = linkedTextType.factory() obj_.build(child_) self.set_defval(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ - nodeName_ == 'briefdescription': + nodeName_ == 'briefdescription': obj_ = descriptionType.factory() obj_.build(child_) self.set_briefdescription(obj_) @@ -3251,8 +3676,10 @@ def buildChildren(self, child_, nodeName_): class declname(GeneratedsSuper): subclass = None superclass = None + def __init__(self, valueOf_=''): self.valueOf_ = valueOf_ + def factory(*args_, **kwargs_): if declname.subclass: return declname.subclass(*args_, **kwargs_) @@ -3261,6 +3688,7 @@ def factory(*args_, **kwargs_): factory = staticmethod(factory) def getValueOf_(self): return self.valueOf_ def setValueOf_(self, valueOf_): self.valueOf_ = valueOf_ + def export(self, outfile, level, namespace_='', name_='declname', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) @@ -3272,33 +3700,40 @@ def export(self, outfile, level, namespace_='', name_='declname', namespacedef_= outfile.write('\n' % (namespace_, name_)) else: outfile.write(' />\n') + def exportAttributes(self, outfile, level, namespace_='', name_='declname'): pass + def exportChildren(self, outfile, level, namespace_='', name_='declname'): - if self.valueOf_.find('![CDATA')>-1: - value=quote_xml('%s' % self.valueOf_) - value=value.replace('![CDATA','') + if self.valueOf_.find('![CDATA') > -1: + value = quote_xml('%s' % self.valueOf_) + value = value.replace('![CDATA', '') outfile.write(value) else: outfile.write(quote_xml('%s' % self.valueOf_)) + def hasContent_(self): if ( self.valueOf_ is not None - ): + ): return True else: return False + def exportLiteral(self, outfile, level, name_='declname'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) + def exportLiteralAttributes(self, outfile, level, name_): pass + def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('valueOf_ = "%s",\n' % (self.valueOf_,)) + def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) @@ -3306,21 +3741,25 @@ def build(self, node_): for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) + def buildAttributes(self, attrs): pass + def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.TEXT_NODE: self.valueOf_ += child_.nodeValue elif child_.nodeType == Node.CDATA_SECTION_NODE: - self.valueOf_ += '![CDATA['+child_.nodeValue+']]' + self.valueOf_ += '![CDATA[' + child_.nodeValue + ']]' # end class declname class defname(GeneratedsSuper): subclass = None superclass = None + def __init__(self, valueOf_=''): self.valueOf_ = valueOf_ + def factory(*args_, **kwargs_): if defname.subclass: return defname.subclass(*args_, **kwargs_) @@ -3329,6 +3768,7 @@ def factory(*args_, **kwargs_): factory = staticmethod(factory) def getValueOf_(self): return self.valueOf_ def setValueOf_(self, valueOf_): self.valueOf_ = valueOf_ + def export(self, outfile, level, namespace_='', name_='defname', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) @@ -3340,33 +3780,40 @@ def export(self, outfile, level, namespace_='', name_='defname', namespacedef_=' outfile.write('\n' % (namespace_, name_)) else: outfile.write(' />\n') + def exportAttributes(self, outfile, level, namespace_='', name_='defname'): pass + def exportChildren(self, outfile, level, namespace_='', name_='defname'): - if self.valueOf_.find('![CDATA')>-1: - value=quote_xml('%s' % self.valueOf_) - value=value.replace('![CDATA','') + if self.valueOf_.find('![CDATA') > -1: + value = quote_xml('%s' % self.valueOf_) + value = value.replace('![CDATA', '') outfile.write(value) else: outfile.write(quote_xml('%s' % self.valueOf_)) + def hasContent_(self): if ( self.valueOf_ is not None - ): + ): return True else: return False + def exportLiteral(self, outfile, level, name_='defname'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) + def exportLiteralAttributes(self, outfile, level, name_): pass + def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('valueOf_ = "%s",\n' % (self.valueOf_,)) + def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) @@ -3374,21 +3821,25 @@ def build(self, node_): for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) + def buildAttributes(self, attrs): pass + def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.TEXT_NODE: self.valueOf_ += child_.nodeValue elif child_.nodeType == Node.CDATA_SECTION_NODE: - self.valueOf_ += '![CDATA['+child_.nodeValue+']]' + self.valueOf_ += '![CDATA[' + child_.nodeValue + ']]' # end class defname class array(GeneratedsSuper): subclass = None superclass = None + def __init__(self, valueOf_=''): self.valueOf_ = valueOf_ + def factory(*args_, **kwargs_): if array.subclass: return array.subclass(*args_, **kwargs_) @@ -3397,6 +3848,7 @@ def factory(*args_, **kwargs_): factory = staticmethod(factory) def getValueOf_(self): return self.valueOf_ def setValueOf_(self, valueOf_): self.valueOf_ = valueOf_ + def export(self, outfile, level, namespace_='', name_='array', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) @@ -3408,33 +3860,40 @@ def export(self, outfile, level, namespace_='', name_='array', namespacedef_='') outfile.write('\n' % (namespace_, name_)) else: outfile.write(' />\n') + def exportAttributes(self, outfile, level, namespace_='', name_='array'): pass + def exportChildren(self, outfile, level, namespace_='', name_='array'): - if self.valueOf_.find('![CDATA')>-1: - value=quote_xml('%s' % self.valueOf_) - value=value.replace('![CDATA','') + if self.valueOf_.find('![CDATA') > -1: + value = quote_xml('%s' % self.valueOf_) + value = value.replace('![CDATA', '') outfile.write(value) else: outfile.write(quote_xml('%s' % self.valueOf_)) + def hasContent_(self): if ( self.valueOf_ is not None - ): + ): return True else: return False + def exportLiteral(self, outfile, level, name_='array'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) + def exportLiteralAttributes(self, outfile, level, name_): pass + def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('valueOf_ = "%s",\n' % (self.valueOf_,)) + def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) @@ -3442,19 +3901,22 @@ def build(self, node_): for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) + def buildAttributes(self, attrs): pass + def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.TEXT_NODE: self.valueOf_ += child_.nodeValue elif child_.nodeType == Node.CDATA_SECTION_NODE: - self.valueOf_ += '![CDATA['+child_.nodeValue+']]' + self.valueOf_ += '![CDATA[' + child_.nodeValue + ']]' # end class array class linkedTextType(GeneratedsSuper): subclass = None superclass = None + def __init__(self, ref=None, mixedclass_=None, content_=None): if mixedclass_ is None: self.mixedclass_ = MixedContainer @@ -3464,6 +3926,7 @@ def __init__(self, ref=None, mixedclass_=None, content_=None): self.content_ = [] else: self.content_ = content_ + def factory(*args_, **kwargs_): if linkedTextType.subclass: return linkedTextType.subclass(*args_, **kwargs_) @@ -3474,32 +3937,40 @@ def get_ref(self): return self.ref def set_ref(self, ref): self.ref = ref def add_ref(self, value): self.ref.append(value) def insert_ref(self, index, value): self.ref[index] = value + def export(self, outfile, level, namespace_='', name_='linkedTextType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) - self.exportAttributes(outfile, level, namespace_, name_='linkedTextType') + self.exportAttributes(outfile, level, namespace_, + name_='linkedTextType') outfile.write('>') self.exportChildren(outfile, level + 1, namespace_, name_) outfile.write('\n' % (namespace_, name_)) + def exportAttributes(self, outfile, level, namespace_='', name_='linkedTextType'): pass + def exportChildren(self, outfile, level, namespace_='', name_='linkedTextType'): for item_ in self.content_: item_.export(outfile, level, item_.name, namespace_) + def hasContent_(self): if ( self.ref is not None - ): + ): return True else: return False + def exportLiteral(self, outfile, level, name_='linkedTextType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) + def exportLiteralAttributes(self, outfile, level, name_): pass + def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('content_ = [\n') @@ -3507,25 +3978,28 @@ def exportLiteralChildren(self, outfile, level, name_): item_.exportLiteral(outfile, level, name_) showIndent(outfile, level) outfile.write('],\n') + def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) + def buildAttributes(self, attrs): pass + def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.ELEMENT_NODE and \ - nodeName_ == 'ref': + nodeName_ == 'ref': childobj_ = docRefTextType.factory() childobj_.build(child_) obj_ = self.mixedclass_(MixedContainer.CategoryComplex, - MixedContainer.TypeNone, 'ref', childobj_) + MixedContainer.TypeNone, 'ref', childobj_) self.content_.append(obj_) elif child_.nodeType == Node.TEXT_NODE: obj_ = self.mixedclass_(MixedContainer.CategoryText, - MixedContainer.TypeNone, '', child_.nodeValue) + MixedContainer.TypeNone, '', child_.nodeValue) self.content_.append(obj_) # end class linkedTextType @@ -3533,11 +4007,13 @@ def buildChildren(self, child_, nodeName_): class graphType(GeneratedsSuper): subclass = None superclass = None + def __init__(self, node=None): if node is None: self.node = [] else: self.node = node + def factory(*args_, **kwargs_): if graphType.subclass: return graphType.subclass(*args_, **kwargs_) @@ -3548,6 +4024,7 @@ def get_node(self): return self.node def set_node(self, node): self.node = node def add_node(self, value): self.node.append(value) def insert_node(self, index, value): self.node[index] = value + def export(self, outfile, level, namespace_='', name_='graphType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) @@ -3559,25 +4036,31 @@ def export(self, outfile, level, namespace_='', name_='graphType', namespacedef_ outfile.write('\n' % (namespace_, name_)) else: outfile.write(' />\n') + def exportAttributes(self, outfile, level, namespace_='', name_='graphType'): pass + def exportChildren(self, outfile, level, namespace_='', name_='graphType'): for node_ in self.node: node_.export(outfile, level, namespace_, name_='node') + def hasContent_(self): if ( self.node is not None - ): + ): return True else: return False + def exportLiteral(self, outfile, level, name_='graphType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) + def exportLiteralAttributes(self, outfile, level, name_): pass + def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('node=[\n') @@ -3591,17 +4074,20 @@ def exportLiteralChildren(self, outfile, level, name_): level -= 1 showIndent(outfile, level) outfile.write('],\n') + def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) + def buildAttributes(self, attrs): pass + def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.ELEMENT_NODE and \ - nodeName_ == 'node': + nodeName_ == 'node': obj_ = nodeType.factory() obj_.build(child_) self.node.append(obj_) @@ -3611,6 +4097,7 @@ def buildChildren(self, child_, nodeName_): class nodeType(GeneratedsSuper): subclass = None superclass = None + def __init__(self, id=None, label=None, link=None, childnode=None): self.id = id self.label = label @@ -3619,6 +4106,7 @@ def __init__(self, id=None, label=None, link=None, childnode=None): self.childnode = [] else: self.childnode = childnode + def factory(*args_, **kwargs_): if nodeType.subclass: return nodeType.subclass(*args_, **kwargs_) @@ -3635,6 +4123,7 @@ def add_childnode(self, value): self.childnode.append(value) def insert_childnode(self, index, value): self.childnode[index] = value def get_id(self): return self.id def set_id(self, id): self.id = id + def export(self, outfile, level, namespace_='', name_='nodeType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) @@ -3646,38 +4135,47 @@ def export(self, outfile, level, namespace_='', name_='nodeType', namespacedef_= outfile.write('\n' % (namespace_, name_)) else: outfile.write(' />\n') + def exportAttributes(self, outfile, level, namespace_='', name_='nodeType'): if self.id is not None: - outfile.write(' id=%s' % (self.format_string(quote_attrib(self.id).encode(ExternalEncoding), input_name='id'), )) + outfile.write(' id=%s' % (self.format_string(quote_attrib( + self.id).encode(ExternalEncoding), input_name='id'), )) + def exportChildren(self, outfile, level, namespace_='', name_='nodeType'): if self.label is not None: showIndent(outfile, level) - outfile.write('<%slabel>%s\n' % (namespace_, self.format_string(quote_xml(self.label).encode(ExternalEncoding), input_name='label'), namespace_)) + outfile.write('<%slabel>%s\n' % (namespace_, self.format_string( + quote_xml(self.label).encode(ExternalEncoding), input_name='label'), namespace_)) if self.link: self.link.export(outfile, level, namespace_, name_='link') for childnode_ in self.childnode: childnode_.export(outfile, level, namespace_, name_='childnode') + def hasContent_(self): if ( self.label is not None or self.link is not None or self.childnode is not None - ): + ): return True else: return False + def exportLiteral(self, outfile, level, name_='nodeType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) + def exportLiteralAttributes(self, outfile, level, name_): if self.id is not None: showIndent(outfile, level) outfile.write('id = %s,\n' % (self.id,)) + def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) - outfile.write('label=%s,\n' % quote_python(self.label).encode(ExternalEncoding)) + outfile.write('label=%s,\n' % quote_python( + self.label).encode(ExternalEncoding)) if self.link: showIndent(outfile, level) outfile.write('link=model_.linkType(\n') @@ -3696,29 +4194,32 @@ def exportLiteralChildren(self, outfile, level, name_): level -= 1 showIndent(outfile, level) outfile.write('],\n') + def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) + def buildAttributes(self, attrs): if attrs.get('id'): self.id = attrs.get('id').value + def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.ELEMENT_NODE and \ - nodeName_ == 'label': + nodeName_ == 'label': label_ = '' for text__content_ in child_.childNodes: label_ += text__content_.nodeValue self.label = label_ elif child_.nodeType == Node.ELEMENT_NODE and \ - nodeName_ == 'link': + nodeName_ == 'link': obj_ = linkType.factory() obj_.build(child_) self.set_link(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ - nodeName_ == 'childnode': + nodeName_ == 'childnode': obj_ = childnodeType.factory() obj_.build(child_) self.childnode.append(obj_) @@ -3728,8 +4229,10 @@ def buildChildren(self, child_, nodeName_): class label(GeneratedsSuper): subclass = None superclass = None + def __init__(self, valueOf_=''): self.valueOf_ = valueOf_ + def factory(*args_, **kwargs_): if label.subclass: return label.subclass(*args_, **kwargs_) @@ -3738,6 +4241,7 @@ def factory(*args_, **kwargs_): factory = staticmethod(factory) def getValueOf_(self): return self.valueOf_ def setValueOf_(self, valueOf_): self.valueOf_ = valueOf_ + def export(self, outfile, level, namespace_='', name_='label', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) @@ -3749,33 +4253,40 @@ def export(self, outfile, level, namespace_='', name_='label', namespacedef_='') outfile.write('\n' % (namespace_, name_)) else: outfile.write(' />\n') + def exportAttributes(self, outfile, level, namespace_='', name_='label'): pass + def exportChildren(self, outfile, level, namespace_='', name_='label'): - if self.valueOf_.find('![CDATA')>-1: - value=quote_xml('%s' % self.valueOf_) - value=value.replace('![CDATA','') + if self.valueOf_.find('![CDATA') > -1: + value = quote_xml('%s' % self.valueOf_) + value = value.replace('![CDATA', '') outfile.write(value) else: outfile.write(quote_xml('%s' % self.valueOf_)) + def hasContent_(self): if ( self.valueOf_ is not None - ): + ): return True else: return False + def exportLiteral(self, outfile, level, name_='label'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) + def exportLiteralAttributes(self, outfile, level, name_): pass + def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('valueOf_ = "%s",\n' % (self.valueOf_,)) + def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) @@ -3783,19 +4294,22 @@ def build(self, node_): for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) + def buildAttributes(self, attrs): pass + def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.TEXT_NODE: self.valueOf_ += child_.nodeValue elif child_.nodeType == Node.CDATA_SECTION_NODE: - self.valueOf_ += '![CDATA['+child_.nodeValue+']]' + self.valueOf_ += '![CDATA[' + child_.nodeValue + ']]' # end class label class childnodeType(GeneratedsSuper): subclass = None superclass = None + def __init__(self, relation=None, refid=None, edgelabel=None): self.relation = relation self.refid = refid @@ -3803,6 +4317,7 @@ def __init__(self, relation=None, refid=None, edgelabel=None): self.edgelabel = [] else: self.edgelabel = edgelabel + def factory(*args_, **kwargs_): if childnodeType.subclass: return childnodeType.subclass(*args_, **kwargs_) @@ -3817,10 +4332,12 @@ def get_relation(self): return self.relation def set_relation(self, relation): self.relation = relation def get_refid(self): return self.refid def set_refid(self, refid): self.refid = refid + def export(self, outfile, level, namespace_='', name_='childnodeType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) - self.exportAttributes(outfile, level, namespace_, name_='childnodeType') + self.exportAttributes(outfile, level, namespace_, + name_='childnodeType') if self.hasContent_(): outfile.write('>\n') self.exportChildren(outfile, level + 1, namespace_, name_) @@ -3828,27 +4345,34 @@ def export(self, outfile, level, namespace_='', name_='childnodeType', namespace outfile.write('\n' % (namespace_, name_)) else: outfile.write(' />\n') + def exportAttributes(self, outfile, level, namespace_='', name_='childnodeType'): if self.relation is not None: outfile.write(' relation=%s' % (quote_attrib(self.relation), )) if self.refid is not None: - outfile.write(' refid=%s' % (self.format_string(quote_attrib(self.refid).encode(ExternalEncoding), input_name='refid'), )) + outfile.write(' refid=%s' % (self.format_string(quote_attrib( + self.refid).encode(ExternalEncoding), input_name='refid'), )) + def exportChildren(self, outfile, level, namespace_='', name_='childnodeType'): for edgelabel_ in self.edgelabel: showIndent(outfile, level) - outfile.write('<%sedgelabel>%s\n' % (namespace_, self.format_string(quote_xml(edgelabel_).encode(ExternalEncoding), input_name='edgelabel'), namespace_)) + outfile.write('<%sedgelabel>%s\n' % (namespace_, self.format_string( + quote_xml(edgelabel_).encode(ExternalEncoding), input_name='edgelabel'), namespace_)) + def hasContent_(self): if ( self.edgelabel is not None - ): + ): return True else: return False + def exportLiteral(self, outfile, level, name_='childnodeType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) + def exportLiteralAttributes(self, outfile, level, name_): if self.relation is not None: showIndent(outfile, level) @@ -3856,30 +4380,35 @@ def exportLiteralAttributes(self, outfile, level, name_): if self.refid is not None: showIndent(outfile, level) outfile.write('refid = %s,\n' % (self.refid,)) + def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('edgelabel=[\n') level += 1 for edgelabel in self.edgelabel: showIndent(outfile, level) - outfile.write('%s,\n' % quote_python(edgelabel).encode(ExternalEncoding)) + outfile.write('%s,\n' % quote_python( + edgelabel).encode(ExternalEncoding)) level -= 1 showIndent(outfile, level) outfile.write('],\n') + def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) + def buildAttributes(self, attrs): if attrs.get('relation'): self.relation = attrs.get('relation').value if attrs.get('refid'): self.refid = attrs.get('refid').value + def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.ELEMENT_NODE and \ - nodeName_ == 'edgelabel': + nodeName_ == 'edgelabel': edgelabel_ = '' for text__content_ in child_.childNodes: edgelabel_ += text__content_.nodeValue @@ -3890,8 +4419,10 @@ def buildChildren(self, child_, nodeName_): class edgelabel(GeneratedsSuper): subclass = None superclass = None + def __init__(self, valueOf_=''): self.valueOf_ = valueOf_ + def factory(*args_, **kwargs_): if edgelabel.subclass: return edgelabel.subclass(*args_, **kwargs_) @@ -3900,6 +4431,7 @@ def factory(*args_, **kwargs_): factory = staticmethod(factory) def getValueOf_(self): return self.valueOf_ def setValueOf_(self, valueOf_): self.valueOf_ = valueOf_ + def export(self, outfile, level, namespace_='', name_='edgelabel', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) @@ -3911,33 +4443,40 @@ def export(self, outfile, level, namespace_='', name_='edgelabel', namespacedef_ outfile.write('\n' % (namespace_, name_)) else: outfile.write(' />\n') + def exportAttributes(self, outfile, level, namespace_='', name_='edgelabel'): pass + def exportChildren(self, outfile, level, namespace_='', name_='edgelabel'): - if self.valueOf_.find('![CDATA')>-1: - value=quote_xml('%s' % self.valueOf_) - value=value.replace('![CDATA','') + if self.valueOf_.find('![CDATA') > -1: + value = quote_xml('%s' % self.valueOf_) + value = value.replace('![CDATA', '') outfile.write(value) else: outfile.write(quote_xml('%s' % self.valueOf_)) + def hasContent_(self): if ( self.valueOf_ is not None - ): + ): return True else: return False + def exportLiteral(self, outfile, level, name_='edgelabel'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) + def exportLiteralAttributes(self, outfile, level, name_): pass + def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('valueOf_ = "%s",\n' % (self.valueOf_,)) + def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) @@ -3945,23 +4484,27 @@ def build(self, node_): for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) + def buildAttributes(self, attrs): pass + def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.TEXT_NODE: self.valueOf_ += child_.nodeValue elif child_.nodeType == Node.CDATA_SECTION_NODE: - self.valueOf_ += '![CDATA['+child_.nodeValue+']]' + self.valueOf_ += '![CDATA[' + child_.nodeValue + ']]' # end class edgelabel class linkType(GeneratedsSuper): subclass = None superclass = None + def __init__(self, refid=None, external=None, valueOf_=''): self.refid = refid self.external = external self.valueOf_ = valueOf_ + def factory(*args_, **kwargs_): if linkType.subclass: return linkType.subclass(*args_, **kwargs_) @@ -3974,6 +4517,7 @@ def get_external(self): return self.external def set_external(self, external): self.external = external def getValueOf_(self): return self.valueOf_ def setValueOf_(self, valueOf_): self.valueOf_ = valueOf_ + def export(self, outfile, level, namespace_='', name_='linkType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) @@ -3985,31 +4529,38 @@ def export(self, outfile, level, namespace_='', name_='linkType', namespacedef_= outfile.write('\n' % (namespace_, name_)) else: outfile.write(' />\n') + def exportAttributes(self, outfile, level, namespace_='', name_='linkType'): if self.refid is not None: - outfile.write(' refid=%s' % (self.format_string(quote_attrib(self.refid).encode(ExternalEncoding), input_name='refid'), )) + outfile.write(' refid=%s' % (self.format_string(quote_attrib( + self.refid).encode(ExternalEncoding), input_name='refid'), )) if self.external is not None: - outfile.write(' external=%s' % (self.format_string(quote_attrib(self.external).encode(ExternalEncoding), input_name='external'), )) + outfile.write(' external=%s' % (self.format_string(quote_attrib( + self.external).encode(ExternalEncoding), input_name='external'), )) + def exportChildren(self, outfile, level, namespace_='', name_='linkType'): - if self.valueOf_.find('![CDATA')>-1: - value=quote_xml('%s' % self.valueOf_) - value=value.replace('![CDATA','') + if self.valueOf_.find('![CDATA') > -1: + value = quote_xml('%s' % self.valueOf_) + value = value.replace('![CDATA', '') outfile.write(value) else: outfile.write(quote_xml('%s' % self.valueOf_)) + def hasContent_(self): if ( self.valueOf_ is not None - ): + ): return True else: return False + def exportLiteral(self, outfile, level, name_='linkType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) + def exportLiteralAttributes(self, outfile, level, name_): if self.refid is not None: showIndent(outfile, level) @@ -4017,9 +4568,11 @@ def exportLiteralAttributes(self, outfile, level, name_): if self.external is not None: showIndent(outfile, level) outfile.write('external = %s,\n' % (self.external,)) + def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('valueOf_ = "%s",\n' % (self.valueOf_,)) + def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) @@ -4027,27 +4580,31 @@ def build(self, node_): for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) + def buildAttributes(self, attrs): if attrs.get('refid'): self.refid = attrs.get('refid').value if attrs.get('external'): self.external = attrs.get('external').value + def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.TEXT_NODE: self.valueOf_ += child_.nodeValue elif child_.nodeType == Node.CDATA_SECTION_NODE: - self.valueOf_ += '![CDATA['+child_.nodeValue+']]' + self.valueOf_ += '![CDATA[' + child_.nodeValue + ']]' # end class linkType class listingType(GeneratedsSuper): subclass = None superclass = None + def __init__(self, codeline=None): if codeline is None: self.codeline = [] else: self.codeline = codeline + def factory(*args_, **kwargs_): if listingType.subclass: return listingType.subclass(*args_, **kwargs_) @@ -4058,6 +4615,7 @@ def get_codeline(self): return self.codeline def set_codeline(self, codeline): self.codeline = codeline def add_codeline(self, value): self.codeline.append(value) def insert_codeline(self, index, value): self.codeline[index] = value + def export(self, outfile, level, namespace_='', name_='listingType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) @@ -4069,25 +4627,31 @@ def export(self, outfile, level, namespace_='', name_='listingType', namespacede outfile.write('\n' % (namespace_, name_)) else: outfile.write(' />\n') + def exportAttributes(self, outfile, level, namespace_='', name_='listingType'): pass + def exportChildren(self, outfile, level, namespace_='', name_='listingType'): for codeline_ in self.codeline: codeline_.export(outfile, level, namespace_, name_='codeline') + def hasContent_(self): if ( self.codeline is not None - ): + ): return True else: return False + def exportLiteral(self, outfile, level, name_='listingType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) + def exportLiteralAttributes(self, outfile, level, name_): pass + def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('codeline=[\n') @@ -4101,17 +4665,20 @@ def exportLiteralChildren(self, outfile, level, name_): level -= 1 showIndent(outfile, level) outfile.write('],\n') + def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) + def buildAttributes(self, attrs): pass + def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.ELEMENT_NODE and \ - nodeName_ == 'codeline': + nodeName_ == 'codeline': obj_ = codelineType.factory() obj_.build(child_) self.codeline.append(obj_) @@ -4121,6 +4688,7 @@ def buildChildren(self, child_, nodeName_): class codelineType(GeneratedsSuper): subclass = None superclass = None + def __init__(self, external=None, lineno=None, refkind=None, refid=None, highlight=None): self.external = external self.lineno = lineno @@ -4130,6 +4698,7 @@ def __init__(self, external=None, lineno=None, refkind=None, refid=None, highlig self.highlight = [] else: self.highlight = highlight + def factory(*args_, **kwargs_): if codelineType.subclass: return codelineType.subclass(*args_, **kwargs_) @@ -4148,6 +4717,7 @@ def get_refkind(self): return self.refkind def set_refkind(self, refkind): self.refkind = refkind def get_refid(self): return self.refid def set_refid(self, refid): self.refid = refid + def export(self, outfile, level, namespace_='', name_='codelineType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) @@ -4159,30 +4729,37 @@ def export(self, outfile, level, namespace_='', name_='codelineType', namespaced outfile.write('\n' % (namespace_, name_)) else: outfile.write(' />\n') + def exportAttributes(self, outfile, level, namespace_='', name_='codelineType'): if self.external is not None: outfile.write(' external=%s' % (quote_attrib(self.external), )) if self.lineno is not None: - outfile.write(' lineno="%s"' % self.format_integer(self.lineno, input_name='lineno')) + outfile.write(' lineno="%s"' % self.format_integer( + self.lineno, input_name='lineno')) if self.refkind is not None: outfile.write(' refkind=%s' % (quote_attrib(self.refkind), )) if self.refid is not None: - outfile.write(' refid=%s' % (self.format_string(quote_attrib(self.refid).encode(ExternalEncoding), input_name='refid'), )) + outfile.write(' refid=%s' % (self.format_string(quote_attrib( + self.refid).encode(ExternalEncoding), input_name='refid'), )) + def exportChildren(self, outfile, level, namespace_='', name_='codelineType'): for highlight_ in self.highlight: highlight_.export(outfile, level, namespace_, name_='highlight') + def hasContent_(self): if ( self.highlight is not None - ): + ): return True else: return False + def exportLiteral(self, outfile, level, name_='codelineType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) + def exportLiteralAttributes(self, outfile, level, name_): if self.external is not None: showIndent(outfile, level) @@ -4196,6 +4773,7 @@ def exportLiteralAttributes(self, outfile, level, name_): if self.refid is not None: showIndent(outfile, level) outfile.write('refid = %s,\n' % (self.refid,)) + def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('highlight=[\n') @@ -4209,27 +4787,30 @@ def exportLiteralChildren(self, outfile, level, name_): level -= 1 showIndent(outfile, level) outfile.write('],\n') + def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) + def buildAttributes(self, attrs): if attrs.get('external'): self.external = attrs.get('external').value if attrs.get('lineno'): try: self.lineno = int(attrs.get('lineno').value) - except ValueError, exp: + except ValueError as exp: raise ValueError('Bad integer attribute (lineno): %s' % exp) if attrs.get('refkind'): self.refkind = attrs.get('refkind').value if attrs.get('refid'): self.refid = attrs.get('refid').value + def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.ELEMENT_NODE and \ - nodeName_ == 'highlight': + nodeName_ == 'highlight': obj_ = highlightType.factory() obj_.build(child_) self.highlight.append(obj_) @@ -4239,6 +4820,7 @@ def buildChildren(self, child_, nodeName_): class highlightType(GeneratedsSuper): subclass = None superclass = None + def __init__(self, classxx=None, sp=None, ref=None, mixedclass_=None, content_=None): self.classxx = classxx if mixedclass_ is None: @@ -4249,6 +4831,7 @@ def __init__(self, classxx=None, sp=None, ref=None, mixedclass_=None, content_=N self.content_ = [] else: self.content_ = content_ + def factory(*args_, **kwargs_): if highlightType.subclass: return highlightType.subclass(*args_, **kwargs_) @@ -4265,36 +4848,44 @@ def add_ref(self, value): self.ref.append(value) def insert_ref(self, index, value): self.ref[index] = value def get_class(self): return self.classxx def set_class(self, classxx): self.classxx = classxx + def export(self, outfile, level, namespace_='', name_='highlightType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) - self.exportAttributes(outfile, level, namespace_, name_='highlightType') + self.exportAttributes(outfile, level, namespace_, + name_='highlightType') outfile.write('>') self.exportChildren(outfile, level + 1, namespace_, name_) outfile.write('\n' % (namespace_, name_)) + def exportAttributes(self, outfile, level, namespace_='', name_='highlightType'): if self.classxx is not None: outfile.write(' class=%s' % (quote_attrib(self.classxx), )) + def exportChildren(self, outfile, level, namespace_='', name_='highlightType'): for item_ in self.content_: item_.export(outfile, level, item_.name, namespace_) + def hasContent_(self): if ( self.sp is not None or self.ref is not None - ): + ): return True else: return False + def exportLiteral(self, outfile, level, name_='highlightType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) + def exportLiteralAttributes(self, outfile, level, name_): if self.classxx is not None: showIndent(outfile, level) outfile.write('classxx = "%s",\n' % (self.classxx,)) + def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('content_ = [\n') @@ -4308,35 +4899,38 @@ def exportLiteralChildren(self, outfile, level, name_): item_.exportLiteral(outfile, level, name_) showIndent(outfile, level) outfile.write('],\n') + def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) + def buildAttributes(self, attrs): if attrs.get('class'): self.classxx = attrs.get('class').value + def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.ELEMENT_NODE and \ - nodeName_ == 'sp': + nodeName_ == 'sp': value_ = [] for text_ in child_.childNodes: value_.append(text_.nodeValue) valuestr_ = ''.join(value_) obj_ = self.mixedclass_(MixedContainer.CategorySimple, - MixedContainer.TypeString, 'sp', valuestr_) + MixedContainer.TypeString, 'sp', valuestr_) self.content_.append(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ - nodeName_ == 'ref': + nodeName_ == 'ref': childobj_ = docRefTextType.factory() childobj_.build(child_) obj_ = self.mixedclass_(MixedContainer.CategoryComplex, - MixedContainer.TypeNone, 'ref', childobj_) + MixedContainer.TypeNone, 'ref', childobj_) self.content_.append(obj_) elif child_.nodeType == Node.TEXT_NODE: obj_ = self.mixedclass_(MixedContainer.CategoryText, - MixedContainer.TypeNone, '', child_.nodeValue) + MixedContainer.TypeNone, '', child_.nodeValue) self.content_.append(obj_) # end class highlightType @@ -4344,8 +4938,10 @@ def buildChildren(self, child_, nodeName_): class sp(GeneratedsSuper): subclass = None superclass = None + def __init__(self, valueOf_=''): self.valueOf_ = valueOf_ + def factory(*args_, **kwargs_): if sp.subclass: return sp.subclass(*args_, **kwargs_) @@ -4354,6 +4950,7 @@ def factory(*args_, **kwargs_): factory = staticmethod(factory) def getValueOf_(self): return self.valueOf_ def setValueOf_(self, valueOf_): self.valueOf_ = valueOf_ + def export(self, outfile, level, namespace_='', name_='sp', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) @@ -4365,33 +4962,40 @@ def export(self, outfile, level, namespace_='', name_='sp', namespacedef_=''): outfile.write('\n' % (namespace_, name_)) else: outfile.write(' />\n') + def exportAttributes(self, outfile, level, namespace_='', name_='sp'): pass + def exportChildren(self, outfile, level, namespace_='', name_='sp'): - if self.valueOf_.find('![CDATA')>-1: - value=quote_xml('%s' % self.valueOf_) - value=value.replace('![CDATA','') + if self.valueOf_.find('![CDATA') > -1: + value = quote_xml('%s' % self.valueOf_) + value = value.replace('![CDATA', '') outfile.write(value) else: outfile.write(quote_xml('%s' % self.valueOf_)) + def hasContent_(self): if ( self.valueOf_ is not None - ): + ): return True else: return False + def exportLiteral(self, outfile, level, name_='sp'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) + def exportLiteralAttributes(self, outfile, level, name_): pass + def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('valueOf_ = "%s",\n' % (self.valueOf_,)) + def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) @@ -4399,19 +5003,22 @@ def build(self, node_): for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) + def buildAttributes(self, attrs): pass + def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.TEXT_NODE: self.valueOf_ += child_.nodeValue elif child_.nodeType == Node.CDATA_SECTION_NODE: - self.valueOf_ += '![CDATA['+child_.nodeValue+']]' + self.valueOf_ += '![CDATA[' + child_.nodeValue + ']]' # end class sp class referenceType(GeneratedsSuper): subclass = None superclass = None + def __init__(self, endline=None, startline=None, refid=None, compoundref=None, valueOf_='', mixedclass_=None, content_=None): self.endline = endline self.startline = startline @@ -4425,6 +5032,7 @@ def __init__(self, endline=None, startline=None, refid=None, compoundref=None, v self.content_ = [] else: self.content_ = content_ + def factory(*args_, **kwargs_): if referenceType.subclass: return referenceType.subclass(*args_, **kwargs_) @@ -4441,42 +5049,53 @@ def get_compoundref(self): return self.compoundref def set_compoundref(self, compoundref): self.compoundref = compoundref def getValueOf_(self): return self.valueOf_ def setValueOf_(self, valueOf_): self.valueOf_ = valueOf_ + def export(self, outfile, level, namespace_='', name_='referenceType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) - self.exportAttributes(outfile, level, namespace_, name_='referenceType') + self.exportAttributes(outfile, level, namespace_, + name_='referenceType') outfile.write('>') self.exportChildren(outfile, level + 1, namespace_, name_) outfile.write('\n' % (namespace_, name_)) + def exportAttributes(self, outfile, level, namespace_='', name_='referenceType'): if self.endline is not None: - outfile.write(' endline="%s"' % self.format_integer(self.endline, input_name='endline')) + outfile.write(' endline="%s"' % self.format_integer( + self.endline, input_name='endline')) if self.startline is not None: - outfile.write(' startline="%s"' % self.format_integer(self.startline, input_name='startline')) + outfile.write(' startline="%s"' % self.format_integer( + self.startline, input_name='startline')) if self.refid is not None: - outfile.write(' refid=%s' % (self.format_string(quote_attrib(self.refid).encode(ExternalEncoding), input_name='refid'), )) + outfile.write(' refid=%s' % (self.format_string(quote_attrib( + self.refid).encode(ExternalEncoding), input_name='refid'), )) if self.compoundref is not None: - outfile.write(' compoundref=%s' % (self.format_string(quote_attrib(self.compoundref).encode(ExternalEncoding), input_name='compoundref'), )) + outfile.write(' compoundref=%s' % (self.format_string(quote_attrib( + self.compoundref).encode(ExternalEncoding), input_name='compoundref'), )) + def exportChildren(self, outfile, level, namespace_='', name_='referenceType'): - if self.valueOf_.find('![CDATA')>-1: - value=quote_xml('%s' % self.valueOf_) - value=value.replace('![CDATA','') + if self.valueOf_.find('![CDATA') > -1: + value = quote_xml('%s' % self.valueOf_) + value = value.replace('![CDATA', '') outfile.write(value) else: outfile.write(quote_xml('%s' % self.valueOf_)) + def hasContent_(self): if ( self.valueOf_ is not None - ): + ): return True else: return False + def exportLiteral(self, outfile, level, name_='referenceType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) + def exportLiteralAttributes(self, outfile, level, name_): if self.endline is not None: showIndent(outfile, level) @@ -4490,9 +5109,11 @@ def exportLiteralAttributes(self, outfile, level, name_): if self.compoundref is not None: showIndent(outfile, level) outfile.write('compoundref = %s,\n' % (self.compoundref,)) + def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('valueOf_ = "%s",\n' % (self.valueOf_,)) + def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) @@ -4500,36 +5121,39 @@ def build(self, node_): for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) + def buildAttributes(self, attrs): if attrs.get('endline'): try: self.endline = int(attrs.get('endline').value) - except ValueError, exp: + except ValueError as exp: raise ValueError('Bad integer attribute (endline): %s' % exp) if attrs.get('startline'): try: self.startline = int(attrs.get('startline').value) - except ValueError, exp: + except ValueError as exp: raise ValueError('Bad integer attribute (startline): %s' % exp) if attrs.get('refid'): self.refid = attrs.get('refid').value if attrs.get('compoundref'): self.compoundref = attrs.get('compoundref').value + def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.TEXT_NODE: obj_ = self.mixedclass_(MixedContainer.CategoryText, - MixedContainer.TypeNone, '', child_.nodeValue) + MixedContainer.TypeNone, '', child_.nodeValue) self.content_.append(obj_) if child_.nodeType == Node.TEXT_NODE: self.valueOf_ += child_.nodeValue elif child_.nodeType == Node.CDATA_SECTION_NODE: - self.valueOf_ += '![CDATA['+child_.nodeValue+']]' + self.valueOf_ += '![CDATA[' + child_.nodeValue + ']]' # end class referenceType class locationType(GeneratedsSuper): subclass = None superclass = None + def __init__(self, bodystart=None, line=None, bodyend=None, bodyfile=None, file=None, valueOf_=''): self.bodystart = bodystart self.line = line @@ -4537,6 +5161,7 @@ def __init__(self, bodystart=None, line=None, bodyend=None, bodyfile=None, file= self.bodyfile = bodyfile self.file = file self.valueOf_ = valueOf_ + def factory(*args_, **kwargs_): if locationType.subclass: return locationType.subclass(*args_, **kwargs_) @@ -4555,6 +5180,7 @@ def get_file(self): return self.file def set_file(self, file): self.file = file def getValueOf_(self): return self.valueOf_ def setValueOf_(self, valueOf_): self.valueOf_ = valueOf_ + def export(self, outfile, level, namespace_='', name_='locationType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) @@ -4566,37 +5192,47 @@ def export(self, outfile, level, namespace_='', name_='locationType', namespaced outfile.write('\n' % (namespace_, name_)) else: outfile.write(' />\n') + def exportAttributes(self, outfile, level, namespace_='', name_='locationType'): if self.bodystart is not None: - outfile.write(' bodystart="%s"' % self.format_integer(self.bodystart, input_name='bodystart')) + outfile.write(' bodystart="%s"' % self.format_integer( + self.bodystart, input_name='bodystart')) if self.line is not None: - outfile.write(' line="%s"' % self.format_integer(self.line, input_name='line')) + outfile.write(' line="%s"' % self.format_integer( + self.line, input_name='line')) if self.bodyend is not None: - outfile.write(' bodyend="%s"' % self.format_integer(self.bodyend, input_name='bodyend')) + outfile.write(' bodyend="%s"' % self.format_integer( + self.bodyend, input_name='bodyend')) if self.bodyfile is not None: - outfile.write(' bodyfile=%s' % (self.format_string(quote_attrib(self.bodyfile).encode(ExternalEncoding), input_name='bodyfile'), )) + outfile.write(' bodyfile=%s' % (self.format_string(quote_attrib( + self.bodyfile).encode(ExternalEncoding), input_name='bodyfile'), )) if self.file is not None: - outfile.write(' file=%s' % (self.format_string(quote_attrib(self.file).encode(ExternalEncoding), input_name='file'), )) + outfile.write(' file=%s' % (self.format_string(quote_attrib( + self.file).encode(ExternalEncoding), input_name='file'), )) + def exportChildren(self, outfile, level, namespace_='', name_='locationType'): - if self.valueOf_.find('![CDATA')>-1: - value=quote_xml('%s' % self.valueOf_) - value=value.replace('![CDATA','') + if self.valueOf_.find('![CDATA') > -1: + value = quote_xml('%s' % self.valueOf_) + value = value.replace('![CDATA', '') outfile.write(value) else: outfile.write(quote_xml('%s' % self.valueOf_)) + def hasContent_(self): if ( self.valueOf_ is not None - ): + ): return True else: return False + def exportLiteral(self, outfile, level, name_='locationType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) + def exportLiteralAttributes(self, outfile, level, name_): if self.bodystart is not None: showIndent(outfile, level) @@ -4613,9 +5249,11 @@ def exportLiteralAttributes(self, outfile, level, name_): if self.file is not None: showIndent(outfile, level) outfile.write('file = %s,\n' % (self.file,)) + def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('valueOf_ = "%s",\n' % (self.valueOf_,)) + def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) @@ -4623,37 +5261,40 @@ def build(self, node_): for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) + def buildAttributes(self, attrs): if attrs.get('bodystart'): try: self.bodystart = int(attrs.get('bodystart').value) - except ValueError, exp: + except ValueError as exp: raise ValueError('Bad integer attribute (bodystart): %s' % exp) if attrs.get('line'): try: self.line = int(attrs.get('line').value) - except ValueError, exp: + except ValueError as exp: raise ValueError('Bad integer attribute (line): %s' % exp) if attrs.get('bodyend'): try: self.bodyend = int(attrs.get('bodyend').value) - except ValueError, exp: + except ValueError as exp: raise ValueError('Bad integer attribute (bodyend): %s' % exp) if attrs.get('bodyfile'): self.bodyfile = attrs.get('bodyfile').value if attrs.get('file'): self.file = attrs.get('file').value + def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.TEXT_NODE: self.valueOf_ += child_.nodeValue elif child_.nodeType == Node.CDATA_SECTION_NODE: - self.valueOf_ += '![CDATA['+child_.nodeValue+']]' + self.valueOf_ += '![CDATA[' + child_.nodeValue + ']]' # end class locationType class docSect1Type(GeneratedsSuper): subclass = None superclass = None + def __init__(self, id=None, title=None, para=None, sect2=None, internal=None, mixedclass_=None, content_=None): self.id = id if mixedclass_ is None: @@ -4664,6 +5305,7 @@ def __init__(self, id=None, title=None, para=None, sect2=None, internal=None, mi self.content_ = [] else: self.content_ = content_ + def factory(*args_, **kwargs_): if docSect1Type.subclass: return docSect1Type.subclass(*args_, **kwargs_) @@ -4684,6 +5326,7 @@ def get_internal(self): return self.internal def set_internal(self, internal): self.internal = internal def get_id(self): return self.id def set_id(self, id): self.id = id + def export(self, outfile, level, namespace_='', name_='docSect1Type', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) @@ -4691,31 +5334,38 @@ def export(self, outfile, level, namespace_='', name_='docSect1Type', namespaced outfile.write('>') self.exportChildren(outfile, level + 1, namespace_, name_) outfile.write('\n' % (namespace_, name_)) + def exportAttributes(self, outfile, level, namespace_='', name_='docSect1Type'): if self.id is not None: - outfile.write(' id=%s' % (self.format_string(quote_attrib(self.id).encode(ExternalEncoding), input_name='id'), )) + outfile.write(' id=%s' % (self.format_string(quote_attrib( + self.id).encode(ExternalEncoding), input_name='id'), )) + def exportChildren(self, outfile, level, namespace_='', name_='docSect1Type'): for item_ in self.content_: item_.export(outfile, level, item_.name, namespace_) + def hasContent_(self): if ( self.title is not None or self.para is not None or self.sect2 is not None or self.internal is not None - ): + ): return True else: return False + def exportLiteral(self, outfile, level, name_='docSect1Type'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) + def exportLiteralAttributes(self, outfile, level, name_): if self.id is not None: showIndent(outfile, level) outfile.write('id = %s,\n' % (self.id,)) + def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('content_ = [\n') @@ -4741,47 +5391,50 @@ def exportLiteralChildren(self, outfile, level, name_): item_.exportLiteral(outfile, level, name_) showIndent(outfile, level) outfile.write('],\n') + def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) + def buildAttributes(self, attrs): if attrs.get('id'): self.id = attrs.get('id').value + def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.ELEMENT_NODE and \ - nodeName_ == 'title': + nodeName_ == 'title': childobj_ = docTitleType.factory() childobj_.build(child_) obj_ = self.mixedclass_(MixedContainer.CategoryComplex, - MixedContainer.TypeNone, 'title', childobj_) + MixedContainer.TypeNone, 'title', childobj_) self.content_.append(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ - nodeName_ == 'para': + nodeName_ == 'para': childobj_ = docParaType.factory() childobj_.build(child_) obj_ = self.mixedclass_(MixedContainer.CategoryComplex, - MixedContainer.TypeNone, 'para', childobj_) + MixedContainer.TypeNone, 'para', childobj_) self.content_.append(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ - nodeName_ == 'sect2': + nodeName_ == 'sect2': childobj_ = docSect2Type.factory() childobj_.build(child_) obj_ = self.mixedclass_(MixedContainer.CategoryComplex, - MixedContainer.TypeNone, 'sect2', childobj_) + MixedContainer.TypeNone, 'sect2', childobj_) self.content_.append(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ - nodeName_ == 'internal': + nodeName_ == 'internal': childobj_ = docInternalS1Type.factory() childobj_.build(child_) obj_ = self.mixedclass_(MixedContainer.CategoryComplex, - MixedContainer.TypeNone, 'internal', childobj_) + MixedContainer.TypeNone, 'internal', childobj_) self.content_.append(obj_) elif child_.nodeType == Node.TEXT_NODE: obj_ = self.mixedclass_(MixedContainer.CategoryText, - MixedContainer.TypeNone, '', child_.nodeValue) + MixedContainer.TypeNone, '', child_.nodeValue) self.content_.append(obj_) # end class docSect1Type @@ -4789,6 +5442,7 @@ def buildChildren(self, child_, nodeName_): class docSect2Type(GeneratedsSuper): subclass = None superclass = None + def __init__(self, id=None, title=None, para=None, sect3=None, internal=None, mixedclass_=None, content_=None): self.id = id if mixedclass_ is None: @@ -4799,6 +5453,7 @@ def __init__(self, id=None, title=None, para=None, sect3=None, internal=None, mi self.content_ = [] else: self.content_ = content_ + def factory(*args_, **kwargs_): if docSect2Type.subclass: return docSect2Type.subclass(*args_, **kwargs_) @@ -4819,6 +5474,7 @@ def get_internal(self): return self.internal def set_internal(self, internal): self.internal = internal def get_id(self): return self.id def set_id(self, id): self.id = id + def export(self, outfile, level, namespace_='', name_='docSect2Type', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) @@ -4826,31 +5482,38 @@ def export(self, outfile, level, namespace_='', name_='docSect2Type', namespaced outfile.write('>') self.exportChildren(outfile, level + 1, namespace_, name_) outfile.write('\n' % (namespace_, name_)) + def exportAttributes(self, outfile, level, namespace_='', name_='docSect2Type'): if self.id is not None: - outfile.write(' id=%s' % (self.format_string(quote_attrib(self.id).encode(ExternalEncoding), input_name='id'), )) + outfile.write(' id=%s' % (self.format_string(quote_attrib( + self.id).encode(ExternalEncoding), input_name='id'), )) + def exportChildren(self, outfile, level, namespace_='', name_='docSect2Type'): for item_ in self.content_: item_.export(outfile, level, item_.name, namespace_) + def hasContent_(self): if ( self.title is not None or self.para is not None or self.sect3 is not None or self.internal is not None - ): + ): return True else: return False + def exportLiteral(self, outfile, level, name_='docSect2Type'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) + def exportLiteralAttributes(self, outfile, level, name_): if self.id is not None: showIndent(outfile, level) outfile.write('id = %s,\n' % (self.id,)) + def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('content_ = [\n') @@ -4876,47 +5539,50 @@ def exportLiteralChildren(self, outfile, level, name_): item_.exportLiteral(outfile, level, name_) showIndent(outfile, level) outfile.write('],\n') + def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) + def buildAttributes(self, attrs): if attrs.get('id'): self.id = attrs.get('id').value + def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.ELEMENT_NODE and \ - nodeName_ == 'title': + nodeName_ == 'title': childobj_ = docTitleType.factory() childobj_.build(child_) obj_ = self.mixedclass_(MixedContainer.CategoryComplex, - MixedContainer.TypeNone, 'title', childobj_) + MixedContainer.TypeNone, 'title', childobj_) self.content_.append(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ - nodeName_ == 'para': + nodeName_ == 'para': childobj_ = docParaType.factory() childobj_.build(child_) obj_ = self.mixedclass_(MixedContainer.CategoryComplex, - MixedContainer.TypeNone, 'para', childobj_) + MixedContainer.TypeNone, 'para', childobj_) self.content_.append(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ - nodeName_ == 'sect3': + nodeName_ == 'sect3': childobj_ = docSect3Type.factory() childobj_.build(child_) obj_ = self.mixedclass_(MixedContainer.CategoryComplex, - MixedContainer.TypeNone, 'sect3', childobj_) + MixedContainer.TypeNone, 'sect3', childobj_) self.content_.append(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ - nodeName_ == 'internal': + nodeName_ == 'internal': childobj_ = docInternalS2Type.factory() childobj_.build(child_) obj_ = self.mixedclass_(MixedContainer.CategoryComplex, - MixedContainer.TypeNone, 'internal', childobj_) + MixedContainer.TypeNone, 'internal', childobj_) self.content_.append(obj_) elif child_.nodeType == Node.TEXT_NODE: obj_ = self.mixedclass_(MixedContainer.CategoryText, - MixedContainer.TypeNone, '', child_.nodeValue) + MixedContainer.TypeNone, '', child_.nodeValue) self.content_.append(obj_) # end class docSect2Type @@ -4924,6 +5590,7 @@ def buildChildren(self, child_, nodeName_): class docSect3Type(GeneratedsSuper): subclass = None superclass = None + def __init__(self, id=None, title=None, para=None, sect4=None, internal=None, mixedclass_=None, content_=None): self.id = id if mixedclass_ is None: @@ -4934,6 +5601,7 @@ def __init__(self, id=None, title=None, para=None, sect4=None, internal=None, mi self.content_ = [] else: self.content_ = content_ + def factory(*args_, **kwargs_): if docSect3Type.subclass: return docSect3Type.subclass(*args_, **kwargs_) @@ -4954,6 +5622,7 @@ def get_internal(self): return self.internal def set_internal(self, internal): self.internal = internal def get_id(self): return self.id def set_id(self, id): self.id = id + def export(self, outfile, level, namespace_='', name_='docSect3Type', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) @@ -4961,31 +5630,38 @@ def export(self, outfile, level, namespace_='', name_='docSect3Type', namespaced outfile.write('>') self.exportChildren(outfile, level + 1, namespace_, name_) outfile.write('\n' % (namespace_, name_)) + def exportAttributes(self, outfile, level, namespace_='', name_='docSect3Type'): if self.id is not None: - outfile.write(' id=%s' % (self.format_string(quote_attrib(self.id).encode(ExternalEncoding), input_name='id'), )) + outfile.write(' id=%s' % (self.format_string(quote_attrib( + self.id).encode(ExternalEncoding), input_name='id'), )) + def exportChildren(self, outfile, level, namespace_='', name_='docSect3Type'): for item_ in self.content_: item_.export(outfile, level, item_.name, namespace_) + def hasContent_(self): if ( self.title is not None or self.para is not None or self.sect4 is not None or self.internal is not None - ): + ): return True else: return False + def exportLiteral(self, outfile, level, name_='docSect3Type'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) + def exportLiteralAttributes(self, outfile, level, name_): if self.id is not None: showIndent(outfile, level) outfile.write('id = %s,\n' % (self.id,)) + def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('content_ = [\n') @@ -5011,47 +5687,50 @@ def exportLiteralChildren(self, outfile, level, name_): item_.exportLiteral(outfile, level, name_) showIndent(outfile, level) outfile.write('],\n') + def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) + def buildAttributes(self, attrs): if attrs.get('id'): self.id = attrs.get('id').value + def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.ELEMENT_NODE and \ - nodeName_ == 'title': + nodeName_ == 'title': childobj_ = docTitleType.factory() childobj_.build(child_) obj_ = self.mixedclass_(MixedContainer.CategoryComplex, - MixedContainer.TypeNone, 'title', childobj_) + MixedContainer.TypeNone, 'title', childobj_) self.content_.append(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ - nodeName_ == 'para': + nodeName_ == 'para': childobj_ = docParaType.factory() childobj_.build(child_) obj_ = self.mixedclass_(MixedContainer.CategoryComplex, - MixedContainer.TypeNone, 'para', childobj_) + MixedContainer.TypeNone, 'para', childobj_) self.content_.append(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ - nodeName_ == 'sect4': + nodeName_ == 'sect4': childobj_ = docSect4Type.factory() childobj_.build(child_) obj_ = self.mixedclass_(MixedContainer.CategoryComplex, - MixedContainer.TypeNone, 'sect4', childobj_) + MixedContainer.TypeNone, 'sect4', childobj_) self.content_.append(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ - nodeName_ == 'internal': + nodeName_ == 'internal': childobj_ = docInternalS3Type.factory() childobj_.build(child_) obj_ = self.mixedclass_(MixedContainer.CategoryComplex, - MixedContainer.TypeNone, 'internal', childobj_) + MixedContainer.TypeNone, 'internal', childobj_) self.content_.append(obj_) elif child_.nodeType == Node.TEXT_NODE: obj_ = self.mixedclass_(MixedContainer.CategoryText, - MixedContainer.TypeNone, '', child_.nodeValue) + MixedContainer.TypeNone, '', child_.nodeValue) self.content_.append(obj_) # end class docSect3Type @@ -5059,6 +5738,7 @@ def buildChildren(self, child_, nodeName_): class docSect4Type(GeneratedsSuper): subclass = None superclass = None + def __init__(self, id=None, title=None, para=None, internal=None, mixedclass_=None, content_=None): self.id = id if mixedclass_ is None: @@ -5069,6 +5749,7 @@ def __init__(self, id=None, title=None, para=None, internal=None, mixedclass_=No self.content_ = [] else: self.content_ = content_ + def factory(*args_, **kwargs_): if docSect4Type.subclass: return docSect4Type.subclass(*args_, **kwargs_) @@ -5085,6 +5766,7 @@ def get_internal(self): return self.internal def set_internal(self, internal): self.internal = internal def get_id(self): return self.id def set_id(self, id): self.id = id + def export(self, outfile, level, namespace_='', name_='docSect4Type', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) @@ -5092,30 +5774,37 @@ def export(self, outfile, level, namespace_='', name_='docSect4Type', namespaced outfile.write('>') self.exportChildren(outfile, level + 1, namespace_, name_) outfile.write('\n' % (namespace_, name_)) + def exportAttributes(self, outfile, level, namespace_='', name_='docSect4Type'): if self.id is not None: - outfile.write(' id=%s' % (self.format_string(quote_attrib(self.id).encode(ExternalEncoding), input_name='id'), )) + outfile.write(' id=%s' % (self.format_string(quote_attrib( + self.id).encode(ExternalEncoding), input_name='id'), )) + def exportChildren(self, outfile, level, namespace_='', name_='docSect4Type'): for item_ in self.content_: item_.export(outfile, level, item_.name, namespace_) + def hasContent_(self): if ( self.title is not None or self.para is not None or self.internal is not None - ): + ): return True else: return False + def exportLiteral(self, outfile, level, name_='docSect4Type'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) + def exportLiteralAttributes(self, outfile, level, name_): if self.id is not None: showIndent(outfile, level) outfile.write('id = %s,\n' % (self.id,)) + def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('content_ = [\n') @@ -5135,40 +5824,43 @@ def exportLiteralChildren(self, outfile, level, name_): item_.exportLiteral(outfile, level, name_) showIndent(outfile, level) outfile.write('],\n') + def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) + def buildAttributes(self, attrs): if attrs.get('id'): self.id = attrs.get('id').value + def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.ELEMENT_NODE and \ - nodeName_ == 'title': + nodeName_ == 'title': childobj_ = docTitleType.factory() childobj_.build(child_) obj_ = self.mixedclass_(MixedContainer.CategoryComplex, - MixedContainer.TypeNone, 'title', childobj_) + MixedContainer.TypeNone, 'title', childobj_) self.content_.append(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ - nodeName_ == 'para': + nodeName_ == 'para': childobj_ = docParaType.factory() childobj_.build(child_) obj_ = self.mixedclass_(MixedContainer.CategoryComplex, - MixedContainer.TypeNone, 'para', childobj_) + MixedContainer.TypeNone, 'para', childobj_) self.content_.append(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ - nodeName_ == 'internal': + nodeName_ == 'internal': childobj_ = docInternalS4Type.factory() childobj_.build(child_) obj_ = self.mixedclass_(MixedContainer.CategoryComplex, - MixedContainer.TypeNone, 'internal', childobj_) + MixedContainer.TypeNone, 'internal', childobj_) self.content_.append(obj_) elif child_.nodeType == Node.TEXT_NODE: obj_ = self.mixedclass_(MixedContainer.CategoryText, - MixedContainer.TypeNone, '', child_.nodeValue) + MixedContainer.TypeNone, '', child_.nodeValue) self.content_.append(obj_) # end class docSect4Type @@ -5176,6 +5868,7 @@ def buildChildren(self, child_, nodeName_): class docInternalType(GeneratedsSuper): subclass = None superclass = None + def __init__(self, para=None, sect1=None, mixedclass_=None, content_=None): if mixedclass_ is None: self.mixedclass_ = MixedContainer @@ -5185,6 +5878,7 @@ def __init__(self, para=None, sect1=None, mixedclass_=None, content_=None): self.content_ = [] else: self.content_ = content_ + def factory(*args_, **kwargs_): if docInternalType.subclass: return docInternalType.subclass(*args_, **kwargs_) @@ -5199,33 +5893,41 @@ def get_sect1(self): return self.sect1 def set_sect1(self, sect1): self.sect1 = sect1 def add_sect1(self, value): self.sect1.append(value) def insert_sect1(self, index, value): self.sect1[index] = value + def export(self, outfile, level, namespace_='', name_='docInternalType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) - self.exportAttributes(outfile, level, namespace_, name_='docInternalType') + self.exportAttributes(outfile, level, namespace_, + name_='docInternalType') outfile.write('>') self.exportChildren(outfile, level + 1, namespace_, name_) outfile.write('\n' % (namespace_, name_)) + def exportAttributes(self, outfile, level, namespace_='', name_='docInternalType'): pass + def exportChildren(self, outfile, level, namespace_='', name_='docInternalType'): for item_ in self.content_: item_.export(outfile, level, item_.name, namespace_) + def hasContent_(self): if ( self.para is not None or self.sect1 is not None - ): + ): return True else: return False + def exportLiteral(self, outfile, level, name_='docInternalType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) + def exportLiteralAttributes(self, outfile, level, name_): pass + def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('content_ = [\n') @@ -5239,32 +5941,35 @@ def exportLiteralChildren(self, outfile, level, name_): item_.exportLiteral(outfile, level, name_) showIndent(outfile, level) outfile.write('],\n') + def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) + def buildAttributes(self, attrs): pass + def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.ELEMENT_NODE and \ - nodeName_ == 'para': + nodeName_ == 'para': childobj_ = docParaType.factory() childobj_.build(child_) obj_ = self.mixedclass_(MixedContainer.CategoryComplex, - MixedContainer.TypeNone, 'para', childobj_) + MixedContainer.TypeNone, 'para', childobj_) self.content_.append(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ - nodeName_ == 'sect1': + nodeName_ == 'sect1': childobj_ = docSect1Type.factory() childobj_.build(child_) obj_ = self.mixedclass_(MixedContainer.CategoryComplex, - MixedContainer.TypeNone, 'sect1', childobj_) + MixedContainer.TypeNone, 'sect1', childobj_) self.content_.append(obj_) elif child_.nodeType == Node.TEXT_NODE: obj_ = self.mixedclass_(MixedContainer.CategoryText, - MixedContainer.TypeNone, '', child_.nodeValue) + MixedContainer.TypeNone, '', child_.nodeValue) self.content_.append(obj_) # end class docInternalType @@ -5272,6 +5977,7 @@ def buildChildren(self, child_, nodeName_): class docInternalS1Type(GeneratedsSuper): subclass = None superclass = None + def __init__(self, para=None, sect2=None, mixedclass_=None, content_=None): if mixedclass_ is None: self.mixedclass_ = MixedContainer @@ -5281,6 +5987,7 @@ def __init__(self, para=None, sect2=None, mixedclass_=None, content_=None): self.content_ = [] else: self.content_ = content_ + def factory(*args_, **kwargs_): if docInternalS1Type.subclass: return docInternalS1Type.subclass(*args_, **kwargs_) @@ -5295,33 +6002,41 @@ def get_sect2(self): return self.sect2 def set_sect2(self, sect2): self.sect2 = sect2 def add_sect2(self, value): self.sect2.append(value) def insert_sect2(self, index, value): self.sect2[index] = value + def export(self, outfile, level, namespace_='', name_='docInternalS1Type', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) - self.exportAttributes(outfile, level, namespace_, name_='docInternalS1Type') + self.exportAttributes(outfile, level, namespace_, + name_='docInternalS1Type') outfile.write('>') self.exportChildren(outfile, level + 1, namespace_, name_) outfile.write('\n' % (namespace_, name_)) + def exportAttributes(self, outfile, level, namespace_='', name_='docInternalS1Type'): pass + def exportChildren(self, outfile, level, namespace_='', name_='docInternalS1Type'): for item_ in self.content_: item_.export(outfile, level, item_.name, namespace_) + def hasContent_(self): if ( self.para is not None or self.sect2 is not None - ): + ): return True else: return False + def exportLiteral(self, outfile, level, name_='docInternalS1Type'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) + def exportLiteralAttributes(self, outfile, level, name_): pass + def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('content_ = [\n') @@ -5335,32 +6050,35 @@ def exportLiteralChildren(self, outfile, level, name_): item_.exportLiteral(outfile, level, name_) showIndent(outfile, level) outfile.write('],\n') + def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) + def buildAttributes(self, attrs): pass + def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.ELEMENT_NODE and \ - nodeName_ == 'para': + nodeName_ == 'para': childobj_ = docParaType.factory() childobj_.build(child_) obj_ = self.mixedclass_(MixedContainer.CategoryComplex, - MixedContainer.TypeNone, 'para', childobj_) + MixedContainer.TypeNone, 'para', childobj_) self.content_.append(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ - nodeName_ == 'sect2': + nodeName_ == 'sect2': childobj_ = docSect2Type.factory() childobj_.build(child_) obj_ = self.mixedclass_(MixedContainer.CategoryComplex, - MixedContainer.TypeNone, 'sect2', childobj_) + MixedContainer.TypeNone, 'sect2', childobj_) self.content_.append(obj_) elif child_.nodeType == Node.TEXT_NODE: obj_ = self.mixedclass_(MixedContainer.CategoryText, - MixedContainer.TypeNone, '', child_.nodeValue) + MixedContainer.TypeNone, '', child_.nodeValue) self.content_.append(obj_) # end class docInternalS1Type @@ -5368,6 +6086,7 @@ def buildChildren(self, child_, nodeName_): class docInternalS2Type(GeneratedsSuper): subclass = None superclass = None + def __init__(self, para=None, sect3=None, mixedclass_=None, content_=None): if mixedclass_ is None: self.mixedclass_ = MixedContainer @@ -5377,6 +6096,7 @@ def __init__(self, para=None, sect3=None, mixedclass_=None, content_=None): self.content_ = [] else: self.content_ = content_ + def factory(*args_, **kwargs_): if docInternalS2Type.subclass: return docInternalS2Type.subclass(*args_, **kwargs_) @@ -5391,33 +6111,41 @@ def get_sect3(self): return self.sect3 def set_sect3(self, sect3): self.sect3 = sect3 def add_sect3(self, value): self.sect3.append(value) def insert_sect3(self, index, value): self.sect3[index] = value + def export(self, outfile, level, namespace_='', name_='docInternalS2Type', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) - self.exportAttributes(outfile, level, namespace_, name_='docInternalS2Type') + self.exportAttributes(outfile, level, namespace_, + name_='docInternalS2Type') outfile.write('>') self.exportChildren(outfile, level + 1, namespace_, name_) outfile.write('\n' % (namespace_, name_)) + def exportAttributes(self, outfile, level, namespace_='', name_='docInternalS2Type'): pass + def exportChildren(self, outfile, level, namespace_='', name_='docInternalS2Type'): for item_ in self.content_: item_.export(outfile, level, item_.name, namespace_) + def hasContent_(self): if ( self.para is not None or self.sect3 is not None - ): + ): return True else: return False + def exportLiteral(self, outfile, level, name_='docInternalS2Type'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) + def exportLiteralAttributes(self, outfile, level, name_): pass + def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('content_ = [\n') @@ -5431,32 +6159,35 @@ def exportLiteralChildren(self, outfile, level, name_): item_.exportLiteral(outfile, level, name_) showIndent(outfile, level) outfile.write('],\n') + def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) + def buildAttributes(self, attrs): pass + def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.ELEMENT_NODE and \ - nodeName_ == 'para': + nodeName_ == 'para': childobj_ = docParaType.factory() childobj_.build(child_) obj_ = self.mixedclass_(MixedContainer.CategoryComplex, - MixedContainer.TypeNone, 'para', childobj_) + MixedContainer.TypeNone, 'para', childobj_) self.content_.append(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ - nodeName_ == 'sect3': + nodeName_ == 'sect3': childobj_ = docSect3Type.factory() childobj_.build(child_) obj_ = self.mixedclass_(MixedContainer.CategoryComplex, - MixedContainer.TypeNone, 'sect3', childobj_) + MixedContainer.TypeNone, 'sect3', childobj_) self.content_.append(obj_) elif child_.nodeType == Node.TEXT_NODE: obj_ = self.mixedclass_(MixedContainer.CategoryText, - MixedContainer.TypeNone, '', child_.nodeValue) + MixedContainer.TypeNone, '', child_.nodeValue) self.content_.append(obj_) # end class docInternalS2Type @@ -5464,6 +6195,7 @@ def buildChildren(self, child_, nodeName_): class docInternalS3Type(GeneratedsSuper): subclass = None superclass = None + def __init__(self, para=None, sect3=None, mixedclass_=None, content_=None): if mixedclass_ is None: self.mixedclass_ = MixedContainer @@ -5473,6 +6205,7 @@ def __init__(self, para=None, sect3=None, mixedclass_=None, content_=None): self.content_ = [] else: self.content_ = content_ + def factory(*args_, **kwargs_): if docInternalS3Type.subclass: return docInternalS3Type.subclass(*args_, **kwargs_) @@ -5487,33 +6220,41 @@ def get_sect3(self): return self.sect3 def set_sect3(self, sect3): self.sect3 = sect3 def add_sect3(self, value): self.sect3.append(value) def insert_sect3(self, index, value): self.sect3[index] = value + def export(self, outfile, level, namespace_='', name_='docInternalS3Type', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) - self.exportAttributes(outfile, level, namespace_, name_='docInternalS3Type') + self.exportAttributes(outfile, level, namespace_, + name_='docInternalS3Type') outfile.write('>') self.exportChildren(outfile, level + 1, namespace_, name_) outfile.write('\n' % (namespace_, name_)) + def exportAttributes(self, outfile, level, namespace_='', name_='docInternalS3Type'): pass + def exportChildren(self, outfile, level, namespace_='', name_='docInternalS3Type'): for item_ in self.content_: item_.export(outfile, level, item_.name, namespace_) + def hasContent_(self): if ( self.para is not None or self.sect3 is not None - ): + ): return True else: return False + def exportLiteral(self, outfile, level, name_='docInternalS3Type'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) + def exportLiteralAttributes(self, outfile, level, name_): pass + def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('content_ = [\n') @@ -5527,32 +6268,35 @@ def exportLiteralChildren(self, outfile, level, name_): item_.exportLiteral(outfile, level, name_) showIndent(outfile, level) outfile.write('],\n') + def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) + def buildAttributes(self, attrs): pass + def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.ELEMENT_NODE and \ - nodeName_ == 'para': + nodeName_ == 'para': childobj_ = docParaType.factory() childobj_.build(child_) obj_ = self.mixedclass_(MixedContainer.CategoryComplex, - MixedContainer.TypeNone, 'para', childobj_) + MixedContainer.TypeNone, 'para', childobj_) self.content_.append(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ - nodeName_ == 'sect3': + nodeName_ == 'sect3': childobj_ = docSect4Type.factory() childobj_.build(child_) obj_ = self.mixedclass_(MixedContainer.CategoryComplex, - MixedContainer.TypeNone, 'sect3', childobj_) + MixedContainer.TypeNone, 'sect3', childobj_) self.content_.append(obj_) elif child_.nodeType == Node.TEXT_NODE: obj_ = self.mixedclass_(MixedContainer.CategoryText, - MixedContainer.TypeNone, '', child_.nodeValue) + MixedContainer.TypeNone, '', child_.nodeValue) self.content_.append(obj_) # end class docInternalS3Type @@ -5560,6 +6304,7 @@ def buildChildren(self, child_, nodeName_): class docInternalS4Type(GeneratedsSuper): subclass = None superclass = None + def __init__(self, para=None, mixedclass_=None, content_=None): if mixedclass_ is None: self.mixedclass_ = MixedContainer @@ -5569,6 +6314,7 @@ def __init__(self, para=None, mixedclass_=None, content_=None): self.content_ = [] else: self.content_ = content_ + def factory(*args_, **kwargs_): if docInternalS4Type.subclass: return docInternalS4Type.subclass(*args_, **kwargs_) @@ -5579,32 +6325,40 @@ def get_para(self): return self.para def set_para(self, para): self.para = para def add_para(self, value): self.para.append(value) def insert_para(self, index, value): self.para[index] = value + def export(self, outfile, level, namespace_='', name_='docInternalS4Type', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) - self.exportAttributes(outfile, level, namespace_, name_='docInternalS4Type') + self.exportAttributes(outfile, level, namespace_, + name_='docInternalS4Type') outfile.write('>') self.exportChildren(outfile, level + 1, namespace_, name_) outfile.write('\n' % (namespace_, name_)) + def exportAttributes(self, outfile, level, namespace_='', name_='docInternalS4Type'): pass + def exportChildren(self, outfile, level, namespace_='', name_='docInternalS4Type'): for item_ in self.content_: item_.export(outfile, level, item_.name, namespace_) + def hasContent_(self): if ( self.para is not None - ): + ): return True else: return False + def exportLiteral(self, outfile, level, name_='docInternalS4Type'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) + def exportLiteralAttributes(self, outfile, level, name_): pass + def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('content_ = [\n') @@ -5612,25 +6366,28 @@ def exportLiteralChildren(self, outfile, level, name_): item_.exportLiteral(outfile, level, name_) showIndent(outfile, level) outfile.write('],\n') + def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) + def buildAttributes(self, attrs): pass + def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.ELEMENT_NODE and \ - nodeName_ == 'para': + nodeName_ == 'para': childobj_ = docParaType.factory() childobj_.build(child_) obj_ = self.mixedclass_(MixedContainer.CategoryComplex, - MixedContainer.TypeNone, 'para', childobj_) + MixedContainer.TypeNone, 'para', childobj_) self.content_.append(obj_) elif child_.nodeType == Node.TEXT_NODE: obj_ = self.mixedclass_(MixedContainer.CategoryText, - MixedContainer.TypeNone, '', child_.nodeValue) + MixedContainer.TypeNone, '', child_.nodeValue) self.content_.append(obj_) # end class docInternalS4Type @@ -5638,6 +6395,7 @@ def buildChildren(self, child_, nodeName_): class docTitleType(GeneratedsSuper): subclass = None superclass = None + def __init__(self, valueOf_='', mixedclass_=None, content_=None): if mixedclass_ is None: self.mixedclass_ = MixedContainer @@ -5647,6 +6405,7 @@ def __init__(self, valueOf_='', mixedclass_=None, content_=None): self.content_ = [] else: self.content_ = content_ + def factory(*args_, **kwargs_): if docTitleType.subclass: return docTitleType.subclass(*args_, **kwargs_) @@ -5655,6 +6414,7 @@ def factory(*args_, **kwargs_): factory = staticmethod(factory) def getValueOf_(self): return self.valueOf_ def setValueOf_(self, valueOf_): self.valueOf_ = valueOf_ + def export(self, outfile, level, namespace_='', name_='docTitleType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) @@ -5662,33 +6422,40 @@ def export(self, outfile, level, namespace_='', name_='docTitleType', namespaced outfile.write('>') self.exportChildren(outfile, level + 1, namespace_, name_) outfile.write('\n' % (namespace_, name_)) + def exportAttributes(self, outfile, level, namespace_='', name_='docTitleType'): pass + def exportChildren(self, outfile, level, namespace_='', name_='docTitleType'): - if self.valueOf_.find('![CDATA')>-1: - value=quote_xml('%s' % self.valueOf_) - value=value.replace('![CDATA','') + if self.valueOf_.find('![CDATA') > -1: + value = quote_xml('%s' % self.valueOf_) + value = value.replace('![CDATA', '') outfile.write(value) else: outfile.write(quote_xml('%s' % self.valueOf_)) + def hasContent_(self): if ( self.valueOf_ is not None - ): + ): return True else: return False + def exportLiteral(self, outfile, level, name_='docTitleType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) + def exportLiteralAttributes(self, outfile, level, name_): pass + def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('valueOf_ = "%s",\n' % (self.valueOf_,)) + def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) @@ -5696,23 +6463,26 @@ def build(self, node_): for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) + def buildAttributes(self, attrs): pass + def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.TEXT_NODE: obj_ = self.mixedclass_(MixedContainer.CategoryText, - MixedContainer.TypeNone, '', child_.nodeValue) + MixedContainer.TypeNone, '', child_.nodeValue) self.content_.append(obj_) if child_.nodeType == Node.TEXT_NODE: self.valueOf_ += child_.nodeValue elif child_.nodeType == Node.CDATA_SECTION_NODE: - self.valueOf_ += '![CDATA['+child_.nodeValue+']]' + self.valueOf_ += '![CDATA[' + child_.nodeValue + ']]' # end class docTitleType class docParaType(GeneratedsSuper): subclass = None superclass = None + def __init__(self, valueOf_='', mixedclass_=None, content_=None): if mixedclass_ is None: self.mixedclass_ = MixedContainer @@ -5722,6 +6492,7 @@ def __init__(self, valueOf_='', mixedclass_=None, content_=None): self.content_ = [] else: self.content_ = content_ + def factory(*args_, **kwargs_): if docParaType.subclass: return docParaType.subclass(*args_, **kwargs_) @@ -5730,6 +6501,7 @@ def factory(*args_, **kwargs_): factory = staticmethod(factory) def getValueOf_(self): return self.valueOf_ def setValueOf_(self, valueOf_): self.valueOf_ = valueOf_ + def export(self, outfile, level, namespace_='', name_='docParaType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) @@ -5737,33 +6509,40 @@ def export(self, outfile, level, namespace_='', name_='docParaType', namespacede outfile.write('>') self.exportChildren(outfile, level + 1, namespace_, name_) outfile.write('\n' % (namespace_, name_)) + def exportAttributes(self, outfile, level, namespace_='', name_='docParaType'): pass + def exportChildren(self, outfile, level, namespace_='', name_='docParaType'): - if self.valueOf_.find('![CDATA')>-1: - value=quote_xml('%s' % self.valueOf_) - value=value.replace('![CDATA','') + if self.valueOf_.find('![CDATA') > -1: + value = quote_xml('%s' % self.valueOf_) + value = value.replace('![CDATA', '') outfile.write(value) else: outfile.write(quote_xml('%s' % self.valueOf_)) + def hasContent_(self): if ( self.valueOf_ is not None - ): + ): return True else: return False + def exportLiteral(self, outfile, level, name_='docParaType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) + def exportLiteralAttributes(self, outfile, level, name_): pass + def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('valueOf_ = "%s",\n' % (self.valueOf_,)) + def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) @@ -5771,23 +6550,26 @@ def build(self, node_): for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) + def buildAttributes(self, attrs): pass + def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.TEXT_NODE: obj_ = self.mixedclass_(MixedContainer.CategoryText, - MixedContainer.TypeNone, '', child_.nodeValue) + MixedContainer.TypeNone, '', child_.nodeValue) self.content_.append(obj_) if child_.nodeType == Node.TEXT_NODE: self.valueOf_ += child_.nodeValue elif child_.nodeType == Node.CDATA_SECTION_NODE: - self.valueOf_ += '![CDATA['+child_.nodeValue+']]' + self.valueOf_ += '![CDATA[' + child_.nodeValue + ']]' # end class docParaType class docMarkupType(GeneratedsSuper): subclass = None superclass = None + def __init__(self, valueOf_='', mixedclass_=None, content_=None): if mixedclass_ is None: self.mixedclass_ = MixedContainer @@ -5797,6 +6579,7 @@ def __init__(self, valueOf_='', mixedclass_=None, content_=None): self.content_ = [] else: self.content_ = content_ + def factory(*args_, **kwargs_): if docMarkupType.subclass: return docMarkupType.subclass(*args_, **kwargs_) @@ -5805,40 +6588,49 @@ def factory(*args_, **kwargs_): factory = staticmethod(factory) def getValueOf_(self): return self.valueOf_ def setValueOf_(self, valueOf_): self.valueOf_ = valueOf_ + def export(self, outfile, level, namespace_='', name_='docMarkupType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) - self.exportAttributes(outfile, level, namespace_, name_='docMarkupType') + self.exportAttributes(outfile, level, namespace_, + name_='docMarkupType') outfile.write('>') self.exportChildren(outfile, level + 1, namespace_, name_) outfile.write('\n' % (namespace_, name_)) + def exportAttributes(self, outfile, level, namespace_='', name_='docMarkupType'): pass + def exportChildren(self, outfile, level, namespace_='', name_='docMarkupType'): - if self.valueOf_.find('![CDATA')>-1: - value=quote_xml('%s' % self.valueOf_) - value=value.replace('![CDATA','') + if self.valueOf_.find('![CDATA') > -1: + value = quote_xml('%s' % self.valueOf_) + value = value.replace('![CDATA', '') outfile.write(value) else: outfile.write(quote_xml('%s' % self.valueOf_)) + def hasContent_(self): if ( self.valueOf_ is not None - ): + ): return True else: return False + def exportLiteral(self, outfile, level, name_='docMarkupType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) + def exportLiteralAttributes(self, outfile, level, name_): pass + def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('valueOf_ = "%s",\n' % (self.valueOf_,)) + def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) @@ -5846,23 +6638,26 @@ def build(self, node_): for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) + def buildAttributes(self, attrs): pass + def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.TEXT_NODE: obj_ = self.mixedclass_(MixedContainer.CategoryText, - MixedContainer.TypeNone, '', child_.nodeValue) + MixedContainer.TypeNone, '', child_.nodeValue) self.content_.append(obj_) if child_.nodeType == Node.TEXT_NODE: self.valueOf_ += child_.nodeValue elif child_.nodeType == Node.CDATA_SECTION_NODE: - self.valueOf_ += '![CDATA['+child_.nodeValue+']]' + self.valueOf_ += '![CDATA[' + child_.nodeValue + ']]' # end class docMarkupType class docURLLink(GeneratedsSuper): subclass = None superclass = None + def __init__(self, url=None, valueOf_='', mixedclass_=None, content_=None): self.url = url if mixedclass_ is None: @@ -5873,6 +6668,7 @@ def __init__(self, url=None, valueOf_='', mixedclass_=None, content_=None): self.content_ = [] else: self.content_ = content_ + def factory(*args_, **kwargs_): if docURLLink.subclass: return docURLLink.subclass(*args_, **kwargs_) @@ -5883,6 +6679,7 @@ def get_url(self): return self.url def set_url(self, url): self.url = url def getValueOf_(self): return self.valueOf_ def setValueOf_(self, valueOf_): self.valueOf_ = valueOf_ + def export(self, outfile, level, namespace_='', name_='docURLLink', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) @@ -5890,36 +6687,44 @@ def export(self, outfile, level, namespace_='', name_='docURLLink', namespacedef outfile.write('>') self.exportChildren(outfile, level + 1, namespace_, name_) outfile.write('\n' % (namespace_, name_)) + def exportAttributes(self, outfile, level, namespace_='', name_='docURLLink'): if self.url is not None: - outfile.write(' url=%s' % (self.format_string(quote_attrib(self.url).encode(ExternalEncoding), input_name='url'), )) + outfile.write(' url=%s' % (self.format_string(quote_attrib( + self.url).encode(ExternalEncoding), input_name='url'), )) + def exportChildren(self, outfile, level, namespace_='', name_='docURLLink'): - if self.valueOf_.find('![CDATA')>-1: - value=quote_xml('%s' % self.valueOf_) - value=value.replace('![CDATA','') + if self.valueOf_.find('![CDATA') > -1: + value = quote_xml('%s' % self.valueOf_) + value = value.replace('![CDATA', '') outfile.write(value) else: outfile.write(quote_xml('%s' % self.valueOf_)) + def hasContent_(self): if ( self.valueOf_ is not None - ): + ): return True else: return False + def exportLiteral(self, outfile, level, name_='docURLLink'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) + def exportLiteralAttributes(self, outfile, level, name_): if self.url is not None: showIndent(outfile, level) outfile.write('url = %s,\n' % (self.url,)) + def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('valueOf_ = "%s",\n' % (self.valueOf_,)) + def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) @@ -5927,24 +6732,27 @@ def build(self, node_): for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) + def buildAttributes(self, attrs): if attrs.get('url'): self.url = attrs.get('url').value + def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.TEXT_NODE: obj_ = self.mixedclass_(MixedContainer.CategoryText, - MixedContainer.TypeNone, '', child_.nodeValue) + MixedContainer.TypeNone, '', child_.nodeValue) self.content_.append(obj_) if child_.nodeType == Node.TEXT_NODE: self.valueOf_ += child_.nodeValue elif child_.nodeType == Node.CDATA_SECTION_NODE: - self.valueOf_ += '![CDATA['+child_.nodeValue+']]' + self.valueOf_ += '![CDATA[' + child_.nodeValue + ']]' # end class docURLLink class docAnchorType(GeneratedsSuper): subclass = None superclass = None + def __init__(self, id=None, valueOf_='', mixedclass_=None, content_=None): self.id = id if mixedclass_ is None: @@ -5955,6 +6763,7 @@ def __init__(self, id=None, valueOf_='', mixedclass_=None, content_=None): self.content_ = [] else: self.content_ = content_ + def factory(*args_, **kwargs_): if docAnchorType.subclass: return docAnchorType.subclass(*args_, **kwargs_) @@ -5965,43 +6774,53 @@ def get_id(self): return self.id def set_id(self, id): self.id = id def getValueOf_(self): return self.valueOf_ def setValueOf_(self, valueOf_): self.valueOf_ = valueOf_ + def export(self, outfile, level, namespace_='', name_='docAnchorType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) - self.exportAttributes(outfile, level, namespace_, name_='docAnchorType') + self.exportAttributes(outfile, level, namespace_, + name_='docAnchorType') outfile.write('>') self.exportChildren(outfile, level + 1, namespace_, name_) outfile.write('\n' % (namespace_, name_)) + def exportAttributes(self, outfile, level, namespace_='', name_='docAnchorType'): if self.id is not None: - outfile.write(' id=%s' % (self.format_string(quote_attrib(self.id).encode(ExternalEncoding), input_name='id'), )) + outfile.write(' id=%s' % (self.format_string(quote_attrib( + self.id).encode(ExternalEncoding), input_name='id'), )) + def exportChildren(self, outfile, level, namespace_='', name_='docAnchorType'): - if self.valueOf_.find('![CDATA')>-1: - value=quote_xml('%s' % self.valueOf_) - value=value.replace('![CDATA','') + if self.valueOf_.find('![CDATA') > -1: + value = quote_xml('%s' % self.valueOf_) + value = value.replace('![CDATA', '') outfile.write(value) else: outfile.write(quote_xml('%s' % self.valueOf_)) + def hasContent_(self): if ( self.valueOf_ is not None - ): + ): return True else: return False + def exportLiteral(self, outfile, level, name_='docAnchorType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) + def exportLiteralAttributes(self, outfile, level, name_): if self.id is not None: showIndent(outfile, level) outfile.write('id = %s,\n' % (self.id,)) + def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('valueOf_ = "%s",\n' % (self.valueOf_,)) + def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) @@ -6009,24 +6828,27 @@ def build(self, node_): for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) + def buildAttributes(self, attrs): if attrs.get('id'): self.id = attrs.get('id').value + def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.TEXT_NODE: obj_ = self.mixedclass_(MixedContainer.CategoryText, - MixedContainer.TypeNone, '', child_.nodeValue) + MixedContainer.TypeNone, '', child_.nodeValue) self.content_.append(obj_) if child_.nodeType == Node.TEXT_NODE: self.valueOf_ += child_.nodeValue elif child_.nodeType == Node.CDATA_SECTION_NODE: - self.valueOf_ += '![CDATA['+child_.nodeValue+']]' + self.valueOf_ += '![CDATA[' + child_.nodeValue + ']]' # end class docAnchorType class docFormulaType(GeneratedsSuper): subclass = None superclass = None + def __init__(self, id=None, valueOf_='', mixedclass_=None, content_=None): self.id = id if mixedclass_ is None: @@ -6037,6 +6859,7 @@ def __init__(self, id=None, valueOf_='', mixedclass_=None, content_=None): self.content_ = [] else: self.content_ = content_ + def factory(*args_, **kwargs_): if docFormulaType.subclass: return docFormulaType.subclass(*args_, **kwargs_) @@ -6047,43 +6870,53 @@ def get_id(self): return self.id def set_id(self, id): self.id = id def getValueOf_(self): return self.valueOf_ def setValueOf_(self, valueOf_): self.valueOf_ = valueOf_ + def export(self, outfile, level, namespace_='', name_='docFormulaType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) - self.exportAttributes(outfile, level, namespace_, name_='docFormulaType') + self.exportAttributes(outfile, level, namespace_, + name_='docFormulaType') outfile.write('>') self.exportChildren(outfile, level + 1, namespace_, name_) outfile.write('\n' % (namespace_, name_)) + def exportAttributes(self, outfile, level, namespace_='', name_='docFormulaType'): if self.id is not None: - outfile.write(' id=%s' % (self.format_string(quote_attrib(self.id).encode(ExternalEncoding), input_name='id'), )) + outfile.write(' id=%s' % (self.format_string(quote_attrib( + self.id).encode(ExternalEncoding), input_name='id'), )) + def exportChildren(self, outfile, level, namespace_='', name_='docFormulaType'): - if self.valueOf_.find('![CDATA')>-1: - value=quote_xml('%s' % self.valueOf_) - value=value.replace('![CDATA','') + if self.valueOf_.find('![CDATA') > -1: + value = quote_xml('%s' % self.valueOf_) + value = value.replace('![CDATA', '') outfile.write(value) else: outfile.write(quote_xml('%s' % self.valueOf_)) + def hasContent_(self): if ( self.valueOf_ is not None - ): + ): return True else: return False + def exportLiteral(self, outfile, level, name_='docFormulaType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) + def exportLiteralAttributes(self, outfile, level, name_): if self.id is not None: showIndent(outfile, level) outfile.write('id = %s,\n' % (self.id,)) + def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('valueOf_ = "%s",\n' % (self.valueOf_,)) + def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) @@ -6091,27 +6924,31 @@ def build(self, node_): for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) + def buildAttributes(self, attrs): if attrs.get('id'): self.id = attrs.get('id').value + def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.TEXT_NODE: obj_ = self.mixedclass_(MixedContainer.CategoryText, - MixedContainer.TypeNone, '', child_.nodeValue) + MixedContainer.TypeNone, '', child_.nodeValue) self.content_.append(obj_) if child_.nodeType == Node.TEXT_NODE: self.valueOf_ += child_.nodeValue elif child_.nodeType == Node.CDATA_SECTION_NODE: - self.valueOf_ += '![CDATA['+child_.nodeValue+']]' + self.valueOf_ += '![CDATA[' + child_.nodeValue + ']]' # end class docFormulaType class docIndexEntryType(GeneratedsSuper): subclass = None superclass = None + def __init__(self, primaryie=None, secondaryie=None): self.primaryie = primaryie self.secondaryie = secondaryie + def factory(*args_, **kwargs_): if docIndexEntryType.subclass: return docIndexEntryType.subclass(*args_, **kwargs_) @@ -6122,10 +6959,12 @@ def get_primaryie(self): return self.primaryie def set_primaryie(self, primaryie): self.primaryie = primaryie def get_secondaryie(self): return self.secondaryie def set_secondaryie(self, secondaryie): self.secondaryie = secondaryie + def export(self, outfile, level, namespace_='', name_='docIndexEntryType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) - self.exportAttributes(outfile, level, namespace_, name_='docIndexEntryType') + self.exportAttributes(outfile, level, namespace_, + name_='docIndexEntryType') if self.hasContent_(): outfile.write('>\n') self.exportChildren(outfile, level + 1, namespace_, name_) @@ -6133,52 +6972,65 @@ def export(self, outfile, level, namespace_='', name_='docIndexEntryType', names outfile.write('\n' % (namespace_, name_)) else: outfile.write(' />\n') + def exportAttributes(self, outfile, level, namespace_='', name_='docIndexEntryType'): pass + def exportChildren(self, outfile, level, namespace_='', name_='docIndexEntryType'): if self.primaryie is not None: showIndent(outfile, level) - outfile.write('<%sprimaryie>%s\n' % (namespace_, self.format_string(quote_xml(self.primaryie).encode(ExternalEncoding), input_name='primaryie'), namespace_)) + outfile.write('<%sprimaryie>%s\n' % (namespace_, self.format_string( + quote_xml(self.primaryie).encode(ExternalEncoding), input_name='primaryie'), namespace_)) if self.secondaryie is not None: showIndent(outfile, level) - outfile.write('<%ssecondaryie>%s\n' % (namespace_, self.format_string(quote_xml(self.secondaryie).encode(ExternalEncoding), input_name='secondaryie'), namespace_)) + outfile.write('<%ssecondaryie>%s\n' % (namespace_, self.format_string( + quote_xml(self.secondaryie).encode(ExternalEncoding), input_name='secondaryie'), namespace_)) + def hasContent_(self): if ( self.primaryie is not None or self.secondaryie is not None - ): + ): return True else: return False + def exportLiteral(self, outfile, level, name_='docIndexEntryType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) + def exportLiteralAttributes(self, outfile, level, name_): pass + def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) - outfile.write('primaryie=%s,\n' % quote_python(self.primaryie).encode(ExternalEncoding)) + outfile.write('primaryie=%s,\n' % quote_python( + self.primaryie).encode(ExternalEncoding)) showIndent(outfile, level) - outfile.write('secondaryie=%s,\n' % quote_python(self.secondaryie).encode(ExternalEncoding)) + outfile.write('secondaryie=%s,\n' % quote_python( + self.secondaryie).encode(ExternalEncoding)) + def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) + def buildAttributes(self, attrs): pass + def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.ELEMENT_NODE and \ - nodeName_ == 'primaryie': + nodeName_ == 'primaryie': primaryie_ = '' for text__content_ in child_.childNodes: primaryie_ += text__content_.nodeValue self.primaryie = primaryie_ elif child_.nodeType == Node.ELEMENT_NODE and \ - nodeName_ == 'secondaryie': + nodeName_ == 'secondaryie': secondaryie_ = '' for text__content_ in child_.childNodes: secondaryie_ += text__content_.nodeValue @@ -6189,11 +7041,13 @@ def buildChildren(self, child_, nodeName_): class docListType(GeneratedsSuper): subclass = None superclass = None + def __init__(self, listitem=None): if listitem is None: self.listitem = [] else: self.listitem = listitem + def factory(*args_, **kwargs_): if docListType.subclass: return docListType.subclass(*args_, **kwargs_) @@ -6204,6 +7058,7 @@ def get_listitem(self): return self.listitem def set_listitem(self, listitem): self.listitem = listitem def add_listitem(self, value): self.listitem.append(value) def insert_listitem(self, index, value): self.listitem[index] = value + def export(self, outfile, level, namespace_='', name_='docListType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) @@ -6215,25 +7070,31 @@ def export(self, outfile, level, namespace_='', name_='docListType', namespacede outfile.write('\n' % (namespace_, name_)) else: outfile.write(' />\n') + def exportAttributes(self, outfile, level, namespace_='', name_='docListType'): pass + def exportChildren(self, outfile, level, namespace_='', name_='docListType'): for listitem_ in self.listitem: listitem_.export(outfile, level, namespace_, name_='listitem') + def hasContent_(self): if ( self.listitem is not None - ): + ): return True else: return False + def exportLiteral(self, outfile, level, name_='docListType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) + def exportLiteralAttributes(self, outfile, level, name_): pass + def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('listitem=[\n') @@ -6247,17 +7108,20 @@ def exportLiteralChildren(self, outfile, level, name_): level -= 1 showIndent(outfile, level) outfile.write('],\n') + def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) + def buildAttributes(self, attrs): pass + def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.ELEMENT_NODE and \ - nodeName_ == 'listitem': + nodeName_ == 'listitem': obj_ = docListItemType.factory() obj_.build(child_) self.listitem.append(obj_) @@ -6267,11 +7131,13 @@ def buildChildren(self, child_, nodeName_): class docListItemType(GeneratedsSuper): subclass = None superclass = None + def __init__(self, para=None): if para is None: self.para = [] else: self.para = para + def factory(*args_, **kwargs_): if docListItemType.subclass: return docListItemType.subclass(*args_, **kwargs_) @@ -6282,10 +7148,12 @@ def get_para(self): return self.para def set_para(self, para): self.para = para def add_para(self, value): self.para.append(value) def insert_para(self, index, value): self.para[index] = value + def export(self, outfile, level, namespace_='', name_='docListItemType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) - self.exportAttributes(outfile, level, namespace_, name_='docListItemType') + self.exportAttributes(outfile, level, namespace_, + name_='docListItemType') if self.hasContent_(): outfile.write('>\n') self.exportChildren(outfile, level + 1, namespace_, name_) @@ -6293,25 +7161,31 @@ def export(self, outfile, level, namespace_='', name_='docListItemType', namespa outfile.write('\n' % (namespace_, name_)) else: outfile.write(' />\n') + def exportAttributes(self, outfile, level, namespace_='', name_='docListItemType'): pass + def exportChildren(self, outfile, level, namespace_='', name_='docListItemType'): for para_ in self.para: para_.export(outfile, level, namespace_, name_='para') + def hasContent_(self): if ( self.para is not None - ): + ): return True else: return False + def exportLiteral(self, outfile, level, name_='docListItemType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) + def exportLiteralAttributes(self, outfile, level, name_): pass + def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('para=[\n') @@ -6325,17 +7199,20 @@ def exportLiteralChildren(self, outfile, level, name_): level -= 1 showIndent(outfile, level) outfile.write('],\n') + def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) + def buildAttributes(self, attrs): pass + def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.ELEMENT_NODE and \ - nodeName_ == 'para': + nodeName_ == 'para': obj_ = docParaType.factory() obj_.build(child_) self.para.append(obj_) @@ -6345,6 +7222,7 @@ def buildChildren(self, child_, nodeName_): class docSimpleSectType(GeneratedsSuper): subclass = None superclass = None + def __init__(self, kind=None, title=None, para=None): self.kind = kind self.title = title @@ -6352,6 +7230,7 @@ def __init__(self, kind=None, title=None, para=None): self.para = [] else: self.para = para + def factory(*args_, **kwargs_): if docSimpleSectType.subclass: return docSimpleSectType.subclass(*args_, **kwargs_) @@ -6366,10 +7245,12 @@ def add_para(self, value): self.para.append(value) def insert_para(self, index, value): self.para[index] = value def get_kind(self): return self.kind def set_kind(self, kind): self.kind = kind + def export(self, outfile, level, namespace_='', name_='docSimpleSectType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) - self.exportAttributes(outfile, level, namespace_, name_='docSimpleSectType') + self.exportAttributes(outfile, level, namespace_, + name_='docSimpleSectType') if self.hasContent_(): outfile.write('>\n') self.exportChildren(outfile, level + 1, namespace_, name_) @@ -6377,31 +7258,37 @@ def export(self, outfile, level, namespace_='', name_='docSimpleSectType', names outfile.write('\n' % (namespace_, name_)) else: outfile.write(' />\n') + def exportAttributes(self, outfile, level, namespace_='', name_='docSimpleSectType'): if self.kind is not None: outfile.write(' kind=%s' % (quote_attrib(self.kind), )) + def exportChildren(self, outfile, level, namespace_='', name_='docSimpleSectType'): if self.title: self.title.export(outfile, level, namespace_, name_='title') for para_ in self.para: para_.export(outfile, level, namespace_, name_='para') + def hasContent_(self): if ( self.title is not None or self.para is not None - ): + ): return True else: return False + def exportLiteral(self, outfile, level, name_='docSimpleSectType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) + def exportLiteralAttributes(self, outfile, level, name_): if self.kind is not None: showIndent(outfile, level) outfile.write('kind = "%s",\n' % (self.kind,)) + def exportLiteralChildren(self, outfile, level, name_): if self.title: showIndent(outfile, level) @@ -6421,23 +7308,26 @@ def exportLiteralChildren(self, outfile, level, name_): level -= 1 showIndent(outfile, level) outfile.write('],\n') + def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) + def buildAttributes(self, attrs): if attrs.get('kind'): self.kind = attrs.get('kind').value + def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.ELEMENT_NODE and \ - nodeName_ == 'title': + nodeName_ == 'title': obj_ = docTitleType.factory() obj_.build(child_) self.set_title(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ - nodeName_ == 'para': + nodeName_ == 'para': obj_ = docParaType.factory() obj_.build(child_) self.para.append(obj_) @@ -6447,8 +7337,10 @@ def buildChildren(self, child_, nodeName_): class docVarListEntryType(GeneratedsSuper): subclass = None superclass = None + def __init__(self, term=None): self.term = term + def factory(*args_, **kwargs_): if docVarListEntryType.subclass: return docVarListEntryType.subclass(*args_, **kwargs_) @@ -6457,10 +7349,12 @@ def factory(*args_, **kwargs_): factory = staticmethod(factory) def get_term(self): return self.term def set_term(self, term): self.term = term + def export(self, outfile, level, namespace_='', name_='docVarListEntryType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) - self.exportAttributes(outfile, level, namespace_, name_='docVarListEntryType') + self.exportAttributes(outfile, level, namespace_, + name_='docVarListEntryType') if self.hasContent_(): outfile.write('>\n') self.exportChildren(outfile, level + 1, namespace_, name_) @@ -6468,25 +7362,31 @@ def export(self, outfile, level, namespace_='', name_='docVarListEntryType', nam outfile.write('\n' % (namespace_, name_)) else: outfile.write(' />\n') + def exportAttributes(self, outfile, level, namespace_='', name_='docVarListEntryType'): pass + def exportChildren(self, outfile, level, namespace_='', name_='docVarListEntryType'): if self.term: self.term.export(outfile, level, namespace_, name_='term', ) + def hasContent_(self): if ( self.term is not None - ): + ): return True else: return False + def exportLiteral(self, outfile, level, name_='docVarListEntryType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) + def exportLiteralAttributes(self, outfile, level, name_): pass + def exportLiteralChildren(self, outfile, level, name_): if self.term: showIndent(outfile, level) @@ -6494,17 +7394,20 @@ def exportLiteralChildren(self, outfile, level, name_): self.term.exportLiteral(outfile, level, name_='term') showIndent(outfile, level) outfile.write('),\n') + def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) + def buildAttributes(self, attrs): pass + def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.ELEMENT_NODE and \ - nodeName_ == 'term': + nodeName_ == 'term': obj_ = docTitleType.factory() obj_.build(child_) self.set_term(obj_) @@ -6514,8 +7417,10 @@ def buildChildren(self, child_, nodeName_): class docVariableListType(GeneratedsSuper): subclass = None superclass = None + def __init__(self, valueOf_=''): self.valueOf_ = valueOf_ + def factory(*args_, **kwargs_): if docVariableListType.subclass: return docVariableListType.subclass(*args_, **kwargs_) @@ -6524,10 +7429,12 @@ def factory(*args_, **kwargs_): factory = staticmethod(factory) def getValueOf_(self): return self.valueOf_ def setValueOf_(self, valueOf_): self.valueOf_ = valueOf_ + def export(self, outfile, level, namespace_='', name_='docVariableListType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) - self.exportAttributes(outfile, level, namespace_, name_='docVariableListType') + self.exportAttributes(outfile, level, namespace_, + name_='docVariableListType') if self.hasContent_(): outfile.write('>\n') self.exportChildren(outfile, level + 1, namespace_, name_) @@ -6535,33 +7442,40 @@ def export(self, outfile, level, namespace_='', name_='docVariableListType', nam outfile.write('\n' % (namespace_, name_)) else: outfile.write(' />\n') + def exportAttributes(self, outfile, level, namespace_='', name_='docVariableListType'): pass + def exportChildren(self, outfile, level, namespace_='', name_='docVariableListType'): - if self.valueOf_.find('![CDATA')>-1: - value=quote_xml('%s' % self.valueOf_) - value=value.replace('![CDATA','') + if self.valueOf_.find('![CDATA') > -1: + value = quote_xml('%s' % self.valueOf_) + value = value.replace('![CDATA', '') outfile.write(value) else: outfile.write(quote_xml('%s' % self.valueOf_)) + def hasContent_(self): if ( self.valueOf_ is not None - ): + ): return True else: return False + def exportLiteral(self, outfile, level, name_='docVariableListType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) + def exportLiteralAttributes(self, outfile, level, name_): pass + def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('valueOf_ = "%s",\n' % (self.valueOf_,)) + def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) @@ -6569,19 +7483,22 @@ def build(self, node_): for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) + def buildAttributes(self, attrs): pass + def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.TEXT_NODE: self.valueOf_ += child_.nodeValue elif child_.nodeType == Node.CDATA_SECTION_NODE: - self.valueOf_ += '![CDATA['+child_.nodeValue+']]' + self.valueOf_ += '![CDATA[' + child_.nodeValue + ']]' # end class docVariableListType class docRefTextType(GeneratedsSuper): subclass = None superclass = None + def __init__(self, refid=None, kindref=None, external=None, valueOf_='', mixedclass_=None, content_=None): self.refid = refid self.kindref = kindref @@ -6594,6 +7511,7 @@ def __init__(self, refid=None, kindref=None, external=None, valueOf_='', mixedcl self.content_ = [] else: self.content_ = content_ + def factory(*args_, **kwargs_): if docRefTextType.subclass: return docRefTextType.subclass(*args_, **kwargs_) @@ -6608,40 +7526,49 @@ def get_external(self): return self.external def set_external(self, external): self.external = external def getValueOf_(self): return self.valueOf_ def setValueOf_(self, valueOf_): self.valueOf_ = valueOf_ + def export(self, outfile, level, namespace_='', name_='docRefTextType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) - self.exportAttributes(outfile, level, namespace_, name_='docRefTextType') + self.exportAttributes(outfile, level, namespace_, + name_='docRefTextType') outfile.write('>') self.exportChildren(outfile, level + 1, namespace_, name_) outfile.write('\n' % (namespace_, name_)) + def exportAttributes(self, outfile, level, namespace_='', name_='docRefTextType'): if self.refid is not None: - outfile.write(' refid=%s' % (self.format_string(quote_attrib(self.refid).encode(ExternalEncoding), input_name='refid'), )) + outfile.write(' refid=%s' % (self.format_string(quote_attrib( + self.refid).encode(ExternalEncoding), input_name='refid'), )) if self.kindref is not None: outfile.write(' kindref=%s' % (quote_attrib(self.kindref), )) if self.external is not None: - outfile.write(' external=%s' % (self.format_string(quote_attrib(self.external).encode(ExternalEncoding), input_name='external'), )) + outfile.write(' external=%s' % (self.format_string(quote_attrib( + self.external).encode(ExternalEncoding), input_name='external'), )) + def exportChildren(self, outfile, level, namespace_='', name_='docRefTextType'): - if self.valueOf_.find('![CDATA')>-1: - value=quote_xml('%s' % self.valueOf_) - value=value.replace('![CDATA','') + if self.valueOf_.find('![CDATA') > -1: + value = quote_xml('%s' % self.valueOf_) + value = value.replace('![CDATA', '') outfile.write(value) else: outfile.write(quote_xml('%s' % self.valueOf_)) + def hasContent_(self): if ( self.valueOf_ is not None - ): + ): return True else: return False + def exportLiteral(self, outfile, level, name_='docRefTextType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) + def exportLiteralAttributes(self, outfile, level, name_): if self.refid is not None: showIndent(outfile, level) @@ -6652,9 +7579,11 @@ def exportLiteralAttributes(self, outfile, level, name_): if self.external is not None: showIndent(outfile, level) outfile.write('external = %s,\n' % (self.external,)) + def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('valueOf_ = "%s",\n' % (self.valueOf_,)) + def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) @@ -6662,6 +7591,7 @@ def build(self, node_): for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) + def buildAttributes(self, attrs): if attrs.get('refid'): self.refid = attrs.get('refid').value @@ -6669,21 +7599,23 @@ def buildAttributes(self, attrs): self.kindref = attrs.get('kindref').value if attrs.get('external'): self.external = attrs.get('external').value + def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.TEXT_NODE: obj_ = self.mixedclass_(MixedContainer.CategoryText, - MixedContainer.TypeNone, '', child_.nodeValue) + MixedContainer.TypeNone, '', child_.nodeValue) self.content_.append(obj_) if child_.nodeType == Node.TEXT_NODE: self.valueOf_ += child_.nodeValue elif child_.nodeType == Node.CDATA_SECTION_NODE: - self.valueOf_ += '![CDATA['+child_.nodeValue+']]' + self.valueOf_ += '![CDATA[' + child_.nodeValue + ']]' # end class docRefTextType class docTableType(GeneratedsSuper): subclass = None superclass = None + def __init__(self, rows=None, cols=None, row=None, caption=None): self.rows = rows self.cols = cols @@ -6692,6 +7624,7 @@ def __init__(self, rows=None, cols=None, row=None, caption=None): else: self.row = row self.caption = caption + def factory(*args_, **kwargs_): if docTableType.subclass: return docTableType.subclass(*args_, **kwargs_) @@ -6708,6 +7641,7 @@ def get_rows(self): return self.rows def set_rows(self, rows): self.rows = rows def get_cols(self): return self.cols def set_cols(self, cols): self.cols = cols + def export(self, outfile, level, namespace_='', name_='docTableType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) @@ -6719,29 +7653,36 @@ def export(self, outfile, level, namespace_='', name_='docTableType', namespaced outfile.write('\n' % (namespace_, name_)) else: outfile.write(' />\n') + def exportAttributes(self, outfile, level, namespace_='', name_='docTableType'): if self.rows is not None: - outfile.write(' rows="%s"' % self.format_integer(self.rows, input_name='rows')) + outfile.write(' rows="%s"' % self.format_integer( + self.rows, input_name='rows')) if self.cols is not None: - outfile.write(' cols="%s"' % self.format_integer(self.cols, input_name='cols')) + outfile.write(' cols="%s"' % self.format_integer( + self.cols, input_name='cols')) + def exportChildren(self, outfile, level, namespace_='', name_='docTableType'): for row_ in self.row: row_.export(outfile, level, namespace_, name_='row') if self.caption: self.caption.export(outfile, level, namespace_, name_='caption') + def hasContent_(self): if ( self.row is not None or self.caption is not None - ): + ): return True else: return False + def exportLiteral(self, outfile, level, name_='docTableType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) + def exportLiteralAttributes(self, outfile, level, name_): if self.rows is not None: showIndent(outfile, level) @@ -6749,6 +7690,7 @@ def exportLiteralAttributes(self, outfile, level, name_): if self.cols is not None: showIndent(outfile, level) outfile.write('cols = %s,\n' % (self.cols,)) + def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('row=[\n') @@ -6768,31 +7710,34 @@ def exportLiteralChildren(self, outfile, level, name_): self.caption.exportLiteral(outfile, level, name_='caption') showIndent(outfile, level) outfile.write('),\n') + def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) + def buildAttributes(self, attrs): if attrs.get('rows'): try: self.rows = int(attrs.get('rows').value) - except ValueError, exp: + except ValueError as exp: raise ValueError('Bad integer attribute (rows): %s' % exp) if attrs.get('cols'): try: self.cols = int(attrs.get('cols').value) - except ValueError, exp: + except ValueError as exp: raise ValueError('Bad integer attribute (cols): %s' % exp) + def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.ELEMENT_NODE and \ - nodeName_ == 'row': + nodeName_ == 'row': obj_ = docRowType.factory() obj_.build(child_) self.row.append(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ - nodeName_ == 'caption': + nodeName_ == 'caption': obj_ = docCaptionType.factory() obj_.build(child_) self.set_caption(obj_) @@ -6802,11 +7747,13 @@ def buildChildren(self, child_, nodeName_): class docRowType(GeneratedsSuper): subclass = None superclass = None + def __init__(self, entry=None): if entry is None: self.entry = [] else: self.entry = entry + def factory(*args_, **kwargs_): if docRowType.subclass: return docRowType.subclass(*args_, **kwargs_) @@ -6817,6 +7764,7 @@ def get_entry(self): return self.entry def set_entry(self, entry): self.entry = entry def add_entry(self, value): self.entry.append(value) def insert_entry(self, index, value): self.entry[index] = value + def export(self, outfile, level, namespace_='', name_='docRowType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) @@ -6828,25 +7776,31 @@ def export(self, outfile, level, namespace_='', name_='docRowType', namespacedef outfile.write('\n' % (namespace_, name_)) else: outfile.write(' />\n') + def exportAttributes(self, outfile, level, namespace_='', name_='docRowType'): pass + def exportChildren(self, outfile, level, namespace_='', name_='docRowType'): for entry_ in self.entry: entry_.export(outfile, level, namespace_, name_='entry') + def hasContent_(self): if ( self.entry is not None - ): + ): return True else: return False + def exportLiteral(self, outfile, level, name_='docRowType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) + def exportLiteralAttributes(self, outfile, level, name_): pass + def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('entry=[\n') @@ -6860,17 +7814,20 @@ def exportLiteralChildren(self, outfile, level, name_): level -= 1 showIndent(outfile, level) outfile.write('],\n') + def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) + def buildAttributes(self, attrs): pass + def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.ELEMENT_NODE and \ - nodeName_ == 'entry': + nodeName_ == 'entry': obj_ = docEntryType.factory() obj_.build(child_) self.entry.append(obj_) @@ -6880,12 +7837,14 @@ def buildChildren(self, child_, nodeName_): class docEntryType(GeneratedsSuper): subclass = None superclass = None + def __init__(self, thead=None, para=None): self.thead = thead if para is None: self.para = [] else: self.para = para + def factory(*args_, **kwargs_): if docEntryType.subclass: return docEntryType.subclass(*args_, **kwargs_) @@ -6898,6 +7857,7 @@ def add_para(self, value): self.para.append(value) def insert_para(self, index, value): self.para[index] = value def get_thead(self): return self.thead def set_thead(self, thead): self.thead = thead + def export(self, outfile, level, namespace_='', name_='docEntryType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) @@ -6909,28 +7869,34 @@ def export(self, outfile, level, namespace_='', name_='docEntryType', namespaced outfile.write('\n' % (namespace_, name_)) else: outfile.write(' />\n') + def exportAttributes(self, outfile, level, namespace_='', name_='docEntryType'): if self.thead is not None: outfile.write(' thead=%s' % (quote_attrib(self.thead), )) + def exportChildren(self, outfile, level, namespace_='', name_='docEntryType'): for para_ in self.para: para_.export(outfile, level, namespace_, name_='para') + def hasContent_(self): if ( self.para is not None - ): + ): return True else: return False + def exportLiteral(self, outfile, level, name_='docEntryType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) + def exportLiteralAttributes(self, outfile, level, name_): if self.thead is not None: showIndent(outfile, level) outfile.write('thead = "%s",\n' % (self.thead,)) + def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('para=[\n') @@ -6944,18 +7910,21 @@ def exportLiteralChildren(self, outfile, level, name_): level -= 1 showIndent(outfile, level) outfile.write('],\n') + def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) + def buildAttributes(self, attrs): if attrs.get('thead'): self.thead = attrs.get('thead').value + def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.ELEMENT_NODE and \ - nodeName_ == 'para': + nodeName_ == 'para': obj_ = docParaType.factory() obj_.build(child_) self.para.append(obj_) @@ -6965,6 +7934,7 @@ def buildChildren(self, child_, nodeName_): class docCaptionType(GeneratedsSuper): subclass = None superclass = None + def __init__(self, valueOf_='', mixedclass_=None, content_=None): if mixedclass_ is None: self.mixedclass_ = MixedContainer @@ -6974,6 +7944,7 @@ def __init__(self, valueOf_='', mixedclass_=None, content_=None): self.content_ = [] else: self.content_ = content_ + def factory(*args_, **kwargs_): if docCaptionType.subclass: return docCaptionType.subclass(*args_, **kwargs_) @@ -6982,40 +7953,49 @@ def factory(*args_, **kwargs_): factory = staticmethod(factory) def getValueOf_(self): return self.valueOf_ def setValueOf_(self, valueOf_): self.valueOf_ = valueOf_ + def export(self, outfile, level, namespace_='', name_='docCaptionType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) - self.exportAttributes(outfile, level, namespace_, name_='docCaptionType') + self.exportAttributes(outfile, level, namespace_, + name_='docCaptionType') outfile.write('>') self.exportChildren(outfile, level + 1, namespace_, name_) outfile.write('\n' % (namespace_, name_)) + def exportAttributes(self, outfile, level, namespace_='', name_='docCaptionType'): pass + def exportChildren(self, outfile, level, namespace_='', name_='docCaptionType'): - if self.valueOf_.find('![CDATA')>-1: - value=quote_xml('%s' % self.valueOf_) - value=value.replace('![CDATA','') + if self.valueOf_.find('![CDATA') > -1: + value = quote_xml('%s' % self.valueOf_) + value = value.replace('![CDATA', '') outfile.write(value) else: outfile.write(quote_xml('%s' % self.valueOf_)) + def hasContent_(self): if ( self.valueOf_ is not None - ): + ): return True else: return False + def exportLiteral(self, outfile, level, name_='docCaptionType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) + def exportLiteralAttributes(self, outfile, level, name_): pass + def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('valueOf_ = "%s",\n' % (self.valueOf_,)) + def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) @@ -7023,23 +8003,26 @@ def build(self, node_): for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) + def buildAttributes(self, attrs): pass + def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.TEXT_NODE: obj_ = self.mixedclass_(MixedContainer.CategoryText, - MixedContainer.TypeNone, '', child_.nodeValue) + MixedContainer.TypeNone, '', child_.nodeValue) self.content_.append(obj_) if child_.nodeType == Node.TEXT_NODE: self.valueOf_ += child_.nodeValue elif child_.nodeType == Node.CDATA_SECTION_NODE: - self.valueOf_ += '![CDATA['+child_.nodeValue+']]' + self.valueOf_ += '![CDATA[' + child_.nodeValue + ']]' # end class docCaptionType class docHeadingType(GeneratedsSuper): subclass = None superclass = None + def __init__(self, level=None, valueOf_='', mixedclass_=None, content_=None): self.level = level if mixedclass_ is None: @@ -7050,6 +8033,7 @@ def __init__(self, level=None, valueOf_='', mixedclass_=None, content_=None): self.content_ = [] else: self.content_ = content_ + def factory(*args_, **kwargs_): if docHeadingType.subclass: return docHeadingType.subclass(*args_, **kwargs_) @@ -7060,43 +8044,53 @@ def get_level(self): return self.level def set_level(self, level): self.level = level def getValueOf_(self): return self.valueOf_ def setValueOf_(self, valueOf_): self.valueOf_ = valueOf_ + def export(self, outfile, level, namespace_='', name_='docHeadingType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) - self.exportAttributes(outfile, level, namespace_, name_='docHeadingType') + self.exportAttributes(outfile, level, namespace_, + name_='docHeadingType') outfile.write('>') self.exportChildren(outfile, level + 1, namespace_, name_) outfile.write('\n' % (namespace_, name_)) + def exportAttributes(self, outfile, level, namespace_='', name_='docHeadingType'): if self.level is not None: - outfile.write(' level="%s"' % self.format_integer(self.level, input_name='level')) + outfile.write(' level="%s"' % self.format_integer( + self.level, input_name='level')) + def exportChildren(self, outfile, level, namespace_='', name_='docHeadingType'): - if self.valueOf_.find('![CDATA')>-1: - value=quote_xml('%s' % self.valueOf_) - value=value.replace('![CDATA','') + if self.valueOf_.find('![CDATA') > -1: + value = quote_xml('%s' % self.valueOf_) + value = value.replace('![CDATA', '') outfile.write(value) else: outfile.write(quote_xml('%s' % self.valueOf_)) + def hasContent_(self): if ( self.valueOf_ is not None - ): + ): return True else: return False + def exportLiteral(self, outfile, level, name_='docHeadingType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) + def exportLiteralAttributes(self, outfile, level, name_): if self.level is not None: showIndent(outfile, level) outfile.write('level = %s,\n' % (self.level,)) + def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('valueOf_ = "%s",\n' % (self.valueOf_,)) + def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) @@ -7104,27 +8098,30 @@ def build(self, node_): for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) + def buildAttributes(self, attrs): if attrs.get('level'): try: self.level = int(attrs.get('level').value) - except ValueError, exp: + except ValueError as exp: raise ValueError('Bad integer attribute (level): %s' % exp) + def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.TEXT_NODE: obj_ = self.mixedclass_(MixedContainer.CategoryText, - MixedContainer.TypeNone, '', child_.nodeValue) + MixedContainer.TypeNone, '', child_.nodeValue) self.content_.append(obj_) if child_.nodeType == Node.TEXT_NODE: self.valueOf_ += child_.nodeValue elif child_.nodeType == Node.CDATA_SECTION_NODE: - self.valueOf_ += '![CDATA['+child_.nodeValue+']]' + self.valueOf_ += '![CDATA[' + child_.nodeValue + ']]' # end class docHeadingType class docImageType(GeneratedsSuper): subclass = None superclass = None + def __init__(self, width=None, type_=None, name=None, height=None, valueOf_='', mixedclass_=None, content_=None): self.width = width self.type_ = type_ @@ -7138,6 +8135,7 @@ def __init__(self, width=None, type_=None, name=None, height=None, valueOf_='', self.content_ = [] else: self.content_ = content_ + def factory(*args_, **kwargs_): if docImageType.subclass: return docImageType.subclass(*args_, **kwargs_) @@ -7154,6 +8152,7 @@ def get_height(self): return self.height def set_height(self, height): self.height = height def getValueOf_(self): return self.valueOf_ def setValueOf_(self, valueOf_): self.valueOf_ = valueOf_ + def export(self, outfile, level, namespace_='', name_='docImageType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) @@ -7161,35 +8160,43 @@ def export(self, outfile, level, namespace_='', name_='docImageType', namespaced outfile.write('>') self.exportChildren(outfile, level + 1, namespace_, name_) outfile.write('\n' % (namespace_, name_)) + def exportAttributes(self, outfile, level, namespace_='', name_='docImageType'): if self.width is not None: - outfile.write(' width=%s' % (self.format_string(quote_attrib(self.width).encode(ExternalEncoding), input_name='width'), )) + outfile.write(' width=%s' % (self.format_string(quote_attrib( + self.width).encode(ExternalEncoding), input_name='width'), )) if self.type_ is not None: outfile.write(' type=%s' % (quote_attrib(self.type_), )) if self.name is not None: - outfile.write(' name=%s' % (self.format_string(quote_attrib(self.name).encode(ExternalEncoding), input_name='name'), )) + outfile.write(' name=%s' % (self.format_string(quote_attrib( + self.name).encode(ExternalEncoding), input_name='name'), )) if self.height is not None: - outfile.write(' height=%s' % (self.format_string(quote_attrib(self.height).encode(ExternalEncoding), input_name='height'), )) + outfile.write(' height=%s' % (self.format_string(quote_attrib( + self.height).encode(ExternalEncoding), input_name='height'), )) + def exportChildren(self, outfile, level, namespace_='', name_='docImageType'): - if self.valueOf_.find('![CDATA')>-1: - value=quote_xml('%s' % self.valueOf_) - value=value.replace('![CDATA','') + if self.valueOf_.find('![CDATA') > -1: + value = quote_xml('%s' % self.valueOf_) + value = value.replace('![CDATA', '') outfile.write(value) else: outfile.write(quote_xml('%s' % self.valueOf_)) + def hasContent_(self): if ( self.valueOf_ is not None - ): + ): return True else: return False + def exportLiteral(self, outfile, level, name_='docImageType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) + def exportLiteralAttributes(self, outfile, level, name_): if self.width is not None: showIndent(outfile, level) @@ -7203,9 +8210,11 @@ def exportLiteralAttributes(self, outfile, level, name_): if self.height is not None: showIndent(outfile, level) outfile.write('height = %s,\n' % (self.height,)) + def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('valueOf_ = "%s",\n' % (self.valueOf_,)) + def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) @@ -7213,6 +8222,7 @@ def build(self, node_): for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) + def buildAttributes(self, attrs): if attrs.get('width'): self.width = attrs.get('width').value @@ -7222,21 +8232,23 @@ def buildAttributes(self, attrs): self.name = attrs.get('name').value if attrs.get('height'): self.height = attrs.get('height').value + def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.TEXT_NODE: obj_ = self.mixedclass_(MixedContainer.CategoryText, - MixedContainer.TypeNone, '', child_.nodeValue) + MixedContainer.TypeNone, '', child_.nodeValue) self.content_.append(obj_) if child_.nodeType == Node.TEXT_NODE: self.valueOf_ += child_.nodeValue elif child_.nodeType == Node.CDATA_SECTION_NODE: - self.valueOf_ += '![CDATA['+child_.nodeValue+']]' + self.valueOf_ += '![CDATA[' + child_.nodeValue + ']]' # end class docImageType class docDotFileType(GeneratedsSuper): subclass = None superclass = None + def __init__(self, name=None, valueOf_='', mixedclass_=None, content_=None): self.name = name if mixedclass_ is None: @@ -7247,6 +8259,7 @@ def __init__(self, name=None, valueOf_='', mixedclass_=None, content_=None): self.content_ = [] else: self.content_ = content_ + def factory(*args_, **kwargs_): if docDotFileType.subclass: return docDotFileType.subclass(*args_, **kwargs_) @@ -7257,43 +8270,53 @@ def get_name(self): return self.name def set_name(self, name): self.name = name def getValueOf_(self): return self.valueOf_ def setValueOf_(self, valueOf_): self.valueOf_ = valueOf_ + def export(self, outfile, level, namespace_='', name_='docDotFileType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) - self.exportAttributes(outfile, level, namespace_, name_='docDotFileType') + self.exportAttributes(outfile, level, namespace_, + name_='docDotFileType') outfile.write('>') self.exportChildren(outfile, level + 1, namespace_, name_) outfile.write('\n' % (namespace_, name_)) + def exportAttributes(self, outfile, level, namespace_='', name_='docDotFileType'): if self.name is not None: - outfile.write(' name=%s' % (self.format_string(quote_attrib(self.name).encode(ExternalEncoding), input_name='name'), )) + outfile.write(' name=%s' % (self.format_string(quote_attrib( + self.name).encode(ExternalEncoding), input_name='name'), )) + def exportChildren(self, outfile, level, namespace_='', name_='docDotFileType'): - if self.valueOf_.find('![CDATA')>-1: - value=quote_xml('%s' % self.valueOf_) - value=value.replace('![CDATA','') + if self.valueOf_.find('![CDATA') > -1: + value = quote_xml('%s' % self.valueOf_) + value = value.replace('![CDATA', '') outfile.write(value) else: outfile.write(quote_xml('%s' % self.valueOf_)) + def hasContent_(self): if ( self.valueOf_ is not None - ): + ): return True else: return False + def exportLiteral(self, outfile, level, name_='docDotFileType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) + def exportLiteralAttributes(self, outfile, level, name_): if self.name is not None: showIndent(outfile, level) outfile.write('name = %s,\n' % (self.name,)) + def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('valueOf_ = "%s",\n' % (self.valueOf_,)) + def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) @@ -7301,24 +8324,27 @@ def build(self, node_): for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) + def buildAttributes(self, attrs): if attrs.get('name'): self.name = attrs.get('name').value + def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.TEXT_NODE: obj_ = self.mixedclass_(MixedContainer.CategoryText, - MixedContainer.TypeNone, '', child_.nodeValue) + MixedContainer.TypeNone, '', child_.nodeValue) self.content_.append(obj_) if child_.nodeType == Node.TEXT_NODE: self.valueOf_ += child_.nodeValue elif child_.nodeType == Node.CDATA_SECTION_NODE: - self.valueOf_ += '![CDATA['+child_.nodeValue+']]' + self.valueOf_ += '![CDATA[' + child_.nodeValue + ']]' # end class docDotFileType class docTocItemType(GeneratedsSuper): subclass = None superclass = None + def __init__(self, id=None, valueOf_='', mixedclass_=None, content_=None): self.id = id if mixedclass_ is None: @@ -7329,6 +8355,7 @@ def __init__(self, id=None, valueOf_='', mixedclass_=None, content_=None): self.content_ = [] else: self.content_ = content_ + def factory(*args_, **kwargs_): if docTocItemType.subclass: return docTocItemType.subclass(*args_, **kwargs_) @@ -7339,43 +8366,53 @@ def get_id(self): return self.id def set_id(self, id): self.id = id def getValueOf_(self): return self.valueOf_ def setValueOf_(self, valueOf_): self.valueOf_ = valueOf_ + def export(self, outfile, level, namespace_='', name_='docTocItemType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) - self.exportAttributes(outfile, level, namespace_, name_='docTocItemType') + self.exportAttributes(outfile, level, namespace_, + name_='docTocItemType') outfile.write('>') self.exportChildren(outfile, level + 1, namespace_, name_) outfile.write('\n' % (namespace_, name_)) + def exportAttributes(self, outfile, level, namespace_='', name_='docTocItemType'): if self.id is not None: - outfile.write(' id=%s' % (self.format_string(quote_attrib(self.id).encode(ExternalEncoding), input_name='id'), )) + outfile.write(' id=%s' % (self.format_string(quote_attrib( + self.id).encode(ExternalEncoding), input_name='id'), )) + def exportChildren(self, outfile, level, namespace_='', name_='docTocItemType'): - if self.valueOf_.find('![CDATA')>-1: - value=quote_xml('%s' % self.valueOf_) - value=value.replace('![CDATA','') + if self.valueOf_.find('![CDATA') > -1: + value = quote_xml('%s' % self.valueOf_) + value = value.replace('![CDATA', '') outfile.write(value) else: outfile.write(quote_xml('%s' % self.valueOf_)) + def hasContent_(self): if ( self.valueOf_ is not None - ): + ): return True else: return False + def exportLiteral(self, outfile, level, name_='docTocItemType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) + def exportLiteralAttributes(self, outfile, level, name_): if self.id is not None: showIndent(outfile, level) outfile.write('id = %s,\n' % (self.id,)) + def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('valueOf_ = "%s",\n' % (self.valueOf_,)) + def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) @@ -7383,29 +8420,33 @@ def build(self, node_): for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) + def buildAttributes(self, attrs): if attrs.get('id'): self.id = attrs.get('id').value + def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.TEXT_NODE: obj_ = self.mixedclass_(MixedContainer.CategoryText, - MixedContainer.TypeNone, '', child_.nodeValue) + MixedContainer.TypeNone, '', child_.nodeValue) self.content_.append(obj_) if child_.nodeType == Node.TEXT_NODE: self.valueOf_ += child_.nodeValue elif child_.nodeType == Node.CDATA_SECTION_NODE: - self.valueOf_ += '![CDATA['+child_.nodeValue+']]' + self.valueOf_ += '![CDATA[' + child_.nodeValue + ']]' # end class docTocItemType class docTocListType(GeneratedsSuper): subclass = None superclass = None + def __init__(self, tocitem=None): if tocitem is None: self.tocitem = [] else: self.tocitem = tocitem + def factory(*args_, **kwargs_): if docTocListType.subclass: return docTocListType.subclass(*args_, **kwargs_) @@ -7416,10 +8457,12 @@ def get_tocitem(self): return self.tocitem def set_tocitem(self, tocitem): self.tocitem = tocitem def add_tocitem(self, value): self.tocitem.append(value) def insert_tocitem(self, index, value): self.tocitem[index] = value + def export(self, outfile, level, namespace_='', name_='docTocListType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) - self.exportAttributes(outfile, level, namespace_, name_='docTocListType') + self.exportAttributes(outfile, level, namespace_, + name_='docTocListType') if self.hasContent_(): outfile.write('>\n') self.exportChildren(outfile, level + 1, namespace_, name_) @@ -7427,25 +8470,31 @@ def export(self, outfile, level, namespace_='', name_='docTocListType', namespac outfile.write('\n' % (namespace_, name_)) else: outfile.write(' />\n') + def exportAttributes(self, outfile, level, namespace_='', name_='docTocListType'): pass + def exportChildren(self, outfile, level, namespace_='', name_='docTocListType'): for tocitem_ in self.tocitem: tocitem_.export(outfile, level, namespace_, name_='tocitem') + def hasContent_(self): if ( self.tocitem is not None - ): + ): return True else: return False + def exportLiteral(self, outfile, level, name_='docTocListType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) + def exportLiteralAttributes(self, outfile, level, name_): pass + def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('tocitem=[\n') @@ -7459,17 +8508,20 @@ def exportLiteralChildren(self, outfile, level, name_): level -= 1 showIndent(outfile, level) outfile.write('],\n') + def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) + def buildAttributes(self, attrs): pass + def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.ELEMENT_NODE and \ - nodeName_ == 'tocitem': + nodeName_ == 'tocitem': obj_ = docTocItemType.factory() obj_.build(child_) self.tocitem.append(obj_) @@ -7479,12 +8531,14 @@ def buildChildren(self, child_, nodeName_): class docLanguageType(GeneratedsSuper): subclass = None superclass = None + def __init__(self, langid=None, para=None): self.langid = langid if para is None: self.para = [] else: self.para = para + def factory(*args_, **kwargs_): if docLanguageType.subclass: return docLanguageType.subclass(*args_, **kwargs_) @@ -7497,10 +8551,12 @@ def add_para(self, value): self.para.append(value) def insert_para(self, index, value): self.para[index] = value def get_langid(self): return self.langid def set_langid(self, langid): self.langid = langid + def export(self, outfile, level, namespace_='', name_='docLanguageType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) - self.exportAttributes(outfile, level, namespace_, name_='docLanguageType') + self.exportAttributes(outfile, level, namespace_, + name_='docLanguageType') if self.hasContent_(): outfile.write('>\n') self.exportChildren(outfile, level + 1, namespace_, name_) @@ -7508,28 +8564,35 @@ def export(self, outfile, level, namespace_='', name_='docLanguageType', namespa outfile.write('\n' % (namespace_, name_)) else: outfile.write(' />\n') + def exportAttributes(self, outfile, level, namespace_='', name_='docLanguageType'): if self.langid is not None: - outfile.write(' langid=%s' % (self.format_string(quote_attrib(self.langid).encode(ExternalEncoding), input_name='langid'), )) + outfile.write(' langid=%s' % (self.format_string(quote_attrib( + self.langid).encode(ExternalEncoding), input_name='langid'), )) + def exportChildren(self, outfile, level, namespace_='', name_='docLanguageType'): for para_ in self.para: para_.export(outfile, level, namespace_, name_='para') + def hasContent_(self): if ( self.para is not None - ): + ): return True else: return False + def exportLiteral(self, outfile, level, name_='docLanguageType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) + def exportLiteralAttributes(self, outfile, level, name_): if self.langid is not None: showIndent(outfile, level) outfile.write('langid = %s,\n' % (self.langid,)) + def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('para=[\n') @@ -7543,18 +8606,21 @@ def exportLiteralChildren(self, outfile, level, name_): level -= 1 showIndent(outfile, level) outfile.write('],\n') + def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) + def buildAttributes(self, attrs): if attrs.get('langid'): self.langid = attrs.get('langid').value + def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.ELEMENT_NODE and \ - nodeName_ == 'para': + nodeName_ == 'para': obj_ = docParaType.factory() obj_.build(child_) self.para.append(obj_) @@ -7564,12 +8630,14 @@ def buildChildren(self, child_, nodeName_): class docParamListType(GeneratedsSuper): subclass = None superclass = None + def __init__(self, kind=None, parameteritem=None): self.kind = kind if parameteritem is None: self.parameteritem = [] else: self.parameteritem = parameteritem + def factory(*args_, **kwargs_): if docParamListType.subclass: return docParamListType.subclass(*args_, **kwargs_) @@ -7577,15 +8645,21 @@ def factory(*args_, **kwargs_): return docParamListType(*args_, **kwargs_) factory = staticmethod(factory) def get_parameteritem(self): return self.parameteritem - def set_parameteritem(self, parameteritem): self.parameteritem = parameteritem + def set_parameteritem( + self, parameteritem): self.parameteritem = parameteritem + def add_parameteritem(self, value): self.parameteritem.append(value) - def insert_parameteritem(self, index, value): self.parameteritem[index] = value + def insert_parameteritem( + self, index, value): self.parameteritem[index] = value + def get_kind(self): return self.kind def set_kind(self, kind): self.kind = kind + def export(self, outfile, level, namespace_='', name_='docParamListType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) - self.exportAttributes(outfile, level, namespace_, name_='docParamListType') + self.exportAttributes(outfile, level, namespace_, + name_='docParamListType') if self.hasContent_(): outfile.write('>\n') self.exportChildren(outfile, level + 1, namespace_, name_) @@ -7593,28 +8667,35 @@ def export(self, outfile, level, namespace_='', name_='docParamListType', namesp outfile.write('\n' % (namespace_, name_)) else: outfile.write(' />\n') + def exportAttributes(self, outfile, level, namespace_='', name_='docParamListType'): if self.kind is not None: outfile.write(' kind=%s' % (quote_attrib(self.kind), )) + def exportChildren(self, outfile, level, namespace_='', name_='docParamListType'): for parameteritem_ in self.parameteritem: - parameteritem_.export(outfile, level, namespace_, name_='parameteritem') + parameteritem_.export( + outfile, level, namespace_, name_='parameteritem') + def hasContent_(self): if ( self.parameteritem is not None - ): + ): return True else: return False + def exportLiteral(self, outfile, level, name_='docParamListType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) + def exportLiteralAttributes(self, outfile, level, name_): if self.kind is not None: showIndent(outfile, level) outfile.write('kind = "%s",\n' % (self.kind,)) + def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('parameteritem=[\n') @@ -7628,18 +8709,21 @@ def exportLiteralChildren(self, outfile, level, name_): level -= 1 showIndent(outfile, level) outfile.write('],\n') + def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) + def buildAttributes(self, attrs): if attrs.get('kind'): self.kind = attrs.get('kind').value + def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.ELEMENT_NODE and \ - nodeName_ == 'parameteritem': + nodeName_ == 'parameteritem': obj_ = docParamListItem.factory() obj_.build(child_) self.parameteritem.append(obj_) @@ -7649,12 +8733,14 @@ def buildChildren(self, child_, nodeName_): class docParamListItem(GeneratedsSuper): subclass = None superclass = None + def __init__(self, parameternamelist=None, parameterdescription=None): if parameternamelist is None: self.parameternamelist = [] else: self.parameternamelist = parameternamelist self.parameterdescription = parameterdescription + def factory(*args_, **kwargs_): if docParamListItem.subclass: return docParamListItem.subclass(*args_, **kwargs_) @@ -7662,15 +8748,25 @@ def factory(*args_, **kwargs_): return docParamListItem(*args_, **kwargs_) factory = staticmethod(factory) def get_parameternamelist(self): return self.parameternamelist - def set_parameternamelist(self, parameternamelist): self.parameternamelist = parameternamelist - def add_parameternamelist(self, value): self.parameternamelist.append(value) - def insert_parameternamelist(self, index, value): self.parameternamelist[index] = value + + def set_parameternamelist( + self, parameternamelist): self.parameternamelist = parameternamelist + + def add_parameternamelist( + self, value): self.parameternamelist.append(value) + def insert_parameternamelist( + self, index, value): self.parameternamelist[index] = value + def get_parameterdescription(self): return self.parameterdescription - def set_parameterdescription(self, parameterdescription): self.parameterdescription = parameterdescription + + def set_parameterdescription( + self, parameterdescription): self.parameterdescription = parameterdescription + def export(self, outfile, level, namespace_='', name_='docParamListItem', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) - self.exportAttributes(outfile, level, namespace_, name_='docParamListItem') + self.exportAttributes(outfile, level, namespace_, + name_='docParamListItem') if self.hasContent_(): outfile.write('>\n') self.exportChildren(outfile, level + 1, namespace_, name_) @@ -7678,28 +8774,36 @@ def export(self, outfile, level, namespace_='', name_='docParamListItem', namesp outfile.write('\n' % (namespace_, name_)) else: outfile.write(' />\n') + def exportAttributes(self, outfile, level, namespace_='', name_='docParamListItem'): pass + def exportChildren(self, outfile, level, namespace_='', name_='docParamListItem'): for parameternamelist_ in self.parameternamelist: - parameternamelist_.export(outfile, level, namespace_, name_='parameternamelist') + parameternamelist_.export( + outfile, level, namespace_, name_='parameternamelist') if self.parameterdescription: - self.parameterdescription.export(outfile, level, namespace_, name_='parameterdescription', ) + self.parameterdescription.export( + outfile, level, namespace_, name_='parameterdescription', ) + def hasContent_(self): if ( self.parameternamelist is not None or self.parameterdescription is not None - ): + ): return True else: return False + def exportLiteral(self, outfile, level, name_='docParamListItem'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) + def exportLiteralAttributes(self, outfile, level, name_): pass + def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('parameternamelist=[\n') @@ -7707,7 +8811,8 @@ def exportLiteralChildren(self, outfile, level, name_): for parameternamelist in self.parameternamelist: showIndent(outfile, level) outfile.write('model_.parameternamelist(\n') - parameternamelist.exportLiteral(outfile, level, name_='parameternamelist') + parameternamelist.exportLiteral( + outfile, level, name_='parameternamelist') showIndent(outfile, level) outfile.write('),\n') level -= 1 @@ -7716,25 +8821,29 @@ def exportLiteralChildren(self, outfile, level, name_): if self.parameterdescription: showIndent(outfile, level) outfile.write('parameterdescription=model_.descriptionType(\n') - self.parameterdescription.exportLiteral(outfile, level, name_='parameterdescription') + self.parameterdescription.exportLiteral( + outfile, level, name_='parameterdescription') showIndent(outfile, level) outfile.write('),\n') + def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) + def buildAttributes(self, attrs): pass + def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.ELEMENT_NODE and \ - nodeName_ == 'parameternamelist': + nodeName_ == 'parameternamelist': obj_ = docParamNameList.factory() obj_.build(child_) self.parameternamelist.append(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ - nodeName_ == 'parameterdescription': + nodeName_ == 'parameterdescription': obj_ = descriptionType.factory() obj_.build(child_) self.set_parameterdescription(obj_) @@ -7744,11 +8853,13 @@ def buildChildren(self, child_, nodeName_): class docParamNameList(GeneratedsSuper): subclass = None superclass = None + def __init__(self, parametername=None): if parametername is None: self.parametername = [] else: self.parametername = parametername + def factory(*args_, **kwargs_): if docParamNameList.subclass: return docParamNameList.subclass(*args_, **kwargs_) @@ -7756,13 +8867,19 @@ def factory(*args_, **kwargs_): return docParamNameList(*args_, **kwargs_) factory = staticmethod(factory) def get_parametername(self): return self.parametername - def set_parametername(self, parametername): self.parametername = parametername + def set_parametername( + self, parametername): self.parametername = parametername + def add_parametername(self, value): self.parametername.append(value) - def insert_parametername(self, index, value): self.parametername[index] = value + + def insert_parametername( + self, index, value): self.parametername[index] = value + def export(self, outfile, level, namespace_='', name_='docParamNameList', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) - self.exportAttributes(outfile, level, namespace_, name_='docParamNameList') + self.exportAttributes(outfile, level, namespace_, + name_='docParamNameList') if self.hasContent_(): outfile.write('>\n') self.exportChildren(outfile, level + 1, namespace_, name_) @@ -7770,25 +8887,32 @@ def export(self, outfile, level, namespace_='', name_='docParamNameList', namesp outfile.write('\n' % (namespace_, name_)) else: outfile.write(' />\n') + def exportAttributes(self, outfile, level, namespace_='', name_='docParamNameList'): pass + def exportChildren(self, outfile, level, namespace_='', name_='docParamNameList'): for parametername_ in self.parametername: - parametername_.export(outfile, level, namespace_, name_='parametername') + parametername_.export( + outfile, level, namespace_, name_='parametername') + def hasContent_(self): if ( self.parametername is not None - ): + ): return True else: return False + def exportLiteral(self, outfile, level, name_='docParamNameList'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) + def exportLiteralAttributes(self, outfile, level, name_): pass + def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('parametername=[\n') @@ -7802,17 +8926,20 @@ def exportLiteralChildren(self, outfile, level, name_): level -= 1 showIndent(outfile, level) outfile.write('],\n') + def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) + def buildAttributes(self, attrs): pass + def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.ELEMENT_NODE and \ - nodeName_ == 'parametername': + nodeName_ == 'parametername': obj_ = docParamName.factory() obj_.build(child_) self.parametername.append(obj_) @@ -7822,6 +8949,7 @@ def buildChildren(self, child_, nodeName_): class docParamName(GeneratedsSuper): subclass = None superclass = None + def __init__(self, direction=None, ref=None, mixedclass_=None, content_=None): self.direction = direction if mixedclass_ is None: @@ -7832,6 +8960,7 @@ def __init__(self, direction=None, ref=None, mixedclass_=None, content_=None): self.content_ = [] else: self.content_ = content_ + def factory(*args_, **kwargs_): if docParamName.subclass: return docParamName.subclass(*args_, **kwargs_) @@ -7842,6 +8971,7 @@ def get_ref(self): return self.ref def set_ref(self, ref): self.ref = ref def get_direction(self): return self.direction def set_direction(self, direction): self.direction = direction + def export(self, outfile, level, namespace_='', name_='docParamName', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) @@ -7849,28 +8979,34 @@ def export(self, outfile, level, namespace_='', name_='docParamName', namespaced outfile.write('>') self.exportChildren(outfile, level + 1, namespace_, name_) outfile.write('\n' % (namespace_, name_)) + def exportAttributes(self, outfile, level, namespace_='', name_='docParamName'): if self.direction is not None: outfile.write(' direction=%s' % (quote_attrib(self.direction), )) + def exportChildren(self, outfile, level, namespace_='', name_='docParamName'): for item_ in self.content_: item_.export(outfile, level, item_.name, namespace_) + def hasContent_(self): if ( self.ref is not None - ): + ): return True else: return False + def exportLiteral(self, outfile, level, name_='docParamName'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) + def exportLiteralAttributes(self, outfile, level, name_): if self.direction is not None: showIndent(outfile, level) outfile.write('direction = "%s",\n' % (self.direction,)) + def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('content_ = [\n') @@ -7878,26 +9014,29 @@ def exportLiteralChildren(self, outfile, level, name_): item_.exportLiteral(outfile, level, name_) showIndent(outfile, level) outfile.write('],\n') + def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) + def buildAttributes(self, attrs): if attrs.get('direction'): self.direction = attrs.get('direction').value + def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.ELEMENT_NODE and \ - nodeName_ == 'ref': + nodeName_ == 'ref': childobj_ = docRefTextType.factory() childobj_.build(child_) obj_ = self.mixedclass_(MixedContainer.CategoryComplex, - MixedContainer.TypeNone, 'ref', childobj_) + MixedContainer.TypeNone, 'ref', childobj_) self.content_.append(obj_) elif child_.nodeType == Node.TEXT_NODE: obj_ = self.mixedclass_(MixedContainer.CategoryText, - MixedContainer.TypeNone, '', child_.nodeValue) + MixedContainer.TypeNone, '', child_.nodeValue) self.content_.append(obj_) # end class docParamName @@ -7905,6 +9044,7 @@ def buildChildren(self, child_, nodeName_): class docXRefSectType(GeneratedsSuper): subclass = None superclass = None + def __init__(self, id=None, xreftitle=None, xrefdescription=None): self.id = id if xreftitle is None: @@ -7912,6 +9052,7 @@ def __init__(self, id=None, xreftitle=None, xrefdescription=None): else: self.xreftitle = xreftitle self.xrefdescription = xrefdescription + def factory(*args_, **kwargs_): if docXRefSectType.subclass: return docXRefSectType.subclass(*args_, **kwargs_) @@ -7923,13 +9064,17 @@ def set_xreftitle(self, xreftitle): self.xreftitle = xreftitle def add_xreftitle(self, value): self.xreftitle.append(value) def insert_xreftitle(self, index, value): self.xreftitle[index] = value def get_xrefdescription(self): return self.xrefdescription - def set_xrefdescription(self, xrefdescription): self.xrefdescription = xrefdescription + def set_xrefdescription( + self, xrefdescription): self.xrefdescription = xrefdescription + def get_id(self): return self.id def set_id(self, id): self.id = id + def export(self, outfile, level, namespace_='', name_='docXRefSectType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) - self.exportAttributes(outfile, level, namespace_, name_='docXRefSectType') + self.exportAttributes(outfile, level, namespace_, + name_='docXRefSectType') if self.hasContent_(): outfile.write('>\n') self.exportChildren(outfile, level + 1, namespace_, name_) @@ -7937,66 +9082,80 @@ def export(self, outfile, level, namespace_='', name_='docXRefSectType', namespa outfile.write('\n' % (namespace_, name_)) else: outfile.write(' />\n') + def exportAttributes(self, outfile, level, namespace_='', name_='docXRefSectType'): if self.id is not None: - outfile.write(' id=%s' % (self.format_string(quote_attrib(self.id).encode(ExternalEncoding), input_name='id'), )) + outfile.write(' id=%s' % (self.format_string(quote_attrib( + self.id).encode(ExternalEncoding), input_name='id'), )) + def exportChildren(self, outfile, level, namespace_='', name_='docXRefSectType'): for xreftitle_ in self.xreftitle: showIndent(outfile, level) - outfile.write('<%sxreftitle>%s\n' % (namespace_, self.format_string(quote_xml(xreftitle_).encode(ExternalEncoding), input_name='xreftitle'), namespace_)) + outfile.write('<%sxreftitle>%s\n' % (namespace_, self.format_string( + quote_xml(xreftitle_).encode(ExternalEncoding), input_name='xreftitle'), namespace_)) if self.xrefdescription: - self.xrefdescription.export(outfile, level, namespace_, name_='xrefdescription', ) + self.xrefdescription.export( + outfile, level, namespace_, name_='xrefdescription', ) + def hasContent_(self): if ( self.xreftitle is not None or self.xrefdescription is not None - ): + ): return True else: return False + def exportLiteral(self, outfile, level, name_='docXRefSectType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) + def exportLiteralAttributes(self, outfile, level, name_): if self.id is not None: showIndent(outfile, level) outfile.write('id = %s,\n' % (self.id,)) + def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('xreftitle=[\n') level += 1 for xreftitle in self.xreftitle: showIndent(outfile, level) - outfile.write('%s,\n' % quote_python(xreftitle).encode(ExternalEncoding)) + outfile.write('%s,\n' % quote_python( + xreftitle).encode(ExternalEncoding)) level -= 1 showIndent(outfile, level) outfile.write('],\n') if self.xrefdescription: showIndent(outfile, level) outfile.write('xrefdescription=model_.descriptionType(\n') - self.xrefdescription.exportLiteral(outfile, level, name_='xrefdescription') + self.xrefdescription.exportLiteral( + outfile, level, name_='xrefdescription') showIndent(outfile, level) outfile.write('),\n') + def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) + def buildAttributes(self, attrs): if attrs.get('id'): self.id = attrs.get('id').value + def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.ELEMENT_NODE and \ - nodeName_ == 'xreftitle': + nodeName_ == 'xreftitle': xreftitle_ = '' for text__content_ in child_.childNodes: xreftitle_ += text__content_.nodeValue self.xreftitle.append(xreftitle_) elif child_.nodeType == Node.ELEMENT_NODE and \ - nodeName_ == 'xrefdescription': + nodeName_ == 'xrefdescription': obj_ = descriptionType.factory() obj_.build(child_) self.set_xrefdescription(obj_) @@ -8006,6 +9165,7 @@ def buildChildren(self, child_, nodeName_): class docCopyType(GeneratedsSuper): subclass = None superclass = None + def __init__(self, link=None, para=None, sect1=None, internal=None): self.link = link if para is None: @@ -8017,6 +9177,7 @@ def __init__(self, link=None, para=None, sect1=None, internal=None): else: self.sect1 = sect1 self.internal = internal + def factory(*args_, **kwargs_): if docCopyType.subclass: return docCopyType.subclass(*args_, **kwargs_) @@ -8035,6 +9196,7 @@ def get_internal(self): return self.internal def set_internal(self, internal): self.internal = internal def get_link(self): return self.link def set_link(self, link): self.link = link + def export(self, outfile, level, namespace_='', name_='docCopyType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) @@ -8046,9 +9208,12 @@ def export(self, outfile, level, namespace_='', name_='docCopyType', namespacede outfile.write('\n' % (namespace_, name_)) else: outfile.write(' />\n') + def exportAttributes(self, outfile, level, namespace_='', name_='docCopyType'): if self.link is not None: - outfile.write(' link=%s' % (self.format_string(quote_attrib(self.link).encode(ExternalEncoding), input_name='link'), )) + outfile.write(' link=%s' % (self.format_string(quote_attrib( + self.link).encode(ExternalEncoding), input_name='link'), )) + def exportChildren(self, outfile, level, namespace_='', name_='docCopyType'): for para_ in self.para: para_.export(outfile, level, namespace_, name_='para') @@ -8056,24 +9221,28 @@ def exportChildren(self, outfile, level, namespace_='', name_='docCopyType'): sect1_.export(outfile, level, namespace_, name_='sect1') if self.internal: self.internal.export(outfile, level, namespace_, name_='internal') + def hasContent_(self): if ( self.para is not None or self.sect1 is not None or self.internal is not None - ): + ): return True else: return False + def exportLiteral(self, outfile, level, name_='docCopyType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) + def exportLiteralAttributes(self, outfile, level, name_): if self.link is not None: showIndent(outfile, level) outfile.write('link = %s,\n' % (self.link,)) + def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('para=[\n') @@ -8105,28 +9274,31 @@ def exportLiteralChildren(self, outfile, level, name_): self.internal.exportLiteral(outfile, level, name_='internal') showIndent(outfile, level) outfile.write('),\n') + def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) + def buildAttributes(self, attrs): if attrs.get('link'): self.link = attrs.get('link').value + def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.ELEMENT_NODE and \ - nodeName_ == 'para': + nodeName_ == 'para': obj_ = docParaType.factory() obj_.build(child_) self.para.append(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ - nodeName_ == 'sect1': + nodeName_ == 'sect1': obj_ = docSect1Type.factory() obj_.build(child_) self.sect1.append(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ - nodeName_ == 'internal': + nodeName_ == 'internal': obj_ = docInternalType.factory() obj_.build(child_) self.set_internal(obj_) @@ -8136,9 +9308,11 @@ def buildChildren(self, child_, nodeName_): class docCharType(GeneratedsSuper): subclass = None superclass = None + def __init__(self, char=None, valueOf_=''): self.char = char self.valueOf_ = valueOf_ + def factory(*args_, **kwargs_): if docCharType.subclass: return docCharType.subclass(*args_, **kwargs_) @@ -8149,6 +9323,7 @@ def get_char(self): return self.char def set_char(self, char): self.char = char def getValueOf_(self): return self.valueOf_ def setValueOf_(self, valueOf_): self.valueOf_ = valueOf_ + def export(self, outfile, level, namespace_='', name_='docCharType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) @@ -8160,36 +9335,43 @@ def export(self, outfile, level, namespace_='', name_='docCharType', namespacede outfile.write('\n' % (namespace_, name_)) else: outfile.write(' />\n') + def exportAttributes(self, outfile, level, namespace_='', name_='docCharType'): if self.char is not None: outfile.write(' char=%s' % (quote_attrib(self.char), )) + def exportChildren(self, outfile, level, namespace_='', name_='docCharType'): - if self.valueOf_.find('![CDATA')>-1: - value=quote_xml('%s' % self.valueOf_) - value=value.replace('![CDATA','') + if self.valueOf_.find('![CDATA') > -1: + value = quote_xml('%s' % self.valueOf_) + value = value.replace('![CDATA', '') outfile.write(value) else: outfile.write(quote_xml('%s' % self.valueOf_)) + def hasContent_(self): if ( self.valueOf_ is not None - ): + ): return True else: return False + def exportLiteral(self, outfile, level, name_='docCharType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) + def exportLiteralAttributes(self, outfile, level, name_): if self.char is not None: showIndent(outfile, level) outfile.write('char = "%s",\n' % (self.char,)) + def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('valueOf_ = "%s",\n' % (self.valueOf_,)) + def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) @@ -8197,22 +9379,26 @@ def build(self, node_): for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) + def buildAttributes(self, attrs): if attrs.get('char'): self.char = attrs.get('char').value + def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.TEXT_NODE: self.valueOf_ += child_.nodeValue elif child_.nodeType == Node.CDATA_SECTION_NODE: - self.valueOf_ += '![CDATA['+child_.nodeValue+']]' + self.valueOf_ += '![CDATA[' + child_.nodeValue + ']]' # end class docCharType class docEmptyType(GeneratedsSuper): subclass = None superclass = None + def __init__(self, valueOf_=''): self.valueOf_ = valueOf_ + def factory(*args_, **kwargs_): if docEmptyType.subclass: return docEmptyType.subclass(*args_, **kwargs_) @@ -8221,6 +9407,7 @@ def factory(*args_, **kwargs_): factory = staticmethod(factory) def getValueOf_(self): return self.valueOf_ def setValueOf_(self, valueOf_): self.valueOf_ = valueOf_ + def export(self, outfile, level, namespace_='', name_='docEmptyType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) @@ -8232,33 +9419,40 @@ def export(self, outfile, level, namespace_='', name_='docEmptyType', namespaced outfile.write('\n' % (namespace_, name_)) else: outfile.write(' />\n') + def exportAttributes(self, outfile, level, namespace_='', name_='docEmptyType'): pass + def exportChildren(self, outfile, level, namespace_='', name_='docEmptyType'): - if self.valueOf_.find('![CDATA')>-1: - value=quote_xml('%s' % self.valueOf_) - value=value.replace('![CDATA','') + if self.valueOf_.find('![CDATA') > -1: + value = quote_xml('%s' % self.valueOf_) + value = value.replace('![CDATA', '') outfile.write(value) else: outfile.write(quote_xml('%s' % self.valueOf_)) + def hasContent_(self): if ( self.valueOf_ is not None - ): + ): return True else: return False + def exportLiteral(self, outfile, level, name_='docEmptyType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) + def exportLiteralAttributes(self, outfile, level, name_): pass + def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('valueOf_ = "%s",\n' % (self.valueOf_,)) + def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) @@ -8266,13 +9460,15 @@ def build(self, node_): for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) + def buildAttributes(self, attrs): pass + def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.TEXT_NODE: self.valueOf_ += child_.nodeValue elif child_.nodeType == Node.CDATA_SECTION_NODE: - self.valueOf_ += '![CDATA['+child_.nodeValue+']]' + self.valueOf_ += '![CDATA[' + child_.nodeValue + ']]' # end class docEmptyType @@ -8282,8 +9478,9 @@ def buildChildren(self, child_, nodeName_): -s Use the SAX parser, not the minidom parser. """ + def usage(): - print USAGE_TEXT + print(USAGE_TEXT) sys.exit(1) @@ -8296,7 +9493,7 @@ def parse(inFileName): doc = None sys.stdout.write('\n') rootObj.export(sys.stdout, 0, name_="doxygen", - namespacedef_='') + namespacedef_='') return rootObj @@ -8309,7 +9506,7 @@ def parseString(inString): doc = None sys.stdout.write('\n') rootObj.export(sys.stdout, 0, name_="doxygen", - namespacedef_='') + namespacedef_='') return rootObj @@ -8338,5 +9535,4 @@ def main(): if __name__ == '__main__': main() #import pdb - #pdb.run('main()') - + # pdb.run('main()') diff --git a/docs/doxygen/doxyxml/generated/index.py b/docs/doxygen/doxyxml/generated/index.py index 7a70e14..7ffbdf1 100644 --- a/docs/doxygen/doxyxml/generated/index.py +++ b/docs/doxygen/doxyxml/generated/index.py @@ -8,9 +8,10 @@ import os import sys -import compound +from . import compound + +from . import indexsuper as supermod -import indexsuper as supermod class DoxygenTypeSub(supermod.DoxygenType): def __init__(self, version=None, compound=None): @@ -32,6 +33,7 @@ def find_compounds_and_members(self, details): return results + supermod.DoxygenType.subclass = DoxygenTypeSub # end class DoxygenTypeSub @@ -53,6 +55,7 @@ def find_members(self, details): return results + supermod.CompoundType.subclass = CompoundTypeSub # end class CompoundTypeSub @@ -62,6 +65,7 @@ class MemberTypeSub(supermod.MemberType): def __init__(self, kind=None, refid=None, name=''): supermod.MemberType.__init__(self, kind, refid, name) + supermod.MemberType.subclass = MemberTypeSub # end class MemberTypeSub @@ -74,4 +78,3 @@ def parse(inFilename): rootObj.build(rootNode) return rootObj - diff --git a/docs/doxygen/doxyxml/generated/indexsuper.py b/docs/doxygen/doxyxml/generated/indexsuper.py index a991530..b30e062 100644 --- a/docs/doxygen/doxyxml/generated/indexsuper.py +++ b/docs/doxygen/doxyxml/generated/indexsuper.py @@ -4,9 +4,9 @@ # Generated Thu Jun 11 18:43:54 2009 by generateDS.py. # + import sys -import getopt -from string import lower as str_lower + from xml.dom import minidom from xml.dom import Node @@ -19,17 +19,21 @@ try: from generatedssuper import GeneratedsSuper -except ImportError, exp: +except ImportError as exp: - class GeneratedsSuper: + class GeneratedsSuper(object): def format_string(self, input_data, input_name=''): return input_data + def format_integer(self, input_data, input_name=''): return '%d' % input_data + def format_float(self, input_data, input_name=''): return '%f' % input_data + def format_double(self, input_data, input_name=''): return '%e' % input_data + def format_boolean(self, input_data, input_name=''): return '%s' % input_data @@ -41,9 +45,9 @@ def format_boolean(self, input_data, input_name=''): ## from IPython.Shell import IPShellEmbed ## args = '' -## ipshell = IPShellEmbed(args, +# ipshell = IPShellEmbed(args, ## banner = 'Dropping into IPython', -## exit_msg = 'Leaving Interpreter, back to program.') +# exit_msg = 'Leaving Interpreter, back to program.') # Then use the following line where and when you want to drop into the # IPython shell: @@ -59,20 +63,23 @@ def format_boolean(self, input_data, input_name=''): # Support/utility functions. # + def showIndent(outfile, level): for idx in range(level): outfile.write(' ') + def quote_xml(inStr): - s1 = (isinstance(inStr, basestring) and inStr or + s1 = (isinstance(inStr, str) and inStr or '%s' % inStr) s1 = s1.replace('&', '&') s1 = s1.replace('<', '<') s1 = s1.replace('>', '>') return s1 + def quote_attrib(inStr): - s1 = (isinstance(inStr, basestring) and inStr or + s1 = (isinstance(inStr, str) and inStr or '%s' % inStr) s1 = s1.replace('&', '&') s1 = s1.replace('<', '<') @@ -86,6 +93,7 @@ def quote_attrib(inStr): s1 = '"%s"' % s1 return s1 + def quote_python(inStr): s1 = inStr if s1.find("'") == -1: @@ -102,7 +110,7 @@ def quote_python(inStr): return '"""%s"""' % s1 -class MixedContainer: +class MixedContainer(object): # Constants for category: CategoryNone = 0 CategoryText = 1 @@ -117,26 +125,33 @@ class MixedContainer: TypeDecimal = 5 TypeDouble = 6 TypeBoolean = 7 + def __init__(self, category, content_type, name, value): self.category = category self.content_type = content_type self.name = name self.value = value + def getCategory(self): return self.category + def getContenttype(self, content_type): return self.content_type + def getValue(self): return self.value + def getName(self): return self.name + def export(self, outfile, level, name, namespace): if self.category == MixedContainer.CategoryText: outfile.write(self.value) elif self.category == MixedContainer.CategorySimple: self.exportSimple(outfile, level, name) else: # category == MixedContainer.CategoryComplex - self.value.export(outfile, level, namespace,name) + self.value.export(outfile, level, namespace, name) + def exportSimple(self, outfile, level, name): if self.content_type == MixedContainer.TypeString: outfile.write('<%s>%s' % (self.name, self.value, self.name)) @@ -148,19 +163,20 @@ def exportSimple(self, outfile, level, name): outfile.write('<%s>%f' % (self.name, self.value, self.name)) elif self.content_type == MixedContainer.TypeDouble: outfile.write('<%s>%g' % (self.name, self.value, self.name)) + def exportLiteral(self, outfile, level, name): if self.category == MixedContainer.CategoryText: showIndent(outfile, level) - outfile.write('MixedContainer(%d, %d, "%s", "%s"),\n' % \ - (self.category, self.content_type, self.name, self.value)) + outfile.write('MixedContainer(%d, %d, "%s", "%s"),\n' % + (self.category, self.content_type, self.name, self.value)) elif self.category == MixedContainer.CategorySimple: showIndent(outfile, level) - outfile.write('MixedContainer(%d, %d, "%s", "%s"),\n' % \ - (self.category, self.content_type, self.name, self.value)) + outfile.write('MixedContainer(%d, %d, "%s", "%s"),\n' % + (self.category, self.content_type, self.name, self.value)) else: # category == MixedContainer.CategoryComplex showIndent(outfile, level) - outfile.write('MixedContainer(%d, %d, "%s",\n' % \ - (self.category, self.content_type, self.name,)) + outfile.write('MixedContainer(%d, %d, "%s",\n' % + (self.category, self.content_type, self.name,)) self.value.exportLiteral(outfile, level + 1) showIndent(outfile, level) outfile.write(')\n') @@ -171,6 +187,7 @@ def __init__(self, name='', data_type='', container=0): self.name = name self.data_type = data_type self.container = container + def set_name(self, name): self.name = name def get_name(self): return self.name def set_data_type(self, data_type): self.data_type = data_type @@ -186,12 +203,14 @@ def get_container(self): return self.container class DoxygenType(GeneratedsSuper): subclass = None superclass = None + def __init__(self, version=None, compound=None): self.version = version if compound is None: self.compound = [] else: self.compound = compound + def factory(*args_, **kwargs_): if DoxygenType.subclass: return DoxygenType.subclass(*args_, **kwargs_) @@ -204,6 +223,7 @@ def add_compound(self, value): self.compound.append(value) def insert_compound(self, index, value): self.compound[index] = value def get_version(self): return self.version def set_version(self, version): self.version = version + def export(self, outfile, level, namespace_='', name_='DoxygenType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) @@ -215,27 +235,34 @@ def export(self, outfile, level, namespace_='', name_='DoxygenType', namespacede outfile.write('\n' % (namespace_, name_)) else: outfile.write(' />\n') + def exportAttributes(self, outfile, level, namespace_='', name_='DoxygenType'): - outfile.write(' version=%s' % (self.format_string(quote_attrib(self.version).encode(ExternalEncoding), input_name='version'), )) + outfile.write(' version=%s' % (self.format_string(quote_attrib( + self.version).encode(ExternalEncoding), input_name='version'), )) + def exportChildren(self, outfile, level, namespace_='', name_='DoxygenType'): for compound_ in self.compound: compound_.export(outfile, level, namespace_, name_='compound') + def hasContent_(self): if ( self.compound is not None - ): + ): return True else: return False + def exportLiteral(self, outfile, level, name_='DoxygenType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) + def exportLiteralAttributes(self, outfile, level, name_): if self.version is not None: showIndent(outfile, level) outfile.write('version = %s,\n' % (self.version,)) + def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('compound=[\n') @@ -249,18 +276,21 @@ def exportLiteralChildren(self, outfile, level, name_): level -= 1 showIndent(outfile, level) outfile.write('],\n') + def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) + def buildAttributes(self, attrs): if attrs.get('version'): self.version = attrs.get('version').value + def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.ELEMENT_NODE and \ - nodeName_ == 'compound': + nodeName_ == 'compound': obj_ = CompoundType.factory() obj_.build(child_) self.compound.append(obj_) @@ -270,6 +300,7 @@ def buildChildren(self, child_, nodeName_): class CompoundType(GeneratedsSuper): subclass = None superclass = None + def __init__(self, kind=None, refid=None, name=None, member=None): self.kind = kind self.refid = refid @@ -278,6 +309,7 @@ def __init__(self, kind=None, refid=None, name=None, member=None): self.member = [] else: self.member = member + def factory(*args_, **kwargs_): if CompoundType.subclass: return CompoundType.subclass(*args_, **kwargs_) @@ -294,6 +326,7 @@ def get_kind(self): return self.kind def set_kind(self, kind): self.kind = kind def get_refid(self): return self.refid def set_refid(self, refid): self.refid = refid + def export(self, outfile, level, namespace_='', name_='CompoundType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) @@ -305,28 +338,35 @@ def export(self, outfile, level, namespace_='', name_='CompoundType', namespaced outfile.write('\n' % (namespace_, name_)) else: outfile.write(' />\n') + def exportAttributes(self, outfile, level, namespace_='', name_='CompoundType'): outfile.write(' kind=%s' % (quote_attrib(self.kind), )) - outfile.write(' refid=%s' % (self.format_string(quote_attrib(self.refid).encode(ExternalEncoding), input_name='refid'), )) + outfile.write(' refid=%s' % (self.format_string(quote_attrib( + self.refid).encode(ExternalEncoding), input_name='refid'), )) + def exportChildren(self, outfile, level, namespace_='', name_='CompoundType'): if self.name is not None: showIndent(outfile, level) - outfile.write('<%sname>%s\n' % (namespace_, self.format_string(quote_xml(self.name).encode(ExternalEncoding), input_name='name'), namespace_)) + outfile.write('<%sname>%s\n' % (namespace_, self.format_string( + quote_xml(self.name).encode(ExternalEncoding), input_name='name'), namespace_)) for member_ in self.member: member_.export(outfile, level, namespace_, name_='member') + def hasContent_(self): if ( self.name is not None or self.member is not None - ): + ): return True else: return False + def exportLiteral(self, outfile, level, name_='CompoundType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) + def exportLiteralAttributes(self, outfile, level, name_): if self.kind is not None: showIndent(outfile, level) @@ -334,9 +374,11 @@ def exportLiteralAttributes(self, outfile, level, name_): if self.refid is not None: showIndent(outfile, level) outfile.write('refid = %s,\n' % (self.refid,)) + def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) - outfile.write('name=%s,\n' % quote_python(self.name).encode(ExternalEncoding)) + outfile.write('name=%s,\n' % quote_python( + self.name).encode(ExternalEncoding)) showIndent(outfile, level) outfile.write('member=[\n') level += 1 @@ -349,26 +391,29 @@ def exportLiteralChildren(self, outfile, level, name_): level -= 1 showIndent(outfile, level) outfile.write('],\n') + def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) + def buildAttributes(self, attrs): if attrs.get('kind'): self.kind = attrs.get('kind').value if attrs.get('refid'): self.refid = attrs.get('refid').value + def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.ELEMENT_NODE and \ - nodeName_ == 'name': + nodeName_ == 'name': name_ = '' for text__content_ in child_.childNodes: name_ += text__content_.nodeValue self.name = name_ elif child_.nodeType == Node.ELEMENT_NODE and \ - nodeName_ == 'member': + nodeName_ == 'member': obj_ = MemberType.factory() obj_.build(child_) self.member.append(obj_) @@ -378,10 +423,12 @@ def buildChildren(self, child_, nodeName_): class MemberType(GeneratedsSuper): subclass = None superclass = None + def __init__(self, kind=None, refid=None, name=None): self.kind = kind self.refid = refid self.name = name + def factory(*args_, **kwargs_): if MemberType.subclass: return MemberType.subclass(*args_, **kwargs_) @@ -394,6 +441,7 @@ def get_kind(self): return self.kind def set_kind(self, kind): self.kind = kind def get_refid(self): return self.refid def set_refid(self, refid): self.refid = refid + def export(self, outfile, level, namespace_='', name_='MemberType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) @@ -405,25 +453,32 @@ def export(self, outfile, level, namespace_='', name_='MemberType', namespacedef outfile.write('\n' % (namespace_, name_)) else: outfile.write(' />\n') + def exportAttributes(self, outfile, level, namespace_='', name_='MemberType'): outfile.write(' kind=%s' % (quote_attrib(self.kind), )) - outfile.write(' refid=%s' % (self.format_string(quote_attrib(self.refid).encode(ExternalEncoding), input_name='refid'), )) + outfile.write(' refid=%s' % (self.format_string(quote_attrib( + self.refid).encode(ExternalEncoding), input_name='refid'), )) + def exportChildren(self, outfile, level, namespace_='', name_='MemberType'): if self.name is not None: showIndent(outfile, level) - outfile.write('<%sname>%s\n' % (namespace_, self.format_string(quote_xml(self.name).encode(ExternalEncoding), input_name='name'), namespace_)) + outfile.write('<%sname>%s\n' % (namespace_, self.format_string( + quote_xml(self.name).encode(ExternalEncoding), input_name='name'), namespace_)) + def hasContent_(self): if ( self.name is not None - ): + ): return True else: return False + def exportLiteral(self, outfile, level, name_='MemberType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) + def exportLiteralAttributes(self, outfile, level, name_): if self.kind is not None: showIndent(outfile, level) @@ -431,23 +486,28 @@ def exportLiteralAttributes(self, outfile, level, name_): if self.refid is not None: showIndent(outfile, level) outfile.write('refid = %s,\n' % (self.refid,)) + def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) - outfile.write('name=%s,\n' % quote_python(self.name).encode(ExternalEncoding)) + outfile.write('name=%s,\n' % quote_python( + self.name).encode(ExternalEncoding)) + def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) + def buildAttributes(self, attrs): if attrs.get('kind'): self.kind = attrs.get('kind').value if attrs.get('refid'): self.refid = attrs.get('refid').value + def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.ELEMENT_NODE and \ - nodeName_ == 'name': + nodeName_ == 'name': name_ = '' for text__content_ in child_.childNodes: name_ += text__content_.nodeValue @@ -461,8 +521,9 @@ def buildChildren(self, child_, nodeName_): -s Use the SAX parser, not the minidom parser. """ + def usage(): - print USAGE_TEXT + print(USAGE_TEXT) sys.exit(1) @@ -475,7 +536,7 @@ def parse(inFileName): doc = None sys.stdout.write('\n') rootObj.export(sys.stdout, 0, name_="doxygenindex", - namespacedef_='') + namespacedef_='') return rootObj @@ -488,7 +549,7 @@ def parseString(inString): doc = None sys.stdout.write('\n') rootObj.export(sys.stdout, 0, name_="doxygenindex", - namespacedef_='') + namespacedef_='') return rootObj @@ -514,10 +575,7 @@ def main(): usage() - - if __name__ == '__main__': main() #import pdb - #pdb.run('main()') - + # pdb.run('main()') diff --git a/docs/doxygen/doxyxml/text.py b/docs/doxygen/doxyxml/text.py index 629edd1..6aefd57 100644 --- a/docs/doxygen/doxyxml/text.py +++ b/docs/doxygen/doxyxml/text.py @@ -1,42 +1,34 @@ # # Copyright 2010 Free Software Foundation, Inc. # -# This file is part of GNU Radio +# This file was generated by gr_modtool, a tool from the GNU Radio framework +# This file is a part of gr-bruninga # -# GNU Radio is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 3, or (at your option) -# any later version. +# SPDX-License-Identifier: GPL-3.0-or-later # -# GNU Radio is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with GNU Radio; see the file COPYING. If not, write to -# the Free Software Foundation, Inc., 51 Franklin Street, -# Boston, MA 02110-1301, USA. # """ Utilities for extracting text from generated classes. """ + def is_string(txt): if isinstance(txt, str): return True try: - if isinstance(txt, unicode): + if isinstance(txt, str): return True except NameError: pass return False + def description(obj): if obj is None: return None return description_bit(obj).strip() + def description_bit(obj): if hasattr(obj, 'content'): contents = [description_bit(item) for item in obj.content] @@ -49,7 +41,8 @@ def description_bit(obj): elif is_string(obj): return obj else: - raise StandardError('Expecting a string or something with content, content_ or value attribute') + raise Exception( + 'Expecting a string or something with content, content_ or value attribute') # If this bit is a paragraph then add one some line breaks. if hasattr(obj, 'name') and obj.name == 'para': result += "\n\n" diff --git a/docs/doxygen/other/doxypy.py b/docs/doxygen/other/doxypy.py new file mode 100644 index 0000000..28b1664 --- /dev/null +++ b/docs/doxygen/other/doxypy.py @@ -0,0 +1,446 @@ +#!/usr/bin/env python + + +__applicationName__ = "doxypy" +__blurb__ = """ +doxypy is an input filter for Doxygen. It preprocesses python +files so that docstrings of classes and functions are reformatted +into Doxygen-conform documentation blocks. +""" + +__doc__ = __blurb__ + \ + """ +In order to make Doxygen preprocess files through doxypy, simply +add the following lines to your Doxyfile: + FILTER_SOURCE_FILES = YES + INPUT_FILTER = "python /path/to/doxypy.py" +""" + +__version__ = "0.4.2" +__date__ = "5th December 2008" +__website__ = "http://code.foosel.org/doxypy" + +__author__ = ( + "Philippe 'demod' Neumann (doxypy at demod dot org)", + "Gina 'foosel' Haeussge (gina at foosel dot net)" +) + +__licenseName__ = "GPL v2" +__license__ = """This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +""" + +import sys +import re + +from argparse import ArgumentParser + + +class FSM(object): + """Implements a finite state machine. + + Transitions are given as 4-tuples, consisting of an origin state, a target + state, a condition for the transition (given as a reference to a function + which gets called with a given piece of input) and a pointer to a function + to be called upon the execution of the given transition. + """ + + """ + @var transitions holds the transitions + @var current_state holds the current state + @var current_input holds the current input + @var current_transition hold the currently active transition + """ + + def __init__(self, start_state=None, transitions=[]): + self.transitions = transitions + self.current_state = start_state + self.current_input = None + self.current_transition = None + + def setStartState(self, state): + self.current_state = state + + def addTransition(self, from_state, to_state, condition, callback): + self.transitions.append([from_state, to_state, condition, callback]) + + def makeTransition(self, input): + """ Makes a transition based on the given input. + + @param input input to parse by the FSM + """ + for transition in self.transitions: + [from_state, to_state, condition, callback] = transition + if from_state == self.current_state: + match = condition(input) + if match: + self.current_state = to_state + self.current_input = input + self.current_transition = transition + if args.debug: + print("# FSM: executing (%s -> %s) for line '%s'" % + (from_state, to_state, input), file=sys.stderr) + callback(match) + return + + +class Doxypy(object): + def __init__(self): + string_prefixes = "[uU]?[rR]?" + + self.start_single_comment_re = re.compile( + r"^\s*%s(''')" % string_prefixes) + self.end_single_comment_re = re.compile(r"(''')\s*$") + + self.start_double_comment_re = re.compile( + r'^\s*%s(""")' % string_prefixes) + self.end_double_comment_re = re.compile(r'(""")\s*$') + + self.single_comment_re = re.compile( + r"^\s*%s(''').*(''')\s*$" % string_prefixes) + self.double_comment_re = re.compile( + r'^\s*%s(""").*(""")\s*$' % string_prefixes) + + self.defclass_re = re.compile(r"^(\s*)(def .+:|class .+:)") + self.empty_re = re.compile(r"^\s*$") + self.hashline_re = re.compile(r"^\s*#.*$") + self.importline_re = re.compile(r"^\s*(import |from .+ import)") + + self.multiline_defclass_start_re = re.compile( + r"^(\s*)(def|class)(\s.*)?$") + self.multiline_defclass_end_re = re.compile(r":\s*$") + + # Transition list format + # ["FROM", "TO", condition, action] + transitions = [ + # FILEHEAD + + # single line comments + ["FILEHEAD", "FILEHEAD", self.single_comment_re.search, + self.appendCommentLine], + ["FILEHEAD", "FILEHEAD", self.double_comment_re.search, + self.appendCommentLine], + + # multiline comments + ["FILEHEAD", "FILEHEAD_COMMENT_SINGLE", + self.start_single_comment_re.search, self.appendCommentLine], + ["FILEHEAD_COMMENT_SINGLE", "FILEHEAD", + self.end_single_comment_re.search, self.appendCommentLine], + ["FILEHEAD_COMMENT_SINGLE", "FILEHEAD_COMMENT_SINGLE", + self.catchall, self.appendCommentLine], + ["FILEHEAD", "FILEHEAD_COMMENT_DOUBLE", + self.start_double_comment_re.search, self.appendCommentLine], + ["FILEHEAD_COMMENT_DOUBLE", "FILEHEAD", + self.end_double_comment_re.search, self.appendCommentLine], + ["FILEHEAD_COMMENT_DOUBLE", "FILEHEAD_COMMENT_DOUBLE", + self.catchall, self.appendCommentLine], + + # other lines + ["FILEHEAD", "FILEHEAD", self.empty_re.search, self.appendFileheadLine], + ["FILEHEAD", "FILEHEAD", self.hashline_re.search, self.appendFileheadLine], + ["FILEHEAD", "FILEHEAD", self.importline_re.search, + self.appendFileheadLine], + ["FILEHEAD", "DEFCLASS", self.defclass_re.search, self.resetCommentSearch], + ["FILEHEAD", "DEFCLASS_MULTI", + self.multiline_defclass_start_re.search, self.resetCommentSearch], + ["FILEHEAD", "DEFCLASS_BODY", self.catchall, self.appendFileheadLine], + + # DEFCLASS + + # single line comments + ["DEFCLASS", "DEFCLASS_BODY", + self.single_comment_re.search, self.appendCommentLine], + ["DEFCLASS", "DEFCLASS_BODY", + self.double_comment_re.search, self.appendCommentLine], + + # multiline comments + ["DEFCLASS", "COMMENT_SINGLE", + self.start_single_comment_re.search, self.appendCommentLine], + ["COMMENT_SINGLE", "DEFCLASS_BODY", + self.end_single_comment_re.search, self.appendCommentLine], + ["COMMENT_SINGLE", "COMMENT_SINGLE", + self.catchall, self.appendCommentLine], + ["DEFCLASS", "COMMENT_DOUBLE", + self.start_double_comment_re.search, self.appendCommentLine], + ["COMMENT_DOUBLE", "DEFCLASS_BODY", + self.end_double_comment_re.search, self.appendCommentLine], + ["COMMENT_DOUBLE", "COMMENT_DOUBLE", + self.catchall, self.appendCommentLine], + + # other lines + ["DEFCLASS", "DEFCLASS", self.empty_re.search, self.appendDefclassLine], + ["DEFCLASS", "DEFCLASS", self.defclass_re.search, self.resetCommentSearch], + ["DEFCLASS", "DEFCLASS_MULTI", + self.multiline_defclass_start_re.search, self.resetCommentSearch], + ["DEFCLASS", "DEFCLASS_BODY", self.catchall, self.stopCommentSearch], + + # DEFCLASS_BODY + + ["DEFCLASS_BODY", "DEFCLASS", + self.defclass_re.search, self.startCommentSearch], + ["DEFCLASS_BODY", "DEFCLASS_MULTI", + self.multiline_defclass_start_re.search, self.startCommentSearch], + ["DEFCLASS_BODY", "DEFCLASS_BODY", self.catchall, self.appendNormalLine], + + # DEFCLASS_MULTI + ["DEFCLASS_MULTI", "DEFCLASS", + self.multiline_defclass_end_re.search, self.appendDefclassLine], + ["DEFCLASS_MULTI", "DEFCLASS_MULTI", + self.catchall, self.appendDefclassLine], + ] + + self.fsm = FSM("FILEHEAD", transitions) + self.outstream = sys.stdout + + self.output = [] + self.comment = [] + self.filehead = [] + self.defclass = [] + self.indent = "" + + def __closeComment(self): + """Appends any open comment block and triggering block to the output.""" + + if args.autobrief: + if len(self.comment) == 1 \ + or (len(self.comment) > 2 and self.comment[1].strip() == ''): + self.comment[0] = self.__docstringSummaryToBrief( + self.comment[0]) + + if self.comment: + block = self.makeCommentBlock() + self.output.extend(block) + + if self.defclass: + self.output.extend(self.defclass) + + def __docstringSummaryToBrief(self, line): + """Adds \\brief to the docstrings summary line. + + A \\brief is prepended, provided no other doxygen command is at the + start of the line. + """ + stripped = line.strip() + if stripped and not stripped[0] in ('@', '\\'): + return "\\brief " + line + else: + return line + + def __flushBuffer(self): + """Flushes the current outputbuffer to the outstream.""" + if self.output: + try: + if args.debug: + print("# OUTPUT: ", self.output, file=sys.stderr) + print("\n".join(self.output), file=self.outstream) + self.outstream.flush() + except IOError: + # Fix for FS#33. Catches "broken pipe" when doxygen closes + # stdout prematurely upon usage of INPUT_FILTER, INLINE_SOURCES + # and FILTER_SOURCE_FILES. + pass + self.output = [] + + def catchall(self, input): + """The catchall-condition, always returns true.""" + return True + + def resetCommentSearch(self, match): + """Restarts a new comment search for a different triggering line. + + Closes the current commentblock and starts a new comment search. + """ + if args.debug: + print("# CALLBACK: resetCommentSearch", file=sys.stderr) + self.__closeComment() + self.startCommentSearch(match) + + def startCommentSearch(self, match): + """Starts a new comment search. + + Saves the triggering line, resets the current comment and saves + the current indentation. + """ + if args.debug: + print("# CALLBACK: startCommentSearch", file=sys.stderr) + self.defclass = [self.fsm.current_input] + self.comment = [] + self.indent = match.group(1) + + def stopCommentSearch(self, match): + """Stops a comment search. + + Closes the current commentblock, resets the triggering line and + appends the current line to the output. + """ + if args.debug: + print("# CALLBACK: stopCommentSearch", file=sys.stderr) + self.__closeComment() + + self.defclass = [] + self.output.append(self.fsm.current_input) + + def appendFileheadLine(self, match): + """Appends a line in the FILEHEAD state. + + Closes the open comment block, resets it and appends the current line. + """ + if args.debug: + print("# CALLBACK: appendFileheadLine", file=sys.stderr) + self.__closeComment() + self.comment = [] + self.output.append(self.fsm.current_input) + + def appendCommentLine(self, match): + """Appends a comment line. + + The comment delimiter is removed from multiline start and ends as + well as singleline comments. + """ + if args.debug: + print("# CALLBACK: appendCommentLine", file=sys.stderr) + (from_state, to_state, condition, callback) = self.fsm.current_transition + + # single line comment + if (from_state == "DEFCLASS" and to_state == "DEFCLASS_BODY") \ + or (from_state == "FILEHEAD" and to_state == "FILEHEAD"): + # remove comment delimiter from begin and end of the line + activeCommentDelim = match.group(1) + line = self.fsm.current_input + self.comment.append(line[line.find( + activeCommentDelim) + len(activeCommentDelim):line.rfind(activeCommentDelim)]) + + if (to_state == "DEFCLASS_BODY"): + self.__closeComment() + self.defclass = [] + # multiline start + elif from_state == "DEFCLASS" or from_state == "FILEHEAD": + # remove comment delimiter from begin of the line + activeCommentDelim = match.group(1) + line = self.fsm.current_input + self.comment.append( + line[line.find(activeCommentDelim) + len(activeCommentDelim):]) + # multiline end + elif to_state == "DEFCLASS_BODY" or to_state == "FILEHEAD": + # remove comment delimiter from end of the line + activeCommentDelim = match.group(1) + line = self.fsm.current_input + self.comment.append(line[0:line.rfind(activeCommentDelim)]) + if (to_state == "DEFCLASS_BODY"): + self.__closeComment() + self.defclass = [] + # in multiline comment + else: + # just append the comment line + self.comment.append(self.fsm.current_input) + + def appendNormalLine(self, match): + """Appends a line to the output.""" + if args.debug: + print("# CALLBACK: appendNormalLine", file=sys.stderr) + self.output.append(self.fsm.current_input) + + def appendDefclassLine(self, match): + """Appends a line to the triggering block.""" + if args.debug: + print("# CALLBACK: appendDefclassLine", file=sys.stderr) + self.defclass.append(self.fsm.current_input) + + def makeCommentBlock(self): + """Indents the current comment block with respect to the current + indentation level. + + @returns a list of indented comment lines + """ + doxyStart = "##" + commentLines = self.comment + + commentLines = ["%s# %s" % (self.indent, x) for x in commentLines] + l = [self.indent + doxyStart] + l.extend(commentLines) + + return l + + def parse(self, input): + """Parses a python file given as input string and returns the doxygen- + compatible representation. + + @param input the python code to parse + @returns the modified python code + """ + lines = input.split("\n") + + for line in lines: + self.fsm.makeTransition(line) + + if self.fsm.current_state == "DEFCLASS": + self.__closeComment() + + return "\n".join(self.output) + + def parseFile(self, filename): + """Parses a python file given as input string and returns the doxygen- + compatible representation. + + @param input the python code to parse + @returns the modified python code + """ + f = open(filename, 'r') + + for line in f: + self.parseLine(line.rstrip('\r\n')) + if self.fsm.current_state == "DEFCLASS": + self.__closeComment() + self.__flushBuffer() + f.close() + + def parseLine(self, line): + """Parse one line of python and flush the resulting output to the + outstream. + + @param line the python code line to parse + """ + self.fsm.makeTransition(line) + self.__flushBuffer() + + +def argParse(): + """Parses commandline args.""" + parser = ArgumentParser(prog=__applicationName__) + + parser.add_argument("--version", action="version", + version="%(prog)s " + __version__ + ) + parser.add_argument("--autobrief", action="store_true", + help="use the docstring summary line as \\brief description" + ) + parser.add_argument("--debug", action="store_true", + help="enable debug output on stderr" + ) + parser.add_argument("filename", metavar="FILENAME") + + return parser.parse_args() + + +def main(): + """Starts the parser on the file given by the filename as the first + argument on the commandline. + """ + global args + args = argParse() + fsm = Doxypy() + fsm.parseFile(args.filename) + + +if __name__ == "__main__": + main() diff --git a/docs/doxygen/other/group_defs.dox b/docs/doxygen/other/group_defs.dox index 3900ffc..1e8ba0b 100644 --- a/docs/doxygen/other/group_defs.dox +++ b/docs/doxygen/other/group_defs.dox @@ -4,4 +4,3 @@ * module are listed here or in the subcategories below. * */ - diff --git a/docs/doxygen/pydoc_macros.h b/docs/doxygen/pydoc_macros.h new file mode 100644 index 0000000..fb3954b --- /dev/null +++ b/docs/doxygen/pydoc_macros.h @@ -0,0 +1,19 @@ +#ifndef PYDOC_MACROS_H +#define PYDOC_MACROS_H + +#define __EXPAND(x) x +#define __COUNT(_1, _2, _3, _4, _5, _6, _7, COUNT, ...) COUNT +#define __VA_SIZE(...) __EXPAND(__COUNT(__VA_ARGS__, 7, 6, 5, 4, 3, 2, 1)) +#define __CAT1(a, b) a##b +#define __CAT2(a, b) __CAT1(a, b) +#define __DOC1(n1) __doc_##n1 +#define __DOC2(n1, n2) __doc_##n1##_##n2 +#define __DOC3(n1, n2, n3) __doc_##n1##_##n2##_##n3 +#define __DOC4(n1, n2, n3, n4) __doc_##n1##_##n2##_##n3##_##n4 +#define __DOC5(n1, n2, n3, n4, n5) __doc_##n1##_##n2##_##n3##_##n4##_##n5 +#define __DOC6(n1, n2, n3, n4, n5, n6) __doc_##n1##_##n2##_##n3##_##n4##_##n5##_##n6 +#define __DOC7(n1, n2, n3, n4, n5, n6, n7) \ + __doc_##n1##_##n2##_##n3##_##n4##_##n5##_##n6##_##n7 +#define DOC(...) __EXPAND(__EXPAND(__CAT2(__DOC, __VA_SIZE(__VA_ARGS__)))(__VA_ARGS__)) + +#endif // PYDOC_MACROS_H diff --git a/docs/doxygen/swig_doc.py b/docs/doxygen/swig_doc.py deleted file mode 100644 index 4e1ce2e..0000000 --- a/docs/doxygen/swig_doc.py +++ /dev/null @@ -1,255 +0,0 @@ -# -# Copyright 2010,2011 Free Software Foundation, Inc. -# -# This file is part of GNU Radio -# -# GNU Radio is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 3, or (at your option) -# any later version. -# -# GNU Radio is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with GNU Radio; see the file COPYING. If not, write to -# the Free Software Foundation, Inc., 51 Franklin Street, -# Boston, MA 02110-1301, USA. -# -""" -Creates the swig_doc.i SWIG interface file. -Execute using: python swig_doc.py xml_path outputfilename - -The file instructs SWIG to transfer the doxygen comments into the -python docstrings. - -""" - -import sys - -try: - from doxyxml import DoxyIndex, DoxyClass, DoxyFriend, DoxyFunction, DoxyFile, base -except ImportError: - from gnuradio.doxyxml import DoxyIndex, DoxyClass, DoxyFriend, DoxyFunction, DoxyFile, base - - -def py_name(name): - bits = name.split('_') - return '_'.join(bits[1:]) - -def make_name(name): - bits = name.split('_') - return bits[0] + '_make_' + '_'.join(bits[1:]) - - -class Block(object): - """ - Checks if doxyxml produced objects correspond to a gnuradio block. - """ - - @classmethod - def includes(cls, item): - if not isinstance(item, DoxyClass): - return False - # Check for a parsing error. - if item.error(): - return False - return item.has_member(make_name(item.name()), DoxyFriend) - - -def utoascii(text): - """ - Convert unicode text into ascii and escape quotes. - """ - if text is None: - return '' - out = text.encode('ascii', 'replace') - out = out.replace('"', '\\"') - return out - - -def combine_descriptions(obj): - """ - Combines the brief and detailed descriptions of an object together. - """ - description = [] - bd = obj.brief_description.strip() - dd = obj.detailed_description.strip() - if bd: - description.append(bd) - if dd: - description.append(dd) - return utoascii('\n\n'.join(description)).strip() - - -entry_templ = '%feature("docstring") {name} "{docstring}"' -def make_entry(obj, name=None, templ="{description}", description=None): - """ - Create a docstring entry for a swig interface file. - - obj - a doxyxml object from which documentation will be extracted. - name - the name of the C object (defaults to obj.name()) - templ - an optional template for the docstring containing only one - variable named 'description'. - description - if this optional variable is set then it's value is - used as the description instead of extracting it from obj. - """ - if name is None: - name=obj.name() - if "operator " in name: - return '' - if description is None: - description = combine_descriptions(obj) - docstring = templ.format(description=description) - if not docstring: - return '' - return entry_templ.format( - name=name, - docstring=docstring, - ) - - -def make_func_entry(func, name=None, description=None, params=None): - """ - Create a function docstring entry for a swig interface file. - - func - a doxyxml object from which documentation will be extracted. - name - the name of the C object (defaults to func.name()) - description - if this optional variable is set then it's value is - used as the description instead of extracting it from func. - params - a parameter list that overrides using func.params. - """ - if params is None: - params = func.params - params = [prm.declname for prm in params] - if params: - sig = "Params: (%s)" % ", ".join(params) - else: - sig = "Params: (NONE)" - templ = "{description}\n\n" + sig - return make_entry(func, name=name, templ=utoascii(templ), - description=description) - - -def make_class_entry(klass, description=None): - """ - Create a class docstring for a swig interface file. - """ - output = [] - output.append(make_entry(klass, description=description)) - for func in klass.in_category(DoxyFunction): - name = klass.name() + '::' + func.name() - output.append(make_func_entry(func, name=name)) - return "\n\n".join(output) - - -def make_block_entry(di, block): - """ - Create class and function docstrings of a gnuradio block for a - swig interface file. - """ - descriptions = [] - # Get the documentation associated with the class. - class_desc = combine_descriptions(block) - if class_desc: - descriptions.append(class_desc) - # Get the documentation associated with the make function - make_func = di.get_member(make_name(block.name()), DoxyFunction) - make_func_desc = combine_descriptions(make_func) - if make_func_desc: - descriptions.append(make_func_desc) - # Get the documentation associated with the file - try: - block_file = di.get_member(block.name() + ".h", DoxyFile) - file_desc = combine_descriptions(block_file) - if file_desc: - descriptions.append(file_desc) - except base.Base.NoSuchMember: - # Don't worry if we can't find a matching file. - pass - # And join them all together to make a super duper description. - super_description = "\n\n".join(descriptions) - # Associate the combined description with the class and - # the make function. - output = [] - output.append(make_class_entry(block, description=super_description)) - creator = block.get_member(block.name(), DoxyFunction) - output.append(make_func_entry(make_func, description=super_description, - params=creator.params)) - return "\n\n".join(output) - - -def make_swig_interface_file(di, swigdocfilename, custom_output=None): - - output = [""" -/* - * This file was automatically generated using swig_doc.py. - * - * Any changes to it will be lost next time it is regenerated. - */ -"""] - - if custom_output is not None: - output.append(custom_output) - - # Create docstrings for the blocks. - blocks = di.in_category(Block) - make_funcs = set([]) - for block in blocks: - try: - make_func = di.get_member(make_name(block.name()), DoxyFunction) - make_funcs.add(make_func.name()) - output.append(make_block_entry(di, block)) - except block.ParsingError: - print('Parsing error for block %s' % block.name()) - - # Create docstrings for functions - # Don't include the make functions since they have already been dealt with. - funcs = [f for f in di.in_category(DoxyFunction) if f.name() not in make_funcs] - for f in funcs: - try: - output.append(make_func_entry(f)) - except f.ParsingError: - print('Parsing error for function %s' % f.name()) - - # Create docstrings for classes - block_names = [block.name() for block in blocks] - klasses = [k for k in di.in_category(DoxyClass) if k.name() not in block_names] - for k in klasses: - try: - output.append(make_class_entry(k)) - except k.ParsingError: - print('Parsing error for class %s' % k.name()) - - # Docstrings are not created for anything that is not a function or a class. - # If this excludes anything important please add it here. - - output = "\n\n".join(output) - - swig_doc = file(swigdocfilename, 'w') - swig_doc.write(output) - swig_doc.close() - -if __name__ == "__main__": - # Parse command line options and set up doxyxml. - err_msg = "Execute using: python swig_doc.py xml_path outputfilename" - if len(sys.argv) != 3: - raise StandardError(err_msg) - xml_path = sys.argv[1] - swigdocfilename = sys.argv[2] - di = DoxyIndex(xml_path) - - # gnuradio.gr.msq_queue.insert_tail and delete_head create errors unless docstrings are defined! - # This is presumably a bug in SWIG. - #msg_q = di.get_member(u'gr_msg_queue', DoxyClass) - #insert_tail = msg_q.get_member(u'insert_tail', DoxyFunction) - #delete_head = msg_q.get_member(u'delete_head', DoxyFunction) - output = [] - #output.append(make_func_entry(insert_tail, name='gr_py_msg_queue__insert_tail')) - #output.append(make_func_entry(delete_head, name='gr_py_msg_queue__delete_head')) - custom_output = "\n\n".join(output) - - # Generate the docstrings interface file. - make_swig_interface_file(di, swigdocfilename, custom_output=custom_output) diff --git a/docs/doxygen/update_pydoc.py b/docs/doxygen/update_pydoc.py new file mode 100644 index 0000000..b65e168 --- /dev/null +++ b/docs/doxygen/update_pydoc.py @@ -0,0 +1,372 @@ +# +# Copyright 2010-2012 Free Software Foundation, Inc. +# +# This file was generated by gr_modtool, a tool from the GNU Radio framework +# This file is a part of gnuradio +# +# SPDX-License-Identifier: GPL-3.0-or-later +# +# +""" +Updates the *pydoc_h files for a module +Execute using: python update_pydoc.py xml_path outputfilename + +The file instructs Pybind11 to transfer the doxygen comments into the +python docstrings. + +""" + +import os +import sys +import time +import glob +import re +import json +from argparse import ArgumentParser + +from doxyxml import DoxyIndex, DoxyClass, DoxyFriend, DoxyFunction, DoxyFile +from doxyxml import DoxyOther, base + + +def py_name(name): + bits = name.split('_') + return '_'.join(bits[1:]) + + +def make_name(name): + bits = name.split('_') + return bits[0] + '_make_' + '_'.join(bits[1:]) + + +class Block(object): + """ + Checks if doxyxml produced objects correspond to a gnuradio block. + """ + + @classmethod + def includes(cls, item): + if not isinstance(item, DoxyClass): + return False + # Check for a parsing error. + if item.error(): + return False + friendname = make_name(item.name()) + is_a_block = item.has_member(friendname, DoxyFriend) + # But now sometimes the make function isn't a friend so check again. + if not is_a_block: + is_a_block = di.has_member(friendname, DoxyFunction) + return is_a_block + + +class Block2(object): + """ + Checks if doxyxml produced objects correspond to a new style + gnuradio block. + """ + + @classmethod + def includes(cls, item): + if not isinstance(item, DoxyClass): + return False + # Check for a parsing error. + if item.error(): + return False + is_a_block2 = item.has_member( + 'make', DoxyFunction) and item.has_member('sptr', DoxyOther) + return is_a_block2 + + +def utoascii(text): + """ + Convert unicode text into ascii and escape quotes and backslashes. + """ + if text is None: + return '' + out = text.encode('ascii', 'replace') + # swig will require us to replace blackslash with 4 backslashes + # TODO: evaluate what this should be for pybind11 + out = out.replace(b'\\', b'\\\\\\\\') + out = out.replace(b'"', b'\\"').decode('ascii') + return str(out) + + +def combine_descriptions(obj): + """ + Combines the brief and detailed descriptions of an object together. + """ + description = [] + bd = obj.brief_description.strip() + dd = obj.detailed_description.strip() + if bd: + description.append(bd) + if dd: + description.append(dd) + return utoascii('\n\n'.join(description)).strip() + + +def format_params(parameteritems): + output = ['Args:'] + template = ' {0} : {1}' + for pi in parameteritems: + output.append(template.format(pi.name, pi.description)) + return '\n'.join(output) + + +entry_templ = '%feature("docstring") {name} "{docstring}"' + + +def make_entry(obj, name=None, templ="{description}", description=None, params=[]): + """ + Create a docstring key/value pair, where the key is the object name. + + obj - a doxyxml object from which documentation will be extracted. + name - the name of the C object (defaults to obj.name()) + templ - an optional template for the docstring containing only one + variable named 'description'. + description - if this optional variable is set then it's value is + used as the description instead of extracting it from obj. + """ + if name is None: + name = obj.name() + if hasattr(obj, '_parse_data') and hasattr(obj._parse_data, 'definition'): + name = obj._parse_data.definition.split(' ')[-1] + if "operator " in name: + return '' + if description is None: + description = combine_descriptions(obj) + if params: + description += '\n\n' + description += utoascii(format_params(params)) + docstring = templ.format(description=description) + + return {name: docstring} + + +def make_class_entry(klass, description=None, ignored_methods=[], params=None): + """ + Create a class docstring key/value pair. + """ + if params is None: + params = klass.params + output = {} + output.update(make_entry(klass, description=description, params=params)) + for func in klass.in_category(DoxyFunction): + if func.name() not in ignored_methods: + name = klass.name() + '::' + func.name() + output.update(make_entry(func, name=name)) + return output + + +def make_block_entry(di, block): + """ + Create class and function docstrings of a gnuradio block + """ + descriptions = [] + # Get the documentation associated with the class. + class_desc = combine_descriptions(block) + if class_desc: + descriptions.append(class_desc) + # Get the documentation associated with the make function + make_func = di.get_member(make_name(block.name()), DoxyFunction) + make_func_desc = combine_descriptions(make_func) + if make_func_desc: + descriptions.append(make_func_desc) + # Get the documentation associated with the file + try: + block_file = di.get_member(block.name() + ".h", DoxyFile) + file_desc = combine_descriptions(block_file) + if file_desc: + descriptions.append(file_desc) + except base.Base.NoSuchMember: + # Don't worry if we can't find a matching file. + pass + # And join them all together to make a super duper description. + super_description = "\n\n".join(descriptions) + # Associate the combined description with the class and + # the make function. + output = {} + output.update(make_class_entry(block, description=super_description)) + output.update(make_entry(make_func, description=super_description, + params=block.params)) + return output + + +def make_block2_entry(di, block): + """ + Create class and function docstrings of a new style gnuradio block + """ + # For new style blocks all the relevant documentation should be + # associated with the 'make' method. + class_description = combine_descriptions(block) + make_func = block.get_member('make', DoxyFunction) + make_description = combine_descriptions(make_func) + description = class_description + \ + "\n\nConstructor Specific Documentation:\n\n" + make_description + # Associate the combined description with the class and + # the make function. + output = {} + output.update(make_class_entry( + block, description=description, + ignored_methods=['make'], params=make_func.params)) + makename = block.name() + '::make' + output.update(make_entry( + make_func, name=makename, description=description, + params=make_func.params)) + return output + + +def get_docstrings_dict(di, custom_output=None): + + output = {} + if custom_output: + output.update(custom_output) + + # Create docstrings for the blocks. + blocks = di.in_category(Block) + blocks2 = di.in_category(Block2) + + make_funcs = set([]) + for block in blocks: + try: + make_func = di.get_member(make_name(block.name()), DoxyFunction) + # Don't want to risk writing to output twice. + if make_func.name() not in make_funcs: + make_funcs.add(make_func.name()) + output.update(make_block_entry(di, block)) + except block.ParsingError: + sys.stderr.write( + 'Parsing error for block {0}\n'.format(block.name())) + raise + + for block in blocks2: + try: + make_func = block.get_member('make', DoxyFunction) + make_func_name = block.name() + '::make' + # Don't want to risk writing to output twice. + if make_func_name not in make_funcs: + make_funcs.add(make_func_name) + output.update(make_block2_entry(di, block)) + except block.ParsingError: + sys.stderr.write( + 'Parsing error for block {0}\n'.format(block.name())) + raise + + # Create docstrings for functions + # Don't include the make functions since they have already been dealt with. + funcs = [f for f in di.in_category(DoxyFunction) + if f.name() not in make_funcs and not f.name().startswith('std::')] + for f in funcs: + try: + output.update(make_entry(f)) + except f.ParsingError: + sys.stderr.write( + 'Parsing error for function {0}\n'.format(f.name())) + + # Create docstrings for classes + block_names = [block.name() for block in blocks] + block_names += [block.name() for block in blocks2] + klasses = [k for k in di.in_category(DoxyClass) + if k.name() not in block_names and not k.name().startswith('std::')] + for k in klasses: + try: + output.update(make_class_entry(k)) + except k.ParsingError: + sys.stderr.write('Parsing error for class {0}\n'.format(k.name())) + + # Docstrings are not created for anything that is not a function or a class. + # If this excludes anything important please add it here. + + return output + + +def sub_docstring_in_pydoc_h(pydoc_files, docstrings_dict, output_dir, filter_str=None): + if filter_str: + docstrings_dict = { + k: v for k, v in docstrings_dict.items() if k.startswith(filter_str)} + + with open(os.path.join(output_dir, 'docstring_status'), 'w') as status_file: + + for pydoc_file in pydoc_files: + if filter_str: + filter_str2 = "::".join((filter_str, os.path.split( + pydoc_file)[-1].split('_pydoc_template.h')[0])) + docstrings_dict2 = { + k: v for k, v in docstrings_dict.items() if k.startswith(filter_str2)} + else: + docstrings_dict2 = docstrings_dict + + file_in = open(pydoc_file, 'r').read() + for key, value in docstrings_dict2.items(): + file_in_tmp = file_in + try: + doc_key = key.split("::") + # if 'gr' in doc_key: + # doc_key.remove('gr') + doc_key = '_'.join(doc_key) + regexp = r'(__doc_{} =\sR\"doc\()[^)]*(\)doc\")'.format( + doc_key) + regexp = re.compile(regexp, re.MULTILINE) + + (file_in, nsubs) = regexp.subn( + r'\1' + value + r'\2', file_in, count=1) + if nsubs == 1: + status_file.write("PASS: " + pydoc_file + "\n") + except KeyboardInterrupt: + raise KeyboardInterrupt + except: # be permissive, TODO log, but just leave the docstring blank + status_file.write("FAIL: " + pydoc_file + "\n") + file_in = file_in_tmp + + output_pathname = os.path.join(output_dir, os.path.basename( + pydoc_file).replace('_template.h', '.h')) + with open(output_pathname, 'w') as file_out: + file_out.write(file_in) + + +def copy_docstring_templates(pydoc_files, output_dir): + with open(os.path.join(output_dir, 'docstring_status'), 'w') as status_file: + for pydoc_file in pydoc_files: + file_in = open(pydoc_file, 'r').read() + output_pathname = os.path.join(output_dir, os.path.basename( + pydoc_file).replace('_template.h', '.h')) + with open(output_pathname, 'w') as file_out: + file_out.write(file_in) + status_file.write("DONE") + + +def argParse(): + """Parses commandline args.""" + desc = 'Scrape the doxygen generated xml for docstrings to insert into python bindings' + parser = ArgumentParser(description=desc) + + parser.add_argument("function", help="Operation to perform on docstrings", choices=[ + "scrape", "sub", "copy"]) + + parser.add_argument("--xml_path") + parser.add_argument("--bindings_dir") + parser.add_argument("--output_dir") + parser.add_argument("--json_path") + parser.add_argument("--filter", default=None) + + return parser.parse_args() + + +if __name__ == "__main__": + # Parse command line options and set up doxyxml. + args = argParse() + if args.function.lower() == 'scrape': + di = DoxyIndex(args.xml_path) + docstrings_dict = get_docstrings_dict(di) + with open(args.json_path, 'w') as fp: + json.dump(docstrings_dict, fp) + elif args.function.lower() == 'sub': + with open(args.json_path, 'r') as fp: + docstrings_dict = json.load(fp) + pydoc_files = glob.glob(os.path.join( + args.bindings_dir, '*_pydoc_template.h')) + sub_docstring_in_pydoc_h( + pydoc_files, docstrings_dict, args.output_dir, args.filter) + elif args.function.lower() == 'copy': + pydoc_files = glob.glob(os.path.join( + args.bindings_dir, '*_pydoc_template.h')) + copy_docstring_templates(pydoc_files, args.output_dir) diff --git a/examples/aprs-loopback.grc b/examples/aprs-loopback.grc index 109e7a0..339fdf0 100644 --- a/examples/aprs-loopback.grc +++ b/examples/aprs-loopback.grc @@ -1,497 +1,200 @@ - - - - Tue Oct 28 20:54:55 2014 - - digital_hdlc_deframer_bp - - id - digital_hdlc_deframer_bp_0 - - - _enabled - True - - - min - 15 - - - max - 500 - - - alias - - - - affinity - - - - minoutbuf - 0 - - - maxoutbuf - 0 - - - _coordinate - (928, 179) - - - _rotation - 0 - - - - variable - - id - samp_rate - - - _enabled - True - - - value - 48000 - - - alias - - - - _coordinate - (8, 99) - - - _rotation - 0 - - - - bruninga_hdlc_to_ax25 - - id - bruninga_hdlc_to_ax25_1 - - - _enabled - True - - - alias - - - - affinity - - - - _coordinate - (1096, 192) - - - _rotation - 0 - - - - bruninga_fsk_demod - - id - bruninga_fsk_demod_0 - - - _enabled - True - - - samp_rate - samp_rate - - - alias - - - - affinity - - - - minoutbuf - 0 - - - maxoutbuf - 0 - - - _coordinate - (736, 187) - - - _rotation - 0 - - - - bruninga_ax25_fsk_mod - - id - bruninga_ax25_fsk_mod_0 - - - _enabled - True - - - samp_rate - samp_rate - - - preamble_len_ms - 16.0/1200*1000 - - - flag_count - 5 - - - mark_freq - 2200 - - - space_freq - 1200 - - - baud_rate - 1200 - - - alias - - - - affinity - - - - minoutbuf - 0 - - - maxoutbuf - 0 - - - _coordinate - (480, 147) - - - _rotation - 0 - - - - blocks_socket_pdu - - id - blocks_socket_pdu_0 - - - _enabled - True - - - type - "TCP_SERVER" - - - host - - - - port - 52001 - - - mtu - 10000 - - - tcp_no_delay - False - - - alias - - - - affinity - - - - minoutbuf - 0 - - - maxoutbuf - 0 - - - _coordinate - (144, 163) - - - _rotation - 0 - - - - blocks_multiply_const_vxx - - id - blocks_multiply_const_vxx_0 - - - _enabled - True - - - type - float - - - const - 0.1 - - - vlen - 1 - - - alias - - - - affinity - - - - minoutbuf - 0 - - - maxoutbuf - 0 - - - _coordinate - (744, 123) - - - _rotation - 0 - - - - audio_sink - - id - audio_sink_0 - - - _enabled - True - - - samp_rate - 48000 - - - device_name - - - - ok_to_block - True - - - num_inputs - 1 - - - alias - - - - affinity - - - - _coordinate - (728, 67) - - - _rotation - 0 - - - - bruninga_str_to_aprs - - id - bruninga_str_to_aprs_0 - - - _enabled - True - - - src - NOCALL - - - dest - NOCALL - - - via - [] - - - alias - - - - affinity - - - - minoutbuf - 0 - - - maxoutbuf - 0 - - - _coordinate - (312, 171) - - - _rotation - 0 - - - - options - - id - aprs_loopback - - - _enabled - True - - - title - - - - author - - - - description - - - - window_size - 1280, 1024 - - - generate_options - no_gui - - - category - Custom - - - run_options - run - - - run - True - - - max_nouts - 0 - - - realtime_scheduling - - - - alias - - - - _coordinate - (8, 11) - - - _rotation - 180 - - - - digital_hdlc_deframer_bp_0 - bruninga_hdlc_to_ax25_1 - out - in - - - bruninga_fsk_demod_0 - digital_hdlc_deframer_bp_0 - 0 - 0 - - - bruninga_ax25_fsk_mod_0 - bruninga_fsk_demod_0 - 0 - 0 - - - bruninga_str_to_aprs_0 - bruninga_ax25_fsk_mod_0 - out - in - - - blocks_socket_pdu_0 - bruninga_str_to_aprs_0 - pdus - in - - - bruninga_ax25_fsk_mod_0 - blocks_multiply_const_vxx_0 - 0 - 0 - - - blocks_multiply_const_vxx_0 - audio_sink_0 - 0 - 0 - - +options: + parameters: + author: '' + catch_exceptions: 'True' + category: Custom + cmake_opt: '' + comment: '' + copyright: '' + description: '' + gen_cmake: 'On' + gen_linking: dynamic + generate_options: no_gui + hier_block_src_path: '.:' + id: aprs_loopback + max_nouts: '0' + output_language: python + placement: (0,0) + qt_qss_theme: '' + realtime_scheduling: '' + run: 'True' + run_command: '{python} -u {filename}' + run_options: run + sizing_mode: fixed + thread_safe_setters: '' + title: '' + window_size: 1280, 1024 + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [8, 11] + rotation: 180 + state: enabled + +blocks: +- name: samp_rate + id: variable + parameters: + comment: '' + value: '48000' + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [8, 99] + rotation: 0 + state: enabled +- name: audio_sink_0 + id: audio_sink + parameters: + affinity: '' + alias: '' + comment: '' + device_name: '' + num_inputs: '1' + ok_to_block: 'True' + samp_rate: '48000' + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [728, 67] + rotation: 0 + state: enabled +- name: blocks_multiply_const_vxx_0 + id: blocks_multiply_const_vxx + parameters: + affinity: '' + alias: '' + comment: '' + const: '0.1' + maxoutbuf: '0' + minoutbuf: '0' + type: float + vlen: '1' + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [744, 123] + rotation: 0 + state: enabled +- name: bruninga_ax25_fsk_mod_0 + id: bruninga_ax25_fsk_mod + parameters: + affinity: '' + alias: '' + baud_rate: '1200' + comment: '' + flag_count: '5' + mark_freq: '2200' + maxoutbuf: '0' + minoutbuf: '0' + preamble_len_ms: 16.0/1200*1000 + samp_rate: samp_rate + space_freq: '1200' + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [480, 147] + rotation: 0 + state: enabled +- name: bruninga_fsk_demod_0 + id: bruninga_fsk_demod + parameters: + affinity: '' + alias: '' + comment: '' + maxoutbuf: '0' + minoutbuf: '0' + samp_rate: samp_rate + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [736, 187] + rotation: 0 + state: enabled +- name: bruninga_hdlc_to_ax25_1 + id: bruninga_hdlc_to_ax25 + parameters: + affinity: '' + alias: '' + comment: '' + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [1096, 192] + rotation: 0 + state: enabled +- name: bruninga_str_to_aprs_0 + id: bruninga_str_to_aprs + parameters: + affinity: '' + alias: '' + comment: '' + dest: NOCALL + maxoutbuf: '0' + minoutbuf: '0' + src: NOCALL + via: '[]' + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [312, 171] + rotation: 0 + state: enabled +- name: digital_hdlc_deframer_bp_0 + id: digital_hdlc_deframer_bp + parameters: + affinity: '' + alias: '' + comment: '' + max: '500' + maxoutbuf: '0' + min: '15' + minoutbuf: '0' + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [928, 179] + rotation: 0 + state: enabled +- name: network_socket_pdu_0 + id: network_socket_pdu + parameters: + affinity: '' + alias: '' + comment: '' + host: '' + maxoutbuf: '0' + minoutbuf: '0' + mtu: '10000' + port: '52001' + tcp_no_delay: 'False' + type: TCP_SERVER + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [80, 220.0] + rotation: 0 + state: true + +connections: +- [blocks_multiply_const_vxx_0, '0', audio_sink_0, '0'] +- [bruninga_ax25_fsk_mod_0, '0', blocks_multiply_const_vxx_0, '0'] +- [bruninga_ax25_fsk_mod_0, '0', bruninga_fsk_demod_0, '0'] +- [bruninga_fsk_demod_0, '0', digital_hdlc_deframer_bp_0, '0'] +- [bruninga_str_to_aprs_0, out, bruninga_ax25_fsk_mod_0, in] +- [digital_hdlc_deframer_bp_0, out, bruninga_hdlc_to_ax25_1, in] +- [network_socket_pdu_0, pdus, bruninga_str_to_aprs_0, in] + +metadata: + file_format: 1 + grc_version: v3.11.0.0git-82-gbc248667 diff --git a/examples/aprs-rxtx.grc b/examples/aprs-rxtx.grc index 44b713d..d177075 100644 --- a/examples/aprs-rxtx.grc +++ b/examples/aprs-rxtx.grc @@ -1,548 +1,219 @@ - - - - Tue Oct 28 21:00:11 2014 - - blocks_socket_pdu - - id - blocks_socket_pdu_0 - - - _enabled - True - - - type - "TCP_SERVER" - - - host - - - - port - 52001 - - - mtu - 10000 - - - tcp_no_delay - False - - - alias - - - - affinity - - - - minoutbuf - 0 - - - maxoutbuf - 0 - - - _coordinate - (144, 163) - - - _rotation - 0 - - - - variable - - id - samp_rate - - - _enabled - True - - - value - 48000 - - - alias - - - - _coordinate - (8, 99) - - - _rotation - 0 - - - - bruninga_str_to_aprs - - id - bruninga_str_to_aprs_0 - - - _enabled - True - - - src - NOCALL - - - dest - NOCALL - - - via - [] - - - alias - - - - affinity - - - - minoutbuf - 0 - - - maxoutbuf - 0 - - - _coordinate - (312, 171) - - - _rotation - 0 - - - - digital_hdlc_deframer_bp - - id - digital_hdlc_deframer_bp_0 - - - _enabled - True - - - min - 15 - - - max - 500 - - - alias - - - - affinity - - - - minoutbuf - 0 - - - maxoutbuf - 0 - - - _coordinate - (624, 355) - - - _rotation - 0 - - - - bruninga_hdlc_to_ax25 - - id - bruninga_hdlc_to_ax25_1 - - - _enabled - True - - - alias - - - - affinity - - - - _coordinate - (792, 368) - - - _rotation - 0 - - - - audio_source - - id - audio_source_0 - - - _enabled - True - - - samp_rate - samp_rate - - - device_name - - - - ok_to_block - True - - - num_outputs - 1 - - - alias - - - - affinity - - - - minoutbuf - 0 - - - maxoutbuf - 0 - - - _coordinate - (248, 363) - - - _rotation - 0 - - - - bruninga_fsk_demod - - id - bruninga_fsk_demod_0 - - - _enabled - True - - - samp_rate - samp_rate - - - alias - - - - affinity - - - - minoutbuf - 0 - - - maxoutbuf - 0 - - - _coordinate - (432, 363) - - - _rotation - 0 - - - - blocks_multiply_const_vxx - - id - blocks_multiply_const_vxx_0 - - - _enabled - True - - - type - float - - - const - 0.1 - - - vlen - 1 - - - alias - - - - affinity - - - - minoutbuf - 0 - - - maxoutbuf - 0 - - - _coordinate - (720, 187) - - - _rotation - 0 - - - - audio_sink - - id - audio_sink_0 - - - _enabled - True - - - samp_rate - 48000 - - - device_name - - - - ok_to_block - True - - - num_inputs - 1 - - - alias - - - - affinity - - - - _coordinate - (712, 115) - - - _rotation - 0 - - - - bruninga_ax25_fsk_mod - - id - bruninga_ax25_fsk_mod_0 - - - _enabled - True - - - samp_rate - samp_rate - - - preamble_len_ms - 300 - - - flag_count - 10 - - - mark_freq - 2200 - - - space_freq - 1200 - - - baud_rate - 1200 - - - alias - - - - affinity - - - - minoutbuf - 0 - - - maxoutbuf - 0 - - - _coordinate - (480, 147) - - - _rotation - 0 - - - - options - - id - aprs_rxtx - - - _enabled - True - - - title - - - - author - - - - description - - - - window_size - 1280, 1024 - - - generate_options - no_gui - - - category - Custom - - - run_options - run - - - run - True - - - max_nouts - 0 - - - realtime_scheduling - - - - alias - - - - _coordinate - (8, 11) - - - _rotation - 180 - - - - bruninga_str_to_aprs_0 - bruninga_ax25_fsk_mod_0 - out - in - - - blocks_socket_pdu_0 - bruninga_str_to_aprs_0 - pdus - in - - - bruninga_fsk_demod_0 - digital_hdlc_deframer_bp_0 - 0 - 0 - - - digital_hdlc_deframer_bp_0 - bruninga_hdlc_to_ax25_1 - out - in - - - audio_source_0 - bruninga_fsk_demod_0 - 0 - 0 - - - blocks_multiply_const_vxx_0 - audio_sink_0 - 0 - 0 - - - bruninga_ax25_fsk_mod_0 - blocks_multiply_const_vxx_0 - 0 - 0 - - +options: + parameters: + author: '' + catch_exceptions: 'True' + category: Custom + cmake_opt: '' + comment: '' + copyright: '' + description: '' + gen_cmake: 'On' + gen_linking: dynamic + generate_options: no_gui + hier_block_src_path: '.:' + id: aprs_rxtx + max_nouts: '0' + output_language: python + placement: (0,0) + qt_qss_theme: '' + realtime_scheduling: '' + run: 'True' + run_command: '{python} -u {filename}' + run_options: run + sizing_mode: fixed + thread_safe_setters: '' + title: '' + window_size: 1280, 1024 + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [8, 11] + rotation: 180 + state: enabled + +blocks: +- name: samp_rate + id: variable + parameters: + comment: '' + value: '48000' + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [8, 99] + rotation: 0 + state: enabled +- name: audio_sink_0 + id: audio_sink + parameters: + affinity: '' + alias: '' + comment: '' + device_name: '' + num_inputs: '1' + ok_to_block: 'True' + samp_rate: '48000' + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [712, 115] + rotation: 0 + state: enabled +- name: audio_source_0 + id: audio_source + parameters: + affinity: '' + alias: '' + comment: '' + device_name: '' + maxoutbuf: '0' + minoutbuf: '0' + num_outputs: '1' + ok_to_block: 'True' + samp_rate: samp_rate + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [248, 363] + rotation: 0 + state: enabled +- name: blocks_multiply_const_vxx_0 + id: blocks_multiply_const_vxx + parameters: + affinity: '' + alias: '' + comment: '' + const: '0.1' + maxoutbuf: '0' + minoutbuf: '0' + type: float + vlen: '1' + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [720, 187] + rotation: 0 + state: enabled +- name: bruninga_ax25_fsk_mod_0 + id: bruninga_ax25_fsk_mod + parameters: + affinity: '' + alias: '' + baud_rate: '1200' + comment: '' + flag_count: '10' + mark_freq: '2200' + maxoutbuf: '0' + minoutbuf: '0' + preamble_len_ms: '300' + samp_rate: samp_rate + space_freq: '1200' + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [480, 147] + rotation: 0 + state: enabled +- name: bruninga_fsk_demod_0 + id: bruninga_fsk_demod + parameters: + affinity: '' + alias: '' + comment: '' + maxoutbuf: '0' + minoutbuf: '0' + samp_rate: samp_rate + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [432, 363] + rotation: 0 + state: enabled +- name: bruninga_hdlc_to_ax25_1 + id: bruninga_hdlc_to_ax25 + parameters: + affinity: '' + alias: '' + comment: '' + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [792, 368] + rotation: 0 + state: enabled +- name: bruninga_str_to_aprs_0 + id: bruninga_str_to_aprs + parameters: + affinity: '' + alias: '' + comment: '' + dest: NOCALL + maxoutbuf: '0' + minoutbuf: '0' + src: NOCALL + via: '[]' + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [312, 171] + rotation: 0 + state: enabled +- name: digital_hdlc_deframer_bp_0 + id: digital_hdlc_deframer_bp + parameters: + affinity: '' + alias: '' + comment: '' + max: '500' + maxoutbuf: '0' + min: '15' + minoutbuf: '0' + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [624, 355] + rotation: 0 + state: enabled +- name: network_socket_pdu_0 + id: network_socket_pdu + parameters: + affinity: '' + alias: '' + comment: '' + host: '' + maxoutbuf: '0' + minoutbuf: '0' + mtu: '10000' + port: '52001' + tcp_no_delay: 'False' + type: TCP_SERVER + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [72, 196.0] + rotation: 0 + state: true + +connections: +- [audio_source_0, '0', bruninga_fsk_demod_0, '0'] +- [blocks_multiply_const_vxx_0, '0', audio_sink_0, '0'] +- [bruninga_ax25_fsk_mod_0, '0', blocks_multiply_const_vxx_0, '0'] +- [bruninga_fsk_demod_0, '0', digital_hdlc_deframer_bp_0, '0'] +- [bruninga_str_to_aprs_0, out, bruninga_ax25_fsk_mod_0, in] +- [digital_hdlc_deframer_bp_0, out, bruninga_hdlc_to_ax25_1, in] +- [network_socket_pdu_0, pdus, bruninga_str_to_aprs_0, in] + +metadata: + file_format: 1 + grc_version: v3.11.0.0git-82-gbc248667 diff --git a/examples/aprs-uhd.grc b/examples/aprs-uhd.grc index 83676bd..2fb4a28 100644 --- a/examples/aprs-uhd.grc +++ b/examples/aprs-uhd.grc @@ -1,1405 +1,849 @@ - - - - Tue Oct 28 21:00:16 2014 - - variable - - id - rf_samp_rate - - - _enabled - True - - - value - 62500 - - - alias - - - - _coordinate - (8, 147) - - - _rotation - 0 - - - - variable - - id - tuner_offset - - - _enabled - True - - - value - 10e3 - - - alias - - - - _coordinate - (128, 115) - - - _rotation - 0 - - - - variable - - id - samp_rate - - - _enabled - True - - - value - 19200 - - - alias - - - - _coordinate - (8, 211) - - - _rotation - 0 - - - - variable_qtgui_range - - id - vol - - - _enabled - False - - - label - Volume - - - value - 0 - - - start - 0 - - - stop - 1 - - - step - 0.1 - - - widget - counter_slider - - - orient - Qt.Horizontal - - - min_len - 200 - - - gui_hint - - - - alias - - - - _coordinate - (8, 419) - - - _rotation - 0 - - - - blocks_file_source - - id - blocks_file_source_0 - - - _enabled - True - - - file - /home/tkuester/rf_caps/aprs-f1.443800e+08-s6.250000e+04-t20140919151404.cfile - - - type - complex - - - repeat - False - - - vlen - 1 - - - alias - - - - affinity - - - - minoutbuf - 0 - - - maxoutbuf - 0 - - - _coordinate - (160, 243) - - - _rotation - 0 - - - - variable_qtgui_range - - id - rf_gain - - - _enabled - False - - - label - RF Gain - - - value - 20 - - - start - 0 - - - stop - 79 - - - step - 1 - - - widget - counter_slider - - - orient - Qt.Horizontal - - - min_len - 200 - - - gui_hint - - - - alias - - - - _coordinate - (8, 283) - - - _rotation - 0 - - - - import - - id - import_0 - - - _enabled - True - - - import - import math - - - alias - - - - _coordinate - (8, 91) - - - _rotation - 0 - - - - blocks_rotator_cc - - id - blocks_rotator_cc_0 - - - _enabled - True - - - phase_inc - 2*math.pi*-tuner_offset/rf_samp_rate - - - alias - - - - affinity - - - - minoutbuf - 0 - - - maxoutbuf - 0 - - - _coordinate - (408, 307) - - - _rotation - 0 - - - - uhd_usrp_source - - id - uhd_usrp_source_0 - - - _enabled - False - - - type - fc32 - - - otw - - - - stream_args - - - - stream_chans - [] - - - dev_addr - "" - - - dev_args - "" - - - sync - - - - clock_rate - 0.0 - - - num_mboards - 1 - - - clock_source0 - - - - time_source0 - - - - sd_spec0 - - - - clock_source1 - - - - time_source1 - - - - sd_spec1 - - - - clock_source2 - - - - time_source2 - - - - sd_spec2 - - - - clock_source3 - - - - time_source3 - - - - sd_spec3 - - - - clock_source4 - - - - time_source4 - - - - sd_spec4 - - - - clock_source5 - - - - time_source5 - - - - sd_spec5 - - - - clock_source6 - - - - time_source6 - - - - sd_spec6 - - - - clock_source7 - - - - time_source7 - - - - sd_spec7 - - - - nchan - 1 - - - samp_rate - samp_rate - - - center_freq0 - 144.39e6-tuner_offset - - - gain0 - rf_gain - - - ant0 - - - - bw0 - 0 - - - center_freq1 - 0 - - - gain1 - 0 - - - ant1 - - - - bw1 - 0 - - - center_freq2 - 0 - - - gain2 - 0 - - - ant2 - - - - bw2 - 0 - - - center_freq3 - 0 - - - gain3 - 0 - - - ant3 - - - - bw3 - 0 - - - center_freq4 - 0 - - - gain4 - 0 - - - ant4 - - - - bw4 - 0 - - - center_freq5 - 0 - - - gain5 - 0 - - - ant5 - - - - bw5 - 0 - - - center_freq6 - 0 - - - gain6 - 0 - - - ant6 - - - - bw6 - 0 - - - center_freq7 - 0 - - - gain7 - 0 - - - ant7 - - - - bw7 - 0 - - - center_freq8 - 0 - - - gain8 - 0 - - - ant8 - - - - bw8 - 0 - - - center_freq9 - 0 - - - gain9 - 0 - - - ant9 - - - - bw9 - 0 - - - center_freq10 - 0 - - - gain10 - 0 - - - ant10 - - - - bw10 - 0 - - - center_freq11 - 0 - - - gain11 - 0 - - - ant11 - - - - bw11 - 0 - - - center_freq12 - 0 - - - gain12 - 0 - - - ant12 - - - - bw12 - 0 - - - center_freq13 - 0 - - - gain13 - 0 - - - ant13 - - - - bw13 - 0 - - - center_freq14 - 0 - - - gain14 - 0 - - - ant14 - - - - bw14 - 0 - - - center_freq15 - 0 - - - gain15 - 0 - - - ant15 - - - - bw15 - 0 - - - center_freq16 - 0 - - - gain16 - 0 - - - ant16 - - - - bw16 - 0 - - - center_freq17 - 0 - - - gain17 - 0 - - - ant17 - - - - bw17 - 0 - - - center_freq18 - 0 - - - gain18 - 0 - - - ant18 - - - - bw18 - 0 - - - center_freq19 - 0 - - - gain19 - 0 - - - ant19 - - - - bw19 - 0 - - - center_freq20 - 0 - - - gain20 - 0 - - - ant20 - - - - bw20 - 0 - - - center_freq21 - 0 - - - gain21 - 0 - - - ant21 - - - - bw21 - 0 - - - center_freq22 - 0 - - - gain22 - 0 - - - ant22 - - - - bw22 - 0 - - - center_freq23 - 0 - - - gain23 - 0 - - - ant23 - - - - bw23 - 0 - - - center_freq24 - 0 - - - gain24 - 0 - - - ant24 - - - - bw24 - 0 - - - center_freq25 - 0 - - - gain25 - 0 - - - ant25 - - - - bw25 - 0 - - - center_freq26 - 0 - - - gain26 - 0 - - - ant26 - - - - bw26 - 0 - - - center_freq27 - 0 - - - gain27 - 0 - - - ant27 - - - - bw27 - 0 - - - center_freq28 - 0 - - - gain28 - 0 - - - ant28 - - - - bw28 - 0 - - - center_freq29 - 0 - - - gain29 - 0 - - - ant29 - - - - bw29 - 0 - - - center_freq30 - 0 - - - gain30 - 0 - - - ant30 - - - - bw30 - 0 - - - center_freq31 - 0 - - - gain31 - 0 - - - ant31 - - - - bw31 - 0 - - - alias - - - - affinity - - - - minoutbuf - 0 - - - maxoutbuf - 0 - - - _coordinate - (160, 339) - - - _rotation - 0 - - - - low_pass_filter - - id - low_pass_filter_0 - - - _enabled - True - - - type - fir_filter_ccf - - - decim - 1 - - - interp - 1 - - - gain - 1 - - - samp_rate - rf_samp_rate - - - cutoff_freq - 8000 - - - width - 10000 - - - win - firdes.WIN_HAMMING - - - beta - 6.76 - - - alias - - - - affinity - - - - minoutbuf - 0 - - - maxoutbuf - 0 - - - _coordinate - (640, 259) - - - _rotation - 0 - - - - analog_nbfm_rx - - id - analog_nbfm_rx_0 - - - _enabled - True - - - audio_rate - 62500 - - - quad_rate - 62500 - - - tau - 75e-6 - - - max_dev - 5e3 - - - alias - - - - affinity - - - - minoutbuf - 0 - - - maxoutbuf - 0 - - - _coordinate - (840, 283) - - - _rotation - 0 - - - - rational_resampler_xxx - - id - rational_resampler_xxx_0 - - - _enabled - True - - - type - fff - - - interp - samp_rate - - - decim - 62500 - - - taps - - - - fbw - 0 - - - alias - - - - affinity - - - - minoutbuf - 0 - - - maxoutbuf - 0 - - - _coordinate - (1048, 283) - - - _rotation - 0 - - - - bruninga_hdlc_to_ax25 - - id - bruninga_hdlc_to_ax25_1 - - - _enabled - True - - - alias - - - - affinity - - - - _coordinate - (1064, 488) - - - _rotation - 0 - - - - digital_hdlc_deframer_bp - - id - digital_hdlc_deframer_bp_0 - - - _enabled - True - - - min - 15 - - - max - 500 - - - alias - - - - affinity - - - - minoutbuf - 0 - - - maxoutbuf - 0 - - - _coordinate - (896, 475) - - - _rotation - 0 - - - - bruninga_fsk_demod - - id - bruninga_fsk_demod_0 - - - _enabled - True - - - samp_rate - samp_rate - - - alias - - - - affinity - - - - minoutbuf - 0 - - - maxoutbuf - 0 - - - _coordinate - (720, 483) - - - _rotation - 0 - - - - options - - id - aprs_uhd - - - _enabled - True - - - title - - - - author - - - - description - - - - window_size - 1280, 1024 - - - generate_options - no_gui - - - category - Custom - - - run_options - run - - - run - True - - - max_nouts - 0 - - - realtime_scheduling - - - - alias - - - - _coordinate - (8, 11) - - - _rotation - 180 - - - - blocks_rotator_cc_0 - low_pass_filter_0 - 0 - 0 - - - blocks_file_source_0 - blocks_rotator_cc_0 - 0 - 0 - - - uhd_usrp_source_0 - blocks_rotator_cc_0 - 0 - 0 - - - analog_nbfm_rx_0 - rational_resampler_xxx_0 - 0 - 0 - - - low_pass_filter_0 - analog_nbfm_rx_0 - 0 - 0 - - - rational_resampler_xxx_0 - bruninga_fsk_demod_0 - 0 - 0 - - - bruninga_fsk_demod_0 - digital_hdlc_deframer_bp_0 - 0 - 0 - - - digital_hdlc_deframer_bp_0 - bruninga_hdlc_to_ax25_1 - out - in - - +options: + parameters: + author: '' + catch_exceptions: 'True' + category: Custom + cmake_opt: '' + comment: '' + copyright: '' + description: '' + gen_cmake: 'On' + gen_linking: dynamic + generate_options: no_gui + hier_block_src_path: '.:' + id: aprs_uhd + max_nouts: '0' + output_language: python + placement: (0,0) + qt_qss_theme: '' + realtime_scheduling: '' + run: 'True' + run_command: '{python} -u {filename}' + run_options: run + sizing_mode: fixed + thread_safe_setters: '' + title: '' + window_size: 1280, 1024 + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [8, 11] + rotation: 180 + state: enabled + +blocks: +- name: center_freq + id: variable + parameters: + comment: '' + value: 144.39e6-tuner_offset + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [840, 12.0] + rotation: 0 + state: true +- name: rf_gain + id: variable_qtgui_range + parameters: + comment: '' + gui_hint: '' + label: RF Gain + min_len: '200' + orient: QtCore.Qt.Horizontal + rangeType: float + start: '0' + step: '1' + stop: '79' + value: '20' + widget: counter_slider + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [0, 328.0] + rotation: 0 + state: disabled +- name: rf_gain + id: variable + parameters: + comment: '' + value: '30' + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [728, 12.0] + rotation: 0 + state: true +- name: rf_samp_rate + id: variable + parameters: + comment: '' + value: '62500' + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [576, 4.0] + rotation: 0 + state: enabled +- name: samp_rate + id: variable + parameters: + comment: '' + value: 19.2e3 + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [8, 108.0] + rotation: 0 + state: enabled +- name: tuner_offset + id: variable + parameters: + comment: '' + value: 10e3 + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [288, 12.0] + rotation: 0 + state: enabled +- name: vol + id: variable_qtgui_range + parameters: + comment: '' + gui_hint: '' + label: Volume + min_len: '200' + orient: QtCore.Qt.Horizontal + rangeType: float + start: '0' + step: '0.1' + stop: '1' + value: '0' + widget: counter_slider + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [8, 520.0] + rotation: 0 + state: disabled +- name: analog_nbfm_rx_0 + id: analog_nbfm_rx + parameters: + affinity: '' + alias: '' + audio_rate: '62500' + comment: '' + max_dev: 5e3 + maxoutbuf: '0' + minoutbuf: '0' + quad_rate: '62500' + tau: 75e-6 + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [1208, 268.0] + rotation: 0 + state: enabled +- name: blocks_file_source_0 + id: blocks_file_source + parameters: + affinity: '' + alias: '' + begin_tag: pmt.PMT_NIL + comment: '' + file: /home/tkuester/rf_caps/aprs-f1.443800e+08-s6.250000e+04-t20140919151404.cfile + length: '0' + maxoutbuf: '0' + minoutbuf: '0' + offset: '0' + repeat: 'False' + type: complex + vlen: '1' + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [152, 172.0] + rotation: 0 + state: disabled +- name: blocks_float_to_complex_0 + id: blocks_float_to_complex + parameters: + affinity: '' + alias: '' + comment: '' + maxoutbuf: '0' + minoutbuf: '0' + vlen: '1' + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [784, 148.0] + rotation: 0 + state: disabled +- name: blocks_rotator_cc_0 + id: blocks_rotator_cc + parameters: + affinity: '' + alias: '' + comment: '' + maxoutbuf: '0' + minoutbuf: '0' + phase_inc: 2*math.pi*-tuner_offset/rf_samp_rate + tag_inc_update: 'False' + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [568, 300.0] + rotation: 0 + state: enabled +- name: blocks_throttle_0 + id: blocks_throttle + parameters: + affinity: '' + alias: '' + comment: '' + ignoretag: 'True' + maxoutbuf: '0' + minoutbuf: '0' + samples_per_second: '39062' + type: complex + vlen: '1' + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [1152, 116.0] + rotation: 0 + state: disabled +- name: blocks_wavfile_source_0 + id: blocks_wavfile_source + parameters: + affinity: '' + alias: '' + comment: '' + file: /home/bjk/gnuradio/src/gr-bruninga/examples/recordings/SDRSharp_20150819_190253Z_145070kHz_IQ.wav + maxoutbuf: '0' + minoutbuf: '0' + nchan: '2' + repeat: 'True' + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [424, 140.0] + rotation: 0 + state: disabled +- name: bruninga_fsk_demod_0 + id: bruninga_fsk_demod + parameters: + affinity: '' + alias: '' + comment: '' + maxoutbuf: '0' + minoutbuf: '0' + samp_rate: samp_rate + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [584, 452.0] + rotation: 0 + state: enabled +- name: bruninga_hdlc_to_ax25_1 + id: bruninga_hdlc_to_ax25 + parameters: + affinity: '' + alias: '' + comment: '' + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [1112, 488.0] + rotation: 0 + state: enabled +- name: digital_hdlc_deframer_bp_0 + id: digital_hdlc_deframer_bp + parameters: + affinity: '' + alias: '' + comment: '' + max: '500' + maxoutbuf: '0' + min: '15' + minoutbuf: '0' + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [864, 468.0] + rotation: 0 + state: enabled +- name: import_0 + id: import + parameters: + alias: '' + comment: '' + imports: import math + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [440, 12.0] + rotation: 0 + state: enabled +- name: low_pass_filter_0 + id: low_pass_filter + parameters: + affinity: '' + alias: '' + beta: '6.76' + comment: '' + cutoff_freq: '8000' + decim: '1' + gain: '1' + interp: '1' + maxoutbuf: '0' + minoutbuf: '0' + samp_rate: rf_samp_rate + type: fir_filter_ccf + width: '10000' + win: window.WIN_HAMMING + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [904, 240.0] + rotation: 0 + state: enabled +- name: rational_resampler_xxx_0 + id: rational_resampler_xxx + parameters: + affinity: '' + alias: '' + comment: '' + decim: '39062' + fbw: '0' + interp: '19200' + maxoutbuf: '0' + minoutbuf: '0' + taps: '[]' + type: ccc + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [1416, 84.0] + rotation: 0 + state: disabled +- name: rational_resampler_xxx_1 + id: rational_resampler_xxx + parameters: + affinity: '' + alias: '' + comment: '' + decim: int(62500) + fbw: '1' + interp: int(samp_rate) + maxoutbuf: '0' + minoutbuf: '0' + taps: '[1]' + type: fff + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [1512, 268.0] + rotation: 0 + state: true +- name: soapy_rtlsdr_source_0 + id: soapy_rtlsdr_source + parameters: + affinity: '' + agc: 'False' + alias: '' + center_freq: center_freq + comment: '' + dev_args: '' + freq_correction: '0' + gain: rf_gain + maxoutbuf: '0' + minoutbuf: '0' + samp_rate: samp_rate + type: fc32 + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [216, 516.0] + rotation: 0 + state: disabled +- name: uhd_usrp_source_0 + id: uhd_usrp_source + parameters: + affinity: '' + alias: '' + ant0: '' + ant1: '' + ant10: '' + ant11: '' + ant12: '' + ant13: '' + ant14: '' + ant15: '' + ant16: '' + ant17: '' + ant18: '' + ant19: '' + ant2: '' + ant20: '' + ant21: '' + ant22: '' + ant23: '' + ant24: '' + ant25: '' + ant26: '' + ant27: '' + ant28: '' + ant29: '' + ant3: '' + ant30: '' + ant31: '' + ant4: '' + ant5: '' + ant6: '' + ant7: '' + ant8: '' + ant9: '' + bw0: '0' + bw1: '0' + bw10: '0' + bw11: '0' + bw12: '0' + bw13: '0' + bw14: '0' + bw15: '0' + bw16: '0' + bw17: '0' + bw18: '0' + bw19: '0' + bw2: '0' + bw20: '0' + bw21: '0' + bw22: '0' + bw23: '0' + bw24: '0' + bw25: '0' + bw26: '0' + bw27: '0' + bw28: '0' + bw29: '0' + bw3: '0' + bw30: '0' + bw31: '0' + bw4: '0' + bw5: '0' + bw6: '0' + bw7: '0' + bw8: '0' + bw9: '0' + center_freq0: center_freq + center_freq1: '0' + center_freq10: '0' + center_freq11: '0' + center_freq12: '0' + center_freq13: '0' + center_freq14: '0' + center_freq15: '0' + center_freq16: '0' + center_freq17: '0' + center_freq18: '0' + center_freq19: '0' + center_freq2: '0' + center_freq20: '0' + center_freq21: '0' + center_freq22: '0' + center_freq23: '0' + center_freq24: '0' + center_freq25: '0' + center_freq26: '0' + center_freq27: '0' + center_freq28: '0' + center_freq29: '0' + center_freq3: '0' + center_freq30: '0' + center_freq31: '0' + center_freq4: '0' + center_freq5: '0' + center_freq6: '0' + center_freq7: '0' + center_freq8: '0' + center_freq9: '0' + clock_rate: '0.0' + clock_source0: '' + clock_source1: '' + clock_source2: '' + clock_source3: '' + clock_source4: '' + clock_source5: '' + clock_source6: '' + clock_source7: '' + comment: '' + dc_offs0: 0+0j + dc_offs1: 0+0j + dc_offs10: 0+0j + dc_offs11: 0+0j + dc_offs12: 0+0j + dc_offs13: 0+0j + dc_offs14: 0+0j + dc_offs15: 0+0j + dc_offs16: 0+0j + dc_offs17: 0+0j + dc_offs18: 0+0j + dc_offs19: 0+0j + dc_offs2: 0+0j + dc_offs20: 0+0j + dc_offs21: 0+0j + dc_offs22: 0+0j + dc_offs23: 0+0j + dc_offs24: 0+0j + dc_offs25: 0+0j + dc_offs26: 0+0j + dc_offs27: 0+0j + dc_offs28: 0+0j + dc_offs29: 0+0j + dc_offs3: 0+0j + dc_offs30: 0+0j + dc_offs31: 0+0j + dc_offs4: 0+0j + dc_offs5: 0+0j + dc_offs6: 0+0j + dc_offs7: 0+0j + dc_offs8: 0+0j + dc_offs9: 0+0j + dc_offs_enb0: default + dc_offs_enb1: default + dc_offs_enb10: default + dc_offs_enb11: default + dc_offs_enb12: default + dc_offs_enb13: default + dc_offs_enb14: default + dc_offs_enb15: default + dc_offs_enb16: default + dc_offs_enb17: default + dc_offs_enb18: default + dc_offs_enb19: default + dc_offs_enb2: default + dc_offs_enb20: default + dc_offs_enb21: default + dc_offs_enb22: default + dc_offs_enb23: default + dc_offs_enb24: default + dc_offs_enb25: default + dc_offs_enb26: default + dc_offs_enb27: default + dc_offs_enb28: default + dc_offs_enb29: default + dc_offs_enb3: default + dc_offs_enb30: default + dc_offs_enb31: default + dc_offs_enb4: default + dc_offs_enb5: default + dc_offs_enb6: default + dc_offs_enb7: default + dc_offs_enb8: default + dc_offs_enb9: default + dev_addr: '""' + dev_args: '""' + gain0: rf_gain + gain1: '0' + gain10: '0' + gain11: '0' + gain12: '0' + gain13: '0' + gain14: '0' + gain15: '0' + gain16: '0' + gain17: '0' + gain18: '0' + gain19: '0' + gain2: '0' + gain20: '0' + gain21: '0' + gain22: '0' + gain23: '0' + gain24: '0' + gain25: '0' + gain26: '0' + gain27: '0' + gain28: '0' + gain29: '0' + gain3: '0' + gain30: '0' + gain31: '0' + gain4: '0' + gain5: '0' + gain6: '0' + gain7: '0' + gain8: '0' + gain9: '0' + gain_type0: default + gain_type1: default + gain_type10: default + gain_type11: default + gain_type12: default + gain_type13: default + gain_type14: default + gain_type15: default + gain_type16: default + gain_type17: default + gain_type18: default + gain_type19: default + gain_type2: default + gain_type20: default + gain_type21: default + gain_type22: default + gain_type23: default + gain_type24: default + gain_type25: default + gain_type26: default + gain_type27: default + gain_type28: default + gain_type29: default + gain_type3: default + gain_type30: default + gain_type31: default + gain_type4: default + gain_type5: default + gain_type6: default + gain_type7: default + gain_type8: default + gain_type9: default + iq_imbal0: 0+0j + iq_imbal1: 0+0j + iq_imbal10: 0+0j + iq_imbal11: 0+0j + iq_imbal12: 0+0j + iq_imbal13: 0+0j + iq_imbal14: 0+0j + iq_imbal15: 0+0j + iq_imbal16: 0+0j + iq_imbal17: 0+0j + iq_imbal18: 0+0j + iq_imbal19: 0+0j + iq_imbal2: 0+0j + iq_imbal20: 0+0j + iq_imbal21: 0+0j + iq_imbal22: 0+0j + iq_imbal23: 0+0j + iq_imbal24: 0+0j + iq_imbal25: 0+0j + iq_imbal26: 0+0j + iq_imbal27: 0+0j + iq_imbal28: 0+0j + iq_imbal29: 0+0j + iq_imbal3: 0+0j + iq_imbal30: 0+0j + iq_imbal31: 0+0j + iq_imbal4: 0+0j + iq_imbal5: 0+0j + iq_imbal6: 0+0j + iq_imbal7: 0+0j + iq_imbal8: 0+0j + iq_imbal9: 0+0j + iq_imbal_enb0: default + iq_imbal_enb1: default + iq_imbal_enb10: default + iq_imbal_enb11: default + iq_imbal_enb12: default + iq_imbal_enb13: default + iq_imbal_enb14: default + iq_imbal_enb15: default + iq_imbal_enb16: default + iq_imbal_enb17: default + iq_imbal_enb18: default + iq_imbal_enb19: default + iq_imbal_enb2: default + iq_imbal_enb20: default + iq_imbal_enb21: default + iq_imbal_enb22: default + iq_imbal_enb23: default + iq_imbal_enb24: default + iq_imbal_enb25: default + iq_imbal_enb26: default + iq_imbal_enb27: default + iq_imbal_enb28: default + iq_imbal_enb29: default + iq_imbal_enb3: default + iq_imbal_enb30: default + iq_imbal_enb31: default + iq_imbal_enb4: default + iq_imbal_enb5: default + iq_imbal_enb6: default + iq_imbal_enb7: default + iq_imbal_enb8: default + iq_imbal_enb9: default + lo_export0: 'False' + lo_export1: 'False' + lo_export10: 'False' + lo_export11: 'False' + lo_export12: 'False' + lo_export13: 'False' + lo_export14: 'False' + lo_export15: 'False' + lo_export16: 'False' + lo_export17: 'False' + lo_export18: 'False' + lo_export19: 'False' + lo_export2: 'False' + lo_export20: 'False' + lo_export21: 'False' + lo_export22: 'False' + lo_export23: 'False' + lo_export24: 'False' + lo_export25: 'False' + lo_export26: 'False' + lo_export27: 'False' + lo_export28: 'False' + lo_export29: 'False' + lo_export3: 'False' + lo_export30: 'False' + lo_export31: 'False' + lo_export4: 'False' + lo_export5: 'False' + lo_export6: 'False' + lo_export7: 'False' + lo_export8: 'False' + lo_export9: 'False' + lo_source0: internal + lo_source1: internal + lo_source10: internal + lo_source11: internal + lo_source12: internal + lo_source13: internal + lo_source14: internal + lo_source15: internal + lo_source16: internal + lo_source17: internal + lo_source18: internal + lo_source19: internal + lo_source2: internal + lo_source20: internal + lo_source21: internal + lo_source22: internal + lo_source23: internal + lo_source24: internal + lo_source25: internal + lo_source26: internal + lo_source27: internal + lo_source28: internal + lo_source29: internal + lo_source3: internal + lo_source30: internal + lo_source31: internal + lo_source4: internal + lo_source5: internal + lo_source6: internal + lo_source7: internal + lo_source8: internal + lo_source9: internal + maxoutbuf: '0' + minoutbuf: '0' + nchan: '1' + num_mboards: '1' + otw: '' + rx_agc0: Default + rx_agc1: Default + rx_agc10: Default + rx_agc11: Default + rx_agc12: Default + rx_agc13: Default + rx_agc14: Default + rx_agc15: Default + rx_agc16: Default + rx_agc17: Default + rx_agc18: Default + rx_agc19: Default + rx_agc2: Default + rx_agc20: Default + rx_agc21: Default + rx_agc22: Default + rx_agc23: Default + rx_agc24: Default + rx_agc25: Default + rx_agc26: Default + rx_agc27: Default + rx_agc28: Default + rx_agc29: Default + rx_agc3: Default + rx_agc30: Default + rx_agc31: Default + rx_agc4: Default + rx_agc5: Default + rx_agc6: Default + rx_agc7: Default + rx_agc8: Default + rx_agc9: Default + samp_rate: samp_rate + sd_spec0: '' + sd_spec1: '' + sd_spec2: '' + sd_spec3: '' + sd_spec4: '' + sd_spec5: '' + sd_spec6: '' + sd_spec7: '' + show_lo_controls: 'False' + start_time: '-1.0' + stream_args: '' + stream_chans: '[]' + sync: sync + time_source0: '' + time_source1: '' + time_source2: '' + time_source3: '' + time_source4: '' + time_source5: '' + time_source6: '' + time_source7: '' + type: fc32 + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [160, 339] + rotation: 0 + state: enabled + +connections: +- [analog_nbfm_rx_0, '0', rational_resampler_xxx_1, '0'] +- [blocks_file_source_0, '0', blocks_rotator_cc_0, '0'] +- [blocks_float_to_complex_0, '0', blocks_throttle_0, '0'] +- [blocks_rotator_cc_0, '0', low_pass_filter_0, '0'] +- [blocks_throttle_0, '0', rational_resampler_xxx_0, '0'] +- [blocks_wavfile_source_0, '0', blocks_float_to_complex_0, '0'] +- [blocks_wavfile_source_0, '1', blocks_float_to_complex_0, '1'] +- [bruninga_fsk_demod_0, '0', digital_hdlc_deframer_bp_0, '0'] +- [digital_hdlc_deframer_bp_0, out, bruninga_hdlc_to_ax25_1, in] +- [low_pass_filter_0, '0', analog_nbfm_rx_0, '0'] +- [rational_resampler_xxx_0, '0', blocks_rotator_cc_0, '0'] +- [rational_resampler_xxx_1, '0', bruninga_fsk_demod_0, '0'] +- [soapy_rtlsdr_source_0, '0', blocks_rotator_cc_0, '0'] +- [uhd_usrp_source_0, '0', blocks_rotator_cc_0, '0'] + +metadata: + file_format: 1 + grc_version: v3.11.0.0git-82-gbc248667 diff --git a/examples/aprs-wav.grc b/examples/aprs-wav.grc index 2bbe3e5..bbfd377 100644 --- a/examples/aprs-wav.grc +++ b/examples/aprs-wav.grc @@ -1,2851 +1,965 @@ - - - - Tue Oct 28 21:00:47 2014 - - options - - id - aprs_wav - - - _enabled - True - - - title - - - - author - - - - description - - - - window_size - 1280, 1024 - - - generate_options - qt_gui - - - category - Custom - - - run_options - run - - - run - True - - - max_nouts - 0 - - - realtime_scheduling - - - - alias - - - - _coordinate - (8, 11) - - - _rotation - 180 - - - - variable - - id - attack - - - _enabled - True - - - value - 0.8 - - - alias - - - - _coordinate - (928, 75) - - - _rotation - 0 - - - - variable - - id - window - - - _enabled - True - - - value - signal.windows.cosine(window_len) - - - alias - - - - _coordinate - (496, 155) - - - _rotation - 0 - - - - variable - - id - bpf_width - - - _enabled - True - - - value - 800 - - - alias - - - - _coordinate - (240, 163) - - - _rotation - 0 - - - - variable - - id - window_len - - - _enabled - True - - - value - samp_rate/1200*2 - - - alias - - - - _coordinate - (528, 91) - - - _rotation - 0 - - - - variable - - id - gain_mu - - - _enabled - True - - - value - 0.45 - - - alias - - - - _coordinate - (304, 483) - - - _rotation - 0 - - - - variable - - id - decay - - - _enabled - True - - - value - 0.00022 - - - alias - - - - _coordinate - (928, 139) - - - _rotation - 0 - - - - variable - - id - bpf_trans - - - _enabled - True - - - value - 200 - - - alias - - - - _coordinate - (336, 163) - - - _rotation - 0 - - - - variable - - id - samp_rate - - - _enabled - True - - - value - 19200 - - - alias - - - - _coordinate - (496, 11) - - - _rotation - 0 - - - - import - - id - import_0_0_0 - - - _enabled - True - - - import - from gnuradio import filter - - - alias - - - - _coordinate - (296, 11) - - - _rotation - 0 - - - - import - - id - import_0_0 - - - _enabled - True - - - import - from scipy import signal - - - alias - - - - _coordinate - (392, 11) - - - _rotation - 0 - - - - import - - id - import_0 - - - _enabled - True - - - import - import math - - - alias - - - - _coordinate - (200, 11) - - - _rotation - 0 - - - - bruninga_hdlc_to_ax25 - - id - bruninga_hdlc_to_ax25_1 - - - _enabled - True - - - alias - - - - affinity - - - - _coordinate - (1040, 536) - - - _rotation - 0 - - - - digital_diff_decoder_bb - - id - digital_diff_decoder_bb_0 - - - _enabled - True - - - modulus - 2 - - - alias - - - - affinity - - - - minoutbuf - 0 - - - maxoutbuf - 0 - - - _coordinate - (632, 587) - - - _rotation - 0 - - - - blocks_not_xx - - id - blocks_not_xx_0 - - - _enabled - True - - - type - byte - - - alias - - - - affinity - - - - minoutbuf - 0 - - - maxoutbuf - 0 - - - _coordinate - (648, 536) - - - _rotation - 0 - - - - blocks_and_const_xx - - id - blocks_and_const_xx_0 - - - _enabled - True - - - type - byte - - - const - 1 - - - alias - - - - affinity - - - - minoutbuf - 0 - - - maxoutbuf - 0 - - - _coordinate - (736, 531) - - - _rotation - 0 - - - - digital_hdlc_deframer_bp - - id - digital_hdlc_deframer_bp_0 - - - _enabled - True - - - min - 15 - - - max - 500 - - - alias - - - - affinity - - - - minoutbuf - 0 - - - maxoutbuf - 0 - - - _coordinate - (872, 523) - - - _rotation - 0 - - - - digital_binary_slicer_fb - - id - digital_binary_slicer_fb_0 - - - _enabled - True - - - alias - - - - affinity - - - - minoutbuf - 0 - - - maxoutbuf - 0 - - - _coordinate - (480, 592) - - - _rotation - 0 - - - - blocks_sub_xx - - id - blocks_sub_xx_1 - - - _enabled - True - - - type - float - - - vlen - 1 - - - num_inputs - 2 - - - alias - - - - affinity - - - - minoutbuf - 0 - - - maxoutbuf - 0 - - - _coordinate - (1120, 232) - - - _rotation - 0 - - - - freq_xlating_fir_filter_xxx - - id - freq_xlating_fir_filter_xxx_0_0 - - - _enabled - True - - - type - fcf - - - decim - 4 - - - taps - window - - - center_freq - 2200 - - - samp_rate - samp_rate - - - alias - - - - affinity - - - - minoutbuf - 0 - - - maxoutbuf - 0 - - - _coordinate - (480, 323) - - - _rotation - 0 - - - - bruninga_direwolf_agc - - id - bruninga_direwolf_agc_0_0 - - - _enabled - True - - - attack - attack - - - decay - decay - - - alias - - - - affinity - - - - minoutbuf - 0 - - - maxoutbuf - 0 - - - _coordinate - (920, 320) - - - _rotation - 0 - - - - freq_xlating_fir_filter_xxx - - id - freq_xlating_fir_filter_xxx_0 - - - _enabled - True - - - type - fcf - - - decim - 4 - - - taps - window - - - center_freq - 1200 - - - samp_rate - samp_rate - - - alias - - - - affinity - - - - minoutbuf - 0 - - - maxoutbuf - 0 - - - _coordinate - (480, 219) - - - _rotation - 0 - - - - band_pass_filter - - id - band_pass_filter_0 - - - _enabled - True - - - type - fir_filter_fff - - - decim - 1 - - - interp - 1 - - - gain - 1 - - - samp_rate - samp_rate - - - low_cutoff_freq - 1700-bpf_width - - - high_cutoff_freq - 1700+bpf_width - - - width - bpf_trans - - - win - firdes.WIN_RECTANGULAR - - - beta - 6.76 - - - alias - - - - affinity - - - - minoutbuf - 0 - - - maxoutbuf - 0 - - - _coordinate - (248, 235) - - - _rotation - 0 - - - - blocks_complex_to_mag - - id - blocks_complex_to_mag_0_0 - - - _enabled - True - - - vlen - 1 - - - alias - - - - affinity - - - - minoutbuf - 0 - - - maxoutbuf - 0 - - - _coordinate - (736, 352) - - - _rotation - 0 - - - - blocks_complex_to_mag - - id - blocks_complex_to_mag_0 - - - _enabled - True - - - vlen - 1 - - - alias - - - - affinity - - - - minoutbuf - 0 - - - maxoutbuf - 0 - - - _coordinate - (736, 248) - - - _rotation - 0 - - - - digital_clock_recovery_mm_xx - - id - digital_clock_recovery_mm_xx_0 - - - _enabled - True - - - type - float - - - omega - 4*(1+0.0) - - - gain_omega - 0.25*gain_mu*gain_mu - - - mu - 0.5 - - - gain_mu - gain_mu - - - omega_relative_limit - 0.05 - - - alias - - - - affinity - - - - minoutbuf - 0 - - - maxoutbuf - 0 - - - _coordinate - (264, 555) - - - _rotation - 0 - - - - qtgui_tab_widget - - id - tab - - - _enabled - True - - - num_tabs - 2 - - - label0 - Audio - - - label1 - Data - - - label2 - Tab 2 - - - label3 - Tab 3 - - - label4 - Tab 4 - - - gui_hint - - - - alias - - - - _coordinate - (600, 11) - - - _rotation - 0 - - - - qtgui_time_sink_x - - id - qtgui_time_sink_x_0_0 - - - _enabled - True - - - type - float - - - name - "Tone Detection" - - - ylabel - Amplitude - - - yunit - "" - - - size - 1024 - - - srate - samp_rate/4 - - - grid - False - - - autoscale - False - - - ymin - -1 - - - ymax - 1 - - - nconnections - 2 - - - update_time - 0.10 - - - entags - True - - - gui_hint - tab@0 - - - tr_mode - qtgui.TRIG_MODE_FREE - - - tr_slope - qtgui.TRIG_SLOPE_POS - - - tr_level - 0.0 - - - tr_delay - 0 - - - tr_chan - 0 - - - tr_tag - "" - - - label1 - - - - width1 - 1 - - - color1 - "blue" - - - style1 - 1 - - - marker1 - -1 - - - alpha1 - 1.0 - - - label2 - - - - width2 - 1 - - - color2 - "red" - - - style2 - 1 - - - marker2 - -1 - - - alpha2 - 1.0 - - - label3 - - - - width3 - 1 - - - color3 - "green" - - - style3 - 1 - - - marker3 - -1 - - - alpha3 - 1.0 - - - label4 - - - - width4 - 1 - - - color4 - "black" - - - style4 - 1 - - - marker4 - -1 - - - alpha4 - 1.0 - - - label5 - - - - width5 - 1 - - - color5 - "cyan" - - - style5 - 1 - - - marker5 - -1 - - - alpha5 - 1.0 - - - label6 - - - - width6 - 1 - - - color6 - "magenta" - - - style6 - 1 - - - marker6 - -1 - - - alpha6 - 1.0 - - - label7 - - - - width7 - 1 - - - color7 - "yellow" - - - style7 - 1 - - - marker7 - -1 - - - alpha7 - 1.0 - - - label8 - - - - width8 - 1 - - - color8 - "dark red" - - - style8 - 1 - - - marker8 - -1 - - - alpha8 - 1.0 - - - label9 - - - - width9 - 1 - - - color9 - "dark green" - - - style9 - 1 - - - marker9 - -1 - - - alpha9 - 1.0 - - - label10 - - - - width10 - 1 - - - color10 - "blue" - - - style10 - 1 - - - marker10 - -1 - - - alpha10 - 1.0 - - - alias - - - - affinity - - - - _coordinate - (728, 67) - - - _rotation - 0 - - - - qtgui_time_sink_x - - id - qtgui_time_sink_x_0_0_0 - - - _enabled - True - - - type - float - - - name - "AGC" - - - ylabel - Amplitude - - - yunit - "" - - - size - 1024/4 - - - srate - samp_rate/4 - - - grid - False - - - autoscale - False - - - ymin - -1 - - - ymax - 1 - - - nconnections - 3 - - - update_time - 0.10 - - - entags - True - - - gui_hint - tab@1 - - - tr_mode - qtgui.TRIG_MODE_FREE - - - tr_slope - qtgui.TRIG_SLOPE_POS - - - tr_level - 0.0 - - - tr_delay - 0 - - - tr_chan - 0 - - - tr_tag - "" - - - label1 - - - - width1 - 1 - - - color1 - "blue" - - - style1 - 1 - - - marker1 - -1 - - - alpha1 - 1.0 - - - label2 - - - - width2 - 1 - - - color2 - "red" - - - style2 - 1 - - - marker2 - -1 - - - alpha2 - 1.0 - - - label3 - - - - width3 - 1 - - - color3 - "green" - - - style3 - 1 - - - marker3 - -1 - - - alpha3 - 1.0 - - - label4 - - - - width4 - 1 - - - color4 - "black" - - - style4 - 1 - - - marker4 - -1 - - - alpha4 - 1.0 - - - label5 - - - - width5 - 1 - - - color5 - "cyan" - - - style5 - 1 - - - marker5 - -1 - - - alpha5 - 1.0 - - - label6 - - - - width6 - 1 - - - color6 - "magenta" - - - style6 - 1 - - - marker6 - -1 - - - alpha6 - 1.0 - - - label7 - - - - width7 - 1 - - - color7 - "yellow" - - - style7 - 1 - - - marker7 - -1 - - - alpha7 - 1.0 - - - label8 - - - - width8 - 1 - - - color8 - "dark red" - - - style8 - 1 - - - marker8 - -1 - - - alpha8 - 1.0 - - - label9 - - - - width9 - 1 - - - color9 - "dark green" - - - style9 - 1 - - - marker9 - -1 - - - alpha9 - 1.0 - - - label10 - - - - width10 - 1 - - - color10 - "blue" - - - style10 - 1 - - - marker10 - -1 - - - alpha10 - 1.0 - - - alias - - - - affinity - - - - _coordinate - (1072, 48) - - - _rotation - 0 - - - - qtgui_time_sink_x - - id - qtgui_time_sink_x_0_0_0_0 - - - _enabled - True - - - type - float - - - name - "Bits" - - - ylabel - Amplitude - - - yunit - "" - - - size - 1024/4/4 - - - srate - samp_rate/4/4 - - - grid - False - - - autoscale - False - - - ymin - -1 - - - ymax - 1 - - - nconnections - 1 - - - update_time - 0.10 - - - entags - True - - - gui_hint - tab@1 - - - tr_mode - qtgui.TRIG_MODE_FREE - - - tr_slope - qtgui.TRIG_SLOPE_POS - - - tr_level - 0.0 - - - tr_delay - 0 - - - tr_chan - 0 - - - tr_tag - "" - - - label1 - - - - width1 - 1 - - - color1 - "blue" - - - style1 - 0 - - - marker1 - 0 - - - alpha1 - 1.0 - - - label2 - - - - width2 - 1 - - - color2 - "red" - - - style2 - 1 - - - marker2 - -1 - - - alpha2 - 1.0 - - - label3 - - - - width3 - 1 - - - color3 - "green" - - - style3 - 1 - - - marker3 - -1 - - - alpha3 - 1.0 - - - label4 - - - - width4 - 1 - - - color4 - "black" - - - style4 - 1 - - - marker4 - -1 - - - alpha4 - 1.0 - - - label5 - - - - width5 - 1 - - - color5 - "cyan" - - - style5 - 1 - - - marker5 - -1 - - - alpha5 - 1.0 - - - label6 - - - - width6 - 1 - - - color6 - "magenta" - - - style6 - 1 - - - marker6 - -1 - - - alpha6 - 1.0 - - - label7 - - - - width7 - 1 - - - color7 - "yellow" - - - style7 - 1 - - - marker7 - -1 - - - alpha7 - 1.0 - - - label8 - - - - width8 - 1 - - - color8 - "dark red" - - - style8 - 1 - - - marker8 - -1 - - - alpha8 - 1.0 - - - label9 - - - - width9 - 1 - - - color9 - "dark green" - - - style9 - 1 - - - marker9 - -1 - - - alpha9 - 1.0 - - - label10 - - - - width10 - 1 - - - color10 - "blue" - - - style10 - 1 - - - marker10 - -1 - - - alpha10 - 1.0 - - - alias - - - - affinity - - - - _coordinate - (472, 664) - - - _rotation - 0 - - - - rational_resampler_xxx - - id - rational_resampler_xxx_0 - - - _enabled - True - - - type - fff - - - interp - samp_rate - - - decim - 44100 - - - taps - - - - fbw - 0 - - - alias - - - - affinity - - - - minoutbuf - 0 - - - maxoutbuf - 0 - - - _coordinate - (56, 267) - - - _rotation - 0 - - - - bruninga_direwolf_agc - - id - bruninga_direwolf_agc_0 - - - _enabled - True - - - attack - attack - - - decay - decay - - - alias - - - - affinity - - - - minoutbuf - 0 - - - maxoutbuf - 0 - - - _coordinate - (920, 216) - - - _rotation - 0 - - - - qtgui_time_sink_x - - id - qtgui_time_sink_x_0 - - - _enabled - True - - - type - float - - - name - "Bandpass Audio" - - - ylabel - Amplitude - - - yunit - "" - - - size - 1024 - - - srate - samp_rate - - - grid - False - - - autoscale - False - - - ymin - -1 - - - ymax - 1 - - - nconnections - 1 - - - update_time - 0.10 - - - entags - True - - - gui_hint - tab@0 - - - tr_mode - qtgui.TRIG_MODE_FREE - - - tr_slope - qtgui.TRIG_SLOPE_POS - - - tr_level - 0.0 - - - tr_delay - 0 - - - tr_chan - 0 - - - tr_tag - "" - - - label1 - - - - width1 - 1 - - - color1 - "blue" - - - style1 - 1 - - - marker1 - -1 - - - alpha1 - 1.0 - - - label2 - - - - width2 - 1 - - - color2 - "red" - - - style2 - 1 - - - marker2 - -1 - - - alpha2 - 1.0 - - - label3 - - - - width3 - 1 - - - color3 - "green" - - - style3 - 1 - - - marker3 - -1 - - - alpha3 - 1.0 - - - label4 - - - - width4 - 1 - - - color4 - "black" - - - style4 - 1 - - - marker4 - -1 - - - alpha4 - 1.0 - - - label5 - - - - width5 - 1 - - - color5 - "cyan" - - - style5 - 1 - - - marker5 - -1 - - - alpha5 - 1.0 - - - label6 - - - - width6 - 1 - - - color6 - "magenta" - - - style6 - 1 - - - marker6 - -1 - - - alpha6 - 1.0 - - - label7 - - - - width7 - 1 - - - color7 - "yellow" - - - style7 - 1 - - - marker7 - -1 - - - alpha7 - 1.0 - - - label8 - - - - width8 - 1 - - - color8 - "dark red" - - - style8 - 1 - - - marker8 - -1 - - - alpha8 - 1.0 - - - label9 - - - - width9 - 1 - - - color9 - "dark green" - - - style9 - 1 - - - marker9 - -1 - - - alpha9 - 1.0 - - - label10 - - - - width10 - 1 - - - color10 - "blue" - - - style10 - 1 - - - marker10 - -1 - - - alpha10 - 1.0 - - - alias - - - - affinity - - - - _coordinate - (48, 491) - - - _rotation - 0 - - - - blocks_throttle - - id - blocks_throttle_0 - - - _enabled - False - - - type - float - - - samples_per_second - 44100 - - - vlen - 1 - - - ignoretag - True - - - alias - - - - affinity - - - - minoutbuf - 0 - - - maxoutbuf - 0 - - - _coordinate - (64, 203) - - - _rotation - 0 - - - - audio_source - - id - audio_source_0 - - - _enabled - True - - - samp_rate - 44100 - - - device_name - - - - ok_to_block - True - - - num_outputs - 1 - - - alias - - - - affinity - - - - minoutbuf - 0 - - - maxoutbuf - 0 - - - _coordinate - (40, 371) - - - _rotation - 0 - - - - blocks_wavfile_source - - id - blocks_wavfile_source_0 - - - _enabled - False - - - file - /home/tkuester/Downloads/TNC_Test/basename01.wav - - - repeat - False - - - nchan - 1 - - - alias - - - - affinity - - - - minoutbuf - 0 - - - maxoutbuf - 0 - - - _coordinate - (32, 123) - - - _rotation - 0 - - - - blocks_throttle_0 - rational_resampler_xxx_0 - 0 - 0 - - - rational_resampler_xxx_0 - band_pass_filter_0 - 0 - 0 - - - band_pass_filter_0 - freq_xlating_fir_filter_xxx_0_0 - 0 - 0 - - - band_pass_filter_0 - freq_xlating_fir_filter_xxx_0 - 0 - 0 - - - blocks_wavfile_source_0 - blocks_throttle_0 - 0 - 0 - - - bruninga_direwolf_agc_0_0 - blocks_sub_xx_1 - 0 - 1 - - - freq_xlating_fir_filter_xxx_0 - blocks_complex_to_mag_0 - 0 - 0 - - - blocks_sub_xx_1 - digital_clock_recovery_mm_xx_0 - 0 - 0 - - - digital_diff_decoder_bb_0 - blocks_not_xx_0 - 0 - 0 - - - digital_binary_slicer_fb_0 - digital_diff_decoder_bb_0 - 0 - 0 - - - blocks_not_xx_0 - blocks_and_const_xx_0 - 0 - 0 - - - blocks_and_const_xx_0 - digital_hdlc_deframer_bp_0 - 0 - 0 - - - digital_hdlc_deframer_bp_0 - bruninga_hdlc_to_ax25_1 - out - in - - - digital_clock_recovery_mm_xx_0 - digital_binary_slicer_fb_0 - 0 - 0 - - - bruninga_direwolf_agc_0 - blocks_sub_xx_1 - 0 - 0 - - - blocks_complex_to_mag_0 - bruninga_direwolf_agc_0 - 0 - 0 - - - blocks_complex_to_mag_0_0 - bruninga_direwolf_agc_0_0 - 0 - 0 - - - freq_xlating_fir_filter_xxx_0_0 - blocks_complex_to_mag_0_0 - 0 - 0 - - - audio_source_0 - rational_resampler_xxx_0 - 0 - 0 - - - band_pass_filter_0 - qtgui_time_sink_x_0 - 0 - 0 - - - blocks_complex_to_mag_0 - qtgui_time_sink_x_0_0 - 0 - 0 - - - blocks_complex_to_mag_0_0 - qtgui_time_sink_x_0_0 - 0 - 1 - - - bruninga_direwolf_agc_0 - qtgui_time_sink_x_0_0_0 - 1 - 1 - - - bruninga_direwolf_agc_0 - qtgui_time_sink_x_0_0_0 - 2 - 2 - - - digital_clock_recovery_mm_xx_0 - qtgui_time_sink_x_0_0_0_0 - 0 - 0 - - - blocks_complex_to_mag_0 - qtgui_time_sink_x_0_0_0 - 0 - 0 - - - blocks_wavfile_source_0 - rational_resampler_xxx_0 - 0 - 0 - - +options: + parameters: + author: '' + catch_exceptions: 'True' + category: Custom + cmake_opt: '' + comment: '' + copyright: '' + description: '' + gen_cmake: 'On' + gen_linking: dynamic + generate_options: qt_gui + hier_block_src_path: '.:' + id: aprs_wav + max_nouts: '0' + output_language: python + placement: (0,0) + qt_qss_theme: '' + realtime_scheduling: '' + run: 'True' + run_command: '{python} -u {filename}' + run_options: run + sizing_mode: fixed + thread_safe_setters: '' + title: '' + window_size: 1280, 1024 + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [8, 11] + rotation: 180 + state: enabled + +blocks: +- name: attack + id: variable + parameters: + comment: '' + value: '0.8' + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [1104, 4.0] + rotation: 0 + state: enabled +- name: bpf_trans + id: variable + parameters: + comment: '' + value: '200' + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [1496, 4.0] + rotation: 0 + state: enabled +- name: bpf_width + id: variable + parameters: + comment: '' + value: '800' + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [1368, 4.0] + rotation: 0 + state: enabled +- name: decay + id: variable + parameters: + comment: '' + value: '0.00022' + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [984, 4.0] + rotation: 0 + state: enabled +- name: gain_mu + id: variable + parameters: + comment: '' + value: '0.45' + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [336, 492.0] + rotation: 0 + state: enabled +- name: samp_rate + id: variable + parameters: + comment: '' + value: '19200' + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [488, 4.0] + rotation: 0 + state: enabled +- name: window_field + id: variable + parameters: + comment: '' + value: signal_tools.windows.cosine(window_len) + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [440, 84.0] + rotation: 0 + state: enabled +- name: window_len + id: variable + parameters: + comment: '' + value: samp_rate/1200*2 + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [1232, 4.0] + rotation: 0 + state: enabled +- name: audio_source_0 + id: audio_source + parameters: + affinity: '' + alias: '' + comment: '' + device_name: '' + maxoutbuf: '0' + minoutbuf: '0' + num_outputs: '1' + ok_to_block: 'True' + samp_rate: '44100' + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [24, 388.0] + rotation: 0 + state: enabled +- name: band_pass_filter_0 + id: band_pass_filter + parameters: + affinity: '' + alias: '' + beta: '6.76' + comment: '' + decim: '1' + gain: '1' + high_cutoff_freq: 1700+bpf_width + interp: '1' + low_cutoff_freq: 1700-bpf_width + maxoutbuf: '0' + minoutbuf: '0' + samp_rate: samp_rate + type: fir_filter_fff + width: bpf_trans + win: window.WIN_RECTANGULAR + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [560, 292.0] + rotation: 0 + state: enabled +- name: blocks_and_const_xx_0 + id: blocks_and_const_xx + parameters: + affinity: '' + alias: '' + comment: '' + const: '1' + maxoutbuf: '0' + minoutbuf: '0' + type: byte + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [768, 540.0] + rotation: 0 + state: enabled +- name: blocks_complex_to_mag_0 + id: blocks_complex_to_mag + parameters: + affinity: '' + alias: '' + comment: '' + maxoutbuf: '0' + minoutbuf: '0' + vlen: '1' + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [1120, 256.0] + rotation: 0 + state: enabled +- name: blocks_complex_to_mag_0_0 + id: blocks_complex_to_mag + parameters: + affinity: '' + alias: '' + comment: '' + maxoutbuf: '0' + minoutbuf: '0' + vlen: '1' + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [1048, 384.0] + rotation: 0 + state: enabled +- name: blocks_not_xx_0 + id: blocks_not_xx + parameters: + affinity: '' + alias: '' + comment: '' + maxoutbuf: '0' + minoutbuf: '0' + type: byte + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [680, 544.0] + rotation: 0 + state: enabled +- name: blocks_sub_xx_1 + id: blocks_sub_xx + parameters: + affinity: '' + alias: '' + comment: '' + maxoutbuf: '0' + minoutbuf: '0' + num_inputs: '2' + type: float + vlen: '1' + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [1600, 276.0] + rotation: 0 + state: enabled +- name: blocks_throttle_0 + id: blocks_throttle + parameters: + affinity: '' + alias: '' + comment: '' + ignoretag: 'True' + maxoutbuf: '0' + minoutbuf: '0' + samples_per_second: '44100' + type: float + vlen: '1' + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [96, 212.0] + rotation: 0 + state: disabled +- name: blocks_wavfile_source_0 + id: blocks_wavfile_source + parameters: + affinity: '' + alias: '' + comment: '' + file: examples/recordings/ISSpkt_full.wav + maxoutbuf: '0' + minoutbuf: '0' + nchan: '1' + repeat: 'False' + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [24, 108.0] + rotation: 0 + state: disabled +- name: bruninga_direwolf_agc_0 + id: bruninga_direwolf_agc + parameters: + affinity: '' + alias: '' + attack: attack + comment: '' + decay: decay + maxoutbuf: '0' + minoutbuf: '0' + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [1248, 132.0] + rotation: 0 + state: enabled +- name: bruninga_direwolf_agc_0_0 + id: bruninga_direwolf_agc + parameters: + affinity: '' + alias: '' + attack: attack + comment: '' + decay: decay + maxoutbuf: '0' + minoutbuf: '0' + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [1304, 308.0] + rotation: 0 + state: enabled +- name: bruninga_hdlc_to_ax25_1 + id: bruninga_hdlc_to_ax25 + parameters: + affinity: '' + alias: '' + comment: '' + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [1072, 544.0] + rotation: 0 + state: enabled +- name: digital_binary_slicer_fb_0 + id: digital_binary_slicer_fb + parameters: + affinity: '' + alias: '' + comment: '' + maxoutbuf: '0' + minoutbuf: '0' + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [512, 600.0] + rotation: 0 + state: enabled +- name: digital_clock_recovery_mm_xx_0 + id: digital_clock_recovery_mm_xx + parameters: + affinity: '' + alias: '' + comment: '' + gain_mu: gain_mu + gain_omega: 0.25*gain_mu*gain_mu + maxoutbuf: '0' + minoutbuf: '0' + mu: '0.5' + omega: 4*(1+0.0) + omega_relative_limit: '0.05' + type: float + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [296, 564.0] + rotation: 0 + state: enabled +- name: digital_diff_decoder_bb_0 + id: digital_diff_decoder_bb + parameters: + affinity: '' + alias: '' + coding: digital.DIFF_DIFFERENTIAL + comment: '' + maxoutbuf: '0' + minoutbuf: '0' + modulus: '2' + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [664, 596.0] + rotation: 0 + state: enabled +- name: digital_hdlc_deframer_bp_0 + id: digital_hdlc_deframer_bp + parameters: + affinity: '' + alias: '' + comment: '' + max: '500' + maxoutbuf: '0' + min: '15' + minoutbuf: '0' + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [904, 532.0] + rotation: 0 + state: enabled +- name: freq_xlating_fir_filter_xxx_0 + id: freq_xlating_fir_filter_xxx + parameters: + affinity: '' + alias: '' + center_freq: '1200' + comment: '' + decim: '4' + maxoutbuf: '0' + minoutbuf: '0' + samp_rate: samp_rate + taps: window_field + type: fcf + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [760, 148.0] + rotation: 0 + state: enabled +- name: freq_xlating_fir_filter_xxx_0_0 + id: freq_xlating_fir_filter_xxx + parameters: + affinity: '' + alias: '' + center_freq: '2200' + comment: '' + decim: '4' + maxoutbuf: '0' + minoutbuf: '0' + samp_rate: samp_rate + taps: window_field + type: fcf + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [896, 348.0] + rotation: 0 + state: enabled +- name: import_0 + id: import + parameters: + alias: '' + comment: '' + imports: import math + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [240, 4.0] + rotation: 0 + state: enabled +- name: import_0_0 + id: import + parameters: + alias: '' + comment: '' + imports: import scipy.signal as signal_tools + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [616, 4.0] + rotation: 0 + state: enabled +- name: import_0_0_0 + id: import + parameters: + alias: '' + comment: '' + imports: from gnuradio import filter + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [368, 4.0] + rotation: 0 + state: enabled +- name: qtgui_time_sink_x_0 + id: qtgui_time_sink_x + parameters: + affinity: '' + alias: '' + alpha1: '1.0' + alpha10: '1.0' + alpha2: '1.0' + alpha3: '1.0' + alpha4: '1.0' + alpha5: '1.0' + alpha6: '1.0' + alpha7: '1.0' + alpha8: '1.0' + alpha9: '1.0' + autoscale: 'False' + axislabels: 'True' + color1: blue + color10: dark blue + color2: red + color3: green + color4: black + color5: cyan + color6: magenta + color7: yellow + color8: dark red + color9: dark green + comment: '' + ctrlpanel: 'False' + entags: 'True' + grid: 'False' + gui_hint: tab@0 + label1: '' + label10: '' + label2: '' + label3: '' + label4: '' + label5: '' + label6: '' + label7: '' + label8: '' + label9: '' + legend: 'True' + marker1: '-1' + marker10: '-1' + marker2: '-1' + marker3: '-1' + marker4: '-1' + marker5: '-1' + marker6: '-1' + marker7: '-1' + marker8: '-1' + marker9: '-1' + name: '"Bandpass Audio"' + nconnections: '1' + size: '1024' + srate: samp_rate + stemplot: 'False' + style1: '1' + style10: '1' + style2: '1' + style3: '1' + style4: '1' + style5: '1' + style6: '1' + style7: '1' + style8: '1' + style9: '1' + tr_chan: '0' + tr_delay: '0' + tr_level: '0.0' + tr_mode: qtgui.TRIG_MODE_FREE + tr_slope: qtgui.TRIG_SLOPE_POS + tr_tag: '""' + type: float + update_time: '0.10' + width1: '1' + width10: '1' + width2: '1' + width3: '1' + width4: '1' + width5: '1' + width6: '1' + width7: '1' + width8: '1' + width9: '1' + ylabel: Amplitude + ymax: '1' + ymin: '-1' + yunit: '""' + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [64, 476.0] + rotation: 0 + state: enabled +- name: qtgui_time_sink_x_0_0 + id: qtgui_time_sink_x + parameters: + affinity: '' + alias: '' + alpha1: '1.0' + alpha10: '1.0' + alpha2: '1.0' + alpha3: '1.0' + alpha4: '1.0' + alpha5: '1.0' + alpha6: '1.0' + alpha7: '1.0' + alpha8: '1.0' + alpha9: '1.0' + autoscale: 'False' + axislabels: 'True' + color1: blue + color10: dark blue + color2: red + color3: green + color4: black + color5: cyan + color6: magenta + color7: yellow + color8: dark red + color9: dark green + comment: '' + ctrlpanel: 'False' + entags: 'True' + grid: 'False' + gui_hint: tab@0 + label1: '' + label10: '' + label2: '' + label3: '' + label4: '' + label5: '' + label6: '' + label7: '' + label8: '' + label9: '' + legend: 'True' + marker1: '-1' + marker10: '-1' + marker2: '-1' + marker3: '-1' + marker4: '-1' + marker5: '-1' + marker6: '-1' + marker7: '-1' + marker8: '-1' + marker9: '-1' + name: '"Tone Detection"' + nconnections: '2' + size: '1024' + srate: samp_rate/4 + stemplot: 'False' + style1: '1' + style10: '1' + style2: '1' + style3: '1' + style4: '1' + style5: '1' + style6: '1' + style7: '1' + style8: '1' + style9: '1' + tr_chan: '0' + tr_delay: '0' + tr_level: '0.0' + tr_mode: qtgui.TRIG_MODE_FREE + tr_slope: qtgui.TRIG_SLOPE_POS + tr_tag: '""' + type: float + update_time: '0.10' + width1: '1' + width10: '1' + width2: '1' + width3: '1' + width4: '1' + width5: '1' + width6: '1' + width7: '1' + width8: '1' + width9: '1' + ylabel: Amplitude + ymax: '1' + ymin: '-1' + yunit: '""' + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [1464, 460.0] + rotation: 0 + state: enabled +- name: qtgui_time_sink_x_0_0_0 + id: qtgui_time_sink_x + parameters: + affinity: '' + alias: '' + alpha1: '1.0' + alpha10: '1.0' + alpha2: '1.0' + alpha3: '1.0' + alpha4: '1.0' + alpha5: '1.0' + alpha6: '1.0' + alpha7: '1.0' + alpha8: '1.0' + alpha9: '1.0' + autoscale: 'False' + axislabels: 'True' + color1: blue + color10: dark blue + color2: red + color3: green + color4: black + color5: cyan + color6: magenta + color7: yellow + color8: dark red + color9: dark green + comment: '' + ctrlpanel: 'False' + entags: 'True' + grid: 'False' + gui_hint: tab@1 + label1: '' + label10: '' + label2: '' + label3: '' + label4: '' + label5: '' + label6: '' + label7: '' + label8: '' + label9: '' + legend: 'True' + marker1: '-1' + marker10: '-1' + marker2: '-1' + marker3: '-1' + marker4: '-1' + marker5: '-1' + marker6: '-1' + marker7: '-1' + marker8: '-1' + marker9: '-1' + name: '"AGC"' + nconnections: '3' + size: int(1024/4) + srate: samp_rate/4 + stemplot: 'False' + style1: '1' + style10: '1' + style2: '1' + style3: '1' + style4: '1' + style5: '1' + style6: '1' + style7: '1' + style8: '1' + style9: '1' + tr_chan: '0' + tr_delay: '0' + tr_level: '0.0' + tr_mode: qtgui.TRIG_MODE_FREE + tr_slope: qtgui.TRIG_SLOPE_POS + tr_tag: '""' + type: float + update_time: '0.10' + width1: '1' + width10: '1' + width2: '1' + width3: '1' + width4: '1' + width5: '1' + width6: '1' + width7: '1' + width8: '1' + width9: '1' + ylabel: Amplitude + ymax: '1' + ymin: '-1' + yunit: '""' + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [1576, 108.0] + rotation: 0 + state: enabled +- name: qtgui_time_sink_x_0_0_0_0 + id: qtgui_time_sink_x + parameters: + affinity: '' + alias: '' + alpha1: '1.0' + alpha10: '1.0' + alpha2: '1.0' + alpha3: '1.0' + alpha4: '1.0' + alpha5: '1.0' + alpha6: '1.0' + alpha7: '1.0' + alpha8: '1.0' + alpha9: '1.0' + autoscale: 'False' + axislabels: 'True' + color1: blue + color10: dark blue + color2: red + color3: green + color4: black + color5: cyan + color6: magenta + color7: yellow + color8: dark red + color9: dark green + comment: '' + ctrlpanel: 'False' + entags: 'True' + grid: 'False' + gui_hint: tab@1 + label1: '' + label10: '' + label2: '' + label3: '' + label4: '' + label5: '' + label6: '' + label7: '' + label8: '' + label9: '' + legend: 'True' + marker1: '0' + marker10: '-1' + marker2: '-1' + marker3: '-1' + marker4: '-1' + marker5: '-1' + marker6: '-1' + marker7: '-1' + marker8: '-1' + marker9: '-1' + name: '"Bits"' + nconnections: '1' + size: int(1024/4/4) + srate: samp_rate/4/4 + stemplot: 'False' + style1: '0' + style10: '1' + style2: '1' + style3: '1' + style4: '1' + style5: '1' + style6: '1' + style7: '1' + style8: '1' + style9: '1' + tr_chan: '0' + tr_delay: '0' + tr_level: '0.0' + tr_mode: qtgui.TRIG_MODE_FREE + tr_slope: qtgui.TRIG_SLOPE_POS + tr_tag: '""' + type: float + update_time: '0.10' + width1: '1' + width10: '1' + width2: '1' + width3: '1' + width4: '1' + width5: '1' + width6: '1' + width7: '1' + width8: '1' + width9: '1' + ylabel: Amplitude + ymax: '1' + ymin: '-1' + yunit: '""' + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [504, 676.0] + rotation: 0 + state: enabled +- name: rational_resampler_xxx_0 + id: rational_resampler_xxx + parameters: + affinity: '' + alias: '' + comment: '' + decim: '44100' + fbw: '0' + interp: samp_rate + maxoutbuf: '0' + minoutbuf: '0' + taps: '' + type: fff + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [312, 276.0] + rotation: 0 + state: enabled +- name: tab + id: qtgui_tab_widget + parameters: + alias: '' + comment: '' + gui_hint: '' + label0: Audio + label1: Data + label10: Tab 10 + label11: Tab 11 + label12: Tab 12 + label13: Tab 13 + label14: Tab 14 + label15: Tab 15 + label16: Tab 16 + label17: Tab 17 + label18: Tab 18 + label19: Tab 19 + label2: Tab 2 + label3: Tab 3 + label4: Tab 4 + label5: Tab 5 + label6: Tab 6 + label7: Tab 7 + label8: Tab 8 + label9: Tab 9 + num_tabs: '2' + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [792, 4.0] + rotation: 0 + state: enabled + +connections: +- [audio_source_0, '0', rational_resampler_xxx_0, '0'] +- [band_pass_filter_0, '0', freq_xlating_fir_filter_xxx_0, '0'] +- [band_pass_filter_0, '0', freq_xlating_fir_filter_xxx_0_0, '0'] +- [band_pass_filter_0, '0', qtgui_time_sink_x_0, '0'] +- [blocks_and_const_xx_0, '0', digital_hdlc_deframer_bp_0, '0'] +- [blocks_complex_to_mag_0, '0', bruninga_direwolf_agc_0, '0'] +- [blocks_complex_to_mag_0, '0', qtgui_time_sink_x_0_0, '0'] +- [blocks_complex_to_mag_0, '0', qtgui_time_sink_x_0_0_0, '0'] +- [blocks_complex_to_mag_0_0, '0', bruninga_direwolf_agc_0_0, '0'] +- [blocks_complex_to_mag_0_0, '0', qtgui_time_sink_x_0_0, '1'] +- [blocks_not_xx_0, '0', blocks_and_const_xx_0, '0'] +- [blocks_sub_xx_1, '0', digital_clock_recovery_mm_xx_0, '0'] +- [blocks_throttle_0, '0', rational_resampler_xxx_0, '0'] +- [blocks_wavfile_source_0, '0', blocks_throttle_0, '0'] +- [bruninga_direwolf_agc_0, '0', blocks_sub_xx_1, '0'] +- [bruninga_direwolf_agc_0, '1', qtgui_time_sink_x_0_0_0, '1'] +- [bruninga_direwolf_agc_0, '2', qtgui_time_sink_x_0_0_0, '2'] +- [bruninga_direwolf_agc_0_0, '0', blocks_sub_xx_1, '1'] +- [digital_binary_slicer_fb_0, '0', digital_diff_decoder_bb_0, '0'] +- [digital_clock_recovery_mm_xx_0, '0', digital_binary_slicer_fb_0, '0'] +- [digital_clock_recovery_mm_xx_0, '0', qtgui_time_sink_x_0_0_0_0, '0'] +- [digital_diff_decoder_bb_0, '0', blocks_not_xx_0, '0'] +- [digital_hdlc_deframer_bp_0, out, bruninga_hdlc_to_ax25_1, in] +- [freq_xlating_fir_filter_xxx_0, '0', blocks_complex_to_mag_0, '0'] +- [freq_xlating_fir_filter_xxx_0_0, '0', blocks_complex_to_mag_0_0, '0'] +- [rational_resampler_xxx_0, '0', band_pass_filter_0, '0'] + +metadata: + file_format: 1 + grc_version: v3.11.0.0git-82-gbc248667 diff --git a/grc/CMakeLists.txt b/grc/CMakeLists.txt index f4c63e5..6d35bb9 100644 --- a/grc/CMakeLists.txt +++ b/grc/CMakeLists.txt @@ -17,9 +17,9 @@ # the Free Software Foundation, Inc., 51 Franklin Street, # Boston, MA 02110-1301, USA. install(FILES - bruninga_hdlc_to_ax25.xml - bruninga_direwolf_agc.xml - bruninga_str_to_aprs.xml - bruninga_ax25_fsk_mod.xml - bruninga_fsk_demod.xml DESTINATION share/gnuradio/grc/blocks + bruninga_hdlc_to_ax25.block.yml + bruninga_direwolf_agc.block.yml + bruninga_str_to_aprs.block.yml + bruninga_ax25_fsk_mod.block.yml + bruninga_fsk_demod.block.yml DESTINATION share/gnuradio/grc/blocks ) diff --git a/grc/bruninga_ax25_fsk_mod.block.yml b/grc/bruninga_ax25_fsk_mod.block.yml new file mode 100644 index 0000000..2ffcd61 --- /dev/null +++ b/grc/bruninga_ax25_fsk_mod.block.yml @@ -0,0 +1,46 @@ +# auto-generated by grc.converter + +id: bruninga_ax25_fsk_mod +label: AX.25 FSK Modulator +category: '[bruninga]' + +parameters: +- id: samp_rate + label: Sample Rate + dtype: int + default: samp_rate +- id: preamble_len_ms + label: Preamble Len (ms) + dtype: float + default: '300' +- id: flag_count + label: Flag Count + dtype: int + default: '5' +- id: mark_freq + label: Mark Frequency (Hz) + dtype: int + default: '2200' +- id: space_freq + label: Space Frequency (Hz) + dtype: int + default: '1200' +- id: baud_rate + label: Baud Rate + dtype: int + default: '1200' + +inputs: +- domain: message + id: in + +outputs: +- domain: stream + dtype: float + +templates: + imports: import gnuradio.bruninga as bruninga + make: bruninga.ax25_fsk_mod(${samp_rate}, ${preamble_len_ms}, ${flag_count}, ${mark_freq}, + ${space_freq}, ${baud_rate}) + +file_format: 1 diff --git a/grc/bruninga_ax25_fsk_mod.xml b/grc/bruninga_ax25_fsk_mod.xml deleted file mode 100644 index 04c4a14..0000000 --- a/grc/bruninga_ax25_fsk_mod.xml +++ /dev/null @@ -1,74 +0,0 @@ - - - AX.25 FSK Modulator - bruninga_ax25_fsk_mod - bruninga - import bruninga - bruninga.ax25_fsk_mod($samp_rate, $preamble_len_ms, $flag_count, $mark_freq, $space_freq, $baud_rate) - - - Sample Rate - samp_rate - samp_rate - int - - - - Preamble Len (ms) - preamble_len_ms - 300 - float - - - - Flag Count - flag_count - 5 - int - - - - Mark Frequency (Hz) - mark_freq - 2200 - int - - - - Space Frequency (Hz) - space_freq - 1200 - int - - - - Baud Rate - baud_rate - 1200 - int - - - - - in - message - - - - - out - float - - diff --git a/grc/bruninga_direwolf_agc.block.yml b/grc/bruninga_direwolf_agc.block.yml new file mode 100644 index 0000000..55d174f --- /dev/null +++ b/grc/bruninga_direwolf_agc.block.yml @@ -0,0 +1,37 @@ +# auto-generated by grc.converter + +id: bruninga_direwolf_agc +label: Direwolf AGC +category: '[bruninga]' + +parameters: +- id: attack + label: Attack + dtype: float + default: attack +- id: decay + label: Decay + dtype: float + default: attack + +inputs: +- domain: stream + dtype: float + +outputs: +- domain: stream + dtype: float +- label: peak + domain: stream + dtype: float + optional: true +- label: valley + domain: stream + dtype: float + optional: true + +templates: + imports: import gnuradio.bruninga as bruninga + make: bruninga.direwolf_agc(${attack}, ${decay}) + +file_format: 1 diff --git a/grc/bruninga_direwolf_agc.xml b/grc/bruninga_direwolf_agc.xml deleted file mode 100644 index 832db0b..0000000 --- a/grc/bruninga_direwolf_agc.xml +++ /dev/null @@ -1,55 +0,0 @@ - - - Direwolf AGC - bruninga_direwolf_agc - bruninga - import bruninga - bruninga.direwolf_agc($attack, $decay) - - - Attack - attack - attack - float - - - Decay - decay - attack - float - - - - - in - float - - - - - out - float - - - peak - float - 1 - - - valley - float - 1 - - diff --git a/grc/bruninga_fsk_demod.block.yml b/grc/bruninga_fsk_demod.block.yml new file mode 100644 index 0000000..0cc3e12 --- /dev/null +++ b/grc/bruninga_fsk_demod.block.yml @@ -0,0 +1,26 @@ +# auto-generated by grc.converter + +id: bruninga_fsk_demod +label: FSK Demodulator +category: '[bruninga]' +flags: [ python ] + +parameters: +- id: samp_rate + label: Sample Rate + dtype: float + default: samp_rate + +inputs: +- domain: stream + dtype: float + +outputs: +- domain: stream + dtype: byte + +templates: + imports: import gnuradio.bruninga as bruninga + make: bruninga.fsk_demod(${samp_rate}) + +file_format: 1 diff --git a/grc/bruninga_fsk_demod.xml b/grc/bruninga_fsk_demod.xml deleted file mode 100644 index a06c76a..0000000 --- a/grc/bruninga_fsk_demod.xml +++ /dev/null @@ -1,39 +0,0 @@ - - - FSK Demodulator - bruninga_fsk_demod - bruninga - import bruninga - bruninga.fsk_demod($samp_rate) - - - Sample Rate - samp_rate - samp_rate - float - - - - - in - float - - - - - out - byte - - diff --git a/grc/bruninga_hdlc_to_ax25.block.yml b/grc/bruninga_hdlc_to_ax25.block.yml new file mode 100644 index 0000000..71052d6 --- /dev/null +++ b/grc/bruninga_hdlc_to_ax25.block.yml @@ -0,0 +1,15 @@ +# auto-generated by grc.converter + +id: bruninga_hdlc_to_ax25 +label: HDLC to AX25 +category: '[bruninga]' + +inputs: +- domain: message + id: in + +templates: + imports: import gnuradio.bruninga as bruninga + make: bruninga.hdlc_to_ax25() + +file_format: 1 diff --git a/grc/bruninga_hdlc_to_ax25.xml b/grc/bruninga_hdlc_to_ax25.xml deleted file mode 100644 index f148082..0000000 --- a/grc/bruninga_hdlc_to_ax25.xml +++ /dev/null @@ -1,29 +0,0 @@ - - - HDLC to AX25 - bruninga_hdlc_to_ax25 - bruninga - import bruninga - bruninga.hdlc_to_ax25() - - - in - message - - - - - diff --git a/grc/bruninga_str_to_aprs.block.yml b/grc/bruninga_str_to_aprs.block.yml new file mode 100644 index 0000000..7ec2fd5 --- /dev/null +++ b/grc/bruninga_str_to_aprs.block.yml @@ -0,0 +1,30 @@ +# auto-generated by grc.converter + +id: bruninga_str_to_aprs +label: String to APRS +category: '[bruninga]' + +parameters: +- id: src + label: Source + dtype: string +- id: dest + label: Dest + dtype: string +- id: via + label: Via + dtype: raw + +inputs: +- domain: message + id: in + +outputs: +- domain: message + id: out + +templates: + imports: import gnuradio.bruninga as bruninga + make: bruninga.str_to_aprs(${src}, ${dest}, ${via}) + +file_format: 1 diff --git a/grc/bruninga_str_to_aprs.xml b/grc/bruninga_str_to_aprs.xml deleted file mode 100644 index b420cfc..0000000 --- a/grc/bruninga_str_to_aprs.xml +++ /dev/null @@ -1,50 +0,0 @@ - - - String to APRS - bruninga_str_to_aprs - bruninga - import bruninga - bruninga.str_to_aprs($src, $dest, $via) - - - Source - src - string - - - - Dest - dest - string - - - - Via - via - raw - - - - - in - message - - - - - out - message - - diff --git a/include/bruninga/CMakeLists.txt b/include/bruninga/CMakeLists.txt deleted file mode 100644 index 3497d2d..0000000 --- a/include/bruninga/CMakeLists.txt +++ /dev/null @@ -1,26 +0,0 @@ -# Copyright 2011,2012 Free Software Foundation, Inc. -# -# This file is part of GNU Radio -# -# GNU Radio is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 3, or (at your option) -# any later version. -# -# GNU Radio is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with GNU Radio; see the file COPYING. If not, write to -# the Free Software Foundation, Inc., 51 Franklin Street, -# Boston, MA 02110-1301, USA. - -######################################################################## -# Install public header files -######################################################################## -install(FILES - api.h - direwolf_agc.h DESTINATION include/bruninga -) diff --git a/include/bruninga/api.h b/include/bruninga/api.h deleted file mode 100644 index 3ac19e5..0000000 --- a/include/bruninga/api.h +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Copyright 2011 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ - -#ifndef INCLUDED_BRUNINGA_API_H -#define INCLUDED_BRUNINGA_API_H - -#include - -#ifdef gnuradio_bruninga_EXPORTS -# define BRUNINGA_API __GR_ATTR_EXPORT -#else -# define BRUNINGA_API __GR_ATTR_IMPORT -#endif - -#endif /* INCLUDED_BRUNINGA_API_H */ diff --git a/include/gnuradio/bruninga/CMakeLists.txt b/include/gnuradio/bruninga/CMakeLists.txt new file mode 100644 index 0000000..a16d977 --- /dev/null +++ b/include/gnuradio/bruninga/CMakeLists.txt @@ -0,0 +1,16 @@ +# Copyright 2011,2012 Free Software Foundation, Inc. +# +# This file was generated by gr_modtool, a tool from the GNU Radio framework +# This file is a part of gr-bruninga +# +# SPDX-License-Identifier: GPL-3.0-or-later +# + +######################################################################## +# Install public header files +######################################################################## +install(FILES + api.h + direwolf_agc.h + DESTINATION include/gnuradio/bruninga +) diff --git a/include/gnuradio/bruninga/api.h b/include/gnuradio/bruninga/api.h new file mode 100644 index 0000000..137335b --- /dev/null +++ b/include/gnuradio/bruninga/api.h @@ -0,0 +1,22 @@ +/* + * Copyright 2011 Free Software Foundation, Inc. + * + * This file was generated by gr_modtool, a tool from the GNU Radio framework + * This file is a part of gr-bruninga + * + * SPDX-License-Identifier: GPL-3.0-or-later + * + */ + +#ifndef INCLUDED_BRUNINGA_API_H +#define INCLUDED_BRUNINGA_API_H + +#include + +#ifdef gnuradio_bruninga_EXPORTS +#define BRUNINGA_API __GR_ATTR_EXPORT +#else +#define BRUNINGA_API __GR_ATTR_IMPORT +#endif + +#endif /* INCLUDED_BRUNINGA_API_H */ diff --git a/include/bruninga/direwolf_agc.h b/include/gnuradio/bruninga/direwolf_agc.h similarity index 96% rename from include/bruninga/direwolf_agc.h rename to include/gnuradio/bruninga/direwolf_agc.h index 6037a04..95dc2d6 100644 --- a/include/bruninga/direwolf_agc.h +++ b/include/gnuradio/bruninga/direwolf_agc.h @@ -22,7 +22,7 @@ #ifndef INCLUDED_BRUNINGA_DIREWOLF_AGC_H #define INCLUDED_BRUNINGA_DIREWOLF_AGC_H -#include +#include #include namespace gr { @@ -37,7 +37,7 @@ namespace gr { class BRUNINGA_API direwolf_agc : virtual public gr::sync_block { public: - typedef boost::shared_ptr sptr; + typedef std::shared_ptr sptr; /*! * \brief Return a shared_ptr to a new instance of bruninga::direwolf_agc. diff --git a/lib/CMakeLists.txt b/lib/CMakeLists.txt index 97064b2..33de2b1 100644 --- a/lib/CMakeLists.txt +++ b/lib/CMakeLists.txt @@ -1,42 +1,32 @@ -# Copyright 2011,2012 Free Software Foundation, Inc. +# Copyright 2011,2012,2016,2018,2019 Free Software Foundation, Inc. # -# This file is part of GNU Radio +# This file was generated by gr_modtool, a tool from the GNU Radio framework +# This file is a part of gr-bruninga # -# GNU Radio is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 3, or (at your option) -# any later version. +# SPDX-License-Identifier: GPL-3.0-or-later # -# GNU Radio is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with GNU Radio; see the file COPYING. If not, write to -# the Free Software Foundation, Inc., 51 Franklin Street, -# Boston, MA 02110-1301, USA. ######################################################################## # Setup library ######################################################################## include(GrPlatform) #define LIB_SUFFIX -include_directories(${Boost_INCLUDE_DIR}) -link_directories(${Boost_LIBRARY_DIRS}) - list(APPEND bruninga_sources direwolf_agc_impl.cc ) set(bruninga_sources "${bruninga_sources}" PARENT_SCOPE) if(NOT bruninga_sources) - MESSAGE(STATUS "No C++ sources... skipping lib/") - return() + MESSAGE(STATUS "No C++ sources... skipping lib/") + return() endif(NOT bruninga_sources) add_library(gnuradio-bruninga SHARED ${bruninga_sources}) -target_link_libraries(gnuradio-bruninga ${Boost_LIBRARIES} ${GNURADIO_ALL_LIBRARIES}) +target_link_libraries(gnuradio-bruninga gnuradio::gnuradio-runtime) +target_include_directories(gnuradio-bruninga + PUBLIC $ + PUBLIC $ + ) set_target_properties(gnuradio-bruninga PROPERTIES DEFINE_SYMBOL "gnuradio_bruninga_EXPORTS") if(APPLE) @@ -48,32 +38,37 @@ endif(APPLE) ######################################################################## # Install built library files ######################################################################## -install(TARGETS gnuradio-bruninga - LIBRARY DESTINATION lib${LIB_SUFFIX} # .so/.dylib file - ARCHIVE DESTINATION lib${LIB_SUFFIX} # .lib file - RUNTIME DESTINATION bin # .dll file -) +include(GrMiscUtils) +GR_LIBRARY_FOO(gnuradio-bruninga) + +######################################################################## +# Print summary +######################################################################## +message(STATUS "Using install prefix: ${CMAKE_INSTALL_PREFIX}") +message(STATUS "Building for version: ${VERSION} / ${LIBVER}") ######################################################################## # Build and register unit test ######################################################################## include(GrTest) -include_directories(${CPPUNIT_INCLUDE_DIRS}) - +# If your unit tests require special include paths, add them here +#include_directories() +# List all files that contain Boost.UTF unit tests here list(APPEND test_bruninga_sources - ${CMAKE_CURRENT_SOURCE_DIR}/test_bruninga.cc - ${CMAKE_CURRENT_SOURCE_DIR}/qa_bruninga.cc ) +# Anything we need to link to for the unit tests go here +list(APPEND GR_TEST_TARGET_DEPS gnuradio-bruninga) -add_executable(test-bruninga ${test_bruninga_sources}) +if(NOT test_bruninga_sources) + MESSAGE(STATUS "No C++ unit tests... skipping") + return() +endif(NOT test_bruninga_sources) -target_link_libraries( - test-bruninga - ${GNURADIO_RUNTIME_LIBRARIES} - ${Boost_LIBRARIES} - ${CPPUNIT_LIBRARIES} - gnuradio-bruninga -) +foreach(qa_file ${test_bruninga_sources}) + GR_ADD_CPP_TEST("bruninga_${qa_file}" + ${CMAKE_CURRENT_SOURCE_DIR}/${qa_file} + ) +endforeach(qa_file) -GR_ADD_TEST(test_bruninga test-bruninga) +GR_ADD_TEST(test_bruninga test-bruninga) \ No newline at end of file diff --git a/lib/direwolf_agc_impl.h b/lib/direwolf_agc_impl.h index 3b74ad8..6ff219b 100644 --- a/lib/direwolf_agc_impl.h +++ b/lib/direwolf_agc_impl.h @@ -21,7 +21,7 @@ #ifndef INCLUDED_BRUNINGA_DIREWOLF_AGC_IMPL_H #define INCLUDED_BRUNINGA_DIREWOLF_AGC_IMPL_H -#include +#include namespace gr { namespace bruninga { diff --git a/python/CMakeLists.txt b/python/CMakeLists.txt deleted file mode 100644 index 942296a..0000000 --- a/python/CMakeLists.txt +++ /dev/null @@ -1,48 +0,0 @@ -# Copyright 2011 Free Software Foundation, Inc. -# -# This file is part of GNU Radio -# -# GNU Radio is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 3, or (at your option) -# any later version. -# -# GNU Radio is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with GNU Radio; see the file COPYING. If not, write to -# the Free Software Foundation, Inc., 51 Franklin Street, -# Boston, MA 02110-1301, USA. - -######################################################################## -# Include python install macros -######################################################################## -include(GrPython) -if(NOT PYTHONINTERP_FOUND) - return() -endif() - -######################################################################## -# Install python sources -######################################################################## -GR_PYTHON_INSTALL( - FILES - __init__.py - packet.py - hdlc_to_ax25.py - str_to_aprs.py - ax25_fsk_mod.py - fsk_demod.py DESTINATION ${GR_PYTHON_DIR}/bruninga -) - -######################################################################## -# Handle the unit tests -######################################################################## -include(GrTest) - -set(GR_TEST_TARGET_DEPS gnuradio-bruninga) -set(GR_TEST_PYTHON_DIRS ${CMAKE_BINARY_DIR}/swig) -#GR_ADD_TEST(qa_hdlc_to_ax25 ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_hdlc_to_ax25.py) diff --git a/python/__init__.py b/python/__init__.py deleted file mode 100644 index b64cdef..0000000 --- a/python/__init__.py +++ /dev/null @@ -1,42 +0,0 @@ -# -# Copyright 2008,2009 Free Software Foundation, Inc. -# -# This application is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 3, or (at your option) -# any later version. -# -# This application is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -# - -# The presence of this file turns this directory into a Python package - -''' -This is the GNU Radio BRUNINGA module. Place your Python package -description here (python/__init__.py). -''' - -# import swig generated symbols into the bruninga namespace -try: - # this might fail if the module is python-only - from bruninga_swig import * -except ImportError: - pass - -# import any pure python here - -from hdlc_to_ax25 import hdlc_to_ax25 -from str_to_aprs import str_to_aprs -from ax25_fsk_mod import ax25_fsk_mod -from fsk_demod import fsk_demod - -import packet - -# diff --git a/python/bruninga/.gitignore b/python/bruninga/.gitignore new file mode 100644 index 0000000..85c92e8 --- /dev/null +++ b/python/bruninga/.gitignore @@ -0,0 +1,5 @@ +*~ +*.pyc +*.pyo +build*/ +examples/grc/*.py diff --git a/python/bruninga/CMakeLists.txt b/python/bruninga/CMakeLists.txt new file mode 100644 index 0000000..dd71238 --- /dev/null +++ b/python/bruninga/CMakeLists.txt @@ -0,0 +1,47 @@ +# Copyright 2011 Free Software Foundation, Inc. +# +# This file was generated by gr_modtool, a tool from the GNU Radio framework +# This file is a part of gr-bruninga +# +# SPDX-License-Identifier: GPL-3.0-or-later +# + +######################################################################## +# Include python install macros +######################################################################## +include(GrPython) +if(NOT PYTHONINTERP_FOUND) + return() +endif() + +add_subdirectory(bindings) + +######################################################################## +# Install python sources +######################################################################## +GR_PYTHON_INSTALL( + FILES + __init__.py + packet.py + hdlc_to_ax25.py + str_to_aprs.py + ax25_fsk_mod.py + fsk_demod.py + DESTINATION ${GR_PYTHON_DIR}/gnuradio/bruninga +) + +######################################################################## +# Handle the unit tests +######################################################################## +include(GrTest) + +set(GR_TEST_TARGET_DEPS gnuradio-bruninga) + +# Create a package directory that tests can import. It includes everything +# from `python/`. +add_custom_target( + copy_module_for_tests ALL + COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_CURRENT_SOURCE_DIR} + ${CMAKE_BINARY_DIR}/test_modules/gnuradio/bruninga/ +) + diff --git a/python/bruninga/__init__.py b/python/bruninga/__init__.py new file mode 100644 index 0000000..e39d150 --- /dev/null +++ b/python/bruninga/__init__.py @@ -0,0 +1,29 @@ +# +# Copyright 2008,2009 Free Software Foundation, Inc. +# +# SPDX-License-Identifier: GPL-3.0-or-later +# + +# The presence of this file turns this directory into a Python package + +''' +This is the GNU Radio BRUNINGA module. Place your Python package +description here (python/__init__.py). +''' +import os + +# import pybind11 generated symbols into the bruninga namespace +try: + # this might fail if the module is python-only + from .bruninga_python import * +except ModuleNotFoundError: + pass + +# import any pure python here +# +from .hdlc_to_ax25 import hdlc_to_ax25 +from .str_to_aprs import str_to_aprs +from .ax25_fsk_mod import ax25_fsk_mod +from .fsk_demod import fsk_demod + +from .packet import * \ No newline at end of file diff --git a/python/ax25_fsk_mod.py b/python/bruninga/ax25_fsk_mod.py similarity index 90% rename from python/ax25_fsk_mod.py rename to python/bruninga/ax25_fsk_mod.py index 2cc9d4e..e207a44 100644 --- a/python/ax25_fsk_mod.py +++ b/python/bruninga/ax25_fsk_mod.py @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 # -*- coding: utf-8 -*- # # Copyright 2014 <+YOU OR YOUR COMPANY+>. @@ -22,11 +22,11 @@ # TODO: Pickle -> JSON import pickle import numpy as np -import Queue +import queue import time from gnuradio import gr -from bruninga import packet +from gnuradio.bruninga import packet import pmt @@ -61,7 +61,7 @@ def __init__(self, samp_rate, preamble_len_ms, flag_count, mark_freq, self.preamble_len_bits = int((preamble_len_ms / 1000.0) * baud_rate / 2) self.sps = int(1.0 * self.samp_rate / self.baud_rate) - self.outbox = Queue.Queue() + self.outbox = queue.Queue() self.output_buffer = None self.opb_idx = 0 @@ -71,20 +71,20 @@ def __init__(self, samp_rate, preamble_len_ms, flag_count, mark_freq, def handle_msg(self, msg_pmt): msg = pmt.to_python(msg_pmt) if not (isinstance(msg, tuple) and len(msg) == 2): - print 'Invalid Message: Expected tuple of len 2' - print 'Dropping msg of type %s' % type(msg) + print('Invalid Message: Expected tuple of len 2') + print('Dropping msg of type %s' % type(msg)) return try: msg = pickle.loads(msg[1]) - except StandardError as e: - print 'Bad format: Expected pickled AX25Packet' - print str(e) + except Exception as e: + print('Bad format: Expected pickled AX25Packet') + print(str(e)) return # TODO: Take list of AX25 packets VVVV if not isinstance(msg, packet.AX25Packet): - print 'Expected AX25Packet, got %s' % type(msg) + print('Expected AX25Packet, got %s' % type(msg)) return self.outbox.put(msg) @@ -104,7 +104,7 @@ def ax25_to_fsk(self, msg): phase = 0 opb = np.empty(len(msg_bits) * self.sps) for i, bit in enumerate(msg_bits): - pinc = (mark_pinc if bit is 1 else space_pinc) + pinc = (mark_pinc if bit == 1 else space_pinc) phase += pinc tmp = np.arange(self.sps) * pinc + phase diff --git a/python/bruninga/bindings/CMakeLists.txt b/python/bruninga/bindings/CMakeLists.txt new file mode 100644 index 0000000..d3dd3e1 --- /dev/null +++ b/python/bruninga/bindings/CMakeLists.txt @@ -0,0 +1,48 @@ +# Copyright 2020 Free Software Foundation, Inc. +# +# This file is part of GNU Radio +# +# SPDX-License-Identifier: GPL-3.0-or-later +# + +######################################################################## +# Check if there is C++ code at all +######################################################################## +if(NOT bruninga_sources) + MESSAGE(STATUS "No C++ sources... skipping python bindings") + return() +endif(NOT bruninga_sources) + +######################################################################## +# Check for pygccxml +######################################################################## +GR_PYTHON_CHECK_MODULE_RAW( + "pygccxml" + "import pygccxml" + PYGCCXML_FOUND + ) + +include(GrPybind) + +######################################################################## +# Python Bindings +######################################################################## + +list(APPEND bruninga_python_files + direwolf_agc_python.cc + python_bindings.cc) + +GR_PYBIND_MAKE_OOT(bruninga + ../../.. + gr::bruninga + "${bruninga_python_files}") + +# copy in bindings .so file for use in QA test module +add_custom_target( + copy_bindings_for_tests ALL + COMMAND + ${CMAKE_COMMAND} -E copy "${CMAKE_CURRENT_BINARY_DIR}/*.so" + ${CMAKE_BINARY_DIR}/test_modules/gnuradio/bruninga/ + DEPENDS bruninga_python) + +install(TARGETS bruninga_python DESTINATION ${GR_PYTHON_DIR}/gnuradio/bruninga COMPONENT pythonapi) diff --git a/python/bruninga/bindings/README.md b/python/bruninga/bindings/README.md new file mode 100644 index 0000000..e69de29 diff --git a/python/bruninga/bindings/bind_oot_file.py b/python/bruninga/bindings/bind_oot_file.py new file mode 100644 index 0000000..543c699 --- /dev/null +++ b/python/bruninga/bindings/bind_oot_file.py @@ -0,0 +1,54 @@ +import warnings +import argparse +from gnuradio.bindtool import BindingGenerator +import sys +import tempfile + +parser = argparse.ArgumentParser(description='Bind a GR Out of Tree Block') +parser.add_argument('--module', type=str, + help='Name of gr module containing file to bind (e.g. fft digital analog)') + +parser.add_argument('--output_dir', default=tempfile.gettempdir(), + help='Output directory of generated bindings') +parser.add_argument('--prefix', help='Prefix of Installed GNU Radio') + +parser.add_argument( + '--filename', help="File to be parsed") + +parser.add_argument( + '--defines', help='Set additional defines for precompiler', default=(), nargs='*') +parser.add_argument( + '--include', help='Additional Include Dirs, separated', default=(), nargs='*') + +parser.add_argument( + '--status', help='Location of output file for general status (used during cmake)', default=None +) +parser.add_argument( + '--flag_automatic', default='0' +) +parser.add_argument( + '--flag_pygccxml', default='0' +) + +args = parser.parse_args() + +prefix = args.prefix +output_dir = args.output_dir +defines = tuple(','.join(args.defines).split(',')) +includes = ','.join(args.include) +name = args.module + +namespace = ['gr', name] +prefix_include_root = name + + +with warnings.catch_warnings(): + warnings.filterwarnings("ignore", category=DeprecationWarning) + + bg = BindingGenerator(prefix, namespace, + prefix_include_root, output_dir, define_symbols=defines, addl_includes=includes, + catch_exceptions=False, write_json_output=False, status_output=args.status, + flag_automatic=True if args.flag_automatic.lower() in [ + '1', 'true'] else False, + flag_pygccxml=True if args.flag_pygccxml.lower() in ['1', 'true'] else False) + bg.gen_file_binding(args.filename) diff --git a/python/bruninga/bindings/direwolf_agc_python.cc b/python/bruninga/bindings/direwolf_agc_python.cc new file mode 100644 index 0000000..a9f5922 --- /dev/null +++ b/python/bruninga/bindings/direwolf_agc_python.cc @@ -0,0 +1,61 @@ +/* + * Copyright 2022 Free Software Foundation, Inc. + * + * This file is part of GNU Radio + * + * SPDX-License-Identifier: GPL-3.0-or-later + * + */ + +/***********************************************************************************/ +/* This file is automatically generated using bindtool and can be manually edited */ +/* The following lines can be configured to regenerate this file during cmake */ +/* If manual edits are made, the following tags should be modified accordingly. */ +/* BINDTOOL_GEN_AUTOMATIC(0) */ +/* BINDTOOL_USE_PYGCCXML(0) */ +/* BINDTOOL_HEADER_FILE(direwolf_agc.h) */ +/* BINDTOOL_HEADER_FILE_HASH(d6219abcb03a2887fabfebaf24039cc5) */ +/***********************************************************************************/ + +#include +#include +#include + +namespace py = pybind11; + +#include +// pydoc.h is automatically generated in the build directory +#include + +void bind_direwolf_agc(py::module& m) +{ + + using direwolf_agc = ::gr::bruninga::direwolf_agc; + + + py::class_>(m, "direwolf_agc", D(direwolf_agc)) + + .def(py::init(&direwolf_agc::make), + py::arg("attack"), + py::arg("decay"), + D(direwolf_agc,make) + ) + + + + + ; + + + + +} + + + + + + + + diff --git a/python/bruninga/bindings/docstrings/README.md b/python/bruninga/bindings/docstrings/README.md new file mode 100644 index 0000000..a506c22 --- /dev/null +++ b/python/bruninga/bindings/docstrings/README.md @@ -0,0 +1 @@ +This directory stores templates for docstrings that are scraped from the include header files for each block diff --git a/python/bruninga/bindings/docstrings/direwolf_agc_pydoc_template.h b/python/bruninga/bindings/docstrings/direwolf_agc_pydoc_template.h new file mode 100644 index 0000000..9aca445 --- /dev/null +++ b/python/bruninga/bindings/docstrings/direwolf_agc_pydoc_template.h @@ -0,0 +1,27 @@ +/* + * Copyright 2022 Free Software Foundation, Inc. + * + * This file is part of GNU Radio + * + * SPDX-License-Identifier: GPL-3.0-or-later + * + */ +#include "pydoc_macros.h" +#define D(...) DOC(gr,bruninga, __VA_ARGS__ ) +/* + This file contains placeholders for docstrings for the Python bindings. + Do not edit! These were automatically extracted during the binding process + and will be overwritten during the build process + */ + + + + static const char *__doc_gr_bruninga_direwolf_agc = R"doc()doc"; + + + static const char *__doc_gr_bruninga_direwolf_agc_direwolf_agc = R"doc()doc"; + + + static const char *__doc_gr_bruninga_direwolf_agc_make = R"doc()doc"; + + diff --git a/python/bruninga/bindings/header_utils.py b/python/bruninga/bindings/header_utils.py new file mode 100644 index 0000000..7c26fe0 --- /dev/null +++ b/python/bruninga/bindings/header_utils.py @@ -0,0 +1,80 @@ +# Utilities for reading values in header files + +from argparse import ArgumentParser +import re + + +class PybindHeaderParser: + def __init__(self, pathname): + with open(pathname, 'r') as f: + self.file_txt = f.read() + + def get_flag_automatic(self): + # p = re.compile(r'BINDTOOL_GEN_AUTOMATIC\(([^\s])\)') + # m = p.search(self.file_txt) + m = re.search(r'BINDTOOL_GEN_AUTOMATIC\(([^\s])\)', self.file_txt) + if (m and m.group(1) == '1'): + return True + else: + return False + + def get_flag_pygccxml(self): + # p = re.compile(r'BINDTOOL_USE_PYGCCXML\(([^\s])\)') + # m = p.search(self.file_txt) + m = re.search(r'BINDTOOL_USE_PYGCCXML\(([^\s])\)', self.file_txt) + if (m and m.group(1) == '1'): + return True + else: + return False + + def get_header_filename(self): + # p = re.compile(r'BINDTOOL_HEADER_FILE\(([^\s]*)\)') + # m = p.search(self.file_txt) + m = re.search(r'BINDTOOL_HEADER_FILE\(([^\s]*)\)', self.file_txt) + if (m): + return m.group(1) + else: + return None + + def get_header_file_hash(self): + # p = re.compile(r'BINDTOOL_HEADER_FILE_HASH\(([^\s]*)\)') + # m = p.search(self.file_txt) + m = re.search(r'BINDTOOL_HEADER_FILE_HASH\(([^\s]*)\)', self.file_txt) + if (m): + return m.group(1) + else: + return None + + def get_flags(self): + return f'{self.get_flag_automatic()};{self.get_flag_pygccxml()};{self.get_header_filename()};{self.get_header_file_hash()};' + + +def argParse(): + """Parses commandline args.""" + desc = 'Reads the parameters from the comment block in the pybind files' + parser = ArgumentParser(description=desc) + + parser.add_argument("function", help="Operation to perform on comment block of pybind file", choices=[ + "flag_auto", "flag_pygccxml", "header_filename", "header_file_hash", "all"]) + parser.add_argument( + "pathname", help="Pathname of pybind c++ file to read, e.g. blockname_python.cc") + + return parser.parse_args() + + +if __name__ == "__main__": + # Parse command line options and set up doxyxml. + args = argParse() + + pbhp = PybindHeaderParser(args.pathname) + + if args.function == "flag_auto": + print(pbhp.get_flag_automatic()) + elif args.function == "flag_pygccxml": + print(pbhp.get_flag_pygccxml()) + elif args.function == "header_filename": + print(pbhp.get_header_filename()) + elif args.function == "header_file_hash": + print(pbhp.get_header_file_hash()) + elif args.function == "all": + print(pbhp.get_flags()) diff --git a/python/bruninga/bindings/python_bindings.cc b/python/bruninga/bindings/python_bindings.cc new file mode 100644 index 0000000..ab2b200 --- /dev/null +++ b/python/bruninga/bindings/python_bindings.cc @@ -0,0 +1,55 @@ +/* + * Copyright 2020 Free Software Foundation, Inc. + * + * This file is part of GNU Radio + * + * SPDX-License-Identifier: GPL-3.0-or-later + * + */ + +#include + +#define NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION +#include + +namespace py = pybind11; + +// Headers for binding functions +/**************************************/ +// The following comment block is used for +// gr_modtool to insert function prototypes +// Please do not delete +/**************************************/ +// BINDING_FUNCTION_PROTOTYPES( +void bind_direwolf_agc(py::module& m); +// ) END BINDING_FUNCTION_PROTOTYPES + + +// We need this hack because import_array() returns NULL +// for newer Python versions. +// This function is also necessary because it ensures access to the C API +// and removes a warning. +void* init_numpy() +{ + import_array(); + return NULL; +} + +PYBIND11_MODULE(bruninga_python, m) +{ + // Initialize the numpy C API + // (otherwise we will see segmentation faults) + init_numpy(); + + // Allow access to base block methods + py::module::import("gnuradio.gr"); + + /**************************************/ + // The following comment block is used for + // gr_modtool to insert binding function calls + // Please do not delete + /**************************************/ + // BINDING_FUNCTION_CALLS( + bind_direwolf_agc(m); + // ) END BINDING_FUNCTION_CALLS +} diff --git a/python/fsk_demod.py b/python/bruninga/fsk_demod.py similarity index 91% rename from python/fsk_demod.py rename to python/bruninga/fsk_demod.py index e9e6c29..ba0be0b 100644 --- a/python/fsk_demod.py +++ b/python/bruninga/fsk_demod.py @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 # -*- coding: utf-8 -*- # # Copyright 2014 <+YOU OR YOUR COMPANY+>. @@ -24,9 +24,10 @@ from gnuradio import digital from gnuradio import filter from gnuradio.filter import firdes +from gnuradio.fft import window from scipy import signal import math -import bruninga +import gnuradio.bruninga as bruninga class fsk_demod(gr.hier_block2): """ @@ -55,10 +56,10 @@ def __init__(self, inc_samp_rate): ################################################## # Stage 1: Force resampling to 19.2ksps self.rational_resampler_xxx_0 = filter.rational_resampler_fff( - interpolation=samp_rate, - decimation=self.inc_samp_rate, - taps=None, - fractional_bw=None, + interpolation=int(samp_rate), + decimation=int(self.inc_samp_rate), + taps=[], + fractional_bw=0, ) # Stage 2: Bandpass Filter @@ -66,14 +67,14 @@ def __init__(self, inc_samp_rate): self.bpf_trans = bpf_trans = 200 self.band_pass_filter_0 = filter.fir_filter_fff(1, firdes.band_pass( - 1, samp_rate, 1700-bpf_width, 1700+bpf_width, bpf_trans, firdes.WIN_RECTANGULAR, 6.76)) + 1, samp_rate, 1700-bpf_width, 1700+bpf_width, bpf_trans, window.WIN_RECTANGULAR, 6.76)) # Stage 3: Tone Detection self.window_len = window_len = self.samp_rate/self.baud_rate*2 - self.window = window = signal.windows.cosine(window_len) + self.window = fwindow = signal.windows.cosine(window_len) - self.freq_xlating_fir_filter_xxx_0_0 = filter.freq_xlating_fir_filter_fcf(4, (window), mark, samp_rate) - self.freq_xlating_fir_filter_xxx_0 = filter.freq_xlating_fir_filter_fcf(4, (window), space, samp_rate) + self.freq_xlating_fir_filter_xxx_0_0 = filter.freq_xlating_fir_filter_fcf(4, (fwindow), mark, samp_rate) + self.freq_xlating_fir_filter_xxx_0 = filter.freq_xlating_fir_filter_fcf(4, (fwindow), space, samp_rate) self.blocks_complex_to_mag_0_0 = blocks.complex_to_mag(1) self.blocks_complex_to_mag_0 = blocks.complex_to_mag(1) diff --git a/python/hdlc_to_ax25.py b/python/bruninga/hdlc_to_ax25.py similarity index 91% rename from python/hdlc_to_ax25.py rename to python/bruninga/hdlc_to_ax25.py index b45022e..744465f 100644 --- a/python/hdlc_to_ax25.py +++ b/python/bruninga/hdlc_to_ax25.py @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 # -*- coding: utf-8 -*- # # Copyright 2014 <+YOU OR YOUR COMPANY+>. @@ -57,7 +57,7 @@ def __init__(self): os.unlink('/tmp/kiss_pty') os.symlink(tty, '/tmp/kiss_pty') - print 'KISS PTY is: /tmp/kiss_pty (%s)' % os.ttyname(self.pty_slave) + print('KISS PTY is: /tmp/kiss_pty (%s)' % os.ttyname(self.pty_slave)) self.message_port_register_in(pmt.intern('in')) self.set_msg_handler(pmt.intern('in'), self.handle_msg) @@ -76,21 +76,21 @@ def handle_msg(self, msg_pmt): try: pkt = packet.from_bytes(msg) # TODO: Forward this packet on to other modules - print packet.dump(pkt) + print(packet.dump(pkt)) if pkt.control == 0x03 and pkt.protocol_id == 0xf0: os.write(self.pty_master, packet.kiss_wrap_bytes(msg)) self.count += 1 except ValueError as e: - print e + print(e) self.dropped += 1 - print 'Count:', self.count - print 'Dropped:', self.dropped - print '-'*8 + print('Count:', self.count) + print('Dropped:', self.dropped) + print('-'*8) def stop(self): - print 'Closing PTYs' + print('Closing PTYs') os.close(self.pty_master) os.close(self.pty_slave) try: diff --git a/python/packet.py b/python/bruninga/packet.py similarity index 99% rename from python/packet.py rename to python/bruninga/packet.py index fbdb956..2e701ad 100644 --- a/python/packet.py +++ b/python/bruninga/packet.py @@ -103,7 +103,7 @@ def checksum(self): bits = bin(byte)[2:].zfill(8) # Walk through bits (as string) backwards - for i in xrange(7, -1, -1): + for i in range(7, -1, -1): bit = 1 if bits[i] == '1' else 0 if (crc & 0x0001) != bit: crc = (crc >> 1) ^ 0x8408 @@ -152,7 +152,7 @@ def hdlc_wrap(self, preamble_count=1, trailer_count=1): # Invert data, differentially encode out = [1 if c == '0' else 0 for c in out] - for i in xrange(1, len(out) - 1): + for i in range(1, len(out) - 1): out[i] = out[i] ^ out[i-1] return out diff --git a/python/str_to_aprs.py b/python/bruninga/str_to_aprs.py similarity index 94% rename from python/str_to_aprs.py rename to python/bruninga/str_to_aprs.py index 062c191..66c5b53 100644 --- a/python/str_to_aprs.py +++ b/python/bruninga/str_to_aprs.py @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 # -*- coding: utf-8 -*- # # Copyright 2014 <+YOU OR YOUR COMPANY+>. @@ -21,7 +21,7 @@ import numpy from gnuradio import gr -from bruninga import packet +from gnuradio.bruninga import packet import pmt import pickle @@ -59,7 +59,7 @@ def __init__(self, src, dest, via): def handle_msg(self, msg_pmt): msg = pmt.to_python(msg_pmt) if not (isinstance(msg, tuple) and len(msg) == 2): - print 'Expected tuple of (None, str)' + print('Expected tuple of (None, str)') return msg = str(bytearray(msg[1]))[:-1] @@ -76,5 +76,5 @@ def handle_msg(self, msg_pmt): self.message_port_pub(pmt.intern('out'), pmt.to_pmt(out)) def work(self, input_items, output_items): - print 'No call' + print('No call') return 0 diff --git a/python/build_utils.py b/python/build_utils.py deleted file mode 100644 index cf58a97..0000000 --- a/python/build_utils.py +++ /dev/null @@ -1,226 +0,0 @@ -# -# Copyright 2004,2009,2012 Free Software Foundation, Inc. -# -# This file is part of GNU Radio -# -# GNU Radio is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 3, or (at your option) -# any later version. -# -# GNU Radio is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with GNU Radio; see the file COPYING. If not, write to -# the Free Software Foundation, Inc., 51 Franklin Street, -# Boston, MA 02110-1301, USA. -# - -"""Misc utilities used at build time -""" - -import re, os, os.path -from build_utils_codes import * - - -# set srcdir to the directory that contains Makefile.am -try: - srcdir = os.environ['srcdir'] -except KeyError, e: - srcdir = "." -srcdir = srcdir + '/' - -# set do_makefile to either true or false dependeing on the environment -try: - if os.environ['do_makefile'] == '0': - do_makefile = False - else: - do_makefile = True -except KeyError, e: - do_makefile = False - -# set do_sources to either true or false dependeing on the environment -try: - if os.environ['do_sources'] == '0': - do_sources = False - else: - do_sources = True -except KeyError, e: - do_sources = True - -name_dict = {} - -def log_output_name (name): - (base, ext) = os.path.splitext (name) - ext = ext[1:] # drop the leading '.' - - entry = name_dict.setdefault (ext, []) - entry.append (name) - -def open_and_log_name (name, dir): - global do_sources - if do_sources: - f = open (name, dir) - else: - f = None - log_output_name (name) - return f - -def expand_template (d, template_filename, extra = ""): - '''Given a dictionary D and a TEMPLATE_FILENAME, expand template into output file - ''' - global do_sources - output_extension = extract_extension (template_filename) - template = open_src (template_filename, 'r') - output_name = d['NAME'] + extra + '.' + output_extension - log_output_name (output_name) - if do_sources: - output = open (output_name, 'w') - do_substitution (d, template, output) - output.close () - template.close () - -def output_glue (dirname): - output_makefile_fragment () - output_ifile_include (dirname) - -def output_makefile_fragment (): - global do_makefile - if not do_makefile: - return -# overwrite the source, which must be writable; this should have been -# checked for beforehand in the top-level Makefile.gen.gen . - f = open (os.path.join (os.environ.get('gendir', os.environ.get('srcdir', '.')), 'Makefile.gen'), 'w') - f.write ('#\n# This file is machine generated. All edits will be overwritten\n#\n') - output_subfrag (f, 'h') - output_subfrag (f, 'i') - output_subfrag (f, 'cc') - f.close () - -def output_ifile_include (dirname): - global do_sources - if do_sources: - f = open ('%s_generated.i' % (dirname,), 'w') - f.write ('//\n// This file is machine generated. All edits will be overwritten\n//\n') - files = name_dict.setdefault ('i', []) - files.sort () - f.write ('%{\n') - for file in files: - f.write ('#include <%s>\n' % (file[0:-1] + 'h',)) - f.write ('%}\n\n') - for file in files: - f.write ('%%include <%s>\n' % (file,)) - -def output_subfrag (f, ext): - files = name_dict.setdefault (ext, []) - files.sort () - f.write ("GENERATED_%s =" % (ext.upper ())) - for file in files: - f.write (" \\\n\t%s" % (file,)) - f.write ("\n\n") - -def extract_extension (template_name): - # template name is something like: GrFIRfilterXXX.h.t - # we return everything between the penultimate . and .t - mo = re.search (r'\.([a-z]+)\.t$', template_name) - if not mo: - raise ValueError, "Incorrectly formed template_name '%s'" % (template_name,) - return mo.group (1) - -def open_src (name, mode): - global srcdir - return open (os.path.join (srcdir, name), mode) - -def do_substitution (d, in_file, out_file): - def repl (match_obj): - key = match_obj.group (1) - # print key - return d[key] - - inp = in_file.read () - out = re.sub (r"@([a-zA-Z0-9_]+)@", repl, inp) - out_file.write (out) - - - -copyright = '''/* -*- c++ -*- */ -/* - * Copyright 2003,2004 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ -''' - -def is_complex (code3): - if i_code (code3) == 'c' or o_code (code3) == 'c': - return '1' - else: - return '0' - - -def standard_dict (name, code3, package='gr'): - d = {} - d['NAME'] = name - d['NAME_IMPL'] = name+'_impl' - d['GUARD_NAME'] = 'INCLUDED_%s_%s_H' % (package.upper(), name.upper()) - d['GUARD_NAME_IMPL'] = 'INCLUDED_%s_%s_IMPL_H' % (package.upper(), name.upper()) - d['BASE_NAME'] = re.sub ('^' + package + '_', '', name) - d['SPTR_NAME'] = '%s_sptr' % name - d['WARNING'] = 'WARNING: this file is machine generated. Edits will be overwritten' - d['COPYRIGHT'] = copyright - d['TYPE'] = i_type (code3) - d['I_TYPE'] = i_type (code3) - d['O_TYPE'] = o_type (code3) - d['TAP_TYPE'] = tap_type (code3) - d['IS_COMPLEX'] = is_complex (code3) - return d - - -def standard_dict2 (name, code3, package): - d = {} - d['NAME'] = name - d['BASE_NAME'] = name - d['GUARD_NAME'] = 'INCLUDED_%s_%s_H' % (package.upper(), name.upper()) - d['WARNING'] = 'WARNING: this file is machine generated. Edits will be overwritten' - d['COPYRIGHT'] = copyright - d['TYPE'] = i_type (code3) - d['I_TYPE'] = i_type (code3) - d['O_TYPE'] = o_type (code3) - d['TAP_TYPE'] = tap_type (code3) - d['IS_COMPLEX'] = is_complex (code3) - return d - -def standard_impl_dict2 (name, code3, package): - d = {} - d['NAME'] = name - d['IMPL_NAME'] = name - d['BASE_NAME'] = name.rstrip("impl").rstrip("_") - d['GUARD_NAME'] = 'INCLUDED_%s_%s_H' % (package.upper(), name.upper()) - d['WARNING'] = 'WARNING: this file is machine generated. Edits will be overwritten' - d['COPYRIGHT'] = copyright - d['FIR_TYPE'] = "fir_filter_" + code3 - d['CFIR_TYPE'] = "fir_filter_" + code3[0:2] + 'c' - d['TYPE'] = i_type (code3) - d['I_TYPE'] = i_type (code3) - d['O_TYPE'] = o_type (code3) - d['TAP_TYPE'] = tap_type (code3) - d['IS_COMPLEX'] = is_complex (code3) - return d diff --git a/python/build_utils_codes.py b/python/build_utils_codes.py deleted file mode 100644 index 9ea96ba..0000000 --- a/python/build_utils_codes.py +++ /dev/null @@ -1,52 +0,0 @@ -# -# Copyright 2004 Free Software Foundation, Inc. -# -# This file is part of GNU Radio -# -# GNU Radio is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 3, or (at your option) -# any later version. -# -# GNU Radio is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with GNU Radio; see the file COPYING. If not, write to -# the Free Software Foundation, Inc., 51 Franklin Street, -# Boston, MA 02110-1301, USA. -# - -def i_code (code3): - return code3[0] - -def o_code (code3): - if len (code3) >= 2: - return code3[1] - else: - return code3[0] - -def tap_code (code3): - if len (code3) >= 3: - return code3[2] - else: - return code3[0] - -def i_type (code3): - return char_to_type[i_code (code3)] - -def o_type (code3): - return char_to_type[o_code (code3)] - -def tap_type (code3): - return char_to_type[tap_code (code3)] - - -char_to_type = {} -char_to_type['s'] = 'short' -char_to_type['i'] = 'int' -char_to_type['f'] = 'float' -char_to_type['c'] = 'gr_complex' -char_to_type['b'] = 'unsigned char' diff --git a/swig/CMakeLists.txt b/swig/CMakeLists.txt deleted file mode 100644 index 4ae820d..0000000 --- a/swig/CMakeLists.txt +++ /dev/null @@ -1,65 +0,0 @@ -# Copyright 2011 Free Software Foundation, Inc. -# -# This file is part of GNU Radio -# -# GNU Radio is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 3, or (at your option) -# any later version. -# -# GNU Radio is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with GNU Radio; see the file COPYING. If not, write to -# the Free Software Foundation, Inc., 51 Franklin Street, -# Boston, MA 02110-1301, USA. - -######################################################################## -# Check if there is C++ code at all -######################################################################## -if(NOT bruninga_sources) - MESSAGE(STATUS "No C++ sources... skipping swig/") - return() -endif(NOT bruninga_sources) - -######################################################################## -# Include swig generation macros -######################################################################## -find_package(SWIG) -find_package(PythonLibs 2) -if(NOT SWIG_FOUND OR NOT PYTHONLIBS_FOUND) - return() -endif() -include(GrSwig) -include(GrPython) - -######################################################################## -# Setup swig generation -######################################################################## -foreach(incdir ${GNURADIO_RUNTIME_INCLUDE_DIRS}) - list(APPEND GR_SWIG_INCLUDE_DIRS ${incdir}/gnuradio/swig) -endforeach(incdir) - -set(GR_SWIG_LIBRARIES gnuradio-bruninga) -set(GR_SWIG_DOC_FILE ${CMAKE_CURRENT_BINARY_DIR}/bruninga_swig_doc.i) -set(GR_SWIG_DOC_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/../include) - -GR_SWIG_MAKE(bruninga_swig bruninga_swig.i) - -######################################################################## -# Install the build swig module -######################################################################## -GR_SWIG_INSTALL(TARGETS bruninga_swig DESTINATION ${GR_PYTHON_DIR}/bruninga) - -######################################################################## -# Install swig .i files for development -######################################################################## -install( - FILES - bruninga_swig.i - ${CMAKE_CURRENT_BINARY_DIR}/bruninga_swig_doc.i - DESTINATION ${GR_INCLUDE_DIR}/bruninga/swig -) diff --git a/swig/bruninga_swig.i b/swig/bruninga_swig.i deleted file mode 100644 index bd42204..0000000 --- a/swig/bruninga_swig.i +++ /dev/null @@ -1,16 +0,0 @@ -/* -*- c++ -*- */ - -#define BRUNINGA_API - -%include "gnuradio.i" // the common stuff - -//load generated python docstrings -%include "bruninga_swig_doc.i" - -%{ -#include "bruninga/direwolf_agc.h" -%} - - -%include "bruninga/direwolf_agc.h" -GR_SWIG_BLOCK_MAGIC2(bruninga, direwolf_agc);