diff options
| author | Even Rouault <even.rouault@spatialys.com> | 2018-11-14 17:40:42 +0100 |
|---|---|---|
| committer | Even Rouault <even.rouault@spatialys.com> | 2018-11-14 22:48:29 +0100 |
| commit | d928db15d53805d9b728b440079756081961c536 (patch) | |
| tree | e862a961d26bedb34c58e4f28ef0bdeedb5f3225 /scripts/generate_breathe_friendly_general_doc.py | |
| parent | 330e8bf686f9c4524075ca1ff50cbca6c9e091da (diff) | |
| download | PROJ-d928db15d53805d9b728b440079756081961c536.tar.gz PROJ-d928db15d53805d9b728b440079756081961c536.zip | |
Implement RFC 2: Initial integration of "GDAL SRS barn" work
This work mostly consists of:
- a C++ implementation of the ISO-19111:2018 / OGC Topic 2
"Referencing by coordinates" classes to represent Datums,
Coordinate systems, CRSs (Coordinate Reference Systems) and
Coordinate Operations.
- methods to convert between this C++ modeling and WKT1, WKT2
and PROJ string representations of those objects
- management and query of a SQLite3 database of CRS and Coordinate Operation definition
- a C API binding part of those capabilities
This is all-in-one squashed commit of the work of
https://github.com/OSGeo/proj.4/pull/1040
Diffstat (limited to 'scripts/generate_breathe_friendly_general_doc.py')
| -rw-r--r-- | scripts/generate_breathe_friendly_general_doc.py | 130 |
1 files changed, 130 insertions, 0 deletions
diff --git a/scripts/generate_breathe_friendly_general_doc.py b/scripts/generate_breathe_friendly_general_doc.py new file mode 100644 index 00000000..746bdd04 --- /dev/null +++ b/scripts/generate_breathe_friendly_general_doc.py @@ -0,0 +1,130 @@ +#!/usr/bin/env python +############################################################################### +# $Id$ +# +# Project: PROJ +# Purpose: Rework general_doc.dox in a Breathe friendly (hacky) way +# Author: Even Rouault <even.rouault at spatialys.com> +# +############################################################################### +# Copyright (c) 2018, Even Rouault <even.rouault at spatialys.com> +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the "Software"), +# to deal in the Software without restriction, including without limitation +# the rights to use, copy, modify, merge, publish, distribute, sublicense, +# and/or sell copies of the Software, and to permit persons to whom the +# Software is furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included +# in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +# DEALINGS IN THE SOFTWARE. +############################################################################### + +import os + +# HACK HACK HACK +# Transform a .dox with section, subsection, etc.. in fake namespaces +# since Breathe cannot handle such sections and references to them + +script_dir_name = os.path.dirname(os.path.realpath(__file__)) +general_doc_dox = os.path.join(os.path.dirname( + script_dir_name), 'src', 'general_doc.dox') +general_doc_dox_reworked_h = os.path.join(os.path.dirname( + script_dir_name), 'docs/build/tmp_breathe', 'general_doc.dox.reworked.h') + +out = open(general_doc_dox_reworked_h, 'wt') + + +class Section: + + def __init__(self): + self.name = None + self.title = None + self.content = '' + self.children = [] + pass + + def serialize(self, out): + out.write("/** \\brief %s\n" % self.title) + out.write("\n") + out.write("%s\n" % self.content) + out.write("*/\n") + out.write("namespace %s {\n" % self.name) + out.write("}\n") + for child in self.children: + child.serialize(out) + + +stack = [] +current = None + +for line in open(general_doc_dox, 'rt').readlines(): + line = line.strip() + if line == '/*!' or line == '*/': + continue + + if line.startswith('\page'): + + tokens = line.split(' ') + new = Section() + new.name = tokens[1] + new.title = ' '.join(tokens[2:]) + current = new + stack.append(new) + continue + + if line.startswith('\section'): + + stack = stack[0:1] + current = stack[-1] + + tokens = line.split(' ') + new = Section() + new.name = tokens[1] + new.title = ' '.join(tokens[2:]) + current.children.append(new) + current = new + stack.append(new) + continue + + if line.startswith('\subsection'): + + stack = stack[0:2] + current = stack[-1] + + tokens = line.split(' ') + new = Section() + new.name = tokens[1] + new.title = ' '.join(tokens[2:]) + current.children.append(new) + current = new + stack.append(new) + continue + + if line.startswith('\subsubsection'): + + stack = stack[0:3] + current = stack[-1] + + tokens = line.split(' ') + new = Section() + new.name = tokens[1] + new.title = ' '.join(tokens[2:]) + current.children.append(new) + current = new + stack.append(new) + continue + + if current: + current.content += line + '\n' + +for child in stack[0].children: + child.serialize(out) |
