From d928db15d53805d9b728b440079756081961c536 Mon Sep 17 00:00:00 2001 From: Even Rouault Date: Wed, 14 Nov 2018 17:40:42 +0100 Subject: 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 --- scripts/generate_breathe_friendly_general_doc.py | 130 +++++++++++++++++++++++ 1 file changed, 130 insertions(+) create mode 100644 scripts/generate_breathe_friendly_general_doc.py (limited to 'scripts/generate_breathe_friendly_general_doc.py') 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 +# +############################################################################### +# Copyright (c) 2018, Even Rouault +# +# 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) -- cgit v1.2.3