mirror of https://github.com/CGAL/cgal
Merge remote-tracking branch 'cgal/6.0.x-branch'
This commit is contained in:
commit
36d98614df
|
|
@ -0,0 +1,55 @@
|
|||
# Use an official Fedora as a parent image for the build stage
|
||||
FROM fedora:latest AS sources_deps
|
||||
|
||||
# Set environment variables to non-interactive
|
||||
ENV DEBIAN_FRONTEND=noninteractive
|
||||
|
||||
# Install dependencies
|
||||
RUN dnf update -y && dnf install -y \
|
||||
wget \
|
||||
make \
|
||||
gcc \
|
||||
gcc-c++ \
|
||||
patch \
|
||||
cmake \
|
||||
bison \
|
||||
flex \
|
||||
unzip \
|
||||
python3 \
|
||||
&& dnf clean all
|
||||
|
||||
# Copy the patch file to the build context
|
||||
COPY cgal-NO_ADDITIONAL_DETAILS.patch .
|
||||
|
||||
FROM sources_deps AS build
|
||||
|
||||
# Build and install Doxygen from sources
|
||||
ARG DOXYGEN_VERSION=1.9.6
|
||||
ARG MAKEFLAGS=-j$(nproc)
|
||||
RUN if [ -n "$DEBUG"];then set -x && make --version && ls -lZ /tmp && id; fi \
|
||||
&& DOXYGEN_VERSION_UNDERSCORE=$(echo ${DOXYGEN_VERSION} | sed 's/\./_/g') \
|
||||
&& wget https://github.com/doxygen/doxygen/archive/refs/tags/Release_${DOXYGEN_VERSION_UNDERSCORE}.zip \
|
||||
&& unzip Release_${DOXYGEN_VERSION_UNDERSCORE}.zip \
|
||||
&& cd doxygen-Release_${DOXYGEN_VERSION_UNDERSCORE} \
|
||||
&& patch -p1 < ../cgal-NO_ADDITIONAL_DETAILS.patch \
|
||||
&& mkdir build \
|
||||
&& cd build \
|
||||
&& cmake -G "Unix Makefiles" -DCMAKE_BUILD_TYPE=Release .. \
|
||||
&& cmake --build . \
|
||||
&& cmake --install . \
|
||||
&& mkdir -p /usr/local/share/doc/doxygen && cp ../LICENSE /usr/local/share/doc/doxygen/LICENSE.TXT \
|
||||
&& cd ../.. \
|
||||
&& rm -rf doxygen-Release_${DOXYGEN_VERSION_UNDERSCORE} Release_${DOXYGEN_VERSION_UNDERSCORE}.zip
|
||||
|
||||
# Use a smaller base image for the final stage
|
||||
FROM fedora:latest
|
||||
|
||||
# Install necessary runtime dependencies
|
||||
RUN set -x \
|
||||
&& dnf update -y && dnf install -y graphviz 'perl(Getopt::Std)' tex-bibtex cmake python3-lxml python3-pyquery \
|
||||
&& dnf clean all
|
||||
|
||||
# Copy Doxygen from the build stage
|
||||
COPY --from=build /usr/local/bin/doxygen /usr/local/bin
|
||||
COPY --from=build /usr/local/share/doc/doxygen/LICENSE.TXT /usr/local/share/doc/doxygen/LICENSE.TXT
|
||||
RUN doxygen --version
|
||||
|
|
@ -0,0 +1,23 @@
|
|||
SHELL := /bin/bash
|
||||
DOXYGEN_VERSIONS := 1.12.0 1.11.0 1.10.0 1.9.8 1.9.7 1.9.6
|
||||
|
||||
.PHONY: all build-% push-% build push
|
||||
|
||||
all: build
|
||||
@echo "Use `$(MAKE) push` to push the images to the registry."
|
||||
|
||||
build-%:
|
||||
@echo "MAKEFLAGS: $(MAKEFLAGS)"
|
||||
@echo "Building Doxygen version $*..."
|
||||
if [ "$$(getenforce || true)" == "Enforcing" ]; then Z=:z; else Z=; fi; \
|
||||
F="$(MAKEFLAGS)"; F=$${F##*fifo:}; F=$${F%% *}; \
|
||||
if [ -p "$$F" ]; then echo "The GNU make FIFO file exists:"; ls -l $$F; VOLUME_ARGS="-v $$F:$$F$$Z"; echo -- $$VOLUME_ARGS; fi; \
|
||||
podman build --build-arg DOXYGEN_VERSION=$* --build-arg "MAKEFLAGS=$(MAKEFLAGS)" $$VOLUME_ARGS -t cgal/doxygen:$* .
|
||||
|
||||
push-%: build-%
|
||||
@echo "Pushing cgal/doxygen:$*..."
|
||||
podman push cgal/doxygen:$*
|
||||
|
||||
build: $(foreach version,$(DOXYGEN_VERSIONS),build-$(version))
|
||||
|
||||
push: $(foreach version,$(DOXYGEN_VERSIONS),push-$(version))
|
||||
|
|
@ -0,0 +1,44 @@
|
|||
diff --git a/src/config.xml b/src/config.xml
|
||||
index 13910958a6..31f1354e44 100644
|
||||
--- a/src/config.xml
|
||||
+++ b/src/config.xml
|
||||
@@ -893,6 +893,18 @@ Go to the <a href="commands.html">next</a> section or return to the
|
||||
\note This will also disable the warnings about undocumented members
|
||||
that are normally produced when \ref cfg_warnings "WARNINGS" is
|
||||
set to \c YES.
|
||||
+]]>
|
||||
+ </docs>
|
||||
+ </option>
|
||||
+ </group>
|
||||
+ <group name='Build' docs='Build related configuration options'>
|
||||
+ <option type='bool' id='NO_ADDITIONAL_DETAILS' defval='0'>
|
||||
+ <docs>
|
||||
+<![CDATA[
|
||||
+ When the \c EXTRACT_ALL tag is set to \c YES and a member or class
|
||||
+ as no documentation, no detailed section will be produced if
|
||||
+ the \c NO_ADDITIONAL_DETAILS tag is set to \c YES.
|
||||
+ This tag has no effect if the \c EXTRACT_ALL tag is set to \c NO.
|
||||
]]>
|
||||
</docs>
|
||||
</option>
|
||||
diff --git a/src/memberdef.cpp b/src/memberdef.cpp
|
||||
index 08d9bf24c5..ab04e994c5 100644
|
||||
--- a/src/memberdef.cpp
|
||||
+++ b/src/memberdef.cpp
|
||||
@@ -2501,6 +2501,7 @@ bool MemberDefImpl::hasDetailedDescription() const
|
||||
if (!m_hasDetailedDescriptionCached)
|
||||
{
|
||||
bool extractAll = Config_getBool(EXTRACT_ALL);
|
||||
+ bool xAllNoDetailedSec = Config_getBool(NO_ADDITIONAL_DETAILS);
|
||||
bool alwaysDetailedSec = Config_getBool(ALWAYS_DETAILED_SEC);
|
||||
bool repeatBrief = Config_getBool(REPEAT_BRIEF);
|
||||
bool briefMemberDesc = Config_getBool(BRIEF_MEMBER_DESC);
|
||||
@@ -2512,7 +2513,7 @@ bool MemberDefImpl::hasDetailedDescription() const
|
||||
// the member has detailed documentation because the user added some comments
|
||||
bool docFilter =
|
||||
// extract all is enabled
|
||||
- extractAll ||
|
||||
+ (extractAll && !xAllNoDetailedSec) ||
|
||||
// has detailed docs
|
||||
!documentation().isEmpty() ||
|
||||
// has inbody docs
|
||||
|
|
@ -0,0 +1,16 @@
|
|||
{
|
||||
"name": "CGAL Doxygen Dev Container, version 1.12.0, with CGAL patch",
|
||||
"image": "docker.io/cgal/doxygen:1.12.0",
|
||||
"features": {
|
||||
"ghcr.io/devcontainers/features/git:1.3.2": {}
|
||||
},
|
||||
"customizations": {
|
||||
"vscode": {
|
||||
"extensions": [
|
||||
"ms-vscode.cmake-tools",
|
||||
"bbenoist.Doxygen",
|
||||
"ms-vscode.cpptools"
|
||||
]
|
||||
}
|
||||
},
|
||||
}
|
||||
|
|
@ -0,0 +1,29 @@
|
|||
[distrobox-doxygen-1.12.0]
|
||||
image=cgal/doxygen:1.12.0
|
||||
exported_bins="/usr/local/bin/doxygen /usr/bin/perl /usr/bin/cmake /usr/bin/python3"
|
||||
exported_bins_path=$HOME/.local/bin-doxygen-1.12.0
|
||||
|
||||
[distrobox-doxygen-1.11.0]
|
||||
image=cgal/doxygen:1.11.0
|
||||
exported_bins="/usr/local/bin/doxygen /usr/bin/perl /usr/bin/cmake /usr/bin/python3"
|
||||
exported_bins_path=$HOME/.local/bin-doxygen-1.11.0
|
||||
|
||||
[distrobox-doxygen-1.10.0]
|
||||
image=cgal/doxygen:1.10.0
|
||||
exported_bins="/usr/local/bin/doxygen /usr/bin/perl /usr/bin/cmake /usr/bin/python3"
|
||||
exported_bins_path=$HOME/.local/bin-doxygen-1.10.0
|
||||
|
||||
[distrobox-doxygen-1.9.8]
|
||||
image=cgal/doxygen:1.9.8
|
||||
exported_bins="/usr/local/bin/doxygen /usr/bin/perl /usr/bin/cmake /usr/bin/python3"
|
||||
exported_bins_path=$HOME/.local/bin-doxygen-1.9.8
|
||||
|
||||
[distrobox-doxygen-1.9.7]
|
||||
image=cgal/doxygen:1.9.7
|
||||
exported_bins="/usr/local/bin/doxygen /usr/bin/perl /usr/bin/cmake /usr/bin/python3"
|
||||
exported_bins_path=$HOME/.local/bin-doxygen-1.9.7
|
||||
|
||||
[distrobox-doxygen-1.9.6]
|
||||
image=cgal/doxygen:1.9.6
|
||||
exported_bins="/usr/local/bin/doxygen /usr/bin/perl /usr/bin/cmake /usr/bin/python3"
|
||||
exported_bins_path=$HOME/.local/bin-doxygen-1.9.6
|
||||
|
|
@ -178,6 +178,7 @@ void copy_face_graph_impl(const SourceMesh& sm, TargetMesh& tm,
|
|||
}
|
||||
|
||||
// detect if there are some non-manifold umbrellas and fix missing halfedge target pointers
|
||||
std::map<sm_vertex_descriptor, std::vector<tm_halfedge_descriptor>> nm_umbrella_map;
|
||||
typedef typename std::vector<tm_edge_descriptor>::iterator edge_iterator;
|
||||
for (edge_iterator it=new_edges.begin(); it!=new_edges.end(); ++it)
|
||||
{
|
||||
|
|
@ -199,10 +200,19 @@ void copy_face_graph_impl(const SourceMesh& sm, TargetMesh& tm,
|
|||
// we recover tm_v using the halfedge associated to the target vertex of
|
||||
// the halfedge in sm corresponding to nh_t. This is working because we
|
||||
// set the vertex halfedge pointer to the "same" halfedges.
|
||||
tm_vertex_descriptor tm_v =
|
||||
target( get(hs_to_ht, halfedge(target(get(ht_to_hs, nh_t), sm), sm)), tm);
|
||||
for(tm_halfedge_descriptor ht : halfedges_around_target(nh_t, tm))
|
||||
set_target(ht, tm_v, tm);
|
||||
|
||||
sm_vertex_descriptor vs = target(get(ht_to_hs, nh_t), sm);
|
||||
sm_halfedge_descriptor hs = halfedge(vs, sm);
|
||||
if (hs == boost::graph_traits<SourceMesh>::null_halfedge())
|
||||
{ // special case for Face_filtered_graph with a non-manifold input with not all umbrellas selected
|
||||
nm_umbrella_map[vs].push_back(nh_t);
|
||||
}
|
||||
else
|
||||
{
|
||||
tm_vertex_descriptor tm_v = target( get(hs_to_ht, hs), tm);
|
||||
for(tm_halfedge_descriptor ht : halfedges_around_target(nh_t, tm))
|
||||
set_target(ht, tm_v, tm);
|
||||
}
|
||||
}
|
||||
nh_t = opposite(nh_t, tm);
|
||||
}
|
||||
|
|
@ -210,6 +220,18 @@ void copy_face_graph_impl(const SourceMesh& sm, TargetMesh& tm,
|
|||
break;
|
||||
}
|
||||
}
|
||||
|
||||
for (const auto& vs_and_hts : nm_umbrella_map)
|
||||
{
|
||||
sm_vertex_descriptor v_sm = vs_and_hts.first;
|
||||
tm_vertex_descriptor v_tm = add_vertex(tm);
|
||||
*v2v++=std::make_pair(v_sm, v_tm);
|
||||
set_halfedge(v_tm, vs_and_hts.second.front(), tm);
|
||||
put(tm_vpm, v_tm, conv(get(sm_vpm, v_sm)));
|
||||
|
||||
for (tm_halfedge_descriptor h_tm : vs_and_hts.second)
|
||||
set_target(h_tm, v_tm, tm);
|
||||
}
|
||||
}
|
||||
|
||||
} // end of namespace internal
|
||||
|
|
|
|||
|
|
@ -579,6 +579,102 @@ void test_Polyhedron_tetrahedron()
|
|||
test_mesh<Polyhedron, FCMap, Poly_Adapter>(poly_adapter);
|
||||
}
|
||||
|
||||
void non_manifoldness_test1()
|
||||
{
|
||||
// works out-of-the-box because Face_filtered_graph handles already non-manifold cycles
|
||||
SM mesh;
|
||||
SM::Vertex_index v0=add_vertex(mesh);
|
||||
SM::Vertex_index v1=add_vertex(mesh);
|
||||
SM::Vertex_index v2=add_vertex(mesh);
|
||||
SM::Vertex_index v3=add_vertex(mesh);
|
||||
SM::Vertex_index v4=add_vertex(mesh);
|
||||
SM::Vertex_index v5=add_vertex(mesh);
|
||||
SM::Vertex_index v6=add_vertex(mesh);
|
||||
|
||||
SM::Face_index f0=mesh.add_face(v0,v1,v2);
|
||||
SM::Face_index f1=mesh.add_face(v0,v3,v4);
|
||||
SM::Face_index f2=mesh.add_face(v0,v5,v6);
|
||||
SM::Halfedge_index h = halfedge(f0,mesh);
|
||||
while(target(h, mesh)!=v0)
|
||||
h=next(h,mesh);
|
||||
set_halfedge(v0, h, mesh);
|
||||
|
||||
std::vector<SM::Face_index> selection = {f1, f2};
|
||||
CGAL::Face_filtered_graph<SM> ffg(mesh, selection);
|
||||
|
||||
SM out;
|
||||
CGAL::copy_face_graph(ffg, out);
|
||||
|
||||
assert(vertices(out).size()==5);
|
||||
assert(faces(out).size()==2);
|
||||
}
|
||||
|
||||
void non_manifoldness_test2()
|
||||
{
|
||||
SM mesh;
|
||||
SM::Vertex_index v0=add_vertex(mesh);
|
||||
SM::Vertex_index v0b=add_vertex(mesh);
|
||||
SM::Vertex_index v0t=add_vertex(mesh);
|
||||
|
||||
SM::Vertex_index v1=add_vertex(mesh);
|
||||
SM::Vertex_index v2=add_vertex(mesh);
|
||||
SM::Vertex_index v3=add_vertex(mesh);
|
||||
|
||||
SM::Vertex_index v4=add_vertex(mesh);
|
||||
SM::Vertex_index v5=add_vertex(mesh);
|
||||
SM::Vertex_index v6=add_vertex(mesh);
|
||||
|
||||
SM::Vertex_index v7=add_vertex(mesh);
|
||||
SM::Vertex_index v8=add_vertex(mesh);
|
||||
SM::Vertex_index v9=add_vertex(mesh);
|
||||
|
||||
SM::Face_index f00=mesh.add_face(v1,v2,v0);
|
||||
SM::Face_index f01=mesh.add_face(v2,v3,v0);
|
||||
SM::Face_index f02=mesh.add_face(v3,v1,v0);
|
||||
|
||||
SM::Face_index f10=mesh.add_face(v4,v5,v0b);
|
||||
SM::Face_index f11=mesh.add_face(v5,v6,v0b);
|
||||
SM::Face_index f12=mesh.add_face(v6,v4,v0b);
|
||||
|
||||
SM::Face_index f20=mesh.add_face(v7,v8,v0t);
|
||||
SM::Face_index f21=mesh.add_face(v8,v9,v0t);
|
||||
SM::Face_index f22=mesh.add_face(v9,v7,v0t);
|
||||
|
||||
assert(f00!=SM::Face_index());
|
||||
assert(f01!=SM::Face_index());
|
||||
assert(f02!=SM::Face_index());
|
||||
assert(f10!=SM::Face_index());
|
||||
assert(f11!=SM::Face_index());
|
||||
assert(f12!=SM::Face_index());
|
||||
assert(f20!=SM::Face_index());
|
||||
assert(f21!=SM::Face_index());
|
||||
assert(f22!=SM::Face_index());
|
||||
|
||||
#define UPDATE_V(fX, vX) \
|
||||
{ SM::Halfedge_index h = halfedge(fX,mesh);\
|
||||
while(target(h, mesh)!=vX) h=next(h,mesh);\
|
||||
set_target(h, v0, mesh); }
|
||||
|
||||
UPDATE_V(f10, v0b)
|
||||
UPDATE_V(f11, v0b)
|
||||
UPDATE_V(f12, v0b)
|
||||
UPDATE_V(f20, v0t)
|
||||
UPDATE_V(f21, v0t)
|
||||
UPDATE_V(f22, v0t)
|
||||
|
||||
remove_vertex(v0b, mesh);
|
||||
remove_vertex(v0t, mesh);
|
||||
|
||||
std::vector<SM::Face_index> selection = {f10, f11, f12, f20, f21, f22};
|
||||
CGAL::Face_filtered_graph<SM> ffg(mesh, selection);
|
||||
|
||||
SM out;
|
||||
CGAL::copy_face_graph(ffg, out);
|
||||
|
||||
assert(vertices(out).size()==7);
|
||||
assert(faces(out).size()==6);
|
||||
}
|
||||
|
||||
int main(int, char**)
|
||||
{
|
||||
test_graph_range(poly_data());
|
||||
|
|
@ -590,6 +686,8 @@ int main(int, char**)
|
|||
#endif
|
||||
|
||||
test_invalid_selections();
|
||||
non_manifoldness_test1();
|
||||
non_manifoldness_test2();
|
||||
|
||||
test_SM_tetrahedron();
|
||||
test_Polyhedron_tetrahedron();
|
||||
|
|
|
|||
|
|
@ -24,6 +24,8 @@ else()
|
|||
set(CGAL_ROOT "${CMAKE_SOURCE_DIR}")
|
||||
endif()
|
||||
|
||||
cmake_minimum_required(VERSION 3.18..3.29) # for list(SORT ... COMPARE NATURAL)
|
||||
|
||||
find_package(Doxygen REQUIRED)
|
||||
find_package(Python3 REQUIRED COMPONENTS Interpreter)
|
||||
|
||||
|
|
@ -32,7 +34,7 @@ if (NOT Python3_EXECUTABLE)
|
|||
return()
|
||||
endif()
|
||||
|
||||
message(STATUS ${Python3_EXECUTABLE})
|
||||
message(VERBOSE "Using Python version ${Python3_VERSION}: ${Python3_EXECUTABLE}")
|
||||
|
||||
if(NOT DOXYGEN_FOUND)
|
||||
message(WARNING "Cannot build the documentation without Doxygen!")
|
||||
|
|
@ -275,7 +277,7 @@ set(CGAL_DOC_DXY_DIR "${CMAKE_BINARY_DIR}/doc_dxy")
|
|||
file(MAKE_DIRECTORY "${CGAL_DOC_DXY_DIR}")
|
||||
|
||||
#Setting the resource directory depending on the version of doxygen
|
||||
set(CGAL_DOC_RESOURCE_DIR_DEFAULT "${CMAKE_CURRENT_LIST_DIR}/resources/1.10.0")
|
||||
set(CGAL_DOC_RESOURCE_PREFIX_DIR "${CMAKE_CURRENT_LIST_DIR}/resources")
|
||||
|
||||
# first look if resources for the specific doxygen version is available, fallback
|
||||
# on the default otherwise
|
||||
|
|
@ -283,12 +285,46 @@ set(CGAL_DOC_RESOURCE_DIR_DEFAULT "${CMAKE_CURRENT_LIST_DIR}/resources/1.10.0")
|
|||
#select only the version number (not the commit hash)
|
||||
string(REPLACE " " ";" DOXYGEN_VERSION ${DOXYGEN_VERSION})
|
||||
list(GET DOXYGEN_VERSION 0 DOXYGEN_VERSION)
|
||||
message(VERBOSE "Doxygen version ${DOXYGEN_VERSION}: ${DOXYGEN_EXECUTABLE}")
|
||||
|
||||
if(EXISTS "${CMAKE_CURRENT_LIST_DIR}/resources/${DOXYGEN_VERSION}")
|
||||
set(CGAL_DOC_RESOURCE_DIR
|
||||
"${CMAKE_CURRENT_LIST_DIR}/resources/${DOXYGEN_VERSION}")
|
||||
# The Doxygen version is search in that sorted list (to find the index for which the version is less or equal)
|
||||
set(CGAL_DOXYGEN_RESOURCES_VERSIONS 1.8.13 1.9.6 1.10.0)
|
||||
list(SORT CGAL_DOXYGEN_RESOURCES_VERSIONS COMPARE NATURAL)
|
||||
|
||||
# The GLOB is here to check that the list in CGAL_DOXYGEN_RESOURCES_VERSIONS is correct.
|
||||
# CGAL_DOXYGEN_RESOURCES_DIRS is also used below.
|
||||
file(GLOB CGAL_DOXYGEN_RESOURCES_DIRS
|
||||
RELATIVE "${CGAL_DOC_RESOURCE_PREFIX_DIR}"
|
||||
"${CGAL_DOC_RESOURCE_PREFIX_DIR}/*")
|
||||
list(SORT CGAL_DOXYGEN_RESOURCES_DIRS COMPARE NATURAL)
|
||||
|
||||
if(NOT CGAL_DOXYGEN_RESOURCES_DIRS STREQUAL CGAL_DOXYGEN_RESOURCES_VERSIONS)
|
||||
message(FATAL "The directories in ${CGAL_DOC_RESOURCE_PREFIX_DIR} do not match the
|
||||
expected versions: [${CGAL_DOXYGEN_RESOURCES_VERSIONS}] vs [${CGAL_DOXYGEN_RESOURCES_DIRS}]")
|
||||
endif()
|
||||
|
||||
function(CGAL_insert_in_sorted_list list_name value)
|
||||
set(list ${${list_name}})
|
||||
if(NOT value IN_LIST list)
|
||||
list(APPEND list "${value}")
|
||||
list(SORT list COMPARE NATURAL)
|
||||
endif()
|
||||
set(${list_name} ${list} PARENT_SCOPE)
|
||||
endfunction()
|
||||
|
||||
if(DOXYGEN_VERSION IN_LIST CGAL_DOXYGEN_RESOURCES_VERSIONS)
|
||||
list(FIND CGAL_DOXYGEN_RESOURCES_VERSIONS "${DOXYGEN_VERSION}" DOXYGEN_VERSION_INDEX)
|
||||
else()
|
||||
set(CGAL_DOC_RESOURCE_DIR "${CGAL_DOC_RESOURCE_DIR_DEFAULT}")
|
||||
CGAL_insert_in_sorted_list(CGAL_DOXYGEN_RESOURCES_VERSIONS ${DOXYGEN_VERSION})
|
||||
list(FIND CGAL_DOXYGEN_RESOURCES_VERSIONS ${DOXYGEN_VERSION} DOXYGEN_VERSION_INDEX)
|
||||
math(EXPR DOXYGEN_VERSION_INDEX "${DOXYGEN_VERSION_INDEX} - 1")
|
||||
endif()
|
||||
list(GET CGAL_DOXYGEN_RESOURCES_DIRS "${DOXYGEN_VERSION_INDEX}" CGAL_DOC_RESOURCE_DIR)
|
||||
set(CGAL_DOC_RESOURCE_DIR "${CGAL_DOC_RESOURCE_PREFIX_DIR}/${CGAL_DOC_RESOURCE_DIR}")
|
||||
if(NOT EXISTS "${CGAL_DOC_RESOURCE_DIR}")
|
||||
message(FATAL_ERROR "Doxygen resources for version ${DOXYGEN_VERSION} not found")
|
||||
else()
|
||||
message(VERBOSE "Using Doxygen resources from ${CGAL_DOC_RESOURCE_DIR}")
|
||||
endif()
|
||||
|
||||
set(CGAL_DOC_BIBLIO_DIR "${CMAKE_CURRENT_LIST_DIR}/biblio")
|
||||
|
|
|
|||
|
|
@ -35,6 +35,6 @@ These options should suffice to create a `CMakeLists.txt` script
|
|||
for most directories containing programs. However, in some special
|
||||
cases, it might still be required to create the script manually, for
|
||||
instance, if some source files/executables need a different linking than
|
||||
other source files. The Section \subpage devman_create_and_use_a_cmakelist provides more details.
|
||||
other source files. The Section \ref devman_create_and_use_a_cmakelist provides more details.
|
||||
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -23,4 +23,5 @@ The developer manual is primarily aimed at \cgal developers, but may also be int
|
|||
- \subpage devman_info
|
||||
- \subpage devman_create_cgal_CMakeLists
|
||||
- \subpage deprecated
|
||||
- \subpage Doxygen_for_CGAL
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -19,6 +19,7 @@ FILTER_PATTERNS = *.txt=${CMAKE_BINARY_DIR}/pkglist_filter
|
|||
|
||||
HTML_EXTRA_FILES += ${CGAL_DOC_RESOURCE_DIR}/hacks.js \
|
||||
${CGAL_DOC_RESOURCE_DIR}/menu_version.js \
|
||||
${CGAL_DOC_RESOURCE_DIR}/cgal_stylesheet.css \
|
||||
${CMAKE_BINARY_DIR}/how_to_cite_cgal.bib \
|
||||
${CMAKE_BINARY_DIR}/how_to_cite.html \
|
||||
${CGAL_PACKAGE_DOC_DIR}/fig/g-196x196-doc.png
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
# Doxygen for CGAL #
|
||||
\page Doxygen_for_CGAL Doxygen for CGAL
|
||||
|
||||
This is the documentation of doxygen hacks that are applied to make
|
||||
the output of Doxygen more suitable to CGAL. It explains the general
|
||||
|
|
@ -14,17 +14,17 @@ hacks that create what you see.
|
|||
### Package Overview ###
|
||||
|
||||
The package overview is build by having a special command that is
|
||||
filtered by the python script pkglist_filter.py.
|
||||
filtered by the python script `pkglist_filter.py`.
|
||||
|
||||
A command has to be of the form \package_listing{PKG_NAME}, where
|
||||
PKG_NAME cannot contain a closing }.
|
||||
A command has to be of the form `\package_listing{PKG_NAME}`, where
|
||||
`PKG_NAME` cannot contain a closing `}`.
|
||||
|
||||
The command is replaced by the text between the two delimiters
|
||||
PkgDescBegin and PkgDescEnd in the file ../PKG_NAME/doc/PKG_NAME/PackageDescription.txt
|
||||
`cgalPkgDescriptionBegin` and `cgalPkgDescriptionEnd` in the file `../PKG_NAME/doc/PKG_NAME/PackageDescription.txt`
|
||||
|
||||
If PKG_NAME is of the form A/B the selected file is
|
||||
../A/doc/B/PackageDescription.txt. This is to support packages like
|
||||
TDS_2, which don't reside in their own packages in the SCM.
|
||||
If `PKG_NAME` is of the form `A/B` the selected file is
|
||||
`../A/doc/B/PackageDescription.txt`. This is to support packages like
|
||||
`TDS_2`, which don't reside in their own packages in the SCM.
|
||||
|
||||
### Footnotes ###
|
||||
|
||||
|
|
@ -50,13 +50,13 @@ LaTex.
|
|||
This hack fiddles with the internal structures and functions of the
|
||||
treeview to remove the unnecessary intermediate top-level module part.
|
||||
|
||||
It assigns the first element of the module array (found in module.js)
|
||||
It assigns the first element of the module array (found in `module.js`)
|
||||
to the Reference Manual entry. This makes the tree view link go to
|
||||
that group directly instead of the intermediate link. It also removes
|
||||
one level of nesting.
|
||||
|
||||
Unfortunately this changes the overall tree structure. To adjust for
|
||||
that we hijack the gotoNode function of navtree.js and *augment* it
|
||||
that we hijack the `gotoNode` function of `navtree.js` and *augment* it
|
||||
with an additional check for the specific tree level we borked and
|
||||
redirect it.
|
||||
|
||||
|
|
@ -486,24 +486,6 @@ HTML_HEADER = ${CGAL_DOC_HEADER_PACKAGE}
|
|||
|
||||
HTML_FOOTER = ${CGAL_DOC_RESOURCE_DIR}/footer.html
|
||||
|
||||
# The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined
|
||||
# cascading style sheets that are 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 therefore more robust against future updates.
|
||||
# Doxygen will copy the style sheet files to the output directory.
|
||||
# Note: The order of the extra style sheet files is of importance (e.g. the last
|
||||
# style sheet in the list overrules the setting of the previous ones in the
|
||||
# list).
|
||||
# Note: Since the styling of scrollbars can currently not be overruled in
|
||||
# Webkit/Chromium, the styling will be left out of the default doxygen.css if
|
||||
# one or more extra stylesheets have been specified. So if scrollbar
|
||||
# customization is desired it has to be added explicitly. For an example see the
|
||||
# documentation.
|
||||
# This tag requires that the tag GENERATE_HTML is set to YES.
|
||||
|
||||
HTML_EXTRA_STYLESHEET = ${CGAL_DOC_RESOURCE_DIR}/cgal_stylesheet.css
|
||||
|
||||
# Doxygen stores a couple of settings persistently in the browser (via e.g.
|
||||
# cookies). By default these settings apply to all HTML pages generated by
|
||||
# doxygen across all projects. The HTML_PROJECT_COOKIE tag can be used to store
|
||||
|
|
|
|||
|
|
@ -26,6 +26,7 @@ $search
|
|||
$mathjax
|
||||
$darkmode
|
||||
<link href="$relpath^$stylesheet" rel="stylesheet" type="text/css" />
|
||||
<link href="$relpath$../Manual/cgal_stylesheet.css" rel="stylesheet" type="text/css" />
|
||||
$extrastylesheet
|
||||
</head>
|
||||
<body>
|
||||
|
|
|
|||
|
|
@ -43,6 +43,7 @@
|
|||
<script type="text/javascript" src="../Manual/search/search.js"></script>
|
||||
<!-- Manually done below. -->
|
||||
<link href="$relpath^../Manual/$stylesheet" rel="stylesheet" type="text/css" />
|
||||
<link href="$relpath$../Manual/cgal_stylesheet.css" rel="stylesheet" type="text/css" />
|
||||
$mathjax
|
||||
$darkmode
|
||||
<script src="$relpath^topics.js" type="text/javascript"></script>
|
||||
|
|
|
|||
|
|
@ -477,24 +477,6 @@ HTML_HEADER = ${CGAL_DOC_HEADER_PACKAGE}
|
|||
|
||||
HTML_FOOTER = ${CGAL_DOC_RESOURCE_DIR}/footer.html
|
||||
|
||||
# The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined
|
||||
# cascading style sheets that are 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 therefore more robust against future updates.
|
||||
# Doxygen will copy the style sheet files to the output directory.
|
||||
# Note: The order of the extra style sheet files is of importance (e.g. the last
|
||||
# style sheet in the list overrules the setting of the previous ones in the
|
||||
# list).
|
||||
# Note: Since the styling of scrollbars can currently not be overruled in
|
||||
# Webkit/Chromium, the styling will be left out of the default doxygen.css if
|
||||
# one or more extra stylesheets have been specified. So if scrollbar
|
||||
# customization is desired it has to be added explicitly. For an example see the
|
||||
# documentation.
|
||||
# This tag requires that the tag GENERATE_HTML is set to YES.
|
||||
|
||||
HTML_EXTRA_STYLESHEET = ${CGAL_DOC_RESOURCE_DIR}/cgal_stylesheet.css
|
||||
|
||||
# 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 YES can help to show when doxygen was last run and thus if the
|
||||
|
|
|
|||
|
|
@ -17,7 +17,6 @@ $treeview
|
|||
$search
|
||||
$mathjax
|
||||
<link href="$relpath^$stylesheet" rel="stylesheet" type="text/css" />
|
||||
<!-- This should probably be an extrastylesheet instead of hardcoded. -->
|
||||
<link href="$relpath$../Manual/cgal_stylesheet.css" rel="stylesheet" type="text/css" />
|
||||
$extrastylesheet
|
||||
</head>
|
||||
|
|
|
|||
|
|
@ -33,7 +33,6 @@
|
|||
<script type="text/javascript" src="../Manual/search/search.js"></script>
|
||||
<!-- Manually done below. -->
|
||||
<link href="$relpath^../Manual/$stylesheet" rel="stylesheet" type="text/css" />
|
||||
<!-- This should probably be an extrastylesheet instead of hardcoded. -->
|
||||
<link href="$relpath$../Manual/cgal_stylesheet.css" rel="stylesheet" type="text/css" />
|
||||
<script type="text/x-mathjax-config">
|
||||
MathJax.Hub.Config({
|
||||
|
|
|
|||
|
|
@ -486,24 +486,6 @@ HTML_HEADER = ${CGAL_DOC_HEADER_PACKAGE}
|
|||
|
||||
HTML_FOOTER = ${CGAL_DOC_RESOURCE_DIR}/footer.html
|
||||
|
||||
# The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined
|
||||
# cascading style sheets that are 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 therefore more robust against future updates.
|
||||
# Doxygen will copy the style sheet files to the output directory.
|
||||
# Note: The order of the extra style sheet files is of importance (e.g. the last
|
||||
# style sheet in the list overrules the setting of the previous ones in the
|
||||
# list).
|
||||
# Note: Since the styling of scrollbars can currently not be overruled in
|
||||
# Webkit/Chromium, the styling will be left out of the default doxygen.css if
|
||||
# one or more extra stylesheets have been specified. So if scrollbar
|
||||
# customization is desired it has to be added explicitly. For an example see the
|
||||
# documentation.
|
||||
# This tag requires that the tag GENERATE_HTML is set to YES.
|
||||
|
||||
HTML_EXTRA_STYLESHEET = ${CGAL_DOC_RESOURCE_DIR}/cgal_stylesheet.css
|
||||
|
||||
# If you want full control over the layout of the generated HTML pages it might
|
||||
# be necessary to disable the index and replace it with your own. The
|
||||
# DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top
|
||||
|
|
|
|||
|
|
@ -23,7 +23,6 @@ $search
|
|||
$mathjax
|
||||
$darkmode
|
||||
<link href="$relpath^$stylesheet" rel="stylesheet" type="text/css" />
|
||||
<!-- This should probably be an extrastylesheet instead of hardcoded. -->
|
||||
<link href="$relpath$../Manual/cgal_stylesheet.css" rel="stylesheet" type="text/css" />
|
||||
$extrastylesheet
|
||||
</head>
|
||||
|
|
|
|||
|
|
@ -39,7 +39,6 @@
|
|||
<script type="text/javascript" src="../Manual/search/search.js"></script>
|
||||
<!-- Manually done below. -->
|
||||
<link href="$relpath^../Manual/$stylesheet" rel="stylesheet" type="text/css" />
|
||||
<!-- This should probably be an extrastylesheet instead of hardcoded. -->
|
||||
<link href="$relpath$../Manual/cgal_stylesheet.css" rel="stylesheet" type="text/css" />
|
||||
$mathjax
|
||||
$darkmode
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
#!/usr/bin/env python
|
||||
#!/usr/bin/env python3
|
||||
|
||||
import codecs
|
||||
import re
|
||||
|
|
@ -28,16 +28,10 @@ def main(argv):
|
|||
for l in pkgdesc:
|
||||
do_print = do_print or re.match(".*cgalPkgDescriptionBegin.*", l)
|
||||
if(do_print):
|
||||
if hasattr(sys.stdout, 'buffer'):
|
||||
sys.stdout.buffer.write(l.encode('utf-8')) #python3
|
||||
else:
|
||||
sys.stdout.write(l.encode('utf-8')) #python2
|
||||
sys.stdout.buffer.write(l.encode('utf-8'))
|
||||
do_print = do_print and (not re.match(".*cgalPkgDescriptionEnd.*", l))
|
||||
else:
|
||||
if hasattr(sys.stdout, 'buffer'):
|
||||
sys.stdout.buffer.write(line.encode('utf-8')) #python3
|
||||
else:
|
||||
sys.stdout.write(line.encode('utf-8')) #python2
|
||||
sys.stdout.buffer.write(line.encode('utf-8'))
|
||||
|
||||
if __name__ == "__main__":
|
||||
main(sys.argv)
|
||||
|
|
|
|||
Loading…
Reference in New Issue